Čo je synchronizácia procesov?
Synchronizácia procesov je úlohou koordinácie vykonávania procesov takým spôsobom, aby žiadne dva procesy nemali prístup k rovnakým zdieľaným údajom a zdrojom.
Je to špeciálne potrebné v systéme s viacerými procesmi, keď beží viac procesov súčasne a viac ako jeden proces sa pokúša získať prístup k rovnakému zdieľanému prostriedku alebo údajom súčasne.
To môže viesť k nekonzistencii zdieľaných údajov. Takže zmena vykonaná jedným procesom sa nemusí nevyhnutne prejaviť, keď iné procesy pristupovali k rovnakým zdieľaným údajom. Aby sa zabránilo tomuto typu nekonzistencie údajov, je potrebné procesy navzájom synchronizovať.
V tomto výučbe operačného systému sa dozviete:
- Čo je synchronizácia procesov?
- Ako funguje synchronizácia procesov?
- Sekcie programu
- Čo je problém kritickej sekcie?
- Pravidlá pre kritický oddiel
- Riešenia kritickej sekcie
Ako funguje synchronizácia procesov?
Napríklad proces A mení údaje v pamäťovom mieste, zatiaľ čo iný proces B sa pokúša načítať údaje z rovnakého pamäťového miesta. Existuje vysoká pravdepodobnosť, že údaje načítané druhým procesom budú chybné.
Sekcie programu
Tu sú štyri základné prvky kritickej časti:
- Vstupná sekcia: Je súčasťou procesu, ktorý rozhoduje o vstupe do konkrétneho procesu.
- Kritická časť: Táto časť umožňuje jednému procesu zadávať a upravovať zdieľanú premennú.
- Odchodová časť: Odchodová časť umožňuje ďalšiemu procesu čakajúcemu vo vstupnej časti vstúpiť do kritických sekcií. Tiež kontroluje, či by proces, ktorý dokončil svoje vykonávanie, mal byť odstránený prostredníctvom tejto časti.
- Sekcia zvyšku: Všetky ostatné časti kódexu, ktoré sa nenachádzajú v sekcii kritických, vstupných a výstupných, sú známe ako zvyšné časti.
Čo je problém kritickej sekcie?
Kritická časť je segment kódu, ku ktorému je možné získať prístup pomocou signálneho procesu v konkrétnom okamihu. Táto časť sa skladá zo zdieľaných dátových zdrojov, ku ktorým sa vyžadovalo prístup iných procesov.
- Vstup do kritickej sekcie je spracovaný funkciou wait () a je reprezentovaný ako P ().
- Výstup z kritického úseku je riadený funkciou signal (), predstavovanou ako V ().
V kritickej časti je možné vykonať iba jeden proces. Ostatné procesy, ktoré čakajú na vykonanie svojej kritickej sekcie, musia počkať, kým aktuálny proces nedokončí svoje vykonávanie.
Pravidlá pre kritický oddiel
Kritická časť musí presadzovať všetky tri pravidlá:
- Vzájomné vylúčenie: Vzájomné vylúčenie je špeciálny typ binárneho semaforu, ktorý sa používa na riadenie prístupu k zdieľanému prostriedku. Zahŕňa mechanizmus prioritného dedenia, aby sa zabránilo problémom s inverziou rozšírenej priority. V kritickej sekcii môže byť vykonaných najviac jeden proces súčasne.
- Priebeh: Toto riešenie sa používa, keď nikto nie je v kritickej časti a niekto chce dovnútra. Potom by mali procesy, ktoré nie sú v ich pripomienkovej časti, rozhodnúť, kto by mal vstúpiť, a to v konečnom čase.
- Viazané čakanie: Keď proces žiada o vstup do kritickej sekcie, existuje určité obmedzenie týkajúce sa počtu procesov, ktoré sa môžu dostať do ich kritickej sekcie. Po dosiahnutí limitu teda musí systém umožniť procesu dostať sa do svojej kritickej sekcie.
Riešenia kritickej sekcie
Pri synchronizácii procesov zohráva kritickú časť hlavnú úlohu, takže musí byť problém vyriešený.
Tu uvádzame niektoré často používané metódy na riešenie problému s kritickými sekciami.
Petersonovo riešenie
Petersonovo riešenie je široko používaným riešením problémov kritických častí. Tento algoritmus vyvinul počítačový vedec Peterson, preto je pomenovaný ako Petersonovo riešenie.
V tomto riešení, keď sa proces vykonáva v kritickom stave, potom druhý proces vykoná iba zvyšok kódu a môže nastať opak. Táto metóda tiež pomáha zabezpečiť, aby sa v kritickej sekcii v konkrétnom čase spustil iba jeden proces.
Príklad
PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
- Predpokladajme, že existuje N procesov (P1, P2, ... PN) a každý proces v určitom okamihu vyžaduje vstup do kritickej sekcie
- Je zachované pole FLAG [] veľkosti N, ktoré je štandardne nepravdivé. Takže vždy, keď proces vyžaduje vstup do kritickej sekcie, musí nastaviť svoj príznak ako pravdivý. Napríklad ak chce Pi vstúpiť, nastaví VLAJKU [i] = PRAVDA.
- Ďalšia premenná s názvom TURN označuje číslo procesu, ktoré sa momentálne chystá vstúpiť do CS.
- Proces, ktorý vstúpi do kritickej sekcie pri výstupe, by zmenil TURN na iné číslo zo zoznamu pripravených procesov.
- Príklad: turn je 2, potom P2 vstúpi do kritickej sekcie a pri opustení turn = 3, a preto sa P3 vymaní z čakacej slučky.
Synchronizačný hardvér
Problémy kritickej sekcie sa niekedy vyriešia aj hardvérom. Niektorý operačný systém ponúka funkciu zámku, keď Proces získa zámok pri vstupe do časti Kritické a po opustení zámok uvoľní.
Takže keď sa iný proces pokúša vstúpiť do kritickej sekcie, nebude schopný vstúpiť, pretože je uzamknutý. Môže to urobiť, iba ak je to zadarmo, získaním samotného zámku.
Zámky Mutex
Synchronizačný hardvér nie je jednoduchý spôsob implementácie pre každého, preto bola predstavená aj prísna softvérová metóda známa ako Mutex Locks.
V tomto prístupe sa vo vstupnej časti kódu získa LOCK nad kritickými prostriedkami použitými vo vnútri kritickej sekcie. Vo výstupnej časti sa zámok uvoľní.
Semaforové riešenie
Semafor je jednoducho premenná, ktorá nie je negatívna a je zdieľaná medzi vláknami. Je to ďalší algoritmus alebo riešenie problému kritickej sekcie. Je to signalizačný mechanizmus a vlákno, ktoré čaká na semafore, čo môže byť signalizované iným vláknom.
Využíva dve atómové operácie, 1) čakací a 2) signál na synchronizáciu procesu.
Príklad
WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;
Zhrnutie:
- Synchronizácia procesov je úlohou koordinácie vykonávania procesov takým spôsobom, aby žiadne dva procesy nemali prístup k rovnakým zdieľaným údajom a zdrojom.
- Štyri prvky kritickej časti sú: 1) vstupná časť 2) kritická časť 3) výstupná časť 4) pripomienková časť
- Kritická časť je segment kódu, ku ktorému je možné získať prístup pomocou signálneho procesu v konkrétnom okamihu.
- Tri pravidlá, ktoré musí kritická sekcia vynútiť, sú: 1) Vzájomné vylúčenie 2) Riešenie procesu 3) Viazané čakanie
- Vzájomné vylúčenie je špeciálny typ binárneho semaforu, ktorý sa používa na riadenie prístupu k zdieľanému prostriedku.
- Procesné riešenie sa používa, keď nikto nie je v kritickej sekcii a niekto chce.
- V riešení viazaného čakania potom, čo proces požiada o vstup do svojej kritickej sekcie, existuje limit pre to, koľko ďalších procesov sa môže dostať do svojej kritickej sekcie.
- Petersonovo riešenie je široko používaným riešením problémov kritických častí.
- Problémy kritickej časti sú tiež vyriešené synchronizáciou hardvéru
- Synchronizačný hardvér nie je jednoduchý spôsob implementácie pre každého, preto bola predstavená aj prísna softvérová metóda známa ako Mutex Locks.
- Semafor je ďalší algoritmus alebo riešenie problému kritickej sekcie.