文章目录
1、内存管理概述
- 内存空间的扩充
- 存储保护:保证各进程在自己的内存空间内运行,不会越界访问
- 内存的分配与回收
- 地址转换:逻辑地址到物理地址的转换
2、内存空间的扩充
2.1、覆盖技术
- 将程序分为多个段,常用的段存放在“固定区”,常驻内存,不常用的段存放在“覆盖区”,在需要时调入内存。
- 缺点:对用户不透明,增加了编程难度
2.2、交换技术
- 前置知识:磁盘分为文件区和交换区,文件区采用离散分配方式,占比大,读写速度慢;交换区采用连续分配方式,占比小,读写速度快。
- 内存空间紧张时,系统将内存中某些进程暂时换出内存,存放到交换区中,把外存中某些已具备运行条件的进程换入内存(中级(内存)调度)。被换出内存的进程处于挂起态,有就绪挂起和阻塞挂起
- 覆盖技术与交换技术的区别:覆盖技术针对一个进程的内存空间的,而交换技术是针对不同进程之间的内存空间的。
2.3、虚拟内存
- 传统内存的缺点
一次性:作业数据必须一次性全部调入内存
驻留性:整个作业的数据的在作业运行期间都会常驻内存
- 定义:程序不需要全部装入即可运行,运行时需要动态调入数据,若内存不够,需要换出数据。
- 特征
多次性:无需在作业运行时一次性将全部数据装入内存,而是运行被分成多次装入内存
对换性:无需在作业运行时一直常驻内存,而是允许在作业运行中,将作业换入、换出
虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于真实的物理内存容量
- 虚拟内存的实现
请求页面功能:访问的信息不存在内存时,引发缺页中断,由操作系统内核负责将所需信息从外存调入内存;
页面置换功能:内存空间不足时,将内存中暂时用不到的信息换出内存
3、存储保护
- 定义:保证各进程在自己的内存空间内运行,不会越界访问。
- 两种实现方式
1、设置上下限寄存器,存储进行自己的最低内存地址和最高内存地址
2、利用重定位寄存器、界地址寄存器进行判断
4、内存的分配与回收
4.1、连续分配管理
4.1.1、三种连续分配管理方式
- 单一连续分配:只支持单道程序,内存分为系统区和用户区,用户程序放在用户区;可能产生内部碎片
- 固定分区分配:内存被划分成多个大小固定的分区,每个分区只能装入一道作业;可能产生内部碎片。(每个分区的大小不一定都相同)
- 动态分区分配:在进程装入内存时,根据进程的大小动态建立分区;可能产生外部碎片,外部碎片可通过“紧凑”技术来解决
4.1.2、四种动态分区分配算法
| 算法 | 算法思想 | 分区排序方式 | 算法优点 | 算法缺点 |
|---|---|---|---|---|
| 首次适应算法 | 从头到尾寻找满足条件的分区 | 按地址递增排序 | 算法开销小 | |
| 最佳适应算法 | 优先使用更小的分区 | 按分区大小递增排序 | 保留了更多大分区,有利于大作业的分配 | 算法开销大;会产生很多很小的,难以利用的分区 |
| 最坏适应算法 | 优先使用更大的分区 | 按分区大小递减排序 | 可以减少产生难以利用的小分区 | 算法开销大;不利于大作业的分配 |
| 邻近适应算法 | 首次适应改造而来,每次寻找从上一次寻找结束的位置接着寻找 | 按地址递增排序(循环链表) | 算法开销小 | 高地址的大分区也会被分配,不利于大作业的分配 |
4.2、非连续分配管理
4.2.1、基本分页存储管理
-
页框:内存空间被分为一个个大小相等的分区(4KB),每个分区就是一个“页框”,每个“页框”都有编号,“页框号”从0开始。
-
页:进程的逻辑地址空间被分为一个个与“页框”大小相等的部分,每个部分称为“页”或"页面",每个“页面”都有编号,“页号”从0开始。
-
页与页框:操作系统以页框为单位给进程分配内存,进程的页面与内存的页框一一对应

-
逻辑地址到物理地址的转换

-
快表:TLB缓存存放了最近访问过的页表项,拥有快表的地址变换机构在查页表前会先访问TLB,如果有需要的页表项就无需去访问内存,命中快表时可减少访存次数。
-
单级页表存在的问题
1. 所有页表项必须连续存放,页表过大时需要很大的连续空间
2. 一段时间内只需要一部分页表项,无需让整个页表一直常驻内存
- 多级页表:将长长的页表再分页,存在一级页表和二级页表等,每增加一级页表,在没有快表机制的情况下,会增加一次访问内存的操作。多级页表中,各个页表的大小 不能超过一个页面的大小。
4.2.2、基本分段存储管理
- 段:将逻辑地址按照程序的逻辑关系划分为若干个段,每个段都从0开始编址,每个段所占大小可以不一样。程序员在编写程序的时候,会给每个段赋予一个段名,但在内存空间中存储的是段号。每个段占用连续的内存空间,段与段之间可以不相邻。

- 段表:段号与页号一样,也是虚拟的,不占用实际的空间。

- 页与段的对比

4.2.3、段页式存储管理

- 段页式:分段与分页结合实现,再分段存储的基础上,每个段进行分页管理
4697

被折叠的 条评论
为什么被折叠?



