12_虚拟存储器

Charlie

1.操作系统的出现

5b_NVIDIA_GeForce_Overlay_DT.png

2.存取器管理

在多道程序系统中,主存需要进一步划分给多个任务,划分的任务由操作系统动态执行。

2.1 如何将更多任务装进主存

  • 增大主存容量
  • 使用交换(exchange)技术
    • 当主存中没有处于就绪的任务时,操作系统调入其他任务来执行
    • 分区(partitioning)和分页(paging)
  • 虚拟存储器
    • 请求分页:每次访问仅将当前需要的页面调入主存,而其他不活跃的页面放在外存磁盘
    • 虚拟地址

2.2 分区方式

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

2.2.1 简单固定分区

  • 基本思想:
    • 用户区划分成长度不等的固定长的分区
    • 当一个任务调入主存时,分配一个可用的、 能容纳它的、最小的分区
  • 优点:简单
  • 缺点:浪费空间,产生“内碎片
  • 5c_NVIDIA_GeForce_Overlay_DT.png

2.2.2 可变长分区

  • 基本思想
    • 用户区按每个任务所需要的内存大小进行分配
  • 优点:提高了主存的利用率
  • 缺点:时间越长,存储器中的碎片就会越多5d_NVIDIA_GeForce_Overlay_DT.png

2.3 分页方式

  • 基本思想
    • 主存分成固定长且比较小的存储块,称为页框(page frame),每个任务也被划分成固定长的程序块,称为页(page)
    • 将页装入页框中,且无需采用连续的页框来存放一个任务中所有的页
  • 逻辑地址/虚拟地址:指令中的地址
  • 物理地址:实际的主存地址
  • 页表(page table):建立页和页框的映射关系,每个进程都有一个页表,实现虚拟地址和物理地址的转换
    5e_NVIDIA_GeForce_Overlay_DT.png

3.虚拟存储器

  • 基本思想

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

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

    • 页大小
    • 映射算法
      • Cache比主存块10倍,主存比硬盘块100000多倍,缺页代价非常大,因此主存页框和虚拟页之间采用全关联映射
    • 写策略
      • 写回法,减少访问硬盘次数
    • 类型
      • 分页式虚拟存储器
      • 分段式虚拟存储器
      • 段页式虚拟存储器

3.1 流程

5f_NVIDIA_GeForce_Overlay_DT.png

3.2 分页式

  • 主存储器和虚拟地址空间都被划分为大小相等的页面
    • 虚拟页(virtual page,VP)/ 逻辑页(logical page):虚拟地址空间中的页面
    • 物理页(physical page,PP)/ 页框(page frame):主存空间中的页面
  • 页表
    • 页表中包含了所有虚拟页的信息,包括虚拟页的存放位置、装入位(valid)、修改位(dirty)、存取权限位等等
    • 保存在主存中
    • 虚拟地址:虚拟页号+页内偏移量

3.2.1 页表

  • 根据页表中记录的物理页存放位置,可以将虚拟地址转化为物理地址
    • 高位直接替换
  • 页表大小由虚拟内存地址空间大小决定
  • 装入位/有效位
    • 1:对应页在主存,是缓存页,存放位置指向主存页框号(物理页号)
    • 0:未调入主存,若存放位置为null则是为分配页;否则是为缓存页,给出虚拟页在磁盘上的起始地址

虚拟页号+页内偏移量->物理页号+页内偏移量
60_NVIDIA_GeForce_Overlay_DT.png

3.2.2 快表(Translation Lookaside Buffer, TLB)

页表的使用增加了主存的访问次数,为了减少访存次数,把页表中最活跃的几个页表项复制到高速缓存

  • 后备转换缓冲器(简称“快表”):将页表项放入高速缓存中
    • 映射:全关联映射,组关联映射
    • 替换:随机替换
    • 主存中的页表相应地称之为“慢表”
  • TLB标记
    • 该表项对应页表中哪个虚拟页的表项
    • 全关联:虚拟页号
    • 组关联:虚拟页号的高位(低位用于选择TLB组的组号)

3.2.3 CPU访存过程

61_NVIDIA_GeForce_Overlay_DT.png
62_NVIDIA_GeForce_Overlay_DT.png

3.2.4 TLB、页表、cache的缺失组合

63_NVIDIA_GeForce_Overlay_DT.png

3.2.5 缓存关系

  • TLB<-页表
  • cache<-主存
  • 主存<-硬盘

3.3 分段式

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

  • 虚拟地址:段号 + 段内偏移量
  • 与分页式虚拟存储器相比
    • 分页式虚拟存储器
      • 优点:实现简单、开销少
      • 缺点:一个数据或一条指令可能会分跨在两个页面
    • 分段式虚拟存储器
      • 优点:段的分界与程序的自然分界相对应,易于编译、管理、修改和保护
      • 缺点:段的长度不固定

3.4 段页式

将程序和数据分段,段内再进行分页,每个分段都有一个页表

  • 虚拟地址:段号 + 页号 + 页内偏移量
  • 优点:程序按段实现共享与保护
  • 缺点:需要多次查表
  • 标题: 12_虚拟存储器
  • 作者: Charlie
  • 创建于 : 2023-12-18 16:11:00
  • 更新于 : 2024-07-05 12:55:04
  • 链接: https://chillcharlie357.github.io/posts/7a95209e/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论