SPL

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

spl (скорочення від set priority leve) — це назва для набору підпрограм або макросів ядра Unix, що використовуються для зміни рівня пріоритету переривань. Історично це було необхідно для синхронізації критичних розділів коду ядра, які не слід переривати. Новіші варіанти Unix, які підтримують симетричну багатопроцесорність, тепер здебільшого використовують для цієї мети мьютекси, що є більш загальним рішенням, тому кілька процесорів можуть виконувати код ядра одночасно.

У старих версіях Unix PDP-11 було вісім таких підпрограм, починаючи від spl0 до spl7, кожна з яких відповідала одному рівню пріоритету переривань PDP-11 на додаток до splx, який відновлює попередній рівень пріоритету). У BSD Unix і його похідних вони називаються splhigh, splserial, splsched, splclock, splstatclock, splvm, spltty, splsofttty, splnet, splbio, splsoftnet, splsoftclock, spllowersoftclock, spl0 і splx.

Станом на березень 2019 року сімейство примітивів spl все ще активно використовується в OpenBSD та NetBSD, про що свідчить велика кількість викликів splnet() у мережевому коді; тоді як FreeBSD і DragonFly BSD використовують більш сучасні концепції; наприклад, у DragonFly токени LWKT можуть використовуватися замість spl.

Посилання[ред. | ред. код]

  1. Lehey, Greg (2001), Improving the FreeBSD SMP implementation [Архівовано 23 січня 2022 у Wayback Machine.], retrieved 11 May 2018
  2. "spl(9) - OpenBSD manual pages" [Архівовано 23 січня 2022 у Wayback Machine.]. Retrieved 11 May 2018.
  3. Lions, John (1976). Lions' Commentary on UNIX 6th Edition[en], with Source Code. p. 41, p. 43
  4. McKusick, Marshall Kirk; et al. (authors) (2004). The Design and Implementation of the FreeBSD Operating System. Addison-Wesley.
  5. "/sys/net/if.c" [Архівовано 23 січня 2022 у Wayback Machine.]. BSD Cross Reference. OpenBSD. 2019-03-01. Retrieved 2019-03-05. s = splnet();
  6. "/sys/net/if.c" [Архівовано 23 січня 2022 у Wayback Machine.]. BSD Cross Reference. NetBSD. 2019-03-01. Retrieved 2019-03-05. s = splnet();