Synchronizace v jádře, symetrický multiprocesor, atomické operace.

Problém kritické sekce - uvedení dat do nekonzistentního stavu nebo přerušení v okamžiku výpočtu

 Při systémovém volání

 Při obsluze výjimek a přerušení                

Synchronizace v jádře

Atomická instrukce, jen jeden procesor aktivní v době jejího vykonání

Klasický spinlock, u uniprocesoru řešen jen zákazem preempce jádra, uvnitř spinlocku je preempce jádra též zakázána, u multiprocesoru v čekací smyčce je preemplce jádra povolena a kernel tak místo toho může naplánovat jiný proces

Oproti klasickému spinlocku zde readeři mohou číst neustále, writer musí ale čekat až všichni vše přečtou, pak to zamknout a zapsat; to samé u readerů, kteří všichni musejí čekat až jim to writer zas uvolní

 Seqlocks introduced in Linux 2.6 are similar to read/write spin locks, except that they give

 in fact a writer is allowed to proceed even when readers are active. The good part

 the bad part is that a reader may sometimes be forced to read the same data

 Each seqlock is a seqlock_t structure consisting of two fields:

 a lock field of type spinlock_t and an integer sequence field.

 This second field plays the role of a sequence counter. Each reader must read this

 In the opposite case, a new writer has become active and has increased the

 Therefore, kernel semaphores can be acquired only by functions that are allowed

 interrupt handlers and deferrable functions cannot use them.

Systémová volání sdílejí jednotlivé struktury v jádře OS – snaha o zabránění soutěže nad systémovými daty prostřednictvím:

Nepreemptivnost procesů jádra

Jádrový proces nemůže být přerušen a nahrazen procesem s vyšší prioritou (pokud samotný proces neudělá yield). I tak ale může být přerušen výjimkou nebo přerušením, a obsluha přerušení může být zase přerušena přerušením. 

Problém blokujících operací – možnost deadlocku -> uvolnit procesor před blokující operací

Instrukce provádějící celou v jedné instrukci (inc, dec...)

Nemůže vzniknout nekonzistence dat – není přerušení

Pouze pro jednoprocesorový stroj, pro multiprocesorový je speciální instrukce zamykající sběrnici

Zákaz přerušení

Kritická oblast začíná zákazem přerušení a končí obnovením přerušení

Velmi nebezpečné a nefunguje na víceprocesorových systémech

Nesmí se čekat na oznámení události přerušením

Pro víceprocesorové systémy velmi nákladné (režie)

Zabránění uvíznutí kdy více procesů žádá více zdrojů (přiřazení A->1, 2 B-> 2, 1) – prostředky se VŽDY alokují v pořadí adres semaforů

 Procesory (identické) a sdílená hlavní pamět jsou připojeny ke společné sběrnici, tu je nutno zamykat pro výhradní přístup jednoho procesoru (aby nemohly 2 procesy zapisovat na stejné místo v paměti naráz).

Klasické atomické instrukce (dec, inc) nejsou atomické, nutná speciální instrukce zamykající sběrnici

Nutná synchronizace mezipaměti (cache) procesorů: když procesor modifikuje svou mezipamět, musí kontrolovat jestli stejná data nejsou v mezipaměti jiného procesoru a když ano, musí je aktualizovat nebo zneplatnit.

Úloha může být zpracovávána postupně různými procesory, je umístěna ve sdílené hlavní paměti

Na více procesorech naráz mohou být současně provedena systémová volání

Obsluha přerušení – obsluhuje procesor, který má k dispozici nejvíce volných prostředků (obsluhuje proces s nejnižší prioritou)

Nutno řešit pokročilým způsobem synchronizaci jádra – semafory + spinlock

spinlock – efektivní pro multiprocesory – blokující skončí na jiném procesoru a nemusí se nic přepínat

spinlock nesmí chránit data přístupná při obsluze přerušení  - přerušení modifikuje data – problém řešený zákazem přerušení v KS

Procesy mohou využívat zámky dvěma způsoby:  

sdílené - pro čtení (lepší propustnost) 

výhradní – pro zápis 

Kromě SMP existují další technologie pracující na podobném principu: 

asymetrické multiprocesory ASMP - navíc vlastní lokální paměti a I/O připojení u procesorů, které tak mohou mít různé instrukční sady – každý procesor má speciální funkce – nelze libovolný proces na libovolný CPU 

multiprocesor s distribuovanou pamětí - procesory mají jen lokální paměti, není sdílená paměť, komunikace zasíláním zpráv, topologie 2D mřížky nebo N-rozměrné krychle, výhoda odstranění společné sběrnice jako úzkého hrdla 

problém u SMP – instrukce již není atomická v rámci procesů – nutno navíc uzamknout sběrnici instrukcí lock* 

atomická instrukce pro podporu semaforů a spinlocku – TSL (TestAndSetLock)

mov edx, DWORD(-1) //-1 zamčeno

//otestujeme stav zámku, 0 = odemčeno

//nepředběhl nás jiný procesor?

//původní lockState je v eax

LD lock, 0 ;; ulož hodnotu 0 do lock

Z <[link]átní%20závěrečná%20zkouška/PPR/PPR_Karfik_v2.docx> 
