青春时代是一个短暂的美梦,当你醒来时,它早已消失得无影无踪了。
 
夜月琉璃Lv36   
为什么内存不足,使用虚拟内存会使你的电脑变慢?     

首先我们需要明白内存是什么,内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

那么虚拟内存又是什么,虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中。将数据移入分页文件可释放RAM,以便完成工作。 

一般而言,计算机的RAM容量越大,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘读取数据的速率快,因而扩增RAM容量(可加内存条)是最佳选择。

虚拟内存是Windows 为作为内存使用的一部分硬盘空间。虚拟内存在硬盘上其实就是为一个硕大无比的文件,文件名是PageFile.Sys,通常状态下是看不到的。必须关闭资源管理器对系统文件的保护功能才能看到这个文件。虚拟内存有时候也被称为是“页面文件”就是从这个文件的文件名中来的。

内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存在硬盘上的存在形式就是 PAGEFILE.SYS这个页面文件。

说完基础的,现在我们再来解释为什么使用虚拟内存会导致性能降低,这里就需要引入缺页的概念了

内存的组织

我们计算机并不是按字节来在管理内存的,而是通过”页”这个概念,一页有若干字节。就像我们描述一本书的厚度时.通常说一本书有多少页,而不是说这本书有多少字。假设我们计算机是12位的,那么一共有212212个字节,我们假设一个页的大小是64个字节那么我们的计算机就有64页,其中,2626个字节用6个比特位可以表示,将其画出来就是如图所示的结构 

Image


形象来说页号就是”一本书的页数”,页偏移就是每页的”字数”,而这本书的特点就是每页上的字数都是一样的。

虚拟内存

虚拟内存说是内存,其实是一个存放在磁盘上N个连续的空间,里面存有数据。当它被置入内存中,就变成了实实在在的内存。它的存储结构也是和物理内存一样的,如图所示

Image

我们用虚拟页(virual page)来描述某一块虚拟内存空间,任何时候 

虚拟页只有三种状态

在磁盘没有被创建(没有被分配)

在磁盘上创建出来了,等待被加入内存中

已经被加在入内存了

Image

虚拟内存和物理内存的映射

要把虚拟内存装入物理内存,就要有虚拟地址VA和物理地址PA的一个映射关系。这个关系是由操作系统,MMU实现,存放在物理内存中一个叫页表(page table)的数据结构来维护的,页表是一个页表条目(Page Table Entry)的数组,虚拟地址空间中的每个页在页表中一个固定的偏移量都有一个PTE,假设PTE还有一个有效位表示该虚拟地址的状态,1表示已经创建了虚拟地址,0表示没有创建。而pte指向的内容就是物理地址。

简单来讲,页表这种映射关系就是数组,其中pte内容是(虚拟地址+有效位 ),把pte当作下标,那么pte指向的内容就是物理地址

Image

当然如果虚拟内存大于物理内存,一个虚拟地址就必须能被映射在多个物理内存的地址,通常有直接映射和全映射,组间映射。 这里采用的是全映射,即:任意一块虚拟内存可一倍映射在任意一块物理内存。


使用虚拟内存的好处

我们知道,程序是存储在硬盘上的,程序运行起来变成进程,才加载入内存,物理内存是占用一个少一个,怎么保证不同进程之间的数据不会发生冲突呢?

假设实际上我们的程序在运行起来时使用的是一片全新的虚拟内存,一大片空间随意挥霍,最后通过页表的映射成物理地址,就可以解决数据冲突的问题,而且我们可以规定哪一片虚拟空间是只读的,是不可访问的,在页表里将其标记,如果违反标记就强制中断翻译成物理地址的过程,保护了我们的程序和物理内存。

如何翻译虚拟内存

cpu在执行程序读取数据时,使用的是虚拟地址。

在CPU内部有一个MMU单元,他通过从CPU接受到的虚拟地址生成一个PTEA(上文中pte的地址)在cache或者内存中通过PTEA找到了PTE,就把他送至MMU,PTE中有对应的物理地址,MMU解析后就将这个物理地址(pa)送至内存或者缓存中进行读取数据(注意 cpu大多情况下是和缓存打交道)

Image

缺页

在虚拟地址和物理地址映射时,当然还有一种情况是通过PTE发现虚拟地址没有对应的物理地址,( PTE有效位为0 ) 就会引发一个”缺页的异常” 

Image

我们知道PTE有效位为0 有两种状态,若这个虚拟页没不存在,这时候程序崩溃(一种可能程序是把任意整型赋值给指针去解引用指针)。另一种状态是虚拟页已经存在,但是没有被加载入内存中,叫做硬性页缺失。那么操作系统会寻找物理内存空闲的地方,从磁盘加载虚拟页到内存或者指定内存中一个”已经修改过的页面”(狭义上就是已经读取,修改过该内存的数据)写入磁盘,再把虚拟页从磁盘写入内存和CPU内存之间有一个缓存SRAM一样,磁盘和内存也是通过一个DRAM缓存来交换数据的,当发生硬性页缺失时,内存会进入磁盘读写数据

内存和硬盘打起交道 硬盘就像那个 树懒Flash 

内存向硬盘提问题用了1秒 

硬盘反应过来 要花一天的时间

硬性页缺失导致的性能损失是很大的。以一块7200rpm的主流机械硬盘为例,其平均寻道时间为8.5毫秒,
读入内存需要0.05毫秒。相对的,DDR3内存的访问延迟通常在数十到100纳秒之间,性能差距可能会达到8万到22万倍。
形象的说,如果发生硬性页缺失,电脑性能会瞬间下降8万到22万倍.





 1  已被阅读了3000次  楼主 2018-09-25 23:37:55
回复列表

回复:为什么内存不足,使用虚拟内存会使你的电脑变慢?

桂公网安备 45010302000666号 桂ICP备14001770-3号
感谢景安网络提供数据空间
本站CDN由七牛云知道创宇提供支持
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Your IP: 34.201.3.10 , 2020-12-06 02:25:58 , Processed in 2.20312 second(s).
Powered by HadSky 7.5.1
知道创宇云安全