【问题标题】:Can someone explain this about paging in operating system?有人可以解释一下操作系统中的分页吗?
【发布时间】:2017-11-05 12:03:40
【问题描述】:

通常,在 32 位 CPU 上,每个页表条目是 4 字节长, 但这个大小也可以变化。 32 位条目可以指向以下之一 2^32 个物理页框。如果帧大小为 4 KB (2^12),则系统 具有 4 字节的条目可以寻址 2^44 字节(或 16 TB)的物理 记忆。这里要注意的是物理内存的大小 分页内存系统不同于最大逻辑大小 过程。

分页如何使逻辑内存空间大于物理内存空间? 32 位 CPU 中的总帧数不等于 2^(32-12)=2^20 帧数而不是 2^32 帧数吗?如果是这样,具有 4 字节条目的系统是否不能寻址 (2^20)*(2^12) 字节的内存?

【问题讨论】:

  • 内存中的帧数为memory-size\page-size。如果您有 4GB 的主内存,那么您将拥有2^20 帧。除此之外,你的问题太宽泛了。
  • 这和我想问的问题完全一样!书里的这一段确实让人费解。

标签: memory-management operating-system paging cpu-architecture


【解决方案1】:

当我们说一个 cpu 是 32-bit 或 64-bit 时,它的意思是它可以分别指向 2^32 或 2^64 个物理页框。现在如果一个页框大小为 4KB (2^12),那么可以访问的内存总量为 (2^12)×(2^32)=2^44 字节或 16TB

【讨论】:

  • 通常我们的意思是整个指针(包括页内偏移)部分是 32 或 64 位。一些 32 位 CPU 使用各种方法将可寻址内存扩展到 4GiB 以上(例如具有更宽物理地址的页表,例如 x86 PAE,它不会增加一个进程的虚拟地址空间的大小)。我不知道有任何 32 位 CPU 可以像您描述的那样工作,具有 32+12 位指针。
【解决方案2】:

诚然,该文本不是很清楚。我会尝试清除它。

将虚拟地址转换为物理地址时,不会转换固定数量的低位:

+---------------------+----------+
|    High bits        | Low bits |
+---------------------+----------+
         |                  |
         |                  |
         V                  |
   [Page tables]            |
         |                  |
         |                  |
         V                  V
+---------------------+----------+
|        Physical address        |
+---------------------+----------+

低位数字与页面大小相关:如果我们假设 4KiB 页面,那么低 12 位是固定的,不会被翻译。
我们还假设虚拟地址空间是 32 位。

如果页表条目是 32 位长,它可以提供 32 位用作物理地址的高位部分。
因此,在查找页表时,我们有 20 (32 - 12) 位的输入和 32 位的输出。
加上固定部分的额外 12 位,这给出了 32 + 12 = 44 位的物理地址。

更新的图:

        <---------- 32 bits ----------->
        <---- 20 bit -------> <- 12 b -> 
       +---------------------+----------+
       |    High bits        | Low bits |
       +---------------------+----------+
               |                  |
               | 20 bit           |
               V                  |
         [Page tables]            |
               |                  |
               | 32 bit           |
               V                  V
+----------------------------+----------+
|           Physical address            |
+----------------------------+----------+
 <-------- 32 bits ---------> <- 12 b ->
 <------------- 44 bits --------------->

这不是真正的 44 位寻址,但是指针仍然是 32 位。
应用程序只能直接访问 4GiB 的内存,但操作系统可以映射一个 应用到第一个 4GiB,另一个应用到第二个 4GiB,依此类推。

这类似于PAE 在 x86 上的工作方式。

所有页表条目都用于给出物理地址的高位的假设是不正确的。
其中一些位用于设置帧的属性:缓存能力、访问权限、映射状态等。

物理地址的高位称为页框
页帧的数量由页表条目的结构决定,而不是由虚拟地址空间(也不是物理地址空间)的大小决定。
如果页表条目的帧号为 50 位,则有 250 个帧。
物理地址的下半部分称为页偏移,它由页大小(或帧大小,它们在设计上是相等的)决定。

【讨论】:

  • 只是为了确保我理解正确。这是否意味着即使我们可以使用一个页表来指向 44 位物理地址,物理内存中的某些帧 (2^44 - 2^32) 也永远不会在这个页表中被引用?但是,在另一个页表(与不同的进程相关联)中,我们可以指向物理内存中的其他 2^20 个地址吗?
  • @desa 页表具有固定布局。您可以将它们视为一个映射函数,输入一个 20 位数字并输出一个 32 位数字。连同较低的固定 12 位,这将 32 位地址 (20+12) 转换为 44 位地址 (32+12)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 2011-11-22
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多