Основні концепції організації введення-виведення в операційних системах
Як відомо, введення-виведення вважається однією з найскладніших областей проектування операційних систем, у якій складно застосувати загальний підхід і в якій рясніють приватні методи. Насправді джерелом складності є величезна кількість пристроїв введення-виведення різноманітної природи, які повинна підтримувати операційна система. При цьому перед творцями операційної системи постає дуже непросте завдання — не тільки забезпечити ефективне керування пристроями вводу-виводу, але й створити зручний та ефективний віртуальний інтерфейс пристроїв введення-виводу, що дозволяє прикладним програмістам просто зчитувати або зберігати дані, не звертаючи уваги на специфіку пристроїв та проблеми розподілу пристроїв між завданнями, що виконуються. Система вводу-виводу, здатна поєднати в одній моделі широкий спектр пристроїв, має бути універсальною. Вона повинна враховувати потреби існуючих пристроїв від простої миші до клавіатур, принтерів, графічних дисплеїв, дискових накопичувачів, компакт-дисків і навіть мереж. З іншого боку, необхідно забезпечити доступ до пристроїв введення-виводу для безлічі завдань, що паралельно виконуються, причому так, щоб вони якнайменше заважали один одному.
Тому найголовнішим є наступний принцип:будь-які операції з управління введенням-висновком оголошуються привілейованими і можуть виконуватися тільки кодом самої операційної системи. Для забезпечення цього принципу в більшості процесорів навіть вводятьсярежими користувачатасупервізора. Останній ще називаютьпривілейованим режимом, аборежимом ядра. Як правило, в режимі супервізора виконання команд введення-виводу дозволено, а в режимі користувача - заборонено. Звернення докомандам вводу-виводу в режимі користувача викликаєвиключення, і управління через механізм переривань передається коду операційної системи. Хоча можливі і більш складні схеми, в яких у ряді випадків програмам користувача може бути дозволене безпосереднє виконання команд введення-виведення.
Ще раз підкреслимо, що ми, перш за все, говоримо про мультипрограмні операційні системи, для яких існує проблема поділу ресурсів, і одним з основних видів ресурсів є пристрої вводу-виводу та відповідне програмне забезпечення, за допомогою якого здійснюється обмін даними між зовнішніми пристроями та оперативною пам'яттю. Крім пристроїв введення-виводу, що розділяються (ці пристрої допускають поділ за допомогою механізму доступу) існують пристрої, що не розділяються. Прикладами пристрою можуть бути накопичувач на магнітних дисках, пристрій читання компакт-дисків. Це пристрої прямого доступу. Приклади пристроїв, що не розділяються, — принтер, накопичувач на магнітних стрічках. Це пристрої із послідовним доступом. Операційні системи повинні керувати і тими, і іншими, надаючи можливість паралельно виконуваним завданням їх використовувати. Можна назвати три основні причини, з яких не можна дозволяти кожній окремій програмі користувача звертатися до зовнішніх пристроїв безпосередньо.
-Необхідність вирішувати можливі конфлікти у доступі до пристроїв введення-виводу. Наприклад, нехай дві паралельно виконуються програми намагаються вивести на друк результати своєї роботи. Якщо не передбачити зовнішнього керування пристроєм друку, то в результаті ми можемо отримати абсолютно нечитаний текст, тому що кожна програма час від часу виводитиме своїдані, що перемежуються з даними від іншої програми. Або можна взяти ситуацію, коли для однієї програми необхідно прочитати дані з одного сектора магнітного диска, а для іншої записати результати в інший сектор того ж накопичувача. Якщо операції введення-виведення не будуть відстежуватися якимось третім (зовнішнім) процесом-арбітром, то після позиціонування магнітної головки для першого завдання може відразу прийти команда позиціонування головки для другого завдання, і обидві операції введення-виведення не зможуть виконатися коректно.
-Бажання збільшити ефективність використання ресурсів введення-виведення. Наприклад, у накопичувача на магнітних дисках час підведення головки читання/запису до необхідної доріжки і час звернення до певного сектора можуть значно (до тисячі разів) перевищувати час пересилання даних. В результаті, якщо завдання по черзі звертаються до циліндрів, далеко віддалених один від одного, корисна робота, що виконується накопичувачем, може бути істотно знижена.
-Необхідність позбавити програми введення-виведення від помилок. Помилки в програмах введення-виведення можуть призвести до краху всіх обчислювальних процесів, тому що частина операцій введення-виведення потрібні самій операційній системі. У ряді операційних систем системне введення-виведення має істотно вищі привілеї, ніж введення-виведення завдань користувача. Тому системний код, керуючий операціями введення-виведення, дуже ретельно налагоджується та оптимізується для підвищення надійності обчислень та ефективності використання обладнання. Отже, керування введенням-виведенням здійснюється компонентом операційної системи, який часто називаютьсупервізором введення-виводу. Перелічимо основні завдання, що покладаються на супервізор.
1. Модуль супервізораопераційної системи, іноді званийсупервізором задач, отримує запити від прикладних завдань на виконання тих чи інших операцій, у тому числі на введення-виведення. Ці запити перевіряються на коректність і якщо вони відповідають специфікаціям і не містять помилок, то обробляються далі. В іншому випадку користувачеві (завданню) видається відповідне діагностичне повідомлення про недійсність (некоректність) запиту.
2. Супервізор вводу-виводу отримує запити на введення-виведення від супервізора завдань або від програмних модулів самої операційної системи.
3. Супервізор вводу-виводу викликає відповідні розподільники каналів і контролерів, планує введення-виведення (визначає черговість надання пристроїв введення-виводу завданням, що зажадали ці пристрої). Запит на введення-виведення або відразу виконується, або ставиться в чергу на виконання.
4. Супервізор вводу-виводу ініціює операції вводу-виводу (передає керування відповідним драйверам) і у разі керування вводом-виводом з використанням переривань надає процесор диспетчеру завдань з тим, щоб передати його першому завданню, що стоїть у черзі на виконання.
5. При отриманні сигналів переривань від пристроїв введення-виведення супервізор ідентифікує ці сигнали (див. розділ «Перерив» у розділі 1) і передає керування відповідним програмам обробки переривань. 6. Супервізор вводу-виводу здійснює передачу повідомлень про помилки, якщо такі відбуваються в процесі управління операціями вводу-виводу.
7. Супервізор вводу-виводу надсилає повідомлення про завершення операції введення-виводу завдання, що запросило цю операцію, і знімає її зі стану очікування вводу-виводу, якщо завдання очікувало завершення операції.
В разі,якщо пристрій введення-виведення є ініціативним*, управління з боку супервізора введення-виводу полягатиме в активізації відповідного обчислювального процесу (переведення його в стан готовності до виконання).
Таким чином, прикладні програми (а в загальному випадку - всі обробні програми) не можуть безпосередньо зв'язуватися з пристроями введення-виведення незалежно від того, в якому режимі використовуються ці пристрої (монопольно або спільно), але, встановивши відповідні значення параметрів у запиті на введення -Висновок, що визначають необхідну операцію та кількість споживаних ресурсів, звертаються до супервізора завдань. Останній передає керування супервізору введення-виводу, який і запускає необхідні логічні та фізичні операції.
Ініціативним називають такий пристрій введення-виведення, за сигналом прориву від якого, запускається відповідна йому програма (зазвичай це не стандартний пристрій введення-виводу, а набір датчиків). Така програма, з одного боку, не є драйвером, тому їй не потрібно керувати операціями обміну даними, але, з іншого боку, запуск такої програми здійснюється саме за подіями, пов'язаними з генерацією пристроєм виводу-введення відповідного сигналу. Різниця між драйверами, що працюють за перериваннями, та ініціативними програмами полягає в їхньому статусі. Драйвер є компонентом операційної системи і часто виконується не як обчислювальний процес, а як системний об'єкт, а ініціативна програма є звичайним обчислювальним процесом, тільки його запуск здійснюється за ініціативою зовнішнього пристрою.
Виняток - це певний вид внутрішнього переривання. Цим терміном, по-перше, позначають кілька синхронних переривань, а по-друге,наголошують, що ситуація, що викликала запит на переривання, є винятковою, тобто відрізняється від звичайної.
Зазначений вище запит на введення-виведення повинен задовольняти вимогам API тієї операційної системи, серед якої виконується додаток. Параметри, які вказуються в запитах на введення-виведення, передаються не тільки в послідовностях, що викликають, створюваних за специфікаціями API, але і як дані, що зберігаються у відповідних системних таблицях. Усі параметри, які будуть стояти в послідовності, що викликають, надаються компілятором і відображають вимоги програміста, а також постійні відомості про операційну систему і архітектуру комп'ютера в цілому. Змінні відомості про обчислювальну систему (її конфігурація, склад обладнання, склад та особливості системного програмного забезпечення) містяться у спеціальних системних таблицях. Процесору, каналам прямого доступу на згадку і контролерам необхідно передавати конкретну двійкову інформацію, з допомогою якої здійснюється управління оборудованием. Ця конкретна двійкова інформація як кодів і даних часто готується з допомогою препроцессорів, але її зберігається у системних таблицях.