SMP(对称多处理器/多核)机器上如何处理中断?内存管理单元是只有一个还是多个?
假设两个线程 A 和 B 运行在不同的内核上(同时)访问页表中不存在的内存页面,在这种情况下,将会出现页面错误,并从内存中引入新页面。
将会发生的事件的顺序是什么?如果有一个内存管理单元,则页面错误转发到哪一个核心?内核如何处理它?是否存在多个内核实例,每个实例都运行在不同的内核上?如果是这样,它们如何同步页面错误处理等事件?
嗯,这取决于具体的架构,但据我从英特尔文档中所记得的......
中断源主要有两个:
- 内部:这些是由CPU本身生成的。包括故障、陷阱、软件中断等。
- 外部:这些是由外设生成的硬件中断。
内部中断总是被传送到生成它的CPU。外部的被发送到任意核心。
在现代模型中,还可以使用类似总线的系统而不是旧的中断驱动系统来传递中断,但我忽略了该模型是否在任何当前操作系统中使用。
关于MMU,当然每个核心都有自己的MMU,但它们通常被操作系统强制使用相同的段,因此可以对称使用。请注意,物理内存和虚拟内存之间的大部分映射实际上都在内存中,并且始终是共享的。
关于示例中的顺序:
- 页面错误被转发到生成它的核心。
- 内核更新其 MMU 表,这些表受到共享锁或类似锁的保护。
- 不,通常只有一个内核,除非您应用虚拟化模型。
- 它们使用共享锁或类似结构进行同步。如果两个核心同时在同一页面发生故障……实际上,这没什么大不了的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)