Created
November 21, 2024 08:48
-
-
Save un4ckn0wl3z/2843428529094723c010dc126db5842c to your computer and use it in GitHub Desktop.
CR0-CR4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
0.控制寄存器 | |
参考资料intel白皮书第三卷第二章第5小节 | |
控制寄存器(CR0,CR1(保留),CR2,CR3和CR4)决定处理器的工作模式和当前执行的任务的特性. | |
这些寄存器在所有32位模式和兼容模式下都是32位.在64位模式下,控制寄存器扩大到64位. | |
1.CR0寄存器 | |
CR0 - 包含控制处理器操作模式和状态的系统控制标志 | |
PG(Paging (bit 31 of CR0)) 设置时启用分页;清除时禁用分页.当分页被禁用时,所有的线性地址都被当作物理地址处理.如果PE标志(寄存器CR0的第0位)没有被设置,PG标志就没有作用;当PE标志被清除时,设置PG标志会导致一个一般保护异常(#GP). | |
CD(Cache Disable (bit 30 of CR0)) 当CD和NW标志清零时,处理器内部(和外部)缓存中的整个物理内存的内存位置的缓存被启用.当CD标志被设置时,缓存被限制.为了防止处理器访问和更新其缓存,CD标志必须被设置,并且缓存必须被无效化,这样就不会发生缓存命中. | |
NW(Not Write-through (bit 29 of CR0)) 当NW和CD标志被清零时,回写(对于奔腾4,英特尔至强,P6系列和奔腾处理器)或直写(对于Intel486处理器)被启用以用于命中缓存和失效周期的写入. | |
AM(Alignment Mask (bit 18 of CR0)) 设置时启用自动对齐检查;清除时禁用对齐检查.只有当AM标志被设置,EFLAGS寄存器中的AC标志被设置,CPL为3,并且处理器工作在受保护或虚拟8086模式下时,才会进行对齐检查.(32位下必须是4字节对齐 / 64位下必须是8字节对齐) | |
WP(Write Protect (bit 16 of CR0)) 当设置时,禁止超级用户程序(例如特权级0的程序)写入只读页;当清除时,允许超级用户程序(例如特权级0的程序)写入只读页(无论U/S位设置如何).这个标志有利于实现UNIX等操作系统所使用的创建新进程(forking)的写时拷贝法.这个标志必须在软件设置CR4.CET之前设置,只要CR4.CET=1,就不能清除它. | |
TS(Task Switched (bit 3 of CR0)) 任务切换标志位 | |
PE(Protection Enable (bit 0 of CR0)) 设置时启用保护模式;清除时启用实地址模式.这个标志并不直接启用分页.它只启用段级保护.要启用分页,必须同时设置PE和PG标志. | |
PG = 0且PE = 0 处理器工作在实地址模式下 | |
PG = 0且PE = 1 处理器工作在没有开启分页机制的保护模式下 | |
PG = 1且PE = 0 在PE没有开启的情况下 无法开启PG | |
PG = 1且PE = 1 处理器工作在开启了分页机制的保护模式下 | |
2.CR2寄存器 | |
CR2 - 包含页面错误线性地址(导致页面错误的线性地址). | |
PF页异常. 假设CPU访问某个无效页面时,会产生缺页异常,CPU会将引起异常的线性地址存放在CR2中. | |
3.CR3寄存器 | |
CR3 - 包含分页结构层次结构基址的物理地址和两个标志(PCD和PWT).第31 - 12位为页目录基址(10-10-12 -> PDT 2-9-9-12 -> PDPT);地址的低12位假定为0.因此,第一个分页结构必须与页面(4KB)边界对齐.PCD和PWT标志控制处理器内部数据缓存中该分页结构的缓存(它们不控制页面目录信息的TLB缓存). | |
PCD(Page-level Cache Disable (bit 4 of CR3)) 控制用于访问当前分页结构层次的第一个分页结构的内存类型.如果禁用分页,使用PAE分页,或者在CR4.PCIDE = 1时使用4级分页2或5级分页,则不使用该位.(缓存) | |
PWT(Page-level Write-Through (bit 3 of CR3)) 控制用于访问当前分页结构层次的第一个分页结构的内存类型.如果禁用分页,使用PAE分页,或者在CR4.PCIDE = 1时使用4级分页2或5级分页,则不使用该位.(直写) | |
4.CR4寄存器 | |
CR4 - 包含一组标志,这些标志可以实现一些架构扩展,并表明操作系统或对特定处理器功能的执行支持. | |
VME(Virtual-8086 Mode Extensions (bit 0 of CR4)) 设置时启用虚拟-8086模式下的中断和异常处理扩展;清除时禁用这些扩展.使用虚拟模式扩展可以提高虚拟-8086程序的性能,因为它消除了调用虚拟-8086监视器来处理执行8086程序时发生的中断和异常的开销,而是将中断和异常重定向到8086程序的处理程序.它还提供了对虚拟中断标志(VIF)的硬件支持,以提高在多任务和多处理器环境中运行8086程序的可靠性. | |
PVI(Protected-Mode Virtual Interrupts (bit 1 of CR4)) 当设置时,启用保护模式下对虚拟中断标志(VIF)的硬件支持;当清除时,禁用保护模式下的VIF标志. | |
TSD(Time Stamp Disable (bit 2 of CR4)) 当设置时,将RDTSC指令的执行限制在以特权级别0运行的程序中.当清零时,允许RDTSC指令在任何权限级别下执行. | |
DE(Debugging Extensions (bit 3 of CR4)) 对调试寄存器DR4和DR5的引用,当设置时,会产生一个未定义的操作码(#UD)异常;当清除时,处理器会对寄存器DR4和DR5的引用进行别名,以便于写在早期IA-32处理器上运行的软件兼容. | |
PSE(Page Size Extensions (bit 4 of CR4)) 当设置时,启用4-MByte页与32位分页;当清除时,将32位分页限制在4KBytes的页面. | |
PSE = 1 | |
10-10-12 PS = 1 4MPAGE 2-9-9-12 PS = 1 2MPAGE | |
PS = 0 4KPAGE PS = 0 4KPAGE | |
PSE = 0 | |
10-10-12 PS = 1 4KPAGE 2-9-9-12 PS = 1 2KPAGE | |
PS = 0 4KPAGE PS = 0 4KPAGE | |
PAE(Physical Address Extension (bit 5 of CR4)) 当设置时,使分页产生超过32位的物理地址.当清除时,限制物理地址为32位.在进入IA-32e模式之前必须设置PAE. | |
MCE(Machine-Check Enable (bit 6 of CR4)) 设置时启用机器检查异常;清除时禁用机器检查异常. | |
PGE(Page Global Enable (bit 7 of CR4)) (在P6系列处理器中引入)当设置时启用全局页面功能;当清除时禁用全局页面功能.全局页功能允许经常使用或共享的页面被标记为对所有用户都是全局的(在页目录指针表项,页目录项或页表项中使用全局标志,位8).全局页面不会在任务切换或写到寄存器CR3时从TLB中被刷新.当启用全局分页功能时,分页必须被启用(通过设置控制寄存器中的PG标志 CR0),然后再设置PGE标志.颠倒这个顺序可能会影响程序的正确性,并且处理器的性能会受到影响. | |
PCE(Performance-Monitoring Counter Enable (bit 8 of CR4)) 当设置时,使运行在任何保护级别的程序或过程能够执行RDPMC指令;当清除时,RDPMC指令只能在保护级别0下执行. | |
UMIP(User-Mode Instruction Prevention (bit 11 of CR4)) 当设置时,如果CPL>0,以下指令不能被执行:SGDT,SIDT,SLDT,SMSW和STR.试图执行这些指令会导致一般保护异常(#GP). | |
VMXE(VMX-Enable Bit (bit 13 of CR4)) VT | |
SMXE(SMX-Enable Bit (bit 14 of CR4)) "上帝模式" | |
KL(Key-Locker-Enable Bit (bit 19 of CR4)) 当设置时,LOADIWKEY指令被启用;如果对AES锁钥指令的支持已经被系统固件激活.CPUID.19H:EBX.AESKLE[位0]被枚举为1,AES密钥锁指令被启用.当清除时,CPUID.19H:EBX.AESKLE[位0]被枚举为0,执行任何Key Locker指令导致一个无效的操作码异常(#UD). | |
SMEP(SMEP-Enable Bit (bit 20 of CR4)) 0环不能执行3环地址 | |
SMAP(SMAP-Enable Bit (bit 21 of CR4)) 0环不能访问3环地址 | |
PKE(Enable protection keys for user-mode pages (bit 22 of CR4)) 4级分页和5级分页将每个用户模式的线性地址与一个保护密钥联系起来.当设置时,这个标志表示(通过CPUID.(EAX=07H,ECX=0H):ECX.OSPKE[位4])操作系统支持使用PKRU寄存器来指定每个保护密钥的用户模式线性地址是否可以被读取或写入.这个位还可以使用RDPKRU和WRPKRU指令访问PKRU寄存器. | |
CET(Control-flow Enforcement Technology (bit 23 of CR4)) 设置后可启用控制流执行技术.这个标志只有在CR0.WP被设置时才能被设置,而且必须在CR0.WP被清除之前被清除. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment