虚拟存储器

概述

如何将更多任务装入主存

  • 增大主存容量

  • 使用交换技术、

    • 当主存中没有处于就绪的任务时,操作系统调入其他任务来执行

    • 分区和分页

  • 虚拟存储器

    • 请求分页:每次访问仅将当前需要的页面调入主存,而其他不活跃的页面放在外存磁盘上

    • 虚拟地址

分区方式

主存分为两大区域:系统区、用户区

  1. 简单固定分区

    用户区划分成长度不等的固定长的分区,当一个任务调入主存时,分配一个可用的、能容纳它的、最小的分区

  2. 可变长分区

    用户区按每个人物所需要的内存大小进行分配

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

分页方式

基本思想:

  • 把主存分成固定长且比较小的存储块,称为页框,每个任务也被划分成固定长的程序块,称为

  • 将页装入页框上,且无需采用连续的页框来存放一个任务中所有的页

逻辑地址:指令中的地址

物理地址:实际主存地址

虚拟存储器

基本思想:

  • 请求分页:仅将当前需要的页面调入主存

    • 通过硬件将逻辑地址转换为物理地址

    • 未命中时在主存和硬盘之间交换信息

优点:

  1. 在不扩大物理内存的前提下,可以载入更多的任务

  2. 编写程序时不需要考虑可用物理内存的状态

  3. 可以在大于物理内存的逻辑地址空间中编程

流程

  1. 先把程序加载到硬盘的特定区域,然后我们什么时候需要这个内存,移动到主存中去

  2. 存储是否被加载到物理内存中,如果被加载进物理内存,则是物理地址,如果没有在里面就在磁盘中

    • 满了可以使用替换策略进行替换
  3. 内存中有的,硬盘中也是有的

    • 拷贝关系

页大小:4KB、8KB、$\cdots$

映射算法:全相联映射

写策略:写回法

  • 被替换出来才修改硬盘中的数据

种类

  • 分页式虚拟存储器

  • 分段式虚拟存储器

  • 段页式虚拟存储器

分页式虚拟存储器

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

  • 虚拟页/逻辑页:虚拟地址空间中的页面

  • 物理页/页框:主存空间中的页面

页表

页表中包含了所有虚拟页的信息,包括虚拟页的存放位置、有效位(有无被加载到物理内存中)、修改位、存取权限位等等

  • 保存在主存中

虚拟地址:页号+页内偏移量

页号 页内偏移量

根据页表中记录的物理页存放位置,可以将虚拟地址转化为物理地址

  • 虚拟页号 + 页内偏移量 $\rightarrow$ 物理页号 + 页内偏移量

  • location没写:指向硬盘的指针

  • loaction = null:表示磁盘里没有,而不是内存中没有

  • 虚拟页号比物理页号大一些

    • 虚拟页号没必要存储,按照相应的物理页号位置来找虚拟页号的位置

如果location的长度是不同的,那么必须按照最长的部分等长存储,以免无法进行更换

快表TLB

为了减少对内存的访问,我们将常用的页表的行放到Cache中去

  • 需要在前面加上个标记表示第几行

  • 映射方式:全相联映射、组相联映射

  • 替换策略:随机替换

流程

我们只要将虚拟页号根据页表转换到物理页号中去

  • 前提:在物理内存中

  • 如果hit,直接传入物理地址;如果miss,到页表中去访问

    • 这里的hit和miss发生在Cache中,因为TLB存放在Cache中

    • 如果hit并且是invaild(无效)的情况下,我们用硬盘把页送到内存中去,然后到Cache正常访问

      • 有效位是表示有无加载到物理内存中

如果没在物理内存中的话,就是发生了缺页操作,于是对磁盘进行操作

  • 也就是invaild操作

TLB、页表、Cache缺失组合

序号 TLB Cache 可能性 说明
1 hit hit hit 可能 TLB命中则页一定命中,信息在主存里,就可能在Cache中
2 hit hit miss 可能 TLB命中则页一定命中,信息在主存里,可能不在Cache中
3 miss hit hit 可能 TLB缺失但页可能命中,信息在主存里,就可能在Cache中
4 miss hit miss 可能 TLB缺失但页可能命中,信息在主存里,但可能不在Cache中
5 miss miss miss 可能 TLB缺失,则页也可能缺失,信息不在主存,一定也不在Cache
6 hit miss miss 不可能 页缺失,说明信息不在主存,TLB一定没有该页表项
7 hit miss hit 不可能 页缺失,说明信息不在主存,TLB一定没有该页表项
8 miss miss hit 不可能 页缺失,说明信息不在主存,Cache一定没有该信息
  • Cache是内存的拷贝

  • TLB miss的情况下只是比hit的情况多一次内存访问

访问主存和硬盘次数

  • 无需访问主存:1

  • 访问一次主存:2、3

  • 访问两次主存:4

  • 访问2次主存,且访问硬盘:5

分段式虚拟存储器

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

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

优点:段的分解与程序的自然分解相对应,易于变易、管理、修改和保护

缺点:段的长度不固定

段页式虚拟存储器

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

  • 每个分段都有一个页表

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

优点:程序按段实现共享与保护

缺点:需要多次查表