> 文章列表 > 计算机组成原理/数据库补充 存储器第四章---虚拟内存

计算机组成原理/数据库补充 存储器第四章---虚拟内存

计算机组成原理/数据库补充 存储器第四章---虚拟内存

刚刚数据库下课讲了很多有关虚拟内存的东西感觉很多都忘了,现在写这篇文章来复习一下

为什么要引入虚拟内存

在计算机系统中,多个进程共享CPU和内存,

  • 如果太多的进程需要过多的内存空间,那么其中一部分进程就会无法或得足够得空间而无法运行
  • 此外如果一个进程的数据不小心把写入到另一个进程的内存空间中,那么接下俩会发生令人困惑的错误。

    为了有效的管理内存现代计算机系统提供了一条对内存的抽象概念---虚拟内存,它可以自动的完成内存管理工作不需要应用程序员来干预。

     虚拟内存在计算机系统中扮演了很重要的角色,在链接器、汇编器,加载器和文件以及进程的设计中都扮演了重要的角色。理解虚拟内存有助于理解计算机是如何工作的。

   虚拟内为应用程序提供了强大的能力,例如创建和释放内存空间,将内存空间释放到磁盘的某个部分,以及其他空间共享进程,因此我们编写应用程序时会利用虚拟内存的特性。

  当我们编写应用程序时,每次引用一个变量、间接引用一个指针,或者调用一个malloc函数都会和虚拟内存发生交互,如果虚拟内存使用不当,会发生非常复杂的错误理解虚拟内存可以让我们避免这些错误。

虚拟内存是如何工作的

物理寻址

一个简单的方式是内存中的元素以数组的方式进行存储 ,CPU在读取这条指令的时候会生成一个有效的物理地址,这个物理地址通过内存总线传递给内存控制器,然后内存响应这种读的请求,从物理地址2的地方取出四个字节的内容返还给CPU

 虚拟寻址

这种寻址方式下,CPU是通过一个虚拟地址来访问内存的,这个虚拟地址在被送入到内存之前需要转换成相应的物理地址

  • 将一个虚拟地址转换成一个物理地址的任务叫做地址翻译
  • CPU有专门的工作部件来做地址转换,这个专用的部件就是内存管理单元MMU

 虚拟地址

 虚拟内存用作缓存

虚拟内存可以看成磁盘上N个连续的字节构成的数组,由于每一字节都有唯一的虚拟地址,这个虚拟地址就是数组的索引值,图中展示了一条小型的虚拟存储系统,其中虚拟地址的范围是0~N-1,

对于磁盘上数组的内容被暂存到缓存里,磁盘上的数据被切割成块,这些块作为磁盘和内存之间的传输单元,我们把这些块称为虚拟页,简称VP,每个虚拟页的大小为P个字节,P的值通常是4KB~2MB之间

物理页和虚拟页的大小是一样的,也是P个字节,在有些书中也把物理页称为页帧,未分配表示虚拟内存系统还没有创建的页,未分配的页没有任何数据和他相关联,所以他不占用任何的磁盘空间,图中的虚拟内存被分为八个虚拟页,03是未分配的因此在磁盘上还不存在

 第二类表示已经缓存的表示已经缓存在物理内存页中,例如图中的虚拟内存页1 4 6

第三类是未缓存的,例如图中虚拟页2 5 7 已经被分配了,但是当前并未缓存在内存中。

 SRAM缓存表示L1 L2L3之间的缓存,DRAM表示虚拟内存系统的缓存,也就内存缓存的虚拟页

DRAM大约比SRAM慢10倍,磁盘大约比DRAM慢十万倍,因此DRAM缓存不命中比SRAM缓存不命中比DRAM的影响更大,DRAM缓存补命中时,需要从磁盘读数据到内存,因此耽误的时间比较长,所以DRAM采用全相联的连接方式,也就是说任何一页的虚拟页都可以放到任意内存页中。

同时,不命中的时候的替换策略也很重要,如果替换错了,那么也会耽误很长的时间DRAM的替换算法比cache替换更为复杂,本文章不做过多介绍。

最后由于磁盘的访问时间很长,所以DRAM采用的是写回的策略而不是写穿透

 

看历史网