【操作系统笔记】OS_内存管理_连续内存分配(03)
Page content
这一篇整理了操作系统的内存管理_连续内存分配
相关的内容。
1.操作系统和内存够
1.1 操作系统的内存管理方式
- 抽象
逻辑地址空间 - 保护
独立地址空间 - 共享
访问相同内存 - 虚拟化
更大的地址空间
1.2 操作系统中管理内存的不同方法
- 程序重定位(relocation)
- 分段(segmentation)
- 分页(paging)
- 虚拟内存(virtual memeory)
- 目前多数系统(如linux)采用按页式虚拟存储
1.3 实现高度依赖硬件
- 与计算机存储架构紧耦合
- MMU(内存管理单元):处理CPU存储访问请求的硬件
1.4 地址空间和地址生成
1.4.1 地址空间的定义
- 物理地址空间 –硬件支持的地址空间
起始地址0, 直到MAXsys - 逻辑地址空间 – 在CPU运行的进程看到的地址
起始地址0, 直到MAXprog
1.4.2 逻辑地址生成
程序(xx.c) =编译=> (xx.s) =汇编=> (xx.o) =链接=> (.exe) =载入=> 操作系统内存
1.4.3 过程
- CPU
- ALU:需要逻辑地址的内存内容
- MMU: 进行逻辑地址和物理地址的转换
- CPU控制逻辑:给总线发送物理地址请求
- 内存
- 发送物理地址的内容给CPU
- 或接受CPU数据到物理地址
- 操作系统
- 建立逻辑地址LA和物理地址PA的映射
2.连续内存分配
2.1 内存碎片问题
空闲内存不能被利用
- 外部碎片:在分配单元之间的未被使用内存
- 内部碎片:在分配单元内部的未被使用内存
2.2 分区的动态分配
当程序被加载执行时,分配一个进程指定大小可变的分区(块,内存块),分区的地址是连续的
分配策略
第一适配
分配n个字节,使用第一个可用的空间比n大的空闲块。
- 原理&实现
- 空闲分区列表按地址顺序排序
- 分配过程时,搜索第一个合适的分区
- 释放分区是,检查释放可与临近的空闲分区合并
- 优点
- 简单
- 在高地址空间有大块的空间分区
- 缺点
- 外部碎片
- 分配大块时较慢
最佳适配
分配n字节分区时,查找并使用不小于n的最小空闲分区
- 原理&实现
- 空闲分区列表安装大小排序
- 分配时,查找一个合适的分区
- 释放时,查找并且合并临近的空闲分区(如果找到)
- 优点
- 大部分分配的尺寸比较小时,效果很好
- 可避免大的空间分区被拆分
- 可减小外部碎片的大小
- 相对简单
- 缺点
- 外部碎片
- 释放分区较慢
- 容易产生好多无用的小碎片
最差适配
分配n字节,使用尺寸不小于n的最大空闲分区
- 原理&实现
- 空闲分区列表按由大到小排序
- 分配时,选最大的分区
- 释放时,检查释放可与临近的空闲分区合并,进行可能的合并,并调整空闲分区列表顺序
- 优点
- 中等大学的分配较多时,效果最好
- 避免出现太多的小碎片
- 缺点
- 释放分区较慢
- 外部碎片
- 容易破坏大的空闲分区,因此后续难以分配大的分区
2.3 压缩式碎片整理
- 重置程序以合并孔洞
- 要求所有程序是动态可重置的
- 议题:何时重置?开销?
2.4 交换式碎片整理
- 运行程序需要更多的内存
- 枪战等待的程序&回收他们的内存
欢迎大家的意见和交流
email: li_mingxie@163.com