现在的位置: 首页 > 综合 > 正文

80×86的保护虚地址模式

2013年08月01日 ⁄ 综合 ⁄ 共 2633字 ⁄ 字号 评论关闭

  在保护模式下,80x86支持虚拟存储器的功能,一个任务可运行多达16KB个段,每个段最大可为4GB,故一个任务最大可达64T的虚拟地址。保护模式下运行的程序分为4个特权等级:0、1、2、3,操作系统核心运行在最高特权等级0;用户程序运行在最低特权等级3。
  80x86中有完善的特权检查机制,既能实现资源共享,又能保证程序和数据的安全和保密、任务之间的隔离。

保护虚地址模式下的寻址
  与实地址模式相同,在保护模式下,一个存储单元的地址也是由段基地址和段内偏移两部分组成。段内偏移,除扩展到全地址(32位)外,与实地址方式下区别不大。这两种寻址方式的根本区别在于如何确定段基地址。
  实地址模式下,段寄存器的内容×16(即左移4位)就形成段基地址,故段基地址是20位的,只能寻址1MB。
 在保护模式下,段基地址是32位的,所以不能由段寄存器的内容直接形成32位的段基地址,而要经过转换。

 80x86中,内存中有一个表,每个表项包含32位的段基地址。为了适应多用户、多任务操作系统的需要,一个段还要有一些其他信息,例如,段的大小和读写权限、段的类型等。一个段用一个8字节的描述符来描述,这些描述符构成了一个表项,称为段描述符表。
 段描述符中的段基地址加上32位的段内偏移量就可以寻址一个存储单元。段基地址(32位)和段内偏移(32位)形成的地址称为线性地址(32位)。
 在80x86处理器内有分页的MMU,当启用页机制时(CR0最高位PG=1),经过分页机制可以把线程地址转换为存储器的物理地址;当不启用分页机制时(CR0的PG=0),线程地址即为内存的物理地址。保护方式下的段内偏移量为32 位,故一个段最大可达4GB。
  在80x86中为了能够快速寻址,对每个段寄存器都增加了一个扩展部分,称为段描述符缓冲器,用于暂存当前段相对应的描述符。这时,段寄存器用于存放该段的描述符在描述符表中的索引值,又称为段选择符(器)。

描述符与描述符表
  描述符表定义了用于80x86系统的所有的段。80x86共有3种类型的描述符表,分别是全局描述符表GDT、局部描述符表LDT和中断描述符表IDT。GDT和IDT只有一个,LDT可以有若干个,每个任务一个。
  最多可以有8K(8192=2^13)个描述符。每个描述符描述一个段,包括段的基址、界限和其他特性。
  (1) 全局描述符表GDT
  GDT含有系统中每一个任务都可以访问的段描述符,一般包括系统使用的代码段、数据段和堆栈段、各任务状态段、系统中所有的局部描述符表的描述符等。
  (2) 局部描述符表LDT
  局部描述符表包含了一个任务的专用描述符。操作系统为每个任务建立一个LDT。LDT可以包含代码段、数据段、堆栈段、任务门和调用门。
  从每个任务的虚拟地址空间来看,整个虚拟地址空间可以分成两半,一半空间的描述符在全局描述符表中,另一半空间的描述符在局部描述符表中。每一个表都可以包含多达8192个描述符(即对应的空间可由8192个段组成),每个段最大可为4GB。故每个任务最大的虚拟地址空间可为:2×8192×4GB=64TB
  (3) 中断描述符表IDT
  中断描述符表包含了最多256个描述符,每个描述符包含一个中断服务程序的入口地址和属性。IDT中可以包含任务门、中断门和自陷门。
在系统中,每个描述符表都有一个与之对应的寄存器,它们分别是全局描述符表寄存器GDTR、局部描述符表寄存器LDTR和中断描述符表寄存器IDTR。
  GDTR与IDTR寄存器存放全局描述符表与中断描述符表的基址和界限。
 16位LDTR寄存器存放当前任务段的局部描述符表对应的描述符在全局描述符表中的索引值(LDT选择符),根据索引值,自动将该任务的局部描述符表的描述符装入程序不可见的高速缓冲器。
 (4) 描述符
  描述符有两大类:一类是段描述符,另一类是系统描述符。
  1) 段描述符
  段描述符的各个域是:
  (a) 段界限(20);
  (b) 段的基地址(32位);
  (c) 访问权限(8位)。
      其中G位用于段限制域所用的单位:当G位为0时,表示段限制单位为字节;当G位为1时,段限制单位为页(4KB)。
  以上内容分散在描述符的不同字节中,这种不规整的安排完全是为了与286兼容。
  2)系统描述符
  系统描述符定义了特殊的系统数据段和控制转移机构。
 特殊的系统数据段是指令含有局部描述符表的段和含有任务状态的段;控制转移机构则是指各种控制门。因此,在系统描述符描述了有关各种操作系统表、任务和门的信息。
  特殊的系统数据段描述符与段描述符具有相似的结构,与段描述符相比,不同的仅仅是访问权限域,它具有了不同的含义。
 另一类系统控制描述符为控制转移描述符,这类描述符通常称为门描述符,简称门。门描述符定义了一个代码段的保护入口。有各种门描述符,包括调用门、任务门、中断门自陷门。这些门为源和目标之间的控制转移提供了一个间接方法,这种方法允许系统自动地完成保护检查。门也使系统设计者可以控制操作系统的入口点。调用门用于改变特权级,任务门用于任务切换,而中断门和自陷门用于确定中断服务程序。
  由于门主要用于控制转移,所以要确定目标程序的入口。目标程序的入口同样是由选择符(从描述符表中取出目标程序段的描述符)和偏移量两部分组成。

保护虚地址方式下的存储器寻址
  在保护虚地址方式下,各个段寄存器中的内容,不再是段基地址,而是一个用于从全局描述符表GDT或局部描述符表LDT中检索该段相应描述符的段选择符。最低两位为请求特权级RPL(Requested Privilege Level),用于段访问时的保护目的。从硬件角度看,DS、ES、FS 或GS寄存器的RPL必须小于或等于被选择的描述符的DPL。而对于SS选择器,两者必须相等。实际上Intel高速的连接于构造软件总是使RPL与相应的DPL相等。
 第2位TI指示从哪个描述符表中去读取描述符。TI=0,指示从GDT中读取描述符;TI=1,指示从LDT中读取描述符。剩下的13位即为此段描述符在描述符表中的索引,2^13=8192,故可区分8192个描述符。
  每当一个选择符被装载入一个段寄存器时,80x86的硬件自动从描述符表中取出相应的描述符,加载至相应的高速缓冲寄存器中。一旦装入,此后对此段的访问都使用此高速缓冲寄存器中的描述符信息,而不用再去取描述符,直至对段寄存器重新装载。
 

抱歉!评论已关闭.