ФЭНДОМ


ВведениеПравить

Архитектура IA-32 (начиная с семейства процессоров Intel 80386) предоставляет расширенную поддержку системного уровня для операционных систем и приложений. Эта поддержка представляет собой набор нескольких режимов, в которых может находиться процессор:

  • Реальный режим.
  • Защищенный режим.
  • Виртуальный режим процессора 8086.
  • Режим управления системой (SMM).
  • Режим IA-32e (добавлен технологией Intel® Extended Memory 64). Режим IA-32e может работать в двух режимах: 64-битный режим и режим совместимости.

Системный уровень архитектуры IA-32 поддерживает следующие операции:

  • Управление памятью.
  • Защита модулей приложений.
  • Многозадачность.
  • Обработка прерываний и исключений.
  • Мультипроцессорность.
  • Управление КЭШем.
  • Управление аппаратными ресурсами и питанием.
  • Отладка и мониторинг производительности.

Эта глава предоставляет описание каждой части этой архитектуры. В ней также затрагивается описание системных регистров, которые используются для управления процессором на системном уровне. Также рассматривается часть системных инструкций.

Множество особенностей системного уровня архитектуры IA-32 используются только системными программистами. Но и прикладные программисты могут прочитать эту и следующие главы для создания защищенного окружения для своих программ.

Эта и большинство последующих глав описывают, в основном, защищенный режим архитектуры. Без внимания не останется и режим IA-32e, так как в нем встречаются существенные отличия от простого 32-битного режима. Все процессоры архитектуры IA-32 входят в реальный режим после включение или сброса компьютера (это описывается подробно в девятой главе). Затем приложение инициирует переход из режима реальных адресов в защищенный режим процессора. Если же представлен режим IA-32e, то приложение может переключиться из защищенного режима в режим IA-32e.

Описание системного уровня архитектурыПравить

Системный уровень архитектуры IA-32 состоит из набора регистров, структур данных, и инструкций, созданных для поддержки базовых операций этого уровня. Это управление памятью, обработка прерываний и исключений, управление задачами и контроль нескольких процессоров. Фигура 2.1 предоставляет общую информацию о системных регистрах и структур данных в 32-битном режиме, а фигура 2.2 – для режима IA-32e.

Фигура 2.1

Глобальные и локальные таблицы дескрипторовПравить

Когда процессор находится в защищенном режиме, весь доступ к памяти проходит через GDT или, через LDT (если она установлена), как показано на фигуре 2.1. Эти таблицы содержат элементы, названные сегментными дескрипторами. Сегментные дескрипторы содержат базовый адрес сегментов, права доступа, тип и дополнительную информацию по их использованию.

Каждый сегментный дескриптор имеет ассоциированный с ним сегментный селектор (или селектор сегмента). Селектор сегмента предоставляет информацию об индексе в GDT или LDT (смещение ассоциированного с ним сегментного дескриптора), локальный/глобальный флаг (определяет, указывает ли селектор на GDT или LDT), и информацию о праве доступа.

Для доступа к определенному байту в сегменте должны быть указаны селектор сегмента и смещение в сегменте. Селектор сегмента предоставляет доступ к сегментному дескриптору для сегмента (в GDT или в LDT). Из сегментного дескриптора процессор получает информацию о базовом адресе сегмента в линейном адресном пространстве. Смещение – местонахождение байта, относительно базового адреса. Такой механизм может быть использован для доступа к верным сегментам кода, данных или стека, если сегмент доступен из текущего уровня привилегий (CPL), в котором процессор оперирует в данный момент. CPL определяется уровнем защиты сегмента кода.

Линейный адрес базы GDT содержится в регистре GDTR; селектор таблицы LDT содержится в регистре LDTR.


GDT и LDT в защищенном режимеПравить

В подрежимах IA-32e GDTR и LDTR расширяются до 64-бит.

GDT и LDT расширяются до 64 бит для поддержки 64-битных адресов (16-байтовые дескрипторы LDT cодержат 64-битные базовые адреса и дополнительные атрибуты). В режиме совместимости дескрипторы не расширяются.

Системные сегменты, сегментные дескрипторы, шлюзыПравить

Помимо сегментов кода, данных и стека, которые составляют собой исполняемое окружение программы или процедуры, архитектура определяет два системных сегмента: сегмент состояния задачи (TSS) и LDT. GDT не является сегментом, так как она не доступна так же, как селекторы сегментов и сегментные дескрипторы. Напротив, у TSS и LDT есть объявленные сегментные дескрипторы.

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

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

Если к искомому коду разрешен доступ, то процессор берет селектор сегмента для этого сегмента кода и смещение в самом коде из шлюза вызова. Если вызов требует смену уровня привилегий, то процессор производит её. Селектор сегмента для нового стека выбирается из TSS для текущей задачи.


Шлюзы в режиме IA-32eПравить

В этом режиме процессора следующие дескрипторы имеют размер 16-байт (расширились, чтобы позволить использование 64-битной базы):

Дескрипторы LDT 64-битные TSS Шлюзы вызовов Шлюзы прерываний Шлюзы ловушек

Шлюзы вызовов могут производить переход между 64-битным режимом и режимом совместимости. Шлюзы задач не поддерживаются в режиме IA-32e.

Сегменты состояния задачи (TSS) и шлюзы задачПравить

TSS (смотрите рисунок 2.1) определяет состояние окружения выполнения для задачи. Он включает состояние регистров основного назначения, сегментных регистров, регистра EFLAGS, регистра EIP и селекторы сегментов с указателями стека на три сегмента стека (по одному на каждый уровень привилегий, кроме самого непривилегированного режима). TSS также включает селектор сегмента таблицы LDT, ассоциированный с задачей и базовым адресом таблицы страниц.

Выполнение всех программ в защищенном режиме происходит с использованием контекста задачи. Селектор сегмента для TSS текущей задачи сохраняется в регистре задачи TR. Самый простейший метод переключения задачи – вызов (CALL) или прыжок (JMP) на сегмент новой задачи. Здесь селектор сегмента для TSS новой задачи сообщается в самой инструкции CALL или JMP. При переключении задач процессор выполняет следующие действия:

  • Сохраняет состояние текущей задачи в TSS.
  • Загружает регистр задачи с селектором сегмента для новой задачи.
  • Получает доступ к новому TSS через дескриптор сегмента в GDT.
  • Загружает состояние новой задачи из нового TSS в регистры общего назначения, сегментные регистры, LDTR, регистр управления CR3 (базовый адрес таблицы страниц), регистр EFLAGS и регистр EIP.
  • Начинает выполнение новой задачи.

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


Сегменты состояния задачи (TSS) в режиме IA-32eПравить

Аппаратное переключение задач не поддерживается в режиме IA-32e. Несмотря на это, TSS существует. Базовый адрес TSS указывается его дескриптором.

64-битный TSS содержит в себе следующую информацию, которая необходима для 64-битных операций: Адреса указателей стека для каждого уровня привилегий Адреса указателей для таблицы стека прерываний Адрес смещения для битовой карты доступа ввода/вывода.

Регистр задачи расширяется, чтобы поддерживать 64-битные адреса в соответствующем режиме.

Обработка прерываний и исключенийПравить

Внешние, программные прерывания и исключения обрабатываются через таблицу дескрипторов прерываний (IDT). IDT содержит коллекцию дескрипторов гейтов, которые предоставляют доступ к обработчикам прерываний и исключений. Как и GDT, IDT – это не сегмент. Линейный адрес для базы IDT содержится в регистре IDT (IDTR).

Дескрипторы гейтов в IDT могут быть дескрипторами прерывания, ловушки, или задачи. Чтобы получить доступ к обработчику прерывания или исключения, процессор сначала получает вектор прерывания (его номер) из внутреннего оборудования, внешнего контроллера прерываний или из приложения через INT, INTO, INT 3 или инструкции BOUND. Вектор прерывания предоставляет индекс в IDT. Если выбранный дескриптор гейта является гейтом прерывания или ловушки, то ассоциированная функция-обработчик вызывается так же, как вызывается процедура через call-gate. Если дескриптор – это гейт задачи, то обработчик вызывается через переключение задач.


Обработка прерываний и исключений в режиме IA-32eПравить

В этом режиме, дескрипторы прерываний расширяются до 16 байт для поддержки 64-битных адресов. Это верно для 64-битного режима и режима совместимости.

Регистр IDTR расширяются для хранения 64-битных адресов. Гейты задач не поддерживаются.

Управление памятьюПравить

Системная архитектура поддерживает как прямую адресацию памяти, так и виртуальную память (через страничную адресацию). Когда используется физическая адресация, линейный адрес зовется как физический. Когда используется страничная адресация: все сегменты кода, данных, стека и системы (включая GDT и LDT) могут быть подвергнуты этой адресации только тогда, когда в памяти хранятся наиболее часто используемые страницы. Расположение страниц (иногда их называют фреймами страниц) в физической памяти содержится в двух типах системных структур данных: директориях страниц и таблиц страниц. Обе структуры находятся в физической памяти.

Базовый физический адрес директории страниц содержится в регистре управления CR3. Точка входа в эту директорию содержит физический адрес базы таблицы страниц, права доступа и информацию об управлении памяти.

Чтобы использовать данный механизм, линейный адрес разбивается на три части. Каждая часть представляет собой смещения в директории страниц, таблице страниц и фрейме страницы. Система может иметь как одну директорию страниц, так и несколько. Например, каждая задача может иметь свою собственную директорию страниц.


Управление памятью в режиме IA-32eПравить

Здесь страницы физической памяти управляются набором системных структур данных. В совместимом и в 64-битном режиме используются четыре уровня системных структур данных. Они включают: Карта страниц (уровень 4, PML4) – Точка входа в таблице PML4 содержит физический адрес базы таблицы указателей директории страниц, права доступа и информацию об управлении памятью. Базовый физический адрес PML4 содержится в CR3. Набор указателей директории страниц – Точка входа в таблице указателей директории страниц содержим физический адрес начала (базы) таблицы директории страниц, права доступа и информацию об управлении памятью. Набор директорий страниц – Точка входа в таблице директорий страниц содержит физический адрес базы таблицы страниц, права доступа и информацию об управлении памятью. Набор таблиц страниц – Точка входа в таблицу страниц содержит физический фрейма страницы, права доступа и информацию об управлении памятью.

Системные регистрыПравить

Чтобы помочь в инициализации процессора и контроля над системными операциями, системная архитектура предоставляет системные флаги в регистре EFLAGS и несколько системных регистров: Системные флаги и поле IOPL в регистре EFLAGS контролируют задачи, переключение между режимами, обработку прерываний, трассировку инструкций, и права доступа. Регистры управления (CR0, CR1, CR2, CR3 и CR4) содержат разнообразные флаги и поля данных для управления операциями системного уровня. Другие флаги в этих регистрах используются для индицирования поддержки специфичных для процессора опций. Регистры отладки позволяют устанавливать точки останова для использования в программах-отладчиках и системных приложениях. Регистры GDTR, LDTR и IDTR содержат линейные адреса и размеры соответствующих им таблиц. Регистр задачи содержит линейный адрес и размер TSS для текущей задачи. MSR – специфичные для модели регистры

MSR – это группа регистров, которые используются главным образом в операционных системах и выполняемых процедурах (это код, запущенный с уровнем привилегий 0). Эти регистры контролируют такие вещи, как расширения отладки, счетчики мониторинга производительности, архитектуру проверки оборудования и ранги типов памяти (MTRR).

Количество и функция таких регистров отличается в каждом процессоре IA-32.

Большинство систем запрещают доступ к системным регистрам (кроме EFLAGS) из приложений. Системы могут быть смоделированы так, что все программы будут запускаться с высшим уровнем привилегий (Уровень 0). В этом случае программам будет позволено изменять системные регистры.


Системные регистры в режиме IA-32eПравить

В этом режиме четыре таблицы системных дескрипторов расширяются, чтобы хранить 64-битные адреса. EFLAGS становится 64-битным регистром RFLAGS. CR0 – CR4 также расширяются до 64 бит. Становится доступным регистр CR8. CR8 предоставляет доступ (с правами чтения и записи) к регистру приоритета задачи (TPR).

В 64-битном режиме, регистры отладки DR0-DR7 становятся 64-битными.

На системах, которые поддерживают данный режим, доступен регистр контроля дополнительных возможностей (IA32_EFER). Помимо этого, доступны и следующие регистры: IA32_KernelGSbase – Используется инструкцией SWAPGS IA32_LSTAR – Используется инструкцией SYSCALL IA32_SYSCALL_FLAG_MASK – Используется инструкцией SYSCALL IA32_STAR_CS – Используется инструкциями SYSCALL и SYSRET

Другие системные ресурсыПравить

Кроме тех системных регистров и ресурсов, которые были описаны в предыдущих разделах, системная архитектура предоставляет и следующие ресурсы: Инструкции операционных систем Счетчики мониторинга производительности Встроенные буфера и КЭШи

Счетчики мониторинга производительности – это программируемые счетчики, которые можно запрограммировать на отсчет количества декодированных инструкций, количества произошедших прерываний и т.п.

Процессор предоставляет несколько встроенных КЭШей и буферов. КЭШи используются для сохранения данных и инструкций. Буфера – для сохранения такой информации, как декодированные адреса или сегменты приложений, или операции записи ждущих завершения.


Режимы оперированияПравить

Архитектура IA-32 поддерживает четыре режима оперирования и один двойной режим:


Защищенный режим – это основной режим работы процессора. С помощью него можно получить доступ к богатому набору параметров и инструкций архитектуры, гибкости, высокой производительности обратной совместимости с существующими приложениями.


Режим реальных адресов – (известен как Реальный режим) предоставляет окружение для программирования процессора Intel® 8086 с некоторыми дополнениями (такими как возможность перехода в защищенный режим или в режим управления системой)


Режим управления системой (SMM) – SMM это стандартное расширение архитектуры, начиная с процессора Intel386® SL. Режим предоставляет прозрачный механизм управления питанием и различными свойствами OEM аппаратуры. Вход в SMM осуществляется через активирование внешних системных прерываний (SMI#), которое, в свою очередь, генерирует прерывание системного управления (SMI). Специфичный SMM код может затем выполняться прозрачно.


Виртуальный режим процессора 8086 – в защищенном режиме процессор поддерживает еще один режим – виртуальный. Этот режим поддерживает выполнение программ для 8086 в защищенном, многозадачном окружении.


Режим IA32-e – В этом режиме процессор поддерживает два подрежима: режим совместимости и 64-битный режим. 64-битный режим предоставляет 64-битную линейную адресацию и поддержку физическое адресное пространство в 64 гигабайта. Режим совместимости позволяет запускать 32-битные приложения без изменений в коде.

Файл:Components.png

Процессор попадает в реальный режим после включения компьютера, или после сброса. Флаг PE в регистре управления CR0 после этого действия контролирует режим процессора – защищенный или реальный.

Флаг VM в регистре EFLAGS определяет, находится ли процессор в защищенном режиме или в виртуальном режиме процессора 8086.

Бит LMA (IA32_EFER.LMA.LMA[бит 10]) определяет нахождение процессора в режиме IA-32e, а подрежим (совместимости или 64-битный) определяется битом CS.L сегмента кода

Процессор переключается в режим SMM, когда получает SMI. Это может произойти во всех остальных режимах процессора. Но когда будет выполнена инструкция RSM, процессор возвращается в искомый режим оперирования.

Системные флаги и поля в регистре EFLAGSПравить

Системные флаги и поле IOPL регистра EFLAGS контролируют ввод/вывод, маскированные аппаратные прерывания, отладку, переключение задач и виртуальный режим процессора 8086. Модифицировать данные биты должно быть позволено только привилегированному коду (например, операционной системе).

Системные флаги и IOPL:

EFLAGS

TF Ловушка (бит 8) – Устанавливается для включения отладки с единичным шагом (single-step). В данном режиме процессор генерирует исключение отладки после каждой инструкции. Это позволяет исследовать состояние программы после каждой инструкции. Если приложение установило флаг TF, используя инструкцию POPF, POPFD или IRET, исключение отладки генерируется после инструкции, следующей за POPF, POPFD или IRET.

IF Включение прерываний (бит 9) – Контролирует отклик процессора на маскируемые аппаратные прерывания. Если бит установлен, то процессор будет реагировать на МАП, в противном случае – нет. Флаг IF не влияет на генерацию исключений или на NMI (немаскируемые прерывания). CPL, IOPL и состояние флага VME в регистре управления CR4 определяют, когда флаг IF изменяется под влиянием инструкций CLI, STI, POPF, POPFD, IRET.

IOPL Поле уровня привилегий ввода/вывода (бит 12 и 13) – Индицирует IOPL для текущей программы или задачи. CPL для текущей программы или задачи должно быть меньше или равно, чем IOPL для доступа к адресному пространству ввода/вывода. Это поле может быть модифицировано только инструкциями POPF и IRET с CPL, равным нулю. IOPL – это один из механизмов, контролирующих изменение флага IF и обработки прерываний в виртуальном режиме 8086, когда расширения виртуального режима включены (CR4.VME = 1).

NT Вложенная задача (бит 14) – Контролирует связывание прерванных и вызванных задач. Процессор выставляет этот флаг, если задача была инициирована инструкцией CALL, прерыванием или исключением.

RF Продолжение (бит 16) – Контролирует ответные действия процессора на точки останова. Когда флаг установлен, временно отключаются исключения отладки. Главная функция данного флага – позволить перезапустить инструкцию, следующую за исключением отладки.

VM Виртуальный режим 8086 процессора (бит 17) – Установите данный флаг для включения этого режима процессора; очистите его для возвращения в защищенный режим.

AC Проверка выравнивания (бит 18) - Установите данный флаг и флаг AM в регистре управления CR0, чтобы активировать проверку выравнивания ссылок памяти (memory references); очистите его и/или флаг AM, чтобы выключить проверку выравнивания. При попытке создать ссылку на не выровненный операнд генерируется исключение. Исключение проверки выравнивания генерируется только в режиме пользователя (уровень привилегий 3). Исключение проверки выравнивания может быть использовано для проверки выравнивания данных. Это может быть полезно, например, в случае обмена данными с процессором, который требует, чтобы все данные были выровнены.

VIF Виртуальное прерывание (бит 19) – Содержит виртуальный образ флага IF. Данный флаг используется в конъюнкции с флагом VIP. Процессор распознает флаг VIF только тогда, когда установлен флаг VME или PVI в регистре управления CR4 и IOPL меньше 3. (Флаг VME активирует расширения виртуального режима 8086; Флаг PVI активирует виртуальные прерывания защищенного режима.

VIP Незаконченное виртуальное прерывание (бит 20) – Устанавливается программно для индицирования того, что прерывание на завершено; сброшенный флаг показывает, что прерываний (активных) нет. Флаг используется в конъюнкции с флагом VIF. Процессор читает этот флаг, но никогда его не модифицирует. Процессор распознает флаг VIP только тогда, когда установлен флаг VME или PVI в регистре управления CR4 и IOPL меньше 3. Флаг VME активирует расширения виртуального режима 8086, а флаг PVI активирует виртуальные прерывания защищенного режима.

ID Идентификация (бит 21) – Способность программы или процедуры установить или сбросить данный флаг указывает на поддержку инструкции CPUID.

Системные флаги и поля в режиме IA-32eПравить

В 64-битном режиме регистр RFLAGS расширяется до 64 бит, где верхние 32 бита зарезервированы. Системные флаги в RFLAGS (64-битный режим) или EFLAGS (режим совместимости) показаны на Фигуре 2.4. В режиме IA-32e процессор не позволяет установку бита VM, поскольку виртуальный режим процессора 8086 не поддерживается (попытки установить бит VM игнорируются). Процессор также не поддерживает установку бита NT.

Регистры управления памятьюПравить

Процессор предоставляет четыре регистра управления памятью (GDTR, LDTR, IDTR и TR), которые определяют положение структур данных, которые контролируют сегментное управление памятью (см. Фигуру 2.5). Также существуют специальные инструкции для загрузки и сохранения данных регистров.

Файл:MemoryManageRegisters.jpg

Регистр глобальной таблицы дескрипторовПравить

Регистр GDTR хранит базовый адрес (32-битный в защищенном режиме; 64-битный в режиме IA-32e) и 16-битный лимит таблицы GDT. Базовый адрес указывает линейный адрес 0 байта GDT; лимит таблицы показывает количество байт в таблице.

Инструкции LGDT и SGDT загружают и сохраняют регистр GDTR соответственно. При включении или сбросе процессора, базовый адрес устанавливается на значение по умолчанию (0) и лимит устанавливается на 0FFFFH. Как часть процесса инициализации процессора для перехода в защищенный режим, должен быть загружен новый базовый адрес в GDTR.


Регистр локальной таблицы дескрипторовПравить

Регистр LDTR содержит в себе 16-битный селектор сегмента, базовый адрес (32-битный в защищенном режиме; 64-битный в режиме IA-32e), лимит сегмента и атрибуты дескриптора для LDT. Базовый адрес указывает на линейный адрес нулевого байта сегмента LDT, лимит сегмента показывает количество байт в сегменте.

Инструкции LLDT и SLDT загружают и сохраняют регистр LDTR соответственно. Сегмент, который содержит LDT, должен иметь сегментный дескриптор в GDT. Когда инструкция LLDT загружает селектор сегмента в LDTR: базовый адрес, лимит и атрибуты дескриптора (из дескриптора LDT) автоматически загружаются в LDTR.

Когда происходит переключение задачи, LDTR автоматически загружается с селектором сегмента и дескриптором LDT для новой задачи (коряво было написано – коряво перевел – прим. DinamytE). Содержание LDTR не сохраняется автоматически перед записью в регистр новой информации о LDT.

При включении или сбросе процессора, селектор сегмента и базовый адрес устанавливаются на 0 и лимит устанавливается на 0FFFFH.


Регистр таблицы дескрипторов прерыванийПравить

Регистр IDTR содержит базовый адрес (32-битный в защищенном режиме; 64-битный в режиме IA-32e) и 16-битный лимит таблицы IDT. Базовый адрес показывает на линейный адрес 0 байта IDT, а лимит таблицы указывает на количество байт в таблице.

Инструкции LIDT и SIDT загружают и сохраняют регистр IDTR соответственно.

При включении или сбросе процессора, базовый адрес устанавливается на 0 и лимит устанавливается на 0FFFFH.


Регистр задачиПравить

Регистр задачи содержит 16-битный селектор сегмента, базовый адрес (32-битный в защищенном режиме; 64-битный в режиме IA-32e), лимит сегмента и атрибуты дескриптора TSS текущей задачи. Селектор ссылается на дескриптор TSS в GDT. Базовый адрес указывает на линейный адрес 0 байта TSS; лимит сегмента показывает количество байт в TSS.

Инструкции LTR и STR загружают и сохраняют селектор сегмента регистра задачи соответственно. Когда инструкция LTR загружает селектор сегмента в регистр задачи, базовый адрес, лимит и атрибуты дескриптора из дескриптора TSS автоматически загружаются в регистр задачи.

При включении или сбросе процессора, базовый адрес устанавливается на 0 и лимит устанавливается на 0FFFFH. Когда происходит переключение задачи, регистр задачи автоматически загружается с селектором сегмента и дескриптором TSS для новой задачи. Содержание регистра задачи не сохраняется автоматически перед записью новой информации о TSS в регистр.

Регистры управленияПравить

Регистры управления (CR0, CR1, CR2, CR3 и CR4; см. Фигуру 2-6) определяют режим оперирования процессора и характеристики текущей выполняемой задачи. Эти регистры 32-битные во всех 32-битных режимах и режиме совместимости.

В 64-битном режиме регистры управления расширяются до 64 бит.

Инструкции MOV CRn используются для манипулирования битами регистра. Префиксы размера операнда для таких инструкций игнорируются.

Следующие утверждения также имеют силу:

  • Биты 63:32 регистров CR0 и CR4 зарезервированы и должны быть установлены в нуль. Запись в них любого, отличного от нуля значения, возбуждает исключение GPF #GP(0).
  • Все 64 бита регистра CR2 могут быть изменены программно.
  • Биты 51:40 регистра CR3 зарезервированы и должны быть установлены в 0.
  • Инструкции MOV CRn не проверяют адреса, записываемые в CR2 и CR3.
  • Регистр CR8 доступен только в 64-битном режиме.

Регистры управления в целом описаны ниже, и каждая, обозначенная архитектурой область управления описана индивидуально. В Фигуре 2-6 размер регистра в 64-битном режиме указан в скобках (кроме CR0).

  • CR0 – Содержит флаги управления системой, которые контролируют режим оперирования и состояния процессора.
  • CR1 – Зарезервирован.
  • CR2 – Содержит линейный адрес ошибки страничной адресации (линейный адрес, который спровоцировал данное исключение).
  • CR3 – Содержит физический адрес базы директории страниц и два флага (PCD и PWT). Данный регистр также известен как Базовый регистр директории страниц (PDBR). Только наиболее значимые биты (меньше низших 12 бит) базового адреса указано; низшие 12 бит адреса принимают значение 0. Директория страниц должна быть выровнена к границе страницы (4KB). Флаги PCD и PWT контролируют кэширование директории страниц во КЭШах процессора. Когда используется расширение физического адреса, регистр CR3 содержит базовый адрес таблицы указателей страниц директорий (Здесь была фраза page-directory-pointer table – прим. DinamytE). В режиме IA-32e CR3 содержит базовый адрес таблицы PML4.
  • CR4 – Содержит группу флагов, которые активируют различные архитектурные расширения и указывают операционной системе или исполнительной поддержке на специфичные возможности процессора. Регистры управления могут быть считаны и загружены (или модифицированы) , используя формы инструкции MOV move-to-or-from-control-register (перемещай в или из регистров управления). В защищенном режиме инструкции MOV позволяют контролировать регистры на запись и чтение (только на уровне привилегий 0). Эти ограничения означают, что приложения или процедуры операционной системы, запущенные на уровнях привилегий 1 или 2, не смогут считывать или записывать регистры управления.
  • CR8 – Предоставляет доступ на чтение запись регистра TPR (Регистр приоритета задачи). Он определяет значение порога приоритета, которое операционная система может использовать для управления классами приоритетов внешних прерываний, допущенных до процессора. Регистр доступен только в 64-битном режиме.

Файл:CRX.jpg

Когда происходит установка регистра управления, зарезервированные значения должны устанавливаться такими, какими они были до начала операции.

Флаги регистров управления:

PG Страничная адресация (бит 31 CR0) – Активирует страничную адресацию, когда установлен; отключает, когда очищен. Когда отключена страничная адресация, все линейные адреса обрабатываются как физические. Флаг PG не имеет никакой силы, если флаг PE (бит 0 CR0) не установлен; установка флага PG, когда флаг PE очищен возбуждает GPF #GP. На процессорах IA-32, которые поддерживают Intel® EM64T, включение и отключение режима IA-32e также требует модификации CR0.PG.

CD Отключение КЭШа (бит 30 CR0) – Когда флаги CD и NW очищены, кэширование областей памяти для всей физической памяти внутреннего (и внешнего) КЭШа включено. Когда флаг CD установлен, кэширование ограничено. Чтобы предотвратить обращение процессора к КЭШу, флаг CD должен быть установлен и КЭШи должны быть очищенными.

NW Not Write-through (Нет записи через) (бит 29 CR0) – описание отсутствует.

AM Маска выравнивания (бит 18 CR0) - Активируется проверка выравнивания при установке флага; деактивируется при сбросе. Проверка выравнивания выполняется только тогда, когда установлен флаг AM, флаг AC в регистре EFLAGS, CPL равен 3 и процессор оперирует в защищенном или виртуальном (VM8086) режимах процессора.

WP Защита от записи (бит 16 CR0) – Защищает процедуры уровня супервизора от записи в страницы пользовательского уровня с атрибутами только на чтение, при установке бита; при сбросе бита данное действие разрешается. Флаг облегчает реализацию метода создания нового процесса copy-on-write (forking (ветвление)). Данный метод используется в UNIX-подобных операционных системах.

NE Числовая ошибка (бит 5 CR0) – Установка флага активирует “родной” (встроенный) механизм для сообщения об ошибках x87 FPU; очистка флага приводит к включению PC-стиля оповещения об ошибках x87 FPU. Когда флаг NE очищен и ввод IGNNE# утвержден, ошибки x87 FPU игнорируются. Когда же флаг NE очищен и ввод IGNNE# отклонен, немаскированная ошибка x87 FPU побуждает процессор заставить FERR# сгенерировать внешнее прерывания и остановить выполнение инструкции немедленно, перед тем, как начнет выполнятся следующая инструкция WAIT/FWAIT. (немного некорректно здесь написали инженеры из Intel – прим. DinamytE).

ET Тип расширения (бит 4 CR0) – Зарезервирован на семействах процессоров Pentium 4, Intel Xeon , P6. В данных процессорах данный флаг аппаратно установлен в 1. В процессорах Intel386 и Intel486 данный флаг показывает поддержку математического сопроцессора Intel 387 DX.

TS Переключение задачи (бит 3 CR0) – Позволяет сохранять x87 FPU/MMX/SSE/SSE2/SSE3 при переключении задач на время выполнения новой задачи. Процессор устанавливает данный флаг на каждом переключении задач и проверяет его при выполнении инструкций x87 FPU/MMX/SSE/SSE2/SSE3.

Файл:Table2-1.jpg

Если данный флаг установлен, а флаг EM (бит 2 CR0) сброшен, возникает исключение (#NM) при выполнении любой из x87 FPU/MMX/SSE/SSE2/SSE3 инструкций; также при выполнении команд PAUSE, PREFETCH, SFENCE, LFENCE, MFENCE, MOVNTI, CFLUSH.

Если данный флаг установлен, а флаги MP (бит 1 CR0) и EM сброшены, исключение (#NM) не возникает при выполнении любой из x87 FPU/MMX/SSE/SSE2/SSE3 инструкций.

Если установлен флаг EM, то установка флага TS не повлияет на выполнение инструкций x87 FPU/MMX/SSE/SSE2/SSE3.

Таблица 2-1 показывает действия, происходящие, когда процессор выполняет инструкцию x87 FPU, и зависящие от настроек флагов TS, EM, MP.

Процессор не сохраняет автоматически контекст регистров x87 FPU, XMM и MXCSR. Вместо этого, он устанавливает флаг TS, который возбуждает процессор вызвать исключение (#NM) при выполнении инструкций x87 FPU/MMX/SSE/SSE2/SSE3 в потоке инструкций новой задачи.


EM Эмуляция (бит 2 CR0) – Если флаг установлен, показывает, что у процессора нет внешнего либо внутреннего x87 FPU. Если очищен – x87 GPU присутствует. Флаг также влияет на выполнение MMX/SSE/SSE2/SSE3 инструкций.

Когда флаг EM установлен, выполнение инструкции x87 FPU генерирует исключение (#NM). Данный флаг должен быть установлен, когда у процессора нет внутреннего x87 FPU или он не подключен к внешнему математическому сопроцессору. Установка этого флага позволяет обрабатывать все инструкции работы с числами с плавающей точкой программно.

Также, когда установлен флаг EM, выполнение инструкции MMX возбуждает исключение неверного опкода (#UD). Поэтому, для включения инструкций MMX, флаг EM должен быть установлен в ноль.

Когда флаг EM установлен, выполнение многих инструкций SSE/SSE2/SSE3 возбуждает исключение (#UD). Если процессор поддерживает расширения SSE/SSE2/SSE3, то флаг EM должен быть установлен в 0 для их выполнения. SSE/SSE2/SSE3 инструкции, которые не зависят от состояния флага EM: PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI, и CLFLUSH.

MP Мониторинг сопроцессора (бит 1 CR0) – Контролирует взаимодействие WAIT (или FWAIT) инструкций с флагом TS (бит 3 CR0). Если флаг MP установлен, выполнение инструкции WAIT генерирует исключение (#NM), если флаг TS также установлен. Если флаг MP очищен, то при выполнении инструкции WAIT состояние флага TS игнорируется.

PE Защита активирована (бит 0 CR0) – Активирует защищенный режим, когда установлен; включает режим реальных адресов при сбросе. Флаг не активирует страничную адресацию напрямую. Он только включает защиту на уровне сегментов. Чтобы включить страничную адресацию, должны быть установлены флаги PE и PG.

PCD Отключение кеша уровня страниц (бит 4 CR3) – Управляет кешированием текущей директории страниц. Когда флаг PCD установлен, кеширование директории страниц не производится. Когда флаг очищен – директория страниц может быть кеширована. Флаг влияет только на внутренний кеш процессора (L1, L2, если представлены). Процессор игнорирует этот флаг, если страничная адресация не используется (флаг PG в регистре CR0 очищен) или флаг CD в CR0 установлен.

PWT Прозрачные записи уровня страниц (бит 3 CR3) – Контролирует то, как идёт запись в текущей директории страниц. Когда флаг PWT установлен, запись в кеш отключена (кеширование при записи); когда флаг очищен – запись из кеша в память включена. Флаг влияет только на внутренний кеш (L1, L2). Процессор игнорирует данный флаг, если страничная адресация не используется (флаг PG в регистре CR0 очищен) или флаг CD установлен в регистре CR0.

VME Расширения виртуального режима процессора 8086 (бит 0 CR4) – Включает обработку прерываний и исключений в виртуальном режиме процессора 8086 при установке флага и отключает при сбросе. Использование данных расширений может увеличить производительность приложений для виртуального 8086-го.

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.