单一连续分配
- 内存只能有一道用户程序,内存分成2块,操作系统区和用户区,用户程序放在用户区
- 没有外部碎片,因为分配的是整一块,干干净净,容不下第二道程序;但是有内部碎片,因为一道程序可能没那么大
- 因为是只支持单道程序,可以采用覆盖技术扩充内存
固定分区分配
- 支持多道程序,将内存用户空间(一部分是系统空间)划分若干个分区,每个分区只能装一道作业
- 没有外部碎片,有内部碎片
- 2种划分方式,分区大小相等,分区大小不相等
动态分区分配
支持多道程序,在进程进入内存时,动态根据进程大小划分分区
2种数据结构
- 空闲分区表
- 空闲分区链
进程多大,分区就多大,所以没有内部碎片,但是有外部碎片,外部碎片可以用紧凑技术解决
回收内存分区时,有4种情况
- 情况一:回收区的后面有一个相邻的空闲分区
- 情况二:回收区的前面有一个相邻的空闲分区
- 情况三:回收区的前、后各有一个相邻的空闲分区
- 情况四:回收区的前、后都没有相邻的空闲分区
总之,相连的空闲分区要合并
- 当多个空闲分区都能满足要求时,应该选择哪个分区进行分配?
- 首次适应算法first fit
- 最佳适应算法best fit
- 最坏适应算法worst fit
- 邻近适应算法next fit
算法 | 思想 | 分区排列顺序 | 优点 | 缺点 |
---|---|---|---|---|
首次适应 | 从头到尾找到适合的分区 | 空闲分区以地址递增次序排列 | 性能最好,算法开销小回收后不需要对空闲分区重新排序 | |
最佳适应 | 优先使用更小的分区,以保留更多的分区 | 空闲分区以容量递增次序排列 | 会有更多的大分区被保留下来,更能满足大进程需求 | 会产生很多小、难以利用的碎片,算法开销大,回收后可能需要对空闲分区队列重新排序 |
最坏适应 | 优先使用更大的分区,以防止产生太多太小的不可用的碎片 | 空闲分区以容量递增次序排列 | 可以减少许多难以利用的小碎片 | 大分区容易被用完,不利于大进程,算法开销大 |
邻近适应 | 由首次适应演变而来,每次从上次查找结束位置开始查找 | 空闲分区以地址递增次序排列 | 不用每次都从低地址的小分区开始检索,算法开销小 |
参考文献:王道计算机考研-操作系统