02 操作系统的连续内存分配、内存碎片的整理算法
计算机体系结构以及内存分层体系
计算机基本硬件结构包括三个部分:CPU (运算器、寄存器、控制器、缓存(cache)、存储管理单元(MMU
))、内存、设备(I/O)
在操作系统中管理内存的不同方法
- 程序重定位
- 分段
- 分页
- 虚拟内存
- 按需分页虚拟内存
操作系统实现内存管理高度依赖于硬件
- 必须知道内存架构
-
MMU
(内存管理单元):硬件组件负责处理CPU的内存访问请求
物理内存管理之连续内存分配知识目录
- 内存碎片问题
- 分区的动态分配
- 第一适配
- 最佳适配
- 最差适配
- 压缩式碎片整理
- 交换式碎片整理
内存碎片问题:即空闲内存不能被利用,分为外部碎片(在分配单元间的未使用的内存);内部碎片(在分配单元中未使用的内存)
分区的动态分配算法之首次适配算法:为了分配n个字节,使用第一个可用空闲块。
需求:
- 按地址排序的空闲块列表
- 分配需要寻找一个合适的分区
- 重新分配需要检查,看是自由分区能够合并于相邻的空闲分区
优点:
- 简单
- 易于产生更大的空闲块,向着地址空间的结尾
缺点 :
- 容易产生外部碎片
分区的动态分配算法之最佳适配:为了分配n个字节,使用最小的可用空闲块。
优点:
- 避免分割大的空闲块
- 最小化外部碎片产生的尺寸
- 当大部分分配是小尺寸时非常有效
缺点:
- 重分配慢
- 容易产生很多没有用的微小外部碎片
需求
- 按尺寸排列空闲块列表
- 分配需要寻找一个合适的分区
- 重分配需要搜索及合并相邻的空闲分区(若有)
分区的动态分配算法之最差适配:为了分配n个字节,使用最大的可用空闲块。
优点:
- 加入分配是中等尺寸效果最好
- 避免产生太多的微小碎片
缺点:
- 重分配慢
- 产生外部碎片
- 易于破坏最大的空闲块以致于大分区无法被分配
需求:
- 按尺寸排列空闲块列表
- 分配很快(获得最大的分区)
- 重分配需要合并相邻的空闲分区,若有,然后调整空闲块列表
总结:这三种适配算法,没有谁是最优的这种说法,因为应用程序的请求是随机产生的,需要的空闲块的大小不确定,这些都是一些简单的内存分配算法,实际运用中用到的分配算法更加的复杂。
连续内存分配之压缩式与交换式碎片整理
压缩式碎片整理需求:1.重置程序以合并打孔;2.要求所有程序是动态可重置的(在内存中运行的程序的位置是可以调整的,调整的过程就是一个内存拷贝的过程);
存在两个问题:1.什么时候执行重置的操作,2.执行重置操作需要的开销大不大?
交换式碎片整理:把硬盘当成是内存的一个备份(换入换出操作)
提示:为了更好的理解知识点,博主在微信公众号中将操作系统知识进行了重新排版和插入图片。感兴趣的朋友可以扫码进行关注。