додати матеріал


приховати рекламу

Pentium IV

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


Рефера т
 
Pentium IV
 
Cтудента 315-а групи
Зайцева Олександра
План:
1.0 Intel 80386, 80486 і Pentium
1.1 Засоби підтримки сегментації пам'яті
1.2 сегментно-сторінковий механізм
1.3 Засоби виклику підпрограм і задач
2.0 Нова архітектура Pentium 4
2.1 Як працюють сучасні процесори
2.2 Конвеєрна архітектура: плюси і мінуси, проблеми та рішення
2.3 Pentium 4: гіперконвейерізація
2.4 Простий конвеєра: старі проблеми, помножені на нові частоти
2.5 Пророцтва повинні збуватися!
2.6 Удосконалене позачергове виконання
2.7 Подвоєна внутрішня частота ALU
2.8 Співпроцесор
2.9 розширений набір SIMD-команд під кодовою назвою SSE-2
2.10 Платформа для Pentium 4
2.11 Системна шина
2.12 Кеш першого і другого рівня
2.13 Висновки
2.14 Список літератури
Засоби апаратної підтримки управління пам'яттю і багатозадачного середовища в мікропроцесорах Intel 80386, 80486 іPRIVATE "TYPE = PICT; ALT = [" Pentium
Процесори Intel 80386, 80486 і Pentium з точки зору описані в даному розділі питань мають аналогічні засоби, тому для стислості в тексті використовується термін "процесор i386", хоча вся інформація цього розділу в рівній мірі відноситься до трьох моделей процесорів фірми Intel.
Процесор i386 має два режими роботи - реальний (real mode) і захищений (protected mode). У реальному режимі процесор i386 працює як швидкий процесор 8086 з дещо розширеним набором команд. У захищеному режимі процесор i386 може використовувати всі механізми 32-х розрядної організації пам'яті, в тому числі механізми підтримки віртуальної пам'яті і механізми перемикання завдань. Крім цього, в захищеному режимі для кожного завдання процесор i386 може емулювати 86 і 286 процесори, які в цьому випадку називаються віртуальними процесорами. Таким чином, при багатозадачному роботі в захищеному режимі процесор i386 працює як кілька віртуальних процесорів, що мають загальну пам'ять. На відміну від реального режиму, режим віртуального процесора i86, який називається в цьому випадку режимом V86, підтримує сторінкову організацію пам'яті та засоби багатозадачності. Тому завдання, що виконуються в режимі V86, використовують ті ж засоби межзадачного захисту і захисту ОС від користувача завдань, що і завдання, що працюють в захищеному режимі i386. Однак максимальний розмір віртуального адресного простору становить 1 Мб, як і у процесора i86.
Переключення процесора i386 з реального режиму в захищений і назад здійснюється виключно шляхом виконання команди MOV, яка змінює біт режиму в одному з керуючих регістрів процесора. Перехід процесора в режим V86 відбувається схожим чином шляхом зміни значення певного біта в іншому регістрі процесора.
Засоби підтримки сегментації пам'яті
Фізичне адресний простір процесора i386 складає 4 Гб, що визначається 32-розрядною шиною адреси. Фізична пам'ять є лінійною з адресами від 00000000 до FFFFFFFF в шістнадцятковому представленні. Віртуальний адреса, що використовується в програмі, являє собою пару - номер сегмента і зміщення всередині сегменту. Зсув зберігається у відповідному полі команди, а номер сегмента - в одному з шести сегментних регістрів процесора (CS, SS, DS, ES, FS або GS), кожен з яких є 16-бітним. Засоби сегментації утворюють верхній рівень засобів управління віртуальною пам'яттю процесора i386, а кошти сторінкової організації - нижній рівень. Засоби сторінкової організації можуть бути як включені, так і вимкнені (за рахунок установки певного біта в регістрі процесора), і залежно від цього змінюється зміст перетворення віртуальної адреси, яке виконують кошти сегментації. Спочатку розглянемо випадок роботи засобів сегментації при відключеному механізмі управління сторінками.
32-бітове зсув визначає розмір віртуального сегмента в 2 32 = 4 Гб, а кількість сегментів визначається розміром поля, відведеного в сегментному регістрі під номер сегмента. Структура даних в сегментному регістрі називається селектором, оскільки призначена для вибору дескриптора певного сегмента з таблиць дескрипторів сегментів. Дескриптор сегмента описує всі характеристики сегменту, необхідні для перевірки правильності доступу до нього і його перебування у фізичному адресному просторі. Процесор i386 підтримує дві таблиці дескрипторів сегментів - глобальну (Global Descriptor Table, GDT) і локальну (Local Descriptor Table, LDT). Глобальна таблиця призначена для опису сегментів операційної системи і сегментів межзадачного взаємодії, тобто сегментів, які в принципі можуть використовуватися всіма процесами, а локальна таблиця - для сегментів окремих завдань. Таблиця GDT одна, а таблиць LDT повинно бути стільки, скільки в системі виконується завдань. При цьому активною в кожен момент часу може бути тільки одна з таблиць LDT.
Селектор складається з трьох полів - 13-бітного поля індексу (номера сегмента) у таблицях GDT і LDT, 1-бітного поля - покажчика типу використовуваної таблиці дескрипторів і двухбітного поля поточних прав доступу завдання - CPL. Розрядність поля індексу визначає максимальне число глобальних і локальних сегментів завдання - по 8K (2 13) сегментів кожного типу, всього 16 K. З урахуванням максимального розміру сегмента - 4 Гбайта - кожна задача при чисто сегментної організації віртуальної пам'яті працює у віртуальному адресному просторі в 64 Тбайта.
Тепер простежимо, як віртуальний простір відображається на фізичний простір розміром в 4 Гбайта при чисто сегментному механізмі відображення. Отже, коли завданні необхідно отримати доступ до осередку фізичної пам'яті, то для вибору дескриптора віртуального сегмента використовується значення селектора з відповідного (залежно від команди і стадії її виконання - вибірка коду команди або даних) сегментного регістра процесора. Значення поля типу таблиці вказує на те, яку таблицю потрібно використовувати - GDT чи LDT. Розглянемо спочатку випадок використання таблиці GDT. Для зберігання таблиць GDT і LDT використовується оперативна пам'ять (використання швидкої асоціативної пам'яті процесора для зберігання елементів цих таблиць розглянемо пізніше). Для того, щоб процесор зміг знайти у фізичній пам'яті таблицю GDT, її повний 32-бітний фізичну адресу (адресу початку таблиці), а також розмір (поле в 16 біт) зберігаються в спеціальному регістрі процесора GDTR. Кожен дескриптор в таблицях GDT і LDT має розмір 8 байт, тому максимальний розмір цих таблиць - 64 К (8 (8 К дескрипторів). Для отримання потрібного дескриптора з таблиці процесор складає базову адресу таблиці GDT з регістра GDTR зі зрушеним на 3 розряду вліво ( множення на 8, у відповідності з числом байтів в елементі таблиці GDT) значенням поля індексу з сегментного регістра і отримує фізичний лінійний адресу потрібного дескриптора у фізичній пам'яті. Таблиця GDT постійно присутній у фізичній пам'яті, тому процесор витягує за цією адресою потрібний дескриптор сегменту і поміщає його у внутрішній (програмно недоступний) регістр процесора. (Таких регістрів шість і кожен з них відповідає певному сегментному регістру, що значно прискорює роботу процесора).
Дескриптор віртуального сегмента складається з декількох полів, основними з яких є поле бази - базового 32-розрядного фізичної адреси початку сегменту, поле розміру сегменту і поле прав доступу до сегмента - DPL (Descriptor Privilege Level). Спочатку процесор визначає правильність адреси, порівнюючи зміщення і розмір сегмента (у випадку виходу за межі сегменту відбувається переривання типу виняток - exсeption). Потім процесор перевіряє права доступу завдання до даного сегмента, порівнюючи значення полів CPL селектора і DPL дескриптора сегмента. У процесорі i386 мандатний спосіб визначення прав доступу (званий також механізмом кілець захисту), при якому є кілька рівнів прав доступу, і об'єкти будь-якого рівня мають доступ до всіх об'єктів рівного рівня або більш низьких рівнів, але не має доступу до об'єктів більш високих рівнів. У процесорі i386 існує чотири рівні прав доступу - від 0-го, який є найвищим, до 3-го - найнижчого. Очевидно, що операційна система може використовувати механізм рівнів захисту на свій розсуд. Однак передбачається, що нульовий рівень буде використаний для ядра операційної системи, а третій рівень - для прикладних програм, проміжні рівні - для утиліт і підсистем операційної системи, менш привілейованих, ніж ядро.
Таким чином, доступ до віртуального сегменту вважається законним, якщо рівень прав селектора CPL вище або дорівнює рівню прав сегмента DPL (CPL (DPL). При порушенні прав доступу відбувається переривання, як і у випадку недотримання меж сегменту. Далі перевіряється наявність сегмента у фізичній пам'яті за значенням біта P дескриптора, і якщо сегмент відсутній у фізичній пам'яті, то відбувається переривання. При наявності сегмента в пам'яті обчислюється фізичний лінійний адресу шляхом складання бази сегмента і зміщення і виробляється доступ до елемента фізичної пам'яті за цією адресою.
У випадку, коли селектор вказує на таблицю LDT, віртуальний адреса перетворюється у фізичну аналогічним чином, але для доступу до самої таблиці LDT додається ще один етап, тому що в процесорі регістр LDTR вказує на розміщення таблиці LDT не прямо, а опосередковано. Сам регістр LDTR має розмір 16 біт і містить селектор дескриптора таблиці GDT, який описує розташування цієї таблиці у фізичній пам'яті. Тому при доступі до елемента фізичної пам'яті через таблицю LDT відбувається дворазове перетворення ВА у фізичний, причому обидва рази за описаною вище схемою. Спочатку за значенням селектора LDTR визначається фізичну адресу дескриптора з таблиці GDT, що описує початок розташування таблиці LDT у фізичній пам'яті, а потім за допомогою селектора завдання обчислюється зсув в таблиці LDT і визначається фізичний адресу потрібного дескриптора. Далі процес аналогічний перетворенню віртуального адреси за допомогою таблиці GDT.
Рис. 2.21. Типи дескрипторів
Дескриптор сегмента містить ще кілька полів. Однобітні полі G визначає одиницю вимірювання розміру сегменту, при G = 0 розмір визначається в байтах, і тоді сегмент не може бути більше 64 К, а при G = 1 розмір визначається в 4К-байтних сторінках, при цьому максимальний розмір сегмента досягає зазначених 4 Гбайт . Поле D визначає тип адресації сегменти: при D = 0 сегмент є 16-бітним (для режиму емуляції 16-бітових процесорів i86 і i286), а при D = 1 сегмент є 32-бітним. Крім цього в дескрипторі є поле типу сегмента, яке у свою чергу ділиться на декілька полів (малюнок 2.21). Поле S визначає, чи є сегмент системним (S = 1) або для користувача (S = 0). У свою чергу призначені для користувача сегменти поділяються на сегменти даних (E = 0) і сегменти коду (E = 1). Для сегменту даних визначаються однобітні поля:
ED - напрямку поширення сегмента (ED = 0 для звичайного сегменту даних, що поширюється в бік збільшення адрес, ED = 1 для стекового сегменту даних, що поширюється в бік зменшення адрес),
W - поле дозволу запису в сегмент (при W = 1 запис дозволена, при W = 0 - заборонена),
A - поле доступу до сегмента (1 означає, що після очищення цього поля до сегмента було звернення з читання або запису, це поле може використовуватися операційною системою у її стратегії заміни сторінок в оперативній пам'яті).
Для сегменту коду використовуються однобітні ознаки:
A - має сенс, аналогічний полю A сегменту даних,
R - дозволяє або забороняє читання з кодового сегмента,
C - біт підпорядкування, дозволяє або забороняє виклик даного кодового сегмента з іншого кодового сегмента з більш низькими правами доступу.
У процесорі i386 існує велика кількість системних сегментів, до яких зокрема належать системні сегменти типу LDT, шлюзи виклику підпрограм і завдань і сегменти стану завдання TSS.
Таким чином, для використання чисто сегментного механізму процесора i386 операційній системі необхідно сформувати таблиці GDT і LDT, завантажити їх в пам'ять (для початку достатньо завантажити тільки таблицю GDT), завантажити покажчики на ці таблиці в регістри GDTR і LDTR і вимкнути сторінкову підтримку. Якщо ж операційна система не хоче використовувати сегментну організацію віртуальної пам'яті, то їй достатньо створити таблицю дескрипторів з одного входу (дескриптора) і завантажити базові значення сегмента в дескриптор. Віртуальний адресний простір завдання буде складатися з одного сегмента довжиною максимум у 4 Гб.
Сегментно-сторінковий механізм
При включеній системі управління сторінками працює як описаний вище сегментний механізм, так і механізм управління сторінками, однак при цьому сенс роботи сегментного механізму змінюється. У цьому випадку віртуальний адресний простір завдання має розмір в 4 Гбайта, в якому розміщуються всі сегменти. Як і раніше селектор завдання визначає номер віртуального сегмента, а зсув у команді завдання - зміщення всередині цього сегменту. Так як тепер всі сегменти поділяють один адресний простір, то можливо їх накладення, але процесор не контролює такі ситуації, залишаючи цю проблему операційній системі. Перший етап перетворення віртуальної адреси, пов'язаний з перетворенням зсуву і селектора з використанням таблиць GDT і LDT, що містять дескриптори сегментів, в точності збігається з етапом перетворення цих даних при відключеному механізмі управління сторінками. Всі структури даних цих таблиць такі ж. Однак, якщо раніше дескриптор сегменту містив його базовий адреса в фізичному адресному просторі, і при складанні його зі зміщенням з команди програми виходив лінійний шуканий адресу у фізичній пам'яті, то тепер дескриптор містить базову адресу сегмента у віртуальному адресному просторі. Тому в результаті його складання зі зміщенням виходить лінійний віртуальний адресу, який на другому етапі (сторінковому) перетворюється на номер фізичної сторінки. Для реалізації механізму управління сторінками як фізична, так і віртуальний адресний простору розбиті на сторінки розміром 4 К. Загалом у цих адресних просторах налічується 1 М сторінок. Незважаючи на наявність декількох віртуальних сегментів, весь віртуальний адресний простір завдання має загальне розбиття на сторінки, так що нумерація віртуальних сторінок наскрізна.
Лінійний віртуальний адреса містить у своїх старших 20 розрядах номер віртуальної сторінки, а в молодших 12 розрядах зміщення всередині сторінки. Для відображення віртуальної сторінки у фізичну досить побудувати таблицю сторінок, кожен елемент якої - дескриптор віртуальної сторінки - містив би номер відповідної їй фізичною сторінки та її атрибути. У процесорі i386 так і зроблено, і структура дескриптора сторінки показана на малюнку 2.23. 20-ти розрядів номера сторінки достатньо для визначення фізичної адреси початку сторінки, тому що при її фіксованому розмірі 4 До молодші 12 розрядів цієї адреси завжди дорівнюють нулю. Дескриптор сторінки також містить наступні поля, близькі за змістом з відповідними полями дескриптора сегмента:
P - біт присутності сторінки у фізичній пам'яті,
W - біт дозволу запису в сторінку,
U - біт користувач / супервізор
A - ознака того, чи був доступ до сторінки,
D - ознака модифікації вмісту сторінки,
PWT і PCD - управляють механізмом кешування сторінок (введені, починаючи з процесора i486),
AVL - резерв для потреб операційної системи (available for use).

Рис. 2.23. Формат дескриптора сторінки
При невеликому розмірі сторінки процесора i386 щодо розмірів адресних просторів, таблиця сторінок повинна займати в пам'яті дуже значне місце - 4 байти (1М = 4 Мбайта. Це занадто багато для нинішніх моделей персональних комп'ютерів, тому в процесорі i386 використовується розподіл всієї таблиці сторінок на розділи за 1024 дескриптора. Розмір розділу обраний так, щоб один розділ займав одну фізичну сторінку (1024 (4 байти = 4 Кбайта). Всього виходить 1024 розділу (1024 (1024 = 1М). Для того, щоб не зберігати всі розділи таблиці сторінок одночасно у фізичній пам'яті, використовується каталог розділів таблиці сторінок, який використовує такі ж за структурою дескриптори сторінок, що і в таблиці сторінок. Тому для зберігання інформації про дескрипторах 1024 розділів необхідна пам'ять 4 К, тобто одна фізична сторінка. Сукупність дескрипторів, що описують стан і характеристики віртуальних сторінок розділів таблиці сторінок, називається каталогом розділів або таблиць. Віртуальна сторінка, що зберігає вміст каталогу, завжди знаходиться у фізичній пам'яті, і номер її фізичної сторінки зазначений у спеціальному регістрі CR3 процесора (точніше, в одному з полів цього регістра).
Перетворення лінійного ВА у фізичний відбувається наступним чином (рисунок 2.24). Поле номера віртуальної сторінки (старші 20 розрядів) ділиться на дві рівні частини по 10 розрядів - поле номера розділу і поле номера сторінки в розділі. За допомогою номера фізичної сторінки, що зберігає каталог та зміщення в цій сторінці, задається полем номера розділу, процесор знаходить дескриптор віртуальної сторінки розділу. Відповідно до атрибутами цього дескриптора визначаються права доступу до цієї сторінки, а також наявність її у фізичній пам'яті. У разі її відсутності відбувається сторінкове переривання, і операційна система повинна в цьому випадку перемістити її в пам'ять. Після того, як потрібна сторінка знаходиться в пам'яті, для визначення адреси елемента даних використовується зміщення, що визначається полем номера сторінки лінійного віртуального адреси.
Таким чином, при доступі до сторінки в процесорі використовується дворівнева схема адресації сторінок, що уповільнює перетворення, але дозволяє використовувати сторінковий механізм і для зберігання самої таблиці сторінок, і суттєво зменшити обсяг фізичної пам'яті для її зберігання. Для прискорення сторінкових перетворень в блоці управління сторінками використовується асоціативна пам'ять, в якій кешується 32 комбінації "номер віртуальної сторінки - номер фізичної сторінки". Ця спеціальна кеш-пам'ять (додаткова по відношенню до 8 Кбайтних кешу даних процесорів i486 і
Pentium) значно прискорює перетворення адрес, так як у разі попадання в кеш тривалий процес, описаний вище, виключається.
Організація віртуальної пам'яті в процесорі i386 дозволяє захистити адресні простори різних процесів за рахунок двох механізмів:
1. Ізоляція адресних просторів процесів у фізичній пам'яті шляхом призначення їм різних фізичних сторінок або сегментів (якщо сторінковий механізм відключений).
2. Захист сегментів від несанкціонованого доступу за допомогою привілеїв чотирьох рівнів.
Засоби виклику підпрограм і задач
Операційна система, як однозадачние, так і багатозадачна, повинна надавати завданням кошти виклику підпрограм операційної системи, бібліотечних підпрограм, а також мати кошти для запуску завдань, а при багатозадачному роботі засоби швидкого переходу з задачі на задачу. Виклик підпрограми відрізняється від запуску завдання тим, що в першому випадку адресний простір залишається тим же (таблиця LDT залишається колишньою), а при виклику завдання адресний простір повністю змінюється.
Виклик підпрограм без зміни кодового сегмента в захищеному режимі процесора i386 проводиться аналогічно виклику в реальному режимі за допомогою команд JMP і CALL.
Для виклику підпрограми, код якої знаходиться в іншому сегменті (який може належати бібліотеці, іншої задачі або операційній системі), процесор i386 надає 2 варіанти виклику, причому обидва використовують захист за допомогою прав доступу.
Перший спосіб полягає у безпосередньому вказівці в полі команди JMP або CALL селектора сегмента, що містить код викликається підпрограми, а також зміщення у цьому сегменті адреси початку підпрограми.
Схема такого виклику наведена на малюнку 2.25. Тут і далі показаний тільки етап отримання лінійного адреси у віртуальному просторі, а наступний етап (мається на увазі, що механізм підтримки сторінок включений) перетворення цієї адреси в номер фізичної сторінки пропущено, тому що він не містить нічого специфічного порівняно з доступом до сегменту даних, розглянутому вище. Дозвіл виклику відбувається в залежності від значення поля C в дескриптор сегменту викликається коду. При C = 0 викликається сегмент не вважається підлеглим, і виклик дозволяється, тільки якщо рівень прав викликає коду не менше рівня прав викликається сегмента. При C = 1 викликається сегмент вважається підлеглим і допускає виклик з коду з будь-яким рівнем прав доступу, але при виконанні підпрограма наділяється рівнем прав викликав коду.
Очевидно, що перший спосіб не годиться для виконання функцій операційної системи, що має звичайно нульовий рівень прав, з призначеної для користувача програми, яка працює, як правило, на третьому рівні. Тому процесор i386 надає інший спосіб виклику підпрограм, заснований на тому, що заздалегідь визначається набір точок входу у привілейовані кодові сегменти, і ці точки входу описуються за допомогою спеціальних дескрипторів - дескрипторів шлюзів виклику підпрограм. Цей дескриптор належить до системних дескрипторам, і його структура відрізняється від структури дескрипторів сегментів коду і даних (малюнок 2.26). Схема його використання наведена на малюнку 2.27. Селектор з поля команди CALL використовується для вказівки на дескриптор шлюзу виклику підпрограми в таблицях GDT чи LDT. Для використання цього дескриптора викликає код повинен мати не менший рівень прав, ніж дескриптор, але якщо дескриптор шлюзу доступний, то він може вказувати на дескриптор сегменту викликається коду, що має більш високий рівень, ніж має шлюз, і виклик при цьому відбудеться. При визначенні адреси входу в викликається сегменті зміщення з поля команди CALL не використовується, а використовується зміщення з дескриптора шлюзу, що не дає можливості завданню самій визначати точку входу в захищений кодовий сегмент.
При виклику кодів, що володіють різними рівнями привілеїв, виникає проблема передачі параметрів між різними стеками, так як для надійного захисту завдання різного рівня привілеїв мають різні сегменти стеків. Селектори цих сегментів зберігаються в контексті завдання - сегменті TSS (Task State Segment). Якщо викликається підпрограма, яка має інший рівень привілеїв, то з поточного стека в стек рівня доступу викликається сегмента копіюється стільки 32-розрядних слів, скільки вказано у полі лічильника слів дескриптора шлюзу.
Структура сегменту TSS завдання приведено на малюнку 2.28. Контекст завдання повинен містити всі дані для того, щоб можна було відновити виконання перерваної в довільний момент часу завдання, тобто значення регістрів процесора, покажчики на відкриті файли і деякі інші, залежні від операційної системи, змінні. Швидкість перемикання контексту в значній мірі впливає на швидкісні якості багатозадачного операційної системи. Процесор i386 виробляє апаратне перемикання контексту завдання, що зберігається в сегменті TSS. Як видно з малюнка, сегмент TSS має фіксовані поля, відведені для значень регістрів процесора, як універсальних, так і деяких керуючих (наприклад LDTR і CR3). Для опису можливостей доступу завдання до портів введення-виведення процесор використовує в захищеному режимі полі IOPL (Input / Output Privilege Level) у своєму регістрі EFLAGS і карту бітових полів доступу до портів. Для отримання можливості виконувати команди введення-виведення виконуваний код повинен мати рівень прав не нижче значення поля IOPL. Якщо ж ця умова дотримується, то можливість доступу до порту з конкретною адресою визначається значенням відповідного біта в карті введення-виведення сегменту TSS (карта складається з 64 Кбіт для опису доступу до 65536 портів).
Крім цього, сегмент TSS може включати додаткову інформацію, необхідну для роботи завдання і яка від конкретної операційної системи (наприклад, покажчики відкритих файлів або покажчики на іменовані конвеєри мережевого обміну). Включена в цей сегмент інформація автоматично замінюється процесором при виконанні команди CALL, селектор якої вказує на дескриптор сегменту TSS в таблиці GDT (дескриптори цього типу можуть бути розташовані тільки в цій таблиці). Формат дескриптора сегмента TSS аналогічний формату дескриптора сегменту даних.
Як і у випадку виклику підпрограм, є дві можливості виклику завдання - безпосередній виклик через вказівку селектора сегмента TSS потрібної завдання в полі команди CALL і непрямий виклик через шлюз виклику завдання. Як і при виклику підпрограм, безпосередній виклик можливий тільки у випадку, якщо викликає код володіє рівнем привілеїв, не меншим, ніж викликається завдання. При виклику через шлюз (який може розташовуватися і в таблиці LDT) достатньо лише мати права доступу до шлюзу. Безпосередній виклик завдання показаний на малюнку 2.29. При перемиканні задач процесор виконує наступні дії:
1) Виконується команда CALL, селектор якої вказує на дескриптор сегменту типу TSS.
2) У TSS поточного завдання зберігаються значення регістрів процесора. На поточний сегмент TSS вказує регістр процесора TR, що містить селектор сегмента.
3) У TR завантажується селектор сегменту TSS завдання, на яку перемикається процесор.
4) З нового TSS в регістр LDTR переноситься значення селектора таблиці LDT в таблиці GDT завдання.
5) Відновлюються значення регістрів процесора (з відповідних полів нового сегменту TSS).
6) У полі селектора повернення заноситься селектор сегменту TSS знімається з виконання завдання для організації повернення до перерваної задачі в майбутньому.
Виклик завдання через шлюз відбувається аналогічно, додається лише етап пошуку дескриптора сегмента TSS за значенням селектора дескриптора шлюзу виклику.
Використання всіх можливостей, що надаються процесорами Intel 80386, 80486 і Pentium, дозволяє організувати операційній системі високонадійну многозадачную середу.
 
Всім було зрозуміло, що Intel необхідно випустити новий CPU. Конкуренти буквально "наступають на п'яти", ядро Coppermine практично досягло своєї межі частот, вимоги до продуктивності процесорів ростуть не по днях, а по годинах, стрімко набирає обертів ринок домашніх мультимедіа ... Користувач вже не задовольнявся простим підвищенням частоти, його душа тужила за чимось принципово новим, свіжому, незвіданого. І ось - вийшов Pentium 4. Революція відбулася. Але революція не буває "м'якої" ...


Нова архітектура Pentium 4



Pentium 4 власною персоною



Підпис: Pentium 4 власною персоною Простіше перелічити, що у новому процесорі Intel не змінилося: він усе ще 64-бітовий і все ще підтримує систему команд x86. Власне, якщо перераховувати саме те, чого зміни зовсім не торкнулися, то на цьому список закінчується. Група розробників Pentium 4 "обтрусила з колін прах Pentium III" і створила архітектуру нового CPU практично "з нуля".

Але стару аксіому "не зламалося - не чини" в R & D-відділі Intel знають напевно. Тому спершу спробуємо зрозуміти, чому потрібно було настільки сильно переробляти (а подекуди і створювати заново) архітектуру Pentium 4 замість того, щоб піддавати подальшим удосконаленням ядро Pentium Pro (а ми вже писали раніше, що саме цей процесор служить родоначальником серії Pentium II / III).
Як працюють сучасні процесори
Для початку - невеличка, але зовсім необхідна теоретична частина. По-перше, всі сучасні CPU використовують конвеєрну (pipelined) архітектуру в різних її варіантах. Це означає, що будь-яка команда виконується не одним, а кількома блоками, об'єднаними в конвеєр. Першим процесором, у якому було застосовано таке рішення, став Intel 486, він мав конвеєр з п'яти ступенів.
Однак це ще не все. Справа в тому, що всередині будь-який сучасний CPU вже давно "наполовину RISC", тобто фактично він виконує зовсім інші команди, а не ті, що надходять до нього з ОЗУ. Ера процесорів, "прямо" виконували команди x86-асемблера, закінчилася ще з приходом Intel Pentium Pro / II та AMD K5/K6. Усі наступні CPU спочатку здійснюють перетворення досить "ємних" x86-команд в більш простий RISC-подібний код (як правило, при цьому одна команда перетворюється на декілька), виконанням якого і займається безпосередньо ядро ​​процесора. Такий, на перший погляд, складний шлях був обраний тому, що ядро, що виконує прості команди, набагато легше "переносить" високі частоти роботи. Загалом, суперечка між низькочастотним складним ядром і високочастотним простим вже давно і однозначно вирішено на користь останнього.
При цьому з'являється ще одна можливість збільшення швидкості виконання команд - паралелізації обробки. Тобто кілька RISC-подібних команд обробляються паралельно - за один такт, але на різних ділянках конвеєра. Ну і крім того, починаючи з Intel Pentium, архітектура сучасних CPU стала "суперскалярной" (superpipelined), це означає, що конвеєрів у них декілька і працюють вони паралельно.


Конвеєрна архітектура: плюси і мінуси, проблеми та рішення
Однак на цьому шляху виникла істотна проблема, пов'язана вже з недоліком самої конвеєрної архітектури. Потік команд, що надходять на конвеєр, дуже бажано зробити постійним і безперервним. В іншому випадку через "заминки" на будь-якій його стадії ті операції, для яких необхідно "знати" результат виконання попередньої команди, будуть просто чекати її завершення, і все "замре". Для усунення цієї проблеми використовуються два прийоми: позачергове виконання (Out-of-Order Execution) і пророкування розгалужень (Branch Prediction).
Позачергове виконання - термін, розуміти який слід саме буквально: команди, що надходять на конвеєр пізніше, виконуються - раніше. Розглянемо простий приклад "програми":

A = B + C
N = A + 2
C = B + 3
У цьому випадку для виконання другої операції необхідно завершити першу, так як значення A + 2 неможливо дізнатися доти, поки в результаті попередньої операції не буде встановлено значення A. Однак для виконання третьої команди результати двох попередніх знати не обов'язково! Значить, щоб конвеєр не простоював, слід виконувати спочатку першу команду, потім відразу ж можна приступати до третьої, а вже поки вона буде виконуватися, "настигне" значення А, необхідний для виконання другої. Саме виявленням подібних послідовностей і займаються сучасні CPU, що дозволяє їм у результаті скоротити час простою.
Механізм передбачення розгалужень - штука складна, проте отримати деяке уявлення про нього на простому прикладі теж можна. Правда, необхідно знати хоча б ази програмування (наприклад, BASIC). Отже, уявімо собі цикл FOR I = 1 TO 10 ... NEXT I. При компіляції цього циклу в машинний код він перетвориться приблизно в таку послідовність команд:

10 I = 1
20 ...
30 I = I + 1
40 IF I <= 10 THEN GOTO 20
50 ...
Як бачите, перехід з рядка 40 в десяти випадках здійснюється на рядок 20 і тільки в одному - на рядок 50. Механізм передбачення при цьому просто "запам'ятає", куди відбувся перехід за умовою в самий перший раз, після чого буде припускати, що і наступного разу перехід здійсниться туди ж. І помилиться всього лише один раз з десяти! Адже в реальних задачах зустрічаються цикли з набагато більшою кількістю повторень ... Знаючи ж, які команди підуть за операцією переходу, можна, відповідно, розпочати декодувати їх задовго до того, як сама операція відбудеться. І знову-таки конвеєр буде "врятований" від простою.
Зрозуміло, всі наведені вище приклади відносяться до найпримітивніших. На практиці алгоритми, які відають позачергових виконанням і передбаченням розгалужень, набагато складніше (і, до речі, є таємницею за сімома печатками, тому що від них багато в чому залежить продуктивність конкретної CPU). Однак для того щоб зрозуміти відмінності Pentium 4 від попередніх процесорів, знати "як це працює" - просто необхідно.



Pentium 4: гіперконвейерізація
Як ми вже говорили раніше - чим примітивніше команди, тим на більшій частоті здатне працювати виконує їх ядро. Проте елементи конвеєра також підпадають під це правило: чим простіше один щабель конвеєра - тим з більшою швидкістю він може "просуватися". Але проста щабель може виконувати тільки просту дію, отже, кількість їх повинна зрости. Власне, тут ми вже впритул підійшли до відповіді на питання, чому ядра Coppermine, спадкоємцю "старенького" Pentium Pro, з такою працею "давалися" великі частоти: його конвеєр з 12 ступенів наблизився вже до самого межі своєї максимально можливої ​​частоти. Навіть теоретично для 0,18-мікронного процесу це значення складає близько 1,2 GHz, а адже загальновідомо, що теоретична межа рідко досяжний на практиці: "ідеальних" кристалів, на жаль, не буває. Тому було прийнято кардинальне рішення: збільшити довжину конвеєра відразу до ... 20 ступенів! При цьому багато частин CPU, що раніше входили до конвеєр (наприклад, блок декодування команд), були взагалі винесені за його межі і працюють тепер як би "самі по собі". Дана архітектура отримала назву "гіперконвейерной" (hyperpipelined) - на честь конвеєра небувалою довжини. Природно, можлива частота роботи зросла, що з успіхом підтверджують нові Pentium 4, що вийшли відразу ж на частотах 1,4 і 1,5 GHz. І це при збереженні того ж 0,18-мікронного процесу! Однак далося таке збільшення частот роботи аж ніяк не "безкоштовно".
Довжина конвеєра Intel Pentium 4 збільшена до 20 етапів. Чи добре це? Для прикладу - сьогоднішній Pentium III має 12-етапний конвеєр, Athlon - 10-ти. Але при цьому не варто забувати один загальновідому істину - чим довше конвеєр, тим легше нарощувати тактову частоту, але, відповідно, тим менша продуктивність доводиться на кожен отриманий мегагерц :-(. Виходить палиця на два кінці.
 
Простий конвеєра: старі проблеми, помножені на нові частоти
Наведене раніше опис роботи механізму передбачення розгалужень залишилося все-таки трохи незавершеним: ми закінчили його на "переможному" варіанті: гілка передбачена правильно, процесор почав декодування команд "наперед", перехід здійснився до "вгадати" адресою, що знаходяться там команди готові до виконання (або навіть вже частково виконані). Але що відбувається, якщо "штатний провісник" все ж таки помилився? А відбувається "воістину страшне" - весь конвеєр доводиться очищати від непотрібних команд і в терміновому порядку починати готувати до виконання нові, що знаходяться ще в пам'яті і зовсім за іншою адресою. Природно, ядро ​​CPU під час всього цього "розбору польотів" просто виконує холостий цикл, тому що ні підготовлених даних, ні команд до нього не надходить. І напевно наш читач вже здогадався сам про основну проблему гіперконвейерной архітектури нового процесора: чим довше конвеєр, тим більше роботи йде нанівець і тим довше доведеться чекати, поки він буде "вичищений" від непонадобівшіхся команд і знову заповнений потрібними. До того ж висока частота роботи в даному випадку автоматично означає, що з моменту помилки в прогнозі переходу до моменту її виявлення "зайвої" роботи процесор встигне зробити більше. Так, така реальність: не завжди висока частота означає високу швидкодію. Однак не все так погано - природно, проблема ця була відома ще задовго до виходу процесора, і мінімізації втрат було приділено серйозну увагу.
Пророцтва повинні збуватися!
Модулі RIMM і "заглушки" CRIMM).

Підпис: Модулі RIMM і "заглушки" CRIMM). Стосовно до відповідного блоку процесора дана фраза виглядає як саме що ні на є благе побажання. І розробники Pentium 4 зробили все від них залежне, щоб так це й відбувалося. Блок передбачення розгалужень нового CPU піддався значним модифікаціям - розмір буфера, в якому зберігаються адреси можливих переходів (BTB - Branch Target Buffer), збільшився до 4 KB (512 байт у Pentium III), крім того, сам алгоритм був вдосконалений і тепер враховує більшу кількість можливих факторів. У підсумку, за заявами розробників, результативність пророкувань збільшилася на третину, і зараз їх точність досягає 94%.
Вдосконалене позачергове виконання
Для того щоб знайти команду, яка претендує на позачергове виконання, потрібно мати місце, де її шукати. Аналізувати "наперед" код, що міститься в пам'яті, - операція накладна, та й повільна. Тому у всіх сучасних процесорів є так звана "резервація" (Reservation Station), в якій зберігаються декодувати і готові до виконання команди. У Pentium 4 відповідний блок називається "вікном команд" (Instruction Window), але, по суті, ці два найменування позначають одне і те ж - буфер для інструкцій. Вікно команд Pentium 4 теж істотно зросла, тепер для позачергового виконання процесору пропонують "на вибір" більше 120 інструкцій (точні дані ще не опубліковані).


Подвоєна внутрішня частота ALU
Арифметико-логічні блоки (Arithmetical Logic Units) в Pentium 4 працюють на подвоєній частоті. Так, наприклад, ALU у Pentium 4 1,5 GHz функціонує на частоті 3 GHz! Це дозволяє виконувати багато операцій фактично навіть не за один, а за полтакта, або дві операції за такт. А оскільки таких блоків у Pentium 4 два - в ідеалі за один такт роботи процесора виходить 4 операції з цілими числами!
 
Співпроцесор
Що стосується блоку для операцій з числами з плаваючою комою в Pentium 4, то вийшла картина, схоже, не влаштовує навіть саму Intel. Два таких модуля в операціях з плаваючою комою будуть забезпечувати для 1.4 Ггц-процесора Pentium 4 пікову продуктивність всього лише 1.4 GFLOPS :-(. Реальну обчислювальну роботу виконує тільки один модуль - операції типу FADD (додавання) і FMUL (множення), другий же займається підсобної діяльністю - операції типу FSTORE (обмін між регістрами і пам'яттю). Не в приклад Pentium 4, FPU процесора Athlon містить три роздільних, повністю конвейерізірованних модуля, здатних приймати інструкції на кожному такті. При цьому один з них призначений тільки для інструкції FSTORE, інші два складаються з пристроїв FADD і FMUL. Завдяки цьому FPU може виконувати за кожен такт по дві інструкції - одну додавання і множення іншу, тобто 1 ГГц Athlon має пікову продуктивність 2 GFLOPS. Виходить, що в Athlon більш досконала архітектура співпроцесора, ніж у Pentium 4.
SSE-2
Оскільки продуктивність нового процесора дуже сильно залежить від швидкості надходження команд у виконавчі блоки конвеєра, "напрошується" ще один спосіб прискорення його роботи - скоротити кількість команд, необхідних для виконання ключових операцій. Проте в рамках існуючого x86-набору це зробити просто неможливо: якщо хоч щось у ньому змінити, CPU втратить сумісність зі старими програмами. Адже те, що навіть на найсучаснішому процесорі досі може виконуватися код, написаний для родоначальника всього сімейства - Intel 8086, є особливим предметом гордості Intel. Але якщо не можна змінити, ніхто не забороняє доповнити. Так і зробили - Pentium 4 підтримує розширений набір SIMD-команд під кодовою назвою SSE-2. По-перше, давайте розберемося з самим терміном. SIMD (Single Instruction - Multiple Data) - це спеціальний тип інструкцій, коли в якості аргументу однієї команди виступає досить великий масив даних. SSE-2 (Streaming SIMD Extensions 2, Потокові SIMD Розширення 2) - значно розширена версія набору SSE, знайомого нам по Pentium III Coppermine. Набір SSE-2 включає в себе 144 нові інструкції, спеціально орієнтовані на обробку великих вхідних потоків даних. Використання SSE-2, за заявами Intel, здатне підняти на небачені досі висоти продуктивність у мультимедіа-додатках і іграх - кодування / декодування аудіо-та відеоданих, розпізнавання мови, тривимірні комп'ютерні ігри - ось область застосування нових команд. Основний упор робиться на те, що тепер багато операцій, раніше вимагали написання цілого фрагменту програми, можуть бути здійснені за допомогою однієї-двох інструкцій SSE-2.
Платформа для Pentium 4
Природно, процесор з такою кількістю архітектурних нововведень вимагав та принципово нової платформи. Її роль на даний момент виконує новий чіпсет Intel i850. Основним моментом, який хотілося б відзначити, є організація роботи з пам'яттю в рамках всієї зв'язки Pentium 4 <-> i850. Високошвидкісна 400-мегагерцевим RDRAM пов'язана з чіпсетом через двоканальну шину, розрядність кожного каналу - 32 біта. Таким чином, в сумі маємо 64 біта і частоту 400 MHz, тобто пропускну здатність порядка 3,2 GBps. Далі - більше: смуга пропускання шини FSB, по якій процесор "спілкується" з чіпсетом, також еквівалентна 400 MHz! А враховуючи, що сам процесор - 64-бітовий, ми бачимо, що фактично шина, що з'єднує процесор і чіпсет, має таку ж пропускну здатність, як шина, що з'єднує чіпсет з пам'яттю! І знову-таки хочеться відмітити, що при всій революційності підходів виглядає нова архітектура Intel дуже струнко - в ній дійсно все строго орієнтоване на основні пріоритети Pentium 4: потокове відео й аудіо, Internet, мультимедіа, ігри.


Системна шина
При все зростаючою продуктивності процесорів і підсистеми пам'яті, збільшення швидкості вже досить літній системної шини GTL + за останній рік всього лише на 33 МГц виглядає не дуже вражаюче. Тому не дивно, що з виходом Willamette Intel вводить нову системну шину, яка має значно підвищити пропускну здатність. Ця системна шина має 128-бітові лінії з 64-бітним доступом, наприклад, у процесорів попередніх поколінь були 32-бітові лінії. А її тактова частота - всього 100 МГц, тобто навіть нижче, ніж у сьогоднішньої 133 МГц GTL +, але за рахунок передачі 4 пакетів за такт, ефективна частота зростає до 400 МГц.
Таким чином плюси нової шини очевидні: значно зросла пропускна здатність - 3.2 Гб / с (400 МГц, 64 біт) проти 1.064 Гб / с у сьогоднішньої GTL + (133 МГц, 32 біт) і проти 1.6 Гб / с у системної шини EV6 під Athlon (200 МГц, 64-біт).
А ось мінуси вийшли замаскованими. 4 пакети даних за один такт - це, звичайно, здорово, але тільки в тому випадку, коли вдасться їх надати до моменту виконання чергового такту. Інакше пропускна здатність шини буде використовуватися далеко не повністю. Загалом, 3.2 Гб / с - це максимум, на що ми можемо розраховувати. До того ж, використання нової шини вимагає застосування нового чіпсета, що також плюсом назвати досить важко.
Кеш першого і другого рівня
У кеш-пам'яті першого рівня зберігаються декодовані команди - ~ 12 Кб мікрокоманд, завдяки чому в циклі виконання усуваються затримки, пов'язані з розкодуванням. Така технологія має підвищити швидкодію кеш-пам'яті команд і збільшити ефективність використання кеша. Крім того, процесор Pentium 4 містить кеш-пам'ять другого рівня типу Advanced Transfer Cache об'ємом 256 Кб, що забезпечує передачу даних зі швидкістю 48 Гбіт / с, збільшується пропорційно тактовій частоті ядра. В цілому дуже непогано, але нічого революційного.
Щодо L2-кеша, мабуть, розробники вважали, що "краще - ворог хорошого", тому він залишився таким же, як у Pentium III Coppermine: "почетвереній" ширини 256-бітова шина і робота на частоті ядра. А от обсяг L1-кеша зменшився вдвічі і становить по 8 КВ на команди і дані. Досить дивне рішення, однак, можливо, справа просто в тому, що процесор "не гумовий", і з огляду на кількість всіх інших модулів, більший розмір L1 просто не вдалося інтегрувати в ядро. До того ж не варто забувати, що Pentium 4 має істотно збільшеними в об'ємі "прихованими кешами" - фактично і 4-кілобайтовий Branch Target Buffer, і Instruction Window за принципом своєї роботи цілком підходять під це визначення.
Кеш другого рівня - швидкодіюча пам'ять, яка використовується процесором для зберігання часто використовуваних даних. Завдяки високій швидкості роботи, дані з кеша другого рівня завантажуються набагато швидше, ніж з основної пам'яті. У процесорах Pentium III Coppermine, AMD Ahtlon, Thunderbird і Duron кеш другого рівня знаходиться безпосередньо на ядрі процесора і працює на його повній частоті.
 
Висновки
Intel Pentium 4 - процесор у всіх відносинах новаторський. Фактично вперше в x86-сімействі з'явився CPU, спочатку спроектований в розрахунку на швидкодію в певних класах завдань, але в той же самий час є універсальним по набору команд. До того ж, говорячи про сам процесор, не варто забувати і про архітектуру всієї решти системи. У нашому випадку вона дійсно майже ідеально збалансована, причому знову-таки - саме для строго визначених цілей. Природно (не будемо закривати очі на очевидні речі), дещо чим довелося пожертвувати, і цими жертвами виявилися "незручні" новому CPU програми і алгоритми роботи. Логіку Intel приблизно можна представити так: "нехай у деяких завданнях наш процесор виявиться на 10 - 15% повільніше, зате в інших він отримає можливість бути в 1,5 - 2 рази швидше!". Така ситуація і склалася, судячи за результатами наших тестів.
Отже, успіх нового CPU багато в чому залежить від підтримки з боку виробників ПЗ і поширеності програм саме того типу, на які він орієнтований. Ну, в останньому пункті можна не сумніватися - ігри та домашня мультимедіа навіть у нашій країні завойовують все більшу популярність, не кажучи вже про Захід. А ось щодо врахування особливостей Pentium 4 при розробці програм - тут, безсумнівно, повинні надати неабиякий вплив "гучне" ім'я Intel і її репутація, а також гарна розкрученість марки "Pentium" в усьому світі.
Відрадно й те, що перехід на програми і процесор "нового століття" Intel не має наміру здійснювати прямо завтра і на всі 100%. Як випливає з офіційних заяв самої компанії, виробництво Pentium 4 тільки в 2002 р. зрівняється з обсягами випуску Pentium III, так що і користувачі, і розробники програмного забезпечення будуть мати достатню кількість часу для того, щоб придивитися до нового процесора. Напевно не останню роль у прийнятті саме такої схеми зіграв і фактор вартості пам'ять для нових систем - все ж RDRAM зараз набагато дорожче звичної PC133 SDRAM. Однак Intel сподівається, що до того часу, коли Pentium 4 пошириться широко, ситуація встигне змінитися в кращий бік.
Intel вже демонструвала досвідчені зразки Pentium 4. А деяким незалежних джерел (зарубіжні комп'ютерні ЗМІ) навіть вдалося спробувати новинку в роботі. І якщо відкинути результати явно рекламних тестів, які активно використовують SSE2, то висновки вийдуть досить звичайними - революції не відбулося :-(. Незважаючи на впровадження всіх вищеперелічених інновацій, результати перших польових випробувань не виявили явного переваги Pentium 4 до Pentium III Coppermine або AMD Athlon - при рівних тактових частотах.
Але навряд чи варто засмучуватися з цього приводу. Тепер в арсеналі Intel є відмінно масштабована архітектура, що дозволяє швидко і легко нарощувати тактову частоту процесора, зберігаючи при цьому гарний приріст продуктивності системи в цілому. Тепер головному конкурентові в особі AMD Athlon буде дуже важко змагатися з Pentium 4 по рівню досягаються тактових частот. У шаленій гонці напівпровідникових гігантів за звання виробника найшвидшого процесора компанія Intel зробила величезний ривок вперед, залишивши позаду суперників - AMD і VIA. Ось тільки чи надовго?
Pentium 4 представляє собою повністю нову архітектуру, кодова назва якої NetBurst. Він створений для вирішення таких завдань, як шифрування даних, стиснення відео-інформації або Napster-мереж, тобто для технологій, популярність яких зростає одночасно з Інтернет, - сказав Альберт Ю (Albert Yu), головний віце-президент Intel Architecture Group. - Це буде високопродуктивний процесор для платформи PC. Ми також працюємо над новими можливостями в області потокового відео.Новие підсистеми архітектури NetBurst дозволять процесору обробляти дані набагато швидше. Мікро-движок швидкого виконання, названий Rapid Execution Engine, наприклад, буде працювати з подвоєною швидкістю процесора і буде відповідати за часто повторювані завдання, такі як додавання або віднімання.

Список літератури


1. InfoCity - віртуальний місто комп'ютерної документації (Стаття Pentium 4: революція не буває половинчастою!) www.InfoCity.kiev.ua / mhard.
Додати в блог або на сайт

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

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

Схожі роботи:
MB Pentium 2
Intel Pentium 4
Intel Pentium III
PENTIUM Processor Технічний огляд
Архітектура системи на базі процесора Pentium Socket 7
Розробка навчального посібника Сімейство комп`ютерів Pentium
Intel Pentium 4 306 ГГц з підтримкою технології Hyper-Threading
Засоби апаратної підтримки управління пам`яттю в мікропроцесорах Intel 80386 80486 і Pentium
© Усі права захищені
написати до нас
Рейтинг@Mail.ru