王道_操作系统 第三章 内存管理
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方式:运行之前,进程有关的数据全部放在文件区,故未使用过的页面都可从文件区调入。若被使用过的页面需要换出,则写回对换区,下次需要时从对换区调入。

15.4 抖动(颠簸)现象

15.5 工作集

15.6 知识回顾与重要考点


浙公网安备 33010602011771号