网站建设图片教程视频,昆明做网站建设怎么样,郑州市科协网站,上海石化有做网站设计的吗浅析linux内核内存管理之PAE早期Intel处理器从80386到Pentium使用32位物理地址#xff0c;理论上#xff0c;这样可以访问4GB的RAM。然而#xff0c;大型服务器需要大于4GB的RAM来同时运行数以千计的进程#xff0c;近几年来这对Intel造成了压力#xff0c;所以必须扩展32…浅析linux内核内存管理之PAE早期Intel处理器从80386到Pentium使用32位物理地址理论上这样可以访问4GB的RAM。然而大型服务器需要大于4GB的RAM来同时运行数以千计的进程近几年来这对Intel造成了压力所以必须扩展32位80x86所支持的RAM容量。Intel通过在它的处理器上把管脚数从32增加到36已经满足了这些需求可以寻址64GB。同时引入了一种新的分页机制PAE(Physical Address Extension物理地址扩展)把32位线性地址转换为36位物理地址才能使用所增加的物理内存通过设置CR4的第5位来开启对PAE的支持。引入PAE就是为了访问大于4GB的RAM线性地址仍然是32位而物理地址是36位。64GB的RAM被分为2^24个页框页表项的物理地址字段从20位扩展到了24位。PAE表项必须包含12个标志位和24个物理地址位总数之和为36页表项大小从32位变为64位。这样原来一个页框有1024个entry现在有512个entry。开启PAE的80x86 32位使用的是三级页表第一级是新引入的PDPT(页目录指针表相当于PGD了)第二级是PMD第三级是PTE。PDPT只有4个entry每个对应1GB RAM每个entry 是64位。CR3中有27位作为PDPT的起始地址。在开启PAE前CR3中用20来存储页目录的起始地址开启PAE后用27位来存储page directory pointer table的起始地址。下边分两种情况来讨论一个是PS0一个是PS1当CR4的第5位被置位(开启PAE)第4位被置位(开启PSE)线性地址31~30用来指向一个PDPT的entry线性地址29~21用来指向一个pmd的entry线性地址20~0为4MB大页中的offset当CR4的第5位被置位(开启PAE)第4位被清除(关闭PSE)线性地址31~30用来指向一个PDPT的entry线性地址2921用来指向一个pmd的entry线性地址20~12用来指向一个pte线性地址11~0为4KB页中的offset如何访问64GB从上边的三级分页可以看到2^2*2^9*2^9*2^114GB仍然访问的是4GB。访问64GB方法如下修改CR3中的值使其指向不同的PDPT这样就指向不同的4GB修改PDP entry中的值使其指向不同的PMD表这样可以指向不同的1GB但是实际上是不能访问这么大的内存的实际可用的内存被限制在16GB因为如果有64GB那么每个struct page结构需要32字节总共512MB这样ZONE_NORMAL的内核地址空间就被大量占用这样是不允许的。