Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вступ, ст 22-93.doc
Скачиваний:
5
Добавлен:
02.09.2019
Размер:
1.62 Mб
Скачать

Пристрої введення-виведення

Пам'ять не є єдиним ресурсом, яким повинна управляти

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

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

прості інтерфейси, по-перше, тому що їх можливості дуже незначні і, по-друге, тому що потрібно привести їх до єдиного стандарту. Єдиний стандарт

необхідний, щоб будь-IDE-контролер диска міг керувати будь IDE-диском. Абревіатура IDE утворена від Integrated Drive Electronics (вбудований

інтерфейс накопичувачів). IDE-інтерфейс є стандартним для дисків на

комп'ютерах з процесором Pentium, а також деяких інших комп'ютерах.

Оскільки справжній інтерфейс пристрою приховано за допомогою контролера, операційна система бачить тільки інтерфейс контролера, який може сильно відрізнятися від інтерфейсу самого пристрою. Так як всі типи контролерів відрізняються один від одного, для управління ними потрібно різне програмне забезпечення. Програма, яка спілкується з контролером, віддає йому команди і отримує відповіді, називається драйвером пристрої. Кожен виробник контролерів має постачати драйвери для підтримуваних ним операційних систем. Ви можете придбати сканер з драйверами для Windows 98, Windows 2000 і UNIX. Якщо ви хочете отримати можливість використовувати драйвер, його потрібно встановити в операційну систему так, щоб він міг працювати в режимі ядра. Теоретично драйвери можуть працювати поза ядра, але таку можливість підтримують всього декілька існуючих систем, гак що для цього потрібно, щоб драйвер в просторі користувача мав доступ до пристрою якимось контрольованим способом - дуже рідко підтримуване властивість. Є три способи установки драйвера в ядро. Перший полягає в тому, щоб заново скомпонувати ядро ​​разом з новим драйвером і потім перезавантажити систему. Так працює безліч систем UNIX. Другий: Створити запис у вхідному в операційну систему файлі, яка говорить про те, що потрібно драйвер, і потім перезавантажити систему. Під час початкового завантаження операційна система сама знаходить потрібні драйвери і завантажує їх. Так працює система Windows. При третьому способі операційна система може приймати нові драйвери, не перериваючи роботи, і оперативно встановлювати їх, не потребуючи при цьому в перезавантаженні. Цей спосіб рідк використовується, але зараз він стає все більш і більш поширеним. Такі знімні пристрої, як шини USB і IEEE 1394 (ми поговоримо про них нижче), завжди потребують динамічно завантажуваних драйверах. Для зв'язку з кожним контролером існує невелика кількість регістрів. Наприклад, мінімальний контролер диска може мати регістри для визначення адреси на диску, адреси в пам'яті, номер сектора та напрямки операції (Читання або запис). Щоб активізувати контролер, драйвер отримує

команду від операційної системи, потім транслює її в величини, які підходять для

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

Введення і виведення даних можна здійснювати трьома різними способами.

Найпростіший метод полягає в тому, що призначена для користувача програма видає системний запит, який ядро ​​транслює у виклик процедури відповідного драйвеpa. Потім драйвер починає процес введення-виведення. У цей час драйвер

виконує дуже короткий програмний цикл, постійно опитуючи готовність

пристрою, з яким він працює (зазвичай є якийсь біт, який вказує на те, що

пристрій все ще зайнято). По завершенні операції введення-виведення драйвер

поміщає дані туди, куди потрібно, і повертається в початковий стан. Потім

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

Цей метод називається очікуванням готовності або активним очікуванням і має

один недолік: Процесор повинен опитувати пристрій до тих пір, поки воно

не завершить свою роботу.

При другому способі драйвер запускає пристрій і просить його видати

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

виконувати інші завдання. Коли контролер виявляє закінчення передачі даних,

він генерує переривання, щоб сигналізувати про завершення операції.

Переривання дуже важливі в роботі операційної системи, тому розглянуто

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

Рис. 1.10. Дії, що виконуються при запуску пристрої введення-виведення та отриманні

переривання (а); обробка переривання включає в себе отримання переривання,

перехід до обробника переривань і повернення до програми користувача (б)

Як тільки центральний процесор вирішив прийняти переривання, Вміст

лічильника команд (PC) і слова стану процесора (PSW) поміщається в поточний стек, а процесор перемикається в режим роботи ядра. Номер пристрої може використовуватися як індекс частини пам'яті, службовець для пошуку адреси обробника переривань даного пристрою. Ця частина пам'яті називається вектором

переривань. Коли обробник переривань (це частина драйвера пристрою, послав переривання) починає свою роботу, він видаляє розташовані в стеку

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

Третій метод введення-виведення інформації полягає у використанні спеціального контролера прямого доступу до пам'яті (DMA, Direct Memory Access), який керує потоком бітів між оперативною пам'яттю і деякими

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

Переривання часто відбуваються в дуже непідходящі моменти, наприклад під

час обробки іншого переривання. З цієї причини центральний процесор

володіє можливістю забороняти переривання і вирішувати їх пізніше. Поки

переривання заборонені, всі пристрої, що завершили роботу, продовжують надсилати свої сигнали, але робота процесора не переривається до тих пір, поки переривання не будуть дозволені. Якщо закінчують роботу відразу кілька пристроїв в той час, коли переривання заборонені, контролер переривань вирішує, яке з них має бути оброблено першим, зазвичай грунтуючись на статичних пріоритетах, призначених для кожного пристрою. Пристрій з вищим пріоритетом перемагає. Шини Структура, показана на рис. 1.5, протягом багатьох років використовувалася на комп'ютерах, а також на перших моделях IBM PC. Але оскільки процесори і пам'ять стали працювати швидше, можливості однієї шини (і, звичайно, шини IBM PC) з управління всієї передачею даних досягли своєї межі. Потрібно було щось робити. У результаті в систему додалися додаткові шини як для прискорення спілкування з пристроями введення-виведення, так і для пересилання даних між процесором і пам'яттю. Внаслідок цієї еволюції зараз велика система Pentium виглядає приблизно так, як зображено на рис. 1.11.

У цієї системи вісім шин (шина кешу, локальна шина, шина пам'яті, PCI,

SCSI, USB, IDE і ISA), кожна зі своєю швидкістю передачі даних і своїми

функціями. В операційній системі для управління комп'ютером і його конфігурації повинні знаходитися відомості про всі ці шинах. Дві основні шини -

це ISA (Industry Standard Architecture - промислова стандартна архитектуpa), оригінальна шина комп'ютера IBM PC, і її наступник, шина PCI (Peripheral

Component Interconnect - інтерфейс периферійних пристроїв). Шина ISA вперше з'явилася на комп'ютерах IBM PC / AT, вона працює на частоті 8,33 МГц

і може передавати два байти за такт з максимальною швидкістю 16,67 Мбайт / с.

Вона включена в систему для зворотної сумісності зі старими повільними

платами вводу-виводу. Шина PCI була створена компанією Intel в якості спадкоємиці шини ISA. Вона може працювати на частоті 66 МГц і передавати відразу по 8 байт за такт зі швидкістю 528 Мбайт / с. Зараз більшість високошвидкісних пристроїв введення-виведення використовують шини PCI. Навіть деякі комп'ютери з процесорами, відмінними від Intel, користуються шиною PCI, оскільки з неї сумісно дуже багато плат вводу-виводу.

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

по виділеній шині пам'яті, часто працює на частоті 100 МГц. Системи

Pentium мають кеш першого рівня (кеш L1), вбудований у процесор, і набагато

більший зовнішній кеш другого рівня (кеш L2), підключений до процесора окремої шиною кеша.

Рис. 1.11. Структура великої системи Pentium

Крім того, в систему входять три спеціалізовані шини: IDE, USB і SCSI.

Шина IDE служить для приєднання периферійних пристроїв до системи - дисків і пристроїв для читання компакт-дисків (CD-ROM). IDE-шина - це нащадок

інтерфейсу контролера диска на PC / AT, і зараз вона входить в стандартний

комплект всіх систем, заснованих на процесорах Pentium.Шина USB (Universal Serial Bus - універсальна послідовна шина) була придумана для того, щоб приєднати до комп'ютера всі повільні пристрої введення-виведення, такі як клавіатура і миша. Вона використовує маленький чьотирьох роз'єм, причому два дроти поставляють електроживлення до USB-пристроїв. USB - це централізована шина, по якій головне пристрій кожну мілісекунду опитує пристрої введення-виведення, щоб дізнатися, чи є у них дані. Вона може управляти завантаженням даних зі швидкістю 1,5 Мбайт / с.

Всі USB-пристрої використовують один драйвер, позбавляючи нас тим самим від

необхідності встановлення нових драйверів для кожного нового USB-пристрою.

Тому USB-пристрої можна приєднувати до системи без її перезавантаження.

SCSI (Small Computer System Interface - системний інтерфейс малих комп'ютерів) - це високопродуктивна шина, застосовувана для швидких дисків,

сканерів та інших пристроїв, які потребують значної пропускної здібності. Її продуктивність досягає 160 Мбайт / с. Шина SCSI використовується

в системах Macintosh з моменту їх появи, крім того, вона популярна в UNIX-

системах і деяких системах на базі процесорів Intel.

Є ще одна шина (не показана на рис. 1.11), називається IEEE 1394.

Іноді її також називають FireWire, хоча, строго кажучи, FireWire - це назва, дане компанією Apple власної реалізації шини 1394. Як і USB, IEEE 1394

є біт-послідовною шиною, але вона підтримує пакетну передачу даних зі швидкістю, що досягає 50 Мбайт / с. Це її властивість дозволяє підключати до комп'ютера портативні цифрові відеокамери і тому подібні мультимедійні пристрої. На відміну від USB шина IEEE 1394 не має центрального контролера. Шини SCSI і IEEE 1394 конкурують з розробленою швидшої версією інтерфейсу USB.

Працюючи в оточенні, зображеному на рис. 1.11, операційна система

повинна вміти розпізнавати апаратні складові і вміти їх настроювати. Це вимога призвело компанії Intel і Microsoft до розробки системи персонального

комп'ютера, званої plug and play («включи й працюй»). В основі цієї системи лежала концепція, близька до тієї, що була вперше реалізована компанією

Apple Macintosh. До появи plug and play кожна плата введення-виведення мала

фіксовані адреси регістрів введення-виведення і рівень запиту переривання.

Наприклад, клавіатура використовувала переривання 1 і адреси в діапазоні від 0x60

до 0x64; контролер гнучкого диска використовував переривання 6 і адреси від 0x3F0

до 0x3F7; принтер користувався перериванням 7 і адресами від 0x378 до 0х37А .

Все в цій схемі було добре до тих пір, поки користувач не купував звукову карту і модем, і виявлялося, що обидва пристрої випадково використовували,

скажімо, переривання 4. У такому випадку вони конфліктували і не могли працювати разом. Можливим рішенням було вбудувати набір DIP-перемикачів або джамперів (jumper - перемичка) в кожну плату і пояснити користувачеві

необхідність налаштовувати кожну плати таким чином, щоб адреси портів і

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

комп'ютера, іноді можуть зробити зто без помилок. На жаль, окрім них це

практично нікому не вдавалося, що призводило до повного хаосу.

Стандарт plug and play дозволяє системі автоматично збирати інформацію про пристрої введення-виведення, централізовано призначати рівні переривання переривання і адреси введення-виведення, а потім повідомляти кожній платі цю інформацію - ось короткий опис процесу. Така система працює на комп'ютерах Pentium. Кожен комп'ютер з процесором Pentium містить материнську плату (в США завдяки успіхам боротьби за політичну коректність цю плату тепер вирішено називати батьківської). На материнській платі знаходиться програма, яка називається системою BIOS (Basic Input Output System-базова система введення-виведення). BIOS містить програми введення-виведення низького рівня включаючи процедури для читання з клавіатури, виведення інформації на екран, введення-виведення даних з диска і т. д. В даний час ці функції зберігаються в флзш-ОЗУ, яка в звичайних умовах є незмінною, але, якщо в BIOS знайшлися якісь помилки, її може змінити операційна система. При початковій завантаженні комп'ютера стартує система BIOS. Спочатку вона перевіряє кількість встановленої в системі оперативної пам'яті, підключені чи клавіатура та інші основні пристрої і коректно вони відкликаються. BIOS починає перевірку з шин ISA і PCI, щоб визначити всі пристрої, приєднані до них. Деякі з цих пристроїв є традиційними, їх також називають успадкованими (legacy), тобто створеними до винаходу plug and play. Вони мають фіксовані рівні переривання і адреса порту введення-виведення (Наприклад, задані за допомогою перемикачів або перемичок на платі введення- виведення без можливості їх зміни операційною системою). Ці пристрої реєструються. Пристрої plug and play теж реєструються. Якщо присутні пристрої відрізняються від тих, що були під час останнього завантаження, конфігуруються нові пристрої. Потім BIOS визначає пристрій, з якого відбуватиметься завантаження, по черги пробуючи кожне зі списку, що зберігається в CMOS-пам'яті. Користувач може змінити цей список, увійшовши в конфігураційну програму BIOS відразу після завантаження. Зазвичай спочатку робиться спроба завантажитися з гнучкого диска. Якщо це не вдається, пробується компакт-диск. Якщо в комп'ютері відсутні і гнучкий диск, і компакт-диск, система завантажується з жорсткого диска. З завантажувати завантажувального пристрою зчитується в пам'ять і виконується перший сектор. У цьому секторі знаходиться програма, зазвичай перевіряє таблицю розділів в кінці завантажувального сектора, щоб визначити, який з розділів є активним. Потім з того ж розділу читається вторинний завантажувач. Він зчитує з активного розділу операційну систему і запускає її. Після цього операційна система опитує BIOS, щоб отримати інформацію про конфігурацію комп'ютера. Для кожного пристрою вона перевіряє наявність драйвера. Якщо драйвер відсутній, операційна система просить користувача вставити гнучкий диск або компакт-диск, що містить драйвер (ці диски поставляються виробником пристрою). Якщо ж всі драйвери на місці, операційна система завантажує їх в ядро. Потім вона ініціалізує таблиці драйверів, створює всі необхідні фонові процеси і запускає програму введення пароля або графічний інтерфейс на кожному терміналі. Принаймні, передбачається, що операційна система повинна працювати таким чином. У реальному житті система plug and play часто буває настільки ненадійна, що багато люди називають її plug and pray («включи і проси»). Поняття операційної системи

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