6.4 页式管理
在前面的几种存储管理方法中,进程使用的地址都是物理地址;进一步的存储管理方法通过引入进程的逻辑地址,把进程地址空间与实际存储位置分离,从而增加存储管理的灵活性。
将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。
图 页的划分
Ø 优点:
ü 没有外碎片,每个内碎片不超过页大小。
ü 一个程序不必连续存放。便于改变程序占用空间的大小(主要指随着程序运行而动态生成的数据增多,要求地址空间相应增长,通常由系统调用完成而不是操作系统自动完成)。
Ø 缺点:程序全部装入内存。
6.4.2静态页式管理
1 内存页面分配与回收
静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。
Ø 页表:内存中的一块固定存储区。页式管理时每个进程至少有一个页表。
Ø 请求表:用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;
Ø 存储页面表:整个系统有一个存储页面表,其描述了物理内存空间的分配使用状况。存储页面表有两种构成方法:①位示图法 ②空闲页面链表发
Ø
图 请求表示例
2 分配算法:
首先,请求表给出进程或作业要求的页面数。然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。如果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中。
图 页面分配算法流图
3 地址变换
首先,需要有一个装置页表始址和页表长度用的控制寄存器。系统所调度执行的进程页表始址和长度从请求表中取出送入控制寄存器中。然
后,由控制寄存器页表始址可以找到页表所在位置。
静态页式管理解决了分区管理时的碎片问题。但是,由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,该作业或进程只好等待。而且作业和进程的大小仍受内存可用页面数的限制。
6.4.3动态页式管理
动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和预调入页式管理。
请求页式管理和预调入页式管理在作业或进程开始执行之前,都不把作业或进程的程序段和数据段一次性地全部装入内存,而只装入被认为是经常反复执行和调用的工作区部分。其它部分则在执行过程中动态装入。请求页式管理与预调入页式管理的主要区别在它们的调入方式上。请求页式管理的调入方式是,当需要执行某条指令而又发现它不在内存时或当执行某条指令需要访问其它的数据或指令时.这些指令和数据不在内存中,从而发生缺页中断,系统将外存中相应的页面调入内存。
预调入方式是,系统对那些在外存中的页进行调入顺序计算。估计出这些页中指令和数据的执行和被访问的顺序,并按此顺序将它们顺次调入和调出内存。除了在调入方式上请求页式管理和预调入管理有些区别之外,其它方面这两种方式基本相同。因此,下面我们主要介绍请求页式管理。
请求页式管理的地址变换过程与静态页式管理时的相同,也是通过页表查出相应的页面号之后,由页面号与页内相对地址相加而得到实际物理地址,但是,由于请求页式管理只让进程或作业的部分程序和数据驻留在内存中,因此,在执行过程中,不可避免地会出现某些虚页不在内存中的问题。怎样发现这些不在内存中虚页以及怎样处理这种情况.是请求页式管理必须解决的两个基本问题。
第一个问题可以用扩充页表的方法解决。即与每个虚页号相对应,除了页面号之外,再增设该页是否在内存的中断位以及该页在外存中的副本起始地址。
图 加入中断处理后的页表
关于虚页不在内存时的处理,涉及到两个问题。第一,采用何种方式把所缺的页调入内存。第二,如果内存中没有空闲页面时,把调进来的页放在什么地方。也就是说,采用什么样的策略来淘汰已占据内存的页。还有,如果在内存中的某一页被淘汰,且该页曾因程序的执行而被修改,则显然该页是应该重新写到外存上加以保存的。而那些未被访问修改的页、因为外存已保留有相同的副本,写回外存是没有必要的。因此,在页表中还应增加一项以记录该页是否曾被改变。
动态页式管理的流程图如:
在动态页管理的流程中,有关地址变换部分是由硬件自动完成的。当硬件变换机构发现所要求的页不在内存时,产生缺页中断信号,由中断处理程序做出相应的处理。中断处理程序是由软件实现的。除了在没有空闲页面时要按照置换算法选择出被淘汰页面之外,还要从外存读入所需要的虚页。这个过程要启动相应的外存和涉及到文件系统。因此,请求页式管理是一个十分复杂的处理过程,内存的利用率的提高是以牺牲系统开销的代价换来的。