Řídicí registr - Control register
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
A kontrolní registr je registr procesoru který mění nebo řídí obecné chování a procesor nebo jiné digitální zařízení. Mezi běžné úkoly prováděné řídicími registry patří přerušit ovládání, přepínání režim adresování, stránkování ovládání a koprocesor řízení.
Řídit registry v x86 série
CR0
Registr CR0 je dlouhý 32 bitů na 386 a vyšší procesory. Na x64 procesory v dlouhý režim, je (a další řídicí registry) dlouhý 64 bitů. CR0 má různé řídicí příznaky, které mění základní provoz procesoru.
Bit | název | Celé jméno | Popis |
---|---|---|---|
0 | PE | Protected Mode Enable | Pokud 1, systém je v chráněný režim, jinak je systém v skutečný režim |
1 | MP | Sledujte koprocesor | Řídí interakci instrukcí WAIT / FWAIT s příznakem TS v CR0 |
2 | EM | Emulace | Pokud je nastaveno, není x87 jednotka s plovoucí desetinnou čárkou přítomný, pokud je jasný, přítomný x87 FPU |
3 | TS | Úkol přepnut | Umožňuje uložit kontext úlohy x87 po přepnutí úlohy pouze po použití instrukce x87 |
4 | ET | Typ rozšíření | Na 386 to umožnilo určit, zda je externí matematický koprocesor 80287 nebo 80387 |
5 | NE | Numerická chyba | Povolit interní x87 hlášení chyb s plovoucí desetinnou čárkou, pokud je nastaveno, jinak umožňuje detekci chyb ve stylu PC x87 |
16 | WP | Ochrana proti zápisu | Když je nastaveno, CPU nemůže zapisovat na stránky jen pro čtení, když je úroveň oprávnění 0 |
18 | DOPOLEDNE | Zarovnávací maska | Kontrola zarovnání povolena, pokud je nastaveno AM, příznak AC (v EFLAGS registr) nastavena a úroveň oprávnění je 3 |
29 | NW | Ne-odepsat | Globálně povolí / zakáže zápis do mezipaměti |
30 | CD | Mezipaměti deaktivovat | Globálně povolí / zakáže mezipaměť paměti |
31 | PG | Stránkování | Pokud 1, povolte stránkování a použijte § CR3 zaregistrujte se, jinak vypněte stránkování. |
CR1
Rezervováno, CPU hodí #UD při pokusu o přístup k výjimce.
CR2
Obsahuje hodnotu nazvanou Page Fault Linear Address (PFLA). Když dojde k chybě stránky, adresa, ke které se program pokusil získat přístup, je uložena v registru CR2.
CR3

Používá se, když virtuální adresování je povoleno, tedy když je bit PG nastaven v CR0. CR3 umožňuje procesoru převést lineární adresy na fyzické adresy vyhledáním adresáře stránky a tabulky stránek pro aktuální úkol. Horní 20 bitů CR3 se obvykle stává základní adresář stránek (PDBR), který ukládá fyzickou adresu položky adresáře první stránky. Pokud je PCIDE bit dovnitř CR4 je nastaveno, nejnižší 12 bitů se použije pro identifikátor kontextu procesu (PCID).[1]
CR4
Používá se v chráněném režimu k řízení operací, jako je podpora virtuálních 8086, povolení I / O zarážek, rozšíření velikosti stránky a výjimky kontroly stroje.
Bit | název | Celé jméno | Popis |
---|---|---|---|
0 | VME | Virtuální rozšíření režimu 8086 | Pokud je nastaveno, povoluje podporu pro příznak virtuálního přerušení (VIF) v režimu virtual-8086. |
1 | PVI | Virtuální přerušení v chráněném režimu | Pokud je nastaveno, povoluje podporu pro příznak virtuálního přerušení (VIF) v chráněném režimu. |
2 | TSD | Časové razítko Zakázat | Pokud je nastaveno, RDTSC instrukci lze provést, pouze když jste v prsten 0, jinak lze RDTSC použít na jakékoli úrovni oprávnění. |
3 | DE | Ladění Rozšíření | Pokud je nastaveno, povolí se ladění registrů založené na přerušení I / O přístup do prostoru. |
4 | PSE | Rozšíření velikosti stránky | Pokud není nastaveno, velikost stránky je 4 KiB, jinak se velikost stránky zvýší na 4 MiB Pokud je povolena PAE nebo procesor je v x86-64 dlouhý režim tento bit je ignorován.[2] |
5 | PAE | Rozšíření fyzické adresy | Pokud je nastaveno, změní rozložení tabulky stránek a převede 32bitové virtuální adresy na rozšířené 36bitové fyzické adresy. |
6 | MCE | Výjimka kontroly stroje | Pokud je nastaveno, povoluje, aby došlo k přerušení kontroly stroje. |
7 | PGE | Globální stránka povolena | Pokud je nastaven, překlady adres (záznamy PDE nebo PTE) mohou být sdíleny mezi adresními prostory. |
8 | PCE | Povolení čítače monitorování výkonu | Pokud je nastaveno, RDPMC lze spustit na libovolné úrovni oprávnění, jinak lze RDPMC použít pouze v kruhu 0. |
9 | OSFXSR | Podpora operačního systému pro pokyny FXSAVE a FXRSTOR | Pokud je nastaveno, povolí Streamování rozšíření SIMD (SSE) pokyny a rychlé ukládání a obnovení FPU. |
10 | OSXMMEXCPT | Podpora operačního systému pro nezjištěné výjimky s pohyblivou řádovou čárkou SIMD | Pokud je nastaveno, povolí nemaskované výjimky SSE. |
11 | UMIP | Prevence instrukcí v uživatelském režimu | Pokud je nastaveno, nelze provést pokyny SGDT, SIDT, SLDT, SMSW a STR, pokud CPL> 0.[1] |
12 | LA57 | (není uvedeno) | Pokud je nastaveno, povolí 5úrovňové stránkování.[3] |
13 | VMXE | Povolit rozšíření virtuálního počítače | vidět Intel VT-x x86 virtualizace. |
14 | SMXE | Povolit rozšíření bezpečnějšího režimu | vidět Trusted Execution Technology (TXT) |
16 | FSGSBASE | Povoluje pokyny RDFSBASE, RDGSBASE, WRFSBASE a WRGSBASE. | |
17 | PCIDE | PCID povoleno | Pokud je nastaveno, povoluje identifikátory kontextu procesu (PCID). |
18 | OSXSAVE | XSAVE a procesory Extended States Enable | |
20 | SMEP[4] | Povolení ochrany prováděné v režimu správce | Pokud je nastaveno, spuštění kódu ve vyšší prsten generuje a chyba. |
21 | SMAP | Prevence přístupu v režimu správce Umožnit | Pokud je nastaven, přístup k datům ve vyšším kruhu generuje a chyba.[5] |
22 | PKE | Ochranný klíč povolen | Viz příručka pro vývojáře softwaru Intel 64 a IA-32 Architectures. |
CR5-7
Vyhrazeno, stejný případ jako CR1.
Další kontrolní registry v x86-64 série
EFER
Rozšířená funkce Povolit registr (EFER) je a registr specifický pro daný model přidáno v AMD K6 procesor, který umožňuje povolení SYSCALL / Instrukce SYSRET a později pro vstup a výstup dlouhý režim. Tento registr se stává architektonickým v AMD64 a byl přijat Intel jako IA32_EFER. Jeho číslo MSR je 0xC0000080.
Bit | Účel |
---|---|
0 | SCE (rozšíření o systémová volání) |
1 | DPE (AMD K6 only: Data Prefetch Enable) |
2 | SEWBED (AMD K6 only: Speculative EWBE # Disable) |
3 | GEWBED (pouze AMD K6: Global EWBE # Disable) |
4 | L2D (pouze AMD K6: L2 Cache Disable) |
5-7 | Vyhrazeno, číst jako nula |
8 | LME (Long Mode Enable) |
9 | Rezervováno |
10 | LMA (Long Mode Active) |
11 | NXE (No-Execute Umožnit) |
12 | SVME (Zabezpečený virtuální stroj Umožnit) |
13 | LMSLE (Long Mode Segment Limit Enable) |
14 | FFXSR (Fast FXSAVE / FXRSTOR) |
15 | TCE (Extension Cache Extension) |
16–63 | Rezervováno |
CR8
CR8 je nový registr přístupný v 64bitovém režimu pomocí předpony REX. CR8 se používá k upřednostnění externích zařízení přerušení a označuje se jako registr prioritních úkolů (TPR).[2]
The AMD64 architektura umožňuje softwaru definovat až 15 externích tříd priorit přerušení. Prioritní třídy jsou očíslovány od 1 do 15, přičemž prioritní třída 1 je nejnižší a prioritní třída 15 nejvyšší. CR8 používá čtyři bity nižšího řádu pro specifikaci a priorita úkolu a zbývajících 60 bitů je rezervováno a musí být zapsáno nulami.
Systémový software může použít registr TPR k dočasnému zablokování přerušení s nízkou prioritou v přerušení úlohy s vysokou prioritou. Toho je dosaženo načtením TPR s hodnotou odpovídající přerušení s nejvyšší prioritou, které má být blokováno. Například načítání TPR s hodnotou 9 (1001b) blokuje všechna přerušení s třídou priority 9 nebo méně, přičemž umožňuje rozpoznat všechna přerušení s třídou priority 10 nebo více. Načtení TPR s 0 umožňuje všechna externí přerušení. Načtení TPR s 15 (1111b) zakáže všechna externí přerušení.
Při resetu je TPR vymazáno na 0.
XCR0 a XSS
XCR0, neboli Extended Control Register 0, je řídicí registr, který se používá k přepínání ukládání nebo načítání registrů souvisejících se specifickými funkcemi CPU pomocí instrukcí XSAVE / XRSTOR. Používá se také u některých funkcí k povolení nebo zakázání schopnosti procesoru provádět příslušné pokyny. Lze k němu přistupovat pomocí privilegovaných pokynů XSETBV a neprivilegovaných pokynů XGETBV.[6]
Bit | Účel |
---|---|
0 | X87 (x87 FPU / MMX State, note, must be '1') |
1 | SSE (XSAVE feature set enable for MXCSR and XMM regs) |
2 | AVX (povolení AVX a sadu funkcí XSAVE lze použít ke správě registrů YMM) |
3 | BNDREG (pro reg. BND lze použít povolení MPX a sadu funkcí XSAVE) |
4 | BNDCSR (povolení MPX a sadu funkcí XSAVE lze použít pro reg. BNDCFGU a BNDSTATUS) |
5 | opmask (AVX-512 povolit a sadu funkcí XSAVE lze použít pro AVX opmask, AKA k-mask, regs) |
6 | ZMM_hi256 (povolení AVX-512 a sadu funkcí XSAVE lze použít pro horní poloviny dolních ZMM regů) |
7 | Hi16_ZMM (povolení AVX-512 a sadu funkcí XSAVE lze použít pro horní reg. ZMM) |
8 | Rezervováno |
9 | PKRU (sadu funkcí XSAVE lze použít pro registr PKRU, který je součástí ochranné klíče mechanismus.) |
10 | Rezervováno (musí být „0“) |
11 | Stav stavu technologie Control-flow Enforcement Technology (CET) |
12 | Stav supervizora Control-flow Enforcement Technology (CET) |
13 | XAAD (Auxilary asynchronous anomaly detection feature to enable enclave toaster[7] pro kryptografické rutiny.) |
14–63 | Rezervováno (musí být „0“) |
K dispozici je také IA32_XSS MSR, který je umístěn na adrese 0DA0h. IA32_XSS MSR řídí bity XCR0, které jsou považovány za stav „supervizora“ a měly by být pro běžné programy neviditelné. Funguje s privilegovanými pokyny XSAVES a XRSTORS přidáním stavu správce k datům, s nimiž pracují. Zjednodušeně řečeno, pokud byl stav X87 povolen v XCR0 a stav PT byl povolen v IA32_XSS, instrukce XSAVE by ukládala pouze stav X87, zatímco privilegovaný XSAVES by ukládal jak stavy X87, tak PT. Protože se jedná o MSR, lze k němu přistupovat pomocí pokynů RDMSR a WRMSR.
Bit | Účel |
---|---|
0–7 | Rezervováno; musí být 0. |
8 | PT (Umožňuje ukládání a načítání devíti sledovacích procesorů MSR.) |
9–12 | Rezervováno; musí být 0. |
13 | HDC (Umožňuje ukládání a načítání IA32_PM_CTL1 MSR.) |
14–63 | Rezervováno; musí být 0. |
Viz také
- Univerzální registr
- Testovací registr
- Registr specifický pro model
- Debug registr
- Označit bajt
- Stavový registr
Reference
- ^ A b Intel Corporation (2016). "4.10.1 Identifikátory kontextu procesu (PCID)". Příručka pro vývojáře softwaru Intel 64 a IA-32 Architectures (PDF). Svazek 3A: Průvodce programováním systému, část 1.
- ^ A b „Příručka programátora architektury AMD64, díl 2: Programování systému“ (PDF). AMD. Září 2012. str. 127 a 130. Citováno 2017-08-04.
- ^ „5úrovňové stránkování a 5úrovňové EPT“ (PDF). Intel. Května 2017. str. 16. Citováno 2018-01-23.
- ^ Fischer, Stephen (21.09.2011). „Ochrana při provádění režimu správce“ (PDF). Konference o důvěryhodných počítačích NSA 2011. National Conference Services, Inc. Archivovány od originál (PDF) dne 3. 8. 2016. Citováno 2017-08-04.
- ^ Anvin, H. Peter (2012-09-21). „x86: Prevence přístupu v režimu správce“. LWN.net. Citováno 2017-08-04.
- ^ „Kapitola 13, Správa stavu pomocí sady funkcí Xsave“ (PDF). Intel (R) 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture. Intel Corporation (2019). Citováno 23. března 2019.
- ^ https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/storing_keys_in_the_secure_enclave