Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Theme09.doc
Скачиваний:
4
Добавлен:
21.12.2018
Размер:
178.69 Кб
Скачать

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

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

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

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

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

Апаратуру вводу/виводу можна розглядати як сукупність апаратури процесорів, що здатні працювати паралельно відносно один одного також щодо центрального процесора (процесорів). На таких «процесорах» виконуються так звані зовнішні процеси. Наприклад, для зовнішнього пристрою (пристрою вводу/виводу) зовнішній процес може являти собою сукупність операцій, що забезпечують переклад друкуючої голівки, просування паперу на одну позицію, зміну кольору чорнила чи друк якихось символів. Зовнішні процеси, використовуючи апаратуру вводу/виводу, взаємодіють як між собою, так і зі звичайними «програмними» процесами, що виконуються на центральному процесорі. Важливим при цьому є та обставина, що швидкості виконанні зовнішніх процесів будуть істотно (часом, па чи порядок більше) відрізнятися від швидкості виконання звичайних («внутрішніх») процесів. Для своєї нормальної роботи зовнішні і внутрішні процеси обов'язково повинні синхронізуватися. Для згладжування цього дефекту сильної невідповідності швидкостей між внутрішніми і зовнішніми процесами використовують згадане вище буферизація. Таким чином, можна говорити про систему рівнобіжних взаємодіючих процесів. Буфери є критичним ресурсом у відношенні внутрішніх (програмних) і зовнішніх процесів, що при рівнобіжному своєму розвитку информационно взаємодіють. Через буфер (буфери) дані або посилаються від деякого процесу до адресуемому зовнішнього (операція виведення даних на зовнішній пристрій), або від зовнішнього процесу передаються деякому програмному процесу (операція зчитування даних). Введення буферування як засобу інформаційної взаємодії висуває проблему в керування цими системними буферами, що зважується засобами супервізорної частини ОС. При цьому на супервізор покладаються задачі не тільки по виділенню і звільненню буферів у системній області пам'яті, але і синхронізації процесів відповідно до стану операцій по заповненню чи звільненню буферів, а також їхнього чекання, якщо вільних буферів у наявності немає, а запит на ввід/вивід вимагає буферування. Звичайно супервізор вводу/виводу для рішення перерахованих задач використовує стандартні засоби синхронізації, прийняті в даній ОС. Тому якщо ОС має розвинуті засоби для рішення проблем паралельного виконання взаємодіючих додатків і задач, то, як правило, вона реалізує й асинхронний ввід/вивід.

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