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

时间:2012-06-04 11:34:19

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

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

感谢任何帮助!

最佳, 西蒙

2 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:3)

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

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

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

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

  4. 该过程一直持续到PIT触发中断为止。

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

  6. 我希望能够解除你可能遇到的任何疑虑。简短的回答:MMU与流程无关,不知道流程是什么。