【问题标题】:How does the system choose the right Page Table?系统如何选择正确的页表?
【发布时间】:2012-06-08 11:33:58
【问题描述】:

让我们关注单处理器计算机系统。据我所知,当创建一个进程时,会设置页表,它将虚拟地址映射到物理内存地址空间。每个进程都有自己的页表,存储在内核地址空间中。但是MMU如何为进程选择正确的页表,因为不仅有一个进程在运行,而且会发生很多上下文切换?

感谢任何帮助!

最好, 西蒙

【问题讨论】:

    标签: process x86 computer-science processor computer-architecture


    【解决方案1】:

    处理器有一个称为页表基址寄存器 (PTBR) 的特权寄存器,在 x86 上它是 CR3。在上下文切换时,操作系统会更改 PTBR 的值,以便处理器现在知道要使用哪个页表。除了 PTBR,许多现代处理器还有地址空间编号 (ASN) 的概念。进程被赋予一个地址空间号(来自一个有限的池),并且这个 ASN 也被设置在上下文切换的寄存器中。此 ASN 用作 TLB 匹配的一部分,并允许来自多个地址空间的 TLB 条目共存。只有当一个 ASN 被重用时,才需要刷新 TLB,然后只对匹配该 ASN 的条目进行刷新。大多数 x86 实现比这更粗粒度,并且有一个全局页面的概念(用于共享库和共享数据)。

    【讨论】:

      【解决方案2】:

      在这种情况下,MMU 完全不知道进程是什么。跟踪进程的操作系统会为每个进程生成一个页表,正如您所说,当它们被创建时。上下文切换的流程如下:

      1. 操作系统告诉 MMU 使用位于物理地址 0xFOO 的页表

      2. 操作系统对可编程中断计时器 (PIT) 进行编程,以在 BAR 毫秒后引发硬件中断。

      3. 操作系统恢复进程状态(CPU寄存器、程序计数器等)并跳转到正确的地址。

      4. 进程一直运行,直到 PIT 触发中断。

      5. 用于处理 PIT 中断的操作系统例程然后保存程序状态(寄存器等),使用调度算法确定下一个要运行的进程(在简单的情况下,循环链表),然后启动在第 1 步结束。

      我希望这可以消除您的任何疑问。简短的回答:MMU 与进程无关,不知道进程是什么。

      【讨论】:

      • 感谢您的快速回复。所以你说操作系统会在每次上下文切换时刷新和恢复页表?
      • @user1435023 本质上。操作系统以指针的形式告诉 MMU 表在物理内存中的位置,然后 MMU 处理 TTL 的刷新和其他硬件任务。根据 MMU,操作系统可能对底层细节有更细粒度的控制,但这并不是绝对必要的。在最简单的层面上,操作系统所关心的只是告诉 MMU 使用哪个页表。
      • @user1435023 更正:上面的意思是TLB,不是 TTL。 Nathan Binkert 回答了更多关于 TLB 方面的问题
      猜你喜欢
      • 2014-09-17
      • 2021-01-06
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      相关资源
      最近更新 更多