段式存储管理

一、基本原理

  前面介绍的各种存储管理中,供用户使用的逻辑地址都是连续的,用户在编制大型程序时就会感到不方便。一个实际的程序往往是由若干段组成的,例如一个主程序段、若干子程序段、若干数据段和工作区段组成,如图3.22所示。

段式存储管理_第1张图片

每个段都具有完整的逻辑意义,因此都可以独立编程,且给每个段一个段名。用户程序可以用符号形式(段名和入口)调用一个段的功能,如图3.21主程序中“调用[X]段入口E”。程序在编译或汇编时再给每个段名再定义一个段号 ,用于内存分配。每一段都可从“0”编址,段与段之间地址不连续,但段内地址是连续的。

  分段式存储管理是以段为单位进行内存分配,为此提供逻辑地址的形式如下:

  地址结构确定后 ,一个作业中允许的最多 段数及每段最大长度
也就确定了。例如PDP-11/45的段址结构为:段号3位,段内地址(单元号)13位,也就是说一个作业最多8段,每段最长可达8K字节。

  分段式存储管理为作业的每一个段分配一个连续的内存区域,用来存放该段信息。分配方法同可变分区方式类似,根据段长找出一个可容纳该段的空闲区,分割这个空闲区,一部分用来装入该段信息,另一部分仍为空闲区。作业各段可装入到不相连的几个内存区域。如下图3.23所示。

段式存储管理_第2张图片


段式存储管理也是采用动态重定位方式装入作业各段的,如果作业的某段找不到足够大的空闲区时,也可采用移动技术合并分散的空闲区。地址转换工作在作业执行时,由地址转换机构完成从逻辑地址到绝对地址的转换。

二、转换和地址保护

  为使作业正确执行 ,首先须记下各段位置 ,为此系统设立一个“段表”记录作业每个段在内存中首地址和长度,如图3.22所示。在作业执行时,每执行一条指令,硬件的地址转换机构按逻辑地址中的段号查段表,得到该段在内存中的起始地址和长度,起始地址加上段内地址就是要访问的内存的绝对地址。这个绝对地址如果是在该段的存储区域内,则可访问;否则,产生一个地址越界中断。段式存储管理地址转换过程类似于可变分区方式,根据段表表目中的起始地址和长度可以确定该段区域,即必须满足下列不等式:
      起始地址<=绝对地址<=起始地址+长度

  例如,图3.22中,主程序执行指令“调用X段入口E”时 ,由于编译程序将子程序X段分配为1段 ,“调用 X 段”故应查段表的表目1,可知子程序X段在内存起始地址为1400 ,长度为P,起始地址1400加上“入口E”,即加上段内地址E即为该子程序绝对地址 ,然后用上面不等式确定这个绝对地址是否在1段(子程序X段)内,即不等式:
         1400<=1400+E<=1400+P
        是否成立?再决定是否允许访问。

三、段页式存储管理

  用户作业采用分段结构后,不仅方便了编制程序(各模块可以独
立编程),而且具有逻辑上清晰的优点。段式存储管理支持了用户的分段观点,但它的致命弱点是每段必须占据内存的连续区域。于是,在装入一个分段时,可能要移动已在内存的其他区域。为了克服这个缺点,可采用段页式存储管理。

  段页式存储管理要点是,用户作业仍采用分段结构,各模块可以独立编程,但操作系统在分配内存空间时,不是把一个段分配在一个连续的内存区域,而是把每段再分成等长的若干页,将内存分成和页大小相等的若干块,然后按页存放在若干可能不连续的内存块中。
段页式存储管理的逻辑地址格式如下:

和分页式存储管理类似,对于用户来说,每一段的逻辑地址仍是从“0”开始编程,不必考虑如何分页的问题。

  段页式存储管理兼顾了段式在逻辑上清晰和页式在存储管理上方便的优点。为了正确执行作业,段页式存储管理必须为每个作业建立一张段表,且对每一段建立一张页表。段表的长度由作业分段数决定,作业有多少段,段表的表目就有多少项;段表中每个表目指出本段所对应的页表的起始地址和页表的长度。页表的长度由对应段所分的页数决定 。页表的表目指出页号与内存块号的对应关系 。如图3.24所示。

段式存储管理_第3张图片

四、页式存储管理的地址转换

  
页式存储管理的地址转换由图3.25所示

段式存储管理_第4张图片

在作业指令执行时,由指令的逻辑地址中的段号(图中为第i段)查该作业段表,获得作业该段的页表首址,再由指令逻辑地址中的页号查该页表,获得该页对应的内存块号(如图3.24所示,上述过程也可能从快表中查到对应的块号),最后,将块号和指令中逻辑地址的单元号拼成绝对地址,该地址就是要访问的内存的绝对地址。这个绝对地址如果是在该段的存储区域内,则可访问;否则,产生一个地址越界中断。



你可能感兴趣的:(内存管理)