系统如何选择正确的页面表?

sai*_*imn 7 x86 computer-science processor process computer-architecture

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

任何帮助表示赞赏!

最好,西蒙

Nat*_*ert 15

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


Dou*_*gvj 4

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

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

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

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

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

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

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