2015年(3)
分类: LINUX
2015-08-02 13:02:16
进程是运行在虚拟空间,所有的内存请求返回的都是虚拟地址。实际上在我自己的理解来看,寻址的过程就是在寻找页表。在linux中,对于32位系统,不论是开启还是未开启PAE都是把前896M的页框映射到内核空间,也就是在建立分页阶段,根据页框号(从0号页框开始)和权限合成了页表,然后逐一写进页表项中,因此,此时建立了一一映射的关系,因此此部分线性地址变化就可以直接访问页表获得物理地址。那么剩余的128M留做动态重映射,映射更多的地址。今天就来讲讲这128M内的永久内核映射部分。
文章开始已经说了,进程需要的是虚拟地址,而对于高端内存页框在分页初期并未建立映射,也就是说,并未对高端内存页框建立页表,所以也没有写进页表项。所以此时返回线性地址没有什么意义,也不可能返回线性地址。因此最重要的矛盾付出水面了——就是为高端内存页框到线性地址建立映射。
在主内核页全局目录中有一个专门的目录项,它指向的1024个页表项只能被写进永久内核映射而建立的页表。