段页式(32位地址总线)
32位地址总线,其支持的物理地址空间最大是4GB,超出部分无法寻址。
一个(32位)地址对应(或指向)一个存储单元(存储单元大小是一字节);如果将4*1024个存储单元聚在一起形成整体,就是下文中即将提到的概念——页。
如图1-1 所示,在存储单元没有汇聚前,小方格总数是4GB/1B=2^32个,需32个比特位才能表示;如图1-2 所示,在存储单元汇聚之后,小方格总数是4GB/4KB=2^20个,只需20个比特位就可表示,所以我们可以看到,在图1-2 中,列出的所有地址的低12位全部为0,我们也可以理解为,低12位记录的信息是已知的,有无低12位都不影响我确定到底是哪个小块,只需要知道高20位就可以了。这个特性将在下文中再次被提及。
本文主要讨论二级分页系统。该机制分为段表和页表两级。段表表项指向一个页表的首地址,页表表项指向真实的物理地址(物理地址肯定是真实的,强调的用意是为突出和虚拟地址的区别——真实、虚拟是反义词嘛)。
在主存上,规定页帧大小为4KB,导致页帧起始地址始终为4*1024的倍数;同时主存大小为4GB,故而最后一个页帧起始地址为0x ff ff f0 00(在图1-2 已经指出这一点),需要32bite(比特)才能容纳下该地址。规律:大小为4KB的 页帧起始地址 具有的特点是低12位全部为0。
1、页表表项:出于节省空间的考虑,页表表项存储真实页帧地址的高20位;同时,因需要一些附加信息(不详细展开),页表表项大小为4byte(字节)。表大小为4KB,故每张页表包含1024个表项。
2、段表表项:段表表项指向页表起始地址,页表地址同样是4*1024的倍数(低12位全部为0),段表表项存储页表起始地址的高20位;同时,因需要一些附加信息(不详细展开),段表表项大小为4byte(字节)。表大小为4KB,故每张段表包含1024个项。
虚拟地址为32位,如图2 所指出的——分为A,B,C三部分。A用于保存在段表中的下标(偏移),需要10bite(比特)(每张段表包含1024项);B用于保存在页表中的下标(偏移),需要10bite(比特)(每张页表包含1024项);C用于保存在页帧中的偏移,范围应是整个页帧(4*1024),故而需要12bite(比特)。算下来正好是32bite(比特)。