连续存储管理
连续存储管理是把内存中用户区作为一个连续区域或者若干个连续区域进行管理
单一连续存储管理(单道程序系统)
操作系统占用一部分内存空间,剩下作为一个连续区分配给一个作业使用。
这种存储管理方式适合于单用户,单任务的操作系统
(无地址转换)
存储保护机制
判断物理地址界限地址 且 物理地址内存最大地址 ,则可执行
静态重定位装入方式,由装入程序检查其物理地址是否超过界限地址,是则可以装入
缺点
CPU利用率比较低
内存得不到充分利用
外围设备利用率不高
固定分区存储管理(多道程序系统)
把用户区分为若干个连续区域,每一个区域称为一个分区,分区的大小和个数都固定不变,每个分区只能装入一个作业,不允许一个作业跨分区存储
空间的分配与去配
设置一个内存分配表,记录各个分区的起始地址和长度,设置一个状态标志位
地址转换和存储保护
地址转换:逻辑地址+分区的下限地址=物理地址
存储保护:判断-下限地址物理地址上限地址
空间利用率
内存碎片产生原因:为作业分配一个不小于作业地址空间的分区,产生了一部分空闲区域
改进:
根据经常出现的作业的大小和频率划分分区
按分区大小排列
按作业对内存空间需求量排成多个作业队列,每个作业队列只能装入对应的分区中,不同分区可以同时装入作业,作业不能装入其他作业队列对应的分区只能装入自己对应的分区
可变分区存储管理
在作业装入内存时,根据作业需要的地址空间的大小和当时的内存使用情况决定是否为该作业分配一个分区,分区的大小和个数随着装入内存作业的装入与撤离而发生变化
1.空间分配与去配
空间分配
(1)设置相应的数据结构:分区表 分区链
分区链
为了实现对空闲分区的分配和链接,设置一些用于控制分区分配的信息![]()
(2)
“最先适应”分配算法
顺序查找空闲分区表
缺点:经过若干次作业的装入和撤离后,可能会产生碎片(把较大的内存空间分配成若干个小的不连续的空闲分区,不能满足再次分配的需要),降低空间利用率
“最优适应”分配算法
选择一个满足作业地址空间要求的最小空闲分区
空闲分区按其长度以递增顺序登记在空闲分区表中
缺点:每次分配后分割的剩余空间总是最小的,形成的碎片非常零散,难以再次分配,从而影响内存空间的利用率
“最坏适应”算法(与最优适应算法相反)
每次总选择满足作业要求的最大空闲分区进行分割
对中小型作业是有利的
空闲分区按其长度以递减顺序登记在空间分区表中
空间去配/回收
有上邻空闲区
作业分区始址为S,长度为L
在这个作业上面有一个空闲分区(开始地址+长度=S)相邻,修改该空闲分区,始址不变,长度+L
有下邻空闲区
作业分区始址为S,长度为L
在这个作业下面有一个空闲分区(S+L=该分区的始址)相邻,修改该空闲分区,始址改为S,长度+L
既有上邻空闲区,又有下邻空闲区
作业分区始址为S,长度为L
在这个作业上面有一个空闲分区(开始地址+长度=S)相邻;在这个作业下面有一个空闲分区(S+L=该分区的始址)相邻,在上面的空闲区修改,始址位置不变,长度+L+(下邻空闲区的长度),下邻空闲区清空
既无上邻空闲区有也无下邻空闲区
为该回收区单独在空闲分区表建立一个新表项,登记始址位置和长度,将标志位改为“未分配”
2.地址转换和存储保护
装入作业方式:动态重定位方式
3.移动技术
作用:使分散的空闲分区集中起来以容纳新的作业
条件:作业与外设进行交互时不能发生相关分区的移动
优点:可以集中分散的空闲分区,提高内存空间的利用率,为作业扩充内存空间提供了方便
缺点:需要修改已分配分区表和空闲分区表中的数据,修改进程控制块中的分区起始地址和长度(元数据信息)增加操作系统的工作量,占用CPU时间增加系统开销
覆盖与交换技术
多道环境下扩充内存的两种方法:覆盖和交换
覆盖
覆盖:可以相互覆盖的程序段
覆盖区:可共享的内存区
程序中必要部分的代码和数据常驻内存,不常用的在其他程序模块中,平时存放在外存(覆盖文件),需要用到的时候才装入内存,不存在调用关系的模块不必同时装入到内存,可以相互覆盖,即不同时用的模块可共用一个分区
优点:打破了一个作业全部信息装入内存后才能运行的限制,解决了小内存大作业的矛盾
缺点:必须划分程序模块和确定程序模块之间的覆盖关系,增加编程的复杂度
从外存装入覆盖文件,是以时间延长来换取空间节省
交换
交换技术:把内存中暂时不能运行的进程或暂时不适用的程序和数据换出到外存,把已具备运行条件的进程或进程所需要的程序和数据换入内存
条件:需要数据传输块,容量大的后援存储器(通常是硬盘)
覆盖和交换的区别
交换技术是在进程或作业之间进行
覆盖技术是在同一个作业或进程内进行