+ -
当前位置:首页 → 问答吧 → 关于X86寻址的PAE模式的疑问?

关于X86寻址的PAE模式的疑问?

时间:2010-08-24

来源:互联网

书上说打开PAE,分页大小设为4K的话.36位线性地址的寻址方式变为:

2   9   9   12 四级方式寻址.即36位的   前2位寻4个页目录表.  中间的9为寻512个中间页目录 再9为寻512位页表   最后12为是offset偏移量.

于是问题来了.

1、书上说CPU的地址总线是36位了。与之配套的主板及内存也是36位地址总线吗?
2、各种指针寄存器还是32位的,如何才能操作4G以上的地址呢?即操作32位以上的地址。

作者: zhangsuozhu   发布时间: 2010-08-24

第一个不知道。CPU好像是直接跟北桥连在一起,北桥外面的世界它一无所知。

第二个很简单嘛,8086时代也是16位CPU配20位地址总线。

作者: tempname2   发布时间: 2010-08-24

多出来的实际内存做高端物理内存使用.
就是一个虚拟地址到物理地址映射的问题.程序中总是使用虚拟地址,并不表示映射后的物理地址就是在4G以下.
只要MMU知道访问哪里就可以了

作者: smalloc   发布时间: 2010-08-24

回复 tempname2


    嗯。后来我想了想。第二个问题! 可能是因为页表中的基地址是应该是24位的,指针寄存器的低12位地址与之相加,得到36位地址,能寻到4G以外的地址。

但一个进程最大可用的线性地址是4G,即32位地址,决定这个大小的原因是因为指针寄存器的大小是32位的。 但这个线性地址可使用 2^24个页框中的任何2^20个。

比如从10G-14G这部分的物理空间可以分给一个进程, 而从18G-24G可以分给另一个进程。每个进程最大用4G。这样,扩大了物理空间,使理个系统可以同时运行更多的进程。
                                                                                                                     
我说的对吗?

作者: zhangsuozhu   发布时间: 2010-08-24

怎么形成地址的我太清楚,但PAE的效果应该就像你所说的。没研究内核以前,网上搜PAE的资料时,那可是众说纷纭啊。

不过,PAE是不是Intel的专利?俺AMD的内核,装了4G内存。每次装Linux时,安装程序检测到了4G内存,硬是给我装了PAE内核。装了不说,一启动就panic。结果每次安装时都得先拔根内存,装好了再安上去。。。。。

作者: tempname2   发布时间: 2010-08-24

回复 tempname2


    PAE 不时 INTEL 专利. AMD 也支持.

作者: accessory   发布时间: 2010-08-24

那为什么我装PAE内核老panic呢?

作者: tempname2   发布时间: 2010-08-24

回复 tempname2


    兄台,即然说到这儿了。我还有一事不太明白。书上说把32位寄存器分三级址。即页目录10 页表10位 偏移量12位 。而不分二级是因为节约页表所占的内存,即如果二级寻址,如果页表为20位的话,全部分配4G线性地址将占用4M内存,这句话没错。  但为什么不按需分配呢。即20位的页表,如果程序只用1M的话,那页表里只分256项就够大了。

作者: zhangsuozhu   发布时间: 2010-08-24



QUOTE:
回复  tempname2


    可能是因为页表中的基地址是应该是24位的,指针寄存器的低12位地址与之相加,得到36位地址,能寻到4G以外的地址。
zhangsuozhu 发表于 2010-08-24 22:49



这句我觉得不对. 后面那些是对的.

作者: accessory   发布时间: 2010-08-24

回复 tempname2

不知道. 可以自己分析下PANIC 信息.或者贴出来,或者GOOGLE.

作者: accessory   发布时间: 2010-08-24

回复 accessory


    理由呢?我想知道原因?

作者: zhangsuozhu   发布时间: 2010-08-24

回复 zhangsuozhu

最上面那级的 PAGE TABLE 不能为空.它的下级可以为空. 所以如果只有2级的话, 那么第1级(最上面那级)一定要都在. 这样一来就很占内存.

3级的话,也是最上面一级不能为空. 但是占的地方就小了.

作者: accessory   发布时间: 2010-08-24

俺都忘了是什么信息了,记得当时google过,无果。

我还google了怎么让安装程序不安装PAE内核,还是无果。

作者: tempname2   发布时间: 2010-08-24



QUOTE:
回复  tempname2


    兄台,即然说到这儿了。我还有一事不太明白。书上说把32位寄存器分三级址。即页 ...
zhangsuozhu 发表于 2010-08-24 23:16




只要用了某一级,不管用多少项,都得把那一级的表项全分了。

作者: tempname2   发布时间: 2010-08-24

回复 accessory


    上级原来不能为空啊。如果为空会如何呢?呵呵。问问。别嫌我烦啊。

还有。还可以把页表设为10位。offset设为22位。这样就二级了。不过分的一页太大了。一页4M。好象intel的P4已经支持了。不过一页分的太大了有点浪费。

作者: zhangsuozhu   发布时间: 2010-08-24

好像有这种分法。。。。。

作者: tempname2   发布时间: 2010-08-24

回复 zhangsuozhu

4M PAGE 是已经有了啊. 看我前面英文贴的那个连接.要翻墙.

是会浪费些,如果那一页东西很少的话. 实际上, WINDOWS 内核里就用到了 4M AND 4K PAGE. 这样一来提高效率. 也是 INTEL 所提倡的. LINUX 不清楚. 似乎没用.

作者: accessory   发布时间: 2010-08-24



QUOTE:
Enabling PAE (by setting bit 5, PAE, of the system register CR4) causes major changes to this sc ...
accessory 发表于 2010-08-24 23:23




    and page directory grows to 64 bits (8 bytes) 说的是页表项,或页目录项,但页目录项中用于寻址的基址是多少呢?因为页目录项中还有一些flag位啊。

作者: zhangsuozhu   发布时间: 2010-08-24



QUOTE:
回复  zhangsuozhu

4M PAGE 是已经有了啊. 看我前面英文贴的那个连接.要翻墙.

是会浪费些,如果那一页 ...
accessory 发表于 2010-08-24 23:29



Wiki早解禁了吧。。。。。

作者: tempname2   发布时间: 2010-08-24

我不知道国内WIKI放开了没有.

回19楼,我猜基地址应该是 36位, 可以自己看看 INTEL CPU MANUAL. 上面说的非常清楚.

另外 24位"加"12位是得不到36位的.要"乘"才可以.

作者: accessory   发布时间: 2010-08-24