Globální zámek jádra

V oblasti operačních systémů je známý jako globální zámek jádra nebo také jako velký zámek jádra, je zámek, který může být použit v jádře, pro základní umožnění souběžnosti, nezbytné v oblasti systémů symetrického multiprocesingu (SMP).

Jde o výhradní globální zámek jádra, který je zamknut vždy, když vlákno vstoupí do prostoru jádra, a uvolněn, když toto vlákno vystoupí zpět do uživatelského prostoru; typickým příkladem je systémové volání. V tomto modelu mohou vlákna v uživatelském prostoru běžet současně na všech dostupných procesorech nebo jádrech procesorů, ale v prostoru jádra nemůže běžet více než jedno vlákno; jakákoli jiná vlákna, která se pokusí vstoupit do prostoru jádra, jsou nucena čekat (budou pozastavena). Jinými slovy, tento zámek eliminuje veškerý multitasking (paralelismus) v prostoru jádra (a umožní paralelizmus v prostoru uživatelském).

Takovýmto zásadním izolováním jádra od paralelismu (souběžnosti) je zabezpečeno, že již není nutné mnoho částí jádra upravovat, aby podporovaly SMP. Avšak vzhledem k tomu, že v systémech SMP s globálním zámkem jádra, může pouze jeden procesor, přesněji jedno CPU jádro (jádrem míněna část vícejádrového procesoruhardware) spustit kód jádra operačního systému (zde jde o základ operačního systému – software), výkon aplikací, které v jádře operačního systému tráví značné množství času, se příliš nezlepší (kód jádra se stává úzkým hrdlem pro využití paralelismu).[1] Řešení SMP s globálním zámkem jádra je tedy běžně považováno (pouze) za předběžný prostředek k zavedení podpory pro SMP do počítačů s příslušným systémem, kterému přináší výkonnostní výhody pouze v běhu procesů v uživatelském prostoru. Většina moderních operačních systémů postupně přechází na jemnozrnný přístup k zamykání, nikoliv globální zámek jádra.

Linuxové jádro mělo od zavedení SMP globální zámek jádra (BKL), dokud jej Arnd Bergmann v roce 2011 ve verzi jádra 2.6.39 neodstranil,[2][3] přičemž zbývající použití globálního zámku byly odstraněny nebo nahrazeny jemnějšími metodami zamykání. Distribuce Linuxu na nebo nad CentOS 7, Debian 7 (Wheezy) a Ubuntu 11.10 a vyšší proto nepoužívají globální zámek jádra.

Počátkem července 2021, OpenBSD and NetBSD stále používají rodinu primitiv spl (Unix) k usnadnění synchronizace kritických sekcí v jádře,[4][5][6] což znamená, že mnoho systémových volání může omezovat možnosti SMP systému, a podle Matthewa Dillona nelze schopnosti SMP těchto dvou systémů považovat za moderní.[7]

FreeBSD má stále podporu pro Giant mutex [8] který poskytuje sémantiku podobnou starému rozhraní spl, ale základní komponenty s kritickým výkonem byly již dávno převedeny na použití jemnějšího zamykání.[1]

Matthew Dillon tvrdí, že z univerzálních operačních systémů s otevřeným zdrojovým kódem mají moderní podporu SMP pouze Linux, DragonFly BSD a FreeBSD, přičemž OpenBSD a NetBSD zaostávají.[7]

Nadace NetBSD považuje moderní podporu SMP za zásadní pro směrování projektu NetBSD a nabídla granty vývojářům ochotným pracovat na vylepšeních SMP; NPF (firewall) byl jedním z projektů, které vznikly v důsledku těchto finančních pobídek, ale může být ještě nutné další vylepšení základního síťového zásobníku.[5][9]

Související články

editovat

Reference

editovat

V tomto článku byl použit překlad textu z článku Giant lock na anglické Wikipedii.

  1. a b Šablona:Cite mailing list
  2. Archivovaná kopie [online]. [cit. 2021-06-02]. Dostupné v archivu pořízeném dne 2012-07-20. 
  3. https://kernelnewbies.org/BigKernelLock – BigKernelLock at kernelnewbies.org
  4. /sys/net/if.c [online]. OpenBSD, 2019-06-30 [cit. 2019-07-25]. Dostupné online. 
  5. a b /sys/net/if.c [online]. NetBSD, 2019-07-25 [cit. 2019-07-25]. Dostupné online. 
  6. splx(9) — modify system interrupt priority level [online]. NetBSD, OpenBSD [cit. 2019-07-25]. Dostupné online. 
  7. a b Šablona:Cite mailing list
  8. Julian Elischer. locking(9) — kernel synchronization primitives [online]. FreeBSD, 2007 [cit. 2019-07-25]. Dostupné online. 
  9. SMP Networking (aka remove the big network lock) [online]. NetBSD, 2013-02-14 [cit. 2019-07-25]. Dostupné v archivu pořízeném z originálu dne 2019-07-25.