Operation Syatem——第三章:连续式内存分配

3.1 计算机体系结构及内存分层体系

(1)计算机体系结构
-CPU,内存,I/O
Operation Syatem——第三章:连续式内存分配

(2)操作系统在内存管理要完成的目标:
-抽象:逻辑地址空间
-保护:独立地址空间
-共享:访问相同内存
-虚拟化:更多的地址空间
Operation Syatem——第三章:连续式内存分配
(3)操作系统实现内存管理目标的手段
-程序重定位
-分段
-分页
-虚拟内存
-按需分页虚拟内存

3.2 地址空间与地址生成

(1)地址空间的定义
-物理地址空间:硬件支持的地址空间
-逻辑地址空间:一个运行的程序所拥有的内存范围
Operation Syatem——第三章:连续式内存分配
(2)地址空间的生成
Operation Syatem——第三章:连续式内存分配
(3)应用程序的逻辑地址是如何映射到物理地址
=>CPU方面
a.运算器ALU需要在逻辑地址的内存内容(CPU要逻辑地址)
b.内存管理单元MMU寻找在逻辑地址和物理地址之间的映射(然后MMU找逻辑和物理地址的关系)
c. 控制器从总线发送在物理地址的内存内容的请求(关系找到后,去找对应物理地址)
=>内存方面
e.内存发送物理地址内存内容给CPU(物理地址找到了,给CPU)
=>操作系统方面
f.建立逻辑地址和物理地址之间的映射(确保程序不相互干扰)
Operation Syatem——第三章:连续式内存分配
(4)地址安全检查
Operation Syatem——第三章:连续式内存分配

3.3 连续内存分配:内存碎片与分区的动态分配

(1)内存碎片问题
-空闲内存不能被利用
外部碎片:在分配单元间的未使用内存
内部碎片:在分配单元中的未使用内存
Operation Syatem——第三章:连续式内存分配
(2)简单的内存管理方法:
-当一个程序准许运行在内存中时,分配一个连续的区间
-分配一个连续的内存区间给运行的程序以访问数据
Operation Syatem——第三章:连续式内存分配
(3)分区的动态分配策略(不会产生内部碎片)
-首次适配(易产生外部碎片)——按照地址递增的次序链接
–内容:现在想分配n字节,从低地址开始找,碰到的第一个空间比n大的空闲块就使用它。
Operation Syatem——第三章:连续式内存分配
要想实现首次分配,需要满足以下条件:
—需要存在一个按地址排序的空闲块列表
—分配需要找一个合适的分区
—重分配需要检查,看看*分区能不能与相邻的空闲分区合并(形成更大的空闲块)

优点:
—简单
—易于产生更大的空闲块,向着地址空间的结尾

缺点:
—外部碎片的问题会加剧
—不确定性

最佳适配(易产生细小碎片)——按照容量递增的顺序形成分区链
–内容:为了分配n字节,使用最小的可用空闲块,以致块的尺寸比n大。
Operation Syatem——第三章:连续式内存分配
目的:避免分割大的空闲块;最小化外部碎片产生的尺寸。
要想实现最佳分配,需要满足以下条件:
—按尺寸排列的空闲列表
—分配需要寻找一个合适的分区
—重分配需要搜索和合并于相邻的空闲分区

优点:大部分分配是小尺寸时很有效;简单
缺点:外部碎片;重分配慢;易产生很多没用的微小碎片。(内部碎片)

最差适配:最坏适应算法——以容量递减的次序链接,找到第一个能满足要求的空闲分区(即挑出最大的分区)
–内容:为了分配n字节,使用最大的可用空闲块,以致块的尺寸比n大。
Operation Syatem——第三章:连续式内存分配
目的:避免太多的微小碎片
要想实现最差分配,需要满足以下条件:
—按尺寸排列的空闲列表
—分配很快(获得最大的分区)
—重分配需要合并于相邻的空闲分区,若有,然后调整空闲块列表
优点:假如分配时是中等尺寸效果最好
缺点:重分配慢;外部碎片;易于破碎大的空闲块以至大分区不能被分割

3.4 连续内存分配:压缩式与交换式碎片整理

(1)压缩式碎片整理(紧凑的过程):即操作系统不时地对进程进行移动和整理。
-重制程序以合并孔洞
-要求所有程序是 动态可重置的
-问题:何时重置;开销。
Operation Syatem——第三章:连续式内存分配
(2)交换式碎片整理
-运行程序需要更多的内存
-抢占等待的程序或回收它们的内存(把暂时不用的内容挪到磁盘里)
Operation Syatem——第三章:连续式内存分配