关于页表过长的一些思考
1. 页表的作用
虚拟内存是 按页管理 的,操作系统需要把 虚拟页号(VPN) 映射到 物理页框号(PFN)。
这个映射关系就存储在 页表(Page Table) 中。
每个进程都有自己的页表,每一页对应一个页表项(PTE,Page Table Entry)。
2. 页表大小和页大小的关系
假设你的进程占用的虚拟内存大小为
V
。页面大小为
P
,那么进程需要的 页数 = V / P。页表每页有一个页表项,假设每个 PTE 占 4 B(常见),那么 页表大小 = 页数 × 4 B。
举例说明
页面太小
进程虚拟内存 = 4 GB
页面大小 = 4 KB
页数 = 4 GB / 4 KB = 1,048,576 页(约 100 万页)
页表大小 = 1,048,576 × 4 B ≈ 4 MB
页面较大
页面大小 = 4 MB
页数 = 4 GB / 4 MB = 1024 页
页表大小 = 1024 × 4 B ≈ 4 KB
结论:页面太小 → 页数太多 → 页表太大 → 占用更多内存
3. 为什么这是问题
每个进程都需要页表 → 如果页表太大,会消耗 大量物理内存。
同时,CPU 在进行地址转换时,也要访问页表 → 页表过长可能增加 硬件或 TLB 的访问开销。
一句话理解:
页表大小 = 进程占用页数 × 页表项大小。页小 → 页多 → 页表长 → 占用大量内存。