控制寄存器(CR0~CR3)用于控制和肯定处理器的操做模式以及当前执行任务的特性,如图4-3所示。CR0中含有控制处理器操做模式和状态的系统控制标志;CR1保留不用;CR2含有致使页错误的
线性地址;CR3中含有页目录表
物理内存基地址,所以该寄存器也被称为页目录基
地址寄存器PDBR(Page-Directory Base address Register)。
控制寄存器
1
.
CR0
中协处理器控制位
CR0的4个位:扩展类型位ET、任务切换位TS、仿真位EM和数学存在位MP用于控制80x86浮点(数学)
协处理器的操做。有关
协处理器的详细说明请参见第11章内容。CR0的ET位(标志)用于选择与
协处理器进行通讯所使用的协议,即指明系统中使用的是80387仍是80287
协处理器。TS、MP和EM位用于肯定浮点指令或WAIT指令是否应该产生一个设备不存在(Device Not Available,DNA)异常。这个异常可用来仅为使用
浮点运算的任务保存和恢复
浮点寄存器。对于没有使用
浮点运算的任务,这样作能够加快它们之间的切换操做。
(1)ET:CR0的位4是扩展类型(Extension Type)标志。当该标志为1时,表示指明系统中有80387
协处理器,并使用32位协处理器协议。ET=0指明使用80287协处理器。若是仿真位EM=1,则该位将被忽略。在处理器复位操做时,ET位会被初始化指明系统中使用的
协处理器类型。若是系统中有80387,则ET被设置成1,不然如有一个80287或者没有协处理器,则ET被设置成0。
(2)TS:CR0的位3是任务已切换(Task Switched)标志。该标志用于推迟保存任务切换时的协处理器内容,直到新任务开始实际执行协处理器指令。处理器在每次任务切换时都会设置该标志,而且在执行协处理器指令时测试该标志。
若是设置了TS标志而且CR0的EM标志为0,那么在执行任何协处理器指令以前会产生一个设备不存在异常。若是设置了TS标志但没有设置CR0的MP和EM标志,那么在执行协处理器指令WAIT/FWAIT以前不会产生设备不存在异常。若是设置了EM标志,那么TS标志对
协处理器指令的执行无影响,见表4-1。
表4-1 CR0中标志EM、MP和TS的不一样组合对协处理器指令动做的影响
CR0中的标志
|
指令类型
|
|
|
|
EM
|
MP
|
TS
|
浮点
|
WAIT/FWAIT
|
0
|
0
|
0
|
执行
|
执行
|
0
|
0
|
1
|
设备不存在(DNA)异常
|
执行
|
0
|
1
|
0
|
执行
|
执行
|
0
|
1
|
1
|
DNA异常
|
DNA异常
|
1
|
0
|
0
|
DNA异常
|
执行
|
1
|
0
|
1
|
DNA异常
|
执行
|
1
|
1
|
0
|
DNA异常
|
执行
|
1
|
1
|
1
|
DNA异常
|
DNA异常
|
在任务切换时,处理器并不自动保存
协处理器的上下文,而是会设置TS标志。这个标志会使得处理器在执行新任务
指令流的任什么时候候遇到一条
协处理器指令时产生设备不存在异常。设备不存在异常的处理程序可以使用CLTS指令清除TS标志,而且保存
协处理器的上下文。若是任务从没有使用过
协处理器,那么相应协处理器上下文就不用保存。
(3)EM:CR0的位2是仿真(EMulation)标志。当该位设置时,表示处理器没有内部或外部
协处理器,执行协处理器指令时会引发设备不存在异常;当清除时,表示系统有协处理器。设置这个标志能够迫使全部浮点指令使用软件来模拟。
(4)MP:CR0的位1是监控协处理器(Monitor coProcessor或Math Present)标志。用于控制WAIT/FWAIT指令与TS标志的交互做用。若是MP=一、TS=1,那么执行WAIT指令将产生一个设备不存在异 常;若是MP=0,则TS标志不会影响WAIT的执行。
2
.
CR0
中保护控制位
(1)PE:CR0的位0是启用保护(Protection Enable)标志。当设置该位时即开启了保护模式;当复位时即进入实地址模式。这个标志仅开启段级保护,而并无启用
分页机制。若要启用
分页机制,那么PE和PG标志都要置位。
(2)PG:CR0的位31是分页(Paging)标志。当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时全部
线性地址等同于
物理地址。在开启这个标志以前必须已经或者同时开启PE标志。即若要启用分页机制,那么PE和PG标志都要置位。
(3)WP:对于Intel 80486或以上的CPU,CR0的位16是
写保护(Write Proctect)标志。当设置该标志时,处理器会禁止
超级用户程序(例如
特权级0的程序)向用户级只读页面执行写操做;当该位复位时则反之。该标志有利于UNIX类操做系统在建立进程时实现写时复制(Copy on Write)技术。
(4)NE:对于Intel 80486或以上的CPU,CR0的位5是
协处理器错误(Numeric Error)标志。当设置该标志时,就启用了x87
协处理器错误的内部报告机制;若复位该标志,那么就使用PC形式的x87协处理器
错误报告机 制。当NE为复位状态而且CPU的IGNNE输入引脚有信号时,那么数学协处理器x87错误将被忽略。当NE为复位状态而且CPU的IGNNE输入引脚无 信号时,那么非屏蔽的数学协处理器x87错误将致使处理器经过FERR引脚在外部产生一个中断,而且在执行下一个等待形式浮点指令或WAIT/FWAIT 指令以前马上中止指令执行。CPU的FERR引脚用于仿真外部
协处理器80387的ERROR引脚,所以一般链接到中断控制器输入请求引脚上。NE标志、IGNNE引脚和FERR引脚用于利用外部逻辑来实现PC形式的外部
错误报告机制。
启用保护模式PE(Protected Enable)位(位0)和开启
分页PG(Paging)位(位31)分别用于控制分段和分页机制。PE用于控制分段机制。若是PE=1,处理器就工做在开启分段机制环境下,即运行在保护模式下。若是PE=0,则处理器关闭了分段机制,并如同8086工做于实地址模式下。PG用于控制
分页机制。若是PG=1,则开启了
分页机制。若是PG=0,
分页机制被禁止,此时
线性地址被直接做为
物理地址使用。
若是PE=0、PG=0,处理器工做在实地址模式下;若是PG=0、PE=1,处理器工做在没有开启
分页机制的保护模式下;若是PG=一、PE=0,此时因为不在保护模式下不能启用分页机制,所以处理器会产生一个通常保护异常,即这种标志组合无效;若是PG=一、PE=1,则处理器工做在开启了分页机制的保护模式下。
当改变PE和PG位时,必须当心。只有当执行程序至少有部分代码和数据在线性地址空间和物理地址空间中具备相同地址时,咱们才能改变PG位的设置。此时这部分具备相同地址的代码在
分页和未分页世界之间起着桥梁的做用。不管是否开启分页机制,这部分代码都具备相同的地址。另外,在开启分页(PG=1)以前必须先刷新页高速缓冲TLB。
在修改该了PE位以后程序必须马上使用一条跳转指令,以刷新处理器执行管道中已经获取的不一样模式下的任何指令。在设 置PE位以前,程序必须初始化几个系统段和控制寄存器。在系统刚上电时,处理器被复位成PE=0和PG=0(即实模式状态),以容许引导代码在启用分段和 分页机制以前可以初始化这些寄存器和数据结构。
3
.
CR2
和
CR3
CR2和CR3用于分页机制。CR3含有存放页目录表页面的物理地址,所以CR3也被称为PDBR。由于页目录表页面是页对齐的,因此该寄存器只有高20位是有效的。而低12位保留供更高级处理器使用,所以在往CR3中加载一个新值时低12位必须设置为0。
使用MOV指令加载CR3时具备让页高速缓冲无效的反作用。为了减小地址转换所要求的
总线周期数量,近几天访问的页目录和
页表会被存放在处理器的页高速缓冲器件中,该缓冲器件被称为转换查找缓冲区(Translation Lookaside Buffer,TLB)。只有当TLB中不包含要求的
页表项时才会使用额外的
总线周期从内存中读取页表项。
即便CR0中的PG位处于复位状态(PG=0),咱们也能先加载CR3。以容许对
分页机制进行初始化。当切换任务时,CR3的内容也会随之改变。可是若是新任务的CR3值与原任务的同样,处理器就无需刷新页高速缓冲。这样共享
页表的任务能够执行得更快。
CR2用于出现页异常时报告出错信息。在报告页异常时,处理器会把引发异常的
线性地址存放在CR2中。所以操做系统中的页
异常处理程序能够经过检查CR2的内容来肯定
线性地址空间中哪个页面引起了异常。