虚拟内存: 也被称作“页面文件”,是一种逻辑上扩充物理内存的技术。简单的说就是将硬盘的一部分作为内存来使用。基本思想是用软、硬件技术把内存与外存这两级存储器当做一级存储器来用。虚拟内存技术的实现利用了自动覆盖和交换技术。
存在形式:PAGEFILE.SYS
虚拟地址空间:32位 CPU的地址总线的是32位的,也就是说可以寻找到2^32(4G)的地址空间。我们的程序被CPU执行,就是在0x00000000到0xFFFFFFFF这一段地址中。高1G的空间为内核空间,由操作系统调用,低3G的空间为用户空间,由用户使用。这样是为了解决物理内存稀缺性问题。
实地址与虚地址:用户编制程序时使用的地址称为虚地址或逻辑地址,其对应的存储空间称为虚存空间或逻辑地址空间;而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间。程序进行虚地址到实地址转换的过程称为程序的再定位。
虚存的访问过程:CPU在寻址的时候,是按照虚拟地址来寻址,然后通过MMU(内存管理单元)将虚拟地址转换为物理地址。因为只有程序的一部分加入到内存中,所以会出现所寻找的地址不在内存中的情况(CPU产生缺页异常),每次访存时,首先判断该虚地址所对应的部分是否在实存中:如果是,则进行地址转换并用实地址访问主存;否则,按照某种算法将辅存中的部分程序调度进内存,再按同样的方法访问主存,使程序继续正常运行。
物理内存和虚拟内存是同时使用的,并不会等到物理内存用尽再使用,因为虚拟内存里面的内容必须要导入到物理内存中才可以进行操作的!
虚拟地址空间和虚拟内存的一个关键的因素是MMU(内存管理单元)。
现在一个程序的执行现在可以分为3部分:
1:CPU需要执行的语句的虚拟地址。
2:程序装入内存的部分
3:程序再外存中的部分
因为CPU是通过时间片轮转的方法使不同的程序并发执行的。所以在某一时刻只有一个程序占据CPU资源,CPU的最大的寻址空间为4G,所以说可以将每个程序可以看做独立占据4G的内存(只是可以看成,但是它并没有占据实际的4G内存)。而CPU是将虚拟地址空间里面的代码执行,如果在内存中寻找不到所需要的页面,就需要到外存中寻找,外存的这一部分,我们可以当成内存来使用,这也就是虚拟内存。虚拟地址空间不等于虚拟内存。虚拟地址空间是一个空间,不是真正存在的,只是通过CPU的寻址虚拟出来的一个范围。而虚拟内存是实实在在的硬盘的空间。