本文已参加「新人创造礼」活动,一同开启掘金创造之路。

一、运用虚拟存储器的原因

  • 程序的可寻址地址空间大于主存的实际容量
  • 实际运用的内存空间大于主存的实际容量
  • 多个进程的地址空间堆叠,每个进程理论上能够运用悉数内存

二、虚拟存储器的层次化存储结构

虚拟存储器的核心思想:将一部分数据存储在硬盘上,进步内存的存储才能

存储在硬盘上的部分称为页面文件(page file)

项目\存储器类型 高速缓存 虚存
上层存储器 主存
基层存储器 主存 硬盘
存储单元
上层地址 块号+偏移 物理地址
基层地址 内存地址 虚拟地址
映射机制 内存地址转为缓存地址 细泥底质转为物理地址
失效 缓存失效 页面毛病
上层已满的处理 缓存块替换 页替换

三、页

将每个进程的虚拟内存和体系物理内存划分为固定巨细的数据单元,称为(Page)

在物理内存中仅保存一部分进程的一部分页,虚拟内存页(虚页)需求经过地址转化为物理内存中的页

物理内存中的页称为页面(Frame/Page Frame)

页表

页表保存了每个进程的虚拟内存页与物理内存页的地址转化关系,一般保存在内存里

每个进程有独立的页表

计算机组成与体系结构——存储_虚拟内存

四、虚存地址转化

和缓存类似,虚拟内存相同经过对地址的分化实现地址转化

虚拟地址分为两个字段

  • 页编号(Page No.):该页在虚拟内存中的编号
  • 页内偏移值(Offset):该地址在虚拟内存中对应页内的偏移值

物理地址分为两个字段

  • 页面编号(Frame No.):该页在物理内存中对应的页面编号
  • 页内偏移值(Offset):该地址在对应页面中的偏移值

例:假定一个按字节寻址的体系支持13位虚拟地址,物理内存选用12位地址,页面巨细为1024B,求以上字段长度

虚拟地址共13位
	偏移值长度=log2(1024)=10
	页编号长度=13-10=3
物理地址共12位
	偏移值长度=log2(1024)=10
	页编号长度=12-10=2

例:假定一个按字节寻址的13位体系,物理内存巨细为4KB,页面巨细为1KB,且进程1的页表如下,请问下列虚拟地址对应的物理内存地址别离是多少?

  • 0x1553
  • 0x0802
  • 0x1004

计算机组成与体系结构——存储_虚拟内存

由上图知道:
虚拟地址中:Page规模0~7,因而虚页号长度为log2(8)=3,偏移量10
物理地址中:Frame规模0~3,页号长度为2,偏移量10
1.
0x1553=101 0101010011,查第五页,页面编号1,有用位1
物理地址=01 0101010011=0x0553
2.
0x0802=010 0000000010,查第二页,页面编号0,有用位1
物理地址=00 0000000010=0x0002
3.
0x1004=100 0000000100,查第四页,页不在内存中,产生页面毛病

分页内存办理的有用拜访时刻

拜访一次虚拟内存需求两次内存拜访:第一次拜访页表,第2次拜访物理地址

例:假定拜访主存时刻为200ns,产生页面失效的处理时刻是10ms,求页面是功率是1%和0%的有用拜访时刻

1.失功率1%
t = 99%  (200ns+200ns) + 1%  10ms = 100396ns
2.失功率0%
t = 200ns+200ns = 400ns

留意两次内存拜访

五、转译后备缓冲器(TLB)

以下是设计初衷:

  • 为了削减拜访内存的时刻:运用高速缓存
  • 为了削减拜访页表的开支:运用转化后备缓冲器(Translation Lookaside Buffer, TLB)

TLB用以进步拜访页表的功率

TLB的原理经过层次化存储结构进步拜访页表的速度,TLB是特殊的缓存,其保存虚拟页编号到物理页面编号的映射,一般选用相联缓存实现

运用TLB的页面拜访过程

  1. 从虚拟地址中提取出页号和偏移值
  2. 在TLB中查找虚拟页号对应的表项
  3. 假如找到,则用对应的物理页号和偏移值生成物理地址
  4. 假如未找到,需求拜访内存中的页表
  5. 假如该页在主存中,依据页表中的页面编号和偏移值生成物理地址,并更新TLB
  6. 不然产生页面毛病,触发中止,一般中止程序需求将页面加载到内存中,更新页表和TLB