4.12-虚拟存储器

虚拟存储器概念:用于解决主存容量不足的问题

手机屏幕的截图

描述已自动生成

  • 冯诺依曼计算机工作原理:存储程序,程序控制程序只有调入到主存,才可以被CPU访问
  • 计算机能执行比主存空间大的程序吗?如果不通过其他方式,是不可以的
  • 概念:处于主存-辅存存储层次解决主存容量不足问题,为程序设计者提供比主存空间大的编程空间

分类:页式虚拟存储器,段式虚拟存储器,段页式虚拟存储器

图示

描述已自动生成

虚拟存储器必须解决的问题

  • CPU访问存储系统的地址属性?

主存是物理地址,辅存是逻辑地址,有两个地址空间,CPU访问存储系统需要访问哪个空间,如果访问虚地址空间,如何跨越物理地址看空间

解决方法:MMU:管理虚拟存储器与物理存储器

  • 如何判断CPU要访问的信息是否在主存中?

解决方法:采用页表来判断CPU要访问的内容是否在主存,并与MMU配合实现逻辑地址与物理地址的转换

  • 访问逻辑

比如一个4G的程序,主存只有1G,如果要运行,那么就需要虚拟出4G的虚拟内存,这个虚拟内存会有一个虚拟地址,实际会对应物理地址,MMU就是用来将虚拟地址转化为逻辑地址的工具,页表项就是虚拟地址和物理地址的对应关系

图示, 示意图

描述已自动生成

虚拟存储器地址划分

日程表

中度可信度描述已自动生成

逻辑地址与物理地址转换

页表是放在主存当中的

先有页表寄存器保存主存中页表的基地址

虚地址VA:虚拟页号(VPN),页内偏移(VPO)

MMU根据虚拟页号和页内便宜找到实际物理地址的物理页号,加上页内便宜地址就获得了物理地址

图形用户界面, 表格

描述已自动生成

就完成了虚拟地址到物理地址的转换表

虚拟存储器的原理

虚拟存储器实际上就是在主存中缓存硬盘上的虚拟页(pagefile.sys),虚拟页有三个状态:未分配、缓存的、未缓存的。比如硬盘有256G,但是程序运行时,内存只有4G不可能全部加载到主存中去,比如256G的数据可能需要16M虚拟内存就可以映射全部的256G硬盘,这16M保存在主存中去,然后通过MMU通过页表来寻找实际数据,所以点击运行程序的时候,实际进程是创建了一个页表,而并不是将所有的运行程序加载到内存中,如下图:

图示

描述已自动生成

  • 当程序启动的时候,进程新建了一个页表,这个页表中指向了全部所需要运行的数据项,最开始的时候页表项全部指向的是虚拟存储器,代表着所有程序都加载到内存中了,实际都没有加载,实际这个虚拟存储器是对应的磁盘地址。
  • 当执行第一个程序寻找2100地址的时候MMU通过页表查询发现第一位(举例)指向的是虚拟存储器就代表该数据并没有加载到主存中去,那么就发起一个缺页中断,根据虚拟地址对应的磁盘地址,将磁盘数据加载到主存中去,更新页表项第一位指向的地址,此时不指向虚拟存储器了因为该数据已经加载主存所以指向主存的地址,然后更新有效位为1
  • 等下次在访问2100的时候查询页表项发现已经缓存,命中直接查找主存返回就可以了

举例虚拟逻辑地址与物理地址的转换

图形用户界面, 应用程序

描述已自动生成

首先,是建立虚拟页表项,0,1,2,3,其中3是无效页表

2050对应的是2页表,拿到偏移地址去找到物理地址,重新拼接

3080对应是3是无效页表所以找不到

posted @ 2023-02-26 19:46  Smile_Children  阅读(186)  评论(0)    收藏  举报