谈谈我对虚拟内存机制的理解

a5796489 2011-08-01 10:22:38
Windows中应用程序实际用到的内存,主要由两种介质构成:1、物理内存 2、硬盘上的页面交换文件,这两种介质在存储的数据上的区别在于:页面交换文件中存储的数据为内存中相对来说不常用的数据。由于该措施对应用程序来说是透明的,下文所说的“物理内存”即同时包含了这两种介质,不作区分。

程序启动的步骤:
当使用普通读写函数时(WriteFile及ReadFile等),系统为应用程序分配4G的虚拟地址空间,这时分配的仅是地址空间,并没有实际的数据。当执行第一行代码时,系统将读取文件的部分内容(不同的系统读取的数量不同,但在同一个系统中读取的大小是固定的,应为页大小的整数倍)并加载到物理内存中,之后将要执行的虚拟地址空间中的虚拟地址与之前读入的物理内存中的地址建立一个映射(利用页表),然后就可以开始执行虚拟地址空间中的代码了。

程序代码执行的步骤:
由于虚拟地址中的代码总有物理地址与之对应,在执行虚拟地址中的代码时会根据页表里的值来找到对应的物理地址,若物理地址在物理内存(这里指的是真正的物理内存,不包含页面交换文件)中,则直接读取执行,否则引发一个缺页中断,去硬盘上的页面交换文件中读取数据,当然这个过程对于应用程序来说也是透明的。


以上是在下的粗浅理解,其中必定有诸多不妥之处,请各位大师批评指正!!!!!!!
...全文
195 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-08-01
  • 打赏
  • 举报
回复
《深入解析Windows操作系统-Windows Internals》
maoxing63570 2011-08-01
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/d371c52458fb770bf78a553a.html
PG 2011-08-01
  • 打赏
  • 举报
回复
膜拜楼主~~~
luciferisnotsatan 2011-08-01
  • 打赏
  • 举报
回复
找本讲操作系统的书,一般都有介绍。
ouyh12345 2011-08-01
  • 打赏
  • 举报
回复
在物理内存里,而不在当前的cache里,也会导致换页
ouyh12345 2011-08-01
  • 打赏
  • 举报
回复
page fault就是这样发生的
a5796489 2011-08-01
  • 打赏
  • 举报
回复
没人关心这个问题吗?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧