多级分页操作系统

时间:2011-11-09 05:07:34

标签: operating-system paging

我今天在考试中遇到了这个问题:

假设您的计算机系统具有38位逻辑地址,页面大小为16K,每页表格条目为4个字节。

  1. 逻辑地址空间中有多少页?假设我们使用两级分页,每个页表都可以完全适合一帧。

  2. 对于上述系统,给出逻辑地址位的分解,清楚地表明偏移位数,页表索引位和页目录索引位。

  3. 假设我们有一个32MB的程序,整个程序和所有必要的页表(使用两级分页)都在内存中。程序使用了多少内存(以帧数表示),包括其页表?

  4. 我该如何解决这个问题?到目前为止,我认为页面大小=帧大小,但在这种情况下不会发生。


    以下是我的想法:

    由于页面大小为16K,我的偏移量将为17位(2^17 = 16K)。现在我如何划分其余的位,帧大小是多少?我将其余的部分分成两半吗?

1 个答案:

答案 0 :(得分:3)

  1. 2 38 / 16384 = 16777216页。
  2. 一方面,剩余的38-log 2 16384 = 24位地址可能合理地在逻辑地址的页面目录和页面表部分之间平均分配,因为这样的对称性将简化该设计。另一方面,每个页面表应该具有与页面相同的大小,因此可以以与包含程序代码和数据的普通/叶子页面完全相同的方式将它们卸载到磁盘。幸运的是,在这种情况下,使用12位页面目录索引和页表索引得到我们两个,因为2 12 * 4字节的页表项大小= 16384.此外,由于页面地址始终有14个由于自然页面对齐,有效位设置为零,页面地址中只有38-14 = 24位需要存储在页表条目中,并且为其余的控制数据提供32-24 = 8位(存在,主管/用户,可写/不可写,脏,访问等位。假设物理地址也不超过38位,这就是我们得到的。系统可能具有略多于38位的物理地址,代价是具有较少的控制位。无论如何,一切都适合。所以,那里,38 = 12(页面目录索引)+12(页面表索引)+14(偏移)。
  3. 32MB / 16KB =程序本身的2048页。每个页面表覆盖2个 12 = 4096页,因此该程序需要大约2048/4096 = 0页表。我们将其舍入到1页表。然后还有页面目录。 2048 + 1 + 1 = 2050是包含整个程序及其相关页面表在内存中所需的页数。