计算机操作系统 - 页表
〇、疑问
- 在计算页表项的大小时,为何不考虑物理内存的大小?
- 页表的项数与逻辑地址有关还是与物理地址有关?
一、释疑
- 页表用于实现逻辑地址和物理地址的映射,具体而言是实现逻辑地址所在的块(页)和物理地址所在的块(页框)的映射。因此容易想到在设计页表项的大小时,其必须考虑物理内存的大小。但实际上,一般而言,操作系统的逻辑地址空间也作为其实际的物理地址寻址空间,也即对于32bit的操作系统,其物理地址也是32bit的,因此逻辑地址和物理地址的块的数量一样,因此直接按照逻辑地址计算即可。
eg1. 32bit逻辑地址空间,字节编址,页面大小为4KB。计算合适的页表项大小。
解:页内地址为12bit,因此页号地址为20bit,因此可选择3B(24bit)。考虑整齐,可以取4B。
附:取4B,此时页表大小为\(2^{20}\times 4\text{B} = 4\text{MB}\) 。也即一个进程需要4MB的连续内存给页表使用,这显然太大。
附加:在32bit操作系统上可以进行超过32bit的物理内存寻址,同样在64bit位上可以进行低于64bit的物理地址寻址,因此逻辑地址长度和物理地址长度的相等关系其实是有点牵强的。
- 考虑一级页表,页表必须记录整个逻辑地址空间的映射信息,因此页表的项数(页表长度)只与逻辑地址空间大小有关。
二、附加
-
多级页表
使用一级页表映射时,页表太大(远超过一个页框的大小),如果需要在内存中维护这样大的连续内存空间,则破坏了分页的优势。如果将页表的大小限制在一个页框大小,采用多级映射,则页表的最大连续空间需求降低为一个页框大小,能够解决这个问题。假设逻辑地址和物理地址均为32bit,按字节寻址,进行二级映射,且要求一级映射只占用一个页框。假设每页的地址空间为p(bit),页块的地址空间剩余32-p,页表项取4B(可对应32bit地址空间的页块,因此足够了),此时一级映射共可存储 \(\frac{2^p\text{B}} {4\text{B}}=2^{p-2}\) 个页表项,也即映射 \(2^{p-2}\) 个二级页,因此通过二级映射一共可以映射 \(2^{2p-4}\) 个页框地址。需求的页框地址数量为 \(2^{32-p}\) ,也即 \(2p-4 \ge 32-p\),得到 \(p\ge12\)。也即此时一定能够构造一个二级映射表,满足要求。
例如,取页大小为4KB(p=12),则一页可存储页表项 \(\frac{\text{4KB}}{\text{4B}}=\text{1K}\) 个,取一级页表填满一页(地址空间为10bit),则可得二级页表地址空间为32-12-10=10bit,同样填满一页。
采用二级页表时,地址结构为如下形式:
其中,一级页地址为一级页表的索引号,二级页地址为二级页表的索引号,页内地址为对应物理页框中的偏移量。