谈谈我对虚拟内存机制的理解
Windows中应用程序实际用到的内存,主要由两种介质构成:1、物理内存 2、硬盘上的页面交换文件,这两种介质在存储的数据上的区别在于:页面交换文件中存储的数据为内存中相对来说不常用的数据。由于该措施对应用程序来说是透明的,下文所说的“物理内存”即同时包含了这两种介质,不作区分。
程序启动的步骤:
当使用普通读写函数时(WriteFile及ReadFile等),系统为应用程序分配4G的虚拟地址空间,这时分配的仅是地址空间,并没有实际的数据。当执行第一行代码时,系统将读取文件的部分内容(不同的系统读取的数量不同,但在同一个系统中读取的大小是固定的,应为页大小的整数倍)并加载到物理内存中,之后将要执行的虚拟地址空间中的虚拟地址与之前读入的物理内存中的地址建立一个映射(利用页表),然后就可以开始执行虚拟地址空间中的代码了。
程序代码执行的步骤:
由于虚拟地址中的代码总有物理地址与之对应,在执行虚拟地址中的代码时会根据页表里的值来找到对应的物理地址,若物理地址在物理内存(这里指的是真正的物理内存,不包含页面交换文件)中,则直接读取执行,否则引发一个缺页中断,去硬盘上的页面交换文件中读取数据,当然这个过程对于应用程序来说也是透明的。
以上是在下的粗浅理解,其中必定有诸多不妥之处,请各位大师批评指正!!!!!!!
程序启动的步骤:
当使用普通读写函数时(WriteFile及ReadFile等),系统为应用程序分配4G的虚拟地址空间,这时分配的仅是地址空间,并没有实际的数据。当执行第一行代码时,系统将读取文件的部分内容(不同的系统读取的数量不同,但在同一个系统中读取的大小是固定的,应为页大小的整数倍)并加载到物理内存中,之后将要执行的虚拟地址空间中的虚拟地址与之前读入的物理内存中的地址建立一个映射(利用页表),然后就可以开始执行虚拟地址空间中的代码了。
程序代码执行的步骤:
由于虚拟地址中的代码总有物理地址与之对应,在执行虚拟地址中的代码时会根据页表里的值来找到对应的物理地址,若物理地址在物理内存(这里指的是真正的物理内存,不包含页面交换文件)中,则直接读取执行,否则引发一个缺页中断,去硬盘上的页面交换文件中读取数据,当然这个过程对于应用程序来说也是透明的。
以上是在下的粗浅理解,其中必定有诸多不妥之处,请各位大师批评指正!!!!!!!
...全文
相关推荐
Linux内存管理.pdf
Linux内存管理包括了物理内存和虚拟内存的管理,这两种内存类型各有其特点和作用。首先,我们来谈谈为什么需要虚拟内存。在多进程环境下,由于物理内存的有限性,无法满足所有进程的内存需求。
VC之内存管理(源文件).rar
本资料集“VC之内存管理(源文件).rar”着重探讨了三个核心概念:共享内存页、内存映射文件和虚拟内存,这些都是高效编程和系统优化的重要组成部分。首先,我们来谈谈共享内存页。
同济大学精品课程课件——计算机体系结构
这个压缩包中包含了同济大学关于计算机体系结构的课程资料,尤其对多核程序设计和同步机制有深入讲解,对于学习者来说是非常宝贵的资源。首先,我们来谈谈计算机体系结构的基础知识。
谈谈虚拟内存如何设置为好.docx
总的来说,理解虚拟内存的工作原理,合理设置其大小和位置,以及注意与之相关的系统文件,是提升计算机性能和使用体验的关键。
深入理解linux虚拟内存管理(中+英)
交换和分页是虚拟内存的重要机制。当物理内存不足时,Linux会将不常使用的页面写入磁盘的交换分区,腾出物理内存供其他进程使用。这个过程称为交换。而分页则是将虚拟内存分割成固定大小的页,方便管理和映射。


其它技术问题
