作者:旧眸M_557 | 来源:互联网 | 2023-07-14 17:46
操作系统的内存管理:
3.1 计算机体系结构及内存分层体系


操作系统的内存层次:

操作系统在内存管理方面需要完成的目标:
- 抽象: 逻辑地址空间
- 保护: 独立地址空间(保证多个进程间不会相互干扰)
- 共享: 访问共同的地址空间(当多个进程需要操作同一块操作地址时,需要共享地址空间)
- 虚拟化: 由于缓存及寄存器的存储空间有限,当存储大量数据时,就需要使用虚拟空间

操作系统管理内存的不同方法:
操作系统在完成内存管理操作同时还需要高度依赖于硬件
- 必须知道内存架构
- MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求
3.2 地址空间及地址生成
① 地址空间的定义:
物理地址空间:
物理地址空间是指一些硬件支持的地址空间,比如硬盘和内存条、高速缓存…
逻辑地址空间:
逻辑地址空间是指一个运行程序所拥有的内存范围,它的结构很简单,就是一条线性的地址空间
但是最终逻辑地址空间还是会指向物理地址空间,操作系统需要协调这二者的关系,通过映射来使得逻辑地址指向物理地址。
② 逻辑地址的生成:

③ 物理地址的生成:
=>CPU方面
a. CPU执行指令时,它的ALU部件会需要指令的某个内容,它发出的请求中的参数会携带逻辑地址;
b. CPU的内存管理单元MMU 寻找逻辑地址的映射表中是否存在物理地址。如果没有找到,那么就会产生一个处理过程,去内存中找。如果最终找着了,那么CPU的控制器从总线发送在物理地址的内存内容的请求;
=>内存方面
a. 内存发送物理地址内存内容给CPU(CPU开始处理对应的指令)
=>操作系统方面
a. 建立逻辑地址和物理地址之间的映射关系,该关系可以放在内存中由CPU缓存来加快进程(确保程序不相互干扰)

④ 地址安全检查:

3.3 连续内存分配:内存碎片与分区的动态分配
内存碎片问题:
碎片是指内存空闲不能被利用,碎片分为内部碎片和外部碎片,外部碎片是指分配单元之间不能被使用;内部碎片是指分配单元中不能被使用。
简单的内存管理方法:
操作系统管理内存的简单方法:当一个程序准许运行在内存中时分配一个连续的空间;分配一个连续的内存空间给运行的程序以访问数据。
分区的动态分配策略:
1、首次适配:
概念:现在想要分配n 字节,那么就会从低地址开始查找,当查找到第一个空间大于n字节就结束返回。
需求:
- 存在一个按照地址排序的空闲块列表
- 分配需要寻找一个合适的分区
- 重分配需要检查,看是否自由分区能够合并于相邻的空闲分区(回收)
优点:
- 简单、易于操作
- 便于生成更大的空间块,向着空间地址的结尾(如果在前边找到后就结束,那么不会破坏之后的空间块)
缺点:
- 易于产生外部碎片(前后两个可利用空间块之间的小块不能被使用,会被忽视)
- 不确定性
2、最优适配:
概念:会在空闲块间查找最适合的空间块,为了避免分割大的空闲块,同时为了最小化外部碎片产生的尺寸
需求:
- 按照尺寸排列的空闲块列表
- 分配需要查找一个合适的分区
- 重分配需要搜索合并于相邻的空闲分区
优点:
缺点:
3、最差适配:
概念:为了分配n字节,使用最大的空闲块,以至块的尺寸比n大
需求:
- 按尺寸排列的空闲块
- 分配很快(每次获得最大的分区)
- 重分配需要合并于相邻的空闲分区
优点:对于分配的是中等尺寸效果最好
缺点:
- 重分配慢
- 会产生外部碎片
- 易于破坏大的空闲块以至于需要分配大分区时无法被分配
3.4 连续内存分配:压缩式与交换式碎片整理
1、压缩式碎片整理(紧致)

- 重置程序以合并空洞
- 要求所有程序是动态可重置的
- 问题:何时重置,开销大
如图:如果能够将程序占用的内存进行拷贝重分配,那么会产生更多可用的内存空间,但是仅仅靠软件来操作会有很大的开销,对系统的性能会有更大的影响。
2、交换式碎片整理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBNh7Kvi-1601035285720)(第三章、连续式内存分配.assets/image-20200919205114421.png)]
如果在运行P3时需要更多的内存,而此时P4正在等待,那么就可以将P4的数据拷贝到磁盘(虚拟内存)中,此时P3就获得了足够多的内存可以运行;当P4需要执行时再从磁盘上拷贝回 memory(主存)中即可。
有很大的开销,对系统的性能会有更大的影响。
2、交换式碎片整理

如果在运行P3时需要更多的内存,而此时P4正在等待,那么就可以将P4的数据拷贝到磁盘(虚拟内存)中,此时P3就获得了足够多的内存可以运行;当P4需要执行时再从磁盘上拷贝回 memory(主存)中即可。