Управління введенням-виведенням

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Однією з головних функцій ОС є керування всіма пристроями введення-виведення комп'ютера. ОС повинна передавати пристроїв команди, перехоплювати переривання і обробляти помилки; вона також повинна забезпечувати інтерфейс між пристроями та іншою частиною системи. З метою розвитку інтерфейс повинен бути однаковим для всіх типів пристроїв (незалежність від пристроїв).

Фізична організація пристроїв введення-виведення

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

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

Операційна система зазвичай має справу не з пристроєм, а з контролером. Контролер, як правило, виконує прості функції, наприклад, перетворює потік біт в блоки, що складаються з байт, і здійснюють контроль і виправлення помилок. Кожен контролер має кілька регістрів, які використовуються для взаємодії з центральним процесором. У деяких комп'ютерах ці регістри є частиною фізичного адресного простору. У таких комп'ютерах немає спеціальних операцій введення-виведення. В інших комп'ютерах адреси регістрів введення-виведення, що називаються часто портами, утворюють власний адресний простір за рахунок введення спеціальних операцій введення-виведення (наприклад, команд IN і OUT в процесорах i86).

ОС виконує введення-виведення, записуючи команди в регістри контролера. Наприклад, контролер гнучкого диска IBM PC приймає 15 команд, таких як READ, WRITE, SEEK, FORMAT і т.д. Коли команда прийнята, процесор залишає контролер і займається іншою роботою. При завершенні команди контролер організовує переривання для того, щоб передати управління процесором операційній системі, яка має перевірити результати операції. Процесор отримує результати і статус пристрою, читаючи інформацію з регістрів контролера.

Організація програмного забезпечення вводу-виводу

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

Ключовим принципом є незалежність від пристроїв. Вид програми не повинен залежати від того, чи читає вона дані з гнучкого диска або з жорсткого диска.

Дуже близькою до ідеї незалежності від пристроїв є ідея одностайної іменування, тобто для іменування пристроїв повинні бути прийняті єдині правила.

Іншим важливим питанням для програмного забезпечення введення-виведення є обробка помилок. Взагалі кажучи, помилки слід обробляти як можна ближче до апаратури. Якщо контролер виявляє помилку читання, то він повинен спробувати її скорегувати. Якщо ж це йому не вдається, то виправленням помилок повинен зайнятися драйвер пристрою. Багато помилок можуть зникати при повторних спробах виконання операцій введення-виведення, наприклад, помилки, викликані наявністю порошинок на голівках читання або на диску. І тільки якщо нижній рівень не може впоратися з помилкою, він повідомляє про помилку верхнього рівня.

Ще одне ключове питання - це використання блокуючих (синхронних) і неблокуючим (асинхронних) передач. Більшість операцій фізичного введення-виведення виконується асинхронно - процесор починає передачу і переходить на іншу роботу, поки не настає переривання. Користувальницькі програми набагато легше писати, якщо операції введення-виведення блокують - після команди READ програма автоматично припиняється до тих пір, поки дані не потраплять в буфер програми. ОС виконує операції введення-виведення асинхронно, але подає їх для користувача програм в синхронній формі.

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

Для вирішення поставлених проблем доцільно розділити програмне забезпечення введення-виведення на чотири шари (рисунок 2.30):

Обробка переривань, Драйвери пристроїв, Незалежний від пристроїв шар операційної системи, Користувальницький шар програмного забезпечення.

Управління введенням-виведенням

Рис. 2.30. Багаторівнева організація підсистеми введення-виведення

Обробка переривань

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

Драйвери пристроїв

Весь залежний від пристрою код поміщається в драйвер пристрою. Кожен драйвер управляє пристроями одного типу або, може бути, одного класу.

В операційній системі тільки драйвер пристрою знає про конкретні особливості якого-небудь пристрою. Наприклад, тільки драйвер диска має справу з доріжками, секторами, циліндрами, часом установлення головки та іншими чинниками, що забезпечують правильну роботу диска.

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

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

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

Незалежний від пристроїв шар операційної системи

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

Типовими функціями для незалежного від пристроїв шару є:

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

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

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

Користувацький шар програмного забезпечення

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

count = write (fd, buffer, nbytes),

то бібліотечна процедура write буде пов'язана з програмою. Набір подібних процедур є частиною системи введення-виведення. Зокрема, форматування введення або виведення виконується бібліотечними процедурами. Прикладом може служити функція printf мови С, яка сприймає рядок формату і, можливо, деякі змінні в якості вхідної інформації, потім будує рядок символів ASCII і робить виклик write для виведення цього рядка. Стандартна бібліотека введення-виведення містить велику кількість процедур, які виконують введення-виведення і працюють як частина призначеної для користувача програми.

Інший категорією програмного забезпечення вводу-виводу є підсистема спулінга (spooling). Спулінг - це спосіб роботи з виділеними пристроями в мультипрограмній системі. Розглянемо типовий пристрій, що вимагає спулінга - рядковий принтер. Хоча технічно легко дозволити кожному призначеному для користувача процесу відкрити спеціальний файл, пов'язаний з принтером, такий спосіб, небезпечний за того, що користувальницький процес може монополізувати принтер на довільне час. Натомість створюється спеціальний процес - монітор, який отримує виключні права на використання цього пристрою. Також створюється спеціальний каталог, званий каталогом спулінга. Для того, щоб надрукувати файл, призначений для користувача процес поміщає інформацію, що виводиться в цей файл і поміщає його в каталог спулінга. Процес-монітор по черзі роздруковує всі файли, що містяться в каталозі спулінга.


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Доповідь
23.1кб. | скачати


Схожі роботи:
Створення програми електронного обліку успішності студентів з подальшим виведенням її в Інтернет
Ефекти обумовлені введенням у клітини ссавців трансгена аполіпопротеїну А 1 людини
Зміни у правовому регулюванні інституту комерційної таємниці у зв`язку з введенням в дію
Управління фінансовими результатами на прикладі державного унітарного підприємства Головного управління
Електротехнічна служба управління інженерного озброєння управління начальника інженерних війсь
Управління персоналом один з найважливіших аспектів теорії і практики управління
Застосування системи управління ризиками при проведенні митного контролю Система управління
Управління персоналом в органах соціального захисту населення на прикладі управління ДСЗН Краснодарського
Теорія управління і імперія ігор у системі соціального управління
© Усі права захищені
написати до нас