Intel 80386

Материал из свободной русской энциклопедии «Традиция»
Перейти к навигации Перейти к поиску
Микропроцессор Intel 80386 (вид сверху)
Клон микропроцессора Intel 80386, изготовленный фирмой AMD

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

Описание[править | править код]

Архитектура микропроцессора Intel 80386DX

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

  • затрачивает на выполнение меньшее число тактов синхронизации
  • имеет более высокие тактовые частоты, за счет использования новых технологий
  • имеет увеличенный, по сравнению с предыдущими процессорами буфер предвыборки команд — 16 байт (которых хватает примерно на пять команд); буфер предвыборки обеспечивает меньшее количество обращений за командами и исключает лишние обращения в память в коротких циклах и выполнении строковых команд
  • первым из процессоров x86 имеет встроенную кэш-память, обеспечивающую меньшее количество обращений в память при последовательном чтении и данных, а также обращении к одним и тем же данным

Вместе с тем i386 является серьезной переработкой процессора 80286. По некоторым оценкам, ни до, ни после i386, архитектура процессоров x86 ни разу не переделывались столь кардинально. Современные операционные системы называют аппаратную платформу PC-совместимых компьютеров никак не иначе как «i386», потому что не способны работать на процессорах ниже этого.

Основные изменения:

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 могло выполняться только на уровне сегментации. Только появление новой модели управления памятью — страничного преобразования, обеспечило плоской модели ее сегодняшнюю популярность.

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

Страничное преобразование[править | править код]

Защищённый режим адресации процессора Intel 80386

В 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.

Аппаратная отладка[править | править код]

Как и в предыдущих процессорах (начиная с 8086), отладка в i386 осуществляется вызовом отладочного прерывания, обработчик которого передает управление программе-отладчику. В предыдущих процессорах отладка могла быть вызвана двумя событиями:

  • пошаговое выполнение
  • программные точки останова

в i386 отладку также могут начать:

  • аппаратные точки останова
  • ловушка переключения задачи

Пошаговое выполнение[править | править код]

Пошаговое выполнение или трассивка (вызов отладочного прерывания после выполнения каждой команды при установленном флаге TF) в i386 осталось таким же как и в предыдущих процессорах, работая во всех новых режимах (32-битной адресации и режиме виртуальной задачи).

Точки останова[править | править код]

Точка останова (англ. breakpoint) — прерывание выполнения программы по достижении определенной команды.

В ранних процессорах x86 для организации точки останова, было необходимо заменить первый байт команды на команду вызова отладочного прерывания (int 3), вызов прерывания возвращал управление отладчику, который возвращал исходное значение первого байта команды. Кроме всего, точки останова такого рода было невозможно устанавливать в ПЗУ. i386 поддерживает такие точки останова для совместимости.

Точки останова i386 определяются адресом в регистрах отладки. Обработчик отладки вызывается, если адрес следующей команды совпадает с адресом в регистре. Всвязи с тем, что такие точки останова не требуют записи в память, они могут использоваться для отладки программ в ПЗУ. i386 позволяет одновременно устанавливать до четырех точек остановки.

Точки останова i386, также могут быть установлены на обращение (чтение или запись) к переменной по заданному адресу в памяти. Процессор вызывает обработчик отладки при обращении команды к памяти по заданному адресу.

Ловушка переключения задачи[править | править код]

Отладочное прерывание может быть вызвано при переключении на задачу (для этого в сегменте состояния задачи предусмотрен специальный бит).

Другие изменения[править | править код]

Линии данных и адресов в процессоре 80386, как и в процессоре 80286, не мультиплексируются: имеется 32 линий данных и 32 независимых от них линии адреса.

Регистры[править | править код]

В составе микропроцессора имеются 8 32-битных регистров общего назначения (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP). Младшая, 16-битная, половина каждого из этих регистров соответствует регистрам AX, BX, CX, DX, SI, DI, BP, SP в предыдущих процессорах семейства x86. Как и раньше возможна адресация младших и старших 8-битных половин, младшей 16-битной половины 32-разрядных регистров данных (AL и AH, BL и BH, CL и CH, DL и DH). Регистр указатель команды и регистр флагов также стали 32-битными (EIP и EFLAGS соответственно), причем в регистре флагов добавлены новая группа флажков. К 4-м 16-битным сегментным регистрам (ES, CS, SS, DS) прибавились ещё 2 16-битных регистра (FS и GS). Добавлены несколько новых групп регистров (каждый регистр размером 32 бит): 3 регистра управления (CR0 (MSW), CR2, CR3), 8 регистров отладки (DR0, DR1, DR2, DR3, DR6, DR7), 2 тестовых регистра (TR6, TR7).

Набор инструкции[править | править код]

Набор инструкций i386 был расширен, в основном, за счет добавления 32-битных вариантов существующих инструкций (образованных 32-битными префиксами), включая те у которых 32-битные варианты имеют другие мнемоники (pushad/popad, pushfd/popfd, cwd*/cdq, movsd/cmpsd/scasd/lodsd/insd/outsd, iretd), а также команды mov для новых регистров. Другие новые инструкции:

  • установка байта по условию (set*)
  • команды переходов (jmp, j*) с относительным 16-битным смещением
  • команды загрузки полного адреса для новых сегментных регистров (lfs, lgs)

Средняя длина инструкций составляет 3,2 байта.

Сопроцессор[править | править код]

Специально для микропроцессоров Intel 80386 были разработаны математические сопроцессоры 387SX и 387DX, объединяемые единым наименованием 80387. Эти сопроцессоры совместимы с процессорами 386SX и 386DX соответственно; так, сопроцессор 387DX возможно подключить к 32-разрядной шине процессора. В остальном, обе модели аналогичны математическому сопроцессору 80287, который также можно использовать вместе с процессором 80386.

Модели[править | править код]

С 1985 года было выпущено множество модификаций процессора i386, отличающихся между собой производительностью, потребляемой мощностью, разъёмами и корпусами и прочими характеристиками.

386DX[править | править код]

Первый процессор семейства 386 выпущен 17 октября 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».

386SX[править | править код]

Первая модель этого семейства была представлена 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), а так же использовались в других целях.

386SL[править | править код]

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

386EX[править | править код]

Представляет собой модификацию процессора 386SX. Процессор предназначался для встраиваемых приложений с высокой интеграцией и малой потребляемой мощностью. Ключевые особенности этого процессора — низкое энергопотребление, пониженное напряжение питания, расположенные на кристалле контроллер прерываний, микросхема выбора чипа, счётчики и таймеры, логика тестирования JTAG. Эта серия процессоров имела несколько модификаций: EXSA, EXTA, EXTB, EXTC. Максимальный ток потребляемый процессорами составляет 320мА для процессоров серии EXTC и 140мА для процессоров серии EXTB.

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

Компьютеры на базе процессора Intel 80386[править | править код]

На основе микропроцессоров 80386 фирмой IBM были созданы персональные компьютеры IBM AT 386 (семейство PC) и IBM PS/2-80 (семейство PS/2). В первом применялась ОС PC-DOS, а во втором — OS/2.

Команда разработчиков[править | править код]

  • John Crawford, главный архитектор
  • Jim Slager, главный инженер
  • Patrick Gelsinger
  • Khaled El-Ayat
  • Riaz Haq
  • Gene Hill
  • Jan Wiliam L. Prak
  • David Vannier
  • Joseph "Chip" Krauskopf
  • Ken Shoemaker
  • Paul Ries
  • Saurabha Radhika

Технические характеристики различных моделей[править | править код]

Данные относящиеся ко всем моделям[править | править код]

386DX[править | править код]

  • Дата анонса первой модели: 17 октября 1985 года
  • Тактовые частоты (МГц): 16, 20, 25, 33
  • Объём физической адресуемой памяти: 4 Гбайт
  • Разрядность внешних шин данных и адреса: 32 бит
  • Напряжение питания: 5 В
  • Количество транзисторов: 275 000
  • Техпроцесс (нм): 1500 и 1000(модель 33МГц)
  • Макисмально потребляемый ток: 0,39 А (модель 33МГц)
  • Макисмально потребляемая мощность: 1,95 Вт (модель 33МГц)
  • Разъём: гнездо типа Socket или припаивался к плате
  • Корпус: 132-контактный керамический PGA, или 132-контактный PQFP
  • Инструкции: x86(150 инструкций, не считая модификаций)

386SX[править | править код]

  • Дата анонса первой модели: 16 июня 1988 года
  • Тактовые частоты (МГц): 12(серия SXSA), 16, 20, 25, 33, 40(серии SXSA и SXTA)
  • Объём физической адресуемой памяти: 16 Мбайт
  • Разрядность шины данных: 16 бит
  • Разрядность шины адреса: 24 бит
  • Напряжение питания: 5 В
  • Количество транзисторов: 275 000
  • Техпроцесс (нм): 1500 и 1000
  • Максимально потребляемый ток: 0,38 А (модель 33МГц)
  • Максимально потребляемая мощность: 1,9 Вт (модель 33МГц)
  • Разъём: процессор припаивался к плате
  • Корпус: 100-контактный PQFP
  • Инструкции: x86(150 инструкций, не считая модификаций)

386SL[править | править код]

  • Дата анонса первой модели: 15 октября 1990 года
  • Тактовые частоты (МГц): 20, 25
  • Объём физической адресуемой памяти: 4 Гбайт
  • Разрядность внешних шин данных и адреса: 32 бит
  • Напряжение питания: 5 В
  • Количество транзисторов: 855 000
  • Техпроцесс (нм): 1000
  • Разъём: процессор припаивался к плате
  • Корпус: 132-контактный PQFP
  • Инструкции: x86

386EX[править | править код]

  • Дата анонса первой модели: август 1994
  • Тактовые частоты (МГц): 16, 20, 25, 33 (возможно существовали и другие модели)
  • Объём физической адресуемой памяти: 64 Мбайт (для серий EXTB, EXTC)
  • Разрядность шины данных: 16 бит
  • Разрядность шины адреса: 26 бит
  • Напряжение питания: 2,7~3,6 В (серия EXTB), 4,5~5,5В (серия EXTC)
  • Количество транзисторов: 275 000
  • Техпроцесс (нм): 800
  • Разъём: процессор припаивался к плате
  • Корпус: 132-контактный PQFP, 144-контактный TQFP
  • Инструкции: x86

Ссылки[править | править код]


hu:Intel 80386 lt:I386