虚拟存储器
概述
如何将更多任务装入主存
增大主存容量
使用交换技术、
当主存中没有处于就绪的任务时,操作系统调入其他任务来执行
分区和分页
虚拟存储器
请求分页:每次访问仅将当前需要的页面调入主存,而其他不活跃的页面放在外存磁盘上
虚拟地址
分区方式
主存分为两大区域:系统区、用户区
简单固定分区
用户区划分成长度不等的固定长的分区,当一个任务调入主存时,分配一个可用的、能容纳它的、最小的分区
可变长分区
用户区按每个人物所需要的内存大小进行分配
- 时间越长,存储器中的碎片就会越多
- 时间越长,存储器中的碎片就会越多
分页方式
基本思想:
把主存分成固定长且比较小的存储块,称为页框,每个任务也被划分成固定长的程序块,称为页
将页装入页框上,且无需采用连续的页框来存放一个任务中所有的页
逻辑地址:指令中的地址
物理地址:实际主存地址
虚拟存储器
基本思想:
请求分页:仅将当前需要的页面调入主存
通过硬件将逻辑地址转换为物理地址
未命中时在主存和硬盘之间交换信息
优点:
在不扩大物理内存的前提下,可以载入更多的任务
编写程序时不需要考虑可用物理内存的状态
可以在大于物理内存的逻辑地址空间中编程
流程
先把程序加载到硬盘的特定区域,然后我们什么时候需要这个内存,移动到主存中去
存储是否被加载到物理内存中,如果被加载进物理内存,则是物理地址,如果没有在里面就在磁盘中
- 满了可以使用替换策略进行替换
内存中有的,硬盘中也是有的
- 拷贝关系
页大小: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
分段式虚拟存储器
将程序和数据分成不同长度的段,将所需的段加载到主存中
虚拟地址:段号 + 段内偏移量
优点:段的分解与程序的自然分解相对应,易于变易、管理、修改和保护
缺点:段的长度不固定
段页式虚拟存储器
将程序和数据分段,段内再进行分页
- 每个分段都有一个页表
虚拟地址:段号 + 页号 + 页内偏移量
优点:程序按段实现共享与保护
缺点:需要多次查表