Регистр управления - Control register

А контрольный регистр это регистр процессора который изменяет или контролирует общее поведение ЦПУ или другое цифровое устройство. Общие задачи, выполняемые регистрами управления, включают: прерывать управление, переключение режим адресации, пейджинг контроль и сопроцессор контроль.

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

CR0

Регистр CR0 имеет длину 32 бита на 386 и более высокие процессоры. На x64 процессоры в длинный режим, он (и другие регистры управления) имеет длину 64 бита. CR0 имеет различные управляющие флаги, которые изменяют базовую работу процессора.

КусочекИмяПолное имяОписание
0PEЗащищенный режим ВключитьЕсли 1, система в защищенный режим, иначе система находится в реальный режим
1ДепутатСопроцессор монитораУправляет взаимодействием инструкций WAIT / FWAIT с флагом TS в CR0
2ЭМЭмуляцияЕсли установлено, нет x87 блок с плавающей запятой присутствует, если нет, x87 FPU присутствует
3TSЗадача переключенаПозволяет сохранять контекст задачи x87 при переключении задачи только после использования инструкции x87
4ETТип расширенияНа 386 это позволяло указать, был ли внешний математический сопроцессор 80287 или же 80387
5NEЧисловая ошибкаВключить внутренний x87 отчет об ошибках с плавающей запятой, если установлен, иначе включает обнаружение ошибок в стиле ПК x87
16WPЗащита от записиЕсли установлено, ЦП не может писать на страницы только для чтения, когда уровень привилегий равен 0.
18ЯВЛЯЮСЬМаска выравниванияПроверка выравнивания включена, если установлен AM, флаг AC (в EFLAGS register) установлен, а уровень привилегий равен 3
29NWНе писать черезГлобально включает / отключает кэширование со сквозной записью
30CDКеш запрещатьГлобально включает / отключает кеш памяти
31PGПейджингЕсли 1, включить пейджинг и используйте § CR3 зарегистрируйтесь, иначе отключите пейджинг.

CR1

Зарезервировано, ЦП выдаст #UD исключение при попытке получить к нему доступ.

CR2

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

CR3

Типичное использование CR3 при трансляции адресов с 4KiB страницы

Используется, когда виртуальная адресация включен, следовательно, когда бит PG установлен в CR0. CR3 позволяет процессору преобразовывать линейные адреса в физические адреса, находя каталог страниц и таблицы страниц для текущей задачи. Обычно старшие 20 бит CR3 становятся базовый регистр каталога страниц (PDBR), в котором хранится физический адрес записи каталога первой страницы. Если бит PCIDE CR4 установлен, младшие 12 бит используются для идентификатор контекста процесса (PCID).[1]

CR4

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

КусочекИмяПолное имяОписание
0VMEРасширения виртуального режима 8086Если установлен, включает поддержку флага виртуального прерывания (VIF) в режиме virtual-8086.
1ПВИВиртуальные прерывания в защищенном режимеЕсли установлен, включает поддержку флага виртуального прерывания (VIF) в защищенном режиме.
2TSDШтамп времени ЗапрещатьЕсли установлено, RDTSC инструкция может быть выполнена только когда в кольцо 0, в противном случае RDTSC можно использовать на любом уровне привилегий.
3DEОтладка РасширенияЕсли установлено, включает перерывы в регистре отладки на Ввод / вывод доступ в космос.
4PSEРасширение размера страницыЕсли не задано, размер страницы составляет 4 КиБ, в противном случае размер страницы увеличивается до 4 МБ.

Если PAE включен или процессор x86-64 длинный режим этот бит игнорируется.[2]

5PAEРасширение физического адресаЕсли установлено, изменяет макет таблицы страниц для преобразования 32-битных виртуальных адресов в расширенные 36-битные физические адреса.
6MCEИсключение проверки машиныЕсли установлено, разрешает прерывание проверки машины.
7PGEСтраница Global EnabledЕсли установлено, преобразования адресов (записи PDE или PTE) могут совместно использоваться между адресными пространствами.
8PCEВключить счетчик мониторинга производительностиЕсли установлено, RDPMC может выполняться на любом уровне привилегий, иначе RDPMC можно использовать только в кольце 0.
9OSFXSRПоддержка операционной системой инструкций FXSAVE и FXRSTORЕсли установлено, включает Потоковые расширения SIMD (SSE) инструкции и быстрое сохранение и восстановление FPU.
10OSXMMEXCPTПоддержка операционной системой немаскированных исключений с плавающей запятой SIMDЕсли установлено, включает немаскированные исключения SSE.
11UMIPПредотвращение инструкций в пользовательском режимеЕсли установлено, инструкции SGDT, SIDT, SLDT, SMSW и STR не могут быть выполнены, если CPL> 0.[1]
12LA57(не указано)Если установлено, включает 5-уровневую подкачку.[3]
13VMXEРасширения виртуальных машин включитьвидеть Intel VT-x x86 виртуализация.
14SMXEВключены расширения безопасного режимавидеть Надежная технология выполнения (ТЕКСТ)
16FSGSBASEВключает инструкции RDFSBASE, RDGSBASE, WRFSBASE и WRGSBASE.
17PCIDEPCID ВключитьЕсли установлено, включает идентификаторы контекста процесса (PCID).
18OSXSAVEXSAVE и расширенные состояния процессора включены
20SMEP[4]Включение защиты выполнения в режиме супервизораЕсли установлено, выполнение кода в более высоком звенеть генерирует вина.
21SMAPПредотвращение доступа в режиме супервизора Давать возможностьЕсли установлено, доступ к данным в более высоком кольце генерирует вина.[5]
22PKEКлюч защиты включитьСм. Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32.

CR5-7

Зарезервировано, тот же случай, что и CR1.

Дополнительные регистры управления в x86-64 серии

EFER

Регистр включения расширенных функций (EFER) - это регистр для конкретной модели добавлено в AMD K6 процессор, чтобы позволить SYSCALL / SYSRET, а затем для входа и выхода длинный режим. Этот регистр становится архитектурным в AMD64 и был принят Intel как IA32_EFER. Его номер MSR - 0xC0000080.

КусочекЦель
0SCE (расширения системных вызовов)
1DPE (только AMD K6: включение предварительной выборки данных)
2SEWBED (только AMD K6: отключение спекулятивного EWBE #)
3GEWBED (только AMD K6: глобальное отключение EWBE #)
4L2D (только AMD K6: отключение кэша L2)
5-7Зарезервировано, читается как ноль
8LME (включение длительного режима)
9Зарезервированный
10LMA (активный длинный режим)
11NXE (Нет-Казнь Давать возможность)
12СВМЭ (Безопасная виртуальная машина Давать возможность)
13LMSLE (включение ограничения сегмента в длинном режиме)
14FFXSR (Fast FXSAVE / FXRSTOR)
15TCE (расширение кэша переводов)
16–63Зарезервированный

CR8

CR8 - это новый регистр, доступный в 64-битном режиме с использованием префикса REX. CR8 используется для определения приоритета внешних прерывает и называется регистром приоритета задач (TPR).[2]

В AMD64 Архитектура позволяет программному обеспечению определять до 15 классов приоритета внешних прерываний. Классы приоритета пронумерованы от 1 до 15, причем класс приоритета 1 является самым низким, а класс приоритета 15 - самым высоким. CR8 использует четыре младших бита для определения приоритет задачи а остальные 60 бит зарезервированы и должны быть записаны нулями.

Системное программное обеспечение может использовать регистр TPR, чтобы временно блокировать прерывания с низким приоритетом от прерывания задачи с высоким приоритетом. Это достигается путем загрузки TPR со значением, соответствующим прерыванию с наивысшим приоритетом, которое должно быть заблокировано. Например, загрузка TPR со значением 9 (1001b) блокирует все прерывания с классом приоритета 9 или меньше, в то же время позволяя распознавать все прерывания с классом приоритета 10 или более. Загрузка TPR с 0 разрешает все внешние прерывания. Загрузка TPR с 15 (1111b) отключает все внешние прерывания.

При сбросе TPR сбрасывается на 0.

XCR0 и XSS

XCR0 или расширенный контрольный регистр 0 - это контрольный регистр, который используется для переключения хранения или загрузки регистров, связанных с конкретными функциями ЦП, с помощью инструкций XSAVE / XRSTOR. Он также используется с некоторыми функциями для включения или отключения способности процессора выполнять соответствующие инструкции. Доступ к нему можно получить с помощью привилегированных инструкций XSETBV и непривилегированных XGETBV.[6]

КусочекЦель
0X87 (x87 FPU / MMX State, примечание, должно быть '1')
1SSE (включение набора функций XSAVE для регистров MXCSR и XMM)
2AVX (включение AVX и набор функций XSAVE можно использовать для управления регистрами YMM)
3BNDREG (включение MPX и набор функций XSAVE могут использоваться для регистров BND)
4BNDCSR (включение MPX и набор функций XSAVE могут использоваться для регистров BNDCFGU и BNDSTATUS)
5opmask (включение AVX-512 и набор функций XSAVE можно использовать для opmask AVX, AKA k-mask, regs)
6ZMM_hi256 (включение AVX-512 и набор функций XSAVE можно использовать для верхних половин нижних регистров ZMM)
7Hi16_ZMM (включение AVX-512 и набор функций XSAVE можно использовать для верхних регистров ZMM)
8Зарезервированный
9PKRU (набор функций XSAVE может использоваться для регистра PKRU, который является частью ключи защиты механизм.)
10Зарезервировано (должно быть "0")
11Состояние пользователя Control-Flow Enforcement Technology (CET)
12Состояние супервизора Control-Flow Enforcement Technology (CET)
13XAAD (вспомогательная функция обнаружения асинхронных аномалий для включения тостера анклава)[7] для криптографических подпрограмм.)
14–63Зарезервировано (должно быть "0")

Также есть IA32_XSS MSR, который находится по адресу 0DA0h. IA32_XSS MSR управляет битами XCR0, которые считаются состоянием «супервизора» и должны быть невидимы для обычных программ. Он работает с привилегированными инструкциями XSAVES и XRSTORS, добавляя состояние супервизора к данным, с которыми они работают. Проще говоря, если состояние X87 было включено в XCR0, а состояние PT было включено в IA32_XSS, инструкция XSAVE сохраняла бы только состояние X87, в то время как привилегированный XSAVES сохранял бы состояния X87 и PT. Поскольку это MSR, к нему можно получить доступ с помощью инструкций RDMSR и WRMSR.

КусочекЦель
0–7Зарезервированный; должно быть 0.
8PT (позволяет сохранять и загружать девять MSR трассировки процессора.)
9–12Зарезервированный; должно быть 0.
13HDC (позволяет сохранять и загружать MSR IA32_PM_CTL1.)
14–63Зарезервированный; должно быть 0.

Смотрите также

Рекомендации

  1. ^ а б Корпорация Intel (2016). «4.10.1 Идентификаторы контекста процесса (PCID)». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF). Том 3A: Руководство по системному программированию, часть 1.
  2. ^ а б "Руководство программиста по архитектуре AMD64, том 2: Системное программирование" (PDF). AMD. Сентябрь 2012. с. 127 и 130. Получено 2017-08-04.
  3. ^ «5-уровневый пейджинг и 5-уровневый EPT» (PDF). Intel. Май 2017. с. 16. Получено 2018-01-23.
  4. ^ Фишер, Стивен (21 сентября 2011 г.). «Защита выполнения в режиме супервизора» (PDF). Конференция NSA Trusted Computing, 2011 г.. National Conference Services, Inc. Архивировано с оригинал (PDF) на 2016-08-03. Получено 2017-08-04.
  5. ^ Анвин, Х. Питер (21 сентября 2012 г.). «x86: Предотвращение доступа в режиме супервизора». LWN.net. Получено 2017-08-04.
  6. ^ «Глава 13, Управление состоянием с помощью набора функций Xsave» (PDF). Руководство разработчика программного обеспечения для архитектур Intel (R) 64 и IA-32, том 1: Базовая архитектура. Корпорация Intel (2019 г.). Получено 23 марта 2019.
  7. ^ https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/storing_keys_in_the_secure_enclave

внешняя ссылка