Windows 2000内存篇 分页机制介绍1-2

Windows XP x86分页机制分析 32位的x86 CPU支持两种分页方式,分别是10 10 12分页和2 9 9 12分页,其中2 9 9 12分页模式称为PAE分页。10 10 12分页模式下,PDE和PTE的每一项只占用4字节,此模式下CPU不支持数据执行保护。而PAE分页中PAPTE、PDE、PTE中的每一项都占用8字节,这8字节能够拿出更多的位作为页保护属性和物理地址访问。所以PAE分页模式相对10 10 12分页模式增加了数据执行保护和更多的物理地址访问能力。也正因此PAE分页模式更被广泛的使用。 阅读详情

基本概念

     Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要使用物理地址。

 

  

 

    下面我们看看什么是物理地址,什么是虚拟地址。

    物理地址 (physical address): 放在寻址总线上的地址。放在寻址总线上,如果是读,电路根据这个地址每位的值就将相应地址的物理内存中的数据放到数据总线中传输。如果是写,电路根据这个地址每位的值就将相应地址的物理内存中放入数据总线上的内容。物理内存是以字节(8位)为单位编址的。

    虚拟地址 (virtual address): 4G虚拟地址空间中的地址,程序中使用的都是虚拟地址。

    如果CPU寄存器中的分页标志位被设置,那么执行内存操作的机器指令时,CPU会自动根据页目录和页表中的信息,把虚拟地址转换成物理地址,完成该指令。比如 mov eax,004227b8h ,这是把地址004227b8h处的值赋给寄存器的汇编代码,004227b8这个地址就是虚拟址。CPU在执行这行代码时,发现寄存器中的分页标志位已经被设定,就自动完成虚拟地址到物理地址的转换,使用物理地址取出值,完成指令。对于Intel CPU 来说,分页标志位是寄存器CR0的第31位,为1表示使用分页,为0表示不使用分页。对于初始化之后的 Win2k 我们观察CR0 ,发现第31位为1。表明Win2k是使用分页的。

    使用了分页机制之后,4G的地址空间被分成了固定大小的页,每一页或者被映射到物理内存,或者被映射到硬盘上的交换文件中,或者没有映射任何东西。对于一般程序来说,4G的地址空间,只有一小部分映射了物理内存,大片大片的部分是没有映射任何东西。物理内存也被分页,来映射地址空间。对于32bit的Win2k,页的大小是4K字节。CPU用来把虚拟地址转换成物理地址的信息存放在叫做页目录和页表的结构里。

    物理内存分页,一个物理页的大小为4K字节,第0个物理页从物理地址 0x00000000 处开始。由于页的大小为4KB,就是0x1000字节,所以第1页从物理地址 0x00001000处开始。第2页从物理地址0x00002000处开始。可以看到由于页的大小是4KB,所以只需要32bit的地址中高20bit来寻址物理页。

页表,一个页表的大小为4K字节,放在一个物理页中。由1024个4字节的页表项组成。页表项的大小为4个字节(32bit),所以一个页表中有1024个页表项。页表中的每一项的内容(每项4个字节,32bit)高20bit用来放一个物理页的物理地址,低12bit放着一些标志。

页目录,一个页目录大小为4K字节,放在一个物理页中。由1024个4字节的页目录项组成。页目录项的大小为4个字节(32bit),所以一个页目录中有1024个页目录项。页目录中的每一项的内容(每项4个字节)高20bit用来放一个页表(页表放在一个物理页中)的物理地址,低12bit放着一些标志。



 

     对于x86系统,页目录的物理地址放在CPU的CR3寄存器中。

     CPU把虚拟地址转换成物理地址:

     一个虚拟地址,大小4个字节(32bit),包含着找到物理地址的信息,分为3个部分:第22位到第31位这10位(最高10位)是页目录中的索引,第12位到第21位这10位是页表中的索引,第0位到第11位这12位(低12位)是页内偏移。对于一个要转换成物理地址的虚拟地址,CPU首先根据CR3中的值,找到页目录所在的物理页。然后根据虚拟地址的第22位到第31位这10位(最高的10bit)的值作为索引,找到相应的页目录项(PDE,page directory entry),页目录项中有这个虚拟地址所对应页表的物理地址。有了页表的物理地址,根据虚拟地址的第12位到第21位这10位的值作为索引,找到该页表中相应的页表项(PTE,page table entry),页表项中就有这个虚拟地址所对应物理页的物理地址。最后用虚拟地址的最低12位,也就是页内偏移,加上这个物理页的物理地址,就得到了该虚拟地址所对应的物理地址。

 

  

 

     一个页目录有1024项,虚拟地址最高的10bit刚好可以索引1024项(2的10次方等于1024)。一个页表也有1024项,虚拟地址中间部分的10bit,刚好索引1024项。虚拟地址最低的12bit(2的12次方等于4096),作为页内偏移,刚好可以索引4KB,也就是一个物理页中的每个字节。

     一个虚拟地址转换成物理地址的计算过程就是,处理器通过CR3找到当前页目录所在物理页,取虚拟地址的高10bit,然后把这10bit右移2bit(因为每个页目录项4个字节长,右移2bit相当于乘4)得到在该页中的地址,取出该地址处PDE(4个字节),就找到了该虚拟地址对应页表所在物理页,取虚拟地址第12位到第21位这10位,然后把这10bit右移2bit(因为每个页表项4个字节长,右移2bit相当于乘4)得到在该页中的地址,取出该地址处的PTE(4个字节),就找到了该虚拟地址对应物理页的地址,最后加上12bit的页内偏移得到了物理地址。

     32bit的一个指针,可以寻址范围0x00000000-0xFFFFFFFF,4GB大小。也就是说一个32bit的指针可以寻址整个4GB地址空间的每一个字节。一个页表项负责4K的地址空间和物理内存的映射,一个页表1024项,也就是负责1024*4k=4M的地址空间的映射。一个页目录项,对应一个页表。一个页目录有1024项,也就对应着1024个页表,每个页表负责4M地址空间的映射。1024个页表负责1024*4M=4G的地址空间映射。一个进程有一个页目录。所以以页为单位,页目录和页表可以保证4G的地址空间中的每页和物理内存的映射。

     每个进程都有自己的4G地址空间,从0x00000000-0xFFFFFFFF。通过每个进程自己的一套页目录和页表来实现。由于每个进程有自己的页目录和页表,所以每个进程的地址空间映射的物理内存是不一样的。两个进程的同一个虚拟地址处(如果都有物理内存映射)的值一般是不同的,因为他们往往对应不同的物理页。

     4G地址空间中低2G,0x00000000-0x7FFFFFFF是用户地址空间,4G地址空间中高2G,
0x80000000-0xFFFFFFFF 是系统地址空间。访问系统地址空间需要程序有ring0的权限。

进程的页目录和页表在虚拟地址空间中的位置

    当执行一条访问内存的指令时,如果寄存器中的分页标志位已经被设置,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
80437517 03c6 add eax,esi
80437519 eb17 jmp ntoskrnl!MmGetPhysicalAddress+0x57 (80437532)
8043751b 8bc6 mov eax,esi
8043751d c1e80a shr eax,0xa
80437520 25fcff3f00 and eax,0x3ffffc
80437525 2d00000040 sub eax,0x40000000
8043752a 8b00 mov eax,[eax]
8043752c a801 test al,0x1
8043752e 7506 jnz ntoskrnl!MmGetPhysicalAddress+0x44 (80437536)
80437530 33c0 xor eax,eax
80437532 5e pop esi
80437533 c20400 ret 0x4
80437536 c1e80c shr eax,0xc
80437539 ebce jmp ntoskrnl!MmGetPhysicalAddress+0x47 (80437509)
8043753b cc int 3

欢迎交流,欢迎交朋友,
欢迎访问 http://jiurl.yeah.net http://jiurl.cosoft.org.cn/forum

下载 JiurlPdPtSee 可执行文件及源程序

华为T2000与U2000网管软件对比:2代产品在Windows环境的部署差异 本文深入对比华为T2000与U2000两代网管软件在Windows环境下的部署差异与技术演进。详细解析了T2000的C/S架构与U2000的iManager架构特点,包括系统兼容性、安装流程、授权机制等关键差异,并提供了Windows环境部署的实战指南,帮助用户高效完成网管软件升级与迁移。 阅读详情

相关推荐

【学习笔记】人群归因分数 PAF 以及combined PAF(更新)

在此推荐2篇发表在lancet以及jama子刊上的paf文章,这两篇文章套路是一样的,只是在不同国家进行。希望对大家学习PAF有所帮助,后面有新内容也会继续分享,也欢迎大家分享使用R语言计算PAF的经验~~~的时候,先建立了相关矩阵,再做主成分分析,得到communality。详细信息大家可翻阅原文。

weixin_53499537的博客 1497

MmGetPhysicalAddress分析

代码如下: PHYSICAL_ADDRESSMmGetPhysicalAddress ( IN PVOID BaseAddress ){ PMMPTE PointerPte; PHYSICAL_ADDRESS PhysicalAddress; //判断是否在[0x80000000,0xA0000000)中,如果是,这段内存被映射到物理内存中[0,2000000...

weixin_34362790的博客 1427

DNA pull-down技术避坑指南:从探针设计到质谱验证的完整实验方案

本文提供了一份详尽的DNA pull-down技术实战避坑指南,涵盖从探针设计、生物素标记、磁珠选择与预处理,到结合洗脱优化及下游质谱验证或Western Blot验证的全流程。重点解析了如何通过精细操作降低非特异性结合、提高实验特异性与重复性,并对比了质谱与WB两种验证路径的适用场景,旨在帮助研究者构建稳健可靠的DNA-蛋白质互作研究体系。

weixin_29274337的博客 494

MmAllocateContiguousMemory&&MmGetPhysicalAddress

 /////////////////////// 申请全局物理连续内存,用于D1预览及原始视频///////////////////// RtlZeroMemory(&g_DriverInfo,sizeof(g_DriverInfo)); PHYSICAL_ADDRESS pa;          //物理地址 pa.QuadPart = 0xFFFFFFFFFFFFFFFF; //@最大的可用的物理地址// g_DriverInfo.vaD1Buffer = MmAllocateContiguousMem

Iqian1314的专栏 3877

NVIDIA Tao Toolkit环境配置踩坑

请搭配食用该文章为 Tao 安装中可能出现的问题进行解答,如果存在本文章中没出现的问题,欢迎提问,由我复现后更新文章。由于大部分云服务器厂商不能支持 docker,因此我使用的环境为2023年5月27日在平台租的 3080 旧版环境进行实验。

qq_36630208的博客 771

财务数智化——解读224页 2025年数智技术业财融合应用蓝皮书【附全文阅读】

《数智技术赋能业财融合蓝皮书》面向企业管理者及数字化转型从业者,系统阐述数智技术在业财融合中的应用。全书围绕技术基础(定义、分类、发展趋势)、融合框架(三阶段路径与三层价值)、七大行业应用场景(涵盖核算自动化、智能收款、项目管控等)、关键技术(AI、大数据等)及实施要点(组织协同、数据治理等),通过典型案例为企业提供从技术到实践的全面指导,助力实现数据贯通与价值创造。

cdfunlove的博客 1747

驱动开发相关函数

驱动开发相关函数 标签: 驱动开发函数  分类: 开发资料2007-10-19 04:40函数速查: http://msdn2.microsoft.com/en-us/library/aa491184.aspx1.判断系统版本BOOLEAN<br />  RtlIsNtDdiVersionAvailable(<br />    IN ULONG  Version<br />    );<br />2.系统补丁版本BOOLEAN<br />  RtlIsServicePackVersionInstalled(

wlj1973的专栏 957

Matlab在线性代数中的应用(一):向量组的线性相关性

求列向量组A的一个最大线性无关组可用命令rref(A)将A化成行最简形,其中单位向量对应的列向量即为最大线性无关组所含向量,其它列向量的坐标即为其对应向量用最大线性无关组线性表示的系数。 01 — 例1 求下列矩阵列向量组的一个最大无关组。 解:编写脚本文件如下: >>format rat a=[1,-2,-1,0,2;-2,4,2,6,-6;2,-1,0,2,3;3,3,3,3,4]; b=rref(a) 求得: b...

wenyusuran的专栏 3236

MmGetPhysicalAddress x86 pae or no pae

; no pae nt!MmGetPhysicalAddress: 8083a918 55 push ebp 8083a919 8bec mov ebp,esp 8083a91b 8b4d08 mov ecx,dword ptr [ebp+8] ;BaseAddress 8083a91e 8bc1

G_Spider的专栏 2023

【GlobalMapper精品教程】070:专题地图制作完整操作教程

与其它GIS软件一样,Globalmapper也可以制作出漂亮的地图,本文讲解专题地图制作完整操作流程。

智慧空间实验室 3751

【Flink on k8s】- 1 - Flink Kubernetes Operator 简介 2023

Flink Kubernetes Operator 可以与 Kubernetes 的其他功能和工具集成,可以帮助用户快速定位和解决问题。Flink Kubernetes Operator可以在Kubernetes上实现高可用性,以确保 Flink 集群的稳定性和可靠性。Flink Kubernetes Operator 可以快速地部署 Flink 集群,而无需手动配置和管理集群。Flink Kubernetes Operator可以将Flink集群与其他应用程序隔离,以避免资源争用和干扰。

欢迎来到我的博客,一起探索代码里的世界! 1344

内核态进程管理器Intercessor和实现细节

 标 题: 【原创】内核态进程管理器Intercessor和实现细节 作 者: greatcsk 时 间: 2007-09-05,20:20 链 接: http://bbs.pediy.com/showthread.php?t=51157 BLOG原文:http://www.csksoft.net/blog/post/Intercessor_taskmgr.html 相关文件: 已经修

jingzu的专栏 2336

rk3576 适配摄像头 (mipi 五摄)

在RK3576上实现五路CSI摄像头方案,核心思路是充分复用其视频输入接口,并通过巧妙的软件配置来实现。

weixin_35723192的博客 178

探索 Windows 2000 的内存管理机制

翻译: Kendiv( %20%20);%20document.write(%20addy78904%20);%20document.write(%20%20);%20//-->%20"> <!-- var prefix = ma + il + to; var path = hr + ef + =; var addy78904 = fcczj

2854

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Windows 2000内存篇 分页机制介绍(一)

基本概念 Windows 2000使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要使用物理地址。  下面我们看看什么是物理地址,什么是虚拟地址。 物理地址 (phys

xiaoqiangvs007的专栏 901

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

小议Windows NT/2000分页机制(http://webcrazy.yeah.net)

 小议Windows NT/2000分页机制                     WebCrazy(tsu00@263.net)    内存管理是操作系统最重要的一部分,其决定了操作系统的性能。Intel X86采用分段、分页的内存机制,Windows NT/2000充分利用了此项先进的机制。段内IA-32体系使用页目录(Page Directory)与页表(Page Table,SoftIC

FreeXploiT 1966

(转载)Win2k内存篇 分页机制 (一)

JIURL玩玩Win2k内存篇 分页机制 (一)作者: JIURL                 主页: http://jiurl.yeah.net     日期: 2003-7-30 基本概念    Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射

feijj2002_的专栏 1536

Windows 2000内存篇 分页机制介绍

关于Windows内存管理,可以参考《Windows内核原理与实现》一书中的第4章内存管理,其中描述了另一种内存管理:段式内存管理 基本概念      Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址

qiaoli的知识备忘录 389

JIURL玩玩Win2k内存篇 分页机制

<br />基本概念<br />    Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要使用物理地址。<br /><br />下面我们看看什么是物理地址,什么是虚拟地址。<br /><br />物理地址 (physical address): 放在寻址总线上的地址。放在寻址总线上,如果是读,电路根

绝迹·危言的专栏 2188

Windows2000下用户模式的内存扫描

Windows2000下用户模式的内存扫描        Sprite简述:    本文简要介绍了在Windows2000下实现内存扫描的基本理论和实现的办法。内存扫描是一项重要的技术,有相当广泛的应用范围:如病毒扫描、游戏修改等。Windows2000是一个完全保护的系统,且具有两种工作模式,即用户态和核心态(User Model and Kernel Model)。内存

Sprite_sy的专栏 1393

小议Windows NT/2000分页机制

内存管理是操作系统最重要的一部 分,其决定了操作系统的性能。Intel X86采用分段、分页的内存机制,Windows NT/2000充分利用了此项先进的机制。段内IA-32体系使用页目录(Page Directory)与页表(Page Table,SoftICE中Page命令可以显示出页目录与页表等)形成对4G地址的寻址能力。文中未特别说明,均讨论运行平台为Intel 32位处理器的Windows NT/2000,所提及的Windows也仅指Windows NT/2000。Window

Matrix_Designer的专栏 1131

window 显示驱动开发-分页视频内存资源

与 Microsoft Windows 2000 显示驱动程序模型不同,Windows Vista 显示驱动程序模型允许创建比可用物理视频内存总量更多的视频内存资源,然后根据需要分页进出视频内存。换句话说,并非所有视频内存资源都同时位于视频内存中。GPU 的管道中可以有多个 DMA 缓冲区。这些活动 DMA 缓冲区引用的视频内存资源必须位于视频内存中。其他空闲视频内存资源可以分页到系统内存。

王马的博客 1817

JIURL玩玩Win2k内存篇 分页机制 (一)

基本概念      Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要使用物理地址。下面我们看看什么是物理地址,什么是虚拟地址。物理地址 (physical address): 放在寻

benny5609的专栏 814

关于内存的分段与分页机制

分段机制:   在8086时期,寄存器是16位,无法存放20位的物理地址,为了解决这问题,人们提出了分段机制,分段机制就是将内存分段,每段大小64kb(正好由16位表示),在段寄存器中放入段基址,然后+上段偏移量就成了物理地址。 分页机制: Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内

This is bill的专属博客 3722
上一篇: 探索NTFS探寻Windows NT/2000 Copy On Write机制
下一篇: 玩玩Win2k内存篇 分页机制(三四)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值