段式存储管理模拟实验
作者:互联网
1. 实验内容:
段式管理(segmentation),是指把一个程序分成若干个段(segment)进行存储,每个段都是一个逻辑实体(logical entity),程序员需要知道并使用它。它的产生是与程序的模块化直接有关的。段式管理是通过段表进行的,它包括段号或段名、段起点、装入位、段的长度等。此外还需要主存占用区域表、主存可用区域表。
2. 实验要点:
了解段式存储的概念及实现原理。
通过模拟实验深入体会段式存储段内地址到物理地址的转换关系。
3.实验过程:
1)段式存储实现原理
一、段式虚存空间
段式管理管理把一个进程的虚拟地址空间设计成二维结构,即短号s与段内相对地址w。与页式管理时不一样的是,页式管理中,被划分的页号按顺序编号递增排列,属一维空间,而段式管理中的段号与段号之间无顺序关系。另外,段的划分也不像页的划分那样具有相同的页长,段的长度的不固定的。每个段定义一组逻辑上完整的程序或数据。
每个段是一个首地址为零、连续的一维线性空间。根据需要,段长课动态增长。对段式虚地址空间的访问包括两个部分:段名和段内地址。其中的段名经编译程序和链接程序编译链接后转换成机器内部可以识别的段号和段内单元号。
二、段式存储管理的内存分配与释放
段式管理中以段为单位分配内存,每段分配一个连续的内存区。由于各段长度不等,所以这些存储区的大小不一。而且,同一进程所包含的各段之间不要求连续。
段式管理的内存分配与释放在作业或进程的执行过程中动态进行。动态分配过程是这样进行的,首先,段式管理为进程或作业分配部分内存,以作为该进程的工作区和放置即将执行的程序段。随着进程的执行,进程根据需要随时申请调入新段和释放老段。进程对内存区的申请和释放可分为两种情况:一种是当进程要求调入某一段时,内存中有足够的空闲区满足该段的内存要求另一种是内存中没有足够的空闲区满足该段的内存要求。
除了初始分配之外,段的动态分配是在CPU所要访问的指令和数据不在内存时产生缺段中断的情况下发生的。
因此,段的淘汰或置换算法实际上是缺段中断处理过程的一部分。
三、段式存储管理的地址变换
(1)段表
和页式管理方案类似,段式管理程序在进行初始内存分配之前,首先根据用户要求的内存大小为一个作业或进程建立一个段表。段式管理也是通过段表来进行内存管理。
(2)动态地址变换
一般在内存中给出一块固定的区域放置段表。当某进程开始执行时,管理程序首先把该进程的段表始址放入段表地址寄存器。通过访问段表寄存器,管理程序得到该进程的段表始址从而可开始访问段表。然后,由虚地址中的段号s为索引,查段表。若该段在内存,则判断其存取控制方式是否有错。如果存取控制方式正确,则从段表相应表目中查出该段在内存的起始地址,并将其和段内相对地址w相加,从而得到实际内存地址。如果该段不在内存,则产生缺段中断将CPU控制权交给内存分配程序。内存分配程序首先检查空闲区链,以找到足够长度的空闲区来装入所需要的段。如果内存中的可用空闲区总数小于所要求的段长时,则检查段表中访问位,以淘汰那些访问概率低的段并将需要段调入。
与页式管理时相同,段式管理时的地址变换过程也必须经过二次以上的内存访问。首先访问段表以计算得到待访问指令或数据的物理地址。然后才是对物理地址进行取数据或存数据操作。为了提高访问速度,页式地址变换时使用的高速联想寄存器的方法也可以用在段式地址变换中。如果在联想寄存器中找到了所需要的段,则可以大大加快地址变换速度。
四、段的共享与保护
(1) 段的共享
在多道环境下,常常有许多子程序和应用程序是被多个用户所使用的。如果每个用户进程或作业都在内存保留它们共享程序和数据的副本,那就会极大地浪费内存空间。最好的办法是内存中只保留一个副本,供多个用户使用,称为共享。一段程序为多个进程共享时:
①要求在执行过程中,该段程序的指令和数据不能被修改。
②在段表中设立相应的共享位来判别该段是否正被某个进程调用。显然 一个正在被某个进程使用或即将被某个进程使用的共享段是不应该调出内存的。
(2) 段的保护
与页式管理时相同,段式管理的保护主要有两种:地址越界保护法和存取方式控制保护法。
2)相关函数实现
流程图:
函数实现:
标签:存储管理,管理,地址,内存,模拟实验,进程,地址变换,段表 来源: https://www.cnblogs.com/yaolingyu/p/16242489.html