【发布时间】:2012-06-08 11:33:58
【问题描述】:
让我们关注单处理器计算机系统。据我所知,当创建一个进程时,会设置页表,它将虚拟地址映射到物理内存地址空间。每个进程都有自己的页表,存储在内核地址空间中。但是MMU如何为进程选择正确的页表,因为不仅有一个进程在运行,而且会发生很多上下文切换?
感谢任何帮助!
最好, 西蒙
【问题讨论】:
标签: process x86 computer-science processor computer-architecture
让我们关注单处理器计算机系统。据我所知,当创建一个进程时,会设置页表,它将虚拟地址映射到物理内存地址空间。每个进程都有自己的页表,存储在内核地址空间中。但是MMU如何为进程选择正确的页表,因为不仅有一个进程在运行,而且会发生很多上下文切换?
感谢任何帮助!
最好, 西蒙
【问题讨论】:
标签: process x86 computer-science processor computer-architecture
处理器有一个称为页表基址寄存器 (PTBR) 的特权寄存器,在 x86 上它是 CR3。在上下文切换时,操作系统会更改 PTBR 的值,以便处理器现在知道要使用哪个页表。除了 PTBR,许多现代处理器还有地址空间编号 (ASN) 的概念。进程被赋予一个地址空间号(来自一个有限的池),并且这个 ASN 也被设置在上下文切换的寄存器中。此 ASN 用作 TLB 匹配的一部分,并允许来自多个地址空间的 TLB 条目共存。只有当一个 ASN 被重用时,才需要刷新 TLB,然后只对匹配该 ASN 的条目进行刷新。大多数 x86 实现比这更粗粒度,并且有一个全局页面的概念(用于共享库和共享数据)。
【讨论】:
在这种情况下,MMU 完全不知道进程是什么。跟踪进程的操作系统会为每个进程生成一个页表,正如您所说,当它们被创建时。上下文切换的流程如下:
操作系统告诉 MMU 使用位于物理地址 0xFOO 的页表
操作系统对可编程中断计时器 (PIT) 进行编程,以在 BAR 毫秒后引发硬件中断。
操作系统恢复进程状态(CPU寄存器、程序计数器等)并跳转到正确的地址。
进程一直运行,直到 PIT 触发中断。
用于处理 PIT 中断的操作系统例程然后保存程序状态(寄存器等),使用调度算法确定下一个要运行的进程(在简单的情况下,循环链表),然后启动在第 1 步结束。
我希望这可以消除您的任何疑问。简短的回答:MMU 与进程无关,不知道进程是什么。
【讨论】: