80386保护模式存储器寻址(1)

逻辑地址(Logical Address

包含在机器语言指令中用来指定一个操作数或一条指令的地址。每一个逻辑地址都由一个段和一个偏移量组成,偏移量指明了从段的开始到实际地址之间的距离。

线性地址(Linear Address

是一个32位无符号整数,可以用来表示高达4GB的地址。

物理地址Physical Address

用于存储器芯片级存储器单元寻址。物理地址由32位无符号整数表示。

CPU控制单元通过一种称为分段单元(segmentation unit)的硬件电路把一个逻辑地址转换成线性地址;接着,第二个称为分页单元(paging unit)的硬件电路把一个线性地址转换成物理地址。

硬件中的分段

80386模型开始,Intel微处理器以两种不同的方式执行地址转换,这两种方式分别称为实模式和保护模式。

段寄存器

一个逻辑地址由两部分组成:一个段标识符和一个指令段内相对地址的偏移量。段标识符是一个16位长的字段,称为段选择符(Segment Selector),而偏移量是一个32位长的字段。CPU提供了6个段寄存器csssdsesfsgs来存放段选择符,以快速方便地找到段选择符。其中3个段寄存器有专门的用途:cs为代码段寄存器,指向包含程序指令的段;ss为栈段寄存器,指向包含当前程序栈的段;ds为数据段寄存器,指向包含静态数据或者外部数据的段,而剩下的esfsgs都只能用作数据段寄存器。也就是说,在某个时刻,对程序员来说,存储器最多由6个段组成,1个代码段,1个栈段和最多4个数据段。

段描述符

每个段由一个8字节的段描述符(Segment Descriptor)表示,它描述了段的特征。段描述符放在全局描述符表(Global Descriptor Table, GDT)或局部描述符表(Local Descriptor Table, LDT)中。通常只定义一个GDT,而每个进程除了存放在GDT中的段之外,如果还需要创建附加的段,就可以有自己的LDTGDT在主存中的地址存放在gdtr寄存器中,当前正被使用的LDT的地址存放在ldtr寄存器中。段寄存器中仅仅存放段选择符,每个段选择符包含一下字段:13位的索引,用于选择8192213)个全局描述符或局部描述符中的一个;TI标志指明段描述符是在GDT中(TI = 0)或在LDT中(TI = 1);2RPL字段,用于表示请求者的特权级。

参考文献:

1. 深入理解Linux内核 第二版

2. Linux内核完全注释

3. Intel 80386 Programmer's Reference Manual 1986

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值