WINDOWS页式内存管理.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WINDOWS页式内存管理

WINDOWS页式内存管理偶然的机会看了WIDNOWS内核原理与实现,其中介绍了WINDOWS页式内存管理,仔细看了两天两夜才完全明白。究其难以理解的原因,我发现主要是名词太多,什么虚拟地址、虚拟地址空间、CR3寄存器、PTE、PDE、PTE所在页面的虚拟地址,PET的虚拟地址等等,让刚学习页式内存管理的人,立刻陷于迷雾之中。另外16进制和2进制的转换过于频繁,叙述者阐述过于简单,也是难以明了页目录自映射精妙的原因所在。为了使其它想了解页式管理的人不在走弯路,尽快明白页式管理的精妙所在,故撰写此文。为什么要进行页式内存管理呢?大家都知道WINDOWS是多任务的操作系统,所谓多任务就是多个进程可以轮流执行“一小会”时间。若直接让进程使用物理地址来访问内存,将使得进程的动态分配难以有效实施,因为内存单元与进程将通过物理地址紧密地联系在一起了,从而内存的回收和再分配将受限于特定的进程和物理地址。为了打破这种关联关系,简单的思路是,让进程使用虚拟地址,而虚拟地址和物理地址之间通过一个映射表来完成转译。这就是使用页式内存管理的原因。本文不是讲述为什么使用页式内存管理,所以不再多述,如果想知道为什么,请参看WINDOWS内核原理与实现。在页式内存管理中,虚拟空间是按页(page)来管理的,对应于物理内存也按页来管理,物理内存中的页面有时候称为页帧(page frame),其大小与虚拟空间中的页面相同。因此映射关系是在内存页面的基础上进行的。在虚拟空间中连续的页面对应于在物理内存中的页面可以不必连续,并且通过小心地维护好虚拟空间的页面与物理内存页面之间的映射关系,物理页面可以被动态地分配给特定的虚拟页面,从而只有当真正有必要的时候才把物理页面分配给虚拟页面,毕竟物理页面相对来说是稀缺资源。如图1所示,物理地址空间(其地址范围取决于系统中物理内存的数量,图中假设为1 GB物理内存)中有一部分页面被映射到了左侧的虚拟空间(在32位平台上,其地址范围为00xffffffff)。1.虚拟空间和物理空间的映射一个系统中,物理地址空间只有一个,但虚拟空间可以有多个。每个虚拟空间都必须有一个映射关系.虚拟空间中有相当一部分页面并没有对应的物理页面(在图1中标记为“不使用”的页面)。实际上,每个虚拟空间往往只能映射到很少一部分物理页面。反过来,每个物理页面往往只被映射到一个虚拟空间中。如果有一个物理页面被映射至两个或两个以上的虚拟空间,那么,这些虚拟空间将共享此页面,若在一个虚拟空间中改写了此页面中的数据,则在其他的虚拟空间中将可以看到这样的变化。图1虚拟空间到物理空间的映射这里出现了第一个稍难理解的名词虚拟空间,大家很容易把它和虚拟空间地址和虚拟内存弄混,在进行页式内存管理之间有必要弄明白这几个名词。1.1虚拟空间所谓虚拟空间,是想像出来的进程可以使用空间。它不等于虚拟内存,也不等于虚拟内存+物理内存,它只是Windows做为管理者,给使用者我们打出的承诺,Windows说你们开发程序吧,我们给你们每人4G的内存使用,但它只是给我们4G的一个承诺,写明从00xFFFFFFFF的内存你们可以使用,至于这4G内存在哪里,WINDOWS没有说,它只说它也许在你电脑里,也许在微软总部,也许在云终端,总之你用的时候就有4G。对这个承诺不管你信不信,凡正我信了。图2虚拟空间( WINDOWS的4G承诺只在精神中存在) 1.2虚拟地址(线性地址)虚拟空间的最小单位和实际的物理内存的最小单位一样, 都是BYTE(8个bit)。WINDOWS果然够狠,不单给了我们4G的承诺,还给这个承诺上的每个BYTE都起了一个名字,这个名字就是虚拟地址。它把这个4G承诺所指的地以BYTE为单位,按顺序进行了编号最小是0最大是0xFFFFFFFF。WINDOWS果然把虚拟做的像真的一样。大公司就是不一样,假戏也真做。图3 虚拟地址(4G虚拟空间的编号)虽然只是4G承诺空间的编号,但做为开发者的我们都相信了WINDOWS所承诺的承诺,并且开始使用承诺空间的编号,进行内存的使用了。我们的程序开发中,所有的地址都是这个虚拟地址有人也把它叫做线性地址。看到这里可能也糊涂了,只有1G的内存,却有20个进程,那就是需要20*4G=80G的空间,WINDOWS去哪里弄呢。这就是页式管理的好处。WINDOWS已经规定(CPU也只能串行处理)同一进刻只能一个进程运行,那么就是说WINDOWS只需要4G的空间就可以满足20个进程的需要。但我们只有1G啊,就算是同一时刻只需要4G我们也还有3G的窟窿呢。这就是页式管理的另一个妙用,换入换出和按需分配。什么叫按需分配呢,就是需要真正物理空间时,如果还是承诺,产生一个页面异常,看到这个异常WINDOWS马

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档