5.2.6 页式存储管理

分区管理方式实现了多道程序共享主存;设计相对简单,不需要更多的软硬件开销;存储保护的手段也较简单。但因为每道作业或程序必须存放在一个或多个连续存储区域,导致了严重的碎片问题,使得内存的利用率不高。页式存储管理允许程序存放在不连续的区域,减少碎片。这里的页式存储管理是指静态页式存储管理,也称为基本分页管理。页式存储管理是作业或进程在执行前,将作业或进程的程序段和数据全部装入内存的各个内存块,并通过页表和硬件地址转换机构将逻辑地址转换为物理地址。

1.基本原理

(1)内存空间分页

内存空间分页采用内存等分的方式。将内存划分成相同大小的若干个存储块(frame),称为内存块或帧,块号从0开始连续编号。内存块的大小由硬件确定,它一般为2的整数次幂。

(2)逻辑空间分页

逻辑空间分页采用程序等分的方式。将一个进程的逻辑地址空间划分成若干个大小相等的部分,每一部分称为页面或页,页号从0开始编号。用户程序的划分由系统自动完成,对用户是透明的。页的大小与块的大小一致。

(3)逻辑地址

逻辑地址由两个部分组成。前一部分表示该地址所在页面的页号;后一部分表示页内位移,即页内地址(页内地址是相对地址)。如果两部分构成的地址长度为32位,其中0~11位为页内位移,12~31位为页号,则表示每页的大小为4KB(212),地址空间中最多可容纳1M(220)个页面。

2.内存分配与去配

操作系统以内存块为单位,将内存分给作业或进程。根据其长度确定页面数,一个作业有多少页,装入内存时就给它分配多少块内存空间。作业必须全部装入,但内存块可以不相邻,即一个作业或进程的全部页可以分别装入物理上不相邻的内存块中。

操作系统主要通过页表、内存空间使用表(主存物理块表)来进行内存的分配。内存空间使用表记录内存块是否已经分配,以及当前剩余的空闲块数等信息,通常使用位示图来存储表示。

在进行内存分配时,先查看系统空闲块数是否能满足作业的要求。如果不能满足,则不进行分配,作业不能装入内存;若能满足,则根据作业需要,从位示图中找出一些为“0”的位进行分配,并将这些位设置成“1”,从空闲块数中减去本次占用的块数,按找到的位计算出对应的块号。当一个作业或进程执行结束,则应收回其所占的内存块,并清除该进程的页表。根据归还的块号计算出该块在位示图中对应的位置,将占用标志修改成“0”,并将归还块数加入到空闲块数中。

(1)计算块号

当找到一个为“0”的位后,根据它所在的字号(行)、位号(列),计算出对应的块号。

块号=字号×字长+位号

(2)计算块号i在位示图中的位置

字号=[i/字长]

位号=i mod字长

3.页表与地址转换

为了解决进程的页号连续而块号不连续的问题,操作系统为每个进程建立了一张页面映像表,简称为页表。通过页表,可以找到每个页面在内存中对应的物理块。页表一般驻留在内存的某个固定区域中。

为了提高访问速度,硬件通常提供页表基地址(首址)寄存器和页表长度寄存器以及快表。系统会将页表的一部分存放在快表中。此外,当进程被调度程序选中投入运行前,系统从该进程的PCB中将其页表的首地址和长度取出,分别送入页表基地址寄存器和页表长度寄存器中。

地址转换采用动态重定位。进程运行前,由操作系统将该进程对应页表的基地址送入页表基地址寄存器。当进程执行时,CPU得到其逻辑地址,由硬件自动按照设定的页面大小将逻辑地址分为两个部分:页号和页内地址,然后通过页表基地址寄存器找到页表,按照页号查“页表”,得到该页对应的块号,再与页内地址拼接得出要访问的绝对地址。关系式如下:

绝对地址=块号×块长+页内地址

4.页面共享和存储保护

在分页系统中,共享进程可以共同访问共享程序的页面,所以共享的方法是使这些共享进程的逻辑地址空间中的页指向相同的存储块(其中放有共享数据)。图5-4中表示了3个进程共享放在内存块2中的数据。每个进程运行时由自己的页表进行地址映射,实现了多个进程共享一个程序。

5.2.6 页式存储管理 - 图1

图 5-4 页式存储管理中页面共享

页面共享中必须小心处理的一个问题是共享页中的信息保护问题。当一个进程正从共享页读数据时,要防止另一进程修改该页中的数据。在大多数执行共享的系统中,将程序分为过程区和数据区。不可修改的过程称为纯过程或可再入过程,它是可以共享的。私有的可修改数据和过程不可共享。

在页式存储管理中,存储保护有多种,其中主要的两种方式是:

(1)地址越界保护

将页号与页表的长度比较,若页号大于等于页表的长度,说明此次访问的逻辑地址已经超过本进程的地址空间,系统产生地址越界中断。

(2)存取控制保护

在页表中增加一些标志位,用来指出该页的信息是否是“可读可写、只读、只可执行、不可访问”。若向“只读块”写入信息,则指令停止执行,产生中断信号。总之,当违反规定的访问权限时,系统将产生一个“非法操作”的程序性中断事件。

图5-5给出了转换过程和地址越界保护的示意图。

5.2.6 页式存储管理 - 图2

图 5-5 页式存储管理地址转换和地址越界保护示意图

5.快表

进程的PCB中存放该进程对应的页表起始地址和长度,PCB和页表均保存在内存中,在地址变换时,需要访问主存两次,即由PCB找到页表的起始地址和长度,然后访问页表,得到物理地址。最后还要根据物理地址访问指令或存取数据,这样延长了指令执行周期,降低了执行速度。

为提高执行速度,在地址变换机构中加入一个高速联想寄存器,构成一个快表,也称为转换后援缓冲区(Translation Lookaside Buffer,TLB)。它的查找速度极快,但造价高,一般容量都很小。快表中登记了页表中的一部分页号与内存块号的对应关系,一般存放的是当前执行进程中最常用的页号及所对应的块号,可快速查找,提高了指令执行速度。

6.页式存储管理的优缺点

页式存储管理的优点如下:

·有效解决了碎片问题(不要求连续存放)。

·提高了主存的利用率。

页式存储管理的缺点如下:

·因为作业或进程要求全部装入,当可用内存块小于其要求时,作业或进程则必须等待。

·存在内碎片(最后一页总有一部分空间空闲)。

·所共享的信息在逻辑上是不完整的。操作系统将程序划分为页,但页与源程序无逻辑关系,难以实现以模块为单位进行分配、共享和保护。