交换技术

分区

  • 分区方式将主存分为两大区域

    • 系统区: 固定的地址范围内, 存放操作系统
    • 用户区: 存放所有用户程序
  • 简单固定分区

    image-20250119221412202

    • 用户区划分长度不等固定长的分区

    • 当一个任务调入主存时, 分配一个可用的, 能容纳它的, 最小的分区

    • 优点: 简单

    • 缺点: 浪费主存空间

  • 可变长分区

    image-20250119221419480

    • 用户区按每个任务所需要的内存大小进行分配

    • 优点: 提高了主存的利用率

    • 缺点: 时间越长, 存储器中的碎片就会越多

分页

image-20250119221426986

  • 目的: 减少碎片的产生

  • 基本思想

    • 把主存分成固定长且比较小的存储块, 称为页框, 每个任务也被划分成固定长的程序块, 称为
    • 将页装入页框中, 且无需采用连续的页框来存放一个任务中所有的页
  • 逻辑地址: 指令中的地址

  • 物理地址: 实际主存地址

虚拟存储器

  • 问题

    • 内存大小是有限的, 但对内存的需求不断增加
  • 基本思想

    • 请求分页: 仅将当前需要的调入主存
      • 通过硬件将逻辑地址转换为物理地址
      • 未命中时在主存和硬盘之间交换信息
  • 优点

    • 在不扩大物理内存的前提下, 可以载入更多的任务
    • 编写程序时不需要考虑可用物理内存的状态
      • 程序员认为可以独享一个连续的, 很大的内存
    • 可以在大于物理内存的逻辑地址空间中编程

流程

image-20250119221448430

设计的一些问题

image-20250119221452580

分页式虚拟存储器

  • 主存储器和虚拟地址空间都被划分为大小相等的页面

    • 虚拟页/逻辑页: 虚拟地址空间中的页面
    • 物理页/页框: 主存空间中的页面
  • 页表

    • 包含了所有虚拟页的信息, 包括虚拟页的存放位置, 装入位, 修改位, 存取权限等
    • 保存在主存中
    • 虚拟地址
      • 虚拟页号+页内偏移量

    image-20250119221602283

页表

image-20250119221612192

问题

image-20250119221618121

快表 TLB

  • 页表的使用增加了主存的访问次数

  • 为了减少访存次数, 把页表中最活跃的几个页表项复制到高速缓存中

  • 后备转换缓冲器(简称"块表"): 将页表项放入高速缓存中

    • 映射: 关联映射, 组关联映射
    • 替换: 随机替换
  • 主存中的页表相应地称之为"慢表"

    image-20250119221624330

CPU访存过程

image-20250119221633479

image-20250119221637193

  • 缺页时, 页管理器优先替换主存中不存在于cache中的页

TLB、页表、Cache的缺失组合

image-20250119221644479

分段式虚拟存储器

  • 将程序和数据分成不同长度的段, 将所需的段加载到主存中

  • 虚拟地址: 段号+段内偏移量

  • 与分页式虚拟存储器相比

    • 分页式虚拟存储器(页对程序员不可见)
      • 优点: 实现简单, 开销少
      • 缺点: 一个数据或一条指令可能会分跨在两个页面
    • 分段式虚拟存储器(段对程序员可见)
      • 优点: 段的分界与程序的自然分界相对应, 易于编译, 管理, 修改和保护
      • 缺点: 段的长度不固定(引起碎片)

段页式虚拟存储器

  • 将程序和数据分段, 段内再进行分页

    • 每个分段都有一个页表
  • 虚拟地址

    • 段号+页号+页内偏移量
  • 优点

    • 程序按段实现共享与保护
  • 缺点

    • 需要多次查表