操作系统体系结构和内存分层
计算机体系结构、内存分层体系
计算机基础硬件:
- CPU:
- 内存:
- 设备IO:
内存的层次结构(从上到下速度一次递减):
- 寄存器
- cache
- 主存(物理内存):
- 磁盘(虚拟内存):
操作系统内核-内存管理的目标:
- 抽象:逻辑地址空间
- 保护:独立地址空间
- 共享:访问相同内存
- 虚拟化:更多的地址空间
操作系统中管理内存的不同方法:
- 程序重定位
- 分段
- 分页
- 虚拟内存
- 按需分页虚拟内存
实现高度依赖于硬件
- 必须知道内存架构
- MMU(内存管理单元):硬件组负责处理CPU的内存访问请求
地址空间&地址生成
- 物理地址空间:硬件支持的值空间
- 逻辑地址空间:一个运行程序所拥有的内存范围
逻辑地址和物理地址转换
CPU方面:
- 运算器需要在逻辑地址的内存内容
- 内存管理单元寻找在逻辑地址和物理地址之间的映射
- 控制器从总线中发送在物理地址的内存请求
内存方面:
- 内存发送物理地址内存中的内容给CPU
操作系统方面:
- 建立逻辑地址和物理地址之间的映射
连续内存分配
- 内存碎片问题
- 空闲内存不能被利用
- 外部碎片:在分配单元间的未使用内存
- 内部碎片:在分配单元中的未使用内存
- 分区的动态分配
简单的内存管理方法
当一个程序准许运行在内存中时,分配一个连续的区间
分配一个连续的内存区间给运行的程序以访问数据
分配策略:
第一适配:
为了分配n字节,使用第一个可用空闲块以致块的尺寸比n大;
需求:按照地址排序的空闲块列表,分配需要寻找一个合适的分区,重分配需要检查看是否自由分区能合并于相邻的空闲分区。
优点:易于产生更大的空闲块,向着地址空间的结尾。
缺点:容易产生外部碎片,不确定性。
最佳适配:
为了避免分割大的空闲块,为了最小化外部碎片产生的尺寸
需求:按照尺寸排列的空闲块列表,分配需要寻找一个合适的分区,重分配需要搜索以及合并于相邻的空闲分区。
优点:当大部分分配是小尺寸时非常有效,比较简单
缺点:外部碎片,重分配慢,易产生很多没用的微小碎片
最差适配:
为了避免有太多微小碎片
需求:按尺寸配列的空闲块列表,分配很快,重新分配需要合并于相邻的空闲分区,然后调整空闲块列表
优点:假如分配是中等尺寸效果最好
缺点:重分配慢,外部碎片,易于破碎大的空闲块以致大分区无法被分配
- 压缩式碎片整理
- 通过拷贝方式将碎片内存块整理成连续的内存块
- 交换式碎片整理
- 运行程序需要更多的内存
- 抢占等待的程序&回收他们的内存