内存的分段与分页

虚拟地址经过内存管理单元处理(MMU)成物理地址,然后再访问。
经过段内存管理单元处理变成线性地址,再经过页内存管理单元处理变成物理地址。
但目前的系统实际上只存在分页,而不存在分段。
常见的cs代码段,ds数据段,ss堆栈段,es拓展段等等这些段表面上是存在的,里面也是有值的,但是其段选择子对应的基址却是0。相当于不分段。
分页的具体流程是什么样呢?以32位系统为例,一般采用2级分页形式。
即页目录项和页表项再到具体的页。
一页为4K大小,页目录项和页表项的大小也是4K,其中每一项的大小为4B,所以页目录项和页表项的个数是1024个。

32位

一个32位的虚拟地址划分为高10位、中10位和低12位。
高10位用来在页目录项中查找页表项的地址,中10位用来在页表项中查找页的地址,低12位(4K)确定具体地址偏移。
页目录项的地址存在CR3寄存器中,因为页目录项和页表项是4K大小的,即4K对齐,所以低12位可以忽略,页表项每个4B的内容,高20位是具体内存页的地址,低12位存放着该页其他信息(读/写RW,脏D,存在P等)。
寻址空间为 1024 * 1024 * 4K = 4G

64位

64位地址,通常只使用低48位,低12位用于确定页内偏移,其余的36位分给页表,分成4级,每个级占9位。页大小依旧是4K,但页表中每一项变成了8B,所以每页有512项(9位)。4K大小即低12位不用,依然来存放状态信息。

寻址空间为 5125125125124K = 256T

参考
https://cloud.tencent.com/developer/article/1421792
https://www.cnblogs.com/huaweiyun/p/15402432.html
https://www.cnblogs.com/lanrenxinxin/p/4735027.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值