关于虚拟地址和虚拟内存
最近看了以下Windows 核心编程,对于书上的概念湖里糊涂,里面有说物理存储器,磁盘文件,页文件,RAM
我为了把概念弄清,特地整理了一下.
物理存储器: 指的是计算机中的内存条和硬盘.
磁盘文件:在硬盘上的各种文件,比如**.exe和**.dll等
页文件:从硬盘上划分出的一小块区域.
RAM:计算机上的内存条
从上面的概念上来理解,得出的虚拟内存是由 RAM和页文件或者磁盘文件组成. 因为页文件和磁盘文件是实体的东西,都代表硬盘上的某个区域块. 这里,虚拟内存中的虚拟二字并不是说 RAM和页文件或者磁盘文件是虚的. 而是应该这样理解,虚拟两个字是以内存为参考对象,而虚拟内存中的内存指的内存条也就是RAM. 所以虚拟内存是内存条的相对概念,虚拟也是由实体的存储器构成(即内存条+硬盘上的区域块).
虚拟地址的概念:
不要和虚拟内存混淆,虚拟内存是区域块,而虚拟地址强调的是地址,这个地址可以达到4GB.
映射的概念:所谓的映射就是虚拟地址到虚拟内存的一种关系.当进程刚开始创建的时候,虚拟地址已经存在了,但它还没有指向虚拟内存.
保留,提交的概念:
所谓的保留是告诉操作系统,要从虚拟地址空间中拿出多少的范围来用,这样就系统就能统计这个虚拟地址空间已经用了多少,在用户级别是2GB.
提交就是把保留的虚拟地址空间映射到虚拟内存中的某个块,这样虚拟地址就指向了某个虚拟内存块(这个内存块不一定在内存条).
当CPU根据虚拟地址要访问虚拟内存上的数据时候,它会根据页表来查看这个数据是不是在内存条上,如果不在就查看是不是在硬盘上的某个区域块上(一般称为页文件上),如果在内存条上,就根据页表来定位内存条上的地址,并从内存条上取数据.如果在硬盘上的某个区域块,就要采用页文件交换技术,把硬盘上的数据复制到内存条上,然后CPU再从内存条上取数据.
以上是我个人的理解,如有不对,欢迎大家的批评,谢绝人身攻击