内存管理--三个地址,分页与分段的关系

内存管理--三个地址,分页与分段的关系

  (2012-03-25 21:58:35)
这里的三个地址,指的就是网上常说的逻辑地址、线性地址、物理地址。由于参考资料甚少,本来我自己理解有点小错误,看了《Intel参考手册》之后遂写此文,有错误地方皆在更正章中更正: http://blog.sina.com.cn/s/blog_6730a3aa01010xrc.html

首先,操作系统进入保护模式下运行,首先的就是实行内存分段机制,然后才能实行内存分页机制,分页是在分段的基础上实行的,我们从三个地址中分析如下:
逻辑地址:
是由段选择子和偏移量构成,逻辑地址是指在分段下的一种地址,比如我们在分段机制下的0x8:0x0100,那么这个地址就是逻辑地址,0x8是段选择子的值,决定使用哪个段,而0x0100是所使用的段内的偏移量,也就是第一个段的0x0100个字节。
线性地址:
线性地址就是在分段模式下的逻辑地址由分段机制翻译来的,还是比如刚才的0x8:0x0100这个逻辑地址,0x8是第一个段描述符的选择子,选择的是第一个描述符,第一个描述符里面存的有段基址和一系列属性,我们只看段基址,其他的不看,段基址加上偏移量0x0100就是内存中的实际地址,实际上这个就是叫做线性地址,当然我们还没讨论分页,那么最起码我们现在知道:在分段模式下,线性地址就是内存的实际地址。
物理地址:
物理地址最好解释了,就是实际的内存地址,那么上面的线性地址就可以这样说:在分段机制下,线性地址就是物理地址,那么我们再考虑分页,当开启分页的时候,线性地址就要和物理地址分开了,分段翻译成的线性地址还需要进一步的翻译,就是按照分页模式的翻译方式将线性地址翻译成物理地址。
还拿上面的0x8:0x0100来说,比如0x8这个选择子里面存的段基址是0x00000,那么将其翻译成线性地址为0x00000100,再取0x00000100的前10位来映射到页目录表里面,取0x00000100的中间10位来映射到页表中,再取0x00000100的后12位来映射成页内偏移量,就是这样。
所以,分段与分页的关系页就清楚了!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值