现在的位置: 首页 > 技术文章 > 操作系统 > 正文

段描述符高速缓冲寄存器介绍

2014年02月27日 操作系统 ⁄ 共 3340字 ⁄ 字号 暂无评论 ⁄ 阅读 214 次
描述符高速缓存寄存器

描述符高速缓存寄存器

在实模式下,段寄存器含有段值,为访问存储器形成物理地址时,处理器引用相应的某个段寄存器并将其值乘以16,形成20位的段基地址。在保护模式下,段寄存器含有段选择子,如上所述,为了访问存储器形成线性地址时,处理器要使用选择子所指定的描述符中的基地址等信息。为了避免在每次存储器访问时,都要访问描述符表而获得对应的段描述符,从80286开始每个段寄存器都配有一个高速缓冲寄存器,称之为段描述符高速缓冲寄存器或描述符投影寄存器,对程序员而言它是不可见的。每当把一个选择子装入到某个段寄存器时,处理器自动从描述符表中取出相应的描述符,把描述符中的信息保存到对应的高速缓冲寄存器中。此后对该段访问时,处理器都使用对应高速缓冲寄存器中的描述符信息,而不用再从描述符表中取描述符。

  各段描述符高速缓冲寄存器之内容如下表所示。其中,32位段基地址直接取自描述符, 32位的段界限取自描述符中20位的段界限,并根据描述符属性中的粒度位转换成以字节为单位。其它十个特性根据描述符中的属性而定,“Y”表示“是”,“N”表示“否” ,“R”表示必须可读,“W”表示必须可写,“P”表示必须存在,“D” 表示根据描述符中属性而定。 

  段描述符高速缓冲寄存器再处理器内,所以可对其进行快速访问。绝大多数情况下,对存储器的访问是在对应选择子装入到段寄存器之后进行的,所以,使用段描述符高速缓冲寄存器可以得到很好的执行性能。 

  段描述符高速缓冲寄存器之内保存的描述符信息将一直保存到重新把选择子装载到段寄存器时再更新程序员尽管不可见段描述符高速缓冲寄存器,但必须注意到它的存在和它的上述更新时机。例如,在改变了描述符表中的某个当前段的描述符后,也要更新对应的段描述符高速缓冲寄存器的内容,即使段选择子未作改变,这可通过重新装载段寄存器实现。 

-------------------------------------------------------------------------------------------------------------

在实模式(dos)下直接访问4GB内存的方法(没有装载XMS驱动程序Himem.sys的情况)。 

基本原理

1.物理地址形成的统一性 

无论CPU在实方式下或保护方式下,其物理地址的形成都将使用段描述符高速缓冲寄存器。其差别是: 

在实方式下,每当向段寄存器赋予新的内容(段地址)时,段描述符高速缓冲寄存器的基地址值相应发生改变,其值为16×SEG,这就线性基地址;CPU最终形成的物理地址为基地址值加偏移量。段描述符高速缓冲寄存器的界限值和属性值始终不变。当CPU复位后,CPU的工作模式为实方式,段描述符高速缓冲寄存器的界限值自动设置为FFFFH。因此,CPU能够访问内存的空间为0~10FFEFH(FFFFH×16+FFFFH),每个段的大小为64KB。 

在保护方式下,每当向段寄存器赋予新的内容SEL(选择字)时,段描述符高速缓冲寄存器的内容将由SEL对应的段描述符更新;段描述符高速缓冲寄存器的基地址值、界限值和属性值依据段描述符的设置而发生改变。段的基地址可设置在4GB内存的任意地址处,段的最大界限值可达FFFFFFFFH(4GB-1)。在不分页的情况下,CPU最终形成的物理地址同样是基地址值加偏移量。所以,CPU能够整个访问4GB内存空。 

显然,对于CPU在形成物理地址时,在实方式下与在0特权级不分页的保护方式下是相同的。只是段的基地址和段的大小设置范围不同。工作方式确定是由控制寄存器CR0的最低位PE位决定的,若PE为0,则工作在实方式;若PE为1,则工作在保护方式。在通过PE位的改变时,就进行了工作方式切换。这种切换只影响段描述符高速缓冲寄存器的基地址值运算方式,不影响段描述符高速缓冲寄存器的段界限值。 

2.直接访问4GB内存 

当CPU复位后,CPU处于实方式下,尽管在实方式下可执行诸如“MOV AX,[ESI]”指令的32位寄存器间接寻址操作,但是ESI的内容必须在0~FFFFH范围内,否则,将引起13号异常中断。 

基于CPU物理地址形成的统一性,在实方式下直接访问4GB内存的关键是扩大段描述符高速缓冲寄存器的界限值。使诸如“MOV AX,[ESI]”指令的32位寄存器间接寻址操作实现4GB内存的访问。然而,CPU在实方式下并没有提供改变段描述符高速缓冲寄存器的界限值的操作指令。改变段描述符高速缓冲寄存器的内容只能在保护方式下进行,即向段寄存器赋予段的选择字SEL,段描述符高速缓冲寄存器的内容将由SEL对应的段描述符更新。当CPU从保护方式切换到实方式时,段描述符高速缓冲寄存器的内容不发生变化。 

因此,在DOS实方式下直接访问4GB内存之前,让CPU进入保护方式下,通过装载具有4GB界限的段描述符到段描述符高速缓冲寄存器中去。然后返回到实方式下。CPU就可以通过32位寄存器间接寻址操作实现4GB内存的访问。

给我留言

留言无头像?



×