Proces Synchronizace: Problém kritické sekce v OS
⚡ Chytré shrnutí
Proces SyncChronizace je úkol koordinace provádění procesů tak, aby žádné dva procesy nepřistupovaly ke stejným sdíleným datům nebo zdrojům současně. Zabraňuje nekonzistenci dat v systémech s více procesy řízením vstupu do kritické sekce.

Co je proces Synchronizace?
Proces Synchronizace je úkolem koordinovat provádění procesů tak, aby žádné dva procesy nemohly mít přístup ke stejným sdíleným datům a zdrojům.
Je to obzvláště potřebné v multiprocesovém systému, kde běží více procesů současně a více než jeden proces se snaží získat přístup ke stejnému sdílenému zdroji nebo datům současně.
To může vést k nekonzistenci sdílených dat. Změna provedená jedním procesem se tedy nemusí nutně projevit, když ostatní procesy přistupují ke stejným sdíleným datům. Aby se tomuto typu nekonzistence dat předešlo, je třeba procesy vzájemně synchronizovat.
Jak zpracovat Syncfunguje korunizace?
Například proces A mění data v paměťovém umístění, zatímco jiný proces B se pokouší číst data z něj. stejný paměťové místo. Je vysoká pravděpodobnost, že data načtená druhým procesem budou chybná.
Části programu
Zde jsou čtyři základní prvky kritické sekce:
- Vstupní sekce: Je součástí procesu, který rozhoduje o vstupu konkrétního procesu.
- Kritická sekce: Tato část umožňuje jednomu procesu zadat a upravit sdílenou proměnnou.
- Výstupní sekce: Sekce Exit umožňuje ostatním procesům, které čekají ve vstupní sekci, vstoupit do kritické sekce. Také kontroluje, zda by měl být proces, který dokončil své provádění, odstraněn prostřednictvím této sekce.
- Zbývající část: Všechny ostatní části Code, které se nenacházejí v kritické, vstupní a výstupní sekci, se nazývají zbytková sekce.
Co je problém kritické sekce?
Kritická sekce je segment kódu, ke kterému může v určitém časovém okamžiku přistupovat jeden proces. Tato sekce se skládá ze sdílených datových zdrojů, ke kterým musí mít přístup i ostatní procesy.
- Vstup do kritické sekce je zpracován funkcí wait() a je reprezentován jako P().
- Výstup z kritické sekce je řízen funkcí signal() reprezentovanou jako V().
V kritické části lze provést pouze jeden proces. Ostatní procesy, které čekají na provedení své kritické sekce, musí čekat, dokud aktuální proces nedokončí své provedení.
Pravidla pro kritickou sekci
Kritická sekce musí vyžadovat vynucování všech tří pravidel:
- Vzájemné vyloučení: Vzájemné vyloučení je speciální typ binárního semaforu, který se používá pro řízení přístupu ke sdílenému zdroji. Zahrnuje mechanismus dědičnosti priorit, aby se zabránilo rozšířeným problémům s inverzí priorit. V kritické části nemůže být spuštěn více než jeden proces najednou.
- Průběh: Toto řešení se používá, když se nikdo nenachází v kritické sekci a někdo se chce přidat. Pak by procesy, které nejsou ve své zbytkové sekci, měly v konečném čase rozhodnout, kdo by měl dovnitř vstoupit.
- Vázané čekání: Když proces požádá o vstup do kritické sekce, existuje specifický limit počtu procesů, které se mohou do jeho kritické sekce dostat. Po dosažení tohoto limitu musí systém požadavku na vstup do kritické sekce povolit.
Řešení kritické sekce
V přípravě Syncchronizace, kritická sekce hraje hlavní roli, takže problém musí být vyřešen.
Zde jsou některé široce používané metody k řešení problému kritické sekce.
Petersonovo řešení
Petersonovo řešení je široce používaným řešením problémů kritické sekce. Tento algoritmus vyvinul počítačový vědec jménem Peterson, a proto se mu říká Petersonovo řešení.
V tomto řešení, když je proces vykonáván v kritickém stavu, pak druhý proces provádí pouze zbytek kódu a může se stát opak. Tato metoda také pomáhá zajistit, aby v kritické sekci v určitou dobu běžel pouze jeden proces.
Příklad
PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
- Předpokládejme, že existuje N procesů (P1, P2, … PN) a každý proces v určitém okamžiku musí vstoupit do kritické sekce.
- Je udržováno pole FLAG[] o velikosti N, které je standardně nastaveno na hodnotu false. Takže kdykoli proces potřebuje vstoupit do kritické sekce, musí nastavit svůj příznak na hodnotu true. Například pokud chce proces vstoupit, nastaví FLAG[i]=TRUE.
- Další proměnná s názvem TURN označuje číslo procesu, který aktuálně čeká na vstup do CS.
- Proces, který při výstupu vstoupí do kritické sekce, změní TURN na jiné číslo ze seznamu připravených procesů.
- Příklad: tah je 2, pak P2 vstoupí do kritické sekce a při výstupu je tah=3, a proto P3 ukončí čekací smyčku.
SyncHronizační hardware
Někdy jsou problémy kritické sekce řešeny také hardwarem. Některé operační systémy nabízejí funkci zámku, kdy proces získá zámek při vstupu do kritické sekce a po jejím opuštění jej uvolní.
Takže když se jiný proces pokouší vstoupit do kritické sekce, nebude moci vstoupit, protože je uzamčen. Může tak učinit pouze v případě, že je volný, a to získáním samotného zámku.
Zámky Mutex
SyncChronické hardwarové zabezpečení není pro každého snadno implementovatelné, proto byla zavedena i striktní softwarová metoda známá jako Mutex Locks.
V tomto přístupu se ve vstupní části kódu získá LOCK nad kritickými zdroji používanými uvnitř kritické sekce. Ve výstupní části je zámek uvolněn.
Semaphore Řešení
Semaphore je jednoduše proměnná, která je nezáporná a sdílená mezi vlákny. Je to další algoritmus nebo řešení problému kritické sekce. Je to signalizační mechanismus a vlákno, které čeká na semafor, může být signalizováno jiným vláknem.
Používá dvě atomické operace: 1) čekání a 2) signál pro synchronizaci procesů.
Příklad
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


