Contents

操作系统(第四章)

存储器管理

存储器

  1. 内存
    1. 主存
      1. 连续分配
        1. 单一
        2. 分区
      2. 离散分配
        1. 分页式
        2. 分段式
        3. 段页式
    2. 虚拟(主+辅)
      1. 请求式分页
      2. 请求式分段
      3. 请求式段页
  2. 外存(第五章)

程序的运行与存储器的关系

  1. 地址转换

    1. 逻辑地址|相对地址
    2. 物理地址|绝对地址

    重定位:$逻辑地址 \rightarrow 物理地址$

  2. 两种重定位

    1. 静态:地址只能一次修改
    2. 动态:地址的多次修改

    区别:增加了一个重定位寄存器(存放内存的起始地址)

连续分配

为用户作业分配的内存空间

  1. 单一连续

    https://cdn.jsdelivr.net/gh/adan-ning/images/202404131631990.png

  2. 分区式

    把内存分成若干个连续的分区,每个分区都可以存储一个作业

    1. 固定式

      1. 分区大小相等
      2. 分区大小不相等
    2. 可变式(动态分区分配)

      $分区分配算法 \rightarrow 分区链接的要求$

      1. 首次适应算法

      要求:$由低地址 \rightarrow 高地址链接$

      1. 循环首次适应算法

        要求:$由低地址 \rightarrow 高地址链接$

      2. 最佳适应算法(最容易产生外零头)

        要求:按大小:$从小 \rightarrow 大链接$

      3. 最坏性算法

        要求:按大小:$从大 \rightarrow 小链接$

      碎片的处理方式:

      设置分区单位:粒度(1KB)

      1. $碎片 \leq 粒度$:可以分配作业
      2. $碎片 \geq 粒度$:可以进行二次分配
  3. 重定位

    动态重定位:程序可以移动(整理碎片)$\rightarrow$紧凑

离散分配

  1. 分页式

    页/页面,页框/物理块,逻辑地址/物理地址,页表,逻辑地址$\rightarrow$物理地址

    https://cdn.jsdelivr.net/gh/adan-ning/images/202404131643907.png

例:

某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面对应的物理块号如下表

https://cdn.jsdelivr.net/gh/adan-ning/images/202404172223288.png

则逻辑地址093C(H)所对应的物理地址为 ?

解:

逻辑地址:$32 \times 1KB = 32KB \rightarrow 2^{15} \rightarrow 15bit$

每页大小:$1KB \rightarrow 2^{10} \rightarrow 10bit(页内地址)$

15-10=5bit(页号)

000(0) 1001(9) 0011(3) 1100(C) (逻辑地址为15位,所以093C转换为2进制也为15位)

内存:$16KB=2^{14}$ 物理地址:14bit

低10bit,块内地址(页内地址)

高 4bit,块号

01/0001/0011/1100

即物理地址为:113C(H)

例:

对于表所示的段表:请将逻辑地址(0,137),(1,4000),(2,3600),(5,230)转换成物理地址

https://cdn.jsdelivr.net/gh/adan-ning/images/202404172237695.png

解:

(0,137)

137<10K ,段号0存在

转换为物理地址为:$50 \times 1024 + 137=51337$

(1,4000)

4000>3K,产生中断,无法转换

(2,3600)

3600<5K,段号2存在

转换为物理地址为:$70 \times 1024 + 3600=75280$

(5,230)

段号不存在,无法转换

例:

已知分页系统,逻辑空间32个页面,每页大小2KB,内存空间1MB

  1. 画出逻辑地址格式

    https://cdn.jsdelivr.net/gh/adan-ning/images/202404172246479.png

  2. 如果不考虑访问权限,页表有多少项,每项至少需要多少位

    32个页面=32项

    内存(MB):$\frac{1MB}{2KB}=\frac{1\times 2^{20}}{2^{11}}=2^9$个

    每项至少需要多9位

  3. 如果内存减少一半,则页表会发生怎么变化?

    32个页表项不变

    内存:$1MB \rightarrow 512KB$

    $\frac{2^{19}}{2^{11}}=2^8$

    每项至少需要的位从9位变为8位

地址变换机构(逻辑$\rightarrow$ 物理)

  1. 基本的地址变换(5个部分)

    1. 页表寄存器:页表地址,页表长度
    2. 越界中断机构:页表与页表长度
      1. $\geq$,越界
      2. <,访问页表
    3. 逻辑地址
    4. 页表:页表起始+页号
    5. 物理地址:块号与页内地址拼接而成

    访问内存两次

    1. 访问页表
    2. 物理地址
  2. 有快表的地址转换

    增加了快表寄存器:将经常会访问的页面以及它的块号

    内存

    1. 命中快表:1次
    2. 未命中快表:2次

分段式

段,逻辑地址,物理地址,段表,地址转换

https://cdn.jsdelivr.net/gh/adan-ning/images/202404172304725.png

段表:段号,段长,基址组成

地址变换:$逻辑地址 \rightarrow 物理地址$

  1. 段表寄存器:段表始址,段表长度

  2. 越界中断机构

    两次越界中断比较

    1. 段号与段长关系
      1. >,中断
      2. <,访问段表
    2. 段内地址连续与段长
      1. >,中断
      2. $\leq$,可以转换
  3. 逻辑地址

  4. 段表

  5. 物理地址(基址+段内地址)

两次访问内存

  1. 访问段表
  2. 物理地址

分页与分段区别

  1. 页是信息的物理单位,段是逻辑单位
  2. 页长度是固定的,段长度不固定(由用户指定)
  3. 一维与二维

问:分页与分段实现共享,哪个更容易实现信息共享?

答:分段