Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS(методичка).docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
403.88 Кб
Скачать

2.5.2. Активне і пасивне очікування

Поговоримо докладніше про один важливий розходженні між способами введення / виводу за опитуванням готовності і по перериваннях.

Основною особливістю введення / виводу за опитуванням готовності є цикл очікування. Якщо виконується введення або виведення на повільне пристрій (наприклад, матричний принтер), то цей скромно виглядає цикл буде займати, м'яко кажучи, 99% всього часу роботи процесора. Якщо відбувається очікування введення з клавіатури, то процесор взагалі не буде робити нічого корисного, поки користувач не спроможеться натиснути клавішу.

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

Спосіб очікування програмою деякої події, заснований на постійній циклічної перевірці очікуваного умови, називається активним очікуванням (busy waiting). Це поняття застосовується не тільки по відношенню до вводу / виводу, але і в багатьох інших ситуаціях, що виникають при роботі системних і прикладних програм.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]