Когда поток или процесс из одного ядра инициирует системный вызов (например, это может быть fork ()), ОС переходит в режим ядра, предполагая, что несколько системных вызовов (например, возможно, также fork ()) поступают из разных ядер, как ОС справляется с этим? Использует ли ОС глобальную блокировку и позволяет только один вызов быть активным в режиме ядра? Или ОС позволяет обрабатывать системный вызов одновременно, за исключением очень незначительной части, которая является критической секцией?
1 ответ
0
Это зависит от ОС и ее версии. Однако все используемые ядра Linux являются реентерабельными и могут вызываться несколько раз не только из разных процессоров, но даже из разных потоков в одном и том же процессоре. Они используют мелкозернистые замки вместо глобальных. (Тем не менее, см. Также Большой замок ядра, который не был полностью удален до 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 (который имеет свой собственный "гигантский замок"):