Керiвництво программиста

Керiвництво программиста

1 АРХІТЕКТУРА ПРОЦЕСОРІВ INTEL

1.1 Історія розвитку процесорів

Історія мікропроцесорів почалася в 1971 році, коли фірма Intel

випустила перший мікропроцесор i4004. Він мав розрядність 4 біта,

спроможність адресувати 640 байт пам'яті, тактову частоту 108 кГц і

продуктивність 0.06 MIPS. Такий процесор вже міг працювати в якості

обчислювального ядра калькулятора. Він містив 2300 транзисторів і

виконувався по технології з дозволом 10 мкм. Через рік з'явився його 8-

бітный “родич” - i8008, що адресує вже 16 Кб пам'яті.

В 1974 році з'явився 8-разрядный процесор i8080, що став надто

популярним влаштуванням. Він вже мав частоту 2 МГц і адресував 64 Кб

пам'яті. 6000 транзисторів дозволила розмістити 6-мкм технологія

виготовлення. Процесор вимагав трьох джерел живлення (+5, +12 та -5 В) і

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

різноманітні термінали, контролери і навіть перший ПК Altair. В нашій

країні запізнилою луною 8080 стали процесори 580ИК80 і КР580ВМ80, на базі

яких в початку і середині 80-х років будувалося багато “саморобних” ПК.

Наступним етапом став процесор i8085 (5 МГц, 0.37 MIPS, 6500

транзисторів, 3-мкм технологія). Він зберіг популярну рєгістрову

архітектуру 8080 і програмну єдність, але в нього додали порт послідовного

інтерфейсу, скасували спеціальні ІС підтримки (тактового генератора і

системного контролера) і декілька змінили зовнішній інтерфейс. Головним

подарунком розробникам апаратури стала тільки одна живлюща напруга +5 В.

Варіацію на тему 8080 і 8085 подає процесор Z80 фірми Zilog. Зберігши

програмну єдність з 8080, в нього ввели додаткові регістри, що дозволило

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

нещодавно популярні комп'ютери Sinclair, побудовані на Z80, демонстрували

на іграх графіку, не гіршу ніж у РС на 16-разрядном процесорі 286.

Перший 16-разрядный процесор 8086 фірма Intel випустила в 1978 році.

Частота 5 МГц, продуктивність 0.33 MIPS, але інструкції вже з 16-розрядними

операндами (пізніше з'явилися процесори 8 і 10 МГц). Технологія 3 мкм, 29

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

система команд істотно відрізнялися від 8080, але, природно, просліджуються

загальні ідеї. Через рік з'явився 8088 - той же процесор, але з 8-битной

шиною даних. З нього почалася історія IBM PC, що наклала свій відбиток на

подальший розвиток цієї лінії процесорів. Масове розповсюдження і відчинена

архітектура РС призвели до лавиноподібній появі програмного забезпечення,

що розробляється крупними, середніми і дрібними фірмами і ентузіастами-

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

але вантаж програмного забезпечення РС, що повинно працювати і на більш

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

Таким чином, всі нововведення в архітектурі наступних процесорів повинні

були прибудовуватись до існуючого ядра. А тут ще і сама архітектура РС

“підкинула”, наприклад, складнощі з використанням векторів перериваннь.

Фірма Intel зарезервувала перші 32 вектору “для службового користування”,

однак на них “наїхали” переривання BIOS. Один з результатів - додатковий

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

Процесор 80286, що знаменує наступний етап архітектури, з'явився тільки

в 1982 році. Він вже мав 134 тис. транзисторів (технологія 1.5 мкм) і

адресував до 16 Мб фізичної пам'яті. Його принципові новшества - захищений

режим і віртуальна пам'ять розміром до 1 Гб - не знайшли масового

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

8086.

Клас 32-розрядних процесорів був відкритий в 1985 році моделлю 80386

(275 тис. транзисторів, 1.5 мкм). Разрядность шини даних (як і внутрішніх

регістрів) досягла 32 біт, пам'ять ,що адресується фізична - 4 Гб.

З'явилися нові регістри, нові 32-битные операції, істотно доопрацьований

захищений режим, з'явився режим V86, сторінкове керування пам'яттю.

Процесор знайшов широке застосування в РС, і на благодатному грунті його

нових властивостей став розростатись “самый великий вірус” - MS Windows з

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

зв'язку”: на появу нового процесора виробники ПО реагують випуском нових

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

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

восторга і його ресурси “з'їдають” і т. д. Цей “вічний рух”, кінцево,

природно, але є обгрунтована підозра, що більші ресурси розбещують (або,

принаймні, розслаблюють) розробника ПО, не змушуючи його напружуватися в

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

програмування можна лічити іграшки на Sinclair ZX-Spectrum, що реалізуються

на “іграшкових” ресурсах - 8-бітном процесорі і 64 (128) Кб ОЗП. З

протилежними прикладами більшість користувачів РС стикаються регулярно, але

з процесором Pentium 200 і 32 Мб ОЗП на них не завжди обертають увагу.

Історія процесора 386 нагадує історію 8086: першу модель з 32-бітной

шиною даних (згодом названою 386DX) змінив 386SX з 16-розрядной шиною. Він

досить легко вписувався а архітектуру РС АТ, шо раніше базувалася на

процесорі 286.

Процесор Intel486DX з'явився в 1989 році. Транзисторів - 1.2 млн.,

технологія 1 мкм. Від 386-го істотно відрізняється розміщенням на кристалі

первинного кеша і вбудованого математичного сопроцесора (попередні

процесори мали можливість використання зовнішніх х87 сопроцесорів). Крім

того, для підвищення продуктивності в цьому СІSC-процесорі (як і в

наступних) застосоване RISC-ядро. Далі з'явилися його різновиди, що

відрізняються наявністю або відсутністю сопроцесора, застосуванням

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

енергозбереженням (з'явився режим SMM), що відбилося і в продовженні лінії

386 процесорів (з'явився процесор Intel386SL).

В 1993 році з'явилися перші процесори Pentium з частотою 60 і 66 МГц -

32-розрядные процесори з 64-розрядной шиною даних. Транзисторів 3.1 млн.,

технологія 8.0 мкм, живлення 5 В. Від 486-го принципово відрізняється

суперскалярною архітектурою - спроможністю за один такт випускати з

конвейєрів до двох інструкцій (що, кінцево, не означає можливості

проходження інструкції через процесор за півтакта або за такт). Інтерес до

процесора з боку виробників і покупців РС стримувався його дуже високою

ціною. Крім того, з'явився скандал з виявленою помилкою сопроцесора. Хоча

фірма Intel математично обгрунтувала невисоку імовірність її прояви (раз в

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

процесорів на виправлені.

Процесори Pentium з частотою 75, 90 і 100 МГц, що з'явилися в 1994

році, уявили вже другу ґенерацію процесорів Pentium. При майже тому же

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

знизити потужність ,що споживається. Від першої ґенерації вони відрізнялися

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

мали інший тип корпуса. З'явилися версії (75 МГц в мініатюрному корпусі)

для мобільних застосуваннь (в блокнотних ПК). Процесори Pentium другої

ґенерації стали надто популярними в РС. В 1995 році з'явилися процесори на

120 і 133 МГц, виконані вже по технології 0.35 мкм (перші процесори на 120

МГц робилися ще по технології 0.6 мкм). В 1996-й називають роком Pentium -

з'явилися процесори на 150, 166 і 200 МГц, і Pentium став рядовим

процесором для РС широкого застосування.

Паралельно з Pentium розвивався і процесор Pentium Pro, що відрізнявся

новинками “динамічного виконання інструкцій”, направленими на збільшення

числа паралельно виконуваних інструкцій. Крім того, в його корпусі

розмістили і вторинний кеш, для початку обсягом 256 Кб. Однак на 16-бітных

додатках, а також в середі Windows 95 його застосування не дасть переваг.

Процесор містить 5.5 млн. транзисторів ядра і 15.5 млн. транзисторів для

вторинного кеша обсягом 256 Кб. Перший процесор з частотою 150 МГц з'явився

в початку 1995 року (технологія 0.6 мкм), а вже в кінці року з'явилися

процесори з частотою 166, 180 і 200 МГц (технологія 0.35 мкм), у яких кеш

досягав і 512 Кб.

Після довгих обіцянок в початку 1997 року з'явилися процесори Pentium

MMX. Розширення MMX припускає паралельну обробку групи операндів однією

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

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

ефективність викликає суперечки в середі розробників, оскільки виграш в

самих операціях обробки компенсується програшем на додаткових операціях

упаковки-распаковки. Крім Того, обмежена розрядність ставить під сумнів

застосування MMX в декодерах MPEG-2, в яких вимагається обробка 80-бітных

операндів. Окрім розширення MMX ці процесори, у порівнянні з звичайним

Pentium, мають подвійний обсяг первинного кеша і деякі елементи

архітектури, що запозичилися у Pentium Pro, що підвищує продуктивність

процесора Pentium MMX і на звичайних додатках. Процесори Pentium MMX мають

4.5 млн. транзисторів і виконані по технології 0.35 мкм. За станом на

сьогодняшній день є процесори з тактовими частотами 166, 200, 233 і 266

МГц.

Технологія MMX була з'єднана з архітектурою Pentium Pro - і в травні

1997 року з'явився процесор Pentium II. Він подає собою злегка урізаний

варіант ядра Pentium Pro з більш високою внутрішньою тактовою частотою, в

що ввели підтримку MMX. Труднощі розміщення вторинного кеша в одному

корпусі з процесором подолали нехитрим засобом - кристал з ядром процесора

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

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

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

вентилятором. Тактовые частоти ядра - 233, 266, 300, 333, 366, 400 і 450

МГц.

Пізнішє побачив світло спрощений варіант процесора Pentium II, назва

,що отримала Celeron. В ньому вдвічі зменшений вторинний кеш і, немовби,

прибрана підтримка багатопроцесорних систем. Однак шляхом “хірургічного”

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

тим, що в Celeron застосоване ядро Pentium II без будь-яких змін.

В 1999 році з'явився процесор Pentium III. В ньому застосоване

покращене ядро процесора Pentium II, в яке додана підтримка технології MMX-

2. Технологія MMX-2 підрозумує наявність 8 додаткових 128-розрядных

регістрів (в попередніх процесорах регістри MMX знаходилися в мантисах

регістрів сопроцесора) і виконання групових інструкцій над 4 числами в

форматі короткого речовинного. Перші процесори виготовляються по технології

0.35 мкм і мають тактову частоту 400 МГц. В подальшому планується перехід

на 0.18 мкм технологію і збільшення частоти до 1 ГГц.

В даний момент фірма Intel розробляє принципово нову архітектуру IA64,

що відкриває клас 64-розрядных процесорів. Першим процесором що є дану

архітектуру повинен стати Merced. Цей процесор буде мати 128 64-розрядных

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

підвищити продуктивність. Однак в зв'язку з величезним обсягом ПО в

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

процесорів. Merced також буде підтримувати розширення MMX-2 і додаде до

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

технології 0.35 мкм і мати тактову частоту 400 МГц. В подальшому планується

перехід на 0.18 мкм технологію і збільшення частоти до 1 ГГц.

1.2 Опис внутрішніх блоків

8086/88.

Найбільш простий інтерфейс мають процесори 8086/88. Вони здатні

працювати в двох режимах: мінімальному і максимальному.

В мінімальному режимі процесор сам виробляє сигнали керування для

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

що не використають сопроцесора, і дозволяє безпосередно до процесора

підключать периферійні мікросхеми з сімейства 8085.

В РС застосовується максимальний режим, при якому сигнали керування

системною шиною виробляються контролером шини 8288 по сигналам стану

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

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

позичає 4 такту (не лічивши тактів чекання).

Будь-який цикл може бути необмежено розтягнутий з допомогою сигналу

готовності. Цикли звертання до портів відрізняються від циклів пам'яті

використанням шини адреси. У разі звертання до портів лінії адреси A [8:

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

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

керування шиною здійснюється по сигналам RQ/GT: влаштування, що запрошує

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

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

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

імпульсом повідомляє процесору про звільнення шини. Типові шині цикли

процесорів наведені на рисунку 1.1.

Процесор 8086 має 6-байтну внутрішню чергу інструкцій (іменно таку

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

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

процесора не позичена операціями обміну. Черга у процесора 8088 скорочена

до 4 байт, а передвиборка виконується вже за наявності одного вільного

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

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

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

користуються при програмуванні керування приладами введення-виведення, що

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

процесорах по суті є і влаштуванням керування.

Процесор має 8 16-разрядных регістрів загального призначення і 4 16-

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

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

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

адреси.

80286.

Процесори 80286 випускалися в 68-виводних корпусах. Їхній інтерфейс

відрізняється від 8086 застосуванням роздільних шин адреси і даних,

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

Шина адреси дозволяє адресувати 16 Мб фізичної пам'яті в захищеному

режимі і 1 Мб з області молодших адрес - в реальному режимі. При адресації

введення-виведення процесор використає тільки біти A [0: 15] шини адреси

(при цьому інші біти рівні 0). Як і в процесорі 8086, обмін по шині даних

можливий байтами або словами. При побайтном обміні байт з парною адресою

передається по лініям D [0: 7], з непарним - по лініям D [8-15]. Обмін

словами з парною адресою відбувається по лініям D [0-15]. При адресації

слова з непарною адресою процесор автоматично виконує два послідовних шиних

циклу: перший по лініям D [8-15], другий - по D [0-7]. Байти шини, що

беруть участь в обміні, як і для процесора 8086, визначаються сигналами A0

і BHE#.

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

ділиться навпіл внутрішнім дільником для одержання сигналу внутрішньої

синхронизації. На зовнішні виводи процесора цей сигнал не надходить, але

його виробляє спеціальна мікросхема 82284 - генератор синхронизації для

80286. Максимальна пропускна спроможність локальної шини процесора - одне

слово за кожні два цикла внутрішньої частоти.

Конвейєрна адресація, застосовувана в процесорі, передбачає можливість

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

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

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

раннього початку виконання дешифрації адреси влаштуванням пам'яті або

введення-виведення. Конвейєрний режим дозволяє контролерам пам'яті

ефективно використати швидкий сторінковий режим динамічної пам'яті і

чергування банків.

Процесор 80286 не тримає на шині адреси, відповідно поточному циклу

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

адреси на весь час циклу, сигнали шини адреси процесора заклацуються на

регістрах.

Формування керуючих сигналів системної шини виконує зовнішня микросхема

82288 або її функціональний аналог з чипсета системної плати на підставі

сигналів стану і типу циклу.

Керування тимчасовою діаграмою підрозумує затримку і розтяжку командних

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

відносно повільних зовнішніх приладів введення-виведення і пам'яті.

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

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

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

шини відносно відповідної йому фази адресації і ідентифікації. Затримка

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

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

зв'язку з істотним підвищенням продуктивності (відносно 8086) локальної

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

в два такти внутрішньої частоти. Так при частоті процесора 16 МГц шинні

цикли підуть з періодом 250 нс. В повній мірі цією продуктивністю може

скористуватися лише пам'ять, підключена до локальної шини. Прилади на шині

ISA такого темпу не витримують. Крім того, вони звичайно вимагають певного

часу відновлення - пасивного стану керуючих сигналів шини між їм командами

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

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

а для завдання числа тактів чекання і часу відновлення для різноманітних

операцій в машинах класу AT ввели відповідні опції BIOS SETUP. Шини цикли

процесора уявлені на рисунках 1.2 і 1.3.

При проектуванні процесора 80286 була поставлена задача значно

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

влаштування передвиборки піддалося значній переробці. Коли черга команд

порожня, а це трапляється після кожної інструкції передачі керування, нові

байти минають через чергу не затримуючись. Крім того, при передвиборці в

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

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

“розгортає” кожну інструкцію в 69 біт, що включають всю інформацію,

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

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

команди), що також здатний пропускати команди без затримки в випадку

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

дозволить попереджати шиний інтерфейс про те, що в наступному такті

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

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

продуктивності.

Блок формування адреси має два суматора: суматор зміщення і суматор

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

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

Влаштування сегментації заазнало істотних змін. Сегментні регістри

тепер перебують з двох частин: 16-разрядного селектора і програмно

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

доступу сегменту.

80386.

Синхронизація процесора 80386 в точності відповідає синхронизації

80286.

Інтерфейс процесора 80386 в значному ступені схожий на інтерфейс 80286 хоча

і зазнав ряду змін.

Шина даних припускає як 16-ти, так і 32-разрядный режим обміну, в

залежності від стану вхідного сигналу BS16#. При читанні в 16-розрядному

режимі дані на лініях D [16-31] ігноруються, при записі процесор керує

всією шиною даних незалежно від сигналу BS16#/.

Шина адреси дозволяє адресувати 4 Гб фізичної пам'яті в захищеному

режимі і 1 Мб з області молодших адрес в реальному режимі. При виконанні

інструкцій введення-висновку процесор адресується до області 64 Кб простори

введення-виведення (00000000-0000FFFFh). При обміні з сопроцесором в циклах

введення-виведення процесор виставляє адреси 800000F8-8000000FFh, що

спрощує дешифрацію адреси зовнішніми схемами. Лінії A [31: 2] ідентифікують

адресу з точністю до подвійного слова, а в межах цього слова сигнали BE[0:

3]# безпосередно вказують, що байти використовуються в даному циклі. Якщо в

поточному циклі запису обидва сигнали BE0# і BE1# неактивні, виводимі дані

старших байт автоматично дублюються на лініях молодших. Якщо слово ,що

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

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

обміну з іншими значеннями A [31: 2] і BE [3: 0] #.

Сигнал BS16# вводиться зовнішньою схемою, якщо поточний цикл

адресується до 16-битному влаштування, підключеному до молодшої половини

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

процесор автоматично вводить додатковий цикл для передачі цих байт по

молодшій половині шини даних.

Тип циклу локальної шини визначається сигналами M/IO#, D/C#, W/R# і

LOCK#, комбінація яких дійсна під час активності сигналу ADS# (строб

адреси). Сигнали керування шиною ADS#, READY# і NA# задають тимчасові межі

циклів і керують конвейєрною адресацією. Сигнал ADS# відзначає початок

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

і фіксується відповідна йому адреса. Сигнал READY# повинен вводитися

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

поточного циклу. Сигнал NA# використовується для запитання наступної адреси

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

адресу і сигнали ідентифікації. Якщо процесор вже має внутрішнє запитання

на наступний шини цикл, він видасть адресу і ідентифікатори наступного

циклу до завершення поточного.

Сигнали арбітражу локальної шини передвизначені для передачі керування

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

“1” лінії HOLD. Коли процесор визнає можливим передачу керування (в

незаблокованих циклах відразу по завершенні поточного шиного циклу), він

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

високоімпедансний стан всі двунаправлені і вихідні лінії. Цим станом можна

користуватися і для отладки апаратних засобів. Шині цикли процесора уявлені

на рисунках 1.4 і 1.5.

В процесорі 80386 збільшився буфер передвиборки до 16 байт, що

заповнюється тепер подвійними словами. Всі основні регістри поширені до 32

розрядів. Суматори лінійної адреси замінені однім трьохвходовим.

В блок обчислення адреси додане нове влаштування - блок трансляції

сторінок. Дане влаштування транслює лінійну адресу в фізичну і перебує з

трьох основних блоків: ПЛМ керування, суматор фізичної адреси і кеш-пам'яті

сторінок (TLB).

Блок TLB подає собою чотирьохвходову асоціативну пам'ять, що містить 20-

розрядні базові адреси 32 сторінок. В якості тега використовуються старші

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

додаткової, і логіки обслуговування. Основний модуль пам'яті містить 8

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

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

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

і інформацію, необхідну для її вибору.

Робота TLB відбувається слідуючим чином. Після формування лінійної

адреси 3 молодших розряди поля (біти 14-12 лінійної адреси) визначають

номер одного з восьмих блоків. Старші 17 розрядів (біти 31-15) порівнюються

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

їхньому збігу означена в стоці базова адреса заміщає 20 старших розрядів

лінійної адреси.

Таким чином, кеш-пам'ять сторінок покриває 32*4Кб=128Кб адресного

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

98%.

80486.

Інтерфейс процесора 80486 є тієї архітектурною компонентою, що в

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

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

збільшеної продуктивності 80486 ті переваги в швидкодії і функціональної

потужності набору внутрішніх блоків, що з'явилися за рахунок використання

більш досконалої мікроэлектронної технології.

На зміну конвейєрної адресації попередніх процесорів, починаючи з

процесора 80486, введений режим пакетної передачі. Цей режим

передвизначений для швидких операцій зі рядками кеша. Рядок кеша процесора

80486 має довжину 16 байт, отже, для її пересилки вимагається чотири 32-

розрядных шиних циклу. Оскільки використання кеша припускає, що рядок

повинен в ньому бути присутнім цілком, ввели пакетний цикл оптимизований

для операцій обміну внутрішнього кеша з оперативною пам'яттю. В цьому циклі

адреса і сигнали ідентифікації типу шин циклу видаються тільки в першому

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

адреса яких вже не передається по шині, а вираховується з першого по

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

процесор може перетворити будь-яке внутрішнє запитання на множествену

передачу, але при читанні його розмір обмежений одним рядком кеша, а при

записі в стандартному режимі шини в пакет може збиратися не більш 32 біт.

Більш пізні моделі процесорів при роботі з WB-кешем при записі рядків в

пам'ять збирають в пакет чотири 32-битных циклу, але це вже робота в

розширеному режимі шини 486-го процесора. Пакетний цикл починається

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

сигнали ідентифікації типу циклу і формується строб ADS#. В наступному

такті передається перша порція даних, і, якщо вона не єдина, сигнал BLAST#

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

режим, воно повинно відповісти сигналом BRDY# замість сигналу RDY# по

готовності даних в першій же передачі даних циклу. В цьому випадку процесор

продовжить цикл як пакетний, не вводячи такту адресації-ідентифікації (з

сигналом ADS#), а відразу перейде до передачі наступної порції даних.

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

BLAST#, що видається в такті останньої передачі пакету. Якщо у процесора є

наміру зібрати пакет, а влаштування відповідає сигналом RDY#, дані будуть

передаватися звичайними циклами. Введенням сигналу RDY# замість BRDY#

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

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

тактів чекання) для передачі 16 байт в пакетному режимі вимагається усього

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

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

формування наступних адрес як процесором, так і зовнішнім влаштуванням. Під

час пакетного циклу процесора 486 старші біти адреси A[31:4] залишаються

незмінними. Змінюватися можуть тільки біти A [3: 2] і сигнали BE[3:4]#.

Таким чином, один пакетний цикл не може перетинати межу рядка кеша. Крім

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

визначається початковою адресою пакету і розрядністю передач. Якщо під час

пакетного циклу процесор виявить активність сигналів BS16# або BS8# до

того, як перейти до наступної адреси, будуть завершені поточні 32-бітні

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

пам'яттю (разом зі вторинним кешем), розрядність якої намагаються не

усікати, на практиці перетворення послідовності адрес в 8 - або 16-битные

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

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

486-го. Він оптимизован для двох банкової організації пам'яті,

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

пакетного циклу.

Процесор 486 має чотири внутрішніх буферу для операцій запису. Якщо під

час внутрішнього запитання процесора на запис всі буфери вільні і шина не

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

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

внутрішній такт, а з буферу дані вивантажуються в оперативну пам'ять або

влаштування введення-виведення по мірі звільнення зовнішньої шини. Зовнішні

операції запису з буферів будуть вироблятися в тому же порядку, що і

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

запитання на читання пам'яті, воно може бути обслуговане і раніше, ніж

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

послідовності може відбутися тільки в тому випадку, якщо всі запитання

запису в буферах зв'язані з кеш-попаданнями, а запитання на читання

відноситься до кеш-промаху. Тільки в цьому випадку процесор може сміло

міняти порядок операцій, але тільки один раз до тих пір, доки не

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

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

модифікувався кеша, з якого оновлена інформація якраз і очікує в буфері

черги на запис в основну пам'ять. В такому випадку друга спроба зміни

послідовності може порушити цілісність даних. Для операцій введення-

виведення зміна порядку неможлива. Читання введення-виведення ніколи не

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

з тим, щоб дати можливість своєчасно (для програми) повідомити з своєї

реакції на запис в порт (викликати апаратне переривання або цикл анулювання

рядка). Однак засоби введення програмної затримки між одинковими операціями

висновку для процесора 486 відрізняються від що передують: тут команда JMP,

раніше безумовно що наводить до генерації зовнішнього циклу звертання до

пам'яті скоріше усього буде обслугована з внутрішнього кеша, і бажаної

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

між циклами вивода є явна операція читання некешуємої області пам'яті. Ця

операція буде виконана тільки після завершення попереднього циклу висновку,

а наступна операція висновку почнеться тільки по завершенні цього читання.

Операції блочного висновку, викликані інструкцією REP OUTS, будуть

використати буфери, але порядок не буде порушений.

Синхронизація процесора здійснюється зовнішнім сигналом CLK, всі

тимчасові параметри відраховуються відносно його позитивного перепада.

Зовнішня частота процесором вже не ділиться навпіл (як у 386-го), а може

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

приймати значення 1, 2, 2.5 і 3. При Цьому інтерфейс зовнішньої шини

процесора завжди працює на зовнішній частоті, а частота тактування

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

значеннями зовнішньої частоти є 25, 33.33, 40 і 50 МГц. Коефіцієнт множення

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

Шина адреси дозволяє адресувати 4 Гб фізичної пам'яті в захищеному

режимі і 1 Мб з області молодших адрес в реальному режимі. Сигналом A20M#

можна включити примусове обнулення лінії A20 (як для внутрішнього кэша, так

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

адреси процесора 8086/88 (сигнал сприймається тільки в реальному режимі).

При виконанні інструкцій введення-виведення процесор адресується в 64 Кб

простори введення-виведення. Лінії A[31:2] ідентифікують адресу з точністю

до подвійного слова, а в межах цього слова сигнали BE[3:0]# безпосередно

вказують, які байти використовуються в даному циклі. Лінії A[31:4], що

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

введення.

Шина даних D[31:0] припускає як 32-розрядний режим, так і 16 - і 8-

розрядний, в залежності від стану вхідних сигналів BS16# або BS8#. Але, в

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

даних має біт паритету DP[3:0]. Схеми паритету генерують коректні

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

паритету тільки виробляється сигнал помилки на виході PCHK#, що ніяк не

впливає на роботу процесора. Він може використовуватися зовнішніми схемами

по розсуду розробника системної плати.

Тип циклу локальної шини визначається сигналами M/IO#, D/C#, W/R# і

LOCK# під час активності сигналу ADS#.

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

доповнені вихідною лінією BREQ, що управляється процесором в будь-якому

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

внутрішнє запитання на використання шини. Сигнал встановлюється водночас зі

стробом ADS#. Якщо процесор в даний момент не керує шиною, то сигнал

з'явиться в той момент, коли процесор виставив б сигнал ADS#. Для запитання

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

сигнал HOLD. Коли процесор визнає можливим передачу керування, він

виставить сигнал підтвердження HLDA. Крім того, є сигнал безумовного

отключення процесора від шини - BOFF#. По цьому сигналу процесор віддає

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

перерваний. По Закінченню чинності сигналу BOFF# процесор рестартує

перерваний цикл, знову ввівши такт адресації і ідентифікації зі стробом

ADS#. Для внутрішніх вузлів процесора це бачиться як введення тактів

чекання. Сигнал AHOLD передвизначений для захоплення зовнішнім контролером

тільки шини адреси для анулювання рядків внутрішньої кеш-пам'яті.

Анулювання рядка виробляється за наявності строба зовнішньої адреси EADS#.

До інтерфейсу кеш-пам'яті відносяться вхідні сигнали KEN# (дозвіл

кешировання пам'яті по поточній адресі), FLUSH# (анулювання всіх рядків

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

випадку застосування зворотного запису) і вихідні сигнали PWT і PCD,

керуючі зовнішнім кешированням. Процесори, працюючі в режимі зворотного

запису кэша, використають додаткові сигнали INV, HITM#, CASHE# і WB/WT#.

Перші процесори сімейства 486-х в первинному кеше забезпечували тільки

політику наскрізного запису. Для них не було необхідності в реалізації

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

наводить тільки до анулювання рядка кеша, якщо осередок, до якої буде в

обігу зовнішній контролер, уявлений і в внутрішньому кеші. Для політики

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

можливості вивантаження рядків кеша, що модифікувалися в основну пам'ять,

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

контролер шини. З цими відмінностями зв'язані поняття стандартного і

розширеного режиму шини процесора 486. Стандартний режим шини

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

що повністю сумісно з інтерфейсом перших процесорів 486 з WT-кешем. Його

основні відзнаки наступні: на сигнал FLUSH# процесор не відповідає

спеціальним циклом підтвердження; по сигналу FLUSH# процесор анулює всіх

рядки внутрішнього кеша за 15-20 тактів CLK; сигнали, специфічні для WB-

кеша, ігноруються; сигнал EADS# сприймається в будь-який момент часу.

Розширений режим шини передвизначений для роботи первинного кеша з

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

486 з WB-кешем. Його основні відзнаки наступні: по сигналу FLUSH# процесор

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

відповідає спеціальним циклом підтвердження; зворотний запис рядків ,що

модифікувалися кеша, що виконується по сигналу FLUSH# і інструкції WBINVD,

може позичати біля 2000 тактів CLK, система повинна спостерігати за шиною,

очікуючи спеціального циклу підтвердження; сигнали BLEN#, EWBE#, WB/WT#,

INV сприймаються процесором; сигнал WB/WT# сприймається в кожному циклі

звертання до пам'яті, дозволяючи визначати політику запису для кожного

рядка окремо; сигнал EADS# сприймається тільки в стані HOLD, AHOLD або

BOFF#; сигнал PLOCK# не активний (постійний високий рівень). Вибір режиму

шини здійснюється процесором за станом лінії WB/WT# в момент закінчення

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

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

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

буде працювати в стандартному режимі. На рисунку 1.6 уявлений пакетний цикл

заповнення рядка кеш-пам'яті.

Процесор 486 має RISC-ядро, що зажадало докорінної зміни дешифрації

команд. Черга кодів перебує з двох блоків по 16 байт і заповнюється, або з

кэша за 1 такт, або швидкими пакетними циклами поблочно. Запитання на

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

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

рисунку 1.7 уявлений конвейєр процесора.

Більшість команд перебувають в крапках конвейєра не більш одного такту.

Крім того запис результату може бути суміщений з виконанням наступної

команди, якщо будь-який операнд наступної команди, або не перетинається з

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

Наприклад АХ і ЕАХ). Дешифрация команди виконується в дві стадії. На першій

стадії виробляється трансляція команди в RISC-інструкцію. На другій стадії

виробляється обчислення адрес операндів і формування відповідних запитань.

Арифметичний блок має в свойому складі окрім блоку цілочисельної

обробки ще і блок обробки чисел з плаваючою крапкою, що раніше входив в

склад сопроцесора.

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

підвищити продуктивність. Це кеш пам'ять першого рівня, працююча на частоті

ядра. Кэш-пам'ять має розмір 8 Кб і має чотирьохвходову наборно-асоціативну

структуру. Її робота аналогічній роботі блоку TLB.

Процесор має внутрішню 64-розрядну шину, що зв'язує кеш-пам'ять з

основними внутрішніми блоками, що дозволяє за один такт передавати операнд

з плаваючою крапкою або дескриптор сегменту.

Pentium.

По інтерфейсу шина процесора Pentium нагадує шину 486, але має помітні

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

запису кеша, підвищення продуктивності і забезпечення додаткових

функціональних можливостей. Якщо шина 486-го була орієнтована на

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

розрядностью, то шина Pentium орієнтована на досягнення максимальної

продуктивності.

Шина даних стала 64-бітной для підвищення продуктивності обміну з

пам'яттю. Можливість динамічного керування розрядністю шини вилучена,

погодження по розрядності з інтерфейсними шинами покладене на мікросхеми

чипсета. При дозволеному контролі паритету даних (сигнал PEN) помилка

викликає не тільки спрацьовування сигналу PCHK#, але і фіксацію збойної

адреси і даних в регістрі машинного контролю. А якщо встановлен біт MCE

регістру CR4, по цій помилці генерується виключення 18. В доповнення до

контролю паритету шини даних введен контроль паритету шини адреси. Виявлена

помилка паритету бітів A[31:5] шини адреси тільки викликає сигнал помилки

APCHK#, що може бути оброблений системною логікою.

Пакетні цикли виконуються тільки у разі звертання до пам'яті, причому

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

пам'яттю, при цьому кешуємість пам'яті подразумує і її підтримку пакетного

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

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

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

що дозволяє водночас на шині бути присутім двом обслуговуваним запитанням.

Ознакою пакетного циклу (і його закінчення) є сигнал CASHE#. Зовнішня

система не може перервати пакетний цикл, початий процесором. Конвейєризация

запрошується сигналом NA#, в відповідь на який процесор через такт видасть

адресу наступного циклу. Без конвейєризації наступна адреса була б

виставлена тільки після завершення передачі даних поточного циклу.

Процесор має вхід EWBE#, з допомогою якого він відсліджує стан

зовнішніх буферів відкладеного запису для забезпечення коректной

послідовності шиних циклів запису.

Для підтримання погодженості даних кеша і основної пам'яті процесор

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

цикли, як і в 486-м, використають сигнали AHOLD#, EADS# і відповідні

сигнали процесора HIT# і HITM#. Сигнал FLUSH# викликає вивантаження всіх

рядків ,що модифікувалися первинного кеша. Цикли спостереження ініціюються

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

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

підтримують протокол MESI, названий по їм станам, що визначаються:

Modified, Exclusive, Shared, Invalid. Стану визначаються слідуючим чином: M-

state - рядок присутній тільки в одному кеші і модифікований, те є

відрізняється від вмісту основної пам'яті. Доступ до цього рядка можливий

без генерації зовнішнього (по відношенню до локальної шини) циклу

звертання; E-state - рядок присутній тільки в одному кеші, але не

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

циклу звертання, при записі вона перейде в стан М; S-state - рядок

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

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

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

рядків в інших кешах; I-state - рядок буде відстуній в кеше, її читання

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

наскрізний і вийде на зовнішню шину. Шини цикли процесора уявлені на

рисунку 1.8.

Процесор Pentium має суперскалярну архітектуру, що означає можливість

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

на основі двох конвейєрів загального призначення для цілочисельних операцій

і конвейєрного FPU. Процесор може виконувати водночас дві цілочисельні

інструкції.

Структура конвейєрів уявлена на рисунку 1.9 (Пунктиром показані стадії,

добавлені в процесори з підтримкою ММХ). На стадії передвибірки PF команди

вибираються з кеша команд. Далі вони надходять на стадію вибірки F. Тут

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

декодування будь-яких префіксів. Між стадією F і D1 знаходиться FIFO-буфер.

В ньому може міститися до чотирьох інструкцій (в процесорах без ММХ буфер

буде відстуній, а префікси декодуються на стадії D1). Буфер прозорий, т. є.

він не віднімає часу, коли пуст. В кожному такті з стадії F в буфер може

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

ніж дві команди за такт, те буфер звичайно заповнений.

На стадії D1 відбувається перетворення команд в RISC-інструкції і

прийняття рішення про распаралелювання. Далі команди надходять в два

конвейєра. Обидва конвейєра функціонально подібні, але другий V конвейєр у

порівнянні з головним U має деякі обмеження. Стадія D2, на якій

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

відзнаку від відповідної стадії конвейєра попередніх процесорів, ця стадія

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

адреси. На стадії ЕХ відбувається безпосереднє виконання команд в

цілочисельних АЛУ. Pentium має окремий умножитель, що не використає

ресурсів АЛУ, і, отже, дозволяє виконувати інші команди паралельно з

множенням. Але бо умножитель тільки один, дві команди множення не

распаралеливаються. Множення може вироблятися в V конвейєрі. Кожний

конвейєр має свій буфер запису WB для підвищення продуктивності при

послідовних операціях запису в пам'ять. Буфери мають розрядність 64 б і

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

промахах записи на обидва конвейєрах.

В відзнаку від цілочисельних команд, що цілком виконуються на стадії

ЕХ, команди FPU і MMX починають виконуватися на стадії ЕХ, а після цього

уходять на свої стадії. На стадіях конвейєра FPU виконуються наступні дії.

На стадії ЕХ відбувається читання операндів з пам'яті і регістрів, далі

перехід на стадію Х1 або перетворення даних до зовнішнього формату і запис

в пам'ять. На стадії Х1 відбувається перетворення даних до внутрішнього

формату і запис в регістр. На стадії Х2 виконання команд, а на стадії WF -

округлення і запис результату. Для команд ММХ існують два своїх конвейєра,

постачених окремими АЛУ і умножителями. На стадії ЕХ відбувається читання

операндів. Стадія Mex - виконання команд, перший такт множення. Стадія

Wm/М2 - запис результату однотактних команд, другий такт множення. Стадія

М3 - третій такт множення. Wmul - запис результату множення.

Блок попередньої вибірки інструкцій має чотири 32-байтных буферу. На

стадії PF дві незалежні пари буферів вибірки працюють разом з цільовим

буфером ветвлення ВТВ. В кожний момент часу попередню вибірку інструкцій

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

до появи інструкції галуження. Коли така інструкція з'являється, ВТВ

завбачує, буде чи перехід. Якщо завбачується перехід, те дозволяється

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

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

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

інструкцій окремий від кэша даних, передвиборка інструкцій не конфліктує з

запитаннями даних з кеша.

Pentium Pro.

Зовнішній інтерфейс процесора Pentium Pro докорінно відрізняється від

всіх попередніх моделей процесорів. Застосування динамічного виконання

різко підвищує частоту запитань процесорного ядра до шини за даними пам'яті

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

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

використає архітектуру подвійної незалежної шини. Одна з цих шин

використовується тільки для зв'язку з кристалом вторинного кеша,

розташованим в тому же корпусі мікросхеми, а у Pentium II - на загальному

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

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

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

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

завантаження шини досягає 90%. Друга шина процесорного кристалу виходить на

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

працює на зовнішній частоті незалежно від внутрішньої шини. Завантаження

процесором зовнішньої шини для звичайних “настольных” застосуваннь складає

порядку 10% від її пропускної спроможності, а для серверних застосуваннь

може досягати 60% при чотирьохпроцесорной конфігурації. Таким Чином,

обмежена пропускна спроможність зовнішньої шини перестає сильно стримувати

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

ефективно використати багатопроцесорну архітектуру.

Системна шина PentiumPro і Pentium II більш ефективна для об'єднання

процесорів по симетричній архітектурі, ніж шини попередніх процесорів,

оптимизовані для обміну з пам'яттю. Вона дозволяє без додаткових схем

об'єднувати до чотирьох процесорів.

Сигнали системної шини об'єднуються в групи запитань і відповідей.

Кожне влаштування-агент, підключене до цієї шини, до ініціализації

запитання через механізм арбітражу повинно отримати право на використання

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

передається адреса, тип звертання і тому подібна інформація. В другому

такті передається унікальний ідентифікатор транзакції, довжина запитання,

дозволені байти шини і т. п. Через три такти після запитання перевіряється

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

яка виявлена помилка викликає повторення запитання, а друга помилка для

того же запитання викликає виключення контролю. Шини транзакції діляться на

безліч фаз, перекриваючих друг друга. В фазі завершення всі агенти, що

відповідають на дане запитання, при необхідності можуть виставити на шину

коди завершення. Інші процесори в цій фазі управляють лініями HIT# і HITM#,

в залежності від попадання запитання в їхній внутрішній кеш. Агент, що не

встигає відповісти за відведені чотири такту, може виставити водночас

сигнали HIT# і HITM# для затримки фази завершення на число тактів, кратне

двом. В випадку кеш-попадания запитання до пам'яті задовольняє процесор,

оскільки передачі кеш-кэш відбуваються швидше. Однак при попаданні в рядок,

що модифікувався цикли звертання до пам'яті неминучі. На шині водночас може

бути присутнім безліч запитань і відповідей, однак логічний аналізатор, “що

розуміє” протокол шини Pentium Pro, здатний розкласти їх “по полочкам”

відповідних транзакцій.

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

ґенерації значно відрізняється від шин попередніх процесорів.

Шина REQ[4:0]# під час першого такту фази запитання несе частину

інформації про транзакції, достатню для ініціалізації циклу спостереження.

При транзакції доступу до пам'яті тут же передається інформація про розмір

адресного простору - 4 Гб (32-біта) або 64 Гб (38-біт). Під час другого

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

включаюча довжину поля даних. Можливо завдання довжини 0-8, 16 або 32

байта.

Шина A[35:3]# використовується багатофункціонально. Під час першого

такту фази запитання вона містить адреса пам'яті або введення-висновку, а

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

такту фази запитання ця шина несе інформацію про атрибути транзакції, її

ідентифікатор, і додаткові функції, що беруть участь байтах. По закінченню

дії сигналу RESET# процесори з цих ліній одержують інформацію про

конфігурацію по включенню.

Сигнали запитання BREQ[3:0]# використовуються для арбітражу симетричних

агентів. Агент “n” запрошує шину, управляючи сигналом BREQn#, а інші лінії

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

арбітражу на основі циклічної зміни ідентифікатора пріоритету. “Що

обертається” ідентифікатор подає собою внутрішній стан всіх симетричних

агентів для визначення агента з найменшим пріоритетом для наступної події

арбітражу. По включенні живлення що обертається ідентифікатор

встановлюється в значення 3, дозволяючи агенту 0 мати вищий пріоритет з

всіх симетричних агентів. По черговій події арбітражу новий стане рівним

номеру агента - поточного власника шини, в результаті чого, віддавши

керування шиною при наступній події, він отримає найнижчий пріоритет.

Чергова подія трапляється, коли виставляє запитання до вільної шини або

поточний власник знімає своє запитання. За станом ліній BREQ[3:0] і

значенню ідентифікатора, відомого всім агентам, вони водночас (по однаковим

правилам) визначають нового власника шини. Власник шини може відраховувати

керування шиною, зберігаючи активне значення свого сигналу запитання. Однак

виявивши запитання від інших агентів, він по можливості повинен віддати

керування шиною. Для підключення до шини арбітражу BREQ[3:0]#

використовуються сигнали процесора BR0#(i/o) і BR[3:1]# (i). Під час

конфігурування по включенню центральний агент повинен виставити сигнал

BREQ0#. Всі симетричні агенти по сигналам прийнятим зі своїх ліній

BR[3:0]#, визначають свій ідентифікатор агента. Процесор Pentium II

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

системах, він має тільки сигнали BR0# і BR1#. Тимчасова діаграма роботи

процесора уявлена на рисунку 1.10.

В сімействі процесорів Pentium Pro використовується архітектура

динамічного виконання, в якій сочетаєтся зміна порядку виконання,

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

передсказанням ветвлень. Їхньою відокремлювальною рисою є те, що

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

на найпростіші мікрооперації, що виконуються суперскалярним процесорним

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

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

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

процесора містить три частини: препроцесор, ядро з неупорядоченим

виконанням, що упорядковує влаштування. Схема конвейєра уявлена на рисунку

1.11.

Конвейєр має наступні східців. Буфер мети галуження ВТВ зберігає

історію і їхніх цільових адрес, що відбувалися ветвлень. Кожний з 512

елементів ВТВ зберігає цільову адресу і чотири біти передісторії, що несуть

інформацію про те, траплялася чи перехід за останні чотири проходу через

інструкції галуження, посилатися на дану адресу. Якщо на підставі аналізу

передісторії завбачується перехід, цільова адреса посилається в блок

предвиборки, не чекаючи виконання інструкції галуження. Окрім BTB, Pentium

Pro має буфер стекових вертаннь, що дозволить коректно завбачувати адресу

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

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

продуктивності предвиборки. Блок вибірки інструкцій IFU має дві стадії. На

першій стадії інструкції вибираються 16-байтними пакетами, зрівненими по

межам параграфів. На другий стадії інструкції попередно декодуються і

вкладаються в два буферу по 16 байт вже без прив'язки до меж параграфів. На

східці ID процесор має три декодера. Перший декодер за один такт здатний

декодувать одну макроінструкцію, що містить до чотирьох мікрооперацій. Два

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

однієї мікрооперації. Більш складні інструкції декодуються за декілька

тактів.

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

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

стадію RAT. Тут відбувається перейменування регістрів, а на стадії RS

резервування місця в ROB. ROB організований в вигляді кільцевого буферу на

40 місця. Микрооперации надходять в ROB в порядку черги і удаляються в

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

готовності вихідних даних і доступності виконавчих приладів. До трьох

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

залежності від функції ,що виконується мікрооперація спрямовується в один з

п'ятих портів. До кожного порту прикріплені свої виконавчі прилади. Порт 0

може містити цілочисельне АЛУ і FPU, порт 1 - цілочисельне АЛУ, порт 2 -

блок завантаження даних, порт 3 - блок адреси запису, порт 4 - блок даних

запису. В процесорі Pentium II порт 0 містить АЛУ ММХ і умножитель ММХ, а

порт 1 - АЛУ ММХ і зсуватель ММХ. Після виконання мікрооперація вертається

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

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

1.3 Програмна модель мікропроцесорів

Регістри

Регістри загального призначення.

Для виконання обчислень і адресація процесори мають 8 регістрів

загального призначення. В процесорах 8086/88 і 80286 ці регістри мають

розрядність 16 біт. Регістри АХ, ВХ, DX і СХ припускають звертання як до

всього регістру, так і до їхніх молодших і старших частин. Регістри SP, BP,

SI і DI припускають звертання тільки до всього регістру. В 32-розрядних

процесорах всі ці регістри мають 32 розряди і містять в молодшій частині

регістри попередніх процесорів. Імена 32-разрядных регістрів починаються з

символу “Е” ((ЕАХ, ЕВХ і т. Д.). Кожний регістр має своє призначення, але

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

(Е) АХ - аккумулятор;

(Е) СХ - лічильник;

(Е) DX - регістр даних;

(Е) ВХ - регістр базової адреси;

(Е) SP - покажчик стека;

(Е) ВР - додатковий покажчик стека;

(Е) SI - індекс операнда-джерела;

(E) DI - індекс операнда-приймальника;

В 16-разрядных процесорах для адресації застосовуються регістри ВХ, ВР,

SI і DI в різноманітних комбінаціях, причому регістри ВХ і ВР містять

базову адресу, а SI і DI - індекс. В 32-розрядних процесорах в якості

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

Сегментні регістри.

Для надання гнучкості програмам в процесорах є сегментні регістри.

Адресація пам'яті завжди виконується відносно якого-небудь сегменту,

параметри якого зберігаються в сегментном регістрі. В процесорі 8086/88 є 4

16-разрядных сегментних регістра, що зберігають сегментну адресу. У разі

звертання до операнду в пам'яті формується його лінійна адреса шляхом

підсумовування зміщення операнда в сегменті з сегментною адресою, зсунутою

на 4 розряди ліворуч. В підсумку одержується 20-розрядна лінійна адреса, по

якій процесор виробляє вибірку. В процесорі 8086/88 не застосовується

жодний захист пам'яті, тому до всіх сегментів розв'язаний доступ як по

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

кратній 16 і має розмір 64 Кб. Кожному сегментному регістру відведена своя

роль.

DS - сегмент даних;

CS - сегмент коду;

SS - сегмент стека;

ES - додатковий сегмент даних.

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

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

якого сегменту.

Процесор 80286 підтримує захист пам'яті, тому його сегментні регістри

були істотно перероблені і доповнені. Тепер сегментний регістр перебує з

двох основних частин:

. Селекторна частина в режимі реальних адрес містить сегментну адресу, а в

захищеному режимі - селектор сегменту, індикатор дескрипторнї таблиці і

пріоритет запитання. Має 16 розрядів і відповідає сегментному регістру

процесора 8086/88 в усіх операціях по завантаженню/вивантаженню;

. Дескрипторна частина містить базову лінійну адресу (24 розряди) початку

сегменту, розмір (16 розрядів) і атрибути.

Формування лінійної адреси операнда зводиться до підсумовування

зміщення з базовою лінійною адресою сегменту з відповідної дескрипторной

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

значення сегментної адреси зсувається ліворуч на 4 розряди і записується в

поле базової адреси. Розмір сегменту встановлюється рівним 64 Кб, а

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

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

дескрипторів в відповідності з селектором. В будь-якому режимі розмір

сегменту не перевищує 64 Кб.

В 32-розрядних процесорах була доопрацьована дескрипторна частина

сегментних регістрів. Поле базової лінійної адреси поширене до 32 розрядів,

поле розміру сегменту поширене до 20 розрядів. В атрибутах з'явилося два

нових біти: біт розрядності сегменту і біт дрібності (дрібніше ці біти

будуть описані в розділі, присвяченому захищеному режиму). Крім того

з'явилося два нових сегментних регістра FS і GS. Вони використовуються

наряду з регістрами DS і ES для зберігання параметрів сегментів даних.

Регістр прапорів.

Регістр прапорів використовується для зберігання результатів

арифметичних операцій і керування процесором. В процесорах 8086/88 і 80286

регістр прапорів має 16 розрядів.

Призначення прапорів наступне:

. CF - прапор перенесення;

. PF - прапор паритету;

. AF - прапор половинного перенесення;

. ZF - прапор нуля;

. SF - прапор знаку;

. TF - прапор трасировки;

. IF - прапор переривання;

. DF - прапор направлення;

. OF - прапор переповнення.

Прапори CF, PF, AF, ZF, SF і OF відображають результат виконання

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

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

Настанова прапора TF наводить до того, що після виконання кожної

інструкції процесор буде генерувати переривання 1. Скид прапора IF призведе

до забороні обробки апаратних перериваннь, що маскуються. Прапор DF вказує

направлення при виконанні строковых команд.

В процесорі 80286 додалися два нових поля, що використовуються в

захищеному режимі.

. Прапор NT (біт 14) задає поведінку команди IRET (повернення з

переривання), якщо він скинут, адреса повернення буде вибиратися з стека,

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

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

виконання команд передачі керування або виклика переривання і скидається

при поверненні до попередньої задачі шляхом виконання команди IRET. Все

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

. Поле IOPL (біти 13-12) задає рівень привілей введення-виведення. Команда

введення-виведення буде виконана тільки якщо значення в цьому полі

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

сенс тільки в захищеному режимі.

В процесорі 80386 регістр прапорів поширений до 32 розрядів і містить

два нових прапора:

. RF (біт 16) - прапор поновлення, використовується спільно з регістрами

крапок останова;

. VM (біт 17) - прапор виртуальної машини. В захищений режим 32-разрядных

процесорів введений новий подрежим. Настанова даного прапора наводить до

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

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

механізму захисту задач і введення-виведення.

В процесор 80486 був доданий тільки один новий прапор - AC (біт 18).

Настанова цього прапора наводить до включення механізму контролю за

вирівнюванням операндів.

В останніх моделях 80486, а також в процесорах Pentium з'явилися три

нових прапора:

. ID (біт 21) - якщо вдається встановити цей прапор, значить процесор

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

інформацію про процесор;

. VIP (біт 20) - віртуальне запитання переривання;

. VIF (біт 19) - віртуальний прапор переривання.

В процесорах Pentium Pro і Pentium II регістр прапорів не змінився у

порівнянні з процесорами Pentium.

Системні регістри.

Системні регістри передвизначені для завдання режимів роботи процесора,

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

В процесорі 8086/88 є тільки один регістр, що можна лічити системним.

Це регістр покажчика команд IP. Даний регістр має 16 розрядів і містить

зміщення наступної команди в сегменті коду. Програма не може напряму

працювати з цим регістром, однак виконуючи переходи, вона побічним образом

змінює вміст регістру IP.

В процесорі 80286 в зв'язку з підтримкою захищеного режиму був введений

цілий ряд системних регістрів для зберігання покажчиків на системні області

пам'яті і керування процесором.

Регістр GDTR зберігає покажчик на таблицю глобальних дескрипторів і її

розмір. Має два поля: поле лінійної адреси початку таблиць (24 біти) і поле

розміру таблиці (16 біт). Доступ до цього регістру здійснюється з допомогою

команд LGDT і SGDT для завантаження і збереження вмісту регістру

відповідно.

Регістр IDTR по внутрішньому формату відповідає регістру GDTR і

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

таблиця перериваннь завжди розташувалася в початку фізичної пам'яті. В

процесорі 80286 вона може розташуватися в будь-якому місці пам'яті.

Регістр LDTR по внутрішньому формату нагадує сегментний регістр і

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

Регістр TR по внутрішньому формату нагадує сегментний регістр і

зберігає базову адресу, розмір і атрибути сегменту стану поточної задачі.

Регістр MSW - слово стану машини. Має 16 розрядів і містить чотири

прапора:

. PE (біт 0) - дозвіл захисту. Настанова цього прапора переводить процесор

в захищений режим, повернення в реальний режим можливе тільки по сигналу

RESET;

. MP (біт 1) - моніторінг сопроцесора, дозволяє викликати виключення 7 по

кожній команді WAIT;

. EM (біт 2) - емуляція сопроцесора. Настанова цього прапора викликає появу

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

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

. TS (біт 3) - переключення задач. Встановлюється процесором після кожного

переключення задачі. Скидається командою CLTS. При встановленому прапорі,

команда, стосовна до сопроцесору, викличе виключення 7, що дозволяє

програмно визначити, відноситься чи контекст сопроцесора до поточної

задачі.

Починаючи з процесора 386 змінилася розрядність полів системних

регістрів. Так поле базової адреси регістрів GDTR, IDTR, LDTR і TR

поширилося до 32 розрядів. Регістр MSW поширився до 32 розрядів і

називається тепер CR0. В ньому з'явилися нові прапори:

. WP (біт 16) дозвіл захисту від запису на рівні привілей супервізора в

сторінки тільки для читання;

. PG (біт 31) включення механізму трансляції сторінок.

В зв'язку з підтримкою механізму трансляції сторінок з'явилися також

два нових регістри: CR2 - містить 32-битну лінійну адресу, по якій була

отримана остання відмова сторінки пам'яті і CR3, старші 20 розрядів якого

зберігають фізичну адресу каталога сторінок.

В процесорі 80486 регістр CR0 був доповнений декількома новими

прапорами:

. ET (біт 4) - індикатор підтримки інструкцій математичного сопроцесора;

. NE (біт 5) - дозвіл стандартного (для Intel) механізму повідомлення про

помилку FPU через генерацію виключення. При NE=0 і активному сигналі

IGNNE# помилки FPU ігноруються. При NE=0 і пасивному сигналі IGNNE# при

виникненні помилки FPU процесор зупиняється і чекає переривання,

вводимого зовнішньою логікою по сигналу на висновку FERR#. Таким чином

емулюється обробка помилок FPU, прийнята в РС зі часів сопроцесорів 80287

і 80387;

. AM (біт 18) - дозвіл контролю вирівнювання (контроль виконується тільки

на рівні привілей 3 при АМ=1 і прапорі АС=1);

. NW (біт 29) - заборона наскрізна запису кеша і циклів анулювання;

. CD (біт 30) - заборона заповнення кеша (кеш-попадания в раніше заповнені

рядки при цьому не забороняються).

В регістр CR3 були додані два нових б: PCD (б 4) - заборона кешування і

PWT (б 3) - кешування сторінки зі наскрізним записом.

В останні моделі 80486 і процесори Pentium був доданий регістр CR4, що

містить біти дозволу архітектурних рішень. В даному регістрі визначені

наступні біти:

. VME (біт 0) - дозвіл механізму віртуальних перериваннь;

. PVI (біт 1) - дозвіл використання віртуального прапора перериваннь в

захищеному режимі;

. TSD (біт 2) - перетворення інструкції RDTSC в привілейовану (тільки

Pentiun+);

. DE (біт 3) - дозвіл крапок останова по звертанню до портів введення-

виведення;

. PSE (біт 4) - дозвіл сторінок розміром 4 Мб (тільки Penium+);

. PAE (біт 5) - дозвіл 36-розрядної фізичної адреси (тільки Pentium Pro+).

Захищений режим

Сегментація пам'яті.

Захищений режим почав вперше підтримуватися процесором 80286. Наступні

процесори тільки доповнювали режим новими можливостями, але основні поняття

і механізми залишилися.

При роботі процесора в захищеному режимі кожний з сегментів команд,

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

локалізацію даного сегменту в адресном просторі пам'яті і правила звертання

до нього. Атрибути сегменту уявлені в вигляді 8-байтной структури даних, що

називається дескриптором.

Дескриптори сегментів зберігаються в пам'яті масивів даних, що

сформувалися в вигляді таблиць. Процесор використає три типу таблиць

дескрипторів: GDT - глобальна таблиця дескрипторів; LDT - локальна таблиця

дескрипторів; IDT - таблиця дескрипторів перериваннь.

Таблиця GDT містить будь-які типи дескрипторів, окрім тих, що

використаються при обробці перериваннь. В GDT заносяться дескриптори

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

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

рішенні поточної задачі. Кількість таблиць, що створюються LDT визначається

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

принципі кожна задача може мати окрему LDT, що включає дескриптори

сегментів, що використаються при її рішенні. Крім того, LDT можуть містити

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

випадку спільного використання сегментів таблиці LDT можуть повністю або

частково перекривати друг друга. Таблиця IDT використовується для

реалізації перериваннь. Таблиці можуть мати розміри від 8 байт до 64 Кб, т.

є. Містити до 8192 дескрипторів.

Звертання до необхідного дескриптору здійснюється з допомогою

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

собою 16-разрядный покажчик, що має три поля (рисунок 1.13.).

Поле RPL (біти 1-0) визначає рівень привілей запитання. Це

двухрозрядний код, що вказує допустимий рівень захисту сегменту, що може

бути вибраний з допомогою даного селектора.

Поле TI (біт 2) служить індикатором таблиці. Його значення вказує

таблицю, що вибирається: GDT при TI=0, LDT при TI=1.

Поле ІНДЕКС (біти 15-3) служить індексом для вибору одного з 8192

дескрипторів.

Селектор з нульовим значенням називається нуль-індикатором. Він

забезпечує звертання до першого дескриптору в таблиці GDT. Цей дескриптор

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

переривання.

Кожна з таблиць має відповідний регістр: GDTR, LDTR, IDTR. Регістр GDTR

містить 48 розрядів (40 в 80286), з яких 32 (24 в 80386) задають базову

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

подставити в молодші 3 розряду селектора нулі, то отримається зміщення

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

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

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

результаті утвориться лінійна адреса дескриптора. Дана перевірка і наступне

формування адреси справедливі для всіх таблиць.

Регістр LDTR містить 16-разрядный покажчик, що визначає розміщення в

GDT дескриптора таблиці, що використається LDT. Дескриптор LDT містить 32-

розрядний (24-розрядний в 80286) базову адресу таблиці і її 16-розрядний

розмір, що при завантаженні регістру LDTR вибираються з GDT і зберігаються

в внутрішніх програмно недосяжних регістрах процесора.

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

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

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

адресації.

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

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

уявлений на рисунку 1.14.

В процесорі 80286 біти 63-48 зарезервовані і повинні бути рівним нулю.

В поле “доп. Атрибути” присутнє 4 біти:

. Біт дрібності G (біт 55) вказує, в яких одиницях заданий розмір сегменту:

в байтах при G=0 або сторінках обсягом по 4 Кб при G=1. Таким чином, в

процесорах 80386+ сегмент може мати розмір до 220*4Кб= 4Гб;

. Біт розрядність D (біт 54). Даний біт має сенс тільки для сегментів коду

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

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

при D=1 для стекових операцій використовується регістр ESP, і осередок

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

слова ESP зменшиться на 4;

. Біт 53 передвизначений для майбутніх розширеннь і повинен містити 0;

. Біт 52 не використовується.

Байт доступу дескриптора визначає права доступу до сегменту ,що

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

формати (малюнок 1.15), хоча призначення ряду полів залишається однаковим.

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

. Біт присутності Р визначає наявність відповідного сегменту в пам'яті.

Якщо Р=0 (сегмент буде відстуній), те даний дескриптор не

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

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

надходить селектор дескриптора, що є Р=0, те процесор генерує виключення

“відсутність сегменту”. Обработчик даного виключення може підвантажити

необхідний сегмент з диску;

. Поле DPL вказує рівень привілей дескриптора. В залежності від

співвідношення значень DPL, CPL (поточний рівень привілей) і RPL, що

задається в молодших бітах селектора, дозволяється або забороняється

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

вимагається захисту сегменту;

. Системний біт S визначає роль що вибирається дескриптора в системі. При

S=1 дескриптор забезпечує звертання до сегментів кодів або даних.

Дескрипторы, що є S=0, служать для звертання до таблиць LDT, сегментів

TSS, або шлюзів для входу в інші задачі або програми, включаючи

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

Поле типу системного дескриптора визначає його тип. Типи системних

дескрипторов наведені в таблиці 1.1.

Таблиця 1.1 Типи системних дескрипторов.

|Тип |Визначення |Тип |Визначення |

|0 |Не використовується |8 |Не використовується |

|1 |Доступний TSS 286 |9 |Доступний TSS 386+ |

|2 |Таблиця LDT |A |Зарезервирован |

|3 |Зайнятий TSS 286 |B |Зайнятий TSS 386+ |

|4 |Шлюз виклика 286 |C |Шлюз виклика 386+ |

|5 |Шлюз задачі |D |Зарезервирован |

|6 |Шлюз перериваннь 286 |E |Шлюз перериваннь 386+ |

|7 |Шлюз ловушки 286 |F |Шлюз ловушки 386+ |

В процесорі 80286 доступні тільки типи з 0 по 7.

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

Дескриптори таблиць LDT (тип 2) забезпечують звертання до локальної

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

Дескрипторы сегментів TSS (типи 1 3 9 В) використовуються при

переключенні задач в багатозадачному режимі. Біт 1 в байті доступу сегменту

TSS пазиваеться бітом зайнятості і вказує, є чи задача, що викликається

зайнятой. Цей біт дескриптора встановлюється в одиницю, коли процесор

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

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

повторного виклика вже працюючої задачі. Переключення на зайняту задачу

наводить до генерації виключення 13.

Відзначимо, що дескриптори LDT і TSS завжди повинні мати значення біта

розрядності D=0.

Дескриптори шлюзів (типи 4-7, C, E, F) використовуються для звертання

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

Формати байта доступу для дескрипторів кодів і даних (S=1) показані на

рисунку 1.15. Вони відрізняються значеннями б виконавчості Е: Е=1 для

сегментів кодів і Е=0 для сегментів даних і стека.

Біт звертання А встановлюється в одиницю у разі звертання до сегменту

т. є. При завантаженні відповідного дескриптора в сегментний регістр. Цей

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

пам'ять, що таким чином виявляє незапитані сегменти, що є А=0. Сегменти,

довгий час що залишаються незапитаними, виводяться з оперативної пам'яті на

диск, звільняючи місце для інших сегментів.

Біт дозволу читання R вводиться для сегменту кодів і дозволяє при R=1

виробляти читання його вмісту. При R=0 допускається тільки вибірка вмісту

цього сегменту для виконання через регістр CS. Спроба читання в цьому

випадку викличе виключення 13. Відзначимо, що виключення цього типу виникне

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

Біт підпорядкування З визначає додаткові правила звертання, що

забезпечують захист сегментів програм.

Біт дозволу запису W вводиться для сегментів даних. Дозволяє при W=1

або забороняє при W=0 зміна вмісту цих сегментів. Читання з сегментів даних

розв'язане завжди.

Біт направлення розширення ED визначає розміщення сегменту даних

відносно базової адреси. При ED=0 (розширення вверх) дані в сегменті

розміщуються в направленні зростання адрес від базової адреси до межі. При

ED=1 (розширення вниз) дані в сегменті розташуються в направленні зменшення

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

повинна бути менш або рівна значенню розміру сегменту, при розширенні вниз

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

Захист пам'яті.

Процесор має спеціальні засоби, що забезпечують в захищеному режимі

захист пам'яті від несанкціонованого доступу. Для захисту інформації, що

зберігається в сегментах пам'яті, використовується система привілей, що

регулює доступ до того або іншого сегменту в залежності від рівня його

захищеності і від ступеню важливості запитання. В процесорі встановлені

чотири рівня привілей PL, що задаються номерами від 0 до 3. Найбільш

привілейованим є рівень з меншим номером. Ступінь захищеності сегменту

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

захисту (малюнок 1.16).

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

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

номером 3. Рівні з 0 по 2 відводяться для системних програм.

В відповідності з рівнями привілей і захищеності встановлені наступні

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

1. Дані з сегменту, що є рівень захисту PL можуть бути вибрані програмою,

що є такий же або більш високий рівень привілей.

2. Сегмент кодів (процедура), рівень ,що є захисту PL, може бути викликаний

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

Необхідно відзначити, що правило 2 не виконується при викликові

сегментів кодів, що є встановлений біт підпорядкованості С=1 в байті

доступу дескриптора.

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

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

різноманітне призначення.

Рівень привілей дескриптора DPL задається бітами 5 і 6 в байті доступу

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

кільця захисту, до якого він відноситься.

Рівень привілей запитання RPL задається бітами 0 і 1 селектора.

Значення RPL визначає рівень привілей, ініціатора запитання-звертання до

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

буде в обігу до пам'яті системи.

Поточний рівень привілей CPL задається бітами 0 і 1 селектора,

розміщеного в регістрі CS. Визначає рівень привілей в нинішній момент

сегменту ,що виконується програми.

Процесор має спеціальну команду ARPL, що використається для корекції

значення RPL селектора. При цьому селектор служить першим операндом

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

значення CS. При виконанні команди порівнюються значення двох молодших

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

максимальне з значень RPL і CPL, т. Е. Встановлюється мінімальний рівень

привілей запитання. Якщо значення RPL при цьому змінилося, те

встановлюється ознака ZF.

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

урахуванням описаної вище системи привілей. При цьому правила залежать від

типу сегменту.

Звертання до сегментів даних виробляється з допомогою селекторів, що

завантажуються в регістри DS, ES, FS, GS. При звертанні аналізується

значення RPL селектора і CPL програми. Ефективний рівень привілей (EPL) для

запитання даних в цьому випадку визначається як максимальне з значень RPL і

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

рівень захисту DPL і EPL. Порушення цього правила викликає прерывание типу

13.

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

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

кодів залежать від значення біта підпорядкованості в байті доступу

дескриптора.

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

такий же або більш низький рівень привілей. Таким чином, в програмах з

поточним рівнем привілей CPL можуть виконуватися міжсегментні команди JMP,

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

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

Звертання до непідлеглих сегментів з допомогою команд JMP і CALL

допускається тільки в випадку, якщо значення CPL поточної програми рівно

DPL сегменту. Крім того, команда CALL може викликати сегменти програм з

більш високим рівнем привілей, використовуючи механізм шлюзів (або

вентилів).

Менш привілейована процедура може викликати більш привілейовану, будучи

в обігу до неї через дескриптор шлюзу виклика, що визначає доступну крапку

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

системи. Формат дескриптора шлюзу виклика уявлений на рисунку 1.17.

В процесорі 80286 бвти з 48 по 63 не використовуються і повинні бути

рівні 0.

П'ятибайтове поле WC вказує кількість параметрів, що переносяться в

стек нової програми. Параметри подають собою 16-разрядные слова для 16-

разрядных програм (в тому числі і для процесора 80286) і 32-разрядные слова

для 32-разрядных програм.

При викликові програм через шлюз повинні виконуватися наступні правила.

Значення RPL селектора шлюзу і CPL викликаючої програми повинні бути менш

або рівним значенню DPL в байті доступу шлюзу.

Якщо програма, що викликається має інший (більш високий) рівень

привілей для неї створюється новий стек. При цьому в регістри SS і (E)SP з

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

нового стека. В цей стек послідовно вводяться старі значення SS і (E) SP;

параметри, переносимі з старого стека; старі значення CS і (E) IP. Число

переносимих параметрів визначається полем WC, причому вибираються останні з

завантажених в старий стек параметрів. Стать команді RET виробляється

відновлення з стека старого вмісту регістрів SS, (E)SP і CS, (E)IP.

Реалізація введення-виведення в захищеному режимі виробляється з

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

значенням поля IOPL в регістрі (E)FLAGS. Введення-виведення виробляється

тільки при виконанні умови CPL менш або рівно IOPL.

Багатозадачність.

Багатозадачністю називається такий засіб організації роботи системи,

при якому в її пам'яті водночас містяться програми і дані для виконання

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

забезпечуватися взаємний захист програм і даних, стосовних до різноманітних

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

(переключення задач). Процесори починаючи з 80286 мають ефективні засоби

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

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

стану задачі TSS. Апаратними засобами для підтримки багатозадачности

служить регістр задачі TR, в що з GDT може бути завантажений дескриптор

задачі.

Кожна задача має свій сегмент TSS, структура якого перебує з двох

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

рішення даної задачі. Додаткова частина може містити яку-або інформацію про

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

допустимі адреси приладів введення/висновку (тільки 80386+) і бітовую карту

віртуальних перериваннь (тільки Pentium+). Розглянемо утримання

обов'язкової частини TSS (таблиці 1.2 і 1.3).

Перші два байта використовуються для зберігання селектора TSS

попередньої задачі, при виконанні якої відбувся виклик даної задачі. В це

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

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

сегментных регістрів, регістрів загального призначення, регістру прапорів і

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

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

переключенні поточний вміст регістрів заноситься в TSS даної задачі, після

чого виробляється завантаження регістрів з TSS нової задачі.

Поля SS0, (E) SP0, SS1, (E) SP1, SS2, (E) SP2 служать джерелом нового

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

Біт ловушки T в TSS викликає при Т=1 переривання типу 1 при

переключенні на дану задачу. Це переривання використовується при отладке

програмного забезпечення.

Бітова карта перенаправлення перериваннь БКПП забезпечує можливість

автоматичного перенаправлення програмного переривання в віртуальном режимі.

Бітова карта введення-виведення БКВВ забезпечує індивідуальний захист

кожного порту введення-виведення. При записі в біті БКВВ нуля дозволяє при

CPL>IOPL звертання до відповідного порту. За останнім байтом БКВВ повинен

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

повинна відповідати межі сегменту.

Дескриптор TSS повинен зберігатися тільки в GDT. Тому звертання до

дескриптору TSS з допомогою селектора, що є біт TI=1, викликає виключення

10.

Для переключення задач процесор використає звичайні команди

міжсегментного переходу JMP, виклика CALL і повернення IRET. Якщо селектор

команди JMP або CALL вибирає з таблиці GDT системний дескриптор, у якого

поле типу рівно 1 (для 80286) або 9 (для 80386+), виконується переключення

задач. При цьому селектор заноситься в TR. Слідує відзначити, що команди

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

ігнорується.

При переключенні задач з допомогою команд JMP або CALL повинні

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

з CPL і RPL повинно бути менш або рівно DPL. Таким Чином допускається

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

поточної задачі.

Таблиця 1.2. Сегмент стану задачі 80286

|Зміщення|Вміст |

|0 |Селектор повернення |

|2 |SP0 |

|4 |SS0 |

|6 |SP1 |

|8 |SS1 |

|0A |SP2 |

|0C |SS2 |

|0E |IP |

|10 |FLAGS |

|12 |AX |

|14 |CX |

|16 |DX |

|18 |BX |

|1A |SP |

|1C |BP |

|1E |SI |

|20 |DI |

|22 |ES |

|24 |CS |

|26 |SS |

|28 |DS |

|2A |LDTR |

|2C |Інформація ОС |

При використанні команди CALL можливо звертання до задач з більш

високим ступенем захисту, ніж рівень привілей поточної програми, з

допомогою шлюзу задачі. Використання шлюзу задачі аналогічно використанню

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

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

Режим V86.

Починаючи з процесора 80386 стало можливим виконання в захищеному

режимі програм, написаних для 8086/88, забезпечуючи при цьому ряд засобів

захисту і можливість страничной організації пам'яті. Такий варіант

захищеного режиму називається режимом віртуального 8086 і реалізується при

настанові в регістрі EFLAGS значення ознаки VM=1.

Таблиця 1.3. Сегмент стану задачі 80386+

|Зміщення|Вміст |

|0 |Селектор повернення |

|4 |ESP0 |

|8 |SS0 |

|0С |ESP1 |

|10 |SS1 |

|14 |ESP2 |

|18 |SS2 |

|1С |CR3 |

|20 |EIP |

|24 |EFLAGS |

|28 |EAX |

|2С |ECX |

|30 |EDX |

|34 |EBX |

|38 |ESP |

|3С |EBP |

|40 |ESI |

|44 |EDI |

|48 |ES |

|4С |CS |

|50 |SS |

|54 |DS |

|58 |FS |

|5С |GS |

|60 |LDTR |

|64 |Відносна адреса БКПП (б 15-1). |

|66 |Т (б 0) |

| |Відносна адреса БКВВ |

|68 |Інформація ОС |

| |БКПП |

| |БКВВ |

Всі програми, що виконуються в режимі V86, мають нижчий рівень привілей.

Цьому режим V86 відрізняється від реального режиму, при якому всім

програмам надається вищий рівень привілей. При формуванні лінійної адреси в

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

режимі не виконуються. В режимі V86 використовуються тільки окремі засоби

захисту:

1. В режимі V86 не здійснюється захист сегментів. Якщо використовується

странічна адресація, те її захист при порушенні правив доступу до

сторінки наводить до виключення 14.

2. Надходження команд, що виконуються тільки при рівні CPL=0, в режимі V86

викликає виключення 13.

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

виключення 6 (недозволений код команди).

Команди PUSHF, POPF, CLI, STI, INT, IRET дошкульні до значення поля IOPL.

Вони виконуються тільки при IOPL=3.

Виконання команд введення/висновку не залежить від значення поля IOPL.

Однак захист може здійснюватися з допомогою БКВВ.

1.3.3 Механізм трансляції сторінок

32-разрядные процесори підтримують механізм трансляції сторінок. Даний

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

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

80386. Наступні ґенерації процесорів додашли в цей механізм нові

можливості.

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

регістрах керування (таблиця 1.4).

PG - біт 31 регістру CR0. Дозволяє механізм сторінкового перетворення

(80386+);

PSE - біт 4 регістру CR4. Дозволяє сторінки розміром 4Мб (або розміром 2

Мб, коли встановлений прапор PAE) (Pentium+);

PAE біт 5 регістру CR4. Дозволяє 36-разрядный фізична адреса. Розширена

фізична адреса може бути використана тільки з дозволеним сторінковим

перетворенням (Pentium Pro+).

Таблиця 1.4. Розміри сторінок і фізичної адреси.

|CR0. PG|CR4. PAE|CR4. |PDE. PS|Розмір |Розмір фізичної |

| | |PSE | |сторінки |адреси |

|0 |x |x |x |- |Сторінкове |

| | | | | |перетворення |

| | | | | |отключено |

|1 |0 |0 |x |4Кб |32 б |

|1 |0 |1 |0 |4Кб |32 б |

|1 |0 |1 |1 |4Мб |32 б |

|1 |1 |x |0 |4Кб |36 б |

|1 |1 |x |1 |2Мб |36 б |

Інформація, яку використає процесор для перетворення лінійної адреси в

фізичний, знаходиться в наступних таблицях:

Каталог сторінок;

Таблиця сторінок;

Таблиця покажчиків на каталог сторінок.

Коли використовується 32-разрядный фізична адреса, таблиці забезпечують

доступ до сторінок розміром 4 Кб або 4 Мб. При використанні розширеної 36-

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

4 Кб або 2 Мб.

Перетворення лінійної адреси для 4 Кб сторінок.

Дане перетворення виконується в усіх 32-разрядных процесорах. На рисунку

1.18. Уявлений механізм трансляції лінійної адреси на сторінки розміром

4Кб. Покажчик на каталог сторінок знаходиться в регістрі CR3. Елементи

каталогу сторінок вказують на таблиць сторінок, елементи таблиці сторінок -

на сторінки фізичної пам'яті. Цей засіб може бути використаний для

адресації до 220 сторінок, що покриває лінійний адресний простір розміром 4

Гб.

Для вибору різноманітних елементів таблиць лінійна адреса ділиться на 3

секції:

Елемент каталогу сторінок - біти з 22 по 31 містять індекс для входу в

каталог сторінок. Вибраний елемент містить базова фізична адреса таблиці

сторінок;

Елементи таблиці сторінок - біти з 12 по 21 містять індекс для входу в

вибрану таблицю сторінок. Цей елемент містить базова фізична адреса

сторінки в фізичній пам'яті;

Зміщення - біти з 0 по 11 містять зміщення фізичної адреси всередині

сторінки.

Перетворення лінійної адреси для 4 Мб сторінок.

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

відображення лінійної адреси на 4 Мб сторінки. Елементи каталогу сторінок

вказують на сторінки фізичної пам'яті. Цей засіб сторінкового перетворення

може бути використаний для відображення до 1024 сторінок на лінійний

адресний простір розміром 4 Гб. Даний засіб доступний в процесорах

Pentium+.

Сторінки розміром 4 Мб вибираються, коли встановлений прапор PSE в регістрі

керування CR4 і коли встановлений прапор PS в елементі каталогу сторінок.

Коли ці прапори встановлені, лінійна адреса ділиться на дві секції:

Елемент каталогу сторінок - біти з 22 по 31 містять індекс для входу в

каталог сторінок. Вибраний елемент містить базова фізична адреса 4Мб

сторінки;

Зміщення - біти з 0 по 21 містять зміщення фізичної адреси всередині

сторінки.

Елементи таблиць сторінкового перетворення.

На рисунках 1.20 і 1.21 показаний формат елемента каталогу сторінок і

таблиці сторінок відповідно, коли використовуються 4Кб сторінки і 32-

разрядный фізична адреса. На малюнку 1.22 показаний формат елемента

каталогу сторінок, коли використовуються 4МБ сторінки і 32-разрядный

фізична адреса.

Функції полів в елементах наступні:

Базова адреса сторінки, біти з 12 по 31. Для елемента таблиці 4Кб сторінок:

містить фізична адреса першого байта 4Кб сторінки. Б даного поля

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

4Кб сторінок: містить фізична адреса першого елемента таблиці сторінок.

Біти даного поля інтерпретуються як 20 старших бітів фізичної адреси. Для

елемента каталогу 4Мб сторінок: містить фізична адреса першого байта 4Мб

сторінки. Використовуються тільки б з 22 по 31 цього поля. Ці б

інтерпретуються як 11 старших розрядів фізичної адреси сторінки;

Біт присутності Р. Показує, знаходиться чи сторінка або таблиця сторінок в

фізичній пам'яті. Коли Р=1, сторінка знаходиться в пам'яті і у разі

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

Р=0, сторінки в пам'яті немає, інша частина елемента доступна для

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

Р=0, те відбудеться виключення 14;

Біт R/W. Біт читання/запис. І біт U/S. Біт користувач/супервизор. Ці біти

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

Біт А. Біт звертання. Показує, було чи звертання до сторінки або таблиці

сторінок. Процесор встановлює цей біт у разі звертання до сторінки. Скид

біта здійснюється тільки програмним шляхом;

Біт D. Біт “брудний”. Показує, було чи звертання до сторінки для запису.

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

тільки програмним шляхом. Даний біт спільно з бітом А використовується

операційною системою для керування пам'яттю;

Біт PS. Розмір сторінки. Визначає Розмір сторінки. Даний б використовується

тільки в елементах каталогу сторінок. Коли цей біт не встановлений, розмір

сторінки 4Кб і елемент каталогу сторінок вказує на таблицю сторінок. Коли

цей біт встановлений, розмір сторінки рівний 4Мб при використанні 32-

разрядного адреси (і 2Мб при використанні розширеної адреси) і елемент

каталогу сторінок вказує на сторінку;

Біт G. Глобальна сторінка. Коли даний біт встановлений, це означає, що

сторінка є глобальною. Коли сторінка позначена як глобальна і глобальні

сторінки розв'язані (біт PGE в регістрі CR4), при перезагрузке регістру CR3

елемент таблиці сторінок або елемент каталогу сторінок не оголошується

невірогідним в TLB. Цей біт служить для того, щоб відвернути вилучення

часто сторінок ,що використаються з TLB. Даний біт підтримується тільки в

процесорах Pentium Pro+.

Якщо біт PSE в регістрі CR4 встановлений, те обидва засобу перетворення

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

Розширення фізичної адреси.

Біт PAE в регістрі CR4 дозволяє розширення фізичної адреси в процесорі

Pentium Pro+ з 32 до 36 розрядів. Ця можливість може бути використана

тільки при включеному сторінковому перетворенні. Коли розширення фізичної

адреси розв'язане, процесор підтримує сторінки двох розмірів: 4Кб і 2Мб. Як

і при 32-разрядном адресі, обидва розміру сторінок можуть використовуватися

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

або каталог сторінок, що містить покажчики на 4Кб сторінки.

Для підтримки 36-разрядного фізичної адреси в таблицях для сторінкового

перетворення зроблені наступні зміни:

Елементи таблиць стали 64-разрядными для розміщення 36-разрядного адреси.

Таким Чином, кожний каталог сторінок і кожна таблиця сторінок може містити

512 елементів;

В ієрархію сторінкового перетворення додана нова таблиця - таблиця

покажчиків на каталог сторінок. Ця таблиця містить чотири 64-разрядных

елемента і знаходиться вище каталогу сторінок в ієрархії;

Базова 20-разрядный адреса каталогу сторінок в регістрі CR3 замінена на 27-

разрядный адресу таблиці покажчиків на каталог сторінок. Це 27 старших

розрядів фізичної адреси першого елемента таблиці каталогу;

32-разрядный лінійна адреса відображається на 36-разрядное простір фізичних

адрес.

Перетворення лінійної адреси з розширеною адресацією для 4Кб сторінок.

На рисунку 1.23 показаний механізм перетворення лінійної адреси з

використанням 4Кб сторінок, коли розв'язане розширення фізичної адреси. Цей

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

покриває лінійний адресний простір розміром 4Гб.

Для вибору різноманітних елементів таблиць лінійна адреса ділиться на 4

секції:

Елемент таблиці каталогу сторінок - біти 30 і 31 містять індекс для входу в

таблицю каталогу. Вибраний елемент містить базова фізична адреса каталогу

сторінок;

Елемент каталогу сторінок - біти з 21 по 29 містять індекс для входу в

каталог сторінок. Вибраний елемент містить базова фізична адреса таблиці

сторінок;

Елементи таблиці сторінок - біти з 12 по 20 містять індекс для входу в

вибрану таблицю сторінок. Цей елемент містить базова фізична адреса

сторінки в фізичній пам'яті;

Зміщення - біти з 0 по 11 містять зміщення фізичної адреси всередині

сторінки.

Перетворення лінійної адреси з розширеною адресацією для 2Мб сторінок.

На рисунку 1.24 показане, як таблиця каталогу сторінок і каталог сторінок

можуть бути використані для відображення лінійної адреси на 2Мб сторінки.

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

до 2048 сторінок на лінійний адресний простір розміром 4Гб.

Розмір сторінки 2Мб вибирається, коли встановлений біт PSE в регістрі CR4 і

встановлений біт PS в елементі каталогу сторінок. Коли ці біти встановлені,

лінійна адреса ділиться на три секції:

Елемент таблиці каталогу сторінок - біти 30 і 31 містять індекс для входу в

таблицю каталогу. Вибраний елемент містить базова фізична адреса каталогу

сторінок;

Елемент каталогу сторінок - біти з 21 по 29 містять індекс для входу в

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

розміром 2Мб;

Зміщення - біти з 0 по 20 містять зміщення фізичної адреси всередині

сторінки.

1.3.4 Віртуальні переривання

В процесорах Pentium+ в механізм обробки переривань були додані деякі нові

можливості. Розглянемо зміни, що стосуються режиму V86. Коли процесор

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

різноманітних прапорів і полів:

VME-прапор (біт 0 в регістрі CR4) - коли він в одиниці, дозволяються

розширені можливості по обробці переривань і виключень в режимі V86, а

також дозволяється апаратна підтримка прапора VIF;

IOPL-прапор (біт 12 і 13 в регістрі EFLAGS) - управляє тим, як будуть

оброблятися переривання;

БКПП - бітова карта перенаправлення переривань (32 байта в TSS) - містить

256 прапорів, що показують, як програмні переривання (переривання, що

генеруються командою INT n) будуть оброблятися в режимі V86. Програмні

переривання можуть спрямовуватися на обробку в поточну програму 8086 або

оброблятися в захищеному режимі. Апаратні переривання і виключення завжди

спрямовуються в захищений режим.

В таблиці 1.5. Показане, як процесор обробляє переривання і виключення в

режимі V86 в залежності від стану описаних вище прапорів і полів.

Таблиця 1.5. Обробка переривань і виключень в режимі V86.

|Засіб |VME |IOPL |Б в БКПП|Дії процесора |

|1 |0 |3 |x |Програмні переривання (INT n), |

| | | | |виключення і переривання ,що |

| | | | |маскуються спрямовуються в |

| | | | |захищений режим (через IDT) |

|2 |0 |<3 |x |Програмні переривання генерують |

| | | | |виключення 13. Виключення і |

| | | | |переривання ,що маскуються |

| | | | |спрямовуються в захищений режим |

|3 |1 |<3 |1 |Те же |

|4 |1 |3 |1 |Програмні переривання, виключення |

| | | | |і переривання ,що маскуються |

| | | | |спрямовуються в захищений режим |

|5 |1 |3 |0 |Програмні переривання |

| | | | |спрямовуються в режим V86 по |

| | | | |механізму реального режиму |

|6 |1 |<3 |0 |Програмні переривання генерують |

| | | | |виключення 13. Виключення і |

| | | | |переривання ,що маскуються |

| | | | |обробляються з підтримкою прапорів|

| | | | |VIF і VIP |

Коли прапор VME=0, переривання обробляються звичайним образом. Коли прапор

в одиниці, до обробки переривань привертається новий об'єкт - бітова карта

перенаправлення переривань. Вона розташується по базовій адресі карти

введення-виведення мінус 32 байта в сегменті TSS. Кожний біт цієї карти

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

захищеному режимі (б рівному одиниці) або переривання буде перенаправлено

на обробку в програму режиму V86 через таблицю переривань розташовану по

лінійній адресі 0 (біт рівний 0).

Обробка переривань по засобу 5. Процесор перенаправляє програмні

переривання в програму режиму V86 через таблицю переривань, як це

відбувається в реальному режимі. Процесор виробляє слідуючу послідовність

дій:

Записує поточні значення регістрів CS і IP в поточний стек;

Записує в стек регістр прапорів FLAGS з очищеними NT і IOPL;

Очищає прапор IF в регістрі FLAGS, щоб заборонити переривання;

Очищає прапор TF в регістрі FLAGS;

Завантажує регістри CS і IP з таблиці переривань по лінійній адресі 0;

Починає виконувати програму переривання.

При використанні цього засобу обробки переривань виключення не заносять в

стек код помилки.

Обробка переривань по засобу 6. Коли процесор знаходиться в стані,

відповідному засобу 6, команди CLI і STI змінюють прапор VIF замість

прапора IF. Процесор читає прапор VIP, але ніколи не змінює його. Процесор

використає прапори VIF і VIP для визначення того, як обробляти переривання.

Якщо відбулося переривання або виключення і прапор VIF скинутий в 0, те

процесор виробляє тих же дії, що і в засобі 5. Процесор також обробляє

переривання по засобу 5, якщо прапор VIF встановлений в одиницю і відбулося

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

те процесор виробляє наступну послідовність дій:

Процесор викликає виключення 13:

Переключається в захищений режим на CPL=0;

Зберігає в PL0-стеці: EIP, CS, EFLAGS, ESP, SS, ES, DS, FS, GS. В стековом

образі регістру EFLAGS поле IOPL встановлюється рівним 3 і прапор VIF

копіюється в прапор IF;

Очищає сегментні регістри;

Скидає прапор VM в регістрі EFLAGS;

Приступає до виконання вибраного переривання.

Що рекомендуються дії обробника виключення 13: прочитати прапор VM регістру

EFLAGS в стеке. Якщо цей прапор встановлений, викликати монітор V86.

Монітор V86 читає прапор VIF в регістрі EFLAGS. Якщо цей прапор

встановлений, монітор встановлює прапор VIP в регістрі EFLAGS, вертає

управління обробнику.

Обработчик виробляє повернення в режим V86.

Процесор продовжує виконання програми 8086 без обробки переривання.

Коли програма 8086 виконає команду STI, процесор зробить наступне:

Перевірить прапор VIP.

Якщо VIP=0, те процесор скине в 0 прапор VIF.

Якщо VIP=1, те процесор генерує виключення 13.

Що рекомендуються дії обробника: викликати монітор V86, щоб дати можливість

обробити відкладене переривання. Типові дії монітору V86 - це очистити

прапори VIF і VIP в стеке і повернути управління в режим V86 (через

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

оброблятися по засобу 5.

Стан прапорів VIF і VIP не змінюється в реальному режимі або під час

переключення між реальним і захищеним режимом.

Розглянемо віртуальні переривання в захищеному режимі. Для дозволу

підтримки прапорів VIF і VIP необхідно встановити прапор PVI в регістрі

CR4.

Якщо PVI=1, CPL=3 і IOPL<3, те виконання команд CLI і STI не наводить до

генерації виключення 13. В цьому випадку ці команди впливають на прапор VIF

замість IF.

Якщо відбувається переривання ,що маскується апаратне і прапор VIF=1, те

процесор викличе виключення 13. Обработчик виключення може встановити

прапор VIP і повернути управління PL3-задаці, що продовжить свою роботу.

Коли програма виконає команду STI, щоб очистити прапор VIF, процесор

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

переривання.

Типовий засіб обробки відкладеного переривання полягає в очистці прапорів

VIF і VIP в стековом образі регістру EFLAGS і поверненні управління PL3-

задаці.

Коли в наступний раз відбудеться апаратне переривання, процесор буде

обробляти його нормальним образом.

-----------------------

Цикл читання

Цикл запису

T1

T2

T3

Twait

T4

T1

T2

T3

Twait

T4

CLK

ALE

S[2:0]#

S[7:3]

S[7:3]

BHE#,A[19:16]

BHE#,A[19:16]

Addr/

Status

A[15:0]

D[15:0]

A[15:0]

D[15:0](Out)

Addr/

Data

READY

Рисунок 1.1. Шинні циклі процесорів 8086/88

Цикл читання N

Цикл читання N+1

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ts

Ts

Tc

Tc

CLK

PROC

CLK

Дійсна адреса(N)

Дійсна адреса(N+1)

A[23:0]

S0,S1

READY

Дані читання N

Дані читання N+1

D[15:0]

Рисунок 1.2. Конвейєр шиних циклів 80286

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ts

Ts

Tc

Tc

Tc

Цикл читання N

Цикл читання N+1

CLK

PROC

CLK

Дійсна адреса N

Дійсна адреса N+1

A[23:0]

S1#,S0#

ALE

READY

RD#

CMDLY

Рисунок 1.3. Затримка и розтяжка шиних циклів 80286

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

T1

T1

T1

T2

T2

T2

CLK

Valid 1

Valid 2

Valid 3

BE[3:0]#,A[31:2]

M/IO#,D/C#,W/R#

ADS#

NA#

READY

IN

IN 1

IN 2

IN 3

D[31:0]

Рисунок 1.4. Неконвейєрні шині цикли 80386

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

Ф1 Ф2

T1

T1

T1

T2

T2

T2

CLK

Valid 1

Valid 2

Valid 3

BE[3:0]#,A[31:2]

M/IO#,D/C#,W/R#

Valid 4

ADS#

NA#

READY

IN

IN 1

IN 2

IN 3

D[31:0]

Рисунок 1.5. Конвейєрні шині цикли 80386

Ti

Ti

T2

T2

T2

T2

T1

IN 1

IN 2

IN 3

IN 4

04h

00h

0Ch

08h

CLK

ADS#

BE[3:0]#,A[31:4]

M/IO#,D/C#,W/R#

A[3:2]

RDY#

BRDY#

BLAST#

KEN#

D[31:0]

Рисунок 1.6. Пакетний цикл читання 80486

Передвибірка

Дешифрація

стадія 1

Дешифрація

стадія 2

Виконання

Запис

результата

Рисунок 1.7. Конвейєр процесора 80486

T1

T1

T2

T2

T2

T2

T2

T2

T2

T2

a Valid

b Valid

a

b

a

a

a

a

b

b

b

b

08h

00h

00h

18h

10h

08h

10h

18h

CLK

BE[7:0]#,A[31:5]

M/IO#,D/C#,W/R#

A[4:3]

ADS#

CAHSE#

KEN#

NA#

BRDY#

D[63:0]

Рисунок 1.8. Конвейєризовані пакетні циклі читання Pentium

Кеш

инструкцій

PF

F

D1

D2

EX

WB

D2

EX

WB

Кеш даних

X1

X2

WF

Mex

Wm/M2

M3

Wmul

Mex

Wm/M2

M3

Wmul

Рисунок 1.9. Конвейєр процесора Pentium

01

02

03

04

07

08

05

06

09

10

11

12

15

16

13

14

a

a

a

a

a

a

a

a

a

a

b

b

b

b

b

b

b

b

b

b

CLK

Арбитраж

Запрос

Ошибка

Завершение

Ответ

Данные

Фазы:

Рисунок 1.10. Протокол шини Pentium Pro

Port 2

Port 3

Port4

Port 0

Port 1

ROB Wb

RRF

BTB

IFU

ID

RAT

ROB Rd

RS

Рисунок 1.11. Конвейєр процесора Pentium Pro

CF

PF

AF

ZF

SF

TF

IF

DF

OF

15 12 11 10 9 8 7 6 5 4 3 2

1 0

Рисунок 1.12. Регистр прапорів FLAGS

ІНДЕКС

TI

RPL

15 3 2 1

0

Рисунок 1.13. Формат селектора

Базова адреса

(біти 23-0)

Розмір

(біти 15-0)

Байт

доступу

Розмір

біти(19-16)

Доп.

атрибути

Базова адреса

(біти 31-24)

63 56 55 52 51 48 47 40

39 16 15 0

Рисунок 1.14. Загальний формат дескриптора.

Р

DPL

S=0

type

7 6 5 4 3 0

E=1

C

R

A

Р

DPL

S=1

7 6 5 4 3 2 1 0

Р

DPL

S=1

E=0

ED

W

A

7 6 5 4 3 2 1 0

Рисунок 1.15. Формат байта доступа.

3

2

1

0

Програми користувача

Службові програми

Утіліти операційної системи

Ядро операційної системи

Рисунок 1.16. Рівні привілей и захисту

Селектор

Відносна адреса

(біти 15-0)

Байт

доступа

WC

біти(4-0)

Відносна адреса

(біти 31-16)

63 48 47 40 39 37 36

32 31 16 15 0

Рисунок 1.17. Формат дескриптора шлюза виклика.

000

Directory

Table

Offset

Phisical addres

Page Table Entry

Directory Entry

CR3

Page Directory

Page Table

31 22 21 12 11

0

Рисунок 1.18. Перетворення линійної адреси для 4 Кб сторінок

Directory

Offset

Phisical addres

Directory Entry

CR3

Page Directory

31 22 21

0

Рисунок 1.19. Перетворення линійної адреси для 4 Мб сторінок

Базоа адреса таблиці сторінок

Не исп.

G

PS

0

A

PCD

PWT

U/S

R/W

P

31 12 11 9 8 7

6 5 4 3 2 1 0

Рисунок 1.20. Формат элемента каталога сторінок (4 Кб и 32 розряда адреси)

Базова адреса сторінки

Не исп.

G

0

D

A

PCD

PWT

U/S

R/W

P

31 12 11 9 8 7

6 5 4 3 2 1 0

Рисунок 1.21. Формат элемента таблиці сторінок (4 Кб и 32 розряда адреси)

Базова адреса сторінки

Не исп.

G

PS

D

A

PCD

PWT

U/S

R/W

P

31 12 11 9 8 7

6 5 4 3 2 1 0

Рисунок 1.22. Формат элемента каталога сторінок (4 Мб и 32 розряда адреси)

Резерв

31 30 29 21 20 12 11

0

Directory

Table

Offset

Phisical addres

Page Table Entry

Directory Entry

CR3

Page Directory

Page Table

Рисунок 1.23. Перетворення линійної адреси для 4 Кб сторінок с розширеною

адресацією

Dir. Pointer Entry

Directory Table

31 30 29 21 20

0

Directory

Offset

Phisical addres

Directory Entry

CR3

Page Directory

Рисунок 1.23. Перетворення линійної адреси для 2Мб сторінок с розширеною

адресацією

Dir. Pointer Entry

Directory Table