当一个内核的线程或进程发起系统调用(例如,可以是 fork())时,操作系统将进入内核模式,假设有多个系统调用(例如,也可能是 fork())来自不同的内核,操作系统如何处理这种情况?操作系统是否使用全局锁,并且只允许内核模式下只有一个调用处于活动状态?或者操作系统允许并发处理系统调用,但极小的部分(即关键部分)除外?
答案1
这取决于操作系统及其版本。但是,所有正在使用的 Linux 内核都是可重入的,不仅可以从不同的 CPU 调用多次,甚至可以从同一 CPU 上的不同线程调用多次。它们使用细粒度锁而不是全局锁。(但是,另请参阅大内核锁,但事实并非如此充分直到 2011 年才被删除。)
- https://www.quora.com/Is-the-Linux-kernel-re-entrant
- https://stackoverflow.com/questions/18393650/how-does-the-linux-kernel-realize-reentrancy
- http://www.tldp.org/FAQ/Threads-FAQ/Reentrancy.html
FreeBSD(有自己的“巨型锁”):