虚拟存储器


虚拟存储器

1.物理和虚拟寻址

计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址

CPU访问内存的最自然的方式就是使用物理地址。这种方式称为物理寻址

  • 提供给程序员的内存模型仅仅是物理内存,一组从0到某个最大值的地址,每个地址通常对应一个字节单元。

  • 在这种情况下,内存中不可能同时有两个正在运行的程序。如果第一个程序写了一个新值到比如addr 2000,这将擦除第二个程序存储在那里的值。

示例:

有两个程序,每个程序的大小为16 KB。前者为阴影区域。

  • 第一个程序从addr 24开始,addr 24包含一个MOV指令。
  • 第二个程序从addr 28开始,addr 28包含一个CMP指令。
  • 当两个程序从地址0开始在内存中连续加载时,有图(c)的情况。
  • 在第一个程序运行后,操作系统可能决定运行第二个程序,该程序已加载在第一个程序之上,addr 16384。执行的第一个指令是jmp 28,它跳转到在第一个程序中的ADD指令,而不是它应该跳转到的CMP指令。

核心问题是这两个程序都引用绝对物理内存


现代处理器一般使用虚拟寻址

CPU通过生成一个虛拟地址(Virtual Address,VA)来访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址

将一个虚拟地址转换为物理地址的任务叫做地址翻译(address translation)。

CPU芯片上叫做内存管理单元(Memory Management Unit, MMU)的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由操作系统管理。

2.工作原理

虚拟存储器通过在主存和辅存之间增加部分软件和硬件,使主存和辅存构成整体,如同大容量主存一样。

利用虚拟存储器提供的虚拟地址进行编程,在主存空间不增加的情况下不受主存空间的限制。

  • 虚拟存储器充分利用程序局部性,采用按需加载方式。
    • 不直接将程序和代码载入主存,仅在相应的虚拟地址转换表登记虚拟地址对应磁盘地址
    • 程序执行并访问对应虚拟地址时,产生缺页异常,由操作系统从磁盘调入数据块。
    • 程序仅加载一小部分空间即可运行,提高主存利用率。

地址空间

虚拟存储器有三种地址空间:

虚拟地址空间:程序员用来编写程序的空间,虚地址

主存地址空间:物理地址空间,或叫实地址空间,实地址

辅存地址空间:磁盘的地址空间,辅存地址


3.页式虚拟存储器

以页(Page)为逻辑划分信息传送单位。

虚拟地址划分

虚拟地址被划分为虚拟页号(Virtual Page Number,VPN)和虚拟页偏移(Virtual Page Offset,VPO),物理地址也被划分为物理页号物理页偏移

页表

页表是一张保存虚拟页号VPN和物理页号PPN对应关系的查找表。

VPN作为索引进行访问,每个表项包括有效位、物理页号、修改位等。


文章作者: Maosr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Maosr !
  目录