在多核 Linux 系统中如何处理系统调用?

在多核 Linux 系统中如何处理系统调用?

当一个内核的线程或进程发起系统调用(例如,可以是 fork())时,操作系统将进入内核模式,假设有多个系统调用(例如,也可能是 fork())来自不同的内核,操作系统如何处理这种情况?操作系统是否使用全局锁,并且只允许内核模式下只有一个调用处于活动状态?或者操作系统允许并发处理系统调用,但极小的部分(即关键部分)除外?

答案1

这取决于操作系统及其版本。但是,所有正在使用的 Linux 内核都是可重入的,不仅可以从不同的 CPU 调用多次,甚至可以从同一 CPU 上的不同线程调用多次。它们使用细粒度锁而不是全局锁。(但是,另请参阅大内核锁,但事实并非如此充分直到 2011 年才被删除。)

FreeBSD(有自己的“巨型锁”):

相关内容