段页式内存管理

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

一个(32位)地址对应(或指向)一个存储单元(储存单元的大小为1个字节),如果将4*1024 = 2^2 * 2^10个存储单元聚在一起形成一个整体,这就是我们经常提到的 ,它的大小为4KB。

  如图所示:在储存单元没有进行分页之前,小方格总数为4GB/1B = 2^32个。每一个存储单元占据一个地址。当我们进行汇聚之后,每个小方格表示一页的内容,小方格的总数为4GB / 4KB = 2^20 个 = 1MB。只需要20位bit位就可以了,所以我们发现在图二中第12位全部为0.所以低12位的位置我们可以拿出来储存其他有用的信息,即:有无低12位不影响我们进行寻址,我们只需要知道高20位就可以确定我们需要的是哪个小块。

二级段页式内存管理

  我们将物理内存空间先进行分段,然后在进行分页。其中段表表项指向的是一个页表的首地址,页表表项指向的是真实的物理地址以及偏移量。(这里要分清物理地址,逻辑地址,线性地址,虚拟地址)

  规定在内存上,页帧的大小为4KB,导致页帧的起始地址始终为4*1024的倍数,也就是前面发现的规律,页表项中记录的地址信息都是其后低12位为0.

    1,页表表项:为了节省空间,页表表项储存真实页帧地址的高20位;页表表项(相当于指针)的大小为4byte,表的大小为4KB,因此每张页表包含1024个表项。

    2,段表表项:段表表项指向页表的起始地址。类比于上面,页表地址同样是4*1024的倍数(低12位全部为0),段表表项里面存储页表起始地址的高20位;段表表项的大小为4KB,因此每张段表包含1024个项。

  虚拟地址为32位。如图二所示——划分为A,B,C三部分。A用于保存在段表中的下标(偏移),需要10bit(每张段表包含1024个项 2^10);B用于保存在页表中的下标(偏移),需要10bit;C用于保存在页帧中的偏移,范围应该是整个页帧(4*1024),故而需要12bit。这正好为32bit。

猜你喜欢

转载自blog.csdn.net/genzld/article/details/83624959
今日推荐