Контрольні регістри

Контрольний регістр — регістр, що змінює або контролює поведінку процесора чи іншого системного пристрою, тісно пов'язаного з ЦП. Загальними завданнями, виконуваними контрольними регістрами є: контроль переривань, перемикання режимів адресації, керування сторінковим відображенням пам'яті, та контроль співпроцесора.

Контрольні регістри серії x86

CR0

Регістр CR0 є 32-бітним на 386 і старших процесорах. На x86-64, в режимі Long mode він (та інші контрольні регістри) є 64-бітним. CR0 має різні контрольні прапори, що модифікують (визначають) базові операції процесора.

БітІм'яПовне Ім'яОпис
31PGPagingЯкщо 1, дозволяє сторінкове відображення і використання CR3, в іншому разі забороняє його.
30CDCache disable
29NWNot-write through
18AMAlignment maskДозволена перевірка вирівнювання (alignment check), якщо прапор AM виставлено, AC прапор виставлено (в регістрі Eflags, на кільці 3)
16WPWrite Protect
5NENumeric errorДозволяє, коли виставлено, внутрішній формат виявлення помилок співпроцесора x87 (обчислення з рухомою комою), інакше дозволяє таку детекцію в PC стилі.
4ETExtension type
3TSTask switchedДозволяє зберігання котнексту завдання x87, тільки після того як x87 інструкція використана після перемикання завдання.
2EMEmulationЯкщо виставлено, x87 FPU (одиниця для обчислень з плаваючою точкою) є представлена, інакше ні.
1MPMonitor coprocesorКонтролює взаємодію WAIT/FWAIT інструкцій з прапором TS в CR0
0PEProtected Mode EnableЯкщо 1, система працює в захищеному режимі, інакше - в реальному.

CR1

Зарезервований регістр. Intel не розголошує чому[1].

CR2

Містить величину, що зветься Page Fault Linear Address (PFLA) - лінійна адреса помилки сторінки. Коли трапляється помилка сторінки (page fault), адреса команди, що запитувала цю сторінку, зберігається в даному регістрі.

Помилка сторінки - це апаратно згенероване переривання (interrupt) чи виняток (exception), для ПЗ, і стається воно, коли програма запитується сторінки, що є позначена в її адресному просторі, але відсутня в фізичній пам'яті (major page fault), або пристутня там, але її статус не визначено як «присутня» (minor page fault).

CR3

Використовується, коли дозволено віртуальну адресацію, отже коли прапор PG в CR0 виставлено. CR3 дозволяє процесору транслювати (переводити) віртуальні адреси у фізичні, оперуючи з директорією сторінок (page directory) і таблицями сторінок (page tables) для поточного завдання. Зазвичай, верхні 20 біт CR3 використовуються як регістр бази директорій сторінок (англ. page directory base register, PDBR). В традиційному 32-бітному захищеному режимі, x86 процесори використовують дворівневу схему відображення сторінок, де регістр CR3 містить вказівник на окрему сторінкову директорію (page directory), яка довжиною є 4096 байт, і яка розбита на 1024 4-байтні одиниці, кожна з яких — це вказівник на таблицю сторінок довжиною теж 4096 байт, і яка теж розбита на 1024 4-байтних вказівники, тепер вже на 4096 байтні блоки пам'яті, що звуться сторінками.

CR4

Використовується в захищеному режимі для контролю таких операцій як підтримка режиму віртуального 8086, дозвіл точок зупину вводу/виводу (I/O breakpoints), розширення розміру сторінки та машинний контроль за помилками апаратури (Machine-check exception (MCE)).

БітІм'яПовне ім'яОпис
16FSGSBASEДозвіл інструкцій RDFSBASE, RDGSBASE, WRFSBASE і WRGSBASE
14SMXESMX Enableдив. Trusted Execution Technology
13VMXEVMX Enableдив. Апаратна віртуалізація x86
12LA575-level paging enableАктивація 5-рівневої схеми трансляції сторінок
11UMIPUser-Mode Instruction PreventionЯкщо встановлено, інструкції SGDT, SIDT, SLDT, SMSW і STR не можуть виконуватися при CPL > 0[2]
10OSXMMEXCPTOperating System Support for Unmasked SIMD Floating-Point Exceptionдозволяє немасковані винятки SSE.
9OSFXSROperating System Support for FXSAVE and FXSTOR instructionsМає бути виставлене для використання SSE інструкцій, дозволяє швидке FPU збереження та відновлення.
8PCEPerformance-Monitoring Counter enableЯкщо виставлено, RDPMC може виконуватися на всякому рівні, інакше тільки на нульовому кільці (рівень ядра).
7PGEPage Global Enabled
6MCEMachine Check ExceptionДозволяє, якщо виставлено, переривання машинної перевірки (machine check interrupts)
5PAEPhysical Address ExtensionЗмінює макет таблиці сторінки для трансляції 32-бітної віртуальної адреси в розширену 36-бітну фізичну.
4PSEPage Size ExtensionЯкщо невиставлений, розмір сторінки є 4KB, інакше - збільшений до 4MB, або, з PAE, до 2MB.
3DEDebugging Extension
2TSDTime Stamp DisableЯкщо виставлено, інструкція RDTSC може виконуватися тільки на кільці 0, інакше - за будь-якого рівня привілеїв.
1PVIProtected Mode Virtual InterruptsДозволяє апаратну підтримку прапора віртуального переривання (VIF) в захищеному режимі.
0VMEVirtual 8086 mode extensionsЯк і прапор віртуальних переривань; дозволено якщо виставлено.

Додаткові контрольні регістри в x86-64 серії

EFER

Extended Feature Enable Register (EFER) — регістр, що з'явився у процесорах AMD K6. Біти цього регістру призначені для дозволу чи заборони інструкцій SYSCALL/SYSRET, керування режимом no-execute, входу/виходу в/з Long mode, та для інших системних налаштувань. Регістр виявився настільки важливим, що був адаптований і компанією Intel для своїх процесорів. Його MSR-індекс — 0xC0000080.

Біт Призначення
63:12 Резервовано
11 Біт активування заборони виконання (англ. no execute), NXE)
10 IA-32e mode active (LMA)
9 Резервовано
8 IA-32e mode enable (LME)
7:1 Резервовано
0 System Call Extensions (SCE)

Джерела

Див. також

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.