Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Улучшенная поддержка многозадачности и защиты



Регистры общего назначения

Сначала рассмотрим регистры общего назначения. Они называются ЕАХ, ЕВХ, ЕСХ и EDX (Аккумулятор, База, Счетчик и Данные). Кроме названий, они больше ничем другим не отличаются друг от друга, поэтому рассмотрим только первый регистр — ЕАХ (рис. 2.4).

Процессор 80386 обратно совместим с процессором 80286, регистры которого 16-разрядные. Как же 80386 может выполнять команды, предназначенные для регистров меньшего размера? Регистр ЕАХ может быть разделен на две части — 16-разрядный регистр АХ (который также присутствует в 80286) и верхние 16 битов, которые никак не называются. В свою очередь, регистр АХ может быть разделен (не только в 80386, но и в 80286) на два 8-битных регистра — АН и AL.

Если мы заносим в регистр ЕАХ значение 0x12345678, то регистр АХ будет содержать значение 0x5678 (0x56 в АН и 0x78 в AL), а значение 0x1234 будет помещено в верхнюю часть регистра ЕАХ.

«Младшие» регистры других регистров общего назначения называются по такому же принципу: ЕВХ содержит ВХ, который, в свою очередь, содержит ВН и BL и т.д.

К регистрам общего назначения иногда относят и индексные регистры процессора 80386 — ESI, EDI и ЕВР (или SI, DI и ВР для 16-разрядных действий). Обычно эти регистры используются для адресации памяти: обращения к массивам, индексирования и т.д. Отсюда их имена: индекс источника (Source Index), индекс приемника (Destination Index), указатель базы (Base Pointer).

Но хранить в них только адреса совсем необязательно: регистры ESI, EDI и ЕВР могут содержать произвольные данные. Эти регистры программно доступны, то есть их содержание может быть изменено программистом. Другие регистры лучше «руками не трогать».

У регистров ESI, EDI и ЕВР существуют только в 16-разрядная и 32-разрядная версии.

Сегментные регистры

Эту группу регистров можно отнести к регистрам состояния. Регистры из этой группы используются при вычислении реального адреса. Сегментные регистры только 16-разрядные, такие же, как в 80286.

Названия этих регистров соответствуют выполняемым функциям: CS (Code Segment, сегмент кода) вместе с EIP (IP) определяют адрес памяти, откуда нужно прочитать следующую инструкцию; аналогично регистр SS (Stack Segment, сегмент стека) в паре с ESP (SS:SP) указывают на вершину стека. Сегментные регистры DS, ES, FS, и GS (Data, Extra, F и G сегменты) используются для адресации данных в памяти.



Регистр ESP (SP) — это указатель памяти, который указывает на вершину стека (х86-совместимые процессоры не имеют аппаратного стека). Также программно не может быть изменен регистр EIP (IP, Instruction Pointer) — указатель команд. Этот регистр указывает на инструкцию, которая будет выполнена следующей. Значение этого регистра изменяется непосредственно контроллером процессора согласно инструкциям, полученным из памяти.

Регистр EFLAGS – регистр флагов. Он состоит из одноразрядных флагов, отображающих в основном текущее состояние арифметико-логического устройства. Самые важные из флагов:

• Признак нуля ZF (Zero Flag) — 1, если результат предыдущей операции равен нулю.
• Признак знака SF (Sign Flag) — 1, если результат предыдущей операции отрицательный.
• Признак переполнения OF (Overflow Flag) — 1, если при выполнении предыдущей операции произошло переполнение (overflow), то есть результат операции больше выделенной на неё память.
• Признак переноса CF (Carry Flag) — 1, если бит был «перенесен» и стал более высокого порядка.
• Признак прерывания IF (Interrupt Flag) — 1, если прерывания процессора разрешены.
• Признак направления DF (Direction Flag) — используется для обработки строк.

Другие регистры процессора относятся к работе в защищенном режиме.

 

Описание

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

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

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

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



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

В i386 механизмы защиты и многозадачности были значительно расширены и улучшены. В зависимости от характера нарушений, они могут тихо игнорироваться. Серьёзные ошибки на уровне операционной системы (или в реальном режиме) могут привести процессор в режим аварийного останова (например, при нарушении в обработчике двойного нарушения), из которого можно выйти только аппаратным сбросом (reset) процессора.

Например, i386 поддерживает ограничение доступа к портам ввода-вывода и флагу запрещения прерываний.

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

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

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

В качестве расширенной поддержки реального режима, i386 позволяет одной или нескольким задачам работать в виртуальном режиме — режиме эмуляции режима реального адреса.

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

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

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

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

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

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

Аппаратная отладка

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

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

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

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

Пошаговое выполнение

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

Точки останова

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


Эта страница нарушает авторские права

allrefrs.ru - 2018 год. Все права принадлежат их авторам!