Linux-页表如何对物理内存进行映射

1.1 页框和页帧

        我们知道通过页表可以将虚拟内存映射到对应的物理内存,而操作系统对于物理内存的管理并不是以字节为单位的,而是将物理内存分为许多大小为4KB的块,称为页框页帧,这就是为什么我们在创建共享内存是建议将大小设定为4096字节的整数倍,而4KB也是操作系统与磁盘交互的基本单位(8个扇区),对于文件来说,文件的内容被存放在磁盘的大小为4KB的块中(Data Block),所以在进行磁盘级的IO操作时,就是将磁盘中的4KB的数据块加载到物理内存对应的页框中。

        而由于物理内存中存在许多的4KB块,OS为了管理好物理内存,需要知道每个块的使用情况,用名字为struct page结构体对每个块进行了描述,这样只需要一个struct page类型的数组就可以管理整个物理内存了。

1.2 页表的映射

        目前我们对页表的知识是有欠缺的,以32位机器为例,每一个字节的物理内存都需要虚拟内存与之对应,一个地址空间仅仅虚拟内存就占了2的32次方字节的大小,也就是4GB,所以页表的映射关系并没有这么简单。

        一个虚拟地址有32个比特位,OS将这32个比特位分为了10位、10位、12位,在每个进程中存在一张页表目录,该目录保存着2的10次方张页表,而前10位就是用来索引页表目录来找到对应的页表的,页表中存放的是对应页框的起始地址。2的12次方正好是4KB对应着一个页框的大小,最后12位是该虚拟内存在页框中的地址偏移量,所以虚拟地址的前10位用于索引页表,中间10位用于索引页框的地址,最后的12位就可以锁定具体的物理地址了。64位机器的原理和上述一样

接下来我们大概计算一下按上述说法一个进程的页表需要多大的内存,页目录1024*4也就是4Kb,页表中索引的是页框的地址,一个地址空间对应的物理内存有2的20次方个页框,所以只需要20个比特位就可以索引到所有的页框,那么页表的每个元素只需要3个字节接可以了,一个页表需要3*1024个字节,一共有1024个页表,所以一共需要的大小为4KB+3M的大小(上述大小是大概计算的并不准确)

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张呱呱_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值