x86

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
80486 DX2

x86 (англ. Intel 80x86) — архітектура процесора c одноіменною системою команд, вперше реалізована у процесорах компанії Intel. x86 або 80x86 є загальною назвою мікропроцесорної архітектури, яка була вперше реалізована в процесорах компанії Intel . Архітектура x86 нині домінує на ринку настільних і мобільних комп'ютерів та малих серверів.

Назва x86 походить від останніх цифр у назвах перших моделей (Intel 8086, Intel 80186, Intel 80286, Intel 80386, Intel 80486 тощо) цієї родини процесорів.

Крім Intel, ця архітектура також була реалізована в процесорах інших виробників: AMD, VIA, Transmeta, IDT та інші. На даний момент для цієї архітектури існує ще одна назва — IA-32 (Intel Architecture — 32).

Історія[ред.ред. код]

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

Покоління Вперше представлений Відомі бренди процесорів Лінійна/фізична адреси простору
1 1978 Intel 8086, Intel 8088 та клони Перші x86 мікропроцесори
1982 Intel 80186, Intel 80188 та клони, NEC V20/V30
2 Intel 80286 та клони 16-bit (30-bit віртуальні) / 24-bit (сегментовані)
3 (IA-32) 1985 Intel 80386 та клони, AMD Am386 32-bit (46-bit віртуальні) / 32-bit
4 (FPU) 1989 Intel486 та клони, AMD Am486/Am5x86
4/5 1997 IDT/Centaur-C6, Cyrix III-Samuel, VIA C3-Samuel2 / VIA C3-Ezra (2001), VIA C7 (2005)
5 1993 Pentium, Pentium MMX, Cyrix 5x86, Rise mP6
5/6 1996 AMD K5, Nx586 (1994)
6 1995 Pentium Pro, Cyrix 6x86, Cyrix MII, Cyrix III-Joshua (2000) 36-bit фізична (PAE)
1997 AMD K6/-2/3, Pentium II/III
2003 Pentium M, Intel Core (2006)
7 1999 Athlon, Athlon XP
2000 Pentium 4
7/8 2000 Transmeta Crusoe, Efficeon
2004 Pentium 4 Prescott
2006 Intel Core 2
2008 VIA Nano
8 (x86-64) 2003 Athlon 64, Opteron
8/9 2007 AMD Phenom 48-bit фізична для AMD Phenom
2008 Intel Core i3/i5/i7, AMD Phenom II
Intel Atom
2011 AMD Bobcat, Llano
9 (GPU) 2011 Intel Sandy Bridge/Ivy Bridge, AMD Bulldozer and Trinity
2013 Intel Larrabee
2014 Intel Haswell

Особливості архітектури[ред.ред. код]

x86 є CISC архітектурою із змінною довжиною команд. Сумісність нових моделей процесорів із попередніми була ключовою у розвитку архітектури x86. Архітектура двічі розширювалась до більшого розміру машинного слова. Перші x86 процесори були 16-бітними. У 1985 Intel випустила 32-бітний процесор 80386, його архітектуру назвали x86-32 або IA-32 (Intel Architecture, 32 bits). У 2003, AMD випустила Athlon 64, в якому реалізовано розширення архітектури до 64 біт, яке називають AMD64 (AMD), EM64T (Intel), чи x64 (Microsoft). Нова архітектура x64 замінила x86 і починаючи з 2003 року стала новим індустріальним стандартом при виробництві усіх нових процесорів (за винятком процесорів типу ARM, що зараз широко використовуються в мобільних телефонах, смартфонах та нетбуках).

Дозволено невирівняний по машинному слову доступ до пам'яті. Порядок байтів у слові — little-endian (найменш значущий байт має меншу адресу). Сучасні x86 процесори перекладають набір команд x86 на RISC-подібні мікрокоманди для ефективнішого їх виконання.

Реальний режим (real mode)[ред.ред. код]

Класичний режим адресації, який використовувався в перших моделях. Використовує сегментну модель пам'яті, яка організована наступним чином: адресний простір в 1 МіВ розбивається на 16-байтові блоки, які називаються параграфи. Всього параграфів в 1 МіВ — 65536, що дозволяє пронумерувати їх 16-розрядними числами. Сегменти пам'яті мають розмір 65536 байт, і завжди починаються на межі параграфу. Адреса комірки пам'яті складається з двох частин: номер параграфу, з якого починається сегмент та зміщення всередині сегменту і зазвичай записується як SSSS:OOOO, де S та O — шістнадцяткові цифри. SSSS називається сегментною компонентою адреси, а OOOO — зміщення. Адреса комірки, яка видається на шину, являє собою сегментну компоненту помножену на 16 плюс зміщення. Сегментна компонента вміщується в спеціальний регістр, який називається сегментний, а зміщення в регістр ІР(регістр інструкцій). Мікропроцесори 8086/8088, 80186/80188 та 80286 мали чотири сегментні регістри, тобто могли працювати одночасно з чотирма сегментами пам'яті.

  • Сегментні регістри та їх призначення:
    • CS — Сегмент коду. Використовується для вибірки команд програми;
    • DS — Сегмент даних. Використовується за замовчуванням для доступу до даних;
    • ES — Додатковий сегмент. Є отримувачем даних в командах обробки рядків;
    • SS — Сегмент стеку. Використовується для розміщення програмного стеку;
    • FS — Додатковий сегментний регістр. Спеціального призначення не має. З'явився в процесорі 80386;
    • GS — Аналогічно попередньому, але в нових процесорах с 64-бітною архітектурою має особливий статус: може використовуватись для швидкого переключення контекстів.

Незважаючи на те, що сегментні регістри мають спеціальні призначення, архітектура припускає при звернені до даних змінити один сегмент на інший. Сегменти коду, стеку та отримувача рядків завжди використовують регістри CS, SS та ES та не можуть бути змінені. Загальний об'єм пам'яті, яка адресується в реальному режимі становить 1048576 байт(ОООО:ОООО-FOOO:FFFF(OOOOO-FFFFF)-логічна(фізична) адреса в шістнадцятковій системі числення). Сегментний підхід дозволяє розділити всю пам'ять на 16 сегментів, які починаються з адрес, кратних 64 Кбайт. Ці 16 сегментів називають сторінками пам'яті. Зазвичай ділення на сторінки використовується для спільного функціонування пристроїв, інтерфейси яких відображені на адресний простір пам'яті; тоді кожний такий пристрій використовує одну сторінку пам'яті, та адреса комірки в адресному просторі пристрою буде збігатися зі зміщенням у сегменті пам'яті комп'ютера. Також в реальному режимі відсутній захист пам'яті та розмежування прав доступу, тому він вже практично вийшов з використання. Являється режимом за замовчуванням для всіх моделей процесорів x86.

Захищений режим (protected mode)[ред.ред. код]

Більш бездоганний режим, який вперше з'явився в процесорі 80286 і надалі багаторазово покращувався. Має більшу кількість підрежимів, за якими можна прослідкувати еволюцію сімейства ЦП. В цьому режимі підтримується захист пам'яті. Аналогічному реальному режиму, тут також використовується сегментована модель пам'яті, але вже організована за іншим принципом: ділення на параграфи відсутнє, а розташування сегментів описується спеціальними структурами, які розташовані в оперативній пам'яті. Існує два типи дескрипторних таблиць: глобальна та локальна. Глобальна таблиця описує сегменти операційної системи і розділяє структури даних. Локальна таблиця може бути визначена для кожного процесу. Дескриптор завантажується з пам'яті в кеш, який є прив'язаним до кожногосегментного регістра та автоматично завантажується в момент його модифікації. Кожний програмний модуль, який виконується в захищеному режимі визначається його сегментом коду, описаним регістром CS, який і визначає його привілеї за доступом до даних та іншим модулям. Процесор 80386, який з'явився в 1985 році, на відмінну від своїх попередників став 32-бітним. В ньому з'явилась можливість адресуватись до 4 ГіБ пам'яті, що дозволило створювати сегменти пам'яті розміром з весь адресний простір. Тому нові операційні системи використовували вироджену модель організації пам'яті, коли всі сегменти починаються з нуля. Така модель отримала назву плоскої, і адреса задається одним цілим 32- розрядним числом.

Змішані режими[ред.ред. код]

Сегментний блок управління пам'яттю сучасних процесорів, незважаючи на кардинальну різницю двох його основних режимів, в обох працює схожим способом. Це дозволяє організувати нестандартні режими не описані в офіційній документації, але іноді корисні при написанні програм. Оскільки відомо, що внутрішні кеші дескрипторів використовуються у всіх режимах, і саме вони використовуються для адресації пам'яті, при розумінні логіки їх роботи можливе завантаження в них нестандартних значень для даного режиму. Схожі нестандартні режими отримали назву Unreal mode та активно використовуються BIOS'ами персональних комп'ютерів. Важливо помітити, що в процесорі 80286 також була можливість завантаження нестандартних значень дескриптивного кешу за допомогою недокументованою команди LOADALL, що було особливо актуально, оскільки процесор 80286 не дозволяв скидати прапорець РЕ(із захищеного режиму виходили за допомогою скидання процесора, що позначалось на продуктивності).

Сторінкова організація пам'яті[ред.ред. код]

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

Посилання[ред.ред. код]

  1. AMD64 Technology: AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions
  2. Інші документи на сайті AMD щодо AMD64-архітектури
  3. Instruction tables. Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel and AMD CPU's. Agner Fog, Copenhagen University College of Engineering

Див. також[ред.ред. код]