Professional Documents
Culture Documents
Архітектура комп'ютерів та переферійних пристроїв
Архітектура комп'ютерів та переферійних пристроїв
МЕТОДИЧНІ ВКАЗІВКИ
до виконання самостійної роботи
з дисципліни
Вінниця 2021
Укладач:
Непийвода М.В. – викладач спец. дисциплін Вінницького фахового технічного
коледжу, спеціаліст І категорії
Рецензент:
Колесник І.С. – кандидат технічних наук, доцент Вінницького національного
технічного університету
Розглянуто та схвалено
на засіданні циклової комісії
«Інформатики та інформаційних
икомп’ютерних технологій»
Протокол № ____
від «____» _____________20___ р.
Голова циклової комісії
__________ А.І. Колесник
Зміст
Вступ ............................................................................................................................. 8
СРС №1 ......................................................................................................................... 9
СРС №2 ....................................................................................................................... 15
СРС №3 ....................................................................................................................... 17
СРС №4 ....................................................................................................................... 20
СРС №5 ....................................................................................................................... 24
СРС №6 ....................................................................................................................... 26
СРС №7 ....................................................................................................................... 31
СРС №8 ....................................................................................................................... 36
СРС №9 ....................................................................................................................... 39
Переривання
Нехай мікропроцесор виконує загадану йому (так звану фонову) програму,
обробляючи дані, що закладені в його основну пам’ять. Але в будь-який момент
часу деякий зовнішній пристрій може зажадати уваги до себе, бажаючи щоб
мікропроцесор обробляв дані саме від цього пристрою. (Таким зовнішнім
пристроєм може бути, наприклад, клавіатура, коли користувач натискає на одну з
її клавіш).
Тоді зовнішній пристрій виставляє на шину керування процесора сигнал
запиту на переривання, тобто вимагає щоб процесор припинив роботу з фоновою
програмою і обробив би інформацію від цього зовнішнього пристрою. У
відповідь мікропроцесор, скінчивши виконання чергової команди фонової
програми, припиняє роботу з нею і сприймає інформацію від зовнішнього
пристрою. В ній повинна бути вказівка на адресу підпрограми (заздалегідь
закладеної в основну пам’ять машини), за якою мають оброблятися дані від
зовнішнього пристрою. Мікропроцесор виконує цю підпрограму і повертається до
фонової програми. На цьому процедура переривання скінчається.
Захоплення шин
Обмін інформацією зовнішнього пристрою з основною пам’яттю
здійснюється звичайно через мікропроцесор. Але це досить повільна процедура і
тому при необхідності швидкого обміну зовнішнього пристрою з основною
пам’яттю великим об’ємом інформації (а це буває необхідним, наприклад, при
завантаженні основної пам’яті з жорсткого диску, або при запису на цей диск)
бажано такий обмін здійснювати безпосередньо, обминаючи мікропроцесор. У
режимі такого обміну мікропроцесор відключається, віддаючи ША і ШД
зовнішньому пристрою, котрий, як то кажуть, “захоплює шини”. Захоплення
триває стільки часу, скільки потрібно для обміну інформацією між зовнішнім
пристроєм і основною пам’яттю.
Після цього магістральна шина знову повертається у розпорядження
мікропроцесора.
Черга команд працює за принципом FIFO (First Input – First Output, тобто
перший прийшов — перший пішов) і зберігає на виході порядок надходження
команд. Довжина черги — 6 байт. Якщо операційний пристрій зайнятий
виконанням команди, шинний інтерфейс самостійно ініціює випереджальну
вибірку кодів команд із пам'яті у чергу команд. Вибирання з пам'яті чергового
командного слова здійснюється тоді, коли в черзі виявляється два вільних байти.
Черга збільшує швидкодію процесора у разі послідовного виконання команд. Під
час вибирання команд переходів, викликів і повернень із підпрограм та
оброблення запитів переривань черга команд скидається і вибирання починається
з нового місця програмної пам'яті.
Крім того, одним із завдань шинного інтерфейсу є формування фізичної 20-
розрядної адреси із двох 16-розрядних слів. Першим словом є вміст одного із
сегментних регістрів CS, DS,SS, ES, друге слово залежить від типу адресації
операнда або коду команди. Складання 16-розрядних слів відбувається зі
зміщенням на чотири розряди і здійснюється за допомогою суматора, що входить
до складу шинного інтерфейсу.
Рис. 1 – Структурна схема і8086
CLK, (CLC) Clock – вхідні тактові імпульси, які забезпечують синхронізацію роботи MП Вхід
RESET Reset (Clear) – сигнал апаратного скидання (при одиничному рівні). Вхід
(CLR) Переводить МП у початковий стан, при якому скинуті сегментні регістри
(крім СS, усі розряди якого встановлюються в одиничний стан), вказівник
команд IР, усі прапорці, регістри черги команд і всі внутрішні тригери у
пристрої керування. Сигнал RЕSЕТ не впливає на стан загальних регістрів.
Під час дії сигналу RESET усі виходи, що мають три стани, переводяться у
третій стан; виходи, що мають два стани, стають пасивними. Мінімальна
тривалість сигналу RЕSЕТ при першому ввімкненні МП становить 50 мкс, а
при повторному запуску – чотири такти синхронізації, тобто 0,8 мкс при
тактовій частоті 5 MГц. Після закінчення сигналу RESET починається цикл
вибірки команди з пам’яті з адресою 0FFFFH: 0000
Minimum/maximum – вхід сигналу вибору мінімального або максимального Вхід
MN/
режимів. Сигнал на цьому вході визначає режим роботи МП: 1 –
мінімальний, 0 – максимальний
Таблиця 2 – Призначення контактів МП i8086 у мінімальному режимі
Позначення Призначення Тип
Interrupt Acknowledge – вихідний сигнал підтвердження переривання, що Вихід
визначає читання вектора переривання
Address Latch Enable – вихідний сигнал дозволу фіксації адреси; Вихід
ALE видається на початку кожного циклу шини і використовується для запису
адреси в регістр-фіксатор
Data Enable – вихідний сигнал дозволу даних, що визначає появу даних Вихід
на шині адреси/даних (z)
Загальні характеристики
Розширення
1. тактова частота від 8 до 10 Мгц, продуктивність у 2-3 рази вища, ніж
у і8086;
2. адресує до 16 Мбайт фізичної пам'яті, з можливістю виділення кожній
програмі віртуальної пам'яті розміром до 1 Гбайта;
3. реалізовано конвеєрне виконання команд;
4. реалізовано багатозадачний режим роботи.
Найістотнішою відмінністю від Intel 8086 є механізм керування адресацією
пам'яті, що забезпечує 4-рівневу систему захисту і підтримання віртуальної
пам'яті, та спеціальні засоби призначені для підтримання механізму перемикання
задач.
Технічні характеристики
1. Тактова частота (МГц): залежить від маркування: 80286-6 — 6 МГц,
80286-8 — 8 МГц, 80286-10 — 10 МГц, 80286-12 — 12,5 МГц
2. Розрядність регістрів: 16 біт
3. Розрядність шини даних: 16 біт
4. Розрядність шини адреси: 24 біт
5. Об'єм адресованої пам'яті: 16 Мбайт
6. Об'єм віртуальної пам'яті: 1 Гбайт
7. Кількість транзисторів: 134 000
8. Техпроцес (нм): 1500 (1,5 мкм)
9. Площа кристала: 49 мм²
10.Напруга : +5 В
11.Роз'єм: 68-pin
Корпус: 68-контактний керамічний LCC (R80286), пластиковий LCC
(N80286), керамічний PGA (CG80286 або A80286)
СРС №6
Числові регістри
Числові регістри, як правило, в технічній літературі позначаються ST0 -
ST7. Числові регістри використовуються за принципом стеку. Регістр стану в полі
ST містить номер числового регістра, що є вершиною стеку. При виконанні
команд як операнди можуть виступати числові регістри. В цьому випадку номер
вказаного в команді регістра додається до вмісту поля ST регістра стану і таким
чином визначається регістр, що використовується. Більшість команд після
виконання збільшують поле ST регістра стану, записуючи результати своєї роботи
в стек числових регістрів.
Регістр тегів (TW)
Цей регістр розділений на вісім двобітових полів, які позначаються
TAG0...TAG7. Кожне поле відноситься до свого числового регістра.
Поля регістра тегів класифікують вміст "свого" числового регістра:
00 - Регістр містить дійсне ненульове число
01 - В регістрі знаходиться нуль
10 - Регістр містить недійсне число - нечисло, нескінченність, невизначеність
11 - Порожній неініціалізований регістр
7 4 1
+2 5 2
1 2 1 3
21 0
2 5 2 8 = 2∙82 + 5∙81 + 2∙80 = 13610;
3210
1 2 1 38 = 1∙83+2∙82+1∙81+3∙80=65110; 48110 + 13610 = 65110.
−3 4 6
1 5 4
1 7 2
21 0
3 4 6 8 = 3∙82 + 4∙81 + 6∙80 = 23010;
210
1 5 4 8 = 1∙82 + 5∙81 + 4∙80 = 10810; 23010 – 15410 = 12210;
210
1 7 2 8 = 1∙82 + 7∙81 + 2∙80 = 12210.
Приклад 3. Виконати множення вісімкових чисел 318 ∙ 238
∙3 1
2 3
7 3 3
10
318 = 3 ∙ 81 + 1∙80 = 2510;
10
2 3 8 = 2 ∙ 81 + 3 ∙ 80 = 1910; 2510 ∙ 1910 = 47510;
21 0
7 3 3 8 = 7 ∙ 82 + 3 ∙ 81 + 3 ∙ 80 = 47510.
∙ 0 1 2 3 4 5 6 7 10
0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 10
2 0 2 4 6 10 12 14 16 20
3 0 3 6 11 14 17 22 25 30
4 0 4 10 14 20 24 30 34 40
5 0 5 12 17 24 31 36 43 50
6 0 6 14 22 30 36 44 52 60
7 0 7 16 25 34 43 52 61 70
10 0 10 20 30 40 50 60 70 100
СРС №16
.
Двоїстими є функції і , і , і тощо (див. табл. 2.3).
Означення. До самодвоїстих булевих функцій відносять такі булеві функції, які є
двоїстими відносно самих себе, тобто справедливе співвідношення
*
називають двоїстою . Для формул над множиною
принцип двоїстості може бути сформульований так: для отримання формули ,
двоїстої формулі , достатньо у формулі усюди замінити 0 на 1, 1 на 0, & на ,
на &.
.
Застосовуючи наведені вище тотожності, перетворимо цю функцію
.
Таким чином, одна і та ж функція може бути подана різними формулами. В
зв’язку з цим виникає задача знаходження такої форми запису функцій, при якій
кожній функції відповідає одна і лише одна формула, а формулі відповідає одна і
лише одна функція.
Такі форми запису називають канонічними.
Канонічні форми запису називаються також досконалими диз’юнктивними
нормальними формами (ДДНФ) або досконалими кон’юнктивними нормальними
формами (ДКНФ).
10 01010
15 01111
20 10100
.
2. Набори добутків об’єднуються знаком диз’юнкції
при ; ;
при ; .
Приклад. Записати конституенту нуля на одинадцятому наборі; число
аргументів дорівнює шести:
11 001011
.
Означення: добуток конституент нуля, які дорівнюють нулю на тих самих
наборах, що і задана функція, називається досконалою кон’юктивною нормальною
формою.
Будь-яка логічна функція має єдину досконалу кон’юктивну нормальну
форму.
Отримання ДКНФ розглянемо на такому прикладі.
Необхідно подати в ДКНФ функцію трьох аргументів, яка дорівнює нулю на
наборах 1, 3, 6.
Для подання функції виконуються дії:
– записують диз’юнкцію всіх аргументів для наборів, на яких функція
перетворюється в нуль, і над аргументами, які дорівнюють одиниці, вказують знак
заперечення
1 001
3 011
6 110
– записують функцію у вигляді:
.
СРС №18
Бітові зсуви
До бітових операцій також відносять бітові зсуви. При зсуві значення бітів
копіюються в сусідні за напрямом зсуву. Розрізняють декілька видів зсувів —
логічний, арифметичний і циклічний, залежно від обробки крайніх бітів.
Також розрізняють зсув вліво (в напрямку від молодшого біта до старшого) і
вправо (в напрямку від старшого біта до молодшого).
Логічний зсув
Арифметичний зсув (правий)
Циклічний зсув
У мовах програмування
У наступній таблиці для деяких мов програмування наведено вбудовані
оператори та функції, що реалізують побітові логічні операції.
Викл. Зсув Зсув
Мова НІ І АБО Інші
АБО вліво вправо
C/С++, Java, C#,
~ & | ^ << >>
Ruby
Pascal not and or xor shl shr
INOT IAND IOR IEOR
PL/I BOOL
¬ & | ¬
Prolog \ /\ \/
СРС №19
Методи адресації
Кількість методів адресації в різних процесорах може бути від 4 до 16.
Розглянемо декілька типових методів адресації операндів, що використовуються
зараз в більшості мікропроцесорів.
Безпосередня адресація (див. рис. 1) припускає, що операнд (вхідний)
знаходиться в пам'яті безпосередньо за кодом команди. Операнд звичайно є
константою, яку треба кудись переслати, до чогось додати і т.д. Наприклад, команда
може полягати в тому, щоб додати число 6 до вмісту якогось внутрішнього регістра
процесора. Це число 6 розташовуватиметься в пам'яті, усередині програми в адресі,
наступній за кодом даної команди складання.
Сегментація пам'яті
Кажучи про адресацію, не можна обійти питання про сегментацію пам'яті,
вживаної в деяких процесорах, наприклад в процесорах IBM PC-сумісних
персональних комп'ютерів.
В процесорі Intel 8086 сегментація пам'яті організована таким чином.
Вся пам'ять системи представляється не у вигляді безперервного простору, а у
вигляді декількох областей - сегментів заданого розміру (по 64 Кбайта), положення
яких в просторі пам'яті можна змінювати програмним шляхом.
Для зберігання кодів адрес пам'яті використовуються не окремі регістри, а
пари регістрів:
сегментний регістр визначає адресу початку сегменту (тобто
положення сегменту в пам'яті);
регістр покажчика (регістр зсуву) визначає положення робочої
адреси усередині сегменту.
Джерела помилок
Розглянемо джерела помилок на перших трьох етапах проектування.
Етап 1. На цьому етапі джерелами помилок можуть бути: логічна
непогодженість вимог, недогляду, неточності алгоритму.
Етап 2. На даному етапі джерелами помилок можуть бути: недогляду функцій,
непогодженість протоколу взаємодії апаратури й програм, невірний вибір
мікропроцесорних наборів, неточності алгоритмів, невірна інтерпретація технічних
вимог, недогляд деяких інформаційних потоків.
Етап 3. На цьому етапі джерелами помилок можуть бути: при розробці
апаратури - недогляду деяких функцій, невірна інтерпретація технічних вимог,
недоробка в схемах синхронізації, порушення правил проектування; при
виготовленні прототипу - несправності комплектуючих виробів, несправності
монтажу і зборки; при розробці програмних засобів - недогляду деяких функцій
технічного завдання, неточності в алгоритмах, неточності кодування.
Кожний з перерахованих джерел помилки може породити велике число
суб'єктивних або фізичних несправностей, які необхідно локалізувати й усунути.
Виявлення помилки і локалізація несправності є складною задачею з кількох
причин: по-перше, через велике число несправностей; по-друге, через те, що різні
несправності можуть виявлятися однаковим образом. Тому що відсутні моделі
суб'єктивних несправностей, зазначена задача не формалізована. Маються визначені
успіхи в області створення методів і засобів виявлення помилок і локалізації
фізичних несправностей. Ці методи і засоби широко використовуються для
перевірки працездатного стану і діагностики несправностей дискретних систем при
проектуванні, виробництві й експлуатації останніх.
Суб'єктивні несправності відрізняються від фізичних тем, що після виявлення,
локалізації і корекції більше не виникають. Однак, як випливає з переліку джерел
помилок, суб'єктивні несправності можуть бути внесені на етапі розробки
специфікації системи, а це означає, що навіть після самих ретельних іспитів системи
на відповідність її зовнішнім специфікаціям у системі можуть знаходитися
суб'єктивні несправності.
Процес проектування - ітераційний процес. Несправності, виявлені на етапі
приємоздаточних іспитів, можуть привести до корекції специфікацій, а отже, до
початку проектування всієї системи. Виявляти несправності необхідно якомога
раніше, для цього треба контролювати коректність проекту на кожнім етапі
розробки.
Паралельні комп’ютери
За останній час архітектура паралельних комп’ютерів зросла досить великими
темпами. В даний час налічується дуже багато архітектурних рішень, проте всіх їх
можна поділити на два класи:
1. Комп’ютери з спільною пам’яттю (мультипроцесорні системи). В даних
комп’ютерах декілька процесорів мають доступ до спільної оперативної пам’яті
одночасно. Всі процесори працюють в одному адресному просторі.
Векторно-конвеєрні комп’ютери
Класичним прикладом комп’ютерів даного типу є комп’ютери Cray C90, що
був випущений на початку 90-х років. Даний комп’ютер містить 16 рівноцінних
процесорів, з часом такту 4,1нс, тобто тактова частота складає 250 МГц. Всі
процесори однакові, як по характеристиках, так і по відношенню по розділенню
ресурсів.
Структура ОЗП
Кожне слово в пам’яті складається з 80 біт, 64 з них - біти даних, 16 біт - для
корекції помилок. Для реалізації паралельного доступу вся пам'ять розбита на
банки. При максимальній конфігурації вся пам'ять розбивається на 1024 банки, які в
свою чергу об’єднуються в секції та підсекції. Кожна з восьми секцій включає в себе
8 підсекцій, кожна з яких включає 64 банки. При одночасному зверненні до однієї
підсекції, конфлікт вони вирішують за 6 тактів. Якщо вибірка відбувається з кроком,
то час вирішення конфлікта збільшується із збільшенням значення стеку. Кожен
процесор має доступ до ОЗП через чотири порти, що працюють зі швидкістю два
слова за такт. З цих чотирьох портів обов’язково один виділяється для операції
вводу/виводу. Ще один обов’язково виділяється для проведення запису.
Секція вводу виводу.
Підтримує три типи каналів для роботи із зовнішніми пристроями:
1. Low-speed channels (LOSP) 6 Мбіт/с
2. High-speed channels (HISP) 200Мбіт/с
3. Very high-speed channels (VHISP) 1800 Мбіт/с
T = s + α × N,
де s - час запуску, α - константа, що залежить від команди (зазвичай 1/2, 1 або 2) і N
- довжина вектора.
- керуючі зв’язки;
- інформаційні зв’язки.
За допомогою ВТВ можна успішно передбачати один перехід, якщо він має
закономірність виконання, що регулярно повторюється. Наприклад, буде коректно
передбачений умовний перехід, який виконується при кожній парній ітерації і не
виконується при кожній непарній ітерації. Переходи по покажчику, значення якого
не є постійним для переважної більшості випадків, а також умовні переходи, що не
мають закономірності виконання є непередбачуваними або погано
передбачуваними. Якщо такі переходи зустрічаються всередині циклів, що часто
повторюються, то це може істотно позначитися на продуктивності.
Якщо процесор зчитує дані з 32-розрядного регістру (наприклад, ЕАХ) відразу
після того, як був зроблений запис у фрагмент цього регістра (наприклад, AL, АН,
АХ), мікрооперація зчитання не зможе проникнути в (ROB) до того як
мікрооперація запису не виконається і не буде видалена з (ROB). Це займає мінімум
7 тактів.
Затримка пов'язана з тим, що після повернення в (ROB) результату
мікрооперації, яка записує в регістр, (ROB) буде міститися лише фрагмент регістра,
а мікроперації, яка прочитує з регістра, потрібен цілий регістр.
Процесор не може збирати один регістр по частинах з різних місць.
Мікрооперація на стадії (RAT) буде чекати, поки з (ROB) не будуть видалені
мікрооперації.
Мікропроцесор Pentium ІІІ побудований на архітектурі P6 і має ряд
нововведень. Він виготовляється по 0.25-мікронній технології, має 32 Кб кеша L1 та
512 Кб кеша L2. Він розрахований на роботу на частоті 100 MHz, кеш другого рівня
працює на половині тактової частоти. Серед сосбливостей його архітектури -
динамічне виконання команд і технологія потокової пам’яті, яка дозволяє
покращити систему вводу/виводу з комбінованим записом (WC) та використовувати
інструкції попередньої виборки і потокового запам’ятовування. В Pentium ІІІ
з’явилось вісім нових регістрів з прямим доступом, які здатні зберігати чотири
числа ординарної точності (всього 128 розрядів).
Потокові розширення SIMD (Single Instruction Multiply Data, відомі раніше як KNI-
Katmai New Instructions) добавили 50 інструкцій для операції (ординарної точності)
над числами з плаваючою точкою, що дозволяє отримувати до чотирьох результатів
за один цикл процесора. З’явились також 12 нових мультимедійних інструкцій (в
додаток до попередньої технології MMX) і 8 інструкцій кешування.
СРС №33
Таким чином, кожна задача може мати: своє лінійне адресний простір, заданий
своєї локальної таблицею дескрипторів (LDT), свій фізичний адресний простір,
розташоване в будь-якій доступній області та задається сторінковим механізмом
(базовий адреса каталогу сторінок в CR3), свій протокол захисту, який
забезпечується покажчиками на стеки різних рівнів привілеїв і картою
введення/виведення. Поле селектора TSS попередньої задачі забезпечує можливість
повернення при послідовному виклику декількох вкладених завдань.
Нормальне переключення задач забезпечується спеціальними дескрипторами в
таблицях дескрипторів LDT, GDT або IDT. Такими дескрипторами є 16- і 32-
розрядні дескриптори TSS і дескриптор шлюзу завдання. Дескриптор шлюзу задачі
призначений для перенаправлення всіх вказують на нього викликів (CALL),
переходів (JMP) і векторів переривань (особливих ситуацій) на обробку в окрему
задачу.
Повністю процес перемикання задачі (всі виконувані процесором дії) виглядає
наступним чином.
Примітка:
*Якщо CR0.WP = 0, то сторінка захищена від запису і можливо тільки її читання.
Значення прапорів: U - користувач (U/S = 1);
S - супервізор (U/S = 0);
R - тільки читання (R/W = 0);
W - читання/запис (R/W = 1).
СРС №39
Не всі 1024 таблиці сторінок мають обов'язково бути в наявності (до речі, вони
зайняли б в пам'яті задоволено багато місця - 4 Мбайт). Якщо програма реально
використовує лише частину можливого лінійного адресного простору, а так завжди і
буває, то невживані поля в каталозі сторінок позначаються, як відсутні. Для таких
полів система, економлячи пам'ять, не виділяє сторінкові таблиці.
При включеній сторінковій трансляції лінійна адреса розглядається, як
сукупність три полів: 10-бітового індексу в каталозі сторінок, 10-бітовбго індексу у
вибраній таблиці сторінок і 12-бітового зсуву у вибраній сторінці. Нагадаємо, що
лінійна адреса утворюється шляхом складання базової адреси сегменту, узятого з
дескриптора сегменту, і зсуву в цьому сегменті, наданого програмою.
Старші 10 біт лінійної адреси утворюють номер поля в каталозі сторінок.
Базова адреса каталога зберігається в одному з регістрів процесора, що управляють,
конкретно, в регістрі Cr3. Через те, що каталог сам є сторінкою і вирівняний в
пам'яті на межу 4 Кбайт, в регістрі Cr3 для адресації до каталога використовуються
лише старші 20 битий, а молодші 12 біт зарезервовані для майбутніх застосувань.
Поля каталога мають розмір 4 байт, тому індекс, що витягує з лінійної адреси,
зрушується вліво на 2 битий (тобто умножається на 4) і отримана величина
складається з базовою адресою каталога, утворюючи адресу конкретного поля
каталога. Кожне поле каталога містить фізична базова адреса однієї з таблиць
сторінок, причому, оскільки таблиці сторінок самі є сторінками і вирівняні в пам'яті
на межу 4 Кбайт, в цій адресі значущими є тільки старші 20 битий.
Далі з лінійної адреси витягується середня частина (биті 12...21), зрушується
вліво на 2 битий і складається з базовою адресою, що зберігається у вибраному полі
каталога. В результаті утворюється фізична адреса сторінки в пам'яті, в якому знову
ж таки використовуються тільки старші 20 битий. Ця адреса, що розглядається, як
старші 20 біт фізичної адреси осередку, що адресується, носить назву сторінкового
кадру. Сторінковий кадр доповнюється з правого боку молодшими 12 бітами
лінійної адреси, які проходять через сторінковий механізм без зміни і грають роль
зсуву усередині вибраної фізичної сторінки.
Розглянемо абстрактний приклад, що дозволяє прослідкувати ланцюжок
перетворення віртуальної адреси у фізичний. Хай програма виконує команду
mov Еах,ds:[ЕВХ]
при цьому вміст DS (селектор) складає 1167і, а вміст ЕВХ (зсув) 31678u.
Старші 13 біт селектора (число 116u) утворюють індекс дескриптора в системній
дескрипторній таблиці. Кожен дескриптор включає досить великий об'єм інформації
про конкретний сегмент і, зокрема, його лінійну адресу. Хай в елементі
дескрипторної таблиці з номером 116h записана лінійна адреса (базова адреса
сегменту) 0l0sl000h.
Тоді повна лінійна адреса осередку, що адресується, визначиться, як сума
базової адреси і зсуву:
Базова адреса сегменту 0l0sl000h
Зсув 0003167811
Повна лінійна адреса 0108267811
Індекс каталога складає 4h. Множення його на 4 дасть зсув від початку
каталога. Цей зсув рівний 10h.
Індекс таблиці сторінок опинився рівним 82h. Після множення на 4 отримуємо
зсув в таблиці сторінок, рівне в даному випадку 210h.
Припустимо, що регістр Cr3 містить число S000h. Тоді фізична адреса осередку в
каталозі, звідки треба отримати адресу закріпленої за даною ділянкою програми
таблиці сторінок, складе S000h + l0h = 8010h. Хай за цією адресою записано число
4602lh. Його 12 молодших бітів складають службову інформацію (зокрема, битий 1
свідчить про присутність цієї таблиці сторінок в пам'яті, а битий 5 говорить про те,
що до цієї таблиці вже були звернення), а старші біти, тобто число 46000h
утворюють фізична базова адреса таблиці сторінок. Для отримання адреси
необхідного елементу цієї таблиці до базової адреси треба додати зсув 210h.
Результуюча адреса складе 462101h.
Вважатимемо, що за адресою 4621011 записано число 01FF502111.
Відкинувши службові біти, отримаємо адресу фізичної сторінки в пам'яті 01ff5000u.
Ця адреса завжди закінчується трьома нулями, оскільки сторінки вирівняні в пам'яті
на межу 4 Кбайт. Для отримання фізичної адреси осередку, що адресується, слід
заповнити 12 молодших біт отриманої адреси бітами зсуву з лінійної адреси нашого
осередку, в яких в нашому прикладі записано число 678h. У результаті отримуємо
фізичну адресу пам'яті 01FF567811, розташований в кінці 32-го Мбайта.
Як видно з цього прикладу, і із сторінковою трансляцією, і без неї обчислення
фізичних адрес осередків, що адресуються, виконується в захищеному режимі
зовсім не так, як в реальному. Неприємним практичним наслідком правил адресації
захищеного режиму є вже згадувана "відірваність" прикладної програми від
фізичної пам'яті. Програміст, що відладжує програму захищеного режиму
(наприклад, додаток Windows), може легко заглянути в сегментні регістри і
визначити селектори, виділені програмі. Проте селектори абсолютно нічого не
говорять про фізичні адреси, використовувані програмою. Фізичні адреси
знаходяться в таблицях дескрипторів, а ці таблиці недоступні прикладній програмі.
Таким чином, програміст не знає, де в пам'яті знаходиться його програма або
використовувані нею області даних.
З іншого боку, використання в процесі перетворення адрес захищених
системою таблиць має свої переваги. Зазвичай багатозадачна операційна система
створює для кожного виконуваного завдання свій набір таблиць перетворення адрес.
Це дозволяє кожному із завдань використовувати весь діапазон віртуальних адрес,
при цьому, хоча для різних завдань віртуальні адреси можуть збігатися (і, як
правило, принаймні частково збігаються), проте сегментне і сторінкове
перетворення забезпечують виділення для кожного завдання неспівпадаючих
областей фізичної пам'яті, надійно ізолюючи віртуальні, адресні простори завдань
один від одного.
Повернемося тепер до таблиць дескрипторів і розглянемо їх детальніше. Існує
два типи дескрипторних таблиць: таблиця глобальних дескрипторів (GDT від Global
Descriptor Table) і таблиці локальних дескрипторів (LDT від Local Descriptor Table)
.обично для кожної з цих таблиць в пам'яті створюються окремі сегменти, хоча в
принципі це не обов'язково. Таблиця глобальних дескрипторів існує в єдиному
екземплярі і зазвичай належить операційній системі, а локальних таблиць може бути
багато (це типово для багатозадачного режиму, в якому кожному завданню
призначається своя локальна таблиця).
Віртуальний адресний простір ділиться на дві рівні половини. До однієї половини
звернення відбувається через GDT, до іншої половини через LDT. Як вже
наголошувалося, весь віртуальний простір складається з 214 сегментів, з яких 213
сегментів адресуються через GDT, і ще 213 - через LDT.
Коли багатозадачна система перемикає завдання, глобальна таблиця залишається
незмінною, а поточна локальна таблиця замінюється на локальну таблицю нового
завдання. Таким чином, половина віртуального простору в принципі доступна всім
завданням в системі, а половина перемикається від одного завдання до іншої у міру
перемикання самих завдань.
Для програмування захищеного режиму і навіть для відладки прикладних
програм, що працюють в захищеному режимі, корисно уявляти собі структуру
дескриптора і сенс його окремих полів. Слід відмітити, що існує декілька типів
дескрипторів, яким властиві різні формати. Так, дескриптор сегменту пам'яті
(найбільш поширений тип дескриптора) відрізняється від дескриптора шлюзу,
використовуваного, зокрема, для обслуговування переривань. Розглянемо формат
дескриптора пам'яті (див. рис. 6).
Сегментація пам'яті
Особливості сегментації пам'яті
Сегментація пам'яті зображає логічний адресний простір як сукупність
незалежних блоків змінної довжини, які називають сегментами. Кожен сегмент
містить дані одного призначення.
Кожен сегмент має ім'я і довжину. Логічна адреса складається з номера
сегмента і зсуву всередині сегмента; з такими адресами працює прикладна програма.
Компілятори створюють окремі сегменти для різних даних програми (сегмент
коду, сегмент даних, сегмент стека). Під час завантаження програми у пам'ять
створюють таблицю дескрипторів сегментів процесу, кожний елемент якої
відповідає одному сегменту і складається із базової адреси, значення межі та прав
доступу.
Під час формування адреси її сегментна частина вказує на відповідний
елемент таблиці дескрипторів сегментів процесу.
Якщо зсув більший, ніж задане значення межі (або якщо права доступу
процесу не відповідають правам, заданим для сегмента), то апаратне забезпечення
генерує помилку. Коли ж усе гаразд, сума бази і зсуву в разі чистої сегментації дасть
у результаті фізичну адресу в основній пам'яті. Якщо сегмент вивантажений на диск,
спроба доступу до нього спричиняє його завантаження з диска в основну пам'ять.
Кожному сегменту відповідає неперервний блок пам'яті такої самої довжини,
що перебуває в довільному місці фізичної пам'яті або на диску.
Переваги сегментації пам'яті:
1. Є можливість організувати кілька незалежних сегментів пам'яті для процесу і
використати їх для зберігання даних різної природи. Права доступу до
кожного такого сегмента можуть бути задані по-різному.
2. Окремі сегменти можуть спільно використовуватися різними процесами, їхні
таблиці дескрипторів сегментів повинні містити однакові елементи, що
описують такий сегмент.
3. Фізична пам'ять процесу не обов'язково має бути неперервною. Сегментація
дає змогу окремим частинам адресного простору процесу відображатися не в
основну пам'ять, а на диск, і довантажуватися з нього за потребою,
забезпечуючи виконання процесів будь-якого розміру.
Недоліки:
1. Необхідність введення додаткового рівня перетворення пам'яті знижує
продуктивності. Для ефективної реалізації сегментації потрібна апаратна
підтримка.
2. Керування блоками пам'яті змінної довжини з урахуванням необхідності
їхнього збереження на диску може бути складним.
3. Вимога, щоб кожному сегменту відповідав неперервний блок фізичної пам'яті
відповідного розміру, спричиняє зовнішню фрагментацію пам'яті.
Внутрішньої фрагментації у цьому разі не виникає, оскільки сегменти мають
змінну довжину і завжди можна виділити сегмент довжини, необхідної для
виконання програми.
Сегментацію застосовують обмежено через фрагментацію і складність
реалізації ефективного звільнення пам'яті та обміну з диском.
Асоціативна пам'ять
Для підвищення продуктивності у разі сторінкової організації пам'яті
запропоновано технологію асоціативної пам'яті або кеша трансляції. У
швидкодіючій пам'яті (швидшій, ніж основна пам'ять) створюють набір із кількох
елементів (різні архітектури відводять під асоціативну пам'ять від 8 до 2048
елементів. Кожен елемент кеша трансляції відповідає одному елементу таблиці
сторінок.
Під час генерування фізичної адреси спочатку відбувається пошук
відповідного елемента таблиці в кеші (за полем каталогу, полем таблиці та зсуву), і
якщо він знайдений, стає доступною адреса відповідного фрейму, що негайно
можна використати для звертання до пам'яті. Якщо ж у кеші відповідного елемента
немає, то доступ до пам'яті здійснюють через таблицю сторінок, а після цього
елемент таблиці сторінок зберігають в кеші замість найстарішого елемента.
Сегмент стану завдання TSS (Task State Segment) - це структура даних, яка
визначає стан (тобто контекст) завдання. У ній зберігається вміст всіх регістрів
загального призначення, сегментних і деяких системних регістрів а також деяка
додаткова інформація.
Для кожного завдання в системі потрібно визначити один сегмент TSS і далі
процесор буде сам використовувати ці сегменти завдань, тобто структура TSS
підтримується апаратно.
TSS бувають двох типів - 16- і 32-розрядні. 16-розрядні з'явилися в процесорі
i286 і вони можуть використовуватися в 32-розрядних процесорах, але ми їх
розглядати не будемо, тому що програмування Intel286 тут не розглядається.
32-розрядні TSS з'явилися в процесорі Intel386, з тих пір вони не зазнали змін і
на них будується механізм мультизадачности будь ОС захищеного режиму. Скрізь
далі, де ми будемо говорити про TSS, саме такі, 32-розрядні, і будуть матися на
увазі.
На рисунку 1 наведена структура 32-розрядного TSS:
Примітка 1:
Байт прав доступу access_rights має наступний формат:
біт: опис
0: = 1
1: Біт B (Busy) - зайнятість завдання (див. Наступну главу)
2: = 1
3: = 0
4: = 0
5,6: = DPL - Рівень привілеїв сегмента TSS (див. Наступну главу)
7: P - біт присутності сегмента, зазвичай встановлений в 1.
Примітка 2:
Старша частина межі limit_hi має такий формат:
біт: опис
0..3: Старші 4 біта межі
4: Біт U (User) - цей біт ОС може використовувати в своїх цілях
5..7: = 0
Для наочності формат дескриптора TSS наведено на рисунку 2.
Для команд FPU існує п’ять різних форматів кодування (див. рис. 1). Всі ці
формати ідентичні в одному – в старших п’яти бітах двобайтного кода команди FPU
завжди містять спеціальне значення 11011b. По цьому значенню процесор розпізнає
команди FPU.