Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

spz / spz

.pdf
Скачиваний:
33
Добавлен:
23.02.2016
Размер:
5.16 Mб
Скачать

остальная часть, ядра операционной системы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

базовая подсистема ввода-вывода

-'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

драйвер

 

драйвер

 

 

драйвер

 

IDE

 

SCSI

 

 

клавиатуры

 

мыши

 

 

монитора

 

драйвер

 

драйвер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

контроллер

 

контроллер

 

 

контроллер

 

IDE

 

SCSI

 

 

клав натуры

 

мыши

 

 

монитора

 

контроллер

 

контроллер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

клавиатура

 

мышь

 

 

монитор

 

IDE диски

 

SCSI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

устройства

 

 

 

 

 

 

 

 

 

Hardware

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структура системи введення-виведення

Апаратура вв/вив складається з ієрархічної структури каналів, пристроїв керування та периферійних пристроїв.

В складі довільної ОС Є спеціальна підсистема, що керує апаратурою вв/вив.

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

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

В підсистемах керування вв/вив використовується в основному 2 типа методів керування периферійними пристроями:

1.прямий;

2. непрямий. а)

центральний

 

периферійний

процесор

 

пристрій

 

 

 

 

 

 

 

б)

центральний

 

 

 

 

 

периферійний

 

 

 

 

 

 

 

процесор

 

канал

 

 

пристрій

 

 

 

 

 

Схема прямого (а) і непрямого (б) методів керування

а) ЦП безпосередньо керує роботою пристрою. З цього випливає наявність в складі команд процесора спеціальних команд по ініціації роботи пристрою, перевірки його готовності до роботи, запису інформації і т.і.

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

Головний недолік - практично неможливо реалізувати на його основі режим мультипрограмування.

б) Метод заснований на тому, що між ЦП та периферійним пристроєм є спеціальний процесор, що називається каналом, який фактично здійснює керування вв/вив.

Центральний процесор тільки ініціює вв/вив, а потім може виконувати всі необхідні програми до моменту завершення ініційованого процесу вв/вив.

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

Особливість: по мірі розвитку зовнішнього процесу ЦП, канал та периферійні пристрої працюють паралельно.

Для синхронізації паралельної роботи ЦП і каналу, використовують різноманітні засоби, серед яких:

1)флаг зайнятості, що надається центральному процесору;

2) ЦП-ру доступна розширена статусна інформація про стан каналу, контролеру та пристроїв;

3) система переривань, де сигнал переривань є по змісту синхронізуючим.

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

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

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

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

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

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

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

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

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

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

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

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

Функції супервізора вводу-виводу

-планує та організовує через канал подальші дії по організації вв/вив;

-при необхідності огранізовує поновлення даних, що необхідні для вв/вив, а

також ініціює наступну операцію вв/вив в каналі;

-синхронізує взаємодію зовнішніх та програмних процесів;

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

 

 

ОП

зовнішній

 

 

процес

буфер

програмний

 

 

процес

Схема інформаційної взаємодії зовнішнього та программного процесів

Мета синхронізації – усунення можливостей одночасного звернення процесів до буферів.

Для злагоджування ефекту невідповідності швидкостей між процесами,

розташовують один або декілька буферів, роль яких виконують неперервні ділянки ОП (оперативної памяті).

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

Існують три причини, що приводять до використання буферів у базовій підсистемі введення-виведення:

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

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

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

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

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

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

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

виводити їх на пристрій з цього буфера.

Під словом кэш (cache - "наявні"), звичайно розуміють область швидкої пам'яті, що містить копію даних, розташованих де-небудь у більш повільній пам'яті, призначену для прискорення роботи обчислювальної системи. У

базовій підсистемі введення-виведення не слід змішувати два поняття:

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

що існує в системі, у те час як кэш, по своєму визначенню, містить копію даних, існуючих де-небудь ще.

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

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

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

що забезпечує подібні дії, і одержав назву spooling.

На супервізор вв/вив також покладаються вимоги по керуванню буфером,

по виділенню та знищенню буферів ОП.

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

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

Драйвер може обслуговувати декілька пристроїв одного типу.

Ідентифікація копкретного пристроя в драйвері здійснюється за допомогою № пристроя в межах даного ттипа. тип також ідентифікується номером. Кожен драйвер складається з двох частин:

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

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

Щоб розпочати роботу з деяким пристроєм, необхідно відкрити або створити спеціальний файл, що є відповідним до пристрою. Відкриття – це процес встановлення зв’язку між іменем файлу та деякою змінною, що

зберігається в частині пам’яті процесора, що відкриває файл. Ця змінна називається номер дескриптора файла. Закриття – процес зворотній.

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

Кожна ОС має свої таблиці введення/виведення. Їх зміст може сильно

відрізнятися. В деяких ОС замість таблиць створюються списки.

В ОС-мах існують не меннше 3 таблиць , що призначені для здійснення в

системі реконфігурації периферійного обладнання.

Призначення таблиць – здійснювати зв’язок драйверів між з ядром ОС.

Кожен елемент таблиць містить адресні посилання на відповідні драйвери.

Номер елемента в таблиці – це номер типа пристроя, драйвер якого описується

в цьому елементі. Ядро ідентифікує кожний пристрій за допомогою номера типа пристрою.

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

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

підключені до обчислювальної системи. Кожен елемент таблиці нехай називається UСB (unit control block - блок управління пристроєм введення/виведення). Кожен елемент UСB таблиці обладнання, як правило,

містить слідуючу інформацію про пристрій:

тип пристрою, його модель, символічне ім’я, характеристики;

як цей пристрый пыдключений (через який інтерфейс, до якого раз’єму, які порти і т.д.)

намер та адреса каналу (і підканалу), якщо такі використовуються для керування пристроєм;

Інформацію про те, чи використовується буферизація при обміні даними з цим пристроєм, ім’я (або просто адресу) буфера, якщо такий виділяється з системної області пам’яті;

установка тайм-аута і ячейки для рахівника (счетчика) тайм-аута;

стан пристроя;

поле вказівника для для зв’язку задач, які очікують пристрій і,

можливо ще багато іншого.

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

Друга таблиця призначена для реалізації ще одного принципу віртуалізації пристроїв введення/виведення – незалежності від пристрою.

Тобто програміст не повинен знати яка модель та яким чином підключена до обчислювальної системи. Тому в запиті програміст вказує

логічне імя пристрою. Дійсно, пристрій, який співставляється віртуальному

(логічному), вибирається супкрвізором з допомогою таблиці про яку ми говоримо. Таким чином, спосіб підключення пристрою, його модель та відповідний драйвер містяться в цій таблиці обладнання(попередня табл). Але щоб зв’язати віртуальний пристрій з системною таблицею, яка відображає інформацію про те, який конкретно пристрій використовується та яким чином підключений, необхідна друга системна таблиця. Назвем її таблиця опису віртуальних логічних пристроїс (DRT, device reference tabl). Призначення другої таблиці – встановлення зв’язку між віртуальними (логічними) пристроюми і реальними пристроями, які описані в першій табліці обладнання. Іншими словами друга таблиця надає можливість супервізору перенаправити запит на введення/виведення на ті програмні модулі та структури даних, які містяться в відповідному елементі першої таблиці.

І, накінець третя таблиця, яка необхідна для зворотнього зв’язку між центральною частиною та пристроями введення/виведення. Це таблиця переривань, яка вказує для кожного сигналу запита на переривання той елемент UCB, що зіставлений даному пристрою, підключеному так, що воно використовує дійсну лінію переривання. Як системна таблиця введення/виведення, ця таблиця може в явному вигляді і не бути присутня.

В пинципі, можна зразу з основної таблиці переривань попадати на програму обробки (драйвер), який має зв’язок з елементом UСB.

Таблиця

 

 

 

Таблиця

 

Таблиця

логічних імен

 

 

 

обладнання

 

переривань

(2)

(1)

(3)

 

 

 

 

 

 

 

1-й елемент

 

 

 

1-й UСB

 

1-й елемент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2-й елемент

 

 

 

i-й UСB

 

h-й елемент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3-й елемент

 

 

 

j-й UСB

 

g-й елемент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n-й UСB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Взаємозвязок системних таблиць введення/виведення

Соседние файлы в папке spz