Для врахування особливостей реалізації процесів введення-виведення і специфіки різного типу ПУ використовуються три режими введення-виведення інформації: програмний вхід-видобуток, введення-виведення в режимі переривань і з прямим доступом до пам'яті.
Інтерфейси повинні враховувати можливість реалізації всіх 3-х режимів введення-виведення.
Програмний введення-виведення. Тут ініціалізація і управління процесом введення-виведення здійснює процесор. Існує три способи його виконання (див. Рис.).
Перший спосіб - прямий, використовується для синхронних ПУ, тобто пристроїв, які завжди готові до роботи і циклів очікування не вимагається. Другий - умовний із заняттям циклу, коли при неготовності ПУ, процесор чекає до тих пір, поки настане його готовність. Третій - умовний з суміщенням. На відміну від попереднього, процесор не чекає готовності ПУ, а переходить до продовження програми з періодичної перевіркою готовності ПУ.
Слід наголосити на двох моментах. По-перше, ПУ має мати, попередньо встановлене, дозвіл на роботу в режимі переривань. По-друге, можливі колізії, коли кілька ПУ виставляють процесору запит переривання. Ця колізія дозволяється за допомогою механізму завдання рівня пріоритетів для кожного ПУ. Можлива організація вкладених переривань, коли ПУ з великим пріоритетом перериває роботу ПУ з меншим пріоритетом. Всі ці моменти повинен враховувати стандарт на інтерфейс.
Прямий доступ до пам'яті - спосіб швидкодіючого забезпечення функціонування пристроїв, при якому воно звертається до оперативної пам'яті, не перериваючи роботи процесора. Такий обмін відбувається під керуванням окремого пристрою - контролера прямого доступу до пам'яті (КПДП).
Структура ЕОМ, що має в своєму складі КПДП, представлена на рис.
Мал. Обмін даними в режимі прямого доступу до пам'яті.
Послідовність дій КПДП при запиті на прямий доступ до пам'яті з боку пристрою введення-виведення наступна:
Прийняти запит на ПДП (сигнал DRQ) від УВВ.
Сформувати запит до МП на захоплення шин (сигнал HRQ).
Прийняти сигнал від МП (HLDA), що підтверджує факт переведення мікропроцесором своїх шин в третій стан.
Сформувати сигнал, що повідомляє пристрою введення-виведення про початок виконання циклів прямого доступу до пам'яті (DACK).
Виробити сигнали, що забезпечують управління обміном (IOR, MW для передачі даних з УВВ в оперативну пам'ять і IOW, MR для передачі даних з оперативної пам'яті в УВВ).
Зменшити значення в лічильнику даних на довжину переданих даних.
Прямий доступ до пам'яті дозволяє здійснювати паралельно в часі виконання процесором програми і обмін даними між периферійним пристроєм і оперативною пам'яттю.
Зазвичай програмно-керований обмін використовується в ЕОМ для операцій введення-виведення окремих байт (слів), які виконуються швидше, ніж при ПДП, оскільки виключаються втрати часу на ініціалізацію контролера ПДП, а в якості основного способу здійснення операцій введення-виведення використовують ПДП. Наприклад, в стандартній конфігурації персональної ЕОМ обмін між накопичувачами на магнітних дисках і оперативною пам'яттю відбувається в режимі прямого доступу.
Програмно-керований обмін веде до нераціонального використання потужності мікропроцесора, який змушений виконувати велику кількість відносно простих операцій, припиняючи роботу над основною програмою. При цьому дії, пов'язані зі зверненням до оперативної пам'яті і до периферійного пристрою, зазвичай вимагають подовженого циклу роботи мікропроцесора через їх більш повільної в порівнянні з мікропроцесором роботи, що призводить до ще більш суттєвих втрат продуктивності ЕОМ.
Особливості побудови програмних засобів системи введення-виведення ЕОМ
Функціонування будь-якої обчислювальної системи зазвичай зводиться до виконання двох видів роботи: обробці інформації та операцій по здійсненню її введення-виведення.
Сучасні обчислювальні системи можуть мати різноманітну архітектуру, безліч шин і магістралей, мости для переходу інформації від однієї шини до іншої і т. П. Для нас зараз важливими є тільки такі моменти.
Пристрої введення-виведення підключаються до системи через порти.
Фізичним управлінням пристроєм введення-виведення, передачею інформації через порт і виставленням деяких сигналів на магістралі займається контролер пристрою.
Саме однаковість підключення зовнішніх пристроїв до обчислювальної системи є однією зі складових ідеології, що дозволяють додавати нові пристрої без перепроектування всієї системи.
Структура контролера пристрою
Контролери пристроїв введення-виведення досить різні як за своєю внутрішньою будовою, так і за виконанням (від однієї мікросхеми до спеціалізованої обчислювальної системи зі своїм процесором, пам'яттю і т. Д.), Оскільки їм доводиться управляти абсолютно різними приладами. Не вдаючись в деталі цих відмінностей, ми виділимо деякі загальні риси контролерів, необхідні їм для взаємодії з обчислювальною системою. Зазвичай кожен контролер має принаймні чотири внутрішніх регістра, що називаються регістрами стану, управління, вхідних даних і вихідних даних. Для доступу до вмісту цих регістрів обчислювальна система може використовувати один або кілька портів, що для нас не суттєво. Для простоти викладу вважатимемо, що кожному регістру відповідає свій порт.
Регістр стану містить біти, значення яких визначається станом пристрої введення-виведення і які доступні тільки для читання обчислювальної системою. Ці біти индицируют завершення виконання поточної команди на пристрої (біт зайнятості), наявність чергового даного в регістрі вихідних даних (біт готовності даних), виникнення помилки при виконанні команди (біт помилки) і т. Д.
Регістр управління отримує дані, які записуються обчислювальної системою для ініціалізації пристрої введення-виведення або виконання чергової команди, а також зміни режиму роботи пристрою. Частина бітів в цьому регістрі може бути відведена під код виконуваної команди, частина бітів буде кодувати режим роботи пристрою, біт готовності команди свідчить про те, що можна приступити до її виконання.
Регістр вихідних даних служить для приміщення в нього даних для читання обчислювальної системою, а регістр вхідних даних призначений для приміщення в нього інформації, яка повинна бути виведена на пристрій. Зазвичай ємність цих регістрів не перевищує ширину лінії даних (а найчастіше менше її), хоча деякі контролери можуть використовувати в якості регістрів чергу FIFO для буферизації інформації, що надходить.
Зрозуміло, набір регістрів і складових їх бітів приблизний, він покликаний послужити нам моделлю для опису процесу передачі інформації від обчислювальної системи до зовнішнього пристрою і назад, але в тому чи іншому вигляді він зазвичай присутній у всіх контролерах пристроїв.
Логічні принципи організації введення-виведення
Мал. Диспетчер пристроїв. Ресурси по типу.
Однак ми досі нічого не сказали про те, як повинна бути побудована підсистема управління введенням-виведенням в операційній системі для легкого і безболісного додавання нових пристроїв і які функції взагалі зазвичай на неї покладаються.
Структура системи введення-виведення
Якщо доручити непідготовленому користувачеві сконструювати систему введення-виведення, здатну працювати з усім безліччю зовнішніх пристроїв, то, швидше за все, він виявиться в ситуації, в якій знаходилися біологи і зоологи до появи праць Ліннея.
В області технічного забезпечення вдалося виділити кілька основних принципів взаємодії зовнішніх пристроїв з обчислювальною системою, т. Е. Створити єдиний інтерфейс для їх підключення, поклавши все специфічні дії на контролери самих пристроїв. Тим самим конструктори обчислювальних систем переклали всі турботи, пов'язані з підключенням зовнішньої апаратури, на розробників самої апаратури, змушуючи їх дотримуватися певного стандарту.
Схожий підхід виявився продуктивним і в області програмного підключення пристроїв введення-виведення. Подібно до того як Линнею вдалося закласти основи систематизації знань про рослинний і тваринний світ, розділивши все живе в природі на відносно невелике число класів і загонів, ми можемо розділити пристрої на відносно невелике число типів, що відрізняються по набору операцій, які можуть бути ними виконані, вважаючи всі інші відмінності несуттєвими. Ми можемо потім уточняти інтерфейси між ядром операційної системи, що здійснює деяку загальну політику введення-виведення, і програмними частинами, безпосередньо керуючими пристроями, для кожного з таких типів. Більш того, розробники операційних систем отримують можливість звільнитися від написання і тестування цих специфічних програмних частин, які отримали назву драйверів, передавши цю діяльність виробникам самих зовнішніх пристроїв. Фактично ми приходимо до використання принципу рівневого або листкового побудови системи управління введенням-висновком для операційної системи (див. Рис.).
Два нижніх рівні цієї листкової системи становить hardware: самі пристрої, які безпосередньо виконують операції, і їх контролери, службовці для організації спільної роботи пристроїв і решті обчислювальної системи. Наступний рівень складають драйвери пристроїв введення-виведення, що приховують від розробників операційних систем особливості функціонування конкретних приладів і забезпечують чітко визначений інтерфейс між hardware і вищерозміщеним рівнем - рівнем базової підсистеми введення-виведення, яка, в свою чергу, надає механізм взаємодії між драйверами і програмною частиною обчислювальної системи в цілому.
Функції базової підсистеми введення-виведення
Базова підсистема вводу-виводу служить посередником між процесами обчислювальної системи і набором драйверів. Системні виклики для виконання операцій введення-виведення трансформуються нею в виклики функцій необхідного драйвера пристрою. Однак обов'язки базової підсистеми не зводяться до виконання тільки дій трансляції загального системного виклику в обіг до приватної функції драйвера. Базова підсистема надає обчислювальної системі такі послуги, як підтримка блокуються, неблокірующіх і асинхронних системних викликів, буферизація і кешування вхідних і вихідних даних, здійснення spooling'a і монопольного захоплення зовнішніх пристроїв, обробка помилок і переривань, що виникають при операціях введення-виведення, планування послідовності запитів на виконання цих операцій.