码迷,mamicode.com
首页 > 其他好文 > 详细

操作系统核心原理-5.内存管理(下):分页内存管理

时间:2016-01-02 06:57:14      阅读:657      评论:0      收藏:0      [点我收藏+]

标签:

  在上一篇介绍的几种多道编程的内存管理模式中,以交换内存管理最为灵活和先进。但是这种策略也存在很多重大问题,而其中最重要的两个问题就是空间浪费和程序大小受限。那么有什么办法可以解决交换内存存在的这些问题呢?答案是分页,它是我们解决交换缺陷的“不二法门”。

一、分页内存管理

1.1 解决问题之道

  为了解决交换系统存在的缺陷,分页系统横空出世。分页系统的核心在于:将虚拟内存空间和物理内存空间皆划分为大小相同的页面,如4KB、8KB或16KB等,并以页面作为内存空间的最小分配单位,一个程序的一个页面可以存放在任意一个物理页面里

  (1)解决空间浪费碎片化问题

  由于将虚拟内存空间和物理内存空间按照某种规定的大小进行分配,这里我们称之为页(Page),然后按照页进行内存分配,也就克服了外部碎片的问题。

  (2)解决程序大小受限问题

  程序增长有限是因为一个程序需要全部加载到内存才能运行,因此解决的办法就是使得一个程序无须全部加载就可以运行。使用分页也可以解决这个问题,只需将当前需要的页面放在内存里,其他暂时不用的页面放在磁盘上,这样一个程序同时占用内存和磁盘,其增长空间就大大增加了。而且,分页之后,如果一个程序需要更多的空间,给其分配一个新页即可(而无需将程序倒出倒进从而提高空间增长效率)。

1.2 虚拟地址的构成与地址翻译

  (1)虚拟地址的构成

  在分页系统下,一个程序发出的虚拟地址由两部分组成:页面号和页内偏移值,如下图所示:

技术分享

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

  (2)地址翻译:虚拟地址→物理地址

  分页系统的核心是页面的翻译,即从虚拟页面到物理页面的映射(Mapping)。该翻译过程如下伪代码所示:

if(虚拟页面非法、不在内存中或被保护)
{
    陷入到操作系统错误服务程序
}
else
{
    将虚拟页面号转换为物理页面号
    根据物理页面号产生最终物理地址
}

  而这个翻译过程由内存管理单元(MMU)完成,MMU接收CPU发出的虚拟地址,将其翻译为物理地址后发送给内存。内存管理单元按照该物理地址进行相应访问后读出或写入相关数据,如下图所示:

技术分享

  那么,这个翻译是怎么实现的呢?答案是查页表,对于每个程序,内存管理单元MMU都为其保存一个页表,该页表中存放的是虚拟页面到物理页面的映射。每当为一个虚拟页面寻找到一个物理页面之后,就在页表里增加一条记录来保留该映射关系。当然,随着虚拟页面进出物理内存,页表的内容也会不断更新变化。

技术分享

1.3 页表

  页表的根本功能是提供从虚拟页面到物理页面的映射。因此,页表的记录条数与虚拟页面数相同。此外,内存管理单元依赖于页表来进行一切与页面有关的管理活动,这些活动包括判断某一页面号是否在内存里,页面是否受到保护,页面是否非法空间等等。

  页表的一个记录所包括的内容如下图所示:

技术分享

  由于页表的特殊地位,决定了它是由硬件直接提供支持,即页表是一个硬件数据结构。

1.4 分页系统的优缺点

  优点:

  (1)分页系统不会产生外部碎片,一个进程占用的内存空间可以不是连续的,并且一个进程的虚拟页面在不需要的时候可以放在磁盘中。

  (2)分页系统可以共享小的地址,即页面共享。只需要在对应给定页面的页表项里做一个相关的记录即可。

  缺点:页表很大,占用了大量的内存空间。

1.5 缺页中断处理

  在分页系统中,一个虚拟页面既有可能在物理内存,也有可能保存在磁盘上。如果CPU发出的虚拟地址对应的页面不在物理内存,就将产生一个缺页中断,而缺页中断服务程序负责将需要的虚拟页面找到并加载到内存。缺页中断的处理步骤如下,省略了中间很多的步骤,只保留最核心的几个步骤:

技术分享

二、页面置换算法

  如果发生了缺页中断,就需要从磁盘上将需要的页面调入内存。如果内存没有多余的空间,就需要在现有的页面中选择一个页面进行替换。使用不同的页面置换算法,页面更换的顺序也会各不相同。

2.1 页面置换的目标

2.2 随机更换算法

2.3 先进先出算法

2.4 第二次机会算法

2.5 时钟算法

2.6 最优更换算法

2.7 NRU(最近未被使用)算法

2.8 LRU(最近最少使用)算法

2.9 工作集与工作集时钟算法

参考资料

技术分享

邹恒明,《操作系统之哲学原理》,机械工业出版社

 

操作系统核心原理-5.内存管理(下):分页内存管理

标签:

原文地址:http://www.cnblogs.com/edisonchou/p/5094066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!