`
liuguxing
  • 浏览: 92198 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

解释windows操作系统物理内存和虚拟内存的工作原理及重要结论

    博客分类:
  • C
阅读更多
我们知道每个Windows进程都拥有4G的地址空间,但是你的机器显然没有4G的物理内存。
在多任务环境下,所有进程使用的内存总和可以超过计算机的物理内存。
在特定的情况下,进程的一部分可能会从物理内存中删除而被暂存在硬盘的文件里(pagefile),当进程试图访问这些被交换到pagefile里的内存的时候,系统会产生一个缺页中断(page fault),这时候Windows内存管理器会负责把对应的内存页重新从硬盘调入物理内存。

注意:
1)在某个时间内,一个进程可以直接访问到的物理内存(不发生缺页中断)叫做这个进程的Working Set;
2)而一个进程从4G的地址空间当中实际分配(commit)了的、可访问的内存称为Committed Virtual Memory。
3)Committed VM可能存在于Page File当中,WorkingSet则一定位于物理内存。

Mem Usage这个名字多少有些误导。它只表示这个进程当前占用的物理内存,也就是WorkingSet。WorkingSet不表示进程当前“占用”的所有虚拟内存,该进程可能还有一部分数据被交换到pagefile当中。这些数据只有在被访问的时候才会被加载到物理内存。
Task Manager有另一列数据:VM Size,表示了一个进程分配的虚存(Committed Visual Memory)—实际的定义要比这个复杂一些,但我们可以暂时看成“一个进程分配的虚存”。

当一个Windows程序被最小化的时候,Windows内存管理器把该进程的WorkingSet减到最小(根据先进先出FIFO或者最近最少使用LRU),把大部分数据交换到pagefile里。
这很容易理解:我们通常总是希望为前台的应用程序留出更多物理内存,从而具有更好的性能。当该程序从最小化恢复的时候,Windows也不会完全加载程序的所有虚存,只是加载了必要的部分。这也很容易理解:程序启动阶段的代码通常在启动之后很少访问(对.NET程序尤其如此,向fusion这样的模块在程序正常加载之后如果没有用到Reflection通常用不到)。

但是在虚存的问题上却没这么简单。如果WorkingSet太小,程序运行过程中会产生很多缺页中断,这会严重影响程序的性能。另一方面,WorkingSet太大会浪费“宝贵的”物理内存,降低整个系统的性能。
通常情况下(除非是对性能非常敏感的应用程序,并且你对Windows的内存管理了如指掌),建议不要在程序中自己调整WorkingSet的大小,而把这个任务交给Windows内存管理器

我们知道DLL的一个特点是代码共享,以NTDLL.DLL为例,整个Windows系统的几乎所有应用程序(具体地说,Win32子系统的所有程序)都需要引用NTDLL.DLL,如果每人一份,光这个文件就的占用几十兆内存。

Windows地解决办法是只在物理内存中保存一份NTDLL.DLL的COPY,所有引用这个DLL的程序都把这一份COPY映射到自己的内存空间里面,共享NTDLL.DLL的代码段(每个进程的数据段仍然是独立的)。

所以虽然NTDLL.DLL的大小被计算在你的程序的WorkingSet里面,但是从你的程序中去掉对这个DLL的引用并不会真的释放多少物理内存——你不用,别人还在用呢!
所以,你的程序“独占”的物理内存远没有Mem Usage所表示的那么多,需要从Mem Usage里面扣除很多Shared Code Page (vadump里面可以看到)。
重要结论:
不要参考Task Manager的Mem Usage数据,那个数据的大小对程序性能没有直接影响。
分享到:
评论

相关推荐

    操作系统实验报告——虚拟内存与共享内存

    操作系统实验报告,原创,写得很详细很认真。 内容为虚拟内存与共享内存

    深入解析WINDOWS操作系统(第4版).pdf

    《深入解析:Windows操作系统》(第4版)是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及内部工作细节。...

    Delphi获取Windows物理及虚拟内存信息.rar

    Delphi获取Windows物理及虚拟内存信息,部分调试代码如下所示:  MemInfo.dwLength:=sizeof(MEMORYSTATUS);  //用sizeof(MEMORYSTATUS)填充dwLength成员  GlobalMemoryStatus(MemInfo);  //获取内存信息  ...

    linux 内存管理(虚拟地址到物理地址)

    Linux操作系统采用虚拟内存管理技术,...利用这种虚拟地址不但能起到保护操作系统的效果(用户不能直接访问物理内存),而且更重要的是,用户程序可使用比实际物理内存更大的地址空间(具体的原因请看硬件基础部分)

    Windows物理内存的取证

    基于Windows物理内存的计算机取证技术的研究

    操作系统实验七 内存页面置换算法实验

    操作系统实验七:内存页面置换算法实验报告。加深对于存储管理的了解,掌握虚拟存储器的实现原理;观察和了解重要的页面置换算法和置换过程。练习模拟算法的编程技巧,锻炼分析试验数据的能力。实验内容:在以上示例...

    VC 获得内存使用率及物理内存、虚拟内存.rar

    VC 获取物理内存参数一例,获取本地电脑的内存使用率、总物理内存大孝物理内存可用数、页文件总数、虚拟内存总数、虚拟内存可用数等。

    Windows 2000内存结构

    Windows 2000是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作。内存中的每一个字节都可以用一个32位的指针来寻址。这样,最大的存储空间就是232字节或4000兆字节 (4GB) 。这样,在Windows下运行...

    Windows-API-program--memory-processing.rar_memory_物理内存_虚拟内存

    以API方式编程,可以检测当前系统物理内存、虚拟内存以及页文件的总尺寸和可用大小。

    操作系统:第3章 物理和虚拟内存.pdf

    操作系统:第3章 物理和虚拟内存.pdf

    32位Windows 7 支持超过 4GB 物理内存。

    32位 Vista/Windows 7 的内存容量许可限制;...破解Windows PAE 内核文件 ntkrnlpa.exe,绕过 ZwQueryLicenseValue API 函数的许可限制,使工作站版本 32位 x86 的 Vista/Windows 7 支持超过 4GB 物理内存。

    物理内存和虚拟内存是什么意思-.docx

    物理内存和虚拟内存是什么意思-.docx

    什么是虚拟内存

    其实,pagefile.sys是Windows下的一个虚拟内存,它的作用与物理内存基本相似,但它是作为物理内存的“后备力量”而存在的,但是,它并不是在只有物理内存不够用时才发挥作用的,也就是说在物理内存够用时也有可能...

    进程查看与终止工具,可显示进程所占用的物理内存数与虚拟内存.

    非常实用的进程查看与终止工具. 并可显示进程所占用的物理内存数与虚拟内存.

    深入解析WINDOWS操作系统(第4版)

    观察Windows如何管理虚拟内存和物理内存;理解NTFS的操作和格式,诊断文件系统访问问题;从上往下查看Windows的网络栈,包括 映射、API、名称解析和协议驱动程序;诊断引导问题,执行崩溃分析。

    深入解析WINDOWS操作系统(第4版)01

    共4个压缩包 ...观察Windows如何管理虚拟内存和物理内存;理解NTFS的操作和格式,诊断文件系统访问问题;从上往下查看Windows的网络栈,包括映射、API、名称解析和协议驱动程序;诊断引导问题,执行崩溃分析

    深入解析windows操作系统 第四版 英文版 chm 格式 卷一

    本书是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及内部工作细节。本书针对 Windows Server 2003、Windows XP...

    深度探索Windows CE的内存管理机制

    会带领大家领略Windows CE操作系统的内存管理机制,从硬件MMU的功能讲起,然后介绍虚拟地址空间布局,虚拟内存分配与释放,物理内存管理等细致入微的话题,也会在不同的操作系统之间进行一些横向纵向对比。...

    深入解析windows操作系统(第4版)卷1

    本书是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及内部工作细节。本书针对 Windows Server 2003、Windows XP...

    操作系统原理及应用(LINUX).pdf

    各种内存管理及分配方法的思想、数据结构、重定位及实现原理,文件的逻辑结构、物理结构及文件系统的构成,操作系统对设备的控制、分配、缓冲区的管理等,Linux系统的网络功能,现代流行的UNIX、Windows2000操作系统...

Global site tag (gtag.js) - Google Analytics