多级页表访存全剖析


知识回顾

(1)一级页表

页号(36位)“一个进程最多可能有2^36页,因此进程的页表最多有2^36个页表项”

各个页表项必须连续存放,需占用连续的2^36 * 8B=2^39B=512GB空间

页内偏移(12位)

能够一次访存就能找到慢表中的表项,如何找到p号页对应的页表项:页表项存放地址=页表地址+(页号×页表项大小)

为了实现上面的“随机访问”,各页表项必须连续存放。

(2)二级页表

多级页表的【优点】各级页表不再需要连续的存储空间来存放;【缺点】地址转换时访存次数增加了(每一级页表的查询都要访问)。

【题目】

已知系统为32位实地址,采用48位虚拟地址,页面大小为4KB,页表项大小为8B,每段最大为4GB。

(1)假设系统使用纯页式存储,则要采用多少级页表?页内偏移为多少

【解析】页内偏移为12位,36位虚页号。采用多级页表时,最高级页表项不能超出一页大小;每页能容纳的页表项数为4KB/8B=512=2^9,36/9=4,因此应采用4级页表,最高级页表项正好占据一页空间。(最多只能有9bit作为各级页表的页号)

注意:如果采用纯页式存储,多级页表,则各级页表大小不能超过一页

(2)假设系统采用一级页表,TLB命中率为98%,TLB访问时间为10ns,内存访问时间为100ns,并假设当TLB访问失败时才开始访问内存,问平均页面访问时间是多少?

【解析】98%*110+2%*210=112ns

【变式】若假设TLB和慢表同时开始查询,若TLB命中则停止查询慢表,若TLB命中则停止查询慢表,则此题答案为:(10+100)×98%+(100+100)×2%(因为同时查,知道TLB不命中时内存也已经访问了10ns)(若题目没明说,则默认先查询TLB,再查询页表

查询

(3)若是二级页表,页面平均访问时间是多少?

【解析】98%*110+2%*310=114ns

注意:本题不是“虚拟存储管理系统”,不用考虑缺页、调页的情况。

(4)上题中,若要满足访问时间小于120ns,则命中率至少需要多少?

【解析】设快表命中率为p,应满足

P*110+(1-p)*310≤120ns p≥95%

(5)若系统采用段页式存储,则每用户最多可以有多少个段?段内采用几级页表?

【思路】先考虑纯段式的逻辑地址结构,段内偏移量根据“每段最大为4GB”得到为32位。

48-32=16,最多支持2^16个段。下一步将段内偏移量进行分页

【解析】

48位虚拟地址,每段最大为4GB,因此段内地址为32位,段号为48-32=16位。每个用户最多可以有2^16段。段内采用页式地址,与1)中计算同理,(32-12)/9取上整为3,因此段内应采用3级页表。

注意:在采用多级页表的页式存储管理中,若快表命中,则只需要一次访问内存操作即可存取指令或数据。以1)中假设条件为例,不考虑分段时,需要4级页表。若快表未命中,则需要从虚拟地址的高位起,每9位逐级访问各级页表,第5次才能访问到指令或数据所在的内存页面。