找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 1328|回复: 6

请教老师关于32位PAE-4KB分页最大寻址内存的问题

[复制链接]

3

主题

11

回帖

69

积分

注册会员

积分
69
发表于 2023-12-28 13:07:07 | 显示全部楼层 |阅读模式
Intel文档说32位PAE分页最大支持52位的物理地址,也就是最大寻址4PB内存。

我按基础的4KB分页推导PAE-4KB分页,发现需要有 2^22 个页目录(如图),而PAE-4KB分页结构只有 4 个页目录。

那么虽然PAE-4KB分页可以生成 52 位的物理地址,可以访问 4PB 内存中的任意位置,但是最大能够使用的内存远达不到 4PB。



想了好久想不明白,请教老师,我的分析哪里错了?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

344

主题

255

回帖

2666

积分

管理员

积分
2666
发表于 2023-12-28 21:50:04 | 显示全部楼层
不是这么计算的。
物理地址扩展的原因:32位处理器只能访问最大4GB物理内存。如果进程数量太多,物理内存不够用。
扩展到36~52根地址线,可以访问更大的物理内存。

在PAE之前,每个任务(进程)有4GB虚拟内存空间,而且所有任务(进程)争用4GB物理内存。
PAE之后,虽然每个任务(进程)还是只能访问4GB虚拟内存,但是这个虚拟内存却可以映射到高于4GB以上的物理内存空间里。

PAE分页方式只有页目录表和页表是不够的,还增加了页目录指针表。

PAE分页方式比较复杂,在我的视频课程《X64架构的汇编语言和操作系统基础》里用了5课时讲的。这套课程在网易云课堂,是可以试看的(第14~18课时),链接为:
X64架构汇编语言和操作系统基础 - 网易云课堂 (163.com)

3

主题

11

回帖

69

积分

注册会员

积分
69
 楼主| 发表于 2023-12-29 10:35:25 | 显示全部楼层
站长 发表于 2023-12-28 21:50
不是这么计算的。
物理地址扩展的原因:32位处理器只能访问最大4GB物理内存。如果进程数量太多,物理内存不 ...

老师我还是不太明白,您的X64汇编视频关于PAE分页的讲解,我也看过,可能我没有把问题描述清楚。

32位PAE-4KB分页,或者是2-9-9-12分页,页目录指针表使用线性地址的两个二进制位,那么能够定位4个页目录。

1 个页目录项对应 1 个页表,1 个页表包含 2^9 个页表项,对应 2^9 个物理页;
1 个页目录包含 2^9 个目录项,则可以找到 2^9 * 2^9 = 2^18 个物理页;
4 个页目录可以找到 4 * 2^18 = 2^22 个物理页,那么可寻址 2^22 * 2^12 = 2^34 = 16GB。

所以有了我一开始的问题,从最大4PB内存出发,像基础的4KB分页那样推导分页结构,发现需要有2^22个页目录才能寻址全部4PB内存,那么页目录指针项只有4个是不够的。

换一个说法,现在抛开任务可用内存不谈,假定按照2-9-9-12分页定义全部页表项,每一个页表项中的物理页基地址部分都不同,那么最终是访问不了全部的4PB内存的,按照上面的计算只能访问16GB的内存。

还是说,PAE分页并不在乎是否能够寻址全部内存,只是为了能够访问大于0xFFFFFFFF的地址空间,所以把页表项等扩展到8字节呢?

谢谢老师。

344

主题

255

回帖

2666

积分

管理员

积分
2666
发表于 2023-12-29 11:35:11 | 显示全部楼层
Unis 发表于 2023-12-29 10:35
老师我还是不太明白,您的X64汇编视频关于PAE分页的讲解,我也看过,可能我没有把问题描述清楚。

32位PA ...

是你没有理解32位PAE的本质和初衷。
在32位处理器上,线性地址始终是32位的,所以进程(任务)始终只能访问4GB虚拟内存或者物理内存,不存在什么可以访问4PB之说。甚至连16GB也是不可能的。
所以32位PAE不是为了解决单个任务(进程)可以访问的内存。每个任务(进程)还是4GB。但是,在PAE之前,每个任务的4GB都映射到4GB物理内存,所有任务(进程)争用4GB物理内存;PAE之后,物理内存变得巨大,虽然每个任务(进程)还是只能访问4GB虚拟内存,但是这个虚拟内存却可以映射到高于4GB以上的物理内存空间里。有效避免争用物理内存空间。

举个例子,在PAE之前,只有一辆自行车,你和朋友们轮换骑(4GB虚拟空间只能映射到4GB物理内存)。PAE之后,有100辆自行车,虽然你一次还是只能骑一辆,但是却可以随便选(4GB虚拟内存空间可以映射到52位物理地址空间中的任何位置)。

344

主题

255

回帖

2666

积分

管理员

积分
2666
发表于 2023-12-29 22:24:26 | 显示全部楼层
Unis 发表于 2023-12-29 10:35
老师我还是不太明白,您的X64汇编视频关于PAE分页的讲解,我也看过,可能我没有把问题描述清楚。

32位PA ...

还有另一个问题,你这个算法有问题。32位线性地址能映射16GB,这是不可能的。无论采用几级映射也不可能,采用何种映射都只能是2^32字节,即4GB。

344

主题

255

回帖

2666

积分

管理员

积分
2666
发表于 2023-12-30 09:59:21 | 显示全部楼层
即使是采用三级分页,2位页目录指针表索引,9位页目录表索引,9位页表索引,12位页内偏移,一共是2^2个页目录表;2^2*2^9个页表;2^9*2^9*2^9,共计2^20个物理页。每物理页2^12字节,共计4GB。还是那句话,32位线性地址无论如何映射,都是4GB。

最本质的是,通常来说,每个进程都有自己的一套分页系统表,而不是共享一个分页系统表。如果是共享同一个分页系统表,那PAE就没有任何意义。

3

主题

11

回帖

69

积分

注册会员

积分
69
 楼主| 发表于 2023-12-30 12:52:52 | 显示全部楼层
站长 发表于 2023-12-30 09:59
即使是采用三级分页,2位页目录指针表索引,9位页目录表索引,9位页表索引,12位页内偏移,一共是2^2个页目 ...

感谢老师的解答,基本上明白了,因为我还没看任务和特权级的章节,就先想了解一下分页了,所以还是少了些基础,并且还犯了 4*2^18=2^22 这种低级错误。

再次感谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2024-7-27 11:32 , Processed in 0.235164 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表