Основні системні таблиці вводу/виводу.
Кожна ОС має свої таблиці вводу/виводу, їхній склад (кількість і призначення кожної таблиці) може сильно відрізнятися. У деяких ОС замість таблиць створюються списки, хоча використання статичних структур даних для організації вводу/виводу, як правило, приводить до більшої швидкодії. Тут дуже важко відокремити загальні складові, тим більше, що докладної документації на цю тему вкрай мало, тільки якщо скористатися матеріалами нині застарілих ОС. Проте спробуємо це зробити, спираючись на ідеї сімейства простих, але ефективних ОС реального часу, розроблених фірмою Hewlett-Packard для своїх міні-комп'ютерів.
Виходячи з принципу керування вводом/виводом через супервізор ОС і з огляду на те, що драйвери пристроїв вводу/виводу використовують механізм переривань для встановлення зворотного зв'язку центральної частини з зовнішніми пристроями, можна зробити висновок про необхідність створення принаймні трьох системних таблиць.
Перша таблиця (чи список) містить інформацію про всі пристрої вводу/виводу, підключених до обчислювальної системи. Назвемо її умовно таблицею устаткування(equipment table), а кожен елемент цієї таблиці нехай називається UCB (unit control block, блок керування пристроєм вводу/виводу). Кожен елемент UCB таблиці устаткування, як правило, містить наступну інформацію про пристрій:
· тип пристрою, його конкретна модель, символічне ім'я і характеристики пристрою;
· як цей пристрій підключений (через який інтерфейс, до якого роз‘єму, які порти і лінія запиту переривання використовуються і т.д.);
· номер і адресу каналу (і підканалу), якщо такі використовуються для керування пристроєм;
· вказівка на драйвер, що повинний керувати цим пристроєм, адреса секції запуску і секції продовження драйвера;
· інформація про те, використовується чи ні буферизація при обміні даними з цим пристроєм, «ім'я» (чи просто адреса) буфера, якщо такий виділяється із системної області пам'яті;
· уставка тайм-ауту і комірки для лічильника тайм-ауту;
· стан пристрою;
· поле покажчика для зв'язку задач, що очікують пристрій, і, можливо, багато іншої інформації.
Пояснимо перераховане. Оскільки в багатьох ОС драйвери можуть мати властивість реентерабельності (нагадаємо, це означає, що той самий екземпляр програмного модуля може забезпечити рівнобіжне обслуговування відразу декількох однотипних пристроїв), то в елементі UCB повинна зберігатися або безпосередньо сама інформація про поточний стан пристрою і самі змінні для рентабельної обробки, або вказівка на місце, де така інформація може бути знайдена. Нарешті, найважливішим компонентом елемента таблиці устаткування є покажчик на дескриптор тієї задачі, що зараз використовує даний пристрій. Якщо пристрій вільний, то поле покажчика буде мати нульове значення. Якщо ж пристрій уже зайнятий і розглянутий покажчик не нульовий, то нові запити до пристрою фіксуються за допомогою утворення списку з дескрипторів тих задач, що зараз очікують даний пристрій.
Друга таблиця призначена для реалізації ще одного принципу віртуалізації пристроїв вводу/виводу — незалежності від пристрою. Бажано, щоб програміст не був заклопотаний обліком конкретних параметрів (і/чи можливостей) того чи іншого пристрою вводу/виводу, що встановлене (чи не встановлене) у комп'ютер. Для нього повинні бути важливі тільки самі загальні можливості, характерні для даного класу пристроїв вводу/виводу, якими він бажає скористатися. Наприклад, принтер повинний уміти виводити (друкувати) символи чи графічне зображення. А накопичувач на магнітних дисках —зчитувати чи записувати по зазначеній адресі (у координатах C-H-S) порцію даних. Хоча найчастіше програміст і не використовує пряму адресацію при роботі з магнітними дисками, а працює на рівні файлової системи. Однак у такому випадку вже розроблювачі файлової системи не повинні залежати від того, накопичувач якого конкретного типу і моделі, а також якого виробника використовується в даному конкретному комп'ютері (наприклад, HDD IBM DTLA 307030, WDAC 450AA чи який-небудь ще). Важливим повинний бути тільки сам факт існування накопичувача, що має деяку кількість циліндрів, голівок читання/запису і секторів на доріжці магнітного диска. Згадані значення кількості циліндрів, голівок і секторів повинні бути взяті з елемента таблиці устаткування. При цьому для програміста також не повинне мати значення, яким чином той чи інший пристрій підключений до обчислювальної системи, а не тільки яка конкретна модель пристрою використовується. Тому в запиті на ввід/вивід програміст вказує саме логічне ім'я пристрою. Дійсний пристрій, що зіставляється віртуальному (логічному), вибирається супервізором за допомогою таблиці, про яку ми зараз говоримо. Отже, спосіб підключення пристрою, його конкретна модель і відповідний їй драйвер містяться у вже розглянутій таблиці устаткування. Але для того, щоб зв'язати деякий віртуальний пристрій, використаний програмістом при створенні додатку із системною таблицею, що відображає інформацію про те, який конкретний пристрій і яким чином підключений до комп'ютера, використовується друга системна таблиця. Назвемо її умовно таблицею опису віртуальних логічних пристроїв (DRT, device reference table). Призначення цієї другої таблиці — встановлення зв'язку між віртуальними (логічними) пристроями і реальними пристроями, описаними за допомогою першої таблиці устаткування. Іншими словами, друга таблиця дозволяє супервізору перенаправляти запит на ввід/вивід з додатку на ті програмні модулі і структури даних, які (або адреси яких) зберігаються у відповідному елементі першої таблиці. У багатьох багатокористувацьких системах така таблиця не одна, а декілька: одна загальна і по одній — на кожного користувача, що дозволяє будувати необхідні зв'язки між логічними (символьними) іменами пристроїв і реальних фізичних пристроїв, що є в системі.
Нарешті, третя таблиця необхідна для організації зворотного зв'язку між центральною частиною і пристроями вводу/виводу. Це таблиця переривань, що вказує для кожного сигналу запиту на переривання той елемент UCB, що співставлений даному пристрою, підключеному так, що воно використовує дійсну лінію (сигнал) переривання. Як системна таблиця вводу/виводу, таблиця переривань може в явному виді і не бути присутньою. В принципі можна відразу з основної таблиці переривань попадати на програму обробки (драйвер), що має зв'язки з елементом UCB. Важлива наявність зв'язку між сигналами переривань і таблицею устаткування.
У сучасних складних ОС є набагато більше системних таблиць чи списків, використовуваних для організації процесів керування операціями вводу/виводу. Наприклад, однією з можливих і часто реалізованих інформаційних структур, що супроводжують практично кожен запит на ввід/вивід, є блок керування даними (data control block, DCB). Призначення цього DCB — підключення препроцесорів до процесу підготовки даних на ввід/вивід, тобто облік конкретних технічних характеристик і використовуваних перетворень. Це необхідно для того, щоб наявний пристрій одержував не якісь незрозумілі йому коди або формати даних, що не відповідають режиму його роботи, а коди, створені спеціально під даний пристрій і використовуваний у даний момент формат представлення даних.
Взаємозв'язок між описаними таблицями зображені на рис.9.2.
Рис.9.2 Взаємозв‘язок системних таблиць вводу/виводу.
Тепер нам залишилося лише ще раз, з урахуванням викладених принципів і таблиць розглянути процес керування введенням/виведенням за допомогою рис.9.3.
Рис.9.3 Процес управління вводом/виводом.
Запит на операцію вводу/виводу від програми, що виконується, надходить на супервізор (дія 1). Той перевіряє системний виклик на відповідність прийнятим специфікаціям і у випадку помилки повертає задачі відповідне повідомлення (дія 1-1). Якщо ж запит коректний, то він перенаправляється в супервізор вводу/виводу (дія 2). Останній по логічному (віртуальному) імені за допомогою таблиці DRT знаходить відповіднийелемент UCB у таблиці устаткування. Якщо пристрій уже зайнятий, то описувач задачі, запит якої зараз обробляєтьсясупервізором вводу/виводу, поміщаєте в список задач, що очікують дійсний пристрій.Якщо ж пристрій вільний, то супервізор вводу/виводу визначає з UCB тип пристрою і при необхідності запускає препроцесор, що дозволяє одержати послідовність керуючихкодів і даних, що зможе правильно зрозуміти і відробити пристрій (дія 3). Коли «програма» керування операцією вводу/виводу, будеготова, супервізор вводу/виводупередасть керування відповідному драйверу на секцію запуску (дія 4). Драйвер ініціалізує операцію керування, обнуляє лічильник тайм-ауту і повертає керуваннясупервізору (диспетчерузадач) для того, щоб він поставив на процесор готову до виконання задачу (дія 5). Система працює своєю чергою, але коли пристрій вводу/виводувідробить послану йому команду, він виставляє сигнал запиту на переривання, по якому через таблицюпереривань керування передається на секцію продовження (дія 6). Одержавши нову команду, пристрій знову починає її обробляти,а керування процесором знову передається диспетчеру задач, і процесор продовжує корисну роботу. Таким чином, виходить паралельна обробка задач, на тлі якої процесор здійснює керування операціями вводу/виводу.
Очевидно, якщо є спеціальні апаратні засоби для керування вводом/виводом, що знімають цю роботу з центрального процесора (мова йде про канали прямого доступу до пам'яті), то у функції центрального процесора будуть, як і раніше, входити всі тільки що розглянуті кроки, за вийнятком останнього — безпосереднього керування операціями вводу/виводу. У випадку використання каналів прямого доступу до пам'яті останні виконують відповідні канальні програми і розвантажують центральний процесор, рятуючи його від безпосереднього керування обміном даними між пам'яттю і зовнішніми пристроями.
При описі цієї схеми ми не стали торкатись питань розподілу каналів, контролерів і власне самих пристроїв. Також були опущені деталі одержання канальних програм. Будемо вважати, що вони виходять за коло питань, розглянутих у підручнику по дисципліні «Системне програмне забезпечення».
Дата добавления: 2016-07-27; просмотров: 2116;