分区表:记录分区的位置,大小和使用标志
分区存储管理:
单一区存储管理(不分区存储管理):
定义:用户区不分区,完全被一个程序占用。例如DOS
优点:简单,不需要复杂
缺点:程序运行占用整个内存,
内存浪费,效率低
分区存储管理:把用户区内存划分为若干大小不等的分区
适合单用户单任务系统
固定分区:把内存固定地划分为若干个大小不等的分区
每个分区的大小和位置都固定,系统运行期间不再重新划分
使用特点:
1.在程序装入之前,内存已被分区,不再改变
2.每个分区大小不同,适应不同大小的程序
3.系统要维护分区表
缺点:
1.浪费内存
2.大程序可能无法运行
建议:
根据分区表安排程序装入顺序
当程序的大小,个数,装入顺序都固定时内存使用效率高。
动态分区:在程序装入时创建分区,使分区的大小刚好与程序大小相等。
特点:
分区动态建立
分区的大小和个数都可以改变
存在内存碎片
问题:
分区的分配,选择,回收和如何解决内存碎片问题。
分区放置策略:
空闲区表:描述内存空闲区的
分区的分配:
分配过程(假定需要空间大小为S)
1.从空闲区表第一个区开始寻找≥S的空闲区
2.找到后从分区中分割出大小为S的部分给用户使用
3.分割后的剩余部分作为空闲区依然登记再空闲区表中
//分割空闲区的时候从底部分割,这样只是大小改变但是区的地址不变。
放置策略:
1按照空闲区首地址递增排序:首次适应算法
2.按照空闲区首地址递减排序
3.按照空闲区大小的递增排序:最佳适应算法
4.按照空闲区大小的递减排序:最坏适应算法
首次适应算法:尽可能使用低地址空间
当需要较大分区时再高地址的空间有满足可能性
最坏适应法:
优点:大空闲区分割后剩下部分还是可以装下较大的程序
特点:只需要一次查找就可以找到需要的分区
分区的回收:
功能:回收程序释放分区,登记到空闲区表中,以便再使用
收回算法:
1.考虑释放区与现有空闲区是否相邻
2.若释放区与现有空闲区不相邻,则直接插入空闲区表
3.若释放区与现有空闲区相邻,则与空闲区合并后更新空闲区表
内存覆盖技术:
覆盖——Overlay
目的:在较小的内存空间中运行较大的程序
内存分区:
常驻区:被某段单独且固定地占用,可划分多个
覆盖区:能被多段共用(覆盖),可划分多个
缺点:
编程复杂:程序员划分程序模块并确定覆盖关系
程序执行时间长:从外存装入内存耗时
内存交换技术:Swapping
原理:内存不够时把进程写进磁盘(换出/Swap Out)
当进程要运行时重新写回内存(换入/Swap In)
优点:
增加进程并发数
不考虑程序结构
缺点:
换入和换出增加CPU开销
交换单位太大
问题:
减少交换传输的信息量
外存交换空间的管理方法
程序换入时的地址重定位
内存碎片:
过小的空闲区,难利用
内存碎片会降低内存有效利用率
碎片问题:
动态分区的缺点:
容易产生内存碎片:内存反复分配和分割
最佳适应法最容易产生内存碎片
解决办法1:规定门限值
分割空闲区时,若剩余部分小于门限值,则不分割,全部给用户
解决办法2:内存拼接技术
将所有空闲区集中一起构成一个大的空闲区
拼接的时机:
1.释放区回收的时候
拼接频率过大,系统开销大
2.系统找不到足够大的空闲区时
空闲区的管理复杂
3.定期:
空闲区的管理复杂
拼接技术的缺点:
消耗系统资源
离线拼接//需要整个系统停止运作来拼接
重新定义作业
解决办法3:解除程序占用连续内存才能运行的限制
把程序拆分成多个部分装入不同分区,充分利用碎片