Синхронний і асинхронний ввід / вивід

Програміст, який розробляє прикладні програми, не повинен думати про такі речі, як спосіб роботи системних програм з регістрами пристроїв. Система приховує від додатків деталі низькорівневої роботи з пристроями. Однак відмінність між організацією вводу / виводу за опитуванням і по перериваннях знаходить певне відображення і на рівні системних функцій, у вигляді функцій для синхронного та асинхронного введення / виводу.

Виконання функції синхронного вводу / виводу включає в себе запуск операції введення / виводу і очікування завершення цієї операції. Тільки після завершення введення / виводу функція повертає керування отримала програмі.

Синхронний введення / висновок - це найбільш звичний для програмістів спосіб роботи з пристроями. Стандартні процедури вводу / виводу мов програмування працюють саме таким способом.

Виклик функції асинхронного введення / виводу означає тільки запуск відповідної операції. Після цього функція відразу повертає управління отримала програмі, не чекаючи завершення операції.

Розглянемо, наприклад, асинхронний ввід даних. Зрозуміло, що програма не може звертатися до даних, поки немає впевненості, що їх введення завершений. Але цілком можливо, що програма може поки що зайнятися іншою роботою, а не простоювати в очікуванні.

Рано чи пізно програма таки повинна приступити до роботи з введеними даними, але попередньо переконатися, що асинхронна операція вже завершилася. Для цього різні ОС надають кошти, які можна розбити на три групи.

· Очікування завершення операції. Це як би «друга половина синхронної операції». Програма спочатку запустила операцію, потім виконала якісь сторонні дії, а тепер чекає закінчення операції, як при синхронному вводі / виводі.

· Перевірка завершення операції. При цьому програма не очікує, а тільки перевіряє стан асинхронної операції. Якщо ввід / вивід ще не завершений, то програма має можливість ще якийсь час погуляти.

· Призначення процедури завершення. У цьому випадку, запускаючи асинхронну операцію, програма користувача вказує системі адресу користувальницької процедури або функції, яка повинна бути викликана системою після завершення операції. Сама програма може більше не цікавитися ходом введення / виводу, система нагадає їй про це в потрібний момент, викликавши зазначену функцію. Цей спосіб найбільш гнучкий, оскільки в процедурі завершення користувач може передбачити будь-які дії.

У Windows прикладній програмі доступні всі три способи завершення асинхронних операцій. В UNIX асинхронних функцій введення / виводу немає, однак той же ефект асинхронності може бути досягнутий інакше, шляхом запуску додаткового процесу.

Асинхронне виконання введення / виводу дозволяє в деяких випадках підвищити продуктивність роботи і забезпечити додаткові функціональні можливості. Без такої найпростішої форми асинхронного введення, як «введення з клавіатури без очікування», були б неможливі численні комп'ютерні ігри та тренажери. У той же час логіка програми, що використовує асинхронні операції, складніше, ніж при синхронних операціях.

А в чому полягає згаданий вище зв'язок між синхронними / асинхронними операціями й способами організації введення / виводення, розглянутими у попередньому пункті? Відповісти самі на це питання.