在最近的一次面试中,我被问到了这个问题。我回答说,我将使用散列数据结构来开始设计系统。但不能很好地回答。我认为面试官是在寻找答案,比如我该如何为此设计一个页表。
我想知道如何回答这个问题。例如,对于每个4K的页面大小,1 1Gb需要多少个页面?此外,为了有效地设计它,我还应该在脑海中记住其他哪些考虑因素。
发布于 2011-11-17 23:55:16
这个问题在CPU的上下文中是有意义的,其中TLB是“手动”加载的,并且没有预先确定的页表结构,如MIPS、ARM、PowerPC的一些型号。
所以,我有一些粗略的想法:
1G为2^30字节或2^18 = 256K 4K页
比方说,每页4个字节的条目,这对于一个单级页表来说是1M。速度很快,但在内存上有点浪费。
我们可以做些什么来减少内存,同时又能让它变得相当快。
我们需要每页帧编号18位,不能将其压缩为2字节,但可以使用每PTE 3字节,有6位用于编码-访问权,存在,COW等。这是768K。
我们可以只保留其中的16位,而不是整个页帧编号,剩下的两位由一个包含4个条目的上层页面表确定,格式如下:
第二级页表的物理页号的
上对齐
但是,每页的位没有空间,所以让我们将更多的地址位移动到更高级别的表中,以获得
二级页表条目(4K 2字节条目= 8K)
用于随机标志的
的LSB
一级页表项格式(64个4字节项= 256个字节):
页帧地址的
发布于 2011-11-17 19:06:28
对我来说这是个开放式的问题。主要的想法可能是了解您对内存的了解程度,以及您可以对要处理的情况进行多深的思考。其中一些可能是:
https://stackoverflow.com/questions/8158456
复制相似问题