1 内存的基础知识
1.0 知识总览
1.1 什么是内存?有何作用?
补充知识:几个常用的数量单位
1.2 进程的运行原理——指令
1.3 逻辑地址 VS 绝对地址
1.4 从写程序到程序运行
1.5 装入模块装入内存
装入的三种方式——绝对装入
装入的三种方式——静态重定位
装入的三种方式——动态重定位
装入时依然保持使用逻辑地址
优点:除上述优点,还可将程序分配到不连续的存储区中;在程序运行前只需装入它的部分代码,即可投入运行,在程序运行期间,可根据需要动态申请分配内存;便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。
1.6 链接的三种方式
静态链接:
在程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的可执行文件(装入模块),之后不再拆开。
装入时动态链接:
将各目标模块装入内存时,边装入边链接(没有生成装入模块)。
运行时动态链接:
在程序执行中需要该目标模块时,才对它进行链接(如果不使用某模块,则不用链接)。优点是便于修改和更新,便于实现对目标模块的共享。
1.7 知识回顾与重要考点
2 内存管理的概念
2.0 知识总览
2.1 内存空间的分配与回收
2.2 内存空间的扩充
2.3 地址转换
2.4 内存保护
操作系统需要提供内存保护功能。保证各进程在各自存储空间内运行,互不干扰。
方法一:
方法二:
2.5 知识回顾与重要考点
重定位寄存器又叫基地址寄存器,界地址寄存器又叫限长寄存器。
3 覆盖与交换
3.0 知识总览
虚拟存储技术会在之后的小结中详细介绍
3.1 覆盖技术
例:
位于同一层次的模块不会被同时访问
覆盖技术只用于早期的操作系统中,现在已成为历史
3.2 交换技术
复习回顾:七状态模型
思考问题:
3.3 知识回顾与重要考点
4 连续分配管理方式
4.0 知识总览
4.1 单一连续分配
4.2 固定分区分配
思考:操作系统应该怎么记录内存中各个分区的空闲或者分配的情况呢?
4.3 动态分区分配
- 装入方式:动态重定位方式
分配
第一种情况:分区数量不变
第二种情况:分区数量改变
回收
第一种情况:回收区的后面有一个相邻的空闲分区
第二种情况:回收区的前面有一个相邻的相邻空闲分区
第三种情况:回收区的前、后各有一个空闲分区
第四种情况:回收区的前、后都没有相邻的空闲分区
4.4 知识回顾与重要考点
5 动态分区分配算法
5.0 知识总览
5.1 首次适应算法
5.2 最佳适应算法
优先使用更小的空闲区
分配空间后,空闲分区大小变小的节点可能需要更新链表中的顺序!
5.3 最坏适应算法
优先使用最大的空闲区
5.4 邻近适应算法
5.5 知识回顾与重要考点
6 基本分页存储管理的基本概念
6.0 知识总览
6.1 分页存储管理的基本概念
6.2 分页存储管理的地址转换
思考:将进程地址空间分页之后,操作系统该如何实现逻辑地址到物理地址的转换?
如何计算二进制位表示的地址转换:
结论:如果每个页面大小为2KB,用二进制数表示逻辑地址,则末尾K位即为页内偏移量,其余部分就是页号。
6.3 逻辑地址结构
6.4 页表
6.5 知识回顾与重要考点
7 基本地址变换机构
7.0 知识总览
该小节也属于基本分页存储管理的内容。重点理解、记忆基本地址变换机构(用于实现逻辑地址到物理地址转换的一组硬件机构)的原理和流程。
7.1 基本地址变换机构
动手验证:假设页面大小L=1KB,最终要访问的内存块号b=2,页内偏移量W=1023。
①尝试用E=b*L+W计算目标物理地址。
②尝试把内存块号、页内偏移量用二进制表示,并把它们拼接起来得到物理地址。
对比①②的结果是否一致
注意:对页号进行越界检查
7.2 知识回顾和重要考点
8 具有快表的地址变换机构
8.0 知识总览
8.1 局部性原理
8.2 什么是快表(TLB)
快表,又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加快地址变换的过程。于此对应,内存中的页表常称为慢表。
8.3 引入快表后,地址的变换过程
8.4 知识回顾与重要考点
9 两级页表
9.0 知识总览
9.1 单级页表存在的问题
9.2 两级页表的原理、地址结构
9.3 如何实现地址变换
9.4 两级页表需要注意几个细节
1)各级页表的大小不能超过一个页面
2)访存次数分析
多级页表比单级页表内存利用率高,但访存次数上升。两级页表最多需要访问3次内存,n级页表最多需要访问n+1次内存。
9.5 知识回顾与重要考点
10 基本分段存储管理方式
10.0 知识总览
10.1 分段
10.2 段表
10.3 地址变换
分段需要对段内位置进行检查;分页不需要检查
10.4 分段、分页管理的对比
比如简单输出“Hello World”的代码段可以被共享
为什么分页管理中不方便实现信息共享:
10.5 知识回顾与重要考点
11 段页式管理方式
11.0 知识总览
11.1 分页、分段的优缺点分析
11.2 分段+分页=段页式管理
段页式管理的逻辑地址结构
11.3 段表、页表
一个进程会对应一个段表,但是一个进程可能会对应多个页表
11.4 地址转换
- 从PCB中读出段表寄存器内容
要点:访存次数、合法性检查
11.5 知识回顾与重要考点
12 虚拟内存的基本概念
12.0 知识总览
在传统存储管理方式的基础上引入了交换技术、覆盖技术,使得内存利用率有所提升,并且能从逻辑上扩充内存容量。
12.1 传统存储管理方式的特征、缺点
12.2 局部性原理
12.3 虚拟内存的定义和特征
12.4 如何实现虚拟内存技术
12.5 知识回顾与重要考点
13 请求分页管理方式
13.0 知识总览
13.1 页表机制
13.2 缺页中断机构
13.3 地址变换机构
快表中有的页面一定是在内存中的。所以若某个页面被换出内存,则快表中的相应表项也要删除,否则可能访问错误的页面。
补充细节:
①修改访问位和修改位:只有“写指令”才需要修改“修改位”。并且,一般来说只需要修改快表中的数据,只有要将快表项删除时才需要写回内存中的慢表。这样可以减少访存次数。
②保留CPU现场:和普通的中断处理一样,缺页中断处理依然需要保留CPU现场
③选择一页换出:需要用某种“页面置换算法”来决定一个换出页面(下节内容)
④将该页写回外存:换入/换出页面都需要启动慢速的I/O操作,可见,如果换入/换出太频繁,会有很大的开销
⑤修改页表:页面调入内存后,需要修改慢表,同时也需要将表项复制到快表中
在具有快表机构的请求分页系统中,访问一个逻辑地址时,若发生缺页,则地址变换步骤是:
查快表(未命中)——查慢表(发现未调入内存)——调页(调入的页面对应的表项会直接加入快表)——查快表(命中)——访问目标内存单元
13.4 知识回顾与重要考点
14 页面置换算法
14.0 知识总览
14.1 最佳置换算法(OPT)
14.2 先进先出置换算法(FIFO)
Belady异常
14.3 最近最久未使用置换算法(LRU)
14.4 时钟置换算法(CLOCK / NRU)
最多经过两轮扫描
14.5 改进型的时钟置换算法
第一优先级:最近没访问,且没修改的页面(0,0)
第二优先级:最近没访问,但修改过的页面(0,1)
第三优先级:最近访问过,但没修改的页面(1,0)
第四优先级:最近访问过,且修改过的页面(1,1)
14.6 知识回顾与重要考点
15 页面分配策略
15.0 知识总览
15.1 页面分配、置换策略
驻留集
固定分配局部置换
可变分配全局置换
锁定:系统会锁定一些页面,这些页面中的内容不能置换出外存(如:重要的内核数据可以设为“锁定”)
可变分配局部置换
15.2 调入页面的时机
15.3 从何处调入页面
- 系统拥有足够的对换区空间:页面的调入、调出都是在内存与对换区之间进行,这样可以保证页面的调入、调出速度很快。在进程运行前,需将进程相关的数据从文件区复制到对换区。
- 系统缺少足够的对换区空间:凡是不会被修改的数据,都直接从文件区调入,由于这些页面不会被修改,因此换出时不必写回磁盘,下次需要时再从文件区调入即可。对于可能被修改的部分,换出时需写回磁盘对换区,下次需要时再从对换区调入。
- UNIX方式:运行之前,进程有关的数据全部放在文件区,故未使用过的页面都可从文件区调入。若被使用过的页面需要换出,则写回对换区,下次需要时从对换区调入。