为何不为进程页表项分配连续内存?——基于《操作系统概念》的疑问
为什么不愿在主内存中为页表分配连续空间?
结合书中32位逻辑地址空间、4KB页大小的场景(单个进程页表需占用4MB),主要原因如下:
连续大内存块稀缺:多进程环境下物理内存极易碎片化,零散的空闲块随处可见,但凑出一块连续的4MB内存难度极高。若强制要求连续分配,可能因找不到足够大的连续块导致进程无法创建,严重影响系统可用性。
内存利用率浪费:多数进程不会用到全部32位逻辑地址空间。如果分配连续的4MB页表,其中大部分页表项对应未使用的逻辑页,这部分内存完全闲置。而离散分配(如多级页表)仅为实际用到的逻辑页分配页表项内存,大幅提升内存使用效率。
动态扩展不灵活:进程运行中若需扩展逻辑地址空间(如动态申请内存),连续页表难以直接扩展——附近物理内存可能已被占用,不得不迁移整个页表至更大的连续块,带来额外开销。离散分配则可按需添加小页表块,灵活性更强。
缓存命中率降低:连续大页表会占用大量CPU缓存,未使用的页表项会挤占常用项的缓存位置,导致缓存命中率下降,间接拖慢系统性能。
关于4MB页表的计算:
页表项数量 = 逻辑地址空间大小 / 页大小 = 2^32 / 2^12 = 2^20(即1048576个) 页表总大小 = 页表项数量 × 单个页表项大小(通常为4字节)= 1048576 × 4 = 4194304字节 = 4MB
内容的提问来源于stack exchange,提问作者Vacation Due 20000
相关产品推荐
相关产品推荐

