Адресний простір Підсистеми введення-виведення

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

скачати

Залізо

Процесори

Типи процесорів:

  1. з регістрами загального призначення (РОН);

  2. акумуляторні;

  3. стекові.

Процесори з РОН

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

SP - покажчик стека

PC - лічильник команд

Немає команд push і pop, завжди використовується mov:

mov (SP) +, R0 замість pop R0

mov R0, - (SP) замість push R0

Замість безпосереднього завантаження константи в регістр (mov # 5, R 0) використовується:

mov (PC) +, R0

db 5

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

Конвейеризация сильно утруднена.

Недолік: великий розмір команд, тому що багато операндів, багато типів адресації.

Можна зменшити оперативність інструкцій і спростити внутрішню топологію ЦП.

Процесори акумуляторного типу

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

Процесори стекового типу

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

Є стандартний набір команд:

  • ADD

  • SUB

  • MUL

  • DIV

  • і т.д.

і ще додаткові (тільки вони працюють з операндами в пам'яті):

  • LOAD - приміщення даних з пам'яті в верх стека

  • STORE - переміщення даних з верху стека в пам'ять

Параметри ЦП

Розрядність ЦП - розрядність його регістрів.

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

Як операнди крім даних в АЛП надходять і адреси, отже, розрядність ЦП прямо визначає розмір адресного простору.

Архітектури ЦП

Скалярна.

ЦП ділиться на дві секції, кожна з яких незалежно тактується одним тактовим генератором.

Ідея: АЛУ не повинно простоювати, поки йде вибірка команди з пам'яті.

Вибірка інструкції відбувається паралельно з роботою АЛП. Для цього використовується конвеєр.

Суперскалярна.

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

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

Архітектура RISC.

Забороняє використовувати методи адресації у всіх інструкціях, крім load і store. Всі мнемонічні команди залишаються (вони необхідні всім ЦП).

add R 0, R 1 команди майже однакові з точки

sub R 0, R 1 зору внутрішньої топології

add R 0, R 1 ці сильно

add R 0, (R 1) відрізняються

Заборонивши команди add R 0, (R 1) суттєво змінюємо набір команд.

Таким чином, можна максимально згрупувати команди завантаження з / в пам'ять. Ще треба побільше регістрів (краще кілька десятків).

Зростання швидкодії RISC колосальний, у порівнянні з CISC (якщо ще використовувати кеш для ВП і згрупувати звернення до ОП разом).

Адресний простір

Існує два типи адресних просторів:

  • Логічне АП - цими адресами оперує ЦП (розрядність ЦП)

  • Фізичне АП - ця адреса виставляється на шину.

У загальному випадку ЛА і ФА - різні.

ЦП не може згенерувати адресу, що виходить за межі його розрядності. Для пам'яті потрібен ФА великої розрядності.

Виникає дві проблеми:

  1. Зробити фізичну пам'ять розрядності більше розрядності ЦП.

  2. Якщо збільшити розрядність ФА, тоді не вистачить фізичної пам'яті, що робити? (Наприклад, 32-розрядний процесор дозволяє кожному процесу мати лап 4Гб, але де взяти стільки фізичної пам'яті)

Нехай лап <ФАП.

Тоді потрібен окремий базовий регістр для коду - CS. Отже, ЦП повинен видавати пристроїв сполучення з Шиною якусь ознаку разом з операцією, щоб УСШ знало, який базовий регістр використовувати.

Всі операції роботи з пам'яттю використовують CS, якщо вибирається код, і DS, якщо вибираються дані.

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

Сторінкове перетворення

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

УПА = Пристрій Перетворення Адреси. УПА може додавати до зміщення довільний базовий адресу сторінки.

Таблицю сторінок можна (і треба) винести за межі ЦП.

У такому випадку одержуємо диспетчер пам'яті (ДП) замість УПА.

Сегментна організація пам'яті


Потрібно частково розміщувати програму в пам'яті (?) - Існують два методи: сторінковий і сегментний метод організації пам'яті.

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

Треба виділяти фізичну пам'ять сегменту (половинці - не можна (?)).


УПА перетворює логічний адреса в фізичний:

У Intel-процесорах є набір базових регістрів - CS, DS, SS, ES, GS, FS.

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


Дескрипторних таблиця (ДП)

Дескриптор: адресна частина (містить базову адресу сегмента у фізичній пам'яті) і дескрипторних частина (?) (Містить відомості про захист + довжину + біт присутності).

ДП знаходиться в оперативній пам'яті.

При зверненні до байту щоразу виробляється перетворення адреси + контроль виходу за кордон сегмента + права доступу. Тобто, щоб прочитати байт, потрібно два звернення до пам'яті - так не можна, потрібно кешувати дескриптори!

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

Недоліком даного методу є змінна довжина сегментів, важко організувати завантаження / вивантаження сегментів. Виникає фрагментація пам'яті.



Сторінкова організація пам'яті

Якщо всі блоки (які змінюються) мають один і той же розмір, зникає фрагментація 1-го рівня. (Проте є фрагментація 2-го рівня - блоки одного сегменту «розбігаються» по пам'яті).

Це і є механізм сторінкової організації пам'яті.


Лап і ФАП ділиться на сторінки фіксованого розміру.

ТСП (таблиця сторінкового перетворення) - це вектор, що містить дескриптори для сторінок. Тут повинні бути описані всі сторінки лап-ва. У дескрипторі сторінок є біт присутності (чи є сторінка в пам'яті або вона на диску).

Якщо відбувається звернення до сторінки, яка відсутня в пам'яті відбувається сторінкове переривання.

Існує два типи винятків: переривання і пастка.

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


Таблиця сторінок кожного процесу займає 4 Мб (?), Вона повинна бути резидентної в пам'яті - це не припустимо.

Застосовується 2-х рівнева система.

Каталог сторінок (КС) складається з однієї фізичної сторінки, він обов'язково резидентів.

На одну операцію читання байта буде потрібно три (!!!) звернення до пам'яті - Жах!

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

Тоді буфер трансляції адреси (TLB) - використовується тільки для адресних перетворень. А кеш даних - тільки для кешування даних (хоча, в деяких ЦП використовується тільки один кеш - у розрахунку на те, що в ньому в основному буде осідати ТСП).


Будь-яке звернення до пам'яті відбувається через кеш.

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



Поняття інтерфейсу

Інтерфейс - це правила переходу кордону (тобто правила, за якими межа може бути пересічена).

Типи інтерфейсів:

  • Фізичний інтерфейс - правила, що описують механічні характеристики підключення ВУ.

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

  • Логічний інтерфейс - визначає послідовність в часі сигналів (оперує логічними поняттями 0 і 1, а не вольтами).

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

Логічний інтерфейс системної шини


Системна шина потрібна для об'єднання вузлів НД

Зв'язок між кожними двома вузлами може бути спеціалізована для цих двох вузлів.

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

Жертвуємо оптимальністю, так, що складність зв'язків не залежить від складності системи. З'являється шинний інтерфейс.

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

Види інтерфейсів

Інтерфейс «загальна шина» (UNIBUS)


Реалізовано в PDP -11 (DEC).

Максимально універсальна.

Цей інтерфейс припускає, що всі пристрої приблизно однакові. Висновок йде зі швидкістю «самого повільного солдата» - все визначається самим повільним пристроєм.


Шина ISA

ISA (Industry Standard Architecture) - застосовується з перших моделей PC.

ISA -8 (8 біт даних і 20 біт адреси) та ISA -16 (16 біт даних і 24 біт адреси).

Частота системної шини - до 8 МГц.

Існує розширення до 32 біт - EISA (сумісна, для режиму EISA використовуються спеціальні управляючі сигнали) - 32 біт адресу і дані, частота до 33 МГц.

Шина PCI

PCI (Peripheral Component Interconnect) - локальна шина, яка є мостом між шиною процесора і шиною вводу / виводу ISA / EISA.

Розрядність даних - 32/64 біт. Розрядність адреси - 32 біт. Частота - 33/66 МГц.

Шина є синхронної.

На її базі існують розширення (наприклад AGP).

Шина VLB


VLB (VESA Local Bus) - використовує шину процесора для підключення периферії (графічний адаптер, контролери дисків і т.д.).

32-бітна шина (32/64 - дані, 32 - адреса), частота коливається від 33 до 50 МГц.

Шина MassBus


MassBus - високошвидкісна синхронна блокова шина.

Використовувалася на VAX -11 (DEC).

У многошінних інтерфейсах деякі вузли виведені з-під управління загальної шини.

Інтерфейс системної шини. Асинхронна шина

Ініціатор - ЦП. Взаємодія відбувається з одним пристроєм.

Будь-який пристрій - дешифратор адреси (ДША). Володіє діапазоном адрес.

Вводиться спеціальний таймаут для перевірки існування адреси.


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

Синхронна шина

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


Цикл шини ділиться на фази фіксованого часу.

Фаза адреси (ФА): довжина - не менше 2-х тактів, щоб приймачі змогли «засікти» адреса.

Фаза очікування (ФО): поки ВУ не видає дані на шину. ФО має стандартний фіксований розмір.

Всі ВУ повинні встигати за ФО дешифрувати адреси, вибрати дані і т.д. Інакше вони не зможуть працювати з цією шиною.

Фаза даних - на шину виставляються дані.

Але всі пристрої мають різне швидкодію. Для цього заводиться сигнал wait state (WS). Він встановлюється до фази даних - в середині ФО. ЦП, отримавши сигнал WS (повільне пристрій), подовжує ФО ще на один такт.

Є також сигнал High Speed ​​(наприклад, для ВП) - від ФО віднімається один такт.

IO / Mem - визначає, це порт вводу-виводу або адресу пам'яті.

Високочастотні шини

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

Застосовується код Хеммінга:


Завершальні три біти формуються по восьми.

2 біти - diagnostics, 1 біт - modify

Якщо зіпсований один біт, код Хеммінга допоможе його відновити, якщо два - усунути помилку.

Контроль паритету [виявить] лише одну помилку. Біти доповнюються ще одним - парність / непарність.

Якщо до пристрою прийшов неправильну адресу, воно виставляє на шину сигнал помилки. На високочастотних шинах з'являються:

  • Фаза очікування помилки адреси

  • Фаза очікування даних

Оскільки помилки з'являються [рідко], в ці фази все просто чогось чекають, обміну по шині немає.

Поділ шини між декількома ЦП

Ефективність шини дуже мала:

  1. Велику частину часу на шині нічого не відбувається.

  2. Навіть під час активності шини не всі проводи використовуються одночасно.


Треба поєднати різні фази шини різних ЦП, так, щоб ЦП один одному не заважали і використовували шину паралельно.

Попередній ЦП звільнив шину - наступний її займає. Такі шини називаються транзакційними.

В даний час в [...] системах, тому що алгоритми аналізу дуже складні (до всього іншого, фази можуть бути різної довжини).

Використовується арбітр шин - пристрій, який управляє поділом шини між різними ЦП.


П просить АШ видати йому шину. Якщо декілька запитів, АШ за якимось алгоритмом виділяє шину конкретного ЦП.

ЦП тоді починає аналізувати сигнал Busy.

Використання кеш

Коли ми спілкуємося з ВУ, повинні на шину виставити адресу.

У деяких системах:

Старші розряди шини служать для адресації регістрів ВУ.

Коли ми даємо команду «писати в регістр», дані осідають в кеш. Якщо після цього буде дана команда «читати кеш», прочитані дані будуть прочитані з кешу! Що невірно!

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

Кеш не може відрізнити пам'ять ВУ від ВП. Від нас буде потрібно відповідне управління. Треба звернення до регістрів робити відмінним від звернення до ОП.

  • Шина адрес

  • Шина ВУстройств

Тобто, робимо логічну шину, відмінну від адресною.

У Intel ввели спеціальні інструкції - in і out. ЦП чітко розрізняє (за кодом) команда роботи з пам'яттю і з портами. Звернення до ВУ не кешуються.

Є ще одна проблема: у випадку великої пам'яті ВУ.

За байтам брати не можна, тому що на кожен байт потрібно переривання, а це накладно (на весь пакет потрібно одне переривання).

1-е рішення: сигнал кешу скинути всю свою пам'ять перед виконанням обміну з пам'яттю. Але скинуться всі таблиці сторінок! У ЦП УПА управляє адресацією за допомогою таблиці сторінкових перетворень.

2-е рішення: для кожної сторінки 2 біти: «заборона кешування» і «кешування тільки при читанні»

Способи підключення ВУ до НД Використання контролера вводу / виводу


КВУ знає протокол СШ і підключається до неї. З іншого боку він підключається до ВП, тобто повинен знати інтерфейс ВУ.

Керуючими об'єктами (ВУ-ва) є регістри і пам'ять. ВУ відображає їх на віртуальне АП.

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

Якщо повільне пристрій і малі обсяги передачі даних - використовуються регістри ВУ.

Як же КВУ інтерпретує адресу, виставлений на шину? ..

Використовуються регістри:

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

КВУ дешеві і досить універсальні.

Недолік: вони реалізовані у вигляді фіксованої логіки. Логіку роботи змінити не можна!

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

Механізм співпроцесора


Співпроцесор не має повної обчислювальної самостійністю. Він не може самостійно обмінюватися даними по шині, приймати рішення про обмін.

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

  1. Співпроцесор повинен відрізняти цикли шини ЦП від своїх циклів шини.

  2. ЦП також повинен відрізняти цикли шини співпроцесора від своїх.

Escape-ознака - це префікс команди.

Якщо команда, зустрічається ЦП має такий префікс, ЦП її пропускає. Співпроцесор виконує команди, наступні за ознакою Escape.

Недолік: не можна ізолювати потік команд співпроцесора від потоку команд ЦП (в потік команд ЦП входять команди співпроцесора).

Тоді застосовуються процесори введення / виводу (ПВВ).

Вони також мають власну систему команд, але можуть керувати системною шиною. Отже, в пам'яті можна ізолювати команди ЦП і ПВВ.

Відмінність ПВВ від ЦП: ЦП ніколи не зупиняється. ПВВ зупиняється по завершенню операції.

ПВВ часто називають канальним процесором, а його програму - канальної програмою.

Застосовуються для управління [довільним] обладнанням (потрібно тільки завантажити потрібну програму) (наприклад, в Mainframe 'ах IBM).

Механізми управління ВУ-ми через контролери. Керування через відображення регістрів і адрес пам'яті на СШ


Найпростіший спосіб.

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

Переваги:

  • розробник драйвера найбільш вільний у виборі - коли і що робити;

  • за 1 цикл шини дозволяє звертатися до запитуваного регістру (нема затримки).

Недолік: якщо пристрій складне, потрібно багато регістрів, а розрядність шини регістрів обмежена.

Отже, потрібно економити регістри! (Див. наступну. Тему).

Механізм непрямої адресації


Число регістрів в КВУ зменшити неможливо (скільки є, стільки є). Регістри ці мають деякі адреси всередині КВУ та не відображаються на шину.

На шину відображаються два регістри - регістр номера регістра і регістр даних.

Алгоритм роботи:

Треба згенерувати два цикли шини:

Цикл 1: число, що означає номер регістра в рег. # Регістру.

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

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

Примітка: для ВУ з великим числом регістрів, доступ до яких здійснюється рідко (приклад: годинник реального часу (70 h і 71 h - регістри номери і даних) і CMOS-пам'ять - використовуються тільки в момент завантаження комп'ютера).

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

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

Конвеєрна схема завантаження регістрів


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

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

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

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

Після отримання всього блоку даних транзакція управління завершена, КВУ отримує результат.

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

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

Як ще можна знизити діапазон адрес? (Див. наступну. Тему).

Схема прямого доступу


Можна організувати так званий канал управління (для обміну командами з КВУ).

ПДП (DMA) може використовуватися як для обміну даними, так і для обміну командами.

Заповнюємо програмну копію регістрів ВУ в ОЗУ необхідними значеннями і штовхаємо операцію ПДП.

Контролер ПДП копіює блок з ОЗУ в регістри ВУ. Потім, КВУ автоматично починає робити операцію.

Також у будь-який момент ми можемо скопіювати регістри ВУ в ОЗУ.

Недолік: для організації обміну потрібна ПДП.

КВУ має підтримувати механізм ПДП. Йому потрібно два канали: для даних і для управління. У Intel кількість каналів ПДП обмежена, тому відмовилися від цього механізму.

У ЗС з великими діапазонами АП актуальність звуження діапазону адрес зменшується (для 32, 64 біт). Так що використовують просте відображення регістрів ВУ на шину.

Управління з опитуванням (polling)


У

Status-регістрі будь-якого пристрою завжди є біт Ready (найчастіше він у знаковому розряді).

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

Ready bit можна перевіряти в циклі або з таймаут.

Для великого числа пристроїв робота в режимі polling 'а неприйнятна. Для асинхронних пристроїв цей режим взагалі неприйнятний.

З'явився режим переривань (див. слід. Тему).

Організація механізму переривань

Завдання:

  1. Проінформувати ЦП про завершення операції вводу / виводу.

  2. Знайти ту програму, яка може обробити це переривання.

Була розроблена схема, названа «векторної таблицею».

Всі події пронумеровані.


Дескриптори описують програми обробки переривання.

Дескриптори апаратно (процесорної) залежні.

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

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

Система переривань - спеціальний набір дій (який номер виставляти на шину, що робити, якщо кілька і т.д.).

Система переривань радіального типу


Ніжка запиту переривань завжди опитується центральним процесором між виконанням машинних інструкцій.

Апаратно в ЦП можна блокувати опитування цього біта (CLI).

Якщо цей біт встановлюється в 1, починається обробка переривань:

  1. ЦП повинен врятувати свій контекст.

  2. ЦП повинен отримати номер дескриптора таблиці (для цього згенерувати цикл шини - підтвердження переривання).


Контролер переривань - програмований через СШ пристрій.

Необхідно вказати контролеру, який номер події пов'язаний з яким ВУ.

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

Для кожної лінії IRQx - одна подія. Пристрої підключаються до таких лініях.

Пріоритет надання переривань - алгоритм, за яким контролер переривань визначає пріоритети ВУ, що підключаються до однієї лінії IRQx (?).

У MS - DOS і Windows використовується лінійна пріоритетна схема: пристрої мають статичні пріоритети, які визначаються номером лінії IRQx.

Можливі й інші алгоритми.

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

Найвищий пріоритет надається асинхронним пристроїв, а також системним подіям. Нижчий - синхронним пристроям.

Головний недолік - обмежене число ліній запиту, а отже і пристроїв.

Можна побудувати ієрархічну схему (розширюємо друге контролером):

Третій контролер підключити не можна, тому що не вистачить ліній переривань. Шина теж може накладати обмеження на число переривань (ISA - 15).

Якщо кількість пристроїв дуже велике, не можна використовувати цю схему!

Щоб не втратити короткі переривання використовується маска запомненних переривань.

End of Interrupt - команда скидання масок блокувань і запам'ятали переривань.

Потрібно відправити її контролеру!

Потрібно, щоб на одну лінію можна було підключити скільки завгодно пристроїв - у цьому випадку не можна використовувати контролер!

Пріоритетна (паралельна) схема обробки переривань


Проводиться програмна або апаратна прив'язка.

Пристрій виставляє номер вектора на шину.

Але в циклі переривання тільки один пристрій повинно виставляти номер на шину.

Для цього вводиться сигнал відповіді пристрою даного пріоритету. ЦП повинен мати стільки ліній підтвердження переривань, скільки у нього ліній запиту.

ACK повинен потрапити лише до одного пристрою даного пріоритету!

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

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

З запитами зв'язується бітова маска, яка транслюється в слово стану процесора. Тобто відповідальність за блокування / дозвіл переривань покладається на програміста (системного, звичайно;))!

Дії, що виконуються в обробнику переривання

intx: push ax

push si

push ds

in ax, # port

mov ds: [si], ax

inc si

dec cx

pop

...

iret

Якщо темп надходження переривання високий, не встигнемо усе обробити.

Механізм прямого доступу до пам'яті

ЦП не бере участь в обміні.

Апаратурі потрібно знати: номер порту і адреса буфера. Контролер прямого доступу (КПДП) і є та сама залізяка!


Це мінімальний набір регістрів


Як підключити цей пристрій.

По завершенні операції КПДП генерує переривання.

Схеми організації прямого доступу:

  1. Радіальна:

Канал прямого доступу резервується для кожного пристрою. ВУ виставляє до КПДП запит DMAx з номером цього каналу.

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

  1. Динамічна

Конкретне фізичний пристрій не прив'язується до номера каналу.

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

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

Крім того, буфер повинен бути фізично безперервним.

Питання з кешуванням!

Паралельні обчислення

Загальні поняття.

Сильно і слабко пов'язані:

  • Сильно пов'язані - спільна пам'ять для всіх ЦП;

  • Слабо пов'язані - у кожного ЦП своя пам'ять.

Однорідні й неоднорідні:

  • Однорідні - все ЦП однакові;

  • Неоднорідні - різні ЦП.

Архітектури:

  • Симетрична (SMP) - сильно пов'язана система з однорідними процесорами;

  • Масово-паралельні системи (MPP) - неоднорідні слабко пов'язані системи.

Паралельність команд і паралельність даних.

  1. Рівень процесів (ізольованих завдань)

  2. Другий рівень паралельності - загальні коди (процес), загальні дані, багато потоків - багатопотокова обробка.

  3. Алгоритмічна паралельність - паралельністю володіє сам алгоритм. Наприклад, множення матриці на вектор, можна вважати компоненти результуючого вектора одночасно (паралельно).

  4. Формами паралельності володіє і самий звичайний код (паралельність на рівні машинних команд, незалежні операції).

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

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

Топології масово-паралельних систем:

  1. Просторовий куб

  2. Просторовий тор

Мета: мінімізувати число передач даних між вузлами.

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

У SMP-системах синхронізація здійснюється за допомогою семафорів.

Команда xchg AX, [BX] - обмін значень регістра AX і вмісту осередку з адресою BX. Все відбувається в циклі - читання / модифікація / запис.

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

Шлях 1 - помістити загальні дані в некешіруемие осередку даних.

Шлях 2 - Синхронізація кешів.

Заводиться біт Shared для даних в кеші. Якщо такі дані змінюються, то ЦП обмінюються даними.

У Інтелу додаються чотири біта SMEH.

Принципи роботи периферійних пристроїв

  • Зовнішні Запам'ятовувальні Прилади (ВЗУ)

  • Пристрої відображення

  • Пристрої зв'язку

  • Пристрої сполучення з об'єктами управління

  • Спеціальні зовнішні пристрої (таймери і т.д.)

  • Символьні (передають потоки даних у вигляді потоку байтів)

  • Блокові (завжди обмінюються блоками інформації)

  • Файлові (інтерпретують інформацію у вигляді специфікацій ФС)

  • Синхронні (постачають дані тільки по команді)

  • Асинхронні (самі в будь-який момент часу можуть здійснити передачу даних)

Комунікаційні та пристрої зберігання:

  • Довільного доступу

  • Послідовного доступу

За доступу:

  • Колективного доступу (запити без обмеження з багатьох завдань, не мають історії запитів)

  • Виключного доступу (заздалегідь заданий порядок доступу, мають історію запитів)

  • Транзакційного доступу (винятковий доступ по черзі для різних завдань)

Зовнішні Запам'ятовувальні Прилади (ВЗУ)

Магнітні ВЗП

Феромагнетики мають кристалічну структуру


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

Види кодування:

  • Амплітудне - грунтується на абсолютному значенні параметра;

  • Частотне - засноване не на значенні параметра, а на факті його зміни.

Запис і зчитування

Читання - аналіз виникає при русі голівки струму.

Запис - подача струму в голівку.


Щільність запису (розмір плями) залежить від форми магніту і магнітних властивостей матеріалу.

Нечутливий матеріал - моторошно велике поле, значить, треба підвищувати площу, щоб не затерти сусідні запису (плями).

Чутливий матеріал - більше щільність запису, але менше рівень сигналу.

Оптичні ВЗП

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

А якщо треба писати?

Болванка - диск без канавок.

Запис проводиться теж лазером, але при підвищеній потужності променя - марнування канавок. Це одноразова запис.

Для багаторазового запису:

  1. Фазові диски (бистоостивающіе сплави, якщо остигають повільно - стають аморфними і працюю як дзеркало, якщо швидко - кристалізуються і розсіюють світло)

  1. Плівкові диски (полімерні плівки, які під впливом лазера змінюють свої спектральні властивості)

Магнитооптические ВЗП


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

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

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

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

Способи кодування інформації

Як закодувати імпульсами нулі і одиниці? Наявність імпульсу в певному часовому діапазоні означає одиницю. Треба закодувати саму інформацію і тимчасове вікно.

FM (Frequency Modulation) - ФК (Фазовий Кодування)

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

Щільність запису - 8 m s. А початково - 4 m s.

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

MFM (МФК)

Застосовується на 5-ти та 3-ох дюймових дисководах.

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

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

Недолік: апаратура повинна відчувати імпульси з точністю 2 m s.

RLL - ЦК (Групове Кодування)

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

Розіб'ємо байт на дві частини по 4 біти.

0

0

0

0

1

1

0

0

1

0

0

0

1

1

1

0

1

1

0

0

1

0

1

0

0

1

0

0

0

1

1

1

0

0

1

1

0

1

0

0

1

1

1

0

1

. . .

. . .

У новій послідовності не більше двох нулів підряд - не встигнемо втратити синхронізацію (можна назвати RLL 0.2). Щільність інформації на диску зменшиться на 1 / 5.

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

Відповідний метод - RLL. Вихідні дані - просто потік бітів, а вихідні - така послідовність бітів, що між двома одиницями йде послідовність нулів, кількість яких лежить в заданих межах. Ці межі прописані у назві (наприклад, RLL 2.7 - кількість нулів від двох до семи включно).

RLL 2.7

10 ® 1000

11 ® 0100

000 ® 100100

010 ® 001000

011 ® 000100

0010 ® 00001000

0011 ® 00100100

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

Формат диска

Весь диск розбивається на однакові доріжки. Проблема - як знайти початок доріжки?

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

Формат доріжки.

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

Спочатку визначаємо величину часових вікон, тільки потім читаємо дані. Якщо не відомий розмір часових вікон, то взагалі нічого прочитати не вийде.

Формат сектора

Ідентифікатор створюється при форматуванні і більше ніколи не змінюється.

Останній байт маркера даних показує тип сектора:

FB - сектор звичайних даних

F 8 - сектор стертих даних (не видно команді стандартного читання)

Перед записом даних завжди проводиться запис міжзонних проміжків.

Малі інтерфейси

Контролери Зовнішніх Пристроїв різні для різних Системних Шин. Потрібно, щоб можна було підключати велику кількість пристроїв до одного контролера.

Малі інтерфейси - інтерфейси між контролером і зовнішнім пристроєм.

ST 412 (Seagate Technology)

Контролер дозволяє підключати до чотирьох дисків. Є дві шини - шина

управління (одна на всіх) і шина даних (по одній на пристрій).

Шини даних - аналогові!

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

Повинна бути якась інформація, що встановлюється ззовні. Для цього використовувався CMOS.

IDE

Виробник виконує диск разом з контролером до нього. Контролер IDE просто комутує на шину потрібний диск. Одночасна робота з двома дисками неможлива.

Не потрібно знати про характеристики диска.

Можна ввести поняття фізичного та логічного адрес. Зараз диску передається вже номер логічного сектора (LBN), а контролер сам знає, де цей сектор фізично знаходиться. Ще й можна застосовувати змінна кількість секторів на доріжці.

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

Інтерфейси, що вирішують цю проблему:

SCSI (Small Computer System Interface)

Був розроблений як системний інтерфейс, але потім став використовуватися як малий.

Зовнішній пристрій має на виході SCSI-клієнт інтерфейс.

Кожне ВУ має свою власну адресу (1, 2, 3, 4, 5, 6, 7).

SCSI-сервер має адресу 0.

У принципі, SCSI - повноцінна шина. Вона має цикли шина, адреси, набір керуючих команд.

Команди діляться на групи:

  1. Обов'язкові (не залежать від типу пристрою)

  2. Рекомендовані (для виконання операцій обміну, залежать від типу пристрою)

  3. User-defined

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

Недолік - висока вартість.

Застосовується там, де без нього взагалі не можна.

RAID (організація дискових масивів)

RAID 0 - нічого, звичайний диск.

RAID 1 - оптимізація доступу.

RAID 2 - резервування (дзеркало), один сектор пишеться відразу на два диски, але зате читання відбувається з обох відразу - при читанні подвоюється швидкість.

RAID 5 - резервування і "склеювання" дисків, потрібно не менше трьох. В одному з них зберігається XOR всіх секторів з таким самим номером з інших дисків. Підвищується швидкість через "склеювання" і можливість відновити інформацію, якщо будь-який з дисків (але тільки один) гримнеться.

Hot Plug інтерфейси - PCMCIA і USB

Основна ідея - забезпечити на носяться мобільних комп'ютерах, де мало слотів для ВУ, можливість динамічно (без виключення комп'ютера) підключати і відключати пристрої.

У них спеціальні фізичний і електричний інтерфейси.

PCMCIA Box - контролер, керуючий слотами, в які вставляються ВУ. Він працює разом з сервісами типу Plug 'n' Play.

Особливості конструкцій ВЗП

Ключова проблема - треба довести магнітне поле до магнітного покриття.

Чим далі головка від носія, тим більше пляма. Щоб більш повно використовувати носій, треба зменшити магнітне пляма. Краще всього, коли відстань до покриття - нульове. Але тоді виникає контакт (так звані контактні магнітні носії).

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

Недолік - стирається магнітне покриття при збільшенні швидкості і в результаті розігріву.

Треба відсунути голівку від носія, для збільшення швидкості, але не сильно (на мікрони).

Приклад - магнітний циліндр.


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

Ще шлях: спільні змушувати голівку адаптуватися під зміна форми носія.

Тут потрібний диск.

Швидкість повітря поблизу диска вище через в'язкості і тертя повітря про диск.

Головка із-за своєї форми набуває деякі аеродинамічні

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

З іншого боку пружина притискає голівку до диска.


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

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

Вихід: технологія "вінчестера" - диск поміщається в герметичний корпус (герметичний від пилу, але пропускає повітря за допомогою мембран, щоб вирівнювати тиск).

Привід головок

Підійшли до межі щільності запису для матеріалу. Як ще підвищити щільність?

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

Спочатку для приводу головок використовувався кроковий двигун.

Подається струм протилежної спрямованості - система в рівновазі. Якщо поміняти напрям струму - планка зрушиться рівно на один зуб. Ще перемкнемо - ще

на зуб. Тому цей кроковий двигун - лінійний.

Є ще кругової.


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

Тоді: асинхронний двигун зі зворотним зв'язком.

Кілька дисків, останній шар покриття називається "серво". На цю серво-поверхня записується аналоговий сигнал. Серво-головка тільки читає.


Голівці дають сигнал "вперед" на час, рівний часу, щоб пройти половину періоду (див. серво-поверхня).

Серво-головка служить зворотним зв'язком: ловить мінімум на серво-поверхні, і зупиняє голівки. Головки весь час тремтять, тому що двигун постійно працює.

Зв'язкові ПУ (Пристрої зв'язку)

Служать для передачі інформації між комп'ютерами.

ВЗП - аналогові.

У разі Зв'язкових ПУ можна передавати прямо цифрову інформацію, тому що і джерело і приймач - комп'ютери.

Класифікація зв'язкових ПУ.

За способом кодування:

  • Амплітудні

  • Частотні

За способом формування сигналу:

  • Модульовані

  • Немодульований

По механізму синхронізації:

  • Синхронні

  • Асинхронні

По середах передачі інформації (всі носять електромагнітну природу):

  • Провідні лінії зв'язку

  • Оптичні

  • Радіо

Дротові - передача по металевому проводу


Але не все так просто - навколишнє середовище впливає на переданий сигнал.

Мідний дріт - найменше питомий опір.

При збільшенні довжини зростає опір дроту і, отже, падає рівень сигналу. Як зробити, щоб не було залежності від довжини?

Треба використовувати "струмова петля".

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

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

Передача інформації струмом - механізм, який використовує струм.

Активний опір впливає на амплітуду сигналу. А індуктивність і паразитна ємність проводів впливають на фазу сигналу - набагато гірше.

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

За Фур'є: можна розкласти будь періодичний сигнал на суму синусоїд, а потім зібрати назад.

Оптоволокно

Ще промінь має товщину, і навіть у лазера промінь трохи конічний.

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

Радіо


У радіосигналу поглинання пропорційно квадрату відстані, а не лінійно, як у дроту.

Неможливо реалізувати дуплексні з'єднання.

Мертва зона: при потужності, понад певну, приймач "сліпне". Якщо ми випромінюємо 10 Вт, а прийде сигнал 0.2 Вт, ми його не зрозуміємо.

Вихід - поділ частотних діапазонів. Ще - застосування спрямованих


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

Супутниковий зв'язок


Тут два варіанти - супутники з високою орбітою і супутники з низькою орбітою.

Наші використовують супутники з високою орбітою. Спілкування тільки через супутник-посередник.


А американці використовують низькі орбіти

Недоліки:

  1. Складний центр управління супутниками

  2. Супутники зачіпають верхні шари атмосфери, поступово знижуються, потім падають на Землю. Живуть один-два роки.

Зате такі супутники дешеві і легкі.

Підсистеми вводу / виводу

Файлові пристрої

Мета будь-якої програми - обробка даних, тобто треба грамотно побудувати структури даних і написати алгоритми їх обробки.

Структури даних, якими оперує мову:

  • Array [] A

  • String B

  • Struct C

Можемо прочитати звідки-то ці структури:

read (# каналу, A, B, C)

Звідси виходять наступні дії:

read (# каналу, Address, Len)

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

Файл може бути послідовного або довільного доступу. У файлі послідовного доступу є так звана поточна позиція.

Щоб виконати операції доступу до файлу, потрібна початкова ініціалізація:

# Каналу = open (ім'я_файлу, тіп_доступа)

При відкритті файлу відбувається наступне:

  • контролюються права доступу для даного користувача з даним типом доступу

  • формується структура FCB (File Control Block)

  • файловий процесор заповнює її поля.

RMS (Record Management System)

По-русски - система управління записами (СУЗ).

Вона має FCB і буфера введення / виводу, через які і відбувається реальний обмін даними.

RMS розглядає будь-який файл як набір кластерів. Кожен кластер на рівні файлу називається VBN (Virtual Block Number).

При закритті файлу (close) все буфера скидаються на диск. За командою Flush всі буфери просто скидаються на диск без закриття файлу.

При необхідності обміну з диском RMS взаємодіє з файловим процесором.

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

Для символьних пристроїв немає буферів, але є FCB, де містяться параметри пристрою.

При запиті ОС повинна перевірити покажчики на коректність, тобто покажчик повинен бути в області user 'а і під ним повинна бути відображена фізична пам'ять. Ще треба перевірити, чи весь буфер потрапив в відображену пам'ять.

Поки йде обробка на рівні ядра, передіспетчерізація процесів заборонена. Треба десь зберігати параметри вводу / виводу, для цих цілей у ОС є pool (шматок пам'яті для розміщення динамічних даних ОС).

Запити вводу / виводу оформлюються як IORP (Input / Output Request Packet). Оскільки до моменту виконання запиту відбудеться передіспетчерізація, то необхідно відобразити буфера введення / виводу в ядро. Для цього проводиться подвійне перетворення адреси:

  1. Перетворення лінійного адреси буфера процесу у фізичну адресу.

  2. Відобразити в область ОС отриману область фізичної пам'яті.

Ще потрібно заборонити переміщення фізичних сторінок пам'яті.

Монітор вводу / виводу повинен по базі даних драйверів знайти потрібний драйвер, створити IORP в невивантажуваного пулі, поставити його в чергу до драйвера.

Для вибору драйвера використовується база даних зовнішніх пристроїв, складність якої визначається:

  • складністю ОС

  • складністю конфігурації заліза.

Драйвер - програма, яка робить ОС незалежну від заліза.

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

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

База даних введення / виводу

  1. Пристрої, які відображаються в прикладні програми, називаються Device.

  2. Пристрої, які не відображаються в прикладні програми, називаються Bus.

  3. Потокові драйвери / фільтри.

База даних - списки блоків управління CB (Control Block), яка відображає фізичну структуру системи.

BCB

Bus Control Block

DCB

Device Control Block

UCB

Unit Control Block

ICB

Interrupt Control Block

SCB

Synchronization Control Block?

IORP можна передати самому драйверу або помістити в чергу, причеплений до DCB.


Перетворення ALBA ® FA ® KLBA може бути неможливо, тому що сторінки можуть бути не виділені.

Стратегії організації послідовності IORP:

  • покладається на ОС

  • драйвер сам вирішує, куди вставити IORP.

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

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

RPC

Remote Procedure Call

LPC

Local Procedure Call

APC

Asynchronous Procedure Call

DPC

відкладений

На DPC заборонена передіспетчерізація, на APC заборонена обробка асинхронних запитів, на Apps все дозволено.

Якщо чергу запитів порожня, то драйвер треба розбудити.

Проблема: з переривання не можна безпосередньо викликати IO $ END, оскільки можемо не перебувати в режимі ядра.

Вихід - механізм відкладених переривань.

Механізм відкладених переривань

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

Ядро не повторновходімо. Якщо ми володіємо контекстом ядра, ніхто інший не може їм володіти.

Єдине місце, в якому починається і закінчується транзакція звернення до ядра - місце перемикання з UserMode в KernelMode. Тільки в цій точці передаються права на контекст ядра.


Пастка відкладених переривань

Для реалізації використовується XCHG AX, [BX], це семафор, реалізований на процесорі.

mov AX, 1

xchg AX, [BX]

Якщо в результаті в AX буде 0, то значить, семафор був вільний, і ми його зайняли, а якщо 1 - значить був зайнятий і треба ще почекати.

ОС виймає з пастки перша адреса і по call передає туди управління, коли управління повернеться, ОС продовжує перегляд пастки.

Ми можемо завершити запит вводу / виводу (виконати відповідні дії). Потім робимо jmp, як ніби-то ОС змусила драйвер обробити новий запит. Все буде так само, як і в перший раз, але після команди старт потрапимо знову на кордон U / S.

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

Ідеологія мікроядра

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

Інтерфейс полягає в перетині кордону. Одна межа - один інтерфейс.

Якщо ЦП підтримує всього два кільця захисту, то Супервізор теж запихають у Kernel Ring.

Отже, є два інтерфейси: Kernel | Supervisor і Supervisor | User. У супервізора всі процеси працюють у своїх адресних просторах. Всі перевірки безпеки - на рівні супервізора.

У Windows 2000 це зроблено так.

Кожен модуль (FS, менеджер управління пам'ять, менеджер управління об'єктами і т.д.) запущений як окремий потік зі своїм контекстом.

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

GDI знаходиться в супервізора тільки з Win 2000, раніше він був в Win 32. Exe. Без Win 32. Exe жодне Win 32-додаток працювати не буде.

Синхронізація запитів вводу / виводу в ядрі

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

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

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

Запити поділяються на:

  • блокуючі

  • неблокуючим

У системах, що підтримують неблокуючим запити вводу / виводу, є модифікатор команд:

IO $ READ + NoWait

Тепер виникає інша проблема - неблокірующій запит виконаний, а як дізнатися, чи успішно він завершений? Це знає тільки драйвер.

Рішення - в ​​контексті завдання створюється буфер IOSB (Input Output Status Block), в який драйвер поміщає результати виконання операції. Це ж відбувається і при блокуючий запитах, але все це робиться неявно.

Отже, для виконання операції потрібно наступне:

  1. Запит (код операції, параметри)

  2. Координати запиту (FCB, # LBN, довжина)

  3. Адреса буфера

  4. IOSB

  5. Об'єкт синхронізації.

Буферизованная і небуферізованний обмін

IORP - структура для зберігання параметрів запиту вводу-виводу. ОС копіює в цей пакет параметри із запиту QIO, які зберігаються в системі. Тобто параметри в системному пулі і не [... ..]. Цими параметрами можна користуватися. Якщо параметри типу покажчик, то вони мають сенс тільки в контексті завдання. Якщо на процесорі наше завдання, то в CR 3 потрібне сторінкове перетворення. Якщо на CR 3 адреса ТСП іншої програми, то покажчик буде неправильним. Тому драйвер не зможе виконати обмін з буфером. Треба драйверу передати коректний покажчик. Покажчик повинен існувати в контексті драйвера. Потрібно отримати новий логічний адреса - в контексті драйвера. Потрібно з'ясувати фізичну адресу буфера, повністю перетворити його в логічний адреса в контексті драйвера.

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

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

Тому обмін між драйвером і буфером потрібно робити через спеціальну область пам'яті - неперемещаемую.

Буферизованная обмін - це обмін через спеціальну область пам'яті - неперемещаемую. Насправді при такому обміні існують 2 буфера - один у неперемещаемой області пам'яті, другий в області програми.

Запис: ОС заводить системний буфер, копіює туди буфер завдання, драйвер читає з буфера.

Читання: ОС заводить буфер, драйвер пише туди, ОС копіює з системного буфера в буфер програми.

Це дозволяє не обмежувати функції завдання.

Проблеми тут в розмірах. Наприклад, по кластерах 128кБ на кластер.

Буферизованная обмін - для повільних, з невеликими буферами [пристроїв].

Небуферізованний - для швидких і з великими буферами.

Запланований введення / висновок

Нічого немає.

Налаштування ОС

На прикладі MS - DOS (система з початковою настройкою)

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

Цей механізм передбачає:

  1. сигналізацію про вставлянні / видаленні пристрою

  2. ідентифікацію пристроїв.

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

Драйвери

Драйвери треба писати якщо:

  • даний ресурс буде поділюваним

  • цим пристроєм можна керувати тільки з контексту ядра.

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

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

Драйвери пристроїв, що не підтримують переривання

Якщо пристрій не генерує переривання, то точка входу драйвера по перериванню чіпляється до таймера (для опитування) - polling.

Якщо READY = 1, то операція, запитана у ВУ завершена. Цей біт постійно опитується (програмно).

Якщо працюємо в ВУ на прикладному рівні, то доведеться самим опитувати регістри ВУ. У серйозних ОС переривання на прикладному рівні неприпустимі.

Файли і файлові системи

Файлова система - це набір правил зберігання і обробки інформації.

Файловий процесор - програма, яка виконує ці правила.

У правилах є постійні та змінні параметри. Змінні параметри повинні бути визначені в мітці томи. Її положення - жорстко задана константа в будь-який ФС. Том - накопичувач ФС.

Завдання ФС:

  1. Оптимально розмістити дані на носії

  2. Знайти потім ці дані.

Необхідно присвоїти кожному набору даних ім'я і дати можливість:

  1. автору визначити це ім'я

  2. на ім'я знайти набір даних

Сегментна ФС (на прикладі RT -11)

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

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

Файлові системи з глобальним індексом (FAT) вирішують проблему безперервного зберігання файлів. Тепер вони можуть розташовуватися шматками по всьому носію. Вся область зберігання файлів розбивається на кластери. Для знаходження файлу, як і раніше потрібно знати тільки два числа - номер початкового кластера і довжину файлу. Послідовність кластерів описується списком - таблицею розміщення файлів (FAT), яка складається із записів, що містять тільки номер наступного кластера (і запису відповідно). Кожен кластер відповідає певного запису в таблиці і навпаки. Якщо в записі 0, то значить кластер - вільний, якщо -1 - останній у ланцюжку.

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

UFS

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

S 5 FS

Введено множинні бітові карти.

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

FFS (Fast File System) - файлова система BSD

Виділення логічними блоками. Ідеологічно - майже HPFS.

Індекс файлу будується наступним чином:

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

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

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

NTFS

Не можна ставити на диски менше 100 МБ. Ефективно працює з дисками в кілька ГБ.

Вся інформація, в т.ч. і для файлового процесора, стає файлом. Пропадає службова інформація.

MFT 2 - копія MFT відразу після форматування.

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

В одному індексі може описуватися не один файл, а набір файлів. Файли називаються потоками - name: stream, де name - ім'я набору, stream - ім'я файлу в наборі.

Наприклад, всі файли БД можна помістити в один набір.

Раз атрибути мають свої імена, то можна вводити свої атрибути (зараз набір атрибутів фіксований). Для цього заводиться файл атрибутів, що містить список атрибутів.

Access Control List (Список Управління Доступом) тепер можна зберігати в індексі. Це масив ACEntry - структури, яка описує користувача і групу та їх права доступу.

Якщо відбудеться збій при зміні MFT, то все впаде.

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

log - файл журналу транзакцій (завжди> 5 МБ). Це кільцевої буфер. Запис закривається в момент закриття транзакції. Якщо стався збій, то знаходяться всі незакриті запису і проводиться зворотний відкат.

У NTFS всі - атрибути, і файли теж.

Якщо файл маленький, то він записується прямо в індекс.

Операція монтування файлового пристрої

Як з'ясувати, яка ФС знаходиться на даному диску? Механізмів для цього немає.

Щоб ОС могла визначати тип ФС можна завантажити в ОС набір ФП і намагатися визначити тип ФС. Але все це виконується вручну або в напівавтоматичному режимі.

Монтування - зв'язування ФП з диском (те ж саме, що й відкриття файлу).

А в мережах?

На локальних машинах може стояти локальна ФС, яка при експортуванні перетворюється на віртуальну.

Мережеві файлові системи

Локальна ФС - ФС, що знаходиться на той же комп'ютері, що і ФП.

Структура локальних файлових систем.

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

Структура мережевих файлових систем.


Використовуються протоколи SAMBA (для локальних мереж) і ICFS (розширення SAMBA, що підтримує маршрутизацію через Internet).

Недолік таких систем - не можна забезпечити більшу ємність на кожній машині. А зараз завдання - зберігання надвеликих об'ємів даних. Два шляхи вирішення:

  1. зробити надвеликі обсяги дисків

  2. підключати до локальної ФС віддалені ФС.

ASM - Application Storage Manager

Реалізується локальна, але віртуальне ФС (схожа на віртуальну пам'ять).

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

NFS - Network File System


До кожного комп'ютера підключається декілька дисків. Все це розглядається як єдина ФС.

NFS дозволяє в будь-який каталог ФС локальної машини підключати будь-який фрагмент будь-якої віддаленої ФС.


Шлях запиту O ® A ® B ® A ® O

Недоліки:

  1. багато передач між комп'ютерами

  2. можна не знайти файл, якщо адміністратор комп'ютера A перетягне підключення B в інший каталог.

NAS - Network Attached Storage

Сховище, підключений до мережі.


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

Шлях запиту O ® B ® O

Недолік: складно реалізувати сервер ФС.

SAN - Storage Area Network

Fibre Channel - інтерфейс, що дозволяє підключати більше пристроїв, ніж SCSI.

Ідея:

Ця штука створює враження, що робота відбувається з локальним SCSI пристроєм.

Fibre Channel використовує оптоволоконні кабелі, але це дуже дорого.

Переваги:

  1. Швидкість (близько 1 Гб / с)

  2. Підтримка SCSI.

iSCSI

Це протокол, що підтримує SCSI інтерфейс, але який працює з TCP / IP.

67


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

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

Програмування, комп'ютери, інформатика і кібернетика | Лекція
211.7кб. | скачати


Схожі роботи:
Засоби введення виведення в Сі
Пристрій введення-виведення
Пристрої введення виведення інформації
Пристрої введення-виведення інформації
Пристрої введення-виведення інформації
Проектування автоматичного інтерфейсу введення-виведення
Базова система введення-виведення BIOS
Оператори введення і виведення в мові програмування Сі
Периферійні пристрої введення і виведення інформації
© Усі права захищені
написати до нас