何为段页式管理

如题所述

把程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作业或进程所包含的段对应一个二维线形虚拟空间,也就是一个二维虚拟存储器。段式管理程序以段为单位分配内存,然后通过地址影射机构把段式虚拟地址转换为实际内存物理地址。

程序通过分段(segmentation)划分为多个模块,如代码段、数据段、共享段。其优点是:

¨ 可以分别编写和编译

¨ 可以针对不同类型的段采取不同的保护

¨ 可以按段为单位来进行共享,包括通过动态链接进行代码共享

6.5.2 段式管理的实现原理

1 段式虚存空间

段式管理把一个进程的虚地址空间设计成二维结构,即段号s与段内相对地址w。段具有以下特征:

段号与段号之间无顺序关系

段的长度是不固定的

每个段定义一组逻辑上完整的程序或数据

每个段是一个首地址为零的,连续的一维线性空间

根据需要,段长可动态增长

对段式虚地址空间的访问包括两个部分:段名和段内地址。

2 段式管理的内存分配与释放

段式管理中以段为单位分配内存,每段分配一个连续的内存区。由于各段长度不等。所以这些存储区的大小不一。而且,同一进程所包含的各段之间不要求连续。

段式管理的内存分配与释放在作业或进程的执行过程中动态进行。

进程对内存区的申请和释放可分为两种情况:

1、当进程要求调入某一段时,内存中有足够的空闲区满足该段的内存要求:采用和动态分区式管理相同的空闲区管理方法。

2、内存中没有足够的空闲区满足该段的内存要求:根据给定的置换算法淘汰内存中在今后一段时间内不再被CPU访问的段。

一次调入时所需淘汰的段数与段的大小有关,如果一个作业或进程的段数较多,且段长之间的差别较大,则有可能出现调入某个大段时,需淘汰好几个小段的情况。

任何一个段的段长都不允许超过内存可用区长度,否则将会造成内存分配出错。

除了初始分配之外,段的动态分配是在CPU所要访问的指令和数据不在内存时产生缺段中断的情况下发生的。因此,段的淘汰或置换算法实际上是缺段中断处理过程的一部分。

3 段式管理的地址变换

(1)段表(Segment mapping table)

段式管理程序在进行初始内存分配之前,首先根据用户要求的内存大小为一个作业或进程建立一个段表,以实现动态地址变换和缺段中断处理及存储保护等。段式管理通过段表来进行内存管理的。

段号:与用户指定的段名一一对应

始址:表示该段在内存或外存的物理地址

长度:表示该段在内存或外存的实际长度

存取方式:用来对该段进行存取保护的。只有处理机状态字中的存取控制位与段表中存取方式一致时才能访问该段。

内外栏:指出该段现在存储于外存还是内存中。

访问位:根据淘汰算法的需要而设

图 段表

(2)动态地址变换

一般我们在内存中给出一块固定的区域放置段表。当某进程开始执行时,管理程序首先把该进程的段表始址放入段表地址寄存器。通过访问段表寄存器、管理程序得到该进程的段表始址从而可开始访问段表。然后,由虚地址中的段号s为索引,查段表。

若该段在内存,则判断其存取控制方式是否有错。如果存取控制方式正确,则从段表相应表目中查出该段在内存的起始地址,并将其和段内相对地址w相加,从而得到实际内存地址。

如果该段不在内存,则产生缺段中断将CPU控制权交给内存分配程序。内存分配程序首先检查空闲区链,以找到足够长度的空闲区来装入所需要的段。如果内存中的可用空闲区总数小于所要求的段长时,则检查段表中访问位,以淘汰那些访问概率低的段并将需要段调入。

段式管理时的地址变换过程必须经过二次以上的内存访问。即首先访问段表以计算得到待访问指令或数据的物理地址,然后才是对物理地址进行取数据或存数据操作。为了提高访问速度,页式地址变换时使用的高速联想寄存器的方法也可以用在段式地址变换中。即高速联想寄存器中存放那些经常访问的段号所对应的段表项,且高速联想寄存器中的段表和内存的段表可同时查找。如果在联想寄存器中找到了所需要的段,则可以大大加快地址变换速度。

图 段式地址变换

4 段的的共享与保护

(1) 段的共享

共享:内存中只保留一个副本,供多个用户使用。

如果用户进程或作业需要共享内存中的某段程序或数据,只要用户使用相同的段名,就可在新的段表中填入已存在在内存之中的段的起始地址,并置以适当的读写控制权,就可做到共享一个逻辑上完整的内存段信息。
另外,在多道环境下,由于进程的并发执行,一段程序为多个进程共享时,有可能出现多次同时重复执行该段程序的情况(即某个进程在未执行完该段程序之前,其它并发进程又已开始执行该段程序)。这就要求它在执行过程中,该段程序的指令和数据不能被修改。还有,与一个进程中的其它程序段一样,共享段有时也要被换出内存。这时,就要在段表中设立相应的共享位来判别该段是否正被某个进程调用。显然一个正在被某个进程使用或即将被某个进程使用的共享段是不应该调出内存的。

图 段式系统中共享内存副本

(2) 段的保护

地址越界保护法:利用段表中的段长项与虚拟地址中的段内相对地址比较进行。若段内相对地址大于段长,系统就会产生保护中断。

存取方式控制保护法:前面已作过介绍

段模式提供的二维地址最符合用户观点和程序逻辑。段式的最大好处是可以充分的实现共享和保护。

段式管理的优点是便于动态申请内存,管理和使用统一化,便于共享,便于动态连接;其缺点是有碎片问题。

页式管理和段式管理的比较

6.5.3 段式管理的优缺点

分段是支持用户内存观点的一种内存管理模式。

一个逻辑地址空间是一个段的集合,每个段有一个名字和一个长度。地址既说明段名,也说明段内位移。因此用户将每个地址说明分为两个量,一个是段名,一个是位移(与这个模式相反的是页模式,用户仅说明一个单独的地址。由硬件将该地址划分为一个页号和一个位移。这种划分是程序员看不见的。)段模式以段为单位划分和连续完整存放。段间是不一定连续编址的,即为二维编址。

段式作为不连续技术的一个最大特点是在于它是如何不连续的:进程逻辑空间(二维的)最接近用户观点,就像高级程序语言(更一般的说,软件系统接口)向自然语言靠拢一样。这样克服了页式的非逻辑划分,给保护和共享与动态伸缩所带来的不自然性(即不能按语义单位)。

1. 分页是出于系统管理的需要,分段是出于用户应用的需要。因此,一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。

2. 页大小是系统固定的,而段大小则通常不固定。

3. 逻辑地址表示:分页是一维的,各个模块在链接时必须组织成同一个地址空间;而分段是二维的,各个模块在链接时可以每个段组织成一个地址空间。

图 页式管理与段式管理的比较

因为段页式管理是段式管理的页式管理方案结合而成的,所以具有他们二者的优点。但是由于管理软件的增加,复杂性和开销也随之增加。
温馨提示:答案为网友推荐,仅供参考