阅读:1144回复:1
2000 内存的 地址转换机制
地址转换机制
在进程中引用的地址都是虚拟地址,下面说明Windows 2000操作系统是怎样将虚拟地址映射到实际的物理地址.这里的说明只是针对于非PAE系统,在PAE系统下情况可能会稍有不同。 默认情况下Windows 2000采用两级页表结构来转换虚拟地址和物理地址。即页面目录和页表,页面目录项(PDE - page directory entry)用于查找页表,而页表项(PTE - page table entry)描述了虚拟地址所在页对应的物理地址(一个页表项有可能没有对应一个有效的物理内存页面,这样的一次内存访问会导致一个页面I/O,后面再说)。 一个虚拟地址为32位,高10位是页面目录项索引,接下来的10位为页表项索引,低位12位为页内字节索引。如下图: EPROCESS | | 31 21 11 0 | -------------------------------- | 页面目录索引|页面表索引 | 字节索引 | | | | --+-----------| -------+ | | | 目录表 | 页表 | | ->-----------+ +-->+-------+ +--------- | | | | | | | | | | | | | | | | | |----------| | | | | 物理页面 | |-->| PDE -+--+ | +-------+ |-->+-------+ | |----------| +>| PTE -+--- | | | | | +-------+ +-------+ | | | | | | 数据 |<-+ |----------| --------- +-------+ 以下是一个虚拟地址的转换过程: 1。内存管理器从进程的变量中取出进程的页面目录地址,然后根据前十位的PDE索引取出页面表的地址。(X86的特殊寄存器CR3,是当前进程的页面目录的地址。在SOFTICE中使用reg命令无法看到,可以用cpu命令看。) 2。根据中间十位的页面表索引在页面表中找到PTE,PTE中有页面的当前状态,如果已经在物理内存中,就可以根据PTE中的PFN(PAGE FRAME NO.)找到物理页面。 3。根据字节索引在物理页面中找到要找的数据。 [编辑 - 2/25/03 by kenli79] |
|
|
沙发#
发布于:2003-02-25 10:31
我画的ascii图都显不好,郁闷。
随便写点,有兴趣的人讨论。 |
|
|