Kritična sekcija

Download Report

Transcript Kritična sekcija

Visoka poslovno-tehnička škola Užice
OPERATIVNI SISTEMI
SINHRONIZACIJA I KOMUNIKACIJA
IZMEĐU PROCESA
Pojam procesa - podsećanje



2/36
Program – datoteka (fajl) na disku
Datoteka u memoriji - proces
Proces (process) je program ili deo programa u stanju
izvršavanja nad datim podacima.
– program: statičan zapis instrukcija
– proces: jedno izvršavanje (instanca) datog programa
za dati skup podataka – sa jednim adresnim
prostorom
– moguće je kreirati više procesa nad istim
programom, svaki radi nad svojim podacima – svaki
ima svoj adresni prostor
Operacije nad procesima – podsećanje




3/36
Kreiranje procesa: roditeljski (parent) proces kreira procesdete (child) sistemskim pozivom
Varijante dozvoljavanja korišćenja resursa:
– proces-dete može da traži bilo koji resurs od OS
– proces-dete može da koristi samo podskup resursa
roditelja
Varijante izvršavanja:
– kada kreira potomka, roditeljski proces se suspenduje
(zaustavlja izvršavanje) sve dok se svi potomci ne
završe
– kada kreira potomka, roditeljski proces nastavlja
izvršavanje uporedo sa svojim potomcima
Varijante formiranja adresnog prostora:
– potomak dobija kopiju adresnog prostora (RAM) roditelja
– “kloniranje”
– potomak ima nezavisan program i (novi, prazan) adresni
prostor (RAM)
Podela procesa



4/36
Procesi mogu biti međusobno:
– nezavisni, izolovani - nema interakcije i/ili razmene
informacija između njih, procesi se izvršavaju uporedo
i nezavisno
– kooperativni - procesi moraju da dele resurse (npr.
memorija) računarskog sistema – procesi moraju da se
sinhronizuju
U višeprocesnom OS izolovanih procesa praktično nema
– svi oni dele resurse sistema (memoriju, fajlove, I/O
uređaje)
Razlozi za postojanje kooperativnih procesa:
– smanjiti troškove deobom resursa (jedan računar, više
poslova; jedan autoput, mnogo vozila; jedna učionica,
mnogo časova) i
– procesi zahtevaju informacije od drugih procesa da bi
izvršili svoj zadatak.
Kooperativni procesi




5/36
Međutim, konkurentnost i deljenje resursa uzrokuju
probleme; npr. jedna železnička pruga - vozovi idu u
susret
Nezavisni procesi: rezultat izvršavanja procesa ne zavisi
od redosleda izvršavanja i preplitanja sa drugim
nezavisnim procesima – ne zavisi od raspoređivanja
procesa
Procesi koji dele podatke: rezultat izvršavanja zavisi od
redosleda izvršavanja i preplitanja – zavisi od
raspoređivanja procesa. Problem: uočavanje i
ispravljanje grešaka veoma teško
Osnovni postulat konkurentnog programiranja: rezultat
(logička ispravnost) programa ne sme da zavisi od
redosleda izvršavanja i preplitanja, tj. od raspoređivanja
procesa
Kooperativni procesi

Primeri:
– editor, prevodilac i linker
Editor
Compiler
X.cpp
X.obj
Linker
Z.obj
• Web server:
Client Process
Client Process
Client Process
Y.obj
Server Process
Server Process
Server Process
HTML
Files
• korisnički proces i proces koji upravlja nekim izlaznim
uređajem:
User Process
6/36
Buffer
Device Driver
Device
Mehanizmi interakcije


7/36
Vrste interakcija (veza) između procesa:
– komunikacija (communication): razmena informacija
između procesa
– sinhronizacija (synchronization): zadovoljavanje
ograničenja u pogledu preplitanja akcija različitih
procesa (npr. neka akcija jednog procesa mora da se
dogodi pre neke akcije drugog procesa i sl.);
simultano dovođenje više procesa u predefinisano
stanje
Ovi pojmovi su povezani jer:
– neki mehanizmi komunikacije podrazumevaju
prethodnu sinhronizaciju
– sinhronizacija se može smatrati komunikacijom bez
razmene sadržaja
Struktura OS – poređenje podsećanje
8/36
Windows XP arhitektura - podsećanje
Win 32-bit
App
Win 32-bit
App
Win 32-bit
App
Win 32-bit
App
Win32
Subsytem
(Win32 API)
User Mode
Kernel Mode
Executive Services
I/O
Manager
Security
Reference
Monitor
IPC
Manager
Virtual
Memory
Manager
Process
Manager
Plug and
Play
Manager
Object Manager
File
Systems
Device Drivers
Microkernel
Hardware Abstraction Layer (HAL)
Computer Hardware
9/36
Power
Manager
Window
Manager
and GDI
Graphics
Device
Drivers
Mehanizmi interakcije - komunikacija
Modeli međuprocesne komunikacije procesa (Inter Process
Communication, IPC):
– deljena promenljiva (shared variable): objekat kome može
pristupati više procesa; komunikacija se obavlja razmenom
informacija preko deljene promenljive ili deljenih podataka
(shared data)
– razmena poruka (message passing): eksplicitna razmena
informacija između procesa u vidu poruka koje putuju od
jednog do drugog procesa preko nekog posrednika
 Model komunikacije je stvar izbora – ne implicira način
implementacije:
– deljene promenljive je lako implementirati na multiprocesorima sa zajedničkom memorijom, ali se mogu (teže)
implementirati i na distribuiranim sistemima
– razmena poruka se može implementirati i na distribuiranim
sistemima i na multiprocesorima sa deljenom memorijom
– ista aplikacija se može isprogramirati korišćenjem oba
modela, ali je po pravilu neki model pogodniji za neku vrstu
aplikacije
10/36

Mehanizmi interakcije - komunikacija
Implementacija na
sistemu za deljenom
memorijom
Process A
Sistemska
usluga (poziv):
slanje poruke
Procesi koji nemaju isti
adresni prostor – IPC
kao usluga OS-a:
Process A M
Shared Mem
Process B
Kernel
11/36
Sistemska usluga
(poziv): prijem
poruke
Sistemska usluga
(poziv): obezbediti
preslikavanje dela
adresnog prostora dva
procesa u istu deljenu
memoriju
Process B
Kernel
M
M
Mehanizmi interakcije - sihronizacija
1.
2.
3.
4.
5.

12/36
Imamo dva procesa, P0 i P1. Žele privremeno da
sačuvaju neku vrednost. Odvijanje događaja:
P0 proverava da li je memorijska lokacija A slobodna.
Slobodna je. P0 je obavešten da je lokacija A slobodna;
P1 proverava da li je memorijska lokacija A slobodna.
Slobodna je. P1 je obavešten da je lokacija A slobodna;
Proces P0 upisuje podatak na lokaciju A;
Proces P1 upisuje svoj podatak na lokaciju A;
Proces P0 čita podatak sa lokacije A – POGREŠAN.
OS mora da obezbedi mehanizme konkurentnog
(paralelnog) izvršavanja procesa.
Osnovni postulat konkurentnog programiranja: rezultat
(logička ispravnost) programa ne sme da zavisi od
redosleda izvršavanja i preplitanja, tj. od raspoređivanja
procesa
Mehanizmi interakcije - sihronizacija




13/36
Ukoliko više procesa pristupa istim podacima i
modifikuje ih konkurentno (paralelno) krajnja vrednost
zajedničkih podataka zavisi od sekvence (redosleda)
instrukcija procesa koje tim podacima pristupaju –
stanje trke.
Krajnji rezultat se ne zna
Obezbediti mehanizam sihronizacije – pristup
zajedničkom resursu omogućiti isključivo jednom od
konkurentnih procesa u jednom trenutku
Kako se obezbeđuje – kritična serkcija
Realizacija – Kritična sekcija




14/36
je deo koda (redosled naredbi) procesa (program ili deo
programa u stanju izvršavanja) gde se pristupa
zajedničkim podacima (memorijske promenljive, tabele,
datoteke) ili ih modifikuje.
To je deo koda procesa koji se mora izvršiti nedeljivo u
odnosu na druge delove koda samog procesa tako i
koda drugih procesa.
OS dozvoljava samo jednom procesu da bude u
svojoj kritičnoj sekciji
Realizacija:
softverski (programer), hardverski, tehnika semafora,
operativni sistem i višim programskim strukturama za
sihronizaciju
Kritična sekcija – softverska realizacija




15/36
Bez pomoći OS. Pretpostavke softverskog rešenja
kritične sekcije su:
u jednom trenutku može biti isključivo jedan proces u
kritičnoj sekciji – međusobno isključenje
proces koji je izvan svoje kritične sekcije NE sme sprečiti
druge procese da uđu u svoju kritičnu sekciju (isključivo
proces koji je u okviru svoje kritične sekcije može
sprečiti ostale procese da uđu u svoju kritičnu sekciju).
proces NE sme neograničeno dugo čekati da uđe u
svoju kritičnu sekciju.
proces NE sme neograničeno dugo ostati u svojoj
kritičnoj sekciji
Kritična sekcija – softverska realizacija


Algoritam striktne alternacije
Dva konkurentna procesa P0 i P1 i zajednička promenljiva A
Vrednost zajedničke promenljive A određuje koji proces
može da uđe u kritičnu sekciju. Samo onaj proces čija je
vrednost indeksa procesa jednaka vrednosti promenljive A
može ući u svoju kritičnu sekciju (za P0 je 0, za P1 je 1).
Proces P0
Proces P1
do {
do {
while (A == 0) // ulazna sekcija
while (A == 1) // ulazna sekcija
{
/* kritična sekcija */
}
A=1;
// izlazna sekcija
/* ostatak koda */
} while (1) ;
16/36
{
/* kritična sekcija */
}
A=0;
// izlazna sekcija
/* ostatak koda */
} while (0) ;
Kritična sekcija – softverska realizacija




17/36
Algoritam striktne alternacije - nedostaci
Striktna alternacija procesa: P0 -> P1 -> P0 -> P1 -> P0
...
Stalno se proverava vrednost promenljive A – troši se
procesorsko vreme
Primer dva procesa: jedan brz, drugi spor. Brzi proces
čeka na ulazak u kritičnu sekciju dok spori proces ne
završi svoju kritičnu sekciju.
Rešenje: Algoritam ulaska u kritičnu sekciju bez
striktne alternacije
Uvodi se binarna promenljiva flag za svaki proces
ponaosob:
– flag = 1
Proces želi da uđe u svoju kritičnu
sekciju
– flag = 0
Proces NE želi da uđe u svoju
kritičnu sekciju
Kritična sekcija – softverska realizacija

18/36
Algoritam ulaska u kritičnu sekciju bez striktne
alternacije
Nedostatak – mogući scenario (redosled događaja):
– Proces P0 postavlja flag[0]=1, kontrola se predaje P1
– Proces P1 postavlja flag[1]=1 i
– Procesi P0 i P1 ulaze u beskonačnu petlju.
Loše rešenje.
Dobro rešenje je kombinacija prethodna dva algoritma.
Kritična sekcija – softverska realizacija



19/36
Dekker-Petersonov algoritam
Promenljive flag i turn za svaki proces ponaosob.
Promenljiva turn određuje proces koji ima prednost
ulaska u kritičnu sekciju i time obezveđuje mehanizam
međusobnog isključenja
Proces P0 postavlja vrednosti:
– flag[0] = 1
Proces P0 želi da uđe u svoju
kritičnu sekciju
– turn = 1
Proces P0 daje šansu P1 da uđe u
kritičnu sekciju – proces P1 ima prednost
Proces P1:
– ako promenljive flag i turn imaju vrednosti flag[1] = 1 i
turn = 1, ulazi u kritičnu sekciju
– ako promenljive flag i turn NEmaju vrednosti flag[1] = 1
i turn = 1, NE ulazi u kritičnu sekciju
Kritična sekcija – softverska realizacija




20/36
Algoritmi su data za dva procesa P0 i P1. Realno N
procesa
Pekarski algoritam – poštovanje reda, čime se
sprečava haos.
Pekarski algoritam
Svaki kupac u pekari dobije broj, pekar uslužuje kupce
redom
Svaki proces dobije broj. Pravila algoritma:
– generiše se sekvenca brojeva u rastućem redosledu i
dodeljuje procesima (1,2,3,3,3,4,4,5,6 ...)
– proces sa najnižim dodeljenim brojem ulazi u kritičnu
sekciju
– ako dva procesa imaju iste dodeljene brojeve, proces
sa manjim ID (ID – jedinstveni identifikator procesa
unutar OS) ulazi u kritičnu sekciju
Realizacija – Kritična sekcija




21/36
je deo koda (redosled naredbi) procesa (program ili deo
programa u stanju izvršavanja) gde se pristupa
zajedničkim podacima (memorijske promenljive, tabele,
datoteke) ili ih modifikuje.
To je deo koda procesa koji se mora izvršiti nedeljivo u
odnosu na druge delove koda samog procesa tako i
koda drugih procesa.
OS dozvoljava samo jednom procesu da bude u
svojoj kritičnoj sekciji
Realizacija:
softverski (programer), hardverski, tehnika semafora,
operativni sistem i višim programskim strukturama za
sihronizaciju
Kritična sekcija – hardverska realizacija



22/36
Hardverska implementacija – procesorska instrukcija koja
je nedeljiva (atomičan način izvršavanja) – ne može se
prekinuti tokom izvršavanja.
Naredba TestAndSet (lock): proces može da pročita
vrednost promenljive lock (0 – dozvoljen, 1 – NIJE
dozvoljen ulazak u kritičnu sekciju) i postavlja vrednost
promenljive lock na 1
Promenljivoj lock se inicijalno dedeljuje vrednost 0.
PRVI proces (npr. P5) koji želi da uđe u kritičnu sekciju
naredbom TestAndSet (lock) proverava vrednost
promenljive lock i ako je 0, postavlja vrednost lock = 1.
Drugi procesi ne mogu ući u kritičnu sekciju (lock = 1) sve
dok P5 ne izađe iz kritične sekcije i postavi vrednost
promenljivoj lock = 0.
Kritična sekcija – tehnika semafora



23/36
Jednostavan koncept, moguće primeniti na kompleksnije
slučajeve (N procesa) i poseduje mehanizam za
programiranje međusobnog isključenja i sinhronizaciju
aktivnosti procesa.
Semafor je celobrojna nenegativna promenljiva koja štiti
neki resurs.
Vrednost semafora S=0 => resurs zauzet
Vrednost semafora S>0 => resurs slobodan
Svaki semafor ima svoju početnu vrednost i mogu se
izvršiti samo dve nedeljive operacije (primitive): signal (s)
i wait (s)
– signal i wait se NE mogu podeliti u više ciklusa
– dva ili više procesa NE mogu istovremeno izvršavati
ove operacije nad ISTIM semaforom
Dijagram stanja procesa





START – nastanak, formiranje procesa
RUN – procesor izvršava proces
READY – proces ima sve resurse, čeka na procesor
WAIT – proces čeka na resurs
STOP – kraj procesa
STOP
RUN
START
24/36
READY
WAIT
Kritična sekcija – tehnika semafora

25/36
Funkcije operacija signal (s) i wait (s) :
– wait(S):
vrednost semafora S>0 (resurs slobodan) i vrednost S
se umanjuje za jedan;
vrednost semafora S=0 (resurs zauzet) proces mora
da čeka sve dok S ne postane veće od nule i tada se
vrednost semafora S umanjuje za jedan
– signal(S): vrednost semafora se uvećava za jedan
Kritična sekcija – tehnika semafora

Primer - binarni semafor mutex čija je inicijalna
vrednost 1
semaphore mutex;
/* inicijalno mutex=1 */
do {
wait(mutex) ;
/* kritična sekcija */
signal(mutex) ;
/* ostatak koda */
} while (1) ;
26/36
Realizacija – Kritična sekcija




27/36
je deo koda (redosled naredbi) procesa (program ili deo
programa u stanju izvršavanja) gde se pristupa
zajedničkim podacima (memorijske promenljive, tabele,
datoteke) ili ih modifikuje.
To je deo koda procesa koji se mora izvršiti nedeljivo u
odnosu na druge delove koda samog procesa tako i
koda drugih procesa.
OS dozvoljava samo jednom procesu da bude u
svojoj kritičnoj sekciji
Realizacija:
softverski (programer), hardverski, tehnika semafora,
operativni sistem i višim programskim strukturama za
sihronizaciju
Kritična sekcija – realizacija pomoću OS

28/36
Nedostaci softverske i hardverske realizacije zaštite
kritične sekcije semaforima su:
– ignorisanje prioriteta procesa – proces najvišeg
prioriteta ulazi u kritičnu sekciju posle mnoštva manje
prioritetnih procesa.
– proces može biti zauzet čekanjem, proverava
vrednost neke promenljive kako bi saznao da li može
da uđe u svoju kritičnu sekciju – ne radi ništa korisno
a troši procesorske vreme.
Kritična sekcija – realizacija pomoću OS
Rešenje:
 za svaki semafor (resurs) uvesti red čekanja –
semaforski red.
 svi procesi koji izvršavaju operaciju wait nad semaforom
i ako je vrednost semafora S<=0, pomoću sistemskog
poziva sleep se blokiraju i prevode u semaforski red (red
za resurs).
 procesor se oslobađa i predaje nekom drugom procesu
da radi nešto korisno.
 proces nastavlja svoje izvršenje nakon sistemskog
poziva wakeup koji ukida blokadu procesa. Blokada se
ukida ako je proces prvi u semaforskom redu ili ima
najviši prioritet u semaforskom redu.
29/36
Kritična sekcija – realizacija pomoću OS


30/36
Vrednost semafora S može biti:
– S > 0 => resurs slobodan
– S = 0 => resurs je zauzet, semaforski red prazan
– S < 0 => resurs je zauzet, semaforski red NIJE
prazan (postoje procesi koji čekaju na resurs)
Vrste semafora: binarni (mogu imati samo vrednost 0 ili
1) i brojački (celobrojna vrednost). Brojački su teži za
implementaciju.
Upotreba semafora







31/36
Za mnoge primene (npr. međusobno isključenje) dovoljni
su binarni semafori: najveća vrednost mu je 1
Operacija wait blokira proces ako je semafor 0, odnosno
postavlja semafor na 0 ako je bio 1
Operacija signal deblokira proces ako čeka, a postavlja
semafor na 1 ako ga nema
Ponegde se binarni semafor naziva i događaj (event) –
samo signalizira da se neki događaj desio (logička,
Bulova vrednost, desio se ili ne)
U mnogim sistemima na događaj može čekati samo
jedan proces (“vlasnik” događaja) i samo on može vršiti
wait; signal može uraditi bilo koji proces
Neki sistemi podržavaju kombinovano čekanje na više
događaja po uslovu “i” i “ili”
Posebno pogodni za čekanje na spoljašnje događaje koji
se signaliziraju iz prekidne rutine: završena I/O operacija,
isteklo vreme suspenzije procesa. Zato su veoma
osetljivi za implementaciju
Upotreba semafora


32/36
Pogodnosti semafora:
– jednostavan i efikasan koncept
– generalan koncept niskog nivoa – pomoću njega se
mogu implementirati mnogi drugi, apstraktniji koncepti
za sinhronizaciju
Loše strane semafora:
– suviše jednostavan koncept niskog nivoa – nije
logički povezan sa konceptima bližim domenu
problema (resurs, kritična sekcija, ...)
– kod složenijih programa lako postaje glomazan,
nepregledan, težak za razumevanje, proveru i
održavanje jer su operacije nad semaforima rasute
– podložan je greškama – mora se paziti na uparenost i
redosled operacija wait i signal
Kritična sekcija –
više programske strukture za sihronizaciju




33/36
Kritični region zahteva promenljivu koja je zajednička
za veći broj procesa i njoj se može pristupiti samo unutar
kritičnog regiona.
Kritični region štite od grubih, nehotičnih programerskih
grešaka u sihronizaciji
Monitori omogućavaju programeru da svaki resurs
posmatra kao objekat.
Monitor se sastoji od:
– promenljivih koje opisuju resurs (njihove vrednosti
definišu resurs)
– skupa procedura i funkcija kojima se pristupa objektu
(promenljivima monitora)
– dela programskog koda koji inicijalizuje objeka i koji
se izvršava samo jednom, prilikom stvaranja objekta
Kritična sekcija –
više programske strukture za sihronizaciju

Jezici koji podržavaju monitore: Modula 1, Concurrent
Pascal, Mesa, Ada, Java, C#
monitor ime_monitora {
/* deklaracija deljenih promenljivih */
P1 ( ... ) { /* definicija procedure/funkcije P1 */ }
P2 ( ... ) { /* definicija procedure/funkcije P2 */ }
...
Pn ( ... ) { /* definicija procedure/funkcije Pn */ }
{
34/36
/* inicijalizacija monitora */
}
}
Zastoj



35/36
U višeprocesnom okruženju, više procesa sa takmiči za
konačan broj resursa. Kad proces zahteva resurs i
resurs nije raspoloživ, proces ulazi u stanje čekanja
(WAIT) i blokira se. Blokirani proces može ostati zauvek
u tom stanju ukoliko potreban resurs ostane
neraspoloživ.
Resurs je prethodno dodeljen drugom procesu na
korišćenje. Drugi proces prešao u stanje čekanja jer mu
je potreban još jedan resurs koji mu nije raspoloživ.
Ove situacije se zovu ZASTOJ.
Zastoj

36/36
Zastoj se rešava na tri načina:
– prevencijom ili izbegavanjem zastoja (koriste se
metode da sistem nikada NE uđe u stanje zastoja)
– detekcijom i oporavkom (koriste se metode koje
dozvoljavaju sistemu da uđe u stanje zastoja, to
stanje se detektuje i oporavlja sistem)
– ignorisanje problema zastoja (pretvaraju se da
problem zastoja ne postoji)