第三章
内存管理基础¶
内存管理概念¶
内存的基础知识¶
- 链接是组装程序零件的过程,把零散的目标文件 + 库文件,变成能运行的可执行文件,是编译到装入的必经之路。
- 形成逻辑地址的阶段就是链接。
- 装入时链接:程序从外存被装入到内存的阶段完成链接。
- 运行时链接:程序已经装入内存并开始实际执行,且执行到调用库函数的指令时才完成链接。
总结:
内存管理的概念¶
-
界地址寄存器存放的是最大逻辑地址。
-
上下限寄存器是早期单道程序时代的简易硬件方案,只做物理地址的越界检查,无地址转换能力,适配性差;
-
重定位 + 界地址寄存器是多道程序时代的升级硬件方案,把 “逻辑地址→物理地址转换” 和 “逻辑地址越界检查” 结合,解耦了程序和物理内存的绑定,解决了地址冲突、内存碎片、程序可移植性问题,成为现代操作系统内存管理的硬件基础(后续的分段、分页管理,都是在这个基础上扩展的)。
-
简单说,不是后两者 “相当于” 上下限寄存器,而是后两者包含了上下限的核心功能,又新增了地址重定位这个关键能力,是技术演进的必然结果。
-
可重定位装入 = 动态运行时装入,二者是动态重定位的专属配套装入方式,核心是「装入不改地址,运行硬件转地址」;而绝对装入是静态重定位的专属装入方式,核心是「装入改地址,运行直接用地址」。
总结:
进程的内存映像¶
总结:
覆盖与交换¶
- PCB会常驻内存,不会被换出外存。
总结:
连续分配管理¶
连续分配管理方式¶
- 内部碎片:分配给某进程的内存区域内,有没用上的空间。
- 外部碎片:内存中的某些空闲分区由于太小而难以利用。
- 紧凑技术:拼凑碎片,合一个更大的连续空间。
ps:紧凑技术只针对外部碎片
总结:
动态分区分配算法¶
总结:
基本分页存储管理¶
概念¶
- 页框对应的是内存块,页对应的是进程中与页框大小相等的一个个部分。
- 虽然进程的各个页面是离散存放的,但是页面内部是连续存放的。
- 页式存储可以提高内存利用率。
- 页表的始地址存放在页表寄存器(PTBR)中。
- 当CPU形成了一个有效地址后,由硬件负责查找页表。
总结:
基本地址变换机构¶
- 地址变换过程图示:

总结:
ps:这里的一维指的是只需要提供给CPU逻辑地址,就可以算出物理地址
具有快表的地址变换机构¶
- 因为每次转换一个逻辑地址为物理地址时都都需要访问两次内存(一次页表,一次找页框),那么为了提高效率,减少访问内存效率,因此诞生快表(又称联想寄存器,TLB),用力来存放最近访问的页表项的副本(局部性原理)。
- 进程发生切换时,快表中的内容是会被清空的。
- TLB和Cache的区别就在于,Cache中可能还会有其他各种数据的副本。
总结:
两级页表¶
总结:
基本分段存储管理方式¶
- 分段:按照程序自身的逻辑关系划分为若干个段(按模块划分),每个段有段名(程序员决定), 每段从0开始编址。因此,编程更方便,程序的可读性更高。
- 地址变换详细流程:

总结:
ps:这里二维指的是段名、段内地址
- 在段式存储管理中,若有些段可被多个进程共享,则可用一个单独的共享段表来描述这些段,而不需要在每个进程的段表中都保存一份。共享段表的作用是实现多个进程共享用一段代码或数据,这样既能节省内存空间,又能便于实现对共享段的更新和维护。
段页式管理方法¶
- 段页式是二维的。
- 一个进程对应一个段表,可能对应多个页表。
- 采用分段方法来分配和管理用户地址空间,采用分页方法来管理物理存储空间。
- 地址变换流程:

总结:
节末习题笔记¶
- 分段存储管理有利于动态链接。
- 引入段式存储管理方式,主要是为了满足用户的下列要求:方便编程、分段共享、分段保护、动态链接、动态增长。
- 在多个进程并发执行时,所有进程的页表大多数驻留在内存中。平时,进程未执行时,页表的始址和页表长度存放在本进程的PCB中;当调度到某进程时,才将这两个数据装入页表寄存器。
- 最佳适应算法大多数情况下空闲分区的大小不可能完全和当前要求的大小相等,几乎每次分配内存都会产生很小的难以利用的内存块,所以最佳适应算法产生最多的内存碎片。
虚拟内存管理¶
虚拟内存的基本概念¶
- 程序具有较好的局部性,能更有效地发挥其预期的作用。
总结:
请求分页管理方式¶
总结:
页面置换算法¶
- Belady异常:当为进程分配的物理块数量增大时,缺页次数不减反增的异常现象。
- CLOCK算法又称最近未用算法(NRU,Not Recently Used)
总结:
页面分配策略¶
- 驻留集大小一般小于进程总大小,但又不能太小或太大。
- 固定分配全局置换不存在,这是因为全局置换必然会引起驻留集大小的改变。
- 锁定的页面:不能置换出外存的页面。
总结:
内存映射文件¶
总结:
节后习题笔记¶
- 虚拟内存的最大容量是由计算机的地址结构(CPU寻址范围)确定的。
- 虚拟内存的实际容量 = min(内存和外存容量之和, CPU寻址范围)。
- 工作集不一定是驻留集的子集,因为有些工作集中的页面可能还未被调入内存,或已经被换出内存。
- 减少多道程序的度数其实就是减少内存中同时并发的程序数量,就是杀掉一些进程。
- 采用多级页表对提高TLB命中率没有影响。TLB 缓存的是虚拟页到物理页的最终地址映射,与页表分级无关。
- t时刻的k大小的工作集就是从t时刻往前数k个内存访问过的页面,并去重。
- 页故障数--缺页次数
- 若题目中给出页表在寄存器中且没有给出查页表时间的话,查页表时间忽略不计。
- 当访问序列中不连续的页号均不相同时,FIFO与LRU一样。
- 注意地址转换时间和访问时间。