Proces Synchronizacija: Problem kritičnog odjeljka u OS-u
⚡ Pametni sažetak
Proces SyncKronizacija je zadatak koordinacije izvršavanja procesa tako da nijedan proces ne pristupa istim dijeljenim podacima ili resursu u isto vrijeme. Sprječava nekonzistentnost podataka u višeprocesnim sustavima kontroliranjem ulaska u kritični odjeljak.

Što je proces Synckronizacija?
Proces Synchroniziranje je zadatak koordinacije izvršenja procesa na način da dva procesa ne mogu imati pristup istim dijeljenim podacima i resursima.
Posebno je potreban u višeprocesnim sustavima kada se više procesa izvršava istovremeno i više procesa pokušava istovremeno pristupiti istom dijeljenom resursu ili podacima.
To može dovesti do nekonzistentnosti dijeljenih podataka. Dakle, promjena koju napravi jedan proces ne mora se nužno odraziti kada drugi procesi pristupaju istim dijeljenim podacima. Kako bi se izbjegla ova vrsta nekonzistentnosti podataka, procesi moraju biti međusobno sinkronizirani.
Kako Proces Synckronizacija radi?
Na primjer, proces A mijenja podatke u memorijskoj lokaciji dok drugi proces B pokušava pročitati podatke iz isti memorijsko mjesto. Postoji velika vjerojatnost da će podaci koje očitava drugi proces biti pogrešni.
Odjeljci programa
Evo četiri bitna elementa kritičnog dijela:
- Ulazni dio: To je dio procesa koji odlučuje o ulasku u određeni proces.
- Kritični odjeljak: Ovaj dio omogućuje jednom procesu unos i izmjenu zajedničke varijable.
- Izlaz iz odjeljka: Izlazni dio omogućuje drugim procesima koji čekaju u ulaznom dijelu da uđu u kritični dio. Također provjerava treba li proces koji je završio izvršavanje ukloniti putem ovog dijela.
- Preostali dio: Svi ostali dijelovi Code, koji se ne nalaze u kritičnom, ulaznom i izlaznom dijelu, poznati su kao preostali dio.
Što je problem kritičnog odjeljka?
Kritični dio je segment koda kojem jedan proces može pristupiti u određenom trenutku. Dio se sastoji od zajedničkih podatkovnih resursa kojima drugi procesi moraju pristupiti.
- Ulazom u kritični odjeljak upravlja funkcija wait(), a predstavljena je kao P().
- Izlaz iz kritične sekcije kontrolira funkcija signal(), predstavljena kao V().
U kritičnom dijelu može se izvršiti samo jedan proces. Ostali procesi, koji čekaju da izvrše svoj kritični dio, trebaju čekati dok trenutni proces ne završi svoje izvršenje.
Pravila za kritični odjeljak
Kritični dio mora provoditi sva tri pravila:
- Međusobno isključivanje: Međusobno isključivanje je posebna vrsta binarnog semafora koji se koristi za kontrolu pristupa dijeljenom resursu. Uključuje mehanizam nasljeđivanja prioriteta kako bi se izbjegli problemi proširene inverzije prioriteta. U svom kritičnom odjeljku istovremeno se ne može izvršiti više od jednog procesa.
- Napredak: Ovo rješenje se koristi kada nitko nije u kritičnoj sekciji, a netko želi ući. Tada bi ti procesi koji nisu u svojoj preostaloj sekciji trebali odlučiti tko bi trebao ući, u konačnom vremenu.
- Vezano čekanje: Kada proces zatraži ulazak u kritičnu sekciju, postoji određeno ograničenje broja procesa koji mogu ući u njihovu kritičnu sekciju. Dakle, kada se dostigne ograničenje, sustav mora dopustiti zahtjev procesu da uđe u njegovu kritičnu sekciju.
Rješenja za kritični dio
U procesu Synckronizacija, kritični dio igra glavnu ulogu tako da se problem mora riješiti.
Ovdje su neke široko korištene metode za rješavanje problema kritičnog presjeka.
Petersonovo rješenje
Petersonovo rješenje je široko korišteno rješenje za probleme kritičnog presjeka. Ovaj algoritam razvio je računalni znanstvenik Peterson, zbog čega se i naziva Petersonovo rješenje.
U ovom rješenju, kada se proces izvršava u kritičnom stanju, tada drugi proces izvršava samo ostatak koda, a može se dogoditi suprotno. Ova metoda također pomaže osigurati da se samo jedan proces izvodi u kritičnom odjeljku u određeno vrijeme.
Primjer
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
- Pretpostavimo da postoji N procesa (P1, P2, ... PN) i svaki proces u nekom trenutku mora ući u kritičnu sekciju.
- Održava se niz FLAG[] veličine N koji je prema zadanim postavkama netočan (false). Dakle, kad god proces treba ući u kritičnu sekciju, mora postaviti svoju zastavicu na istinitu (true). Na primjer, ako Pi želi ući, postavit će FLAG[i]=TRUE.
- Druga varijabla nazvana TURN označava broj procesa koji trenutno čeka na ulazak u CS.
- Proces koji uđe u kritični odjeljak dok izlazi iz njega promijenio bi TURN na drugi broj s popisa spremnih procesa.
- Primjer: okret je 2, tada P2 ulazi u kritični dio i pri izlasku okret=3 i stoga P3 izlazi iz petlje čekanja.
Synchronizacija Hardver
Ponekad se problemi Kritične sekcije rješavaju i hardverom. Neki operativni sustavi nude funkcionalnost zaključavanja gdje proces dobiva zaključavanje pri ulasku u Kritičnu sekciju i otključava ga nakon što ga napusti.
Dakle, kada drugi proces pokušava ući u kritični odjeljak, neće moći ući jer je zaključan. To može učiniti samo ako je slobodan stjecanjem same brave.
Mutex brave
SyncKronizacija hardvera nije jednostavna metoda za implementaciju za svakoga, pa je uvedena i stroga softverska metoda poznata kao Mutex Locks.
U ovom pristupu, u ulaznom dijelu koda, dobiva se LOCK nad kritičnim resursima koji se koriste unutar kritičnog odjeljka. U izlaznom dijelu ta je brava otpuštena.
Semaphore Riješenje
Semaphore je jednostavno varijabla koja je nenegativna i dijeljena između niti. To je još jedan algoritam ili rješenje problema kritične sekcije. To je mehanizam signalizacije, a nit koja čeka na semafor može biti signalizirana od strane druge niti.
Koristi dvije atomske operacije: 1) čekanje i 2) signal za sinkronizaciju procesa.
Primjer
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


