Intel 80386

Intel 80386
Розробник:Intel
Виробник(и):Intel, Advanced Micro Devices і IBM
Набір команд:x86 і IA-32

Intel 80386 (також відомий як i386 або просто 386) — 32-бітний x86-сумісний процесор третього покоління фірми Intel, випущений 17 жовтня 1985. Перший 32-розрядний процесор для IBM PC.

Intel i386CXSA, 25 MHz.
Архітектура мікропроцесора Intel 80386DX

Процесор i386 повністю сумісний зі своїми попередниками — процесорами 8086-80286. Він виконує програми, призначені для них, без необхідності модифікації коду і перекомпіляції (або з мінімальними модифікаціями) і робить це більш ефективно:

  • затрачає на виконання менше число тактів синхронізації;
  • має вищі тактові частоти, за рахунок використання нових технологій;
  • має збільшений, у порівнянні з попередніми процесорами, буфер передвибірки команд - 16 байт (яких вистачає приблизно на п'ять команд); буфер передвибірки забезпечує меншу кількість звернень за командами і виключає зайві звернення в пам'ять в коротких циклах і виконанні рядкових команд.

Разом з тим i386 є серйозною переробкою процесора 80286. За деякими оцінками, ні до, ні після i386 архітектура процесорів x86 жодного разу не перероблялася настільки кардинально. У процесорах цієї архітектури вперше були введені основні механізми підтримки сучасних 32-розрядних операційних систем для PC-сумісних платформ.

32 біти

[ред. | ред. код]

Вся архітектура x86 була розширена до 32 біт — всі регістри (за винятком сегментних) стали 32-бітними, отримавши у назві префікс «E» (EAX, EBX, EIP, EFLAGS тощо), із збереженням повного набору команд для роботи з ними. У тому числі:

  • регістр прапорів, який отримав безліч нових прапорів для управління багатозадачністю
  • регістр управління процесором MSW процесора 80286, названий на i386 «CR0»

32-бітною стала і адресація в захищеному режимі (з можливістю створення 16-бітних сегментів, для сумісності з 80286). Вона дозволила вперше з часу появи 8086 забути про сегментацію, а точніше, обмеження розміру сегмента 64 кілобайтами (обмеження 16-бітної адреси), яке давно перестало влаштовувати програмістів.

До появи i386 програми та операційні системи використовували кілька головоломних моделей організації пам'яті (крихітна - tiny, мала - small, велика - large, величезна - huge), що розрізняються по організації в пам'яті сегментів коду, стека і даних. 32-бітні адреси дозволили використовувати замість них одну просту плоску модель (англ. flat) - 32-бітний варіант крихітної моделі, в якій всі сегменти завдання знаходяться в одному адресному просторі. Плоска модель забезпечує розмір такого «загального» сегмента до майже 4 гігабайт, яких на ті часи вистачало для будь-якого мислимого завдання.

Плоска модель має й недоліки:

  • в ній з'являються проблеми переміщуваності машинного коду, які раніше легко обходилися сегментацією, забезпечення переміщуваності лягло на плечі операційних систем, з новими форматами дискового образу програми.
  • плоска модель практично зводить нанівець управління пам'яттю в захищеному режимі (обмеження доступу та підтримка віртуальної пам'яті), яке до i386 могло виконуватися тільки на рівні сегментації. Тільки поява нової моделі управління пам'яттю — сторінкового перетворення — забезпечила плоскій моделі її сьогоднішню популярність.

Плоска модель увійшла в побут[джерело?] настільки широко, що сучасні програмісти часто і не підозрюють, що програми звертаються в пам'ять через сегменти.

У i386 був введений новий механізм управління пам'яттю - адресний простір, до якого звертається процесор за даними та кодом, в якому розташовуються сегменти (назване лінійним адресним простором) може не відповідати реальній фізичній пам'яті. Фізична пам'ять (включаючи буфери зовнішніх пристроїв, наприклад відеобуфер) може бути відображена в лінійний адресний простір довільним чином - кожна сторінка (розміром 4 кілобайти) лінійного простору може бути переадресовано на будь-яку сторінку фізичної пам'яті через каталог сторінок, що розташовується в оперативній пам'яті (адреса каталогу сторінок визначається значенням нового регістра управління «CR3»).

Як і сегменти, сторінки лінійного адресного простору можуть бути оголошені неприсутніми (звернення до таких сторінок викликає обробник сторінкового порушення операційної системи). Неприсутні сторінки, в першу чергу, використовуються, для організації віртуальної пам'яті - обробник сторінкового порушення здійснює свопінг сторінок пам'яті з зовнішніми пристроями, що запам'ятовують. Також, неприсутні сторінки використовуються в плоскій моделі пам'яті (де розмір сегмента зазвичай має розмір від 2 до 4 гігабайт, навіть якщо у комп'ютера немає стільки фізичної пам'яті) для маркування сторінок сегмента, в які операційна система не виділила пам'яті. У цьому випадку, сторінкове порушення, як правило, завершує задачу або починає її налагодження.

Через сторінкове перетворення i386 може адресувати до 4 Гбайт фізичної пам'яті і до 64 Тбайт віртуальної пам'яті.

Покращена підтримка багатозадачності і захисту

[ред. | ред. код]

Підтримка багатозадачності в процесорах x86 позначає апаратну підтримку «прозорого» перемикання з однієї звичайної програми (завдання) на іншу. При перемиканні процесор зберігає свій стан (включаючи адресу наступної команди, селектори сегментів) в сегменті стану (TSS; сегмент пам'яті, з селектором з регістра TR) одного завдання, після чого відновлює стан іншої задачі з її сегмента стану (селектор сегмента стану нового завдання завантажується з дескриптора її сегмента коду).

Перемикання між завданнями зазвичай здійснюється:

  • перериванням таймера; час, на який налаштований таймер, називається квантом часу для задачі
  • системним викликом (викликом функції операційної системи)
  • винятком - наприклад, при спробі виконати неприпустиму команду або зверненні до неприсутної пам'яті
  • налагодженням

У i386 механізми захисту і багатозадачності були значно розширені і поліпшені. Залежно від характеру порушень, вони можуть тихо ігноруватися (наприклад, деякі біти регістра EFLAGS не можна змінити завантаженням прапорів із стека), викликати обробник виключення (операційної системи). Серйозні помилки на рівні операційної системи (або в реальному режимі) можуть призвести процесор в режим аварійного зупину (наприклад, при порушенні в обробнику подвійного порушення), з якого можна вийти тільки апаратним скиданням (англ. reset) процесора.

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

  • призначення необхідного рівня привілеїв для виконання таких команд (двухбітним полем IOPL регістра прапорів)
  • дозволом завданню вибіркового доступу до портів введення-виведення через бітову карту в сегменті стану завдання

Спроба виконання невирішеною команди введення-виведення, призводить до виключення, обробник якого (що належить операційній системі) може завершити завдання помилково, ігнорувати (відновити виконання з наступної команди) або емулювати введення-виведення.

Крім усього багатозадачність i386 повністю підтримує всі нові можливості - для 32-бітних завдань сегмент стану містить всі 32-бітові та необхідні нові регістри (наприклад, регістр CR3 з адресою каталогу сторінок для цього завдання).

Віртуальний режим

[ред. | ред. код]

У процесорі i386 компанія Intel врахувала необхідність кращої підтримки реального режиму, тому що програмне забезпечення часу його появи не було готове повністю працювати в захищеному режимі. Тому, наприклад, в i386 можливо переключення із захищеного режиму назад у реальний (при розробці 80286 вважалось, що це не буде потрібно, тому на комп'ютерах з процесором 80286 повернення в реальний режим здійснюється схемно - через скидання процесора).

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

Важливо розуміти що «віртуальний режим», незважаючи на схожість назви є не «третім режимом роботи процесора» (тобто реальний, захищений і віртуальний), а лише режимом роботи завдання в багатозадачному оточенні захищеного режиму.

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

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

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

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

  • сторінкове перетворення, наприклад, для:
    • розширення пам'яті, шляхом включення сторінок в невикористовуване адресний простір
    • емуляції розширень з перемиканням банків (наприклад, EMS-пам'яті)
    • віртуальної розгортки або згортки буферів зовнішніх пристроїв (відеопам'ять, апаратна EMS-пам'ять)
  • емуляцію зовнішніх пристроїв через емуляцію портів введення-виведення
  • налагодження
  • при виконанні декількох завдань віртуального режиму, кожна з них може виконуватися абсолютно окремо один від одного, чого не можна досягти в реальному режимі

Наприклад, починаючи з версій 4.01 - 5.0, при використанні менеджера пам'яті EMM386 (і його аналогів інших розробників) операційна система MS-DOS працює як завдання у віртуальному режимі. EMM386, в цьому випадку є подобою операційної системи захищеного режиму (передаючи більшість системних переривань ядру MS-DOS у віртуальній завданню).

Режим віртуального 8086 підтримується і в наступних 32-бітових процесорах x86, аж до режиму сумісності в x86-64.

Перший процесор сімейства 386 випущений 13 жовтня 1985 і мав тактову частоту 16 МГц. Після випуску процесорів 386SX процесори цієї серії отримали індекс DX - D ouble-word e X ternal, що вказувало на його 32-розрядну зовнішню шину. Процесор позиціонувався як продуктивне рішення для настільних систем. Проводився процесор по CHMOS IV технології і споживав 400 мА, що значно менше, ніж Intel 8086. 16 лютого 1987 анонсована модель з частотою 20 МГц; 4 квітня 1988 з частотою 25 МГц і 10 квітня 1989 з частотою 33 МГц. Процесор випускався в корпусах PQFP-132 (такі процесори мали літеру «NG» на початку назви, наприклад, NG80386DX25) або в керамічному PGA-132 (такі процесори мали літеру «A» на початку назви, наприклад, A80386DX25)

Перші процесори 386DX мали помилку, яка іноді приводила до невірних результатів при роботі з 32-розрядними числами в таких програмах, як OS / 2 2.x, UNIX/386, або Windows у розширеному режимі. Помилка призводила до того, що система зависала. Внаслідок деяких проблем, в тому числі через відсутність 32-бітових операційних систем усунути помилку вдалося лише у квітні 1987 року. Вже вийшли процесори пройшли перевірку, в результаті якої процесори, що не мають помилку, були промарковані подвійним символом «сигма» і / або одним символом «IV».

Перша модель цього сімейства була представлена 16 червня 1988 і мала частоту 16 МГц, пізніше були представлені і більш швидкі моделі: 20 МГц (25 січня 1989), 25 МГц і 33 МГц (обидва процесора представлені 26 жовтня 1992). Процесори позиціонувалися як рішення для настільних ПК початкового рівня і портативних ПК. Сімейство SX відрізнялося від сімейства DX тим, що у нього розрядність зовнішньої шини даних становила 16 біт, а розрядність зовнішньої шини адреси 24 біт. В результаті чого процесор міг адресувати тільки 16 Мбайт фізичної пам'яті, що робило обчислювальні системи побудовані на його основі апаратно сумісним зі попередніми процесорами Intel 80286. У той же час, процесор 386SX міг виконувати всі програми, написані для 386DX і це зробило його популярним для виготовлення «Турбо-плат», наприклад, Cumulus 386SX, Intel InBoard або Orchid Tiny Turbo.

У рамках серії SX були випущені процесори з маркуванням 80386SXTA, 80386SXSA, 80386SXLP, які представляли собою вбудовуються (embedded) процесори (серія SXSA), процесори низького споживання (Low Power), а також використовувалися в інших цілях.

Перша модель цього сімейства була представлена 15 жовтня 1990 і мала частоту 20 МГц, пізніше була представлена модель 25 МГц (30 вересня 1991 року). Процесори позиціонувалися як перші енергоефективні мікропроцесори, спеціально призначені для портативних ПК. Сімейство SL відрізнялося від сімейства SX тим, що мало на кристалі також контролер оперативної пам'яті, контролер зовнішньої кеш-пам'яті об'ємом від 16 до 64Кбайт і контролер шини.

Являє собою модифікацію процесора 386SX. Процесор призначався для вбудованих додатків з високою інтеграцією і малою споживаною потужністю. Ключові особливості цього процесора - низьке енергоспоживання, знижена напруга живлення, розташовані на кристалі контролер переривань, мікросхема вибору чипа, лічильники та таймери, логіка тестування JTAG. Ця серія процесорів мала кілька модифікацій: EXSA, EXTA, EXTB, EXTC. Максимальний струм споживаний процесорами становить 320 мА для процесорів серії EXTC і 140 мА для процесорів серії EXTB.

Використовувався на борту різних орбітальних супутників і мікросупутників і в NASA-вському проекті FlightLinux.

Див. також

[ред. | ред. код]