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

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

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

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

(4)上题中,如果要满足访问时间<=120ns,那么命中率需要至少多少?

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

答案:

(1)首先,页面大小为4KB,故页内偏移需要12位来表示。其次,系统虚拟地址一共48位,所以剩下的48-12=36位可以用来表示虚页号。每一个页面可以容纳的页表项为:4KB/8B=29(也就是可以最多表示到9位长的页号),而虚页号的长度为36位,所以需要的页表级数为:36/9=4级。

(2)当进行页面访问时,首先应该先读取页面对应的页表项,98%的情况可以在TLB中直接得到得到页表项,直接将逻辑地址转化为物理地址,访问内存中的页面。如果TLB未命中,则要通过一次内存访问来读取页表项,所以页面平均访问时间是:

98%×(10+100)ns+2%×(10+100+100)ns=112ns

(3)二级页表的情况下:

如果TLB命中,和(2)的情况一样,如果TLB没有命中,采用二级页表需要访问3次内存,所以页面平均访问时间是:

98%×(10+100)ns+2%×(10+100+100+100)ns=114ns

(4)假设快表的命中率为p,应该满足以下式子:

p×(10+100)ns+(1-p)×(10+100+100+100)ns<=120ns

可以解得:p>=95%,所以如果要满足访问时间<=120ns,那么命中率至少为95%。总结知识点:在多级页表的情况下,如果TLB没有命中,则需要从虚拟地址的高位起,每N位(其中N就是类似于(1)中的9)逐级访问各级页表,以第(1)问为例,如果快表未命中,则需要访问5次内存才能得到所需页面。