1

Когда поток или процесс из одного ядра инициирует системный вызов (например, это может быть fork ()), ОС переходит в режим ядра, предполагая, что несколько системных вызовов (например, возможно, также fork ()) поступают из разных ядер, как ОС справляется с этим? Использует ли ОС глобальную блокировку и позволяет только один вызов быть активным в режиме ядра? Или ОС позволяет обрабатывать системный вызов одновременно, за исключением очень незначительной части, которая является критической секцией?

1 ответ1

0

Это зависит от ОС и ее версии. Однако все используемые ядра Linux являются реентерабельными и могут вызываться несколько раз не только из разных процессоров, но даже из разных потоков в одном и том же процессоре. Они используют мелкозернистые замки вместо глобальных. (Тем не менее, см. Также Большой замок ядра, который не был полностью удален до 2011 года.)

FreeBSD (который имеет свой собственный "гигантский замок"):

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .