- 浏览: 17525 次
最新评论
windows内存管理
- 博客分类:
- 技术杂绘
windows内存管理
2010年07月05日
32位平台下,CPU的寻址能力为4GB,PC中有些设备(如显卡)都提供自己的设备内存,这部分内存会映射到PC的物理内存上,也就是读写这段物理内存地址,其实是在读写设备内存地址,而不会读写物理内存地址。虽然提供了4GB的寻址能力,但是实际可能没有这么大的物理内存,这样就引入了虚拟内存。Windows的所有程序(包括Ring3和Ring0的程序)实际操作的都是虚拟内存。对虚拟内存的操作,最终都会变成对实际物理内存的操作。由于Windwos是个多任务操作系统,到此,我们碰到了几个问题:一是,虚拟内存和真实的物理内存如何对应转换?二是,同时运行的进程如何实现自己内存空间的保护,同时在必要是也能共享部分内存?三是,因为虚拟内存实际是使用了磁盘,那需要有个算法在内存中来调入调出。我们来一一解释上面的疑问。
在CPU中有个CR0的寄存器,这个32位的寄存器中的一个位(PG位)是负责告诉系统是否分页。Windwos在启动前将此位置1,即Windows允许分页。DDK中有个PAGE_SIZE宏记录分页的大小,一般为4KB。这样,虚拟内存会被分割成1M个分页单元。其中部分单元会和物理内存对应起来。如虚拟内存中的第N个分页单元对应着物理内存第M个分页单元。这是多对一的映射,多个虚拟内存页可以映射同一个物理内存页。还有一部分单元会以文件的形式映射到磁盘上,并标记位脏(dirty)。读取这段虚拟内存时,系统会发出异常,触发异常处理函数,异常处理函数将这个页的磁盘文件读入内存,并将其标记位不脏。还有一部分的单元什么也不对应,即空的。有些物理既映射到进程1,也映射到进程2,这样修改进程2的那段虚拟内存也就修改了进程1上的那段虚拟内存,这种方法达到了进程间的内存共享。
虚拟地址在0~0X7FFFFFFF范围内的虚拟内存,即低2GB的虚拟地址,是用户模式地址,用户态(Ring3)程序只能访问这段地址。而0X80000000~0XFFFFFFFF范围的虚拟地址,即高2GB的虚拟地址,是内核模式地址。运行在内核态(Ring0)的程序能访问整个4GB的地址空间。Windows的核心代码和Windows的驱动程序加载的位置都在高2GB的内核地址中。同时,Windows操作系统在进行进程切换时,保持内核模式地址是完全相同的,只改变用户模式地址的映射。
驱动程序可以看成是一个特殊的DLL文件被应用程序加载到虚拟内存中,只不过加载地址是内核模式地址,而不是用户模式地址。它能访问的只是这个进程的虚拟内存,而不能是其他进程的虚拟地址空间。Windows驱动程序里的不同例程运行在不同的进程中。DriverEntry例程和AddDevice例程是运行在系统(System)进程中的。而其他一些例程,如IRP_MJ_READ等派遣函数会运行在某个进程环境中,所能访问的虚拟地址是这个进程的虚拟地址。
发表评论
-
Linux的mmap文件内存映射机制
2012-01-20 08:13 664Linux的mmap文件内存映射 ... -
2--共享内存的实践到内核--共享内存的映射
2012-01-20 08:13 8212--共享内存的实践到内核--共享内存的映射 2011年05 ... -
高端内存
2012-01-20 08:13 745高端内存 2010年10月21日 ... -
内核同步机制-优化屏障和内存屏障
2012-01-20 08:13 661内核同步机制-优化屏障和内存屏障 2011年01月07日 ... -
使用脚本程序管理Windows网络(9)
2012-01-19 13:30 643使用脚本程序管理Windows ... -
开机快速自动联网(一句话的VBS)
2012-01-19 13:30 784开机快速自动联网(一句话的VBS) 2010年10月20日 ... -
使用脚本程序管理Windows网络(3)
2012-01-19 13:30 677使用脚本程序管理Windows ... -
VBS WScript.Shell 隐藏cmd命令行
2012-01-19 13:30 1203VBS WScript.Shell 隐藏cmd命令行 201 ... -
全自动申请qq号vbs代码
2012-01-19 13:29 865全自动申请qq号vbs代码 2011年08月25日 下面 ... -
Windows Server 2003中 w3wp.exe 占用cpu 100% 资源的解决方法
2012-01-17 03:19 1100Windows Server 2003中 w3wp.exe 占 ... -
内存不能为读的原因以及解决方法
2012-01-17 03:19 602内存不能为读的原因以及解决方法 2010年11月22日 ... -
i9001
2012-01-17 03:19 713i9001 2011年12月13日 一、外观检查,外壳、 ... -
Unnamed System Edition v4.0
2012-01-17 03:19 780Unnamed System Edition v4.0 20 ... -
安全bios手册(2)
2012-01-17 03:19 519安全bios手册(2) 2010年06月20日 BIOS ... -
中国各地人的长相特征
2012-01-16 01:53 1150中国各地人的长相特征 ... -
大雪话节气
2012-01-16 01:53 535大雪话节气 2011年12月07 ... -
有妇如此,夫复何求!
2012-01-16 01:53 1092有妇如此,夫复何求! 201 ... -
网络情缘
2012-01-16 01:53 488网络情缘 2011年12月12日 ... -
表格选择
2012-01-11 01:50 470表格选择 2011年08月01日 1.给表格的奇数行添 ... -
Ajax应用
2012-01-11 01:50 552Ajax应用 2011年08月01日 一. 正规的Aj ...
相关推荐
《Windows内核原理与实现》的样章。主要描述windows内存管理的细节。
Windows内存管理机制.doc
全面介绍Windows内存管理机制及C++内存分配实例
以下为文章节选 本文背景: 在编程中,很多Windows或...对Windows内存管理机制了解清楚,有效的利用C++内存函数管理和使用内存。 本文内容: 本文一共有六节,由于篇幅较多,故按节发表。 1. 进程地址空间 1.1地址空间
Windows驱动编程视频教程 详尽的讲解 里面还有屏幕录制的录像
介绍Windows内存管理机制及C++内存分配实例
全面介绍Windows内存管理机制及C++内存分配实例
从进程空间,内存状态,虚拟内存,内存映射文件,堆,堆栈方面,介绍了Windows内存管理机制及C++内存分配。《windows核心编程》中的精华浓缩。
Windows内存管理,详细的解释windows内存管理机制!!!
Windows内存管理.pdf
2012-05-26 09:21 24,101,382 windows内存管理.zip 2012-05-26 09:26 27,003,769 统计自然语言处理基础(中文版).pdf 2012-05-26 09:34 33,704,040 C标准库-中文.pdf 2012-05-26 09:10 42,060,748 802.11无线网络权威...
Windows内存管理机制.pdf
全面介绍Windows内存管理机制
微软TechED2010 侯捷讲座《Windows内存管理与定址》PPT, PDF格式,没去的课没法下到这些演讲稿
Windows内存管理机制(20211010010646).pdf