谈谈我对虚拟内存机制的理解
Windows中应用程序实际用到的内存,主要由两种介质构成:1、物理内存 2、硬盘上的页面交换文件,这两种介质在存储的数据上的区别在于:页面交换文件中存储的数据为内存中相对来说不常用的数据。由于该措施对应用程序来说是透明的,下文所说的“物理内存”即同时包含了这两种介质,不作区分。
程序启动的步骤:
当使用普通读写函数时(WriteFile及ReadFile等),系统为应用程序分配4G的虚拟地址空间,这时分配的仅是地址空间,并没有实际的数据。当执行第一行代码时,系统将读取文件的部分内容(不同的系统读取的数量不同,但在同一个系统中读取的大小是固定的,应为页大小的整数倍)并加载到物理内存中,之后将要执行的虚拟地址空间中的虚拟地址与之前读入的物理内存中的地址建立一个映射(利用页表),然后就可以开始执行虚拟地址空间中的代码了。
程序代码执行的步骤:
由于虚拟地址中的代码总有物理地址与之对应,在执行虚拟地址中的代码时会根据页表里的值来找到对应的物理地址,若物理地址在物理内存(这里指的是真正的物理内存,不包含页面交换文件)中,则直接读取执行,否则引发一个缺页中断,去硬盘上的页面交换文件中读取数据,当然这个过程对于应用程序来说也是透明的。
以上是在下的粗浅理解,其中必定有诸多不妥之处,请各位大师批评指正!!!!!!!