You are on page 1of 14

II Upravljanje procesima

Šta ćemo učiti


° Koncepcija procesa
° Operacije nad procesima
° Odnosi među procesima
° Komunikacija između procesa

Koncepcija procesa
Operativni sistemi izvršavaju različite programe: u sistemima sa paketnom obradom to su poslovi (jobs), a
u sistemima sa razdeljenim vremenom – korisnički programi ili zadaci (tasks).
Program je fajl koji sadrži nizove naredbi mašinskog jezika (koji se može izvršavati na
posmatranom procesoru) i eventualno podataka. Kao takav on je opisan samo svojim sadržajem i ima
statičku strukturu.
Proces (ili task) je dinamičke prirode. To je objekat multiprogramiranja i predstavlja program kome
je pridodata posebna struktura podataka koje se naziva kontrolni blok procesa PCB (Process Control
Block) ili PD - deskriptor procesa.
Posao (job) je objekat paketne obrade i obuhvata niz naredbi kontrolno-upravljačkog jezika,
programa i podataka za te programe. Njegova obrada se odvija sekvencijalno, tako što se izvršava niz
naredbi koji pokreće odgovarajuće programe.
Ovo su samo neke od mogućih definicija za program, proces i posao. Jednostavno rečeno, program
je pasivan objekat, to jest datoteka na disku. Kada se program učita u memoriju, postaje proces, tj. aktivan
objekat koji ima svoje resurse poput procesorskih registara i memorije.
Svaki proces ima tri fundamentalna memorijska dela: oblast koda u kojoj se čuvaju instrukcije
programa, oblast podataka u kojoj se čuvaju globalne promenljive i oblast steka u kojoj se čuvaju
privremeni podaci poput parametara potprograma, adrese povratka i lokalne promenljive. Osim memorije
proces koristi i procesorske registre poput brojača naredbi, ulazno izlazne resurse poput datoteka i raznih
ulazno izlaznih uređaja. Deo procesa su i podaci koji ga opisuju, to jest podaci koji su neophodni za
upravljanje procesom. Ove podatke generiše i koristi operativni sistem. Kontrolni blok procesa (PCB)
sadrži sledeće podatke:
• ime procesa
• ID (jedinstvena oznaka procesa u sistemu)
• stanje procesa (da li se izvršava ili stoji - videti stanja procesa)
• prioritet
• pointere za povezivanje u liste (u UNIX-u su to tablice),
• područje gde se pamti kontekst procesa...

Kontekst procesa
Kontekst procesa podrazumeva skup podataka neophodnih za nastavljanje procesa pošto ponovo
dobije CPU. To znači da se kontekst procesa pamti u trenutku kad proces gubi CPU. Kontekst procesa
obuhvata sem konteksta programa (skupa podataka koji se pamti pri prekidu programa) još i niz drugih
podataka neophodnih za multiprogramski, tj. multiprocesni rad (tu spadaju razni registri ili pointeri na stek
gde se to pamti). Takođe, sadrži i podatke poput toga gde je u memoriji, gde na disku...
Jedan isti program može se pojaviti u više procesa (npr. editor poput EDT na VAX/VMSu ili ed na
UNIXu). Pored toga, jedan program se može razbiti na više procesa (više delova i za svaki se formira
proces). Takvi procesi, tj. programi su međusobno zavisni i moraju jedan drugog sačekivati, ali čak i u
slučaju kad su procesi međusobno nezavisni (jer pripadaju različitim korisnicima) moraju se sačekivati pri
pristupu resursima sistema (zajedničkim strukturama podataka, I/O uređajima...). Iz prethodnog sledi da je
neophodna sinhronizacija procesa.

10
“Laki” i “teški” procesi
Postoje dva glavna tipa procesa u svetu multitaskinga - threads ili “laki” procesi i “teški” procesi.
Ova dva tipa procesa razlikuju se uglavnom po načinu kako upravljaju memorijom.
U više verzija OS UNIX najmanja jedinica izvršavanja je task ili process. Mehanizam raspodele
poslova OS omogućava predaju upravljanja između taskova. Multitasking se izvršava između dva ili više
procesa. Ako neka aplikacija treba da izvrši više funkcija simultano, deli se u više procesa (npr.
korišćenjem UNIX fork sistemskog poziva). Svaki proces obezbeđuje resurse potrebne za izvršavanje
programa - ima virtualni adresni prostor, izvršni kôd, podatke, module za rukovanje objektima - hendlere,
environment promenljive, bazni prioritet, minimalnu i maksimalnu veličinu radnog prostora.
Nasuprot tome, u operativnim sistemima Windows osnovna jedinica izvršavanja je thread - nit ili
tok izvršavanja. Task ili proces sastoji se od jednog ili više thread-ova (jedan je main). Svaki od njih ima
različit stek i status mašine, ali svi thread-ovi istog procesa dele kôd i podatke u memoriji, pa prelazak sa
jednog na drugi thread oduzima manje sistemskog vremena nego prelazak sa jednog “teškog” procesa na
drugi.
Kontekst “lakog” procesa uključuje skup procesorskih registara, kernel stek, thread environment
blok i user stek u adresnom prostoru matičnog procesa.

Stanja procesa
Osnovna stanja procesa pokazana su na sl. 1.

OSNOVNA
STANJA

RUN STOP

START READY WAIT

Slika 1 - Osnovna stanja procesa

U stanju RUN se nalazi uvek samo jedan proces (onaj koji se trenutno izvršava - kome je dispečer
dodelio CPU). U stanjima READY i WAIT se može nalaziti više procesa. Iz stanja RUN u READY
proces prelazi po isteku kvanta vremena (tj. po prekidu od časovnika). Iz stanja RUN u WAIT proces
prelazi ako zatraži neki resurs koji je u tom trenutku zauzet (koji ne može da dobije) ili ako mora da
sačeka da mu neki drugi proces završi posao.
U složenijim OS se pojavljuju još dva stanja. Suspendovanje procesa podrazumeva prebacivanje iz
operativne memorije na eksternu. U OM ostaje samo PCB procesa. Prelazi iz jednog stanja u drugo su
predstavljeni na sl. 2.

11
OSNOVNA
STANJA

RUN STOP

START READY WAIT

SW-
SW-WAIT
READY

Slika 2 - Stanja procesa

Detaljnije o (svim) stanjima procesa. Procesi u stanjima READY, WAIT, SW-READY i SW-WAIT se
povezuju u liste ili stavljaju u tablice jer ih ima više. Prelazak iz stanja RUN u READY, WAIT ili SW-
READY znači gubitak CPU. Najjednostavniji slučaj u kome proces gubi CPU je kada istekne kvant vremena
(u tom slučaju neki tajmer generiše prekid). Po tom prekidu jedna procedura (program) jezgra OS prebacuje
proces iz stanja RUN u READY, po pravilu mu pri tom i snižava prioritet. Proces se stavlja u listu na mesto
koje mu po prioritetu pripada. Prelazak procesa iz RUN u WAIT opet znači gubitak CPU, ali iz drugačijeg
razloga. Proces traži neki resurs koji u tom trenutku ne može da dobije (npr. nekakvu zaštićenu strukturu
podataka ili traži I/O operaciju, a mora da čeka na njen završetak...). Treba napomenuti da ne mora uvek kad
traži I/O, proces da gubi CPU, tj. može nastaviti izvršavanje paralelno sa realizacijom I/O operacije.
Međutim, ako proces ne dobije obaveštenje da je I/O operacija završena u nekom vremenskom intervalu
moraće se blokirati da bi sačekao to obaveštenje. Proces može izgubiti CPU, tj. preći iz RUN u READY i u
slučaju dolaska procesa višeg prioriteta u red spremnih procesa. Tom događaju prethodi prekid čija je obrada
rezultirala dolaskom procesa (prioriteta višeg od tekućeg) u red spremnih (npr. iz reda blokiranih procesa
vraća se neki proces koji je čekao na događaj, pa prekid znači da se taj događaj desio). U zavisnosti od
značaja procesa koji je prispeo u red spremnih, koriste se dva rešenja: 1) vraćanje tekućeg procesa u red
spremnih i predaja upravljanja dispečeru kako bi se dala šansa prispelom procesu da odmah dobije CPU i 2)
ukoliko je tekući proces većeg prioriteta polazi se od činjenice da on nije kriv za nastali prekid i treba mu
omogućiti da nastavi rad do isteka kvanta vremena. Oduzimanje procesora procesu podrazumeva da se
kontekst procesa prebaci u njegov PCB. Dodeljivanje CPU procesu podrazumeva prepisivanje konteksta
procesa iz PCB u odgovarajuće registre. Sama predaja upravljanja procesu ostvaruje se u trenutku kada se iz
PCB prenosi sadržaj brojača naredbi koji je zapamćen kada je proces izgubio CPU, odnosno kada se taj
sadržaj upiše u PC (IP na i80x86). To se realizuje posebnom naredbom ili naredbom skoka s indirektnim
adresiranjem (JMP[a} gde je a adresa u PCB na kojoj se nalazi sadržaj PC). Proces gubi CPU i prelaskom iz
RUN u SW-READY. U tom slučaju proces vrši suspenziju (sam sebe suspenduje, odnosno traži da bude
prebačen na eksternu memoriju). Proces gubi CPU u još dva jednostavna slučaja: kad se dogodi neka greška
zbog koje ne može da nastavi rad ili kad završi sa radom. Iz stanja READY u RUN proces prelazi kada mu
dispečer dodeli CPU. Dispečer je uvek deo jezgra, tj. ne predstavlja poseban proces. Postoje različiti algoritmi
izbora kom procesu će se dodeliti CPU (opisani su u delu algoritmi planiranja).

Swapping (izbacivanje procesa iz OM i vraćanje) Iz READY u SW-READY proces prelazi kada neki
modul OS zadužen za to odluči da taj proces prebaci na eksternu memoriju da bi time rešio neke probleme

12
opterećenja sistema. Iz WAIT u READY proces prelazi kada se desi neki događaj na koji je čekao. Zavisno
od događaja, proces se vraća u red spremnih sa istim ili povećanim prioritetom. Prioritet se, po pravilu,
povećava procesima koji su čekali na završetak I/O operacije. S jedne strane, snižavanje prioriteta procesima
kojima istekne kvant vremena i, s druge strane, povećanje prioriteta procesima koji su čekali na I/O operacije
ima za cilj da pusti u paralelni rad što više I/O uređaja pošto se time povećava stepen multiprogramiranja. Iz
WAIT u SW-WAIT proces prelazi kada neki modul OS odluči da ga treba prebaciti na eksternu memoriju. To
je pasivan proces i drugi (iz OS) manipulišu njime. Iz SW-WAIT u SW-READY proces se prebacuje kad se
desio događaj koji je čekao, ali mu i dalje kôd ostaje na eksternoj memoriji (u OM je samo PCB). Prelazi SW-
READY u READY i SW-WAIT u WAIT nastaju kad modul OS odgovoran za to odluči da vrati proces u
OM.

Operacije nad procesima


Operativni sistem može da izvrši sledeće operacije nad procesima:
o kreiranje procesa
o uništavanje procesa
o izrada veza proces – proces roditelj
o promena stanja procesa
o promena prioriteta procesa.

Kreiranje procesa
Za svaki program odnosno posao OS kreira bar jedan proces. Međutim, u okviru tog procesa može
se realizovati niz radnji, npr. editovanje, prevođenje, povezivanje i izvršenje (za vreme kartica se radilo
slično tome). Povoljnije rešenje je da se navedene faze kreiraju kao posebni procesi, odnosno editovanje,
prevođenje, eventualno povezivanje i obavezno izvršenje. Svi prethodno pomenuti procesi su kreirani od
strane OS. Korisnik ne mora uopšte da zna da je za njegov program formiran bilo koji proces. Međutim,
za složenije programe se pokazuje da je izuzetno korisno da se razbiju na delove i da se za te delove
formiraju procesi. To razbijanje može vršiti samo programer (koji poznaje strukturu programa). Zbog toga
savremeni viši programski jezici imaju sredstva za kreiranje procesa koja stoje na raspolaganju
programeru (npr. funkcije CreateProcess, CreateThread u C++)
Proces u toku svog izvršavanja može, odgovaraqjućim sistemskim pozivom (npr. fork u UNIX-u),
da kreira nove procese. Proces koji proizvodi nove procese naziva se roditeljski proces (parent process),
dok se tako dobijeni proces naziva dete proces (child process) i može i sam da kreira svoje naslednike.
Tako nastaje stablo procesa. Odnosi proces roditelj – proces dete mogu se opisati na osnovu načina
deljenja resursa i načina izvršavanja.
Postoje sledeći načini deljenja resursa:
• Roditelji i deca procesi dele sve resurse
• Deca procesi dele podskup roditeljskih resursa
• Roditelji i deca ne dele resurse.
Kao što smo ranije rekli, svaki proces za svoj rad koristi različite resurse – procesorske registre,
memorijski prostor za kod, podatke i stek, datoteke i ulazno/izlazne uređaje. Specijalno je osetljiv
memorijski adresni prostor koji se između procesa roditelja i dece može raspodeljivati na sledeće načine:
• Dete duplikat roditelja
• Dete ima program učitan u sebe
Prema načinu izvršavanja, odnos između procesa roditelja i dece mogu biti sledeći:
• Roditelji i deca nezavisno i konkurentno rade
• Roditelji se blokiraju i čekaju da deca završe sa radom.

Završetak procesa
Proces završava svoju aktivnost kada izvrši poslednju instrukciju svog koda i traži od OS da ga
završi tako što mu upućuje sistemski poziv exit. Pri tome, proces dete može da vrati izlazne podatke
roditeljskom procesu preko sistmskog poziva wait Operativni sistem zatim dealocira resurse pridružene

13
procesu i tako proces na tzv.normalan način završava sa radom.
Proces se može završiti i nasilno. Procesi roditelji mogu da prekinu izvršavanje procesa dece koju
su kreirali korišćenjem sistemskog poziva abort iz jednog od sledećih razloga:
• Deca prevazilaze dodeljene resurse
• Task pridružen detetu više nije potreban
• Roditelji završavaju rad
Operativni sistemi ne dozvoljava detetu da nastavi sa radom, ako je roditelj završio i nasilno
uništavaju sve procese potomke što se naziva kaskadno završavanje (cascade termination).

Odnosi među procesima


Procesi mogu biti međusobno nezavisni ili zavisni. Ako se procesi izvršavaju uporedo i nezavisno onda
nema interakcije niti razmene informacija između njih, nasuprot kooperativnim procesima koji moraju da
razmenjuju informacije ili da se međusobno sinhronizuju - dele stanje (podatke). U multiprocesnom OS
izolovanih procesa praktično nema – svi oni dele resurse sistema (memoriju, fajlove, I/O uređaje)
Kod nezavisnih procesa rezultat izvršavanja procesa ne zavisi od redosleda izvršavanja i preplitanja
sa drugim nezavisnim procesima – ne zavisi od raspoređivanja. Kod procesa koji dele podatke rezultat
izvršavanja zavisi od redosleda izvršavanja i preplitanja – dakle, zavisi od raspoređivanja. Problemi koji
prate ovakav rad su: rezultat je nedeterminisan, uočavanje i ispravljanje grešaka je veoma teško, jer su one
često nereproducibilne.
Osnovni postulat konkurentnog programiranja je “Rezultat (logička ispravnost) programa ne sme
da zavisi od redosleda izvršavanja i preplitanja, tj. od raspoređivanja”.

Odnose među procesima koje ćemo analizirati možemo svrstati u tri osnovne grupe:
o međusobno isključenje procesa (mutual exclusion)
o sinhronizacija procesa (synchronization)
o uzajamno blokiranje - zastoj (deadlock)

Uzajamno delovanje procesa možemo predstaviti sledećom tabelom.

Uticaj koji proces ima Potencijalni problemi


Stepen “ svesnosti” Odnos na druge procese upravljanja
• rezultati jednog procesa • međusobno isključenje
Procesi nisu svesni nezavisni od akcije ostalih
postojanja drugih Nadmetanje • uzajamna blokada (resurs
procesa koji se može obnoviti)
procesa - konkurencija
• može uticati na vreme • gladovanje (proces koji je
izvršavanja procesa spreman za izvršanje nikada se
ne odabira )
• rezultati jednog procesa • međusobno isključenje
Procesi su indirektno Saradnja - mogu zavisiti od informacija
svesni postojanja drugih kooperacija • uzajamna blokada (resurs
dobijenih od ostalih procesa koji se može obnoviti)
procesa (npr. deljeni deljenjem
objekti) • može uticati na vreme • gladovanje
izvršavanja procesa
• povezanost podataka
• rezultati jednog procesa • uzajamna blokada (resurs
Procesi su direktno Saradnja - mogu zavisiti od informacija koji se može obnoviti)
svesni postojanja drugih kooperacija dobijenih od ostalih procesa
procesa (imaju na komunikacijom • gladovanje
raspolaganju osnovnu • može uticati na vreme
komunikaciju) izvršavanja procesa

14
Međusobno isključenje procesa
Međusobno isključenje procesa je takav odnos među procesima koji ne dopušta istovremeno
izvođenje dva procesa u pojedinim njihovim delovima (kritičnim sekcijama), dok se u ostalim delovima
procesi mogu bez problema uporedo izvršavati. U ovakav odnos dolaze nezavisni procesi koji treba da
koriste neki nedeljiv resurs, npr. datoteku ili područje u memoriji u koje oba mogu da upisuju podatke. Na
primer, pretpostavimo da procesi p1 i p2 rade u nekom sistemu za rezervaciju avionskih karata. Pri tome
bi rezervaciji karate odgovarao upis u neko memorijsko područje R. Onaj proces koji prvi dobije resurs R
mora izvršiti rezervaciju, odnosno upisati rezervaciju u području R, ili ako je neki proces već ranije izvršio
rezervaciju i upisao svoje podatke u područje R, proces mora odustati od rezervacije. Zbog toga, svaki
proces kada pristupi u područje R mora pre rezvisanja proveriti da li je područje slobodno i ako jeste,
upisati svoje podatke. Problem može nastati ako proveru da li je područje R slobodno proces izvrši nakon
što je istu proveru izvršio, a pre no što je izvršio rezervaciju neki drugi proces. Da bi se ovo sprečilo, od
trenutka kada neki proces P krene u proveru, mora se zabraniti pristup području R drugim procesima sve
dok proces P ne završi sa rezervacijom. Ovaj deo koda u kome neki proces koristi nedeljivi resurs naziva
se kritična sekcija. OS mora da poseduje mehanizam koji će vremenski uskladiti izvođenje procesa i pri
svakom korišćenju nedeljivog resursa provoditi međusobno isključivanje procesa. Ukoliko procesi
istovremeno ulaze u svje kritične sekcije treba takođe provesti međusobno isključenje, dakle propustiti
samo jedan proces (slika3).

Slika 3 – Kritična sekcija

Primer 2. Neka imamo dva procesa P1 i P2 koji pristupaju zajedničkoj promenljivoj X s tim što P1
uvećava X za A, a P2 za B (recimo obrada dve uplate na isti račun u nekoj banci). To se radi (na nivou
mašinskih naredbi) na sledeći način:
P1 P2
1) MOV AX,X 1’) MOV BX,X
2) ADD AX,A 2’) ADD BX,B
3) MOV X,AX 3’) MOV X,BX

U normalnim uslovima (sekvencijalno izvršavanje 1, 2, 3, 1’, 2’, 3’) treba na kraju da bude X
uvećano za A+B. Pretpostavimo, međutim, da zbog prekida i gubljenja CPU redosled izvršavanja bude 1,
1’, 2, 2’, 3, 3’. Sadržaj X će biti uvećan samo za B što je netačan rezultat. Deo programa u kojem nastaju
pokazane greške se naziva kritična sekcija. Jedno rešenje je da korisnik blokira prekide pre ulaska u
kritičnu sekciju (tada mu CPU ne može biti oduzet), ali nedostatak ovog rešenja je što bi se korisničkom
programu ostavila mogućnost da blokira prekide na neograničeno vreme. Zato se pristupa nekim drugim
rešenjima.

15
Semafori su osnovni mehanizam za sinhronizaciju procesa. To su celobrojne promenljive (mogu
imati i pozitivne i negativne vrednosti). Za manipulaciju semaforima se u okviru jezgra (kernela) OS
predviđaju dve primitive - operacije (P i V ili):
WAIT S
S:=S-1
if S<0
then Blokirati proces i predati upravljanje dispečeru
else Nastavlja rad proces koji je pozvao primitivu WAIT

SIGNAL S
S:=S+1
if S<=0
then Deblokirati jedan ili više procesa koji čekaju na semaforu.
Upravljanje se može predati dispečeru ili vratiti procesu
koji je pozvao primitivu SIGNAL.

S je jedna semaforska promenljiva (zajednička - ne za svaki proces). Negativno S govori koliko


procesa čeka (na tom semaforu). Inicijalna vrednost semafora je pozitivna i jednaka broju raspoloživih
resursa. Primitive WAIT i SIGNAL se moraju realizovati kao nedeljive, odnosno dok se one izvršavaju ne
smeju se dozvoliti prekidi (to se ostvaruje blokiranjem, odnosno maskiranjem prekida). Pošto su primitive
deo jezgra OS, trajanje blokiranja je pod kontrolom OS, a ne korisnika. Međutim, korisnik se ipak mora
pridržavati pravila koja će omogućiti deblokiranje procesa koji su blokirani na semaforu. To znači da na
semaforu na kojem je izvršena primitiva WAIT mora neko izvršiti primitivu SIGNAL. Kažemo neko jer
ne znači da će isti proces to uraditi. Postoji više semafora i WAIT i SIGNAL idu u paru: WAIT S1
<kritična sekcija> SIGNAL S2. Naravno, ako ne dođe SIGNAL, posle određenog vremena OS će
prekinuti proces.

Binarni semafor je poseban slučaj prethodno definisanog semafora koji ima samo vrednosti 0 i 1.
Alternativno kodiranje (vrednosti) semafora:
WAIT
if S<0
then S:=S-1
else Blokiraj proces i predaj upravljanje dispečeru
SIGNAL
if Spisak procesa koji čekaju nije prazan
then Deblokirati jedan ili više procesa i predati upravljanje dispečeru ili vratiti tekućem
procesu
else S:=S+1

TestAndSet naredba. Bolji procesori imaju TestAndSet naredbu koja u jednom koraku oduzme
jedan i proveri rezultat. To se koristi u multiprocesorskim sistemima da ne bi naišao prekid u tih par
instrukcija (kad bi se realizovalo preko više instrukcija), jer možemo blokirati prekide na svom CPU, ali
ne i na drugima. Poenta je da je izvršavanje jedne instrukcije nedeljiva operacija (jer se postojanje prekida
testira tek po završetku instrukcije). Za monoprocesorke sisteme je dovoljno blokirati prekide.

Sinhronizacija procesa
Uopšteno gledano, procesi unutar računarskog sistema teku asinhrono. Međutim, u pojedinim
slučajevima mogu postojati delovi procesa, pa i čitavi procesi čiji rad neophodno uskladiti. To
usklađivanje tokova dvaju ili više procesa međusobno nazivamo sinhronizacijom procesa. Sinhronizacija
procesa sastoji se u tome da se delovi procesa koji treba da budu sinhronizovani odvijaju prema
određenim pravilima, odnosno prema određenom redosledu. Taj redosled može biti od slučaja do slučaja
različit, pa imamo različite vidove sinhronizacije procesa.
Sinhronizacija nije jednoznačan odnos kao međusobno isključenje. Sledeća situacija predstavlja

16
jednostavan primer koji zahteva sinhronizaciju. Proces A ne sme proći instrukciju sa labelom L1 pre no
što proces B ne izvrši instrukciju sa labelom L2. Ako proces B prvi krene sa izvršavanjem, proces A će
raditi bez prekidanja, međutim ako sa izvršavanjem krene prvo proces A, on će do L1 stići pre no što
proces B izvrši L2. U tom slučaju, proces A se mora zaustaviti i čekati sve dok proces B ne izvrši L2.
(slika 4)

Slika 4 - Sinhronizacija procesa

Složeniji odnos koji vrlo često nastaje u računarskim sistemima a naziva se odnos proizvođač-
potrošač (producer-consumer) ili predajnik-prijemnik (sender-reciver) takođe spada u sinhronizaciju
procesora. Ciklički proces P sastoji se iz dva dela: u prvom “proizvodi” neku vrednost koju u drugoj
stavlja u međumemoriju (buffer). Proces C u svom prvom delu uzima vrednost iz međumemorije, a u
drugom je “troši”. Proces C je takođe ciklički proces, što znači da se neprestano ponavljaju ta dva osnovna
dela procesa. Bafer predstavlja mesto preko koga procesi P i C komuniciraju (slika 5). Ta komunikacija je
uvek jednosmerna od proizvođača prema potrošaču i odvija se prema određenim pravilima koja u stvari
regulišu sinhronizaciju ova dva procesa. Ta pravila se mogu ovako formulisati:
1) procesi ne mogu istovremeno pristupati baferu;
2) proces P ne može stavljati vrednosti u popunjen bafer;
3) proces C ne može uzimati vrednost iz praznog bafera.

Slika 5 - Sinhronizacija “proizvođač – potrošač”

17
Uzajmno blokiranje procesa - zastoj
Treća vrsta odnosa je tzv. deadlock - zastoj. Ovakav odnos je nepoželjan u sistemu i treba ga, ako je
moguće sprečiti ili, ako se dogodi, intervencijom operativnog sistema razrešiti. Do međusobnog blokiranja
dolazi zbog konkurisanja za resure računarskog sistema ili zbog čekanja na događaj koji ne može
nastupiti.
Pojavu deadlock-a je najlakše ilustrovati na primeru dva
procesa p1 i p2, pri čemu svaki od njih “drži” resurs potreban onom
drugom za nastavak izvršavanja. Ovakvu je situaciju najlakše
prikazati pomoću usmerenog grafa. Pri tom čvorovi predstavljaju
resurse, a lukovi grafa procese. U svakom čvoru upisan je broj
resursa, a pored njega vrsta resursa koju taj čvor predstavlja. Lukovi
grafa predstavljaju procese i to tako da izlaze iz onog čvora (resursa)
koji “drže”, a usmereni su rema čvoru koji “traže”. Na slici 6
prikazana je situacija sa dva međusobno blokirana procesa.
Situacija u računarskim sistemima je obično mnogo složenija.
Slika 6 - DEADLOCK Uopšteno se može reći da uzajmno blokiranje nastupa onda kada iz
svakog čvora izlazi onoliko grana koliko resursa dotični čvor ima i
kada su sve grane povezane tako da čine zatvorene petlje, bez obzira kojim putem pošli. Tako je na slici 7
prikazana nešto složenija situacija gde imamo i nešto više procesa i nešto više resursa. Tako npr. imamo
resurse vrste R2 kojih ima ukupno 3, a drže ih procesi P1 (jedan) i P2 (dva), proces P2 traži još jedan
resurs tipa R2, kao i tipa R2 i R3 itd.
Problemi vezani za zastoje u sistemu koji se
zasniva na paralelnosti procesa i njihovom
takmičenju za resurse vrlo su složeni. Postoje sledeći
pristupi rešavanja problema međusobnog blokiranja
procesa:
1) izbegavanje zastoja;
2) sprečavanje zastoja
3) otkrivanje zastoja;
4) zanemarivanje zastoja.

Izbegavanje zastoja sastoji se u tome da se od


procesa traži da unapred specifikuje sve resurse koji
će mu biti potrebni. Na osnovu specifikacije vrši se
ispitivanje može li doći do zastoja ako se resursi
dodele u situaciji koja tada postoji u sistemu. Proces
počinje sa izvođenjem jedino ako do zastoja ne može
doći. Ovakav način rešavanja problema deadlocka je
Slika 7 – Prikaz zastojne situacije pomoću grafa složen i nije ga moguće realizovati u svim
situacijama i sistemima.
Sprečavanje zastoja se sastoji u tome da se svi raspoloživi resursi numerišu u određenom
redosledu. Svaki proces mora tražiti resurse samo u rastućem redosledu njihovih rednih brojeva. Takvo
rešenje problema zastoja stavlja znatna ograničenja na sam proces, a to je u praktičnom radu teško
prihvatljivo.
Otkrivanje zastoja sastoji se u dinamičkom pronalaženju zastojnih situacija i zatim prekidanju
jednog ili više procesa koji se toj situaciji mogu naći. Moguće je i samo oduzimanje resursa jednom ili
više procesa. Takav se način dosta često koristi.
Zanemarivanje zastoja je najjednostavniji način za rešavanje dedlocka. Procesi se jednostavno
puštaju u zastoj i zatim se ponovo startuju kako bi vremenski došli u drukčiji međusobni odnos i tako na
drugi način zauzeli resurse, što pruža šansu da do zastoja neće doći. U praksi, međutim, može doći do
ponovnog zastoja i tada ova metoda ne pomaže.

18
Komunikacija između procesa
U osnovi postoje dva principa komunikacije: deljiva memorija (shared memory) i razmena poruka
(message passing).
Deljiva memorija često se koristi za komunikaciju između različitih delova istog programa, tj.
procesa. Međutim, može se koristiti i za različite procese, ali tu je problem sa adresnim prostorom
različitih programa. Pri korišćenju ovog načina za komunikaciju potrebno je samo definisati zajedničke
promenljive strukture podataka. Napomenimo da je skup bafera koji se koristi po principu
proizvođač/potrošač u suštini deljiva memorija.
Razmena poruka se na fizičkom nivou praktično svodi na deljivu memoriju, ali ovde govorimo o
logičkom nivou. Korisnik ima podršku od strane OS za realizaciju komunikacije (ne mora je realizovati na
najnižem nivou, kao kod proste deljive memorije). U jezgru OS se predviđaju dve primitive - operacije:
SEND(message) za slanje i RECEIVE(message) za primanje poruka. Pomoću ovih primitiva procesi
uspostavljaju međusobnu vezu (link). Fizički ta veza je deljiva memorija (common područje, shared
memory) ili telekomunikacioni kanal (za procese na različitim računarima ili na istom -višeprocesorskom,
ali na različitim procesorima). U drugom slučaju OS će pozvati komunikacioni sloj, a sve ostalo je isto -
gledano sa logičkog nivoa.
Razmena poruka podrazumeva rešavanje niza pitanja:
1) Kako se uspostavlja veza?
2) Može li se veza uspostaviti između više od dva procesa?
3) Koliko veza može postojati između svakog para procesa?
4) Postoji li bafer i koliki (tj. koliki je kapacitet veze)?
5) Koja je veličina poruka (mogu li se slati poruke promenljive dužine)?
6) Da li je veza jednosmerna (simplex) ili dvosmerna (duplex)?

Realizacija komunikacije
Postoji više metoda za realizaciju komunikacije:
1) direktna ili indirektna komunikacija;
2) slanje procesu ili u poštansko sanduče (mail box);
3) simetrična ili asimetrična komunikacija;
4) automatsko ili eksplicitno baferovanje;
5) slanje kopije ili samo reference (pointera);
6) fiksna ili promenljiva dužina poruka.

Direktna komunikacija
U slučaju direktne komunikacije direktive SEND i RECEIVE imaju oblik:
SEND(P,message) - slanje poruke (message) procesu P i
RECEIVE(Q,message) - prijem poruke (biće smestena u bafer message) od procesa Q.
Veza se uspostavlja između svakog para procesa koji žele da komuniciraju i po toj vezi mogu samo
oni da komuniciraju. Postoji samo jedna veza između para procesa, ali je ona bidirekciona. Mana ove veze
je što procesi moraju da se poznaju (P mora znati za Q i obrnuto). Problem proizvođača i potrošača se
može lako rešiti upotrebom ovih direktiva:

Producer: Consumer:
BEGIN BEGIN
... ...
Proizvodi stavku u nextp RECEIVE(Producer,nextc)
... ...
SEND(Consumer,nextp) Trosi stavku iz nextc
... ...
END END

19
Indirektna komunikacija
Predviđa se posebno područje gde jedan proces šalje ono što ima ne gledajući ko je to uzeo. Procesi
šalju poruke u poštanske sandučiće (mailboxes; ports). To su prosto imenovane promenljive. Procesi
mogu komunicirati samo ako imaju zajedničko poštansko sanduče. U ovom slučaju primitive imaju oblik:
SEND(A,message) - slanje poruke (message) u poštansko sanduče A
RECEIVE(A,message) - prijem poruke iz poštanskog sandučeta A.
Veza se može uspostaviti između više procesa. Između svakog para procesa može biti više veza, tj.
postojati više zajedničkih poštanskih sandučića. Takođe, veza može biti jednosmerna ili dvosmerna. Ako
proces P šalje poruku u mailbox A, a procesi Q i R primaju poruku postavlja se pitanje koji će je zaista
primiti. To se rešava na više načina: ograničiti uspostavljanje veze na samo dva procesa, dozvoliti da
najviše jedan proces u nekom trenutku izvršava operaciju RECEIVE ili dozvoliti da OS selektuje kojem će
od procesa Q ili R biti dopušteno da uzme poruku (ali samo jednom).

Baferovanje (kapacitet veze)


Pri realizaciji komunikacije mogu se razlikovati tri rešenja:
1) bez bafera (0 kapacitet veze) - proces koji šalje čeka da primalac primi poruku. Ovo se često
naziva randes-vouz.
2) bafer ograničenog kapaciteta (LCB) - pretpostavlja se da može biti poslato n poruka (npr. postoji
n sandučića ili 1 sandučić kapaciteta n poruka).
3) bafer neograničenog kapaciteta (ULCB) - pretpostavlja se da ne dolazi do zasićenja bafera, tj. da
je broj poruka uvek manji od kapaciteta bafera (npr. kao bafer služi cela raspoloživa memorija). Tipično
se primenjuje pri telekomunikacionim vezama.

Poruke
mogu biti fiksne dužine, promenljive dužine i tipizirane (typed) poruke. Kod fiksnih poruka, ako je
stvarna poruka kraća od onih koje se prenose, onda se proširi, a ako je duža, onda se podeli na više. Kod
tipiziranih poruka se šalju samo određene vrste poruke (integer, real...). U najjednostavnijem slučaju se
šalje kopija poruke. U slučaju kratkih poruka, ovo je najpovoljnije rešenje. Međutim, u slučaju velikih
poruka troši se dosta (CPU) vremena na prepisivanje poruke u sanduče i iz sandučeta u adresni prostor
primaoca (troši se memorija). Drugo rešenje je da se šalje samo adresa, odnosno pointer gde se poruka
nalazi. Nedostatak ovog rešenja je što pretpostavlja da će proces primalac pristupati adresnom prostoru
procesa pošiljaoca.

Ključni pojmovi
proces stanje spreman/suspendovan semafor
zadatak stanje blokiran/suspendovan sinhronizacija procesa
posao roditeljski proces uzajmno blokiranje -zastoj
kontekst procesa proces potomak (dete) gladovanje deljiva memorija
nit (thread) konkurentni procesi razmena poruka
stanja procesa nezavisni procesi direktna komunikacija
stanje spreman (ready) kooperativni procesi indirektna komunikacija
stanje izvršavanje (run) međusobno isključivanje baferovanje
stanje blokiran (wait) kritična sekcija poruke

Pitanja i zadaci za vežbu


1. Definišite pojmove program, zadatak (task) i posao (job).
2. Kako se može definisati pojam procesa? Zašto se obično navodi nekoliko definicija, odnosno
zašto nije jedna opšteprihvaćena?

- 20 -
3. Šta sve sadrži proces?
4. Koja su stanja procesa, nacrtati dijagram stanja procesa?
5. Šta je to PCB i koje informacije sadrži
6. Objasniti pojam niti u konteksu procesa. Razlozi za uvođenje niti, prednosti
7. Navedite nekoliko prednosti multithreading-a
8. Šta je zajedničko za niti unutar jednog procesa, a šta je unikatno
9. Osnovne opracije nad procesima?
10. Kreiranje procesa, veza roditelj/dete po pitanju deobe adresnog prostora
11. Završetak procesa, diskutovati dve vrste završetka procesa
12. Primer kooperacije na slučaju producer-consumer
13. Šta je to kritična sekcija, ko definiše CS?
14. Koja su pravila za CS?
15. Koje je generalno rešenje CS i kako se može realizovati CS?
16. Koja softverska rešenja postoje za CS i ko ih definiše?
17. Šta je to semafor i koje su operacije dozvoljene na semaforu?
18. Objasniti TestandSet(&target) naredbu, zašto je uvedena i čemu služi
19. Šta je to uzajamno blokiranje?
20. Koji su uslovi potrebni da bi se dogodio zastoj?
21. Navesti tri metode za upravljanje zastojima
22. Diskutovati prevenciju od zastoja
23. Diskutovati izbegavanje zastoja
24. Objasnite kako se sistem oporavlja od deadlocka
25. Komunikacija između procesa (IPC), šta je to i koje sve metode postoje
26. Kako procesi komuniciraju preko poruka?
27. Kako se ostvaruje direktna komunikacija između procesa?
28. Kako se ostvaruje indirektna komunikacija između procesa?
29. Koja rešenja vezana za kapacitet veze mogu da se primene pri realizaciji komunikacije?
30. Kakve mogu biti poruke u IPC message sistemu?

Testirajte svoje znanje

- 21 -
I Višestruki izbor - Zaokružite tačan odgovor
a1. Kad se proces ne izvršava, kontekst procesa
se čuva:
a) na magistrali
b) u registrima CPU
c) u PCB u operativnoj memoriji
d) u PCB na disku.
a2. U sistemu sa n procesora u stanju RUNNING
može biti:
a) samo jedan proces
b) ne više od n procesa
c) više od n procesa
d) nema ograničenja broja procesa
a3. Proces iz stanja RUN nakon isteka
vremenskog kvanta (time-slice) prelazi u stanje:
a) READY
b) WAIT
c) STOP
d) Ne menja stanje (ostaje u RUN)

a4. Proces prelazi iz stanja READY u stanje


WAIT:
a) po isteku vremenskog kvanta
b) kad traži I/O operaciju
c) po završetku zahtevane I/O operacije
d) kada mu dispečer dodeli CPU
e) nikad ne prelazi
a5. Dati su delovi tri procesa:
P1: P2: P3:
zahteva R1 zahteva R2 zahteva R2
zahteva R2 zahteva R3 zahteva R1
zahteva R3 ... zahteva R3
... ... ...
Koji se od datih procesa mogu međusobno
blokirati?
a) P1 i P2
b) P2 i P3
c) P3 i P1
d) ne može doći do zastoja.

- 22 -
- 23 -

You might also like