记一个对MMU的错误理解

偶然和同学交流技术时,思想碰撞,引发了一个对于MMU和CPU架构的思考。

按照我以往的理解,MMU就是一个内存管理单元,是负责虚拟地址到物理地址转换功能的。我一直认为一个SOC中只需要一个MMU做这个工作就行了,事实证明我还是想当然了。。。

我们知道对于MMU来说,它的工作需要页表来进行支持,一般内核需要配置相关寄存器,(页表基地址寄存器),在内核中每个进程都拥有自己的用户地址空间,在task_struct中都会保存一个pgd成员,它的作用就是在进程切换时对地址空间进行切换,实际上也就是把这个值告诉MMU。那么问题来了,假如多核心的SOC,其中只有一个MMU,会带来什么毁灭性的问题?
芯片厂商之所以实现多核心芯片,目的就是为了并发执行,提升系统性能,并发执行意思就是可以在多个CPU上同时运行多个不同的进程,那么既然进程要运行,自然需要切换到对应的地址空间。如果只有一个MMU,这个MMU中的页表基地址设置为其中一个进程的pgd,那么另一个进程必然会出错,这将使得多进程并发执行的场景无法实现,多核心的意义荡然无存。

因此需要更新一下我的理解了,也上网了解了一下,确认对于多核心的芯片来说,每个芯片都是具有单独的MMU的,这样才能互相不会干扰。

从网上找了一个架构图,从知乎上 in nek 的文章中截取的:
记一个对MMU的错误理解