段页式(32位地址总线)

版权声明:私藏源代码是违反人性的罪恶行为!博客转载无需告知,学无止境。 https://blog.csdn.net/qq_41822235/article/details/83189251

32位地址总线,其支持的物理地址空间最大是4GB,超出部分无法寻址。 

一个(32位)地址对应(或指向)一个存储单元(存储单元大小是一字节);如果将4*1024个存储单元聚在一起形成整体,就是下文中即将提到的概念——


图1-1 存储单元汇聚前
图1-2 存储单元汇聚后

如图1-1 所示,在存储单元没有汇聚前,小方格总数是4GB/1B=2^32个,需32个比特位才能表示;如图1-2 所示,在存储单元汇聚之后,小方格总数是4GB/4KB=2^20个,只需20个比特位就可表示,所以我们可以看到,在图1-2 中,列出的所有地址的低12位全部为0,我们也可以理解为,低12位记录的信息是已知的,有无低12位都不影响我确定到底是哪个小块,只需要知道高20位就可以了。这个特性将在下文中再次被提及。

本文主要讨论二级分页系统。该机制分为段表页表两级。段表表项指向一个页表的首地址,页表表项指向真实的物理地址(物理地址肯定是真实的,强调的用意是为突出和虚拟地址的区别——真实、虚拟是反义词嘛)

图2 二级分页系统中地址转换——虚拟地址到物理地址

在主存上,规定页帧大小为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(比特)。

猜你喜欢

转载自blog.csdn.net/qq_41822235/article/details/83189251