Cr0、Cr1、Cr2、Cr3、Cr4
控制寄存器
控制寄存器用于控制和确定CPU的操作模式。控制寄存器有Cr0
、Cr1
、Cr2
、Cr3
、Cr4
。Cr1
被保留了,Cr3
用于页目录表基址,其他的将继续详细讲解。
Cr0
Cr0
是一个十分重要的寄存器,可以说它是总开关的集合体。如下图所示:
PE
位是启用保护模式(Protection Enable)标志。若PE = 1
是开启保护模式,反之为实地址模式。这个标志仅开启段级保护,而并没有启用分页机制。若要启用分页机制,那么PE
和PG
标志都要置位。
PG
位是启用分页机制。在开启这个标志之前必须已经或者同时开启PE
标志。PG = 0
且PE = 0
,处理器工作在实地址模式下。PG = 0
且PE = 1
,处理器工作在没有开启分页机制的保护模式下。PG = 1
且PE = 0
,在PE
没有开启的情况下无法开启PG
。PG = 1
且PE = 1
,处理器工作在开启了分页机制的保护模式下。
WP
位对于Intel 80486
或以上的CPU
,是写保护(Write Proctect)标志。当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向用户级只读页面执行写操作;当CPL < 3
的时候,如果WP = 0
可以读写任意用户级物理页,只要线性地址有效。如果WP = 1
可以读取任意用户级物理页,但对于只读的物理页,则不能写。
Cr2
当CPU访问某个无效页面时,会产生缺页异常,此时,CPU会将引起异常的线性地址存放在CR2中,如下图所示:
Cr4
Cr4
的结构如下图所示:
VME
用于虚拟8086模式。PAE
用于确认是哪个分页,PAE = 1
,是2-9-9-12
分页,PAE = 0
是10-10-12
分页。PSE
是大页是否开启的总开关,如果置0,就算PDE
中设置了大页你也得是普通的页。