5.2.8 段页式存储管理

段页式存储管理兼顾了段式在逻辑上清晰和页式在管理上方便的优点。段页式存储管理将用户作业或进程分段,每段定义一组逻辑上完整的程序和数据。每个段对应一个二维地址空间。以段为单位分配内存,然后将段式相对地址转换成绝对地址。

1.基本思想

为每一个装入内存的作业建立一张段表,并且对每一段要建立一张页表。段表的长度由作业分段的个数决定,段表中的每一个表目指出本段的页表始址和长度。页表的长度由对应段所分的页的个数决定,页表中的每一个表目指出本段的逻辑页号与内存块号的对应关系。

(1)等分主存

把整个主存分成大小相等的存储块,称为内存块,并从0开始依次递增。

(2)进程的地址空间采用分段方式

按程序的自然逻辑关系,将进程的逻辑地址空间分成若干段,而每一段有自己的外部段名和内部段号(同分段技术)。

(3)每一段又采用分页方法

按照内存块大小将每一段划分成若干页。每段都从零开始,为自己段的各页依次编上连续的页号。

(4)逻辑地址结构

逻辑地址是二维地址,包括段号S和段内地址(或称为段内偏移)WS。WS又被分割成段内页号P和页内地址d。因此,段页式存储管理中的逻辑地址用3个参数表示:段号S、页号P、页内地址d,记为<S,P,d>。

指令中的逻辑地址形式如下,其中,WS=P×块长+d。

5.2.8 段页式存储管理 - 图1

2.内存分配

内存以内存块为单位分配给每个进程。当进程装入时,以页为单位将所有的页一次性装入内存,每一页存放在一个内存块中。因此每一个段中的页号虽是连续的,但每一页可以不连续存放在主存物理空间中。

3.段表、页表、段表地址寄存器

为了进行地址转换,系统为每个进程建立一个段表,并且为该进程段表中的每一个段建立一个页表。为指出运行进程的段表地址,系统通过段表基址寄存器和段表长度寄存器(两者统称为段表地址寄存器)来指出进程的段表起始地址和段表长度。

段号、各段的页表起始地址和页表长度由段表给出。页表用于记录各个逻辑页号与内存块的对应关系。

段页式管理中,段表和页表的关系如图5-6所示。

5.2.8 段页式存储管理 - 图2

图 5-6 段页式管理中段表和页表的关系

4.地址转换

在没有快表的情况下,地址转换过程如下:

1)地址转换硬件将段表地址寄存器内容与指令地址部分中的段号S相加(按段表的表目长进行适当移位后相加),得到欲访问段S在该进程的段表中的表目入口地址。

2)从该表的表目中得到该段的页表起始地址,并将其与地址部分中的页号P相加后,得到欲访问页P在该段的页表中的表目入口地址。

3)从该页表表目中取出其对应的块号与指令地址部分中的页内地址d拼成主存的绝对地址。

上述转换过程中,首先通过段表查到页表,然后通过页表查到内存块,最后形成物理地址,根据物理地址访问指令或存取数据,因此,一条指令的执行实际需要访问内存3次。为提高执行速度,引入了快表,快表一般应包含段号、页号、块号、该段页表长、存取控制信息等。

使用快表和使用分页和分段一样,每次进行地址转换时,同时进行直接映射(查找页表)和相关映射(查找快表)的地址转换工作。当相关映射地址转换成功,就自动停止直接映射工作。相关映射步骤如下:

1)以段号、页号为索引,同时对快表的各表目进行比较。

2)如果匹配,则比较页表长度和存取控制信息,以判断访问的合法性。若不合法,则停止地址转换工作,发出相应的中断信号。

3)取出块号与页内地址d,拼成绝对地址,并按此地址访问内存。

4)若在快表中查不到该表目,则通过直接映射找到对应的内存块号,同时把有关信息装入快表中。

5.段页式存储管理算法

与分页和分段中的情况一样,在地址转换过程中,硬件和软件密切配合,其操作流程如图5-7所示。

5.2.8 段页式存储管理 - 图3

图 5-7 段页式管理中地址转换的软、硬件处理过程

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

段页式存储管理是分段技术和分页技术的结合。因而它具有它们的全部优点,包括:

1)因为以页面为单位分配主存,所以没有空间紧缩拼接问题,也没有页外碎片存在。

2)便于处理变化的数据结构,段可动态增长。

3)便于共享,只要欲共享作业的段表中有相应的表目指向该共享段在主存中的页表地址。

4)提供了动态链接的便利。

5)便于控制存取访问。

其主要缺点是:

1)增加了硬件成本,因为需要更多的硬件支持。

2)增加了软件复杂性和管理开销。

3)同分页系统一样仍然存在页内碎片。