Кер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,
керуючі зовнішнім кешированням. Процесори, працюючі в режимі зворотного
Страницы: 1, 2, 3
|