分页内存管理

为了解决交换系统存在的缺陷,出现了分页系统

分页系统的核心就是将虚拟内存空间和物理内存空间皆划分为大小相同的页面,如4KB、8KB或16KB等,并以页面作为内存空间的最小分配单位,一个程序的一个页面可以存放在任意一个物理页面里。

这样,由于物理空间是页面的整数倍,并且空间分配以页面为单位,将不会再产生外部碎片。同时,由于一个虚拟页面可以存放在任何一个物理页面里,空间增长也容易解决:只需要分配额外的虚拟页面,并找到一个闲置的物理页面存放即可。

在分页系统下,一个程序发出的虚拟地址由两部分组成:

页面号
页内偏移值

如图12-3所示:
在这里插入图片描述

例如,对于32位寻址的系统,如果页面大小为4KB,则页面号占20位,页内偏移值占12位。

为了解决程序比内存大的问题,我们可以允许一个进程的部分虚拟页面存放在物理页面之外,也就是磁盘上。在需要访问这些外部虚拟页面时,再将其调入物理内存。由此,交换系统的所有缺陷均被克服。

地址翻译

从上面的分析可以看出,分页系统要能够工作的前提是:

对于任何一个虚拟页面,系统知道该页面是否在物理内存中,如果在的话,其对应的物理页面是哪个;

如果不在的话,则产生一个系统中断(缺页中断),并将该虚页从磁盘转到内存,然后将分配给它的物理页面号返回。也就是说,页面管理系统要能够将虚拟地址转换为物理地址。该翻译过程如下所示。

在这里插入图片描述

因此,分页系统的核心是页面的翻译,即从虚拟页面到物理页面的映射。而这个翻译过程由内存管理单元(MMU)完成。

MMU接收CPU发出的虚拟地址,将其翻译为物理地址后发送给内存。内存单元按照该物理地址进行相应访问后读出或写入相关数据,如图12-4所示。

在这里插入图片描述

内存管理单元对虚拟地址的翻译只是对页面号的翻译,即将虚拟页面号翻译成物理页面号。而对于偏移值,则不进行任何操作。这是因为虚拟页表和物理页表大小完全一样,虚拟页面里的偏移值和物理页面里的偏移值完全一样,因此无须翻译。

**那么内存管理单元是通过什么手段完成这种翻译的呢?当然是查页表。**对于每个程序,内存管理单元都为其保存一个页表,该页表中存放的是虚拟页面到物理页面的映射。每当为一个虚拟页面寻找到一个物理页面后,就在页表里面增加一个记录来保留该虚拟页面到物理页面的映射关系。随着虚拟页面进出物理内存,页表的内容页不断发生变化。

在程序发出一个虚拟地址给内存管理单元后,内存管理单元首先将地址里面页号部分的字位分离出来,然后判断该虚拟页面是否有效,是否存放在内存,是否受到保护

如果页面无效,即该虚拟页面不存在或没有在内存,也就是说该虚拟页面在物理内存里面没有对应。如果该页面受到保护,即对该页面的访问被禁止,则产生一个系统中断来处理这些特殊情况。对于无效页面访问,需要终止发出该无效访问的进程。对于合法但不在物理内存中的页面,我们通过缺页中断将该虚拟页面放进物理内存。对于受保护的页面,同样终止该进程。

这里有一点要解释的就是非法虚拟页面。什么叫做虚拟页面非法呢?程序在加载前所使用的一切地址均是虚拟地址,即程序存在于虚拟空间。而虚拟空间的大小与系统的寻址长度有关。例如,32位寻址的系统虚拟地址空间为232-1,即一个程序最多可以有232-1条指令。但是一个程序可能没有这么多条指令。事实上,大部分程序都不会占满整个虚拟空间。这样,就有一部分虚拟空间是空的,即程序没有使用的部分。这部分空间就是非法虚拟空间。如果一个程序访问了这片空间,即判定为非法,而无须再判断该虚拟页面是否在物理内存。比如一个程序大小为100KB,如果该程序试图访问虚拟地址100KB以上的地址,即视为非法访问。进行这种访问的程序即为程序错误或失效。

如果页面有效且在物理内存,又没有受保护,则使用该虚拟页面号作为索引,找到页表中对应该虚拟页面的记录,读取其对应的物理页面号,如图12-5所示。

在这里插入图片描述

**那么内存管理单元是怎么知道一个页面是否有效,是否被保护,是否在物理内存呢?这个简单,将这些信息储存在页表里面即可。**这样,页表不只是用来进行翻译,还用来进行页面的各种状态判断,因此,页表在分页系统里面的地位举足轻重。

总结

  • MMU将虚拟地址翻译为物理地址
  • 翻译的手段是页表
  • 翻译前先会对虚拟地址进行合法性验证

参考

Linux的内存分页管理 - Vamei - 博客园

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值