进程的页目录和页表在虚拟地址空间中的位置
当执行一条访问内存的指令时,如果寄存器中的分页标志位已经被设置,CPU就自动完成虚拟地址到物理地址的转换,来完成该指令。CPU在转换地址过程中,并不需要页目录和页表的虚拟地址。但是分页标志位被设置之后,CPU会把所有指令中的地址当做虚拟地址转换成物理地址。所以程序中使用的都是虚拟地址。一个进程的页表和页目录是由系统维护的,比如一个进程申请或者释放内存,系统就需要设置对应的一些页表项。系统需要访问页目录和页表,但是系统只能使用虚拟地址,所以系统必须把页目录和页表映射到地址空间中。对应4G地址空间的1024个页表被顺序映射到了从0xC0000000到0xC03FFFFF的4M地址空间。对应第一个4M地址空间的页表,被映射到了0xC0000000开始的第一个4K地址空间(0xC0000000开始的4K)。对应第二个4M地址空间的页表,被映射到了0xC0000000开始的第二个4K地址空间(0xC0001000开始的4K),以此类推。页目录被映射到了0xC0300000开始处的4K地址空间。0xC0000000到0xC03FFFFF的4M地址空间位于高2G的系统地址空间内,需要ring0的权限才能访问。
有效页目录项和有效页表项
页目录项和页表项的最低位,第0位,指明了一页是否映射了物理内存。最低位为1,有效(Valid),表示该页映射了物理内存。页目录项和页表项,4个字节,32bit,有着差不多的结构。使用 Win2k DDK 所附带的内核调试器,Kernel Debugger (KD) ,我们可以得到有效的页目录项和页表项的结构定义,对于使用 X86 CPU 的系统,该结构定义如下
!strct HARDWARE_PTE_X86
struct _HARDWARE_PTE_X86 (sizeof=4)
+0 bits0-0 Valid
+0 bits1-1 Write
+0 bits2-2 Owner
+0 bits3-3 WriteThrough
+0 bits4-4 CacheDisable
+0 bits5-5 Accessed
+0 bits6-6 Dirty
+0 bits7-7 LargePage
+0 bits8-8 Global
+0 bits9-9 CopyOnWrite
+0 bits10-10 Prototype
+0 bits11-11 reserved
+0 bits12-31 PageFrameNumber
bits12-31 PageFrameNumber:
页目录项或者页表项的第12到第31位,长20位。物理页的页帧号。(将这32位和0xFFFFF000做与运算,就得到了该4KB物理页第一个字节的地址)由于页的大小是4KB,所以只需要20位,就可以寻址4G大小范围内的每一页。对于页目录项来说,所得的物理页中放着的是一个页表。
bits0-0 Valid:
为0无效,该页没有映射物理内存。为1有效。该页映射了物理内存。
bits1-1 Write:
为0该页只读。为1该页可以读写。
bits2-2 Owner:
为0访问该页需要ring0权限,只有核心态(kernel-mode)的代码才可以访问。
为1访问该页ring3权限就可以,用户态(user-mode)代码就可以访问。
bits3-3 WriteThrough:
为0 对相关页使用 write-back caching 策略。为1 对相关页使用 write-through caching 策略。
直写式(Write-through),在CPU向Cache写入的同时,也把数据写入相应内存单元。保证Cache和内存中相应单元数据的一致性。直写式速度慢,而且有些操作是不必要的,比如CPU连续多次更新一个Cache单元的内容,将导致相应内存单元连续多次被写入,而效果其实和写入最后一次更新是一样的。
回写式(Write-back),CPU修改了Cache的内容后,并不立即修改内存中相应的单元。只有当回写操作被执行的时候,才修改相应内存单元。比如该Cache单元的内容从Cache中撤销时触发回写操作。回写式速度快,也避免了一些不必要的操作。
如果CR0中的CD (cache disable)标志为1,则处理器忽略WriteThrough标志。CD标志,CR0寄存器的第30bit
。观察发现,初始化之后的Win2k中,该位为0。也就是说页目录项和页表项中的WriteThrough标志是起作用的。
bits4-4 CacheDisable:
为0 允许Cache该页。为1 禁止Cache该页。
如果CR0中的CD (cache disable)标志为1,则处理器忽略CacheDisable标志。CD标志,CR0寄存器的第30bit
。观察发现,初始化之后的Win2k中,该位为0。也就是说页目录项和页表项中的CacheDisable标志是起作用的。
bits5-5 Accessed:
为0 该页没有被访问(读出或者写入)过。为1 该页被访问(读出或者写入)过。
bits6-6 Dirty:
为0 该页中的内容没有被改动过。 为1 该页中的内容已经被改动过了(被写过)。
bits7-7 LargePage:
为0 表示页大小为4K,为1 表示页大小为4M。
bits8-8 Global:
为0 表示不是 global page。为1 表示是一个 global page。
如果CR4中的 page global enable (PGE) 标志为1 ,表示允许 page global,那么当进程转换时在 TLB(Translation lookaside buffer ) 高速缓存中的 global page 不会失效。用来防止常用页(比如内核或者操作系统的执行代码所在页)被换出TLB高速缓存。寄存器CR4的PGE标志是第7位。观察发现,初始化之后的Win2k中,该位为1。
bits9-9 CopyOnWrite:
用于 Copy-on-Write 机制。
bits10-10 Prototype:
用于 进程间内存共享 机制。
bits11-11 reserved:
保留
页目录和页表
我们可以使用 SoftICE 获得指定进程的页目录,方法如下,首先不加参数的 addr 命令,将列出当前系统中的进程。然后 addr 进程名 ,切换到该进程的地址空间。然后 dd c0300000 l 1000 ,将会在命令窗口输出0xc0300000处的0x1000字节(16进制,也就是4K字节)。然后退出 SoftICE,使用 Symbol Loader 的菜单中的 File -> Save SoftICE History AS.. 就可以把刚才输出的内容保存到文件中。每个进程的页目录都映射到了0xc0300000处,所以我们就得到了页目录的内容。
我也写了一个叫 JiurlPdPtSee 的程序,可以输出指定进程的页目录和页表。以下的内容就来自这个程序。
打开的一个记事本进程的页目录:
c0300000: 05f5b067 058ae067 067b5067 00eae067
c0300010: 03bfa067 00000000 00000000 00000000
c0300020: 00000000 00000000 00000000 00000000
c0300030: 00000000 00000000 00000000 00000000
c0300040: 00000000 00000000 00000000 00000000
c0300050: 00000000 00000000 00000000 00000000
c0300060: 00000000 00000000 00000000 00000000
c0300070: 00000000 00000000 00000000 00000000
c0300080: 00000000 00000000 00000000 00000000
c0300090: 00000000 00000000 00000000 00000000
c03000a0: 00000000 00000000 00000000 00000000
c03000b0: 00000000 00000000 00000000 00000000
c03000c0: 00000000 00000000 00000000 00000000
c03000d0: 00000000 00000000 00000000 00000000
c03000e0: 00000000 00000000 00000000 00000000
c03000f0: 00000000 00000000 00000000 00000000
c0300100: 043b1067 00000000 00000000 00000000
c0300110: 00000000 00000000 00000000 00000000
c0300120: 00000000 00000000 00000000 00000000
c0300130: 00000000 00000000 00000000 00000000
c0300140: 00000000 00000000 00000000 00000000
c0300150: 00000000 00000000 00000000 00000000
c0300160: 00000000 00000000 00000000 00000000
c0300170: 00000000 00000000 00000000 00000000
c0300180: 00000000 00000000 00000000 00000000
c0300190: 00000000 00000000 00000000 00000000
c03001a0: 00000000 00000000 00000000 00000000
c03001b0: 00000000 00000000 00000000 00000000
c03001c0: 00000000 00000000 00000000 00000000
c03001d0: 00000000 00000000 00000000 00000000
c03001e0: 00000000 00000000 00000000 00000000
c03001f0: 00000000 00000000 00000000 00000000
c0300200: 00000000 00000000 00000000 00000000
c0300210: 00000000 00000000 00000000 00000000
c0300220: 00000000 00000000 00000000 00000000
c0300230: 00000000 00000000 00000000 00000000
c0300240: 00000000 00000000 00000000 00000000
c0300250: 00000000 00000000 00000000 00000000
c0300260: 00000000 00000000 00000000 00000000
c0300270: 00000000 00000000 00000000 00000000
c0300280: 00000000 00000000 00000000 00000000
c0300290: 00000000 00000000 00000000 00000000
c03002a0: 00000000 00000000 00000000 00000000
c03002b0: 00000000 00000000 00000000 00000000
c03002c0: 00000000 00000000 00000000 00000000
c03002d0: 00000000 00000000 00000000 00000000
c03002e0: 00000000 00000000 00000000 00000000
c03002f0: 00000000 00000000 00000000 00000000
c0300300: 00000000 00000000 00000000 00000000
c0300310: 00000000 00000000 00000000 00000000
c0300320: 00000000 00000000 00000000 00000000
c0300330: 00000000 00000000 00000000 00000000
c0300340: 00000000 00000000 00000000 00000000
c0300350: 00000000 00000000 00000000 00000000
c0300360: 00000000 00000000 00000000 00000000
c0300370: 00000000 00000000 00000000 00000000
c0300380: 00000000 00000000 00000000 00000000
c0300390: 00000000 00000000 00000000 00000000
c03003a0: 00000000 00000000 00000000 00000000
c03003b0: 00000000 00000000 00000000 00000000
c03003c0: 00000000 00000000 00000000 00000000
c03003d0: 00000000 00000000 00000000 00000000
c03003e0: 00000000 00000000 00000000 00000000
c03003f0: 00000000 00000000 00000000 00000000
c0300400: 00000000 00000000 00000000 00000000
c0300410: 00000000 00000000 00000000 00000000
c0300420: 00000000 00000000 00000000 00000000
c0300430: 00000000 00000000 00000000 00000000
c0300440: 00000000 00000000 00000000 00000000
c0300450: 00000000 00000000 00000000 00000000
c0300460: 00000000 00000000 00000000 00000000
c0300470: 00000000 00000000 00000000 00000000
c0300480: 00000000 00000000 00000000 00000000
c0300490: 00000000 00000000 00000000 00000000
c03004a0: 00000000 00000000 00000000 00000000
c03004b0: 00000000 00000000 00000000 00000000
c03004c0: 00000000 00000000 00000000 00000000
c03004d0: 00000000 00000000 00000000 00000000
c03004e0: 00000000 00000000 00000000 00000000
c03004f0: 00000000 00000000 00000000 00000000
c0300500: 00000000 00000000 00000000 00000000
c0300510: 00000000 00000000 00000000 00000000
c0300520: 00000000 00000000 00000000 00000000
c0300530: 00000000 00000000 00000000 00000000
c0300540: 00000000 00000000 00000000 00000000
c0300550: 00000000 00000000 00000000 00000000
c0300560: 00000000 00000000 00000000 00000000
c0300570: 00000000 00000000 00000000 00000000
c0300580: 00000000 00000000 00000000 00000000
c0300590: 00000000 00000000 00000000 00000000
c03005a0: 00000000 00000000 00000000 00000000
c03005b0: 00000000 00000000 00000000 00000000
c03005c0: 00000000 00000000 00000000 00000000
c03005d0: 00000000 00000000 00000000 00000000
c03005e0: 00000000 00000000 00000000 00000000
c03005f0: 00000000 00000000 00000000 00000000
c0300600: 00000000 00000000 00000000 00000000
c0300610: 00000000 00000000 00000000 00000000
c0300620: 00000000 00000000 00000000 00000000
c0300630: 00000000 00000000 00000000 00000000
c0300640: 00000000 00000000 00000000 00000000
c0300650: 00000000 00000000 00000000 00000000
c0300660: 00000000 00000000 00000000 00000000
c0300670: 00000000 00000000 00000000 00000000
c0300680: 00000000 00000000 00000000 00000000
c0300690: 00000000 00000000 00000000 00000000
c03006a0: 00000000 00000000 00000000 00000000
c03006b0: 00000000 00000000 00000000 00000000
c03006c0: 00000000 00000000 00000000 00000000
c03006d0: 00000000 00000000 00000000 0423a067
c03006e0: 00000000 00000000 00000000 00000000
c03006f0: 00000000 00000000 00000000 00000000
c0300700: 00000000 00000000 00000000 00000000
c0300710: 00000000 00000000 00000000 00000000
c0300720: 00000000 00000000 00000000 00000000
c0300730: 00000000 00000000 00000000 00000000
c0300740: 00000000 00000000 00000000 00000000
c0300750: 00000000 00000000 00000000 0154b067
c0300760: 00000000 00000000 01fa4067 00000000
c0300770: 00000000 03946067 06825067 00d00067
c0300780: 01cc7067 00000000 00000000 00000000
c0300790: 00000000 00000000 00000000 00000000
c03007a0: 00000000 00000000 00000000 00000000
c03007b0: 00000000 00000000 00000000 00000000
c03007c0: 00000000 00000000 00000000 00000000
c03007d0: 00000000 00000000 00000000 00000000
c03007e0: 00000000 00000000 00000000 00000000
c03007f0: 00000000 02869067 00000000 07b98067
c0300800: 000001e3 004001e3 008001e3 00c001e3
c0300810: 010001e3 014001e3 018001e3 01c001e3
c0300820: 020001e3 024001e3 028001e3 02c001e3
c0300830: 030001e3 034001e3 038001e3 03c001e3
c0300840: 040001e3 044001e3 048001e3 04c001e3
c0300850: 050001e3 054001e3 058001e3 05c001e3
c0300860: 060001e3 064001e3 068001e3 06c001e3
c0300870: 070001e3 074001e3 078001e3 07c001e3
c0300880: 080001e3 084001e3 088001e3 08c001e3
c0300890: 090001e3 094001e3 098001e3 09c001e3
c03008a0: 0a0001e3 0a4001e3 0a8001e3 0ac001e3
c03008b0: 0b0001e3 0b4001e3 0b8001e3 0bc001e3
c03008c0: 0c0001e3 0c4001e3 0c8001e3 0cc001e3
c03008d0: 0d0001e3 0d4001e3 0d8001e3 0dc001e3
c03008e0: 0e0001e3 0e4001e3 0e8001e3 0ec001e3
c03008f0: 0f0001e3 0f4001e3 0f8001e3 0fc001e3
c0300900: 100001e3 104001e3 108001e3 10c001e3
c0300910: 110001e3 114001e3 118001e3 11c001e3
c0300920: 120001e3 124001e3 128001e3 12c001e3
c0300930: 130001e3 134001e3 138001e3 13c001e3
c0300940: 140001e3 144001e3 148001e3 14c001e3
c0300950: 150001e3 154001e3 158001e3 15c001e3
c0300960: 160001e3 164001e3 168001e3 16c001e3
c0300970: 170001e3 174001e3 178001e3 17c001e3
c0300980: 180001e3 184001e3 188001e3 18c001e3
c0300990: 190001e3 194001e3 198001e3 19c001e3
c03009a0: 1a0001e3 1a4001e3 1a8001e3 1ac001e3
c03009b0: 1b0001e3 1b4001e3 1b8001e3 1bc001e3
c03009c0: 1c0001e3 1c4001e3 1c8001e3 1cc001e3
c03009d0: 1d0001e3 1d4001e3 1d8001e3 1dc001e3
c03009e0: 1e0001e3 1e4001e3 1e8001e3 1ec001e3
c03009f0: 1f0001e3 1f4001e3 1f8001e3 1fc001e3
c0300a00: 06470163 00000000 00000000 00000000
c0300a10: 00000000 00000000 00000000 00000000
c0300a20: 00000000 00000000 00000000 00000000
c0300a30: 00000000 00000000 00000000 00000000
c0300a40: 016f1163 016f2163 016f3163 016f4163
c0300a50: 016f5163 016f6163 016d7163 016d8163
c0300a60: 016d9163 016da163 016db163 016dc163
c0300a70: 016dd163 016de163 016df163 01740163
c0300a80: 01701163 01702163 01703163 01704163
c0300a90: 01705163 01706163 01707163 01708163
c0300aa0: 01709163 0170a163 0170b163 0170c163
c0300ab0: 0170d163 0170e163 0170f163 01710163
c0300ac0: 01711163 01712163 01713163 01714163
c0300ad0: 01715163 01716163 016f7163 016f8163
c0300ae0: 016f9163 016fa163 016fb163 016fc163
c0300af0: 016fd163 016fe163 016ff163 01760163
c0300b00: 01721163 01722163 01723163 01724163
c0300b10: 01725163 01726163 01727163 01728163
c0300b20: 01729163 0172a163 0172b163 0172c163
c0300b30: 0172d163 0172e163 0172f163 01730163
c0300b40: 01731163 01732163 01733163 01734163
c0300b50: 01735163 01736163 01717163 01718163
c0300b60: 01719163 0171a163 0171b163 0171c163
c0300b70: 0171d163 0171e163 0171f163 01780163
c0300b80: 01741163 01742163 01743163 01744163
c0300b90: 01745163 01746163 01747163 01748163
c0300ba0: 01749163 0174a163 0174b163 0174c163
c0300bb0: 0174d163 0174e163 0174f163 01750163
c0300bc0: 01751163 01752163 01753163 01754163
c0300bd0: 01755163 01756163 01737163 01738163
c0300be0: 01739163 0173a163 0173b163 0173c163
c0300bf0: 0173d163 0173e163 0173f163 017a0163
c0300c00: 05cf0063 04a11063 00000000 01670163
c0300c10: 01671163 01672163 01673163 01674163
c0300c20: 01675163 01676163 01657163 01658163
c0300c30: 01659163 0165a163 0165b163 0165c163
c0300c40: 0165d163 0165e163 0165f163 016c0163
c0300c50: 01681163 01682163 01683163 01684163
c0300c60: 01685163 01686163 01687163 01688163
c0300c70: 01689163 0168a163 0168b163 0168c163
c0300c80: 0168d163 0168e163 0168f163 01690163
c0300c90: 01691163 01692163 01693163 01694163
c0300ca0: 01695163 01696163 01677163 01678163
c0300cb0: 01679163 0167a163 0167b163 0167c163
c0300cc0: 0167d163 0167e163 0167f163 016e0163
c0300cd0: 016a1163 016a2163 016a3163 016a4163
c0300ce0: 016a5163 016a6163 016a7163 016a8163
c0300cf0: 016a9163 016aa163 016ab163 016ac163
c0300d00: 016ad163 016ae163 016af163 016b0163
c0300d10: 016b1163 016b2163 016b3163 016b4163
c0300d20: 016b5163 016b6163 01697163 01698163
c0300d30: 01699163 0169a163 0169b163 0169c163
c0300d40: 0169d163 0169e163 0169f163 01700163
c0300d50: 016c1163 016c2163 016c3163 016c4163
c0300d60: 016c5163 016c6163 016c7163 016c8163
c0300d70: 016c9163 016ca163 016cb163 016cc163
c0300d80: 016cd163 016ce163 016cf163 016d0163
c0300d90: 016d1163 016d2163 016d3163 016d4163
c0300da0: 016d5163 016d6163 016b7163 016b8163
c0300db0: 016b9163 016ba163 016bb163 016bc163
c0300dc0: 016bd163 016be163 016bf163 01720163
c0300dd0: 016e1163 016e2163 016e3163 016e4163
c0300de0: 016e5163 016e6163 016e7163 016e8163
c0300df0: 016e9163 016ea163 016eb163 016ec163
c0300e00: 016ed163 016ee163 016ef163 016f0163
c0300e10: 01765163 026f6163 05189163 055ab163
c0300e20: 00000000 0740f163 05a71163 05f43163
c0300e30: 0090a163 0297e163 04867163 00000000
c0300e40: 00000000 00000000 00000000 00000000
c0300e50: 00000000 00000000 00000000 00000000
c0300e60: 00000000 00000000 00000000 00000000
c0300e70: 00000000 00000000 01768163 01769163
c0300e80: 0176a163 0176b163 0176c163 0176d163
c0300e90: 0176e163 0176f163 01770163 01771163
c0300ea0: 01772163 01773163 01774163 01775163
c0300eb0: 01776163 01757163 01758163 01759163
c0300ec0: 0175a163 0175b163 0175c163 0175d163
c0300ed0: 0175e163 0175f163 017c0163 01781163
c0300ee0: 01782163 01783163 01784163 01785163
c0300ef0: 01786163 01787163 01788163 01789163
c0300f00: 0178a163 01000163 01001163 01002163
c0300f10: 01003163 01004163 01005163 01006163
c0300f20: 01007163 01008163 01009163 0100a163
c0300f30: 0100b163 0100c163 0100d163 0100e163
c0300f40: 0100f163 01010163 01011163 01012163
c0300f50: 01013163 01014163 01015163 01016163
c0300f60: 01017163 01018163 01019163 0101a163
c0300f70: 0101b163 0101c163 0101d163 0101e163
c0300f80: 0101f163 01020163 01021163 01022163
c0300f90: 01023163 01024163 01025163 01026163
c0300fa0: 01027163 01028163 01029163 0102a163
c0300fb0: 0102b163 0102c163 0102d163 0102e163
c0300fc0: 0102f163 01030163 01031163 01032163
c0300fd0: 01033163 01034163 01035163 01036163
c0300fe0: 01037163 01038163 01039163 0103a163
c0300ff0: 0103b163 0103c163 0103d163 00031163
我们来分析一下这个页目录。
4G地址空间,低2G是用户空间,前512项页目录项用于这2G的地址转换。高2G是系统空间,后512项页目录项用于这2G的地址转换。每项32bit,第0bit是有效位,该位为0表示没有该项所对应的虚拟地址空间的页表。在前512项中我们看到了大量的00000000,最低位为0,表示这些项都没有页表。也就是说这项对应的4MB地址空间是没有物理内存映射的。我们看到了在用户地址空间中有大量的页是没有物理页的映射的,什么映射也没有是空的。我们再看另外一个进程的页目录,然后和这个做比较。
System 进程的页目录:
c0300000: 01860067 00000000 00000000 00000000
c0300010: 00000000 00000000 00000000 00000000
c0300020: 00000000 00000000 00000000 00000000
c0300030: 00000000 00000000 00000000 00000000
c0300040: 00000000 00000000 00000000 00000000
c0300050: 00000000 00000000 00000000 00000000
c0300060: 00000000 00000000 00000000 00000000
c0300070: 00000000 00000000 00000000 00000000
c0300080: 00000000 00000000 00000000 00000000
c0300090: 00000000 00000000 00000000 00000000
c03000a0: 00000000 00000000 00000000 00000000
c03000b0: 00000000 00000000 00000000 00000000
c03000c0: 00000000 00000000 00000000 00000000
c03000d0: 00000000 00000000 00000000 00000000
c03000e0: 00000000 00000000 00000000 00000000
c03000f0: 00000000 00000000 00000000 00000000
c0300100: 00000000 00000000 00000000 00000000
c0300110: 00000000 00000000 00000000 00000000
c0300120: 00000000 00000000 00000000 00000000
c0300130: 00000000 00000000 00000000 00000000
c0300140: 00000000 00000000 00000000 00000000
c0300150: 00000000 00000000 00000000 00000000
c0300160: 00000000 00000000 00000000 00000000
c0300170: 00000000 00000000 00000000 00000000
c0300180: 00000000 00000000 00000000 00000000
c0300190: 00000000 00000000 00000000 00000000
c03001a0: 00000000 00000000 00000000 00000000
c03001b0: 00000000 00000000 00000000 00000000
c03001c0: 00000000 00000000 00000000 00000000
c03001d0: 00000000 00000000 00000000 00000000
c03001e0: 00000000 00000000 00000000 00000000
c03001f0: 00000000 00000000 00000000 00000000
c0300200: 00000000 00000000 00000000 00000000
c0300210: 00000000 00000000 00000000 00000000
c0300220: 00000000 00000000 00000000 00000000
c0300230: 00000000 00000000 00000000 00000000
c0300240: 00000000 00000000 00000000 00000000
c0300250: 00000000 00000000 00000000 00000000
c0300260: 00000000 00000000 00000000 00000000
c0300270: 00000000 00000000 00000000 00000000
c0300280: 00000000 00000000 00000000 00000000
c0300290: 00000000 00000000 00000000 00000000
c03002a0: 00000000 00000000 00000000 00000000
c03002b0: 00000000 00000000 00000000 00000000
c03002c0: 00000000 00000000 00000000 00000000
c03002d0: 00000000 00000000 00000000 00000000
c03002e0: 00000000 00000000 00000000 00000000
c03002f0: 00000000 00000000 00000000 00000000
c0300300: 00000000 00000000 00000000 00000000
c0300310: 00000000 00000000 00000000 00000000
c0300320: 00000000 00000000 00000000 00000000
c0300330: 00000000 00000000 00000000 00000000
c0300340: 00000000 00000000 00000000 00000000
c0300350: 00000000 00000000 00000000 00000000
c0300360: 00000000 00000000 00000000 00000000
c0300370: 00000000 00000000 00000000 00000000
c0300380: 00000000 00000000 00000000 00000000
c0300390: 00000000 00000000 00000000 00000000
c03003a0: 00000000 00000000 00000000 00000000
c03003b0: 00000000 00000000 00000000 00000000
c03003c0: 00000000 00000000 00000000 00000000
c03003d0: 00000000 00000000 00000000 00000000
c03003e0: 00000000 00000000 00000000 00000000
c03003f0: 00000000 00000000 00000000 00000000
c0300400: 00000000 00000000 00000000 00000000
c0300410: 00000000 00000000 00000000 00000000
c0300420: 00000000 00000000 00000000 00000000
c0300430: 00000000 00000000 00000000 00000000
c0300440: 00000000 00000000 00000000 00000000
c0300450: 00000000 00000000 00000000 00000000
c0300460: 00000000 00000000 00000000 00000000
c0300470: 00000000 00000000 00000000 00000000
c0300480: 00000000 00000000 00000000 00000000
c0300490: 00000000 00000000 00000000 00000000
c03004a0: 00000000 00000000 00000000 00000000
c03004b0: 00000000 00000000 00000000 00000000
c03004c0: 00000000 00000000 00000000 00000000
c03004d0: 00000000 00000000 00000000 00000000
c03004e0: 00000000 00000000 00000000 00000000
c03004f0: 00000000 00000000 00000000 00000000
c0300500: 00000000 00000000 00000000 00000000
c0300510: 00000000 00000000 00000000 00000000
c0300520: 00000000 00000000 00000000 00000000
c0300530: 00000000 00000000 00000000 00000000
c0300540: 00000000 00000000 00000000 00000000
c0300550: 00000000 00000000 00000000 00000000
c0300560: 00000000 00000000 00000000 00000000
c0300570: 00000000 00000000 00000000 00000000
c0300580: 00000000 00000000 00000000 00000000
c0300590: 00000000 00000000 00000000 00000000
c03005a0: 00000000 00000000 00000000 00000000
c03005b0: 00000000 00000000 00000000 00000000
c03005c0: 00000000 00000000 00000000 00000000
c03005d0: 00000000 00000000 00000000 00000000
c03005e0: 00000000 00000000 00000000 00000000
c03005f0: 00000000 00000000 00000000 00000000
c0300600: 00000000 00000000 00000000 00000000
c0300610: 00000000 00000000 00000000 00000000
c0300620: 00000000 00000000 00000000 00000000
c0300630: 00000000 00000000 00000000 00000000
c0300640: 00000000 00000000 00000000 00000000
c0300650: 00000000 00000000 00000000 00000000
c0300660: 00000000 00000000 00000000 00000000
c0300670: 00000000 00000000 00000000 00000000
c0300680: 00000000 00000000 00000000 00000000
c0300690: 00000000 00000000 00000000 00000000
c03006a0: 00000000 00000000 00000000 00000000
c03006b0: 00000000 00000000 00000000 00000000
c03006c0: 00000000 00000000 00000000 00000000
c03006d0: 00000000 00000000 00000000 00000000
c03006e0: 00000000 00000000 00000000 00000000
c03006f0: 00000000 00000000 00000000 00000000
c0300700: 00000000 00000000 00000000 00000000
c0300710: 00000000 00000000 00000000 00000000
c0300720: 00000000 00000000 00000000 00000000
c0300730: 00000000 00000000 00000000 00000000
c0300740: 00000000 00000000 00000000 00000000
c0300750: 00000000 00000000 00000000 00000000
c0300760: 00000000 00000000 00000000 00000000
c0300770: 00000000 00000000 00000000 02119067
c0300780: 00000000 00000000 00000000 00000000
c0300790: 00000000 00000000 00000000 00000000
c03007a0: 00000000 00000000 00000000 00000000
c03007b0: 00000000 00000000 00000000 00000000
c03007c0: 00000000 00000000 00000000 00000000
c03007d0: 00000000 00000000 00000000 00000000
c03007e0: 00000000 00000000 00000000 00000000
c03007f0: 00000000 00000000 00000000 02138067
c0300800: 000001e3 004001e3 008001e3 00c001e3
c0300810: 010001e3 014001e3 018001e3 01c001e3
c0300820: 020001e3 024001e3 028001e3 02c001e3
c0300830: 030001e3 034001e3 038001e3 03c001e3
c0300840: 040001e3 044001e3 048001e3 04c001e3
c0300850: 050001e3 054001e3 058001e3 05c001e3
c0300860: 060001e3 064001e3 068001e3 06c001e3
c0300870: 070001e3 074001e3 078001e3 07c001e3
c0300880: 080001e3 084001e3 088001e3 08c001e3
c0300890: 090001e3 094001e3 098001e3 09c001e3
c03008a0: 0a0001e3 0a4001e3 0a8001e3 0ac001e3
c03008b0: 0b0001e3 0b4001e3 0b8001e3 0bc001e3
c03008c0: 0c0001e3 0c4001e3 0c8001e3 0cc001e3
c03008d0: 0d0001e3 0d4001e3 0d8001e3 0dc001e3
c03008e0: 0e0001e3 0e4001e3 0e8001e3 0ec001e3
c03008f0: 0f0001e3 0f4001e3 0f8001e3 0fc001e3
c0300900: 100001e3 104001e3 108001e3 10c001e3
c0300910: 110001e3 114001e3 118001e3 11c001e3
c0300920: 120001e3 124001e3 128001e3 12c001e3
c0300930: 130001e3 134001e3 138001e3 13c001e3
c0300940: 140001e3 144001e3 148001e3 14c001e3
c0300950: 150001e3 154001e3 158001e3 15c001e3
c0300960: 160001e3 164001e3 168001e3 16c001e3
c0300970: 170001e3 174001e3 178001e3 17c001e3
c0300980: 180001e3 184001e3 188001e3 18c001e3
c0300990: 190001e3 194001e3 198001e3 19c001e3
c03009a0: 1a0001e3 1a4001e3 1a8001e3 1ac001e3
c03009b0: 1b0001e3 1b4001e3 1b8001e3 1bc001e3
c03009c0: 1c0001e3 1c4001e3 1c8001e3 1cc001e3
c03009d0: 1d0001e3 1d4001e3 1d8001e3 1dc001e3
c03009e0: 1e0001e3 1e4001e3 1e8001e3 1ec001e3
c03009f0: 1f0001e3 1f4001e3 1f8001e3 1fc001e3
c0300a00: 06470163 06f15163 00000000 00000000
c0300a10: 00000000 00000000 00000000 00000000
c0300a20: 00000000 00000000 00000000 00000000
c0300a30: 00000000 00000000 00000000 00000000
c0300a40: 016f1163 016f2163 016f3163 016f4163
c0300a50: 016f5163 016f6163 016d7163 016d8163
c0300a60: 016d9163 016da163 016db163 016dc163
c0300a70: 016dd163 016de163 016df163 01740163
c0300a80: 01701163 01702163 01703163 01704163
c0300a90: 01705163 01706163 01707163 01708163
c0300aa0: 01709163 0170a163 0170b163 0170c163
c0300ab0: 0170d163 0170e163 0170f163 01710163
c0300ac0: 01711163 01712163 01713163 01714163
c0300ad0: 01715163 01716163 016f7163 016f8163
c0300ae0: 016f9163 016fa163 016fb163 016fc163
c0300af0: 016fd163 016fe163 016ff163 01760163
c0300b00: 01721163 01722163 01723163 01724163
c0300b10: 01725163 01726163 01727163 01728163
c0300b20: 01729163 0172a163 0172b163 0172c163
c0300b30: 0172d163 0172e163 0172f163 01730163
c0300b40: 01731163 01732163 01733163 01734163
c0300b50: 01735163 01736163 01717163 01718163
c0300b60: 01719163 0171a163 0171b163 0171c163
c0300b70: 0171d163 0171e163 0171f163 01780163
c0300b80: 01741163 01742163 01743163 01744163
c0300b90: 01745163 01746163 01747163 01748163
c0300ba0: 01749163 0174a163 0174b163 0174c163
c0300bb0: 0174d163 0174e163 0174f163 01750163
c0300bc0: 01751163 01752163 01753163 01754163
c0300bd0: 01755163 01756163 01737163 01738163
c0300be0: 01739163 0173a163 0173b163 0173c163
c0300bf0: 0173d163 0173e163 0173f163 017a0163
c0300c00: 00030067 01520063 00000000 01670163
c0300c10: 01671163 01672163 01673163 01674163
c0300c20: 01675163 01676163 01657163 01658163
c0300c30: 01659163 0165a163 0165b163 0165c163
c0300c40: 0165d163 0165e163 0165f163 016c0163
c0300c50: 01681163 01682163 01683163 01684163
c0300c60: 01685163 01686163 01687163 01688163
c0300c70: 01689163 0168a163 0168b163 0168c163
c0300c80: 0168d163 0168e163 0168f163 01690163
c0300c90: 01691163 01692163 01693163 01694163
c0300ca0: 01695163 01696163 01677163 01678163
c0300cb0: 01679163 0167a163 0167b163 0167c163
c0300cc0: 0167d163 0167e163 0167f163 016e0163
c0300cd0: 016a1163 016a2163 016a3163 016a4163
c0300ce0: 016a5163 016a6163 016a7163 016a8163
c0300cf0: 016a9163 016aa163 016ab163 016ac163
c0300d00: 016ad163 016ae163 016af163 016b0163
c0300d10: 016b1163 016b2163 016b3163 016b4163
c0300d20: 016b5163 016b6163 01697163 01698163
c0300d30: 01699163 0169a163 0169b163 0169c163
c0300d40: 0169d163 0169e163 0169f163 01700163
c0300d50: 016c1163 016c2163 016c3163 016c4163
c0300d60: 016c5163 016c6163 016c7163 016c8163
c0300d70: 016c9163 016ca163 016cb163 016cc163
c0300d80: 016cd163 016ce163 016cf163 016d0163
c0300d90: 016d1163 016d2163 016d3163 016d4163
c0300da0: 016d5163 016d6163 016b7163 016b8163
c0300db0: 016b9163 016ba163 016bb163 016bc163
c0300dc0: 016bd163 016be163 016bf163 01720163
c0300dd0: 016e1163 016e2163 016e3163 016e4163
c0300de0: 016e5163 016e6163 016e7163 016e8163
c0300df0: 016e9163 016ea163 016eb163 016ec163
c0300e00: 016ed163 016ee163 016ef163 016f0163
c0300e10: 01765163 026f6163 05189163 055ab163
c0300e20: 059ad163 0740f163 05a71163 05f43163
c0300e30: 0090a163 0297e163 04867163 034ae163
c0300e40: 00000300 00000300 00000300 00000300
c0300e50: 00000300 00000300 00000300 00000300
c0300e60: 00000300 00000300 00000300 00000300
c0300e70: 00000300 00000300 01768163 01769163
c0300e80: 0176a163 0176b163 0176c163 0176d163
c0300e90: 0176e163 0176f163 01770163 01771163
c0300ea0: 01772163 01773163 01774163 01775163
c0300eb0: 01776163 01757163 01758163 01759163
c0300ec0: 0175a163 0175b163 0175c163 0175d163
c0300ed0: 0175e163 0175f163 017c0163 01781163
c0300ee0: 01782163 01783163 01784163 01785163
c0300ef0: 01786163 01787163 01788163 01789163
c0300f00: 0178a163 01000163 01001163 01002163
c0300f10: 01003163 01004163 01005163 01006163
c0300f20: 01007163 01008163 01009163 0100a163
c0300f30: 0100b163 0100c163 0100d163 0100e163
c0300f40: 0100f163 01010163 01011163 01012163
c0300f50: 01013163 01014163 01015163 01016163
c0300f60: 01017163 01018163 01019163 0101a163
c0300f70: 0101b163 0101c163 0101d163 0101e163
c0300f80: 0101f163 01020163 01021163 01022163
c0300f90: 01023163 01024163 01025163 01026163
c0300fa0: 01027163 01028163 01029163 0102a163
c0300fb0: 0102b163 0102c163 0102d163 0102e163
c0300fc0: 0102f163 01030163 01031163 01032163
c0300fd0: 01033163 01034163 01035163 01036163
c0300fe0: 01037163 01038163 01039163 0103a163
c0300ff0: 0103b163 0103c163 0103d163 00031163
我们再来分析。
这是系统进程的页目录。首先在用户地址空间中,是大片的没有物理内存映射。
然后我们用UltraEdit把两个页目录做比较。发现两个进程的用户地址空间(低2G,前512项)中没有同一位置的有效项,这说明了,每个进程有自己独立的用户地址空间,各自映射不同的物理内存。而系统地址空间(高2G,后512项)的比较结果是绝大部分项的内容是一样的。页目录项一样的话,该项对应的页表,将在同一个物理页上,也就是页表肯定也是同一个。那么页表相应的物理页也就是同一个。说明两个进程的系统地址空间中绝大部分内容是一样的。c0300c00处的页目录项对应的是,页表和页目录所在的4M地址空间,每个进程的页目录和页表的内容不同,所以他们当然在不同的物理页,比较的结果也是不同的。
我们再来看看页表中的内容,我们选择的是刚才那个记事本进程的页目录中的页目录项1(页目录内偏移+4处的页目录项)对应的页表。
记事本进程页目录项1对应的页表:
c0001000: 00000000 00000000 00000000 00000000
c0001010: 00000000 00000000 00000000 00000000
c0001020: 00000000 00000000 00000000 00000000
c0001030: 00000000 00000000 0464f025 046dd025
c0001040: 00000000 00000000 00000000 00000000
c0001050: 00000000 00000000 00000000 00000000
c0001060: 00000000 00000000 00000000 00000000
c0001070: 00000000 00000000 00000000 00000000
c0001080: 00000000 00000000 00000000 00000000
c0001090: 00000000 00000000 00000000 00000000
c00010a0: 00000000 00000000 00000000 00000000
c00010b0: 00000000 00000000 00000000 00000000
c00010c0: 00000000 00000000 00000000 00000000
c00010d0: 00000000 00000000 00000000 00000000
c00010e0: 00000000 00000000 00000000 00000000
c00010f0: 00000000 00000000 00000000 00000000
c0001100: 00000000 00000000 00000000 00000000
c0001110: 00000000 00000000 00000000 00000000
c0001120: 00000000 00000000 00000000 00000000
c0001130: 00000000 00000000 00000000 00000000
c0001140: 00000000 00000000 00000000 00000000
c0001150: 00000000 00000000 00000000 00000000
c0001160: 00000000 00000000 00000000 00000000
c0001170: 00000000 00000000 00000000 00000000
c0001180: 00000000 00000000 00000000 00000000
c0001190: 00000000 00000000 00000000 00000000
c00011a0: 00000000 00000000 00000000 00000000
c00011b0: 00000000 00000000 00000000 00000000
c00011c0: 00000000 00000000 00000000 00000000
c00011d0: 00000000 00000000 00000000 00000000
c00011e0: 00000000 00000000 00000000 00000000
c00011f0: 00000000 00000000 00000000 00000000
c0001200: 00000000 00000000 00000000 00000000
c0001210: 00000000 00000000 00000000 00000000
c0001220: 00000000 00000000 00000000 00000000
c0001230: 00000000 00000000 00000000 00000000
c0001240: 00000000 00000000 00000000 00000000
c0001250: 00000000 00000000 00000000 00000000
c0001260: 00000000 00000000 00000000 00000000
c0001270: 00000000 00000000 00000000 00000000
c0001280: 00000000 00000000 00000000 00000000
c0001290: 00000000 00000000 00000000 00000000
c00012a0: 00000000 00000000 00000000 00000000
c00012b0: 00000000 00000000 00000000 00000000
c00012c0: 00000000 00000000 00000000 00000000
c00012d0: 00000000 00000000 00000000 00000000
c00012e0: 00000000 00000000 00000000 00000000
c00012f0: 00000000 00000000 00000000 00000000
c0001300: 00000000 00000000 00000000 00000000
c0001310: 00000000 00000000 00000000 00000000
c0001320: 00000000 00000000 00000000 00000000
c0001330: 00000000 00000000 00000000 00000000
c0001340: 00000000 00000000 00000000 00000000
c0001350: 00000000 00000000 00000000 00000000
c0001360: 00000000 00000000 00000000 00000000
c0001370: 00000000 00000000 00000000 00000000
c0001380: 00000000 00000000 00000000 00000000
c0001390: 00000000 00000000 00000000 00000000
c00013a0: 00000000 00000000 00000000 00000000
c00013b0: 00000000 00000000 00000000 00000000
c00013c0: 00000000 00000000 00000000 00000000
c00013d0: 00000000 00000000 00000000 00000000
c00013e0: 00000000 00000000 00000000 00000000
c00013f0: 00000000 00000000 00000000 00000000
c0001400: 00000000 00000000 00000000 00000000
c0001410: 00000000 00000000 00000000 00000000
c0001420: 00000000 00000000 00000000 00000000
c0001430: 00000000 00000000 00000000 00000000
c0001440: 00000000 00000000 00000000 00000000
c0001450: 00000000 00000000 00000000 00000000
c0001460: 00000000 00000000 00000000 00000000
c0001470: 00000000 00000000 00000000 00000000
c0001480: 00000000 00000000 00000000 00000000
c0001490: 00000000 00000000 00000000 00000000
c00014a0: 00000000 00000000 00000000 00000000
c00014b0: 00000000 00000000 00000000 00000000
c00014c0: 00000000 00000000 00000000 00000000
c00014d0: 00000000 00000000 00000000 00000000
c00014e0: 00000000 00000000 00000000 00000000
c00014f0: 00000000 00000000 00000000 00000000
c0001500: 00000000 00000000 00000000 00000000
c0001510: 00000000 00000000 00000000 00000000
c0001520: 00000000 00000000 00000000 00000000
c0001530: 00000000 00000000 00000000 00000000
c0001540: 00000000 00000000 00000000 00000000
c0001550: 00000000 00000000 00000000 00000000
c0001560: 00000000 00000000 00000000 00000000
c0001570: 00000000 00000000 00000000 00000000
c0001580: 00000000 00000000 00000000 00000000
c0001590: 00000000 00000000 00000000 00000000
c00015a0: 00000000 00000000 00000000 00000000
c00015b0: 00000000 00000000 00000000 00000000
c00015c0: 00000000 00000000 00000000 00000000
c00015d0: 00000000 00000000 00000000 00000000
c00015e0: 00000000 00000000 00000000 00000000
c00015f0: 00000000 00000000 00000000 00000000
c0001600: 00000000 00000000 00000000 00000000
c0001610: 00000000 00000000 00000000 00000000
c0001620: 00000000 00000000 00000000 00000000
c0001630: 00000000 00000000 00000000 00000000
c0001640: 00000000 00000000 00000000 00000000
c0001650: 00000000 00000000 00000000 00000000
c0001660: 00000000 00000000 00000000 00000000
c0001670: 00000000 00000000 00000000 00000000
c0001680: 00000000 00000000 00000000 00000000
c0001690: 00000000 00000000 00000000 00000000
c00016a0: 00000000 00000000 00000000 00000000
c00016b0: 00000000 00000000 00000000 00000000
c00016c0: 00000000 00000000 00000000 00000000
c00016d0: 00000000 00000000 00000000 00000000
c00016e0: 00000000 00000000 00000000 00000000
c00016f0: 00000000 00000000 00000000 00000000
c0001700: 00000000 00000000 00000000 00000000
c0001710: 00000000 00000000 00000000 00000000
c0001720: 00000000 00000000 00000000 00000000
c0001730: 00000000 00000000 00000000 00000000
c0001740: 00000000 00000000 00000000 00000000
c0001750: 00000000 00000000 00000000 00000000
c0001760: 00000000 00000000 00000000 00000000
c0001770: 00000000 00000000 00000000 00000000
c0001780: 00000000 00000000 00000000 00000000
c0001790: 00000000 00000000 00000000 00000000
c00017a0: 00000000 00000000 00000000 00000000
c00017b0: 00000000 00000000 00000000 00000000
c00017c0: 00000000 00000000 00000000 00000000
c00017d0: 00000000 00000000 00000000 00000000
c00017e0: 00000000 00000000 00000000 00000000
c00017f0: 00000000 00000000 00000000 00000000
c0001800: 00000000 00000000 00000000 00000000
c0001810: 00000000 00000000 00000000 00000000
c0001820: 00000000 00000000 00000000 00000000
c0001830: 00000000 00000000 00000000 00000000
c0001840: 00000000 00000000 00000000 00000000
c0001850: 00000000 00000000 00000000 00000000
c0001860: 00000000 00000000 00000000 00000000
c0001870: 00000000 00000000 00000000 00000000
c0001880: 00000000 00000000 00000000 00000000
c0001890: 00000000 00000000 00000000 00000000
c00018a0: 00000000 00000000 00000000 00000000
c00018b0: 00000000 00000000 00000000 00000000
c00018c0: 00000000 00000000 00000000 00000000
c00018d0: 00000000 00000000 00000000 00000000
c00018e0: 00000000 00000000 00000000 00000000
c00018f0: 00000000 00000000 00000000 00000000
c0001900: 00000000 00000000 00000000 00000000
c0001910: 00000000 00000000 00000000 00000000
c0001920: 00000000 00000000 00000000 00000000
c0001930: 00000000 00000000 00000000 00000000
c0001940: 00000000 00000000 00000000 00000000
c0001950: 00000000 00000000 00000000 00000000
c0001960: 00000000 00000000 00000000 00000000
c0001970: 00000000 00000000 00000000 00000000
c0001980: 00000000 00000000 00000000 00000000
c0001990: 00000000 00000000 00000000 00000000
c00019a0: 00000000 00000000 00000000 00000000
c00019b0: 00000000 00000000 00000000 00000000
c00019c0: 00000000 00000000 00000000 00000000
c00019d0: 00000000 00000000 00000000 00000000
c00019e0: 00000000 00000000 00000000 00000000
c00019f0: 00000000 00000000 00000000 00000000
c0001a00: 00000000 00000000 00000000 00000000
c0001a10: 00000000 00000000 00000000 00000000
c0001a20: 00000000 00000000 00000000 00000000
c0001a30: 00000000 00000000 00000000 00000000
c0001a40: 00000000 00000000 00000000 00000000
c0001a50: 00000000 00000000 00000000 00000000
c0001a60: 00000000 00000000 00000000 00000000
c0001a70: 00000000 00000000 00000000 00000000
c0001a80: 01fd8067 00000000 00000000 00000000
c0001a90: 00000000 00000000 00000000 00000000
c0001aa0: 00000000 00000000 00000000 00000000
c0001ab0: 00000000 00000000 00000000 00000000
c0001ac0: 02ed9047 00000000 00000000 00000000
c0001ad0: 00000000 00000000 00000000 00000000
c0001ae0: 00000000 00000000 00000000 00000000
c0001af0: 00000000 00000000 00000000 00000000
c0001b00: 05d3c047 0243d047 006de047 0217f047
c0001b10: 04f39047 0695a047 01c5b047 00000000
c0001b20: 00000000 00000000 00000000 00000000
c0001b30: 00000000 00000000 00000000 00000000
c0001b40: 07596005 07597005 00000000 00000000
c0001b50: 00000000 00000000 00000000 00000000
c0001b60: 00000000 00000000 00000000 00000000
c0001b70: 00000000 00000000 00000000 00000000
c0001b80: 0272a047 00000000 00000000 00000000
c0001b90: 00000000 00000000 00000000 00000000
c0001ba0: 00000000 00000000 00000000 00000000
c0001bb0: 00000000 00000000 00000000 00000000
c0001bc0: 06825047 00000000 00000000 00000000
c0001bd0: 00000000 00000000 00000000 00000000
c0001be0: 00000000 00000000 00000000 00000000
c0001bf0: 00000000 00000000 00000000 00000000
c0001c00: 00000000 00000000 00000000 00000000
c0001c10: 00000000 00000000 00000000 00000000
c0001c20: 00000000 00000000 00000000 00000000
c0001c30: 00000000 00000000 00000000 00000000
c0001c40: 00000000 00000000 00000000 00000000
c0001c50: 00000000 00000000 00000000 00000000
c0001c60: 00000000 00000000 00000000 00000000
c0001c70: 00000000 00000000 00000000 00000000
c0001c80: 00000000 00000000 00000000 00000000
c0001c90: 00000000 00000000 00000000 00000000
c0001ca0: 00000000 00000000 00000000 00000000
c0001cb0: 00000000 00000000 00000000 00000000
c0001cc0: 00000000 00000000 00000000 00000000
c0001cd0: 00000000 00000000 00000000 00000000
c0001ce0: 00000000 00000000 00000000 00000000
c0001cf0: 00000000 00000000 00000000 00000000
c0001d00: 00000000 00000000 00000000 00000000
c0001d10: 00000000 00000000 00000000 00000000
c0001d20: 00000000 00000000 00000000 00000000
c0001d30: 00000000 00000000 00000000 00000000
c0001d40: 00000000 00000000 00000000 00000000
c0001d50: 00000000 00000000 00000000 00000000
c0001d60: 00000000 00000000 00000000 00000000
c0001d70: 00000000 00000000 00000000 00000000
c0001d80: 00000000 00000000 00000000 00000000
c0001d90: 00000000 00000000 00000000 00000000
c0001da0: 00000000 00000000 00000000 00000000
c0001db0: 00000000 00000000 00000000 00000000
c0001dc0: 04daf047 03c90047 05ba1047 03de2047
c0001dd0: 00000000 00000000 00000000 00000000
c0001de0: 00000000 00000000 00000000 00000000
c0001df0: 00000000 00000000 00000000 00000000
c0001e00: 00ef1047 052d2047 05573047 065f4047
c0001e10: 01c55047 03a56047 03457047 045b8047
c0001e20: 076d9047 037ba047 04f3b047 0347c047
c0001e30: 033dd047 05a1e047 01dbf047 02220047
c0001e40: 00000000 00000000 00000000 00000000
c0001e50: 00000000 00000000 00000000 00000000
c0001e60: 00000000 00000000 00000000 00000000
c0001e70: 00000000 00000000 00000000 00000000
c0001e80: 00000000 00000000 00000000 00000000
c0001e90: 00000000 00000000 00000000 00000000
c0001ea0: 00000000 00000000 00000000 00000000
c0001eb0: 00000000 00000000 00000000 00000000
c0001ec0: 00000000 00000000 00000000 00000000
c0001ed0: 00000000 00000000 00000000 00000000
c0001ee0: 00000000 00000000 00000000 00000000
c0001ef0: 00000000 00000000 00000000 00000000
c0001f00: 00000000 00000000 00000000 00000000
c0001f10: 00000000 00000000 00000000 00000000
c0001f20: 00000000 00000000 00000000 00000000
c0001f30: 00000000 00000000 00000000 00000000
c0001f40: 00000000 00000000 00000000 00000000
c0001f50: 00000000 00000000 00000000 00000000
c0001f60: 00000000 00000000 00000000 00000000
c0001f70: 00000000 00000000 00000000 00000000
c0001f80: 00000000 00000000 00000000 00000000
c0001f90: 00000000 00000000 00000000 00000000
c0001fa0: 00000000 00000000 00000000 00000000
c0001fb0: 00000000 00000000 00000000 00000000
c0001fc0: 00000000 00000000 00000000 00000000
c0001fd0: 00000000 00000000 00000000 00000000
c0001fe0: 00000000 00000000 00000000 00000000
c0001ff0: 00000000 00000000 00000000 00000000
分析一下这个页表,一个页表负责4MB地址空间。每个有效项表明该页被映射到了物理页。从这个页表中看到,有大量的项是没有物理页映射的。这4MB地址空间,只有一部分映射了物理内存。
地址空间中的 Large Page 部分
在页目录中我们可以看到从0xC0300800到0xC03009FC这128个页目录项的低12位值为0x1e3,也就是 111100011 。这些项的第7位, LargePage标志位,为1,表明这128个页目录项所指的是128个4M页。这128项所对应的虚拟地址空间 0x80000000 - 0x9FFFFFFF,大小0x20000000 Bytes = 512 M Bytes。
对于 x86 CPU 来说,要支持同时处理4K页目录项和4M页目录项,需要 寄存器CR4中的PSE标志为1,寄存器CR4的第4位是PSE标志。观察Win2k发现寄存器CR4中的PSE标志值为1,表明了Win2k的可以同时混用4M页和4K页。
kd> r cr4
r cr4
cr4=000002d1
对于4M的页目录项来说,它的第22bit到第31bit,这高10bit指明一个4M页的物理地址,第12bit到第21bit这10bit必须为0。最低12bit仍然是那些标志。对于4K的页目录项,它所指的物理页中放着一个页表。而对于4M的页目录项,它所指的物理页是直接用来放代码和数据的。也就是说该项不再需要页表了。CPU进行虚拟地址到物理地址的转换时,使用高10bit作为在页目录中的索引,找到页目录项,发现页目录项的 Large Page 标志位被设置的话,就直接取出该项中的物理地址,然后用虚拟地址的低22bit作为页内偏移,得到物理地址。
系统的核心模组一般比较大,而系统的核心模组会经常使用,所以他们的页表项放在TLB(Translation Look-Aside Buffer)高速缓存中比较好,如果使用4K页,需要多个4K页,也就需要占用比较多的TLB高速缓存。TLB高速缓存是非常宝贵的资源,如果使用4M页的话,那么就可以节省很多TLB高速缓存。
实际中Win2k的两个最重要的核心模组 hal.dll 和 ntoskrnl.exe 被放在这片4M页的地址空间中。
观察这128个页目录项中的物理地址,就会发现 地址空间 80000000 - 9FFFFFFF 将和物理内存 00000000 - 1FFFFFFF 一一映射。比如我有128M物理内存,他们将全部映射在这个地址空间中。从有效标志位来看,这128个页目录项,都是有效的。而且实际上他们总是有效的。他们对应512M的地址空间。如果只有128M的物理内存的话,明显很大一部分实际上不会有物理内存映射的。没有物理内存映射,而页目录项指示有效,那么读这些地址的内存,将会怎样?结果是不会蓝屏,读会成功完成,读出来的所有内容都是FF。
如果这128个页目录项不是4M的页目录项,而是4K的页目录项的话,将会对应128个页表。那么现在这128个页表,从C0200000开始的128个页表,也就是 C0200000 - C027FFFF 这 512K 的地址空间是什么内容呢?观察结果是他们这128页中,映射了和128个页目录项对应4M地址空间的第一个4K相同的内容。比如,地址C0200000的这4K和地址80000000的4K内容是一样的,都是物理地址为00000000的4K。地址C0201000的这4K和地址80400000的4K内容是一样的,都是物理地址为00400000的4K。
关于80000000-9FFFFFFF 将和物理内存 00000000-1FFFFFFF 一一映射。而且这128个页目录项总是有效的。
我们也可以在 ntoskrnl!MmGetPhysicalAddress 函数中找到证据。MmGetPhysicalAddress,将指定的虚拟地址转换成物理地址,参数介绍可以看ddk。这是个很简单的函数,用SoftICE在这个函数上下断点,然后自己写个驱动程序,用不同范围的虚拟地址触发这个函数。用SoftICE跟一遍这个函数的执行过程。就会发现对于在80000000-9FFFFFFF 中的地址,根本没做有效性检查,说明了他们总是有效的。而虚拟地址到物理地址的转换方法说明了和物理内存 00000000-1FFFFFFF 一一映射。其实计算在这个范围之内的虚拟地址对应的物理地址,只需要用虚拟地址减去0x80000000。
下面是使用 kd 反汇编函数 MmGetPhysicalAddress 得到的输出
u MmGetPhysicalAddress l 30
ntoskrnl!MmGetPhysicalAddress:
804374e0 56 push esi
804374e1 8b742408 mov esi,[esp+0x8]
804374e5 33d2 xor edx,edx
804374e7 81fe00000080 cmp esi,0x80000000
804374ed 722c jb ntoskrnl!MmGetPhysicalAddress+0x2b (8043751b)
804374ef 81fe000000a0 cmp esi,0xa0000000
804374f5 7324 jnb ntoskrnl!MmGetPhysicalAddress+0x2b (8043751b)
804374f7 39153ce74780 cmp [ntoskrnl!MmKseg2Frame (8047e73c)],edx
804374fd 741c jz ntoskrnl!MmGetPhysicalAddress+0x2b (8043751b)
804374ff 8bc6 mov eax,esi
80437501 c1e80c shr eax,0xc
80437504 25ffff0100 and eax,0x1ffff
80437509 6a0c push 0xc
8043750b 59 pop ecx
8043750c e8d3a7fcff call ntoskrnl!_allshl (80401ce4)
80437511 81e6ff0f0000 and esi,0xfff