spl (сокращение от set priority level , по названию ассемблерной инструкции PDP-11 с тем же названием [1] ) — это название набора подпрограмм или макросов ядра Unix, используемых для изменения уровня приоритета прерываний . [2] [3] Исторически это было необходимо для синхронизации критических разделов кода ядра, которые не должны прерываться. [4] Более новые варианты Unix, поддерживающие симметричную многопроцессорную обработку, теперь в основном используют для этой цели мьютексы , что является более общим решением, так что несколько процессоров могут выполнять код ядра одновременно. [5] [1]
В более старых версиях Unix для PDP-11 таких процедур было восемь, от spl0
до spl7
, каждая из которых соответствовала одному уровню приоритета прерывания PDP-11, [3] в дополнение к splx
, которая восстанавливает предыдущий уровень приоритета (возвращаемый одной из других процедур). [2] В BSD Unix и его производных они называются splhigh
, splserial
, splsched
, splclock
, splstatclock
, splvm
, spltty
, splsofttty
, splnet
, splbio
, splsoftnet
, splsoftclock
, spllowersoftclock
, spl0
, и splx
. [2]
По состоянию на март 2019 года [обновлять]семейство примитивов spl по-прежнему активно используется в OpenBSD [6] и NetBSD [7] , о чем свидетельствуют многочисленные вызовы splnet()
в сетевом коде; [6] [7] тогда как FreeBSD и DragonFly BSD используют более современные концепции; например, в DragonFly вместо spl могут использоваться токены LWKT .
s = splnet();
s = splnet();