内存分段管理

    在分区存储管理和页式存储管理中,供用户使用的逻辑地址都是连续的。在有些情况下如用户在编制大型程序时就会感到不便利,因为用户希望他们程序是由若干段组成的,可以由一个主程序、若干子程序、符号表、栈以及数据等等若干段组成。每一段都有完整的逻辑意义,每一段的程序都可独立编制,且每一段的长度可以不同。采用段式存储管理方案就可以支持程序的分段使用。

 

采用分段技术,程序和相关的数据被划分成一组段(segment )。尽管有一个最大段长度,但是没有要求所有程序的所有段的长度都相等。当一个进程被调入时,它的所有段都被装入内存的可用区域,并建立一个段表还必须指明段长度。

段对应一个二维线形虚拟空间,也就是一个二维虚拟存储器,即段号s 与段内相对地址w 。段式管理程序以段为单位分配内存,然后通过地址映射把段式虚拟地址转换为实际内存物理地址。

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

 段的长度是不固定的

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

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

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

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

 

段式管理的内存分配与释放
         段式管理中以段为单位分配内存,每段分配一个连续的内存区。由于各段长度不等。所以这些存储区的大小不一。而且,同一进程所包含的各段之间不要求连续。段式管理的内存分配与释放在作业或进程的执行过程中动态进行。进程对内存区的申请和释放可分为两种情况:
       1 、当进程要求调入某一段时,内存中有足够的空闲区满足该段的内存要求:采用和动态分区式管理相同的空闲区管理方法。(一次调入时所需淘汰的段数与段的大小有关,如果一个作业或进程的段数较多,且段长之间的差别较大,则有可能出现调入某个大段时,需淘汰好几个小段的情况)

         2 、内存中没有足够的空闲区满足该段的内存要求:根据给定的置换算法淘汰内存中在今后一段时间内不再被 CPU 访问的段。(任何一个段的段长都不允许超过内存可用区长度,否则将会造成内存分配出错。)

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

 

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值