0%

操作系统复习笔记3-内存管理

4.内存管理

内存管理的基本概念

链接与装入

(详见教材)

逻辑地址与物理地址空间

(详见教材)

对换与覆盖

(详见教材)

重定位

(详见教材)

内存分配方法

连续内存分配方法

  • 单一连续分配
    • 简单,无外部碎片
    • 只能用于单用户、单任务的操作系统,有内部碎片
  • 固定分区分配
    • 无外部碎片
    • 有内部碎片,存储空间利用率低
  • 动态分区分配
    • 无内部碎片,有外部碎片
    • 动态分区的分配策略(★★★★★)
    • 首次适应(★★★★):按地址从小到大依次寻找空闲分区,将第一个能满足要求的空闲分区分配给程序
    • 最佳适应:按容量从小到大依次寻找空闲分区,将第一个能满足要求的空闲分区分配给程序
    • 最坏适应(最大适应):按容量从大到小依次寻找空闲分区,将第一个能满足要求的空闲分区分配给程序
    • 邻近适应(循环首次适应):与首次适应类似,但是查找开始位置上一次查找结束的位置
    • 动态分区的分配策略的比较
      • 首次适应,简单,最好、最快

离散(非连续)内存分配方法(★★★★★)

分页

逻辑地址到物理地址的转换
不含快表(两次访存)
不含快表分页地址变换机构
  • 设页面大小为 L ,逻辑地址 A 到物理地址 E 的转换
    1. 分析出页号和页面偏移量(根据题设地址结构或者计算得出):计算页号 PP = A / L )和页面偏移量 WW = A % L
    2. 判断页号合法性:比较页号 P 和页表长度 M ,若 PM ,则产生越界中断,否则继续执行。
    3. 查页表,得块号:页表中页号 P 对应的页表项地址(目的是在内存中找到相应的页表项) = 页表始址 F + 页号 P × 页表项长度,取出该页表项内容 b ,即为物理块号。(注意区分页表长度页表项长度页表长度的值指一共有多少页,页表项长度是指页地址占多大的存储空间)
    4. 拼接块号和页内偏移量:计算 E = b × L + W ,用得到的物理地址E 去访问内存
含快表
含快表分页地址变换机构
  • 含快表的地址变换流程
    1. CPU 给出逻辑地址后,由硬件进行地址转换,将页号送入高速缓存寄存器,并将此页号与快表中的所有页号进行比较
    2. 若能找到匹配的页号,说明所要访问的页表项在快表中,则直接从中取出该页对应的块号,和页内偏移量拼接形成物理地址。(仅一次访存就可以存取数据)
    3. 若未找到,类似不含快表对逻辑地址进行转换,并把(页号,块号)对存入快表。若快表已满,则需依据相应的替换算法对快表中的元素进行替换
多级页表
  • 试和索引表比较一下

  • 多级和一级的对比

    • 一级页表,其存储页号到块号的存储极限取决于其本身的长度
    • 多级页表,其存储页号到块号的存储极限取决于各级页表长度之积
    • 总结:乘法比加法更能压缩空间
  • 以二级为例,分析其中的数据关系(注意举一反三)(★★★★★)

    • 32 位 逻辑地址空间、页面大小 4 KB、页表项 4 B,以字节为编址单位,试确定满足二级页表的逻辑地址空间格式(即求哪几位代表一级页号、二级页号、页内偏移)
      • 页内偏移位数 = \(log_2页面大小\) (本例即 \(log_24K = 12\)
      • 由于顶级页表最多一个页面,故顶级(一级)页表总共能容纳 \(页面大小/页表项大小\) 个页表项(本例为 4KB/4B = 1K),所需位数为 \(log_2(页表项个数)\) (本例为 \(log_2(1K) = 10\)
      • 剩下的 10 位,即为二级页号。
      • 所以逻辑地址空间格式如下
一级页号(10位) 二级页号(10位) 页内偏移量(12位)

分段(两次访存)

分段地址变换机构
  • 逻辑地址 A 到物理地址 E 的转换
    1. 提取段号和页内偏移量:逻辑地址 A 的结构:前几位是段号 S ,后几位是段内偏移 W
    2. 判断段号合法性:比较段号 S 和段表长度 M ,若 SM ,则产生越界中断,否则继续执行
    3. 查段表,找到段基址、段长,并判段内偏移的合法性:段表中段号 S 对应的段表项地址 = 段表首址 F + 段号 S × 段表项长度,取出该段表项的前几位得到段长 C 。若段内偏移量 ≥ C,则产生越界中断,否则继续执行。
    4. 取出段基地址,和段内偏移求和:取出段表项中该段的基址 b ,计算 E = b + W

段页(三次访存)

段页地址变换机构
  • 逻辑地址 A 到物理地址 E 的转换
    1. 依据段号查段表,找到页表始址
    2. 依据页表始址页号查页表,得到块号
    3. 块号页面偏移量拼接成物理地址

虚拟内存分配方法

虚拟内存的概念

(详见教材)

局部性原理

(详见教材)

实现虚拟内存所需的硬件和软件支持

(详见教材)

请求分页(段)管理

地址变换过程

虚拟内存请求分页管理

页面置换算法(★★★★★)

最佳(OPT)置换算法

  • 置换标准:淘汰最长时间内不再被访问的页面
  • 无法实现

先进先出(FIFO)置换算法

  • 置换标准:淘汰最早进入内存的页面(用队列实现)
  • 缺页率较高,会产生所分配的物理块数增大而页故障数反减的异常现象

最近最久未使用(LRU)置换算法

  • 置换标准:淘汰最近最久未使用的页面
  • 性能较好,但需要寄存器和栈的硬件支持。
  • 手算思路
    • 假想一个链表,其最大长度为内存中能存下最多页面的个数。
    • 若页面不在该链表中,且链表长度未超过最大长度,则将这个页面插入到链表头部
    • 若页面不在该链表中,且链表长度超过最大长度,则将链表末尾元素删除,并将新个页面插入到链表头部
    • 若页面在该链表中,则将新页面移动到链表头部,其他元素位置不变

时钟(CLOCK)置换算法(NRU,最近未用)

  • 置换标准:淘汰访问位为 0 的页面
    • (具体算法流程详见教材)
  • 改进的 CLOCK 算法:多增一位修改位。
    • 假设 A 为访问位, M 为修改位,(A, M)所有可能取值,淘汰顺序为
    • (0, 0) (0, 1) (1, 0) (1, 1) (优先换出未使用的;若全部都已使用,再考虑优先换出未被修改的)
    • (具体算法流程详见教材)

内存保护与共享

(详见教材)

抖动的概念和处理方法

(详见教材)

解题技巧及重要结论

  • 物理地址 VS 逻辑地址
    • 物理地址(实地址),若其位数为 32 位,意味着实际物理内存为 \(2^{32}B\)
    • 逻辑地址(虚地址),若其位数为 48 位,意味着对用户来说内存大小为 \(2^{48}B\) (采用了虚拟内存技术)
  • 含多级页表的逻辑地址的划分中的公式总结(对照教材中多级页表理解)
  • \(页内偏移位数 =log_2页面大小\)
  • \(页号部分总位数 = 逻辑地址总位数 - 页内偏移位数\)
  • \(一级页号位数=\frac{页面大小}{页表项大小}\)
  • \(页表级数 = \frac{页号部分总位数}{一级页号位数}\)

参考资料

  1. 计算机操作系统.汤小丹等
  2. 2020年操作系统考研复习指导.王道论坛