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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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

Контрольні регістри серії x86[ред. | ред. код]

CR0[ред. | ред. код]

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

Біт Ім'я Повне Ім'я Опис
31 PG Paging Якщо 1, дозволяє сторінкове відображення і використання CR3, в іншому разі забороняє його.
30 CD Cache disable
29 NW Not-write through
18 AM Alignment mask Дозволена перевірка вирівнювання (alignment check), якщо прапор AM виставлено, AC прапор виставлено (в регістрі Eflags, на кільці 3)
16 WP Write Protect
5 NE Numeric error Дозволяє, коли виставлено, внутрішній формат виявлення помилок співпроцесора x87 (обчислення з рухомою комою), інакше дозволяє таку детекцію в PC стилі.
4 ET Extension type
3 TS Task switched Дозволяє зберігання котнексту завдання x87, тільки після того як x87 інструкція використана після перемикання завдання.
2 EM Emulation Якщо виставлено, x87 FPU (одиниця для обчислень з плаваючою точкою) є представлена, інакше ні.
1 MP Monitor coprocesor Контролює взаємодію WAIT/FWAIT інструкцій з прапором TS в CR0
0 PE Protected 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)).

Біт Ім'я Повне ім'я Опис
16 FSGSBASE Дозвіл інструкцій RDFSBASE, RDGSBASE, WRFSBASE і WRGSBASE
14 SMXE SMX Enable див. Trusted Execution Technology[en]
13 VMXE VMX Enable див. Апаратна віртуалізація x86
12 LA57 5-level paging enable Активація 5-рівневої схеми трансляції сторінок
11 UMIP User-Mode Instruction Prevention Якщо встановлено, інструкції SGDT, SIDT, SLDT, SMSW і STR не можуть виконуватися при CPL > 0[2]
10 OSXMMEXCPT Operating System Support for Unmasked SIMD Floating-Point Exception дозволяє немасковані винятки SSE.
9 OSFXSR Operating System Support for FXSAVE and FXSTOR instructions Має бути виставлене для використання SSE інструкцій, дозволяє швидке FPU збереження та відновлення.
8 PCE Performance-Monitoring Counter enable Якщо виставлено, RDPMC може виконуватися на всякому рівні, інакше тільки на нульовому кільці (рівень ядра).
7 PGE Page Global Enabled
6 MCE Machine Check Exception Дозволяє, якщо виставлено, переривання машинної перевірки (machine check interrupts)
5 PAE Physical Address Extension Змінює макет таблиці сторінки для трансляції 32-бітної віртуальної адреси в розширену 36-бітну фізичну.
4 PSE Page Size Extension Якщо невиставлений, розмір сторінки є 4KB, інакше - збільшений до 4MB, або, з PAE, до 2MB.
3 DE Debugging Extension
2 TSD Time Stamp Disable Якщо виставлено, інструкція RDTSC може виконуватися тільки на кільці 0, інакше - за будь-якого рівня привілеїв.
1 PVI Protected Mode Virtual Interrupts Дозволяє апаратну підтримку прапора віртуального переривання (VIF) в захищеному режимі.
0 VME Virtual 8086 mode extensions Як і прапор віртуальних переривань; дозволено якщо виставлено.

CR8[ред. | ред. код]

Додаткові контрольні регістри в 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)

Джерела[ред. | ред. код]

  1. Архівована копія. Архів оригіналу за 11 листопада 2020. Процитовано 1 січня 2019.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  2. Ricardo Neri. x86: Enable User-Mode Instruction Prevention. lwn.net (англ.). Архів оригіналу за 11 листопада 2020. Процитовано 22 листопада 2019.

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]