内存管理笔记七、页式内存管理
引言:内存管理就是要将各种媒介组建成一体,形成一个巨无霸似的虚拟存储系统。第六篇笔记,介绍了非固定分区内存管理方式,本篇笔记将分析其存在的问题,并就此引出页式内存管理。
在前面几篇笔记中,分别介绍了固定加载地址的内存管理(仅适用于单道编程)、固定分区的内存管理、非固定分区的内存管理和交换内存管理。固定分区的形式浪费内部的空间,造成内部碎片。非固定分区可以解决内部碎片,但是不利于程序增长。交换分区解决了程序增长,但也有外部碎片和空间增长困难的问题。
一、Swap交换存在的问题
1.1、大量的外部碎片
随着程序在内存与磁盘间的交换,内存将变得越来越碎片化,即内存将被不同程序分割成尺寸大小无法使用的小片空间。这种散步在进程之间的闲置空间称为外部碎片,这是因为从进程的粒度来看,这种碎片处于进程空间的外面,这种碎片化的进程也称为”外部碎片化“。
例如,我们运行8个程序,A、B、C、D、E、F、G、H,其启动、内存需要和交换过程如下:(偷懒直接截图啦)
在A~G,7个进程执行序列后,当前内存尚有200KB的闲置空间,分别处于地址1050KB ~1199KB和1550KB~1599KB。但因为不连续,所以无法容纳新的进程H,而进程H的空间需求只有200KB。随着进程的进进出出,外部碎片将浪费大量的内存空间。图2显示的是外部碎片化过程的示意图:
1.2、地址空间增长困难
除了外部碎片以外,交换的内存管理模式还存在着地址空间增长困难的问题:
1)、效率低下:指磁盘操作耗时,先将程序倒在磁盘上,再在内存寻找一片更大的空间将程序倒回来,这种做法效率低;
2)、交换能带来的空间增长有限:这个限制就是单一程序不能超过物理内存空间(减去操作系统占用部分)。
二、分页内存管理引入
2.1、Swap交换问题产生原因
想解决Swap交换存在的问题,要需要分析其产生的根源是什么。空间碎片化的根源是每个程序大小不一样,这样在空间分配时存在不一致性。解决的办法自然是将空间按照某种大小进行分配,只要将虚拟内存和物理内存分成一样的部分,我们称为页,按也进行内存分配可以解决外部碎片问题。
程序增长有限制是因为一个程序必须全部加在到内存才能运行,解决的办法就是使一个程序无需全部加载就可以运行,将需要的页面放在内存里,其他暂时不需要的页面放在