Програмований ввід-вивід.
Основна ідея організації програмного забезпечення вводу-виводу складається в розбивці його на кілька рівнів, причому нижні рівні забезпечують екранування особливостей апаратури від верхніх, а ті, у свою чергу, забезпечують зручний інтерфейс для користувачів. Ключовим принципом є незалежність від пристроїв. Вид програми не повинний залежати від того, чи читає вона дані з гнучкого чи диска з твердого диска. Дуже близької до ідеї незалежності від пристроїв є ідея однакового іменування, тобто для іменування пристроїв повинні бути прийняті єдині правила. Іншим важливим питанням для програмного забезпечення вводу-виводу є обробка помилок.
Узагалі говорячи, помилки варто обробляти якнайближче до апаратури. Якщо контролер виявляє помилку читання, то він повинний спробувати неї скорегувати. Якщо ж це йому не вдається, то виправленням помилок повинний зайнятися драйвер пристрою. Багато помилок можуть зникати при повторних спробах виконання операцій вводу-виводу, наприклад, помилки, викликані наявністю порошин на голівках чи читання на диску. І тільки якщо нижній рівень не може справитися з помилкою, він повідомляє про помилку верхньому рівню. Ще одне ключове питання — це використання блокуючих (синхронних) і неблокуючих (асинхронних) передач. Більшість операцій фізичного вводу-виводу виконується асинхронно — процесор починає передачу і переходить на іншу роботу, поки не настає переривання. Користувацькі програми набагато легше писати, якщо операції вводу-виводу що блокують — після команди READ програма автоматично припиняється доти, поки дані не потраплять у буфер програми. ОС виконує операції вводу-виводу асинхронно, але представляє їх для користувальницьких програм у синхронній формі. Остання проблема полягає в тому, що одні пристрої є поділюваними, а інші — виділеними. Диски — це поділювані пристрої, тому що одночасний доступ декількох користувачів до диска не являє собою проблему. Прінтери — це виділені пристрої, тому що не можна змішувати рядка, що друкуються різними користувачами. Наявність виділених пристроїв створює для операційної системи деякі проблеми. Для рішення поставлених проблем доцільно розділити програмне забезпечення вводу-виводу на чотири шари (малюнок 2.30):
- Обробка переривань,
- Драйвери пристроїв,
- Незалежна від пристроїв частина операційної системи,
- Користувальницька частина програмного забезпечення.