查看: 1895|回复: 0

存储器段式和理机制

[复制链接]
发表于 2009-7-3 22:18:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
(1)段选择器与段描述符
      在保护方式下,逻辑地址可以表示为段选择器:偏移地址。此时,逻辑地址和物理地址之间不存在直接的数学关系,逻辑地址可能不存在于实际的存储器中,因此,保护方式的逻辑地址被称为虚拟地址。虚拟地址中的偏移地址和实方式一样,都是根据指令中操作数的寻址方式确定的
       段选择器为16位的段寄存器值,但其是一个指针,指向一个由操作系统定义的段描述符表中的一个段描述符。选选择器格式如下
       当前段的段描述符中段表中的索引号              TI            RPL
      其中低两位规定了选择器的请求特权级别RPL。RPL的设置是为了防止低特权级程序访问受高特权级程序保护的数据
      段选择器中的TI位为指示器。当TI=0时,段选择器指向系统的全局地址空间所对应的全局段描述符表GDT,全局地址空间用来存放运行在系统上的所有任务使用的数据和代码段,例如操作系统服务程序以及通用库等。是一个操作系统只有一个全局地址空间,所有任务共享一个全局地址空间,即系统中的GDT,局部地址空间用来存放一个任务将独自占有的特定程序和数据,因此系统中每个任务都有其对应的局部地址空间,即每个任务都有LDT
       系统中的GDT和LDT均是长度不定的数据结构,称为一个段描述符,这样他们最少包含8192个独立的项,每一项有8个字节长,称为一个段描述符,这样,段描述符表最多占据64KB。段描述符描述了处理器对段进行访问时所需要的信息,主要包含线性存储器地址空间中段的基地址和段限量,以及有关段的控制信息,因此,段描述符在存储器中的一个段和一个任务之间开成了一个链。不论是全局地址空间还是局部地址空间中的一个段,如果没有段描述符,系统就无法对它进行访问。
          段描述符可分为系统段描述符(S=0)和非系统段描述符(S=1),非系统段描述符对应为数据段、代码段和堆栈段;系统段描述符对应一个系统段,其中包括任务状态段TSS、局部描述符表LDT和各种门(调用门、任务门、中断门、隐井门)
         其各控制位如下所述
       非系统段描述符
        15    14    13    12    11   10    9    8     7   6     5    4    3     2    1   
        段基地址                           (24-31)G D     0     0   段限量16~19
       P DPL S 段类型    A                   段基地址(16~23)
        段基地址(0~15)
        段限量(0~15)
       系统段描述符
        15    14    13    12    11   10    9    8     7   6     5    4    3     2    1
        段基地址                          (24~31) G 0    0    0    段限量16~19
        段基地址(0~15)
        段限量(0~15)
        P为存在位,P=1,对应段已经存在于主存储器中,反之,则不在主存中  ,需要从碰盘上调入,访问该段,会出现异常。
        G为粒度(段的长度单位):G=1,以页为单位(386以上,1段=4KB~4GB);反之以字节为单位(286,1段=1B~64KB)
        D为操作数长度:D=1,操作为32位,反之则为16位。
        A为访问位:A=1,已访问过;反之没有访问过,操作系统利用A对段的使用率进行统计。
        DPL,为描述符的特权级:从高~低为0~3级,用来防止一般的用户程序访问操作系统的对应段
        段选择器的高13位为索引号,为该段的段描述符在段描述符表中的偏移地址,段描述符表在主存中的基地址由描述符表寄存器提供。通过从段描述符表中读出当前段的段描述符,进而得到该段的段基址(32)位,与指令中的偏移地址相加,即得到操作数的线性地址。对于80286处理器,基线性地址与存储器操作数的物理地址相同。对于80386处理器及以后的微处理器,若分页无效,则线性地址即为物理地址。因此,段选则器的高14位用来确定存储器中的一个段,可实现对2^14个段的管理,这样,对于80286来说,可提供的虚拟存储空间为1GB。对80386以及后续的机型来说,可提供虚拟存储空间为64TB
        段描述符高速缓存寄存器
在保护方式下,每个段寄存器都有一个16位可见部分和一个程序无法访问的不可见部分。
         由前述可知,对存储器寻址方式的操作数进行访问时,需要对存储器进行两次访问,即首先到存储器中的段表找出描述符,从段描述符中得到段基地址后,需要再次访问存储器才能得到操作数,这样大大降低寻址存储器操作数的速度,为了解决这一个问题,80286及其后续CPU设置了程序不可见的段描述符高速缓存寄存器来存储段描述符。段选择器的装入,对数据段由传送指令来实现,对代码段由跳转指令和子程序调用指令等实现,一但装入完成,处理器硬件会自动将段选择器所指向的段描述符内容装入段描述符高速缓存寄存器中,以后对存储器中该 段的访问,就可以直接由高速缓存寄存器中得到段基址,将其与指令中给出的段内偏移相加得到物理地址,从而缩短了访问存储器的时间。也就是说,利用描述符高速缓存寄存器的硬件支持,使得采用描述符这样的数据结构并不降低对内存的访问速度
       描述符寄存器
描述符表寄存器属于系统地址寄存器。80286以其以后续CPU的硬件中用GDTR LDTR IDTR来存放描述表在物理地址中的基地址和段限量的寄存器
       全局描述符表寄存器GDTR为48位寄存器,用来保存全局描述符表的32基位基地址和16位段介限。16位段界限表明GDT表的长度最多为64KB。对于GDTR的读和写必须在操作系统中分别用LGDT和SGDT
        IDTR也是一个48位的寄存器,用来保存中断描述表的32位基地址和16位段界限。16位段界限。
        LDTR包含的可见16位LDT选择器和程序不可见的用于存放LDT基地址和LDT界限的高速缓存寄存器。16位的LDT选择器确定了LDT描述符在GDT中的索引号。系统初始化时,要将此索引号置入LDTR的高速缓存寄存器中,然后由操作系统从GDT中取出LDT描述符的基地址及限量值置入LDTR的高速缓存寄存器中,于是存储器便根据此高速缓存寄存器的值来确定局部描述符表的起始地址和段限量。LDTR中的LDT选择器的读出和写入需要由操作系统分别LLDT和SLDT来完成。
       TSR为16位的寄存器,用来保存当前任务的TSS状态的16位选择器
  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|维修人员 ( 鲁ICP备17033090号 )

GMT+8, 2024-4-30 02:12 , Processed in 0.194104 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表