分段机制

分段机制可以用于实现多种系统的设计.分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元.段是虚拟地址到线性地址转换机制的基础,每个段由三个参数定义:段基地址;段限长;段属性.多个段映射到线性地址中的范围可以部分重叠或者覆盖,甚至完全重叠.

段的基地址,段属性,段限长存储在一个叫做段描述符的结构项中,在逻辑地址到线性地址映射过程中会用到这个描述符.段描述符保存在内存中的段描述表,段描述表是一个保存描述符项的简单数组.逻辑地址由16位段选择符和32偏移量组成,段选择符指定字节所在的段,偏移量指定该字节相对于段基地址的位置.线性地址是处理器线性地址空间的32地址.线性地址中含有为系统定义的所有段和系统表.

把逻辑地址转换成线性地址,处理器的操作情况如下:

(1)使用段选择符中偏移值(段索引)在GDT或LDT定位相应的段描述符,仅当一个新的段选择符加载到段寄存器时才需要这一步.

(2)利用段描述符检验段的权限和范围,以确保该段是可访问的且偏移量位于段界限内.

(3)把段描述符中取得的段基地址加上偏移量,最后形成线性地址.

如果没有开启分页机制,处理器就把线性地址直接映射到物理地址.也就是把线性地址直接送到处理器的地址总线上,如果启用了分页机制,就用二级转换把线性地址转换成热物理地址.

段描述符表

段描述符存储在由操作系统维护着的且仅由操作系统软件访问的受保护的内存区域的特殊数据结构中,并且由处理器的内存管理硬件来引用.描述符表长度可就,最多可以存储8192个8字节的描述符.虚拟地址空间共有16k个段,它被分成两半,一半由全局描述表映射到线性地址,另一半由局部描述表映射到线性地址.

当任务发生切换时,GDT不变,LDT变换成新的任务的LDT,因此GDT映射的地址空间是所有任务共享的,而LDT映射到的地址空间是在切换时被改变的.GDT中包含操作系统的段及所有任务各自的包含LDT的特殊的段,也就是GDT包含LDT的基地址.

段选择符

段选择符是一个16位的标识符.从左到右是13位索引值,1位表指示标志TI,2位特权级RPL.TI=0指定全局描述符表,TI=1指定局部描述表.特权级范围是0-3,0特权级最高.选择符通常由链接编辑器或链接加载器来设置或修改,而不是应用程序.处理器提供可以存放6个段选择符的寄存器,每个寄存器支持特定类型的内存引用(代码,数据,堆栈).段选择符被加载到段寄存器时段描述符也被加载到段寄存器的隐藏部分,当描述表中的描述符项改变时,要重新加载段寄存器中的隐藏部分以实现描述符项的同步更新.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值