多级页表为什么能够减少进程对内存的占用?

引言

  1. 操作系统中页表的作用是完成物理地址到逻辑地址的映射。在块大小为4K的32位系统中,逻辑地址的低12位为页内偏移,高20位为页索引。CPU通过查找页表将20位的页索引转换为数据块的物理地址(同样也是20位),然后与低12位的页内偏移拼接,形成最后的物理地址。
  2. 操作系统中页表的分配单位为进程。也就是说每个进程都有自己的页表,每个进程在创建时os会为其分配页表,进程终止时会回收页表(内存资源),并非整个操作系统只有一个页表。

单级页表存在的问题

单级页表也就是用一个页表完成整个所有地址的转换。32位的系统支持的内存最大大小为4GB(2^32B) 页索引长度为20位,共有1M(2^20)个页表项,每个页表项大小为4B,因此单级页表的大小为1M×4B=4MB 由于使用的是单级页表,每次进程创建时操作系统会为每个进程分配4MB的空间作为页表。即使这个进程不访问主存,也要为他分配4MB的页表空间!!!!
这是何等的浪费!!!
综上,单级页表存在的最大问题就是 操作系统为每个进程分配固定大小的空间作为页表,这个固定大小的空间必须能覆盖所有页表项,因为os不知道进程到底需要访问多大的主存,操作系统不能实现按需分配页表空间。

多级页表的为什么能节约内存空间

32位的操作系统中通常采用两级页表。页索引的高10位作为一级页表的索引,一级页表页表项中存储的是二级页表的物理地址。低10位作为二级页表的索引,二级页表页表项存储的是数据块的物理地址。一级页表的大小为4KB每一个二级页表的大小为4KB操作系统在创建进程时只需要为每个进程分配一个一级页表,然后根据进程申请的内存空间,再为进程分配二级页表。
在这里插入图片描述
假设某一个进程申请了1GB的内存空间;
按照单级页表的管理方式,页表占用空间为4MB
按照二级页表的管理方式,页表占用空间为4KB+(1GB÷4KB÷1K)×4KB (1个一级页表+256个二级页表)=4KB+1MB

总结

多级页表和单级页表相比,优点在于页表空间的分配方式比较灵活。单级页表在进程创建时为可能用到的所有的页表项分配空间,而多级页表可以在使用时根据内存的占用为进程分配页表空间,可以实现按需分配而不是预先全部分配。
除此之外多级页表的页表空间采用离散分配的方式,与连续分配相比可以很大程度上提高内存利用率。多级页表的缺点在于在完成一次地址转换需要多次访问页表(比如二级页表中,需要访问一次一级页表和一次二级页表),但计算机世界里中时间和空间本身就是一对矛盾的存在。。。事实上二级页表也不会比单级页表慢很多,因为数据访问通常符合局部性原理,而且地址转换由MMU硬件完成外加TLB的应用,这些都导致了多级页表要比单级页表更适用于当前操作系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值