第三章 内存管理
3.1 内存管理概念
3.1.1 内存的基础知识
-
内存
-
补充:几个常用的数量单位
-
指令的工作原理
从 #0 开始存放的:
不是从 #0 开始存放的:
-
装入的三种方式
1、绝对装入:
2、可重定位装入(静态重定位)
3、动态运行时装入(动态重定位)
-
从写程序到程序运行
-
链接的三种方式
1、静态链接:
2、装入时动态链接:
3、运行时动态链接:
知识回顾与重要考点:
考试频率较低,主要为后续内容做基础
3.1.2 内存管理的概念
-
操作系统对内存进行管理:
1、内存的空间分配与回收
2、内存空间的扩展
3、地址转换
4、内存保护
(1)在CPU中 设置一对上、下限寄存器
(2)采用 重定位寄存器(又称 基址寄存器)和 界址寄存器(又称 限长寄存器)进行越界检查
知识回顾与重要考点:
3.1.3 覆盖与交换(大纲已删)
-
覆盖技术
具体例子:
-
交换技术
3.1.4 连续分配管理方式
单一连续分配
固定分区分配
怎么记录分区的空闲和分配情况?
动态分区分配
第一个问题:
第二个问题:
第三个问题:
- 分配
- 回收
对于 进程2(4MB) 进行回收
对于 进程3(18MB) 进行回收
对于 进程4(4MB) 进行回收
对于 进程2(14MB) 进行回收
3.1.5 动态分区分配算法
首次适应算法(First Fit)
例:
有一个进程5(15MB)需要分配
又有一个进程6(8MB)
最佳适应算法(Best Fit)
例:
一个新进程(9MB)需要分配,按照算法分配给分区2,修改分区大小为1,再 根据分区大小进行排序
缺点:每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片
最坏适应算法(Worst Fit)
例:
假如有一个进程(3MB),分配第一个分区,第一个分区大小变为17;
还有一个进程(9MB),分配第一个分区,第一个分区大小变为8,需要重新排序:
缺点:每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被迅速用完。如果之后有“大进程”到达,就没有内存分区可用了。
邻近适应算法(Next Fit)
例:
有一个进程(5MB),分配第二个分区,将分区2的大小由6改为1,不用进行重新排序;
还有一个进程(5MB),从第二个分区开始接着进行查找,分配第三个分区,分区3改为5
知识回顾
3.1.6 基本分页存储管理的概念
- 什么叫分页存储
将进程划分的页面分配到页框中:
- 重要的数据结构
问题:
1、问题一:每个页表项占多少字节?
⭕ 块号:
⭕ 页号:
因此:
2、问题二:如何实现地址的转换?
连续存放时:
分页后:
(1) 子问题:如何确定一个逻辑地址对应的页号、页内偏移量?
(2) 子问题:为何页面大小要取2的整数幂?
总结:
- 逻辑地址结构
知识回顾与重要考点:
3.1.7 基本地址变换机构
如果页号P>页面长度M,说明此时的页号P是非法的,需要抛出一个越界中断(内中断)
若合法,利用页号P和页表始址F进行计算,找到该页号对应的页表项(知道页号、页表始址、每个页表项长度,即可算出页号所对应的页表项所存放的位置)
由内存块号、页内偏移量,最终可得到物理地址
即:
例:
对页表项大小的进一步探讨
知识回顾与重要考点
一维指:要让CPU根据逻辑地址找到物理地址,只需用告诉CPU一个信息,即逻辑地址的值,不需要告诉其他信息。
3.1.8 具有快表的地址变换机构
- 什么是快表(TLB)
能否把整个页表放在TLB中?
- 引入快表后,地址的变换过程
例:
- 局部性原理
知识回顾与重要考点
3.1.9 两级页表
- 单级页表存在的问题
- 如何解决单级页表的问题(问题一)?
两级页表的原理、地址结构:
如何实现地址变换
- 如何解决单级页表的问题(问题二)?
- 几个细节
知识回顾与重要考点
3.1.10 基本分段存储管理
- 分段:
- 段表
- 地址变换
在分段管理中要对段内地址W(即段内偏移量)进行一个检查(即第④步)
- 分段、分页管理的对比
知识回顾与重要考点
3.1.11段页式管理方式
- 分页、分段的优缺点
分段管理中产生的外部碎片也可以用“紧凑”来解决,只是需要付出较大的时间代价。
- 分段 + 分页 = 段页式管理
-
段页式管理的逻辑地址结构
-
段表、页表
3.2 虚拟内存管理
3.2.1 虚拟内存的基本概念
- 传统存储管理方式的特征、缺点
虚拟存储技术的提出是基于局部性原理的。
- 局部性原理
- 虚拟内存的定义和特征
- 如何实现虚拟内存技术
3.2.2 请求分页管理方式
- 页表机制
- 缺页中断机构
如果内存中有空闲块:
如果内存中没有空闲块:
若页面置换算法选择了2号页面淘汰
2号页面写回外存后,占有的c号块就可以空出来,让给0号页面使用,于是把0号页面调入内存的c号块,更改相应数据
缺页中断:
- 地址变换机构
知识回顾与重要考点
3.2.3 页面置换算法
最佳置换算法(OPT)
例:
最佳置换算没可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的。
先进先出置换算法(FIFO)
例:
题目改为分配了四个内存块:
最近最久未使用置换算法(LRU)
例:
时钟置换算法(CLOCK)
1、简单的CLOCK算法
例:
第一轮扫描后:
第二轮扫描时,1号页面为0,所以会淘汰1号页面,变为:
接下来依次访问3、4号页面,依次将3、4号页置为1:
接着需要访问7号页面,由于7号页面不在内存中,需要淘汰一个页面,将7号页面放入内存中。从扫描到的位置依次开始扫描,找到第一个为0的页面,并且扫描过的页面置为0。
即3、4号页面由1变为0,找到第一个为0的页面——2号页面:
将2号页面淘汰:
2、改进型的时钟置换算法
例:
- 第一种情况
第一轮扫描就找到了:
- 第二种情况:
第一轮扫描:不做修改,找不到(0,0)
第二轮扫描:
- 第三种情况
第一轮扫描:不做修改,找不到(0,0)
第二轮扫描:找不到(0,1),将扫描过的帧访问位设为0
第三轮扫描:
- 第四种情况
第一轮扫描:找不到(0,0),不做修改
第二轮扫描:找不到(0,1),将扫描过的帧访问位设为0
第三轮扫描:找不到(0,0),不做修改
第四轮扫描:
知识回顾与重要考点
3.2.4 页面分配策略、抖动、工作集
- 页面分配、置换策略
系统会锁定一些页面,这些页面中的内容不能置换出外存(如:重要的内核数据可以设为“锁定”)
- 何时调入页面
- 从何处调入页面
1、
2、
3、
- 抖动(颠簸)现象
- 工作集
例:
知识回顾与重要考点
一般作为选择题考查,有时可能作为大题条件