Основні поняття і визначення процесу вводу/виводу.
Як відомо, вводу/виводу вважається однією із самих складних областей проектування операційних систем, у якій складно застосувати загальний підхід через велику кількість приватних методів. Складність виникає через величезне число пристроїв вводу/виводу різноманітної природи, що повинна підтримувати ОС. При цьому перед творцями ОС постає дуже непроста задача — не тільки забезпечити ефективне керування пристроями вводу/виводу, але і створити зручний і ефективний віртуальний інтерфейс пристроїв вводу/виводу, що дозволяє прикладним програмістам просто зчитувати чи зберігати дані, не звертаючи увагу на специфіку пристроїв і проблеми розподілу пристроїв між задачами, що виконуються. Система вводу/виводу, здатна об'єднати в одній моделі широкий набір пристроїв, повинна бути універсальною. Вона повинна враховувати потреби існуючих пристроїв, від простої миші до клавіатур, принтерів, графічних дисплеїв, дискових накопичувачів, компакт-дисків і навіть мереж. З іншого боку, необхідно забезпечити доступ до пристроїв вводу/виводу для безлічі паралельно виконуємих задач, причому так, щоб вони якнайменше заважали одна одній.
Тому самим головним є наступний принцип: будь-які операції по керуванню вводом/виводом об‘являються привілейованими і можуть виконуватися тільки кодом самої ОС. Для забезпечення цього принципу в більшості процесорів навіть вводятьсярежими користувача і супервізора. Як правило, у режимі супервізоравиконання команд вводу/виводу дозволено, а в користувацькому режимі — заборонено. Використання команд вводу/виводу в користувацькому режимі викликає виключення і керування через механізм переривань передається коду ОС. Хоча можливі і більш складні системи, в яких у ряді випадків користувацьким програмам дозволене безпосереднє виконання команд вводу/виводу.
Ще раз підкреслимо, що, насамперед, ми говоримо про мультипрограмні ОС, для яких існує проблема поділу ресурсів. Одним з основних видів ресурсів є пристрої вводу/виводу і відповідне програмне забезпечення, за допомогою якого здійснюється керування обміном даними між зовнішніми пристроями й оперативною пам'яттю. Крім поділюваних пристроїв вводу/виводу (ці пристрої допускають поділ за допомогою механізму доступу) існують неподілювані пристрої. Прикладами поділюваного пристрою можуть служити накопичувач на магнітних дисках, пристрій для читання компакт-дисків. Цей пристрій з прямим доступом. Приклади неподілюваних пристроїв — принтер, накопичувач на магнитних стрічках. Цей пристрій з послідовним доступом. Операційні системи повинні керувати і тими й іншими пристроями, надаючи можливість паралельно виконуваним задачам використовувати різні пристрої вводу/виводу. Можна назвати три основні причини, по яких не можна дозволяти кожній окремій користувацькій програмі звертатися до зовнішніх пристроїв безпосередньо:
· Необхідність вирішувати можливі конфлікти доступу до пристроїв вводу/виводу. Наприклад, дві паралельно виконуємі програми намагаються вивести на друк результати своєї роботи. Якщо не передбачити зовнішнє керування пристроєм друкку, то в результаті ми можемо одержати текст, що абсолютно нечитається, тому що кожна програма буде час від часу виводити свої дані, що будуть перемежовуватися з даними іншої програми. Інший приклад: ситуація, коли одній програмі необхідно прочитати дані з деякого сектора магнітного диска, а іншій — записати результати в інший сектор того ж накопичувача. Якщо операції вводу/виводу не будуть відслідковуватися якимось третім (зовнішнім) процесом-арбітром, то після позиціювання магнітної голівки для першого запиту може відразу з'явитися команда позиціювання голівки для другої задачі, і обидві операції вводу/виводу не зможуть бути виконані коректно.
· Бажання збільшити ефективність використання цих ресурсів. Наприклад, у накопичувача на магнітних дисках час підведення голівки читання/запису до необхідної доріжки і звертання до визначеного сектора може значно (до тисячі разів) перевищувати час пересилання даних. У результаті, якщо задачі по черзі звертаються до циліндрів, що знаходяться далеко один від одного, то корисна робота, виконувана накопичувачем, може бути істотно знижена.
· Помилкив програмах вводу/виводу можуть привести до краху всіх обчислювальних процесів, тому що частина операцій вводу/виводу здійснюється для самої операційної системи. У ряді ОС системний ввід/вивід має істотно більш високі привілеї, чим ввід/вивід задач користувача. Тому системний код, що керує операціями вводу/виводу, дуже ретельно налагоджується й оптимізується для підвищення надійності обчислень іефективності використання устаткування.
Отже,керування вводом/виводом здійснюється операційною системою, компонентом, що найчастіше називають супервізором вводу/виводу. У перелік основних задач, покладених на супервізор, входять наступні:
· супервізор вводу/виводу одержує запити на ввід/вивід від прикладних задач і від програмних модулів самої операційної системи. Ці запити перевіряються на коректність, і якщо запит виконаний по специфікаціях і не містить помилок, він обробляється далі, у противному випадку користувачу (задачі) видається відповідне діагностичне повідомлення про недійсність (некоректність) запиту;
· супервізор вводу/виводу викликає відповідні розподільники каналів і контролерів, планує ввід/вивід (визначає чергу надання пристроїв вводу/виводу задачам, що потребують їх). Запит на введення/виведення або відразу виконується, або ставиться в чергу на виконання;
· супервізор вводу/виводу ініціює операції вводу/виводу (передає керування відповідним драйверам) і у випадку керування вводом/виводом з використанням переривань надає процесор диспетчеру задач для того, щоб передати його першій задачі, що стоїть в черзі на виконання;
· при одержанні сигналів переривань від пристроїв вводу/виводу супервізор ідентифікує їх (рис.9.1) і передає керування відповідній програмі обробки переривання (як правило, на секцію продовження драйвера);
· супервізор вводу/виводу здійснює передачу повідомлень про помилки, якщо такі виникають в процесі керування операціями вводу/виводу;
· супервізор вводу/виводу посилає повідомлення про завершення операції вводу/виводу процесу, що запросив цю операцію, і знімає його зі стану чекання вводу/виводу, якщо процес очікував завершення операції.
У випадку якщо пристрій вводу/виводу є ініціативним, керування з боку супервізора вводу/виводу буде полягати в активізації відповідного обчислювального процесу (переклад його в стан готовності до виконання).Ініціативним називають такий пристрій (зазвичай це датчики, зовнішній пристрій, а не пристрій вводу/виводу), по сигналі переривання від якого запускається відповідна йому програма. Така програма, з одного боку, не є драйвером, і керувати операціями обміну даними немає необхідності. Але, з іншого боку, запуск такої програми здійснюється саме по подіях, які зв'язані з генерацією відповідного сигналу пристроєм вводу/виводу. Різниця між драйверами, що працюють по перериваннях, і ініціативними програмами полягає в статусі цих програмних модулів. Драйвер є компонентом операційної системи і часто виконується не як обчислювальний процес, а як системний об'єкт, а ініціативна програма є звичайним обчислювальним процесом, тільки його запуск здійснюється з ініціативи зовнішнього пристрою.
Таким чином, прикладні програми (а в загальному випадку — всі обробні програми) не можуть безпосередньо зв'язуватися з пристроями вводу/виводу незалежно від використання пристроїв (монопольно чи спільно). Установивши відповідні значення параметрів у запиті на ввід/вивід, що визначають необхідну операцію і кількість споживаних ресурсів, вони можуть передати керування супервізору вводу/виводу, що і запускає необхідні логічні і фізичні операції.
Згаданий вище запит на ввід/вивід повинний задовольняти вимогам API тієї операційної системи, у середовищі якої виконується додаток. Параметри, що вказуються в запитах на ввід/вивід, передаються не тільки в викликаючих послідовностях, створюваних по специфікаціях API, але і як дані, які зберігаються у відповідних системних таблицях. Усі параметри, які будуть стояти в викликаючій послідовності, поставляються компілятором і відбивають вимоги програміста і постійну інформацію про операційну систему й архітектуру комп'ютера в цілому. Змінна інформація про обчислювальну систему (її конфігурація, склад устаткування, склад і особливості системного програмного забезпечення) містяться в спеціальних системних таблицях. Процесору, каналам прямого доступу в пам'ять, контролерам необхідно передавати конкретну двійкову інформацію, за допомогою якої і здійснюється керування устаткуванням. Ця конкретна двійкова інформація у виді кодів і даних часто готується за допомогою препроцесорів, але частина її зберігається в системних таблицях.
Дата добавления: 2016-07-27; просмотров: 1935;