Sunteți pe pagina 1din 45

Universitatea din Bucureti

Facultatea Matematic Informatic


Tehnologia Informaiei

Sisteme de operare

Coordonator:
Conf. Dr. Marin Vlada

Student:
Irava Radu-Florin

Cuprins:

A. Conceptie si utilizare SO:


Tema 12. Testare, experimente i comentarii asupra unei
distribuii Linux:
1.

Prezentare PCLinuxOS..

a.

..3
Istorie.....

b.
c.

.4
Versiuni...........................................4
Caracteristici.........

d.

5
Proiecte...

2.

.....5
Creearea masinii virtuale...

3.

.....7
Instalarea sistemului de operare.

4.

.......14
Configurarea sistemului de operare....
.......23

B. Conceptie si dezvoltare SO:


Tema 4. Probleme clasice de coordonare si sincronizare
procese:
1.

Problema productora.

consumator..31
Metoda semafoarelor.

b.

32
Metoda transmiterii de mesaje....

2.

.34
Problema brbierului

3.

somnoros...........35
Problema cititori/scriitori..............................

4.

.....38
Problema cinei filozofilor
chinezi.....40
2 | Page

5.

Problema rezervrii

6.

biletelor.............43
Problema grdinii

7.

ornamentale....43
Problema emitorreceptor...44

A. Conceptie si utilizare SO:


Tema 12. Testare, experimente i comentarii asupra unei
distribuii Linux:

1. Prezentare PCLinuxOS

PCLinuxOS, adesea prescurtat PCLOS este o distributie GNU/Linux ce are o


interfata cu utilizatorul KDE Plasma Desktop. Este un sistem de operare gratuit
pentru calculatoare personale ce se concentreaza pe usurinta utilizarii. Este un
sistem de operare ce continua sa se dezvolte chiar si la acest moment.

3 | Page

a. Istorie
Prevestitorul lui PCLinuxOS a fost un set de pachete RPM (package
manager) create pentru a imbunatati versiunile succesive ale Mandrake Linux
(acum denumit Mandriva Linux). Aceste pachete au fost create de Bill Reynolds
(cunoscut ca si Texstar). Din 2000 pana in 2003, Texstar si-a mentinut depozitul
de pachete RPM in paralel cu site-ul PCLinuxOnline. Intr-un interviu, Reynolds a
declarat ca a inceput PCLinuxOS pentru a-si exprima pasiunea nebuna pentru
pachete de cod sursa, fara a avea de a face cu orgolii, aroganta si politica.
In octombrie 2003, Texstar a creat un branch din Mandrake Linux 9.2.
Lucrand in paralel si la The Live CD Project, Texstar a implementat inca de atunci
acel branch, ca fiind independent, intr-o distributie complet noua.

b. Versiuni

4 | Page

Aproape toate release-urile majore au fost insotite de metode de boot-are


si ecrane de login noi, impreuna cu schimbari in seturile de icon-uri si sunete de
login.

Versiune
2012.2
2011.9
2011.6
2010.12
2010.10
2010.7
2010.1
2010
2009.2
2009.1
2008 "MiniMe"

Data
2 Feb 2012
23 Sep 2011
27 Iun 2011
15 Dec 2010
28 Oct 2010
5 Iul 2010
5 Mai 2010
19 Apr 2010
30 Iun 2009
11 Mar 2009
7 Ian 2008

P.94 "2007"
P.93a "Big Daddy"
P.93a "Junior"
P.93a "MiniMe"
P.93 "MiniMe"
P.92
P.91
P.81a
P.8
P.7
P.5
Release-ul initial

21 Mai 2007
21 Aug 2006
9 Aug 2006
4 Aug 2006
21 Apr 2006
21 Noi 2005
7 Iul 2005
2005
2005
2004
2004
Oct 2003

c. Caracteristici
PCLinuxOS este distribuit ca si Live CD, care poate fi de asemenea instalat
pe hard disk-ul local sau pe un flash drive USB. Versiunea 2009.1 ofera un
installer USB pentru a crea un Live USB, unde configuratiile utilizatorului si datele
personale pot fi salvate daca se doreste. Un Live USB pentru versiuni mai vechi
ale PCLinuxOS poate fi creat manual sau cu UNetbootin. Intregul CD poate fi rulat
din memorie, presupunand ca sistemul are suficient RAM. PCLinuxOS foloseste
APT-RPM, bazat pe Advanced Packaging Tool (APT), un sistem de management al
pachetelor (originar din distributia Debian), impreuna cu Synaptic Package
Manager, un GUI pentru APT, pentru a adauga, sterge sau updata pachete. Daca
sistemul are destula memorie si o conexiune activa la internet, Live CD-ul poate
updata pachete. PCLinuxOS este de asemenea creat astfel incat, dupa ce se face
o configurare initiala, acesta sa poata fi usor de instalat pe mai multe sisteme.
Acest lucru se poate face prin creearea unui Live CD folosind unealta Mklivecd.

5 | Page

d. Proiecte

Distributii third-party
De cand PCLinuxOS include si scriptul mklivecd, exista o varietate de
distributii bazate pe PCLinuxOS, printre care Karoshi, BugnuX, BEL Project, ZENmini Gnome.
Revista PCLinuxOS
Acest proiect este o publicatie gratuita condusa de useri PCLinuxOS ai
MyPCLinuxOS. Numerele revistei sunt disponibile atat in format PDF cat si in
format HTML. Revista este publicata lunar.
MiniMe
Este un Live & Install CD pentru utilizatori avansati care doresc sa isi
adauge propria selectia de pachete. PCLinuxOS 2008 MiniMe a fost lansat pe 1
Iulie 2008.

KDE Fullmonty
Este un pachet ce contine obisnuitul PCLinuxOS la care se adauga niste
layout-uri speciale pentru desktop si multe aplicatii si drivere preinstalate.
Fullmonty aplica un nou concept: desktop-uri virtuale orientate pe activitatile si
nevoile anumitor tipuri de utilizatori, facandu-le viata mai usoara. Exista sase
tipuri de desktop virtual:

6 | Page

2. Creearea masinii virtuale

Pentru crearea masinii virtuale, vom folosi VMWare Player.


Stablirea metodei de instalare a sistemului de operare. In cazul nostru,
instalarea se face de pe un fisier imagine de tip ISO.

7 | Page

Stabilirea sistemului de operare si a versiunii ce urmeaza a fi instalate. In


cazul nostru PCLinuxOS este o distributie a Mandriva Linux (initial denumita
Mandrake Linux).

8 | Page

Stabilirea numelui si locatiei masinii virtuale. Noi o vom numi PC Linux OS


si o vom instala in drive-ul D in folderul cu acelasi nume.

9 | Page

Crearea hard disk-ului virtual. Pentru versiunea noastra este suficient un


hard disk de 20 GB. Vom stoca hard disk-ul virtual intr-un singur fisier pentru
performante mai bune.

10 | P a g e

In final putem vizualiza configuratia masinii virtuale ce urmeaza a fi


create.

11 | P a g e

Putem chiar sa modificam anumite setari, spre exemplu capacitatea


memoriei RAM.

12 | P a g e

Masina virtuala este gata. In meniul aplicatiei VMWare Player observam


detalii despre aceasta, precum si optiunile disponibile.

13 | P a g e

3. Instalarea sistemului de operare

Pornind masina virtuala, vom gasi urmatorul start-up screen.


Alegem Live CD.

14 | P a g e

Sistemul de operare boot-eaza.

15 | P a g e

Urmatoarea secventa ne propune sa alegem tastatura. In cazul


nostru aceasta este romana.

16 | P a g e

In continuare, apare ecranul de inceput. Observam asemanarea cu


Windows. Printre icon-urile de pe desktop se afla si Install PCLinuxOS. Il
accesam pentru a instala permanent sistemul de operare pe hard disk-ul
masinii virtuale.

17 | P a g e

Porneste instalarea sistemului de operare.

18 | P a g e

In continuare alegem dispozitivul de pe care se face boot-area si


metoda de boot-are.

19 | P a g e

Dupa care alegem una din posibilele item-uri de boot-at.

20 | P a g e

Instalarea a fost facuta cu succes. Dupa restartare, si la fiecare


deschidere a sistemului, putem opta pentru metoda de deschidere
normala sau safe mode.

21 | P a g e

La prima deschidere a sistemului, este necesar sa ne cream un


utilizator nou, dupa care instalarea este gata. Acum avem o masina
virtuala cu un sistem de operare PCLinuxOS instalata permanent pe hard
disk-ul acesteia, complet functional.

22 | P a g e

4. Configurarea sistemului de operare

Absolut orice tip de configurare se poate face cu ajutorul terminalului.


Acesta este echivalentul CMD-ului din windows. Desigur, aceasta interfata este
cea mai putin prietenoasa cu utilizatorul, deoarece necesita cunoasterea
comenzilor in detaliu.

23 | P a g e

Unul dintre softurile pe care utilizatorii le plac cel mai mult este
ChBg. Acesta este un tool folosit pentru derularea anumitor imagini pe
background.

24 | P a g e

Control Center este echivalentul Control Panel-ului din Windows.


Acesta contine o multitudine de setari.

25 | P a g e

Echivalentul bine-cunoscutului click dreapta Properties din


Windows, este fereastra prezentata mai jos. Astfel puteti face o multime
de modificari la aspectul sistemului de operare.

26 | P a g e

Printre softurile de monitarizare ale PCLinuxOS, se afla si celebrul


Task Manager, care practic aceleasi functionalitati cu cel din Windows.

27 | P a g e

Cu ajutorul Mozilla Firefox, preinstalat pe aceasta versiune de


PCLinuxOS, putem sa observam softul de monitorizare a retelei.

28 | P a g e

La capitolul aplicatii preinstalate gasim si editorul de texte specific


PCLinuxOS-ului. Pe fundal putem observa una din celelalte imagini
predefinite ale sistemului de operare.

29 | P a g e

Una dintre aplicatiile preinstalate pe acest sistem este SMPlayer.


Playerul este disponibil si pe platforma Windows, si dupa cum se vede,
ruleaza cu usurinta orice format video, fara a fi necesara instalarea unor
codec-uri.Pe fundal putem observa una din celelalte imagini predefinite
ale sistemului de operare.

30 | P a g e

B. Conceptie si dezvoltare SO:


Tema 4. Probleme clasice de coordonare si sincronizare
procese:

Exist o serie de exemple clasice de coordonare i sincronizare a


proceselor n care se regsesc principalele probleme ce apar n astfel de situaii.
Multe din aceste probleme se afl n structura oricrui sistem se operare.
Totodat aceste probleme clasice se regsesc i n programarea concurent. Le

31 | P a g e

vom aborda ncercnd s le soluionm cu mijloacele specifice prezentate


anterior.

1. Problema productor-consumator

Fie

serie

PRODUCTOR).

de

Aceste

procese
date

concurente

sunt

consumate

care
de

produc
alte

date

(procese

procese

(procese

CONSUMATOR). Datele sunt consumate n ordinea n care au fost produse. Este


posibil ca viteza de producere s difere mult de viteza de consum.
Aceast problem s-ar rezolva uor dac ar exista un buffer de dimensiuni
foarte mari, teoretic infinit, care ar permite operarea la viteze diferite ale
productorilor i consumatorilor. Cum o astfel de soluie este practic imposibil,
vom considera cazul practic al unui buffer finit. Principalele probleme care apar
n acest caz sunt:
- buffer gol (consumatorii nu pot consuma date i trebuie s atepte);
-buffer plin (productorii nu pot nscrie date n buffer i trebuie s atepte).
Indiferent de soluiile alese, vor trebui rezolvate situaiile de citire din
buffer-ul gol i de nscriere n buffer-ul plin.

a. Metoda semafoarelor

Fie un buffer de dimensiune n organizat dup structura coad circular.


Bufferul are n locaii pe care le-am notat cu tampon[n].
Vom considera urmtoarele variabile, semafoare i mutexuri:

32 | P a g e

Variabilele cu care se scrie i se citete n buffer au fost notate cu scriere


i citire. Ele asigur accesul proceselor la poziia unde se dorete operaia de
scriere sau citire, n ordinea n care au venit.
Semafoarele, semscriere i semcitire, au rolul de a asigura excluderea
mutual ntre procesele productor i consumator. Semaforul semscriere conine
numrul de poziii libere din buffer iar semaforul semcitire conine numrul de
poziii pline.Semscriere se iniializeaz cu n i semcitire cu 0.Cnd semscriere=0
sau semcitire=n, se va semnala situaia de

buffer plin respectiv buffer gol i

procesele vor fi blocate. Se intr ntr-o excludere mutual cu protocolul bussywait i procesele vor fi deblocate atunci cnd semscriere diferit de n sau
semcitire diferit de 0.
Mutexurile mutexscrierei mutexcitirefolosesc pentru excluderea mutual
ntre dou procese de acelai tip:mutexscriere pentru procesele de tip
productor i mutexcitire pentru procesele de tip consumator.
Procesele productor vor citi numere

ntregi la tastatur iar procesele

consumator vor consuma aceste numere.


Iat o implementare a problemei productor/consumator, scris n limbajul
C:

//declaraii de variabile, semafoare, mutexuri i iniializatori


typedef int semafor; typedef int mutex;
#define n 1000;
int tampon[n];
int scriere=0, citire=0;
semafor semscriere=n, semcitire=0;
mutex mutexscriere, mutexcitire;

//Procese productor
int valoare, tastatur;
while(1)
{ valoare=scanf(%d,&tastatura);
wait(semscriere) ;
33 | P a g e

lock(mutexscriere) ;
tampon[scriere]=valoare ;
scriere=(scriere+1)%n ;
unlock(mutexscriere) ;
signal(semcitire) ;}

//Procese Consumator
int valoare;
while(1)
{wait(semcitire);
lock(mutexcitire);
valoare=tampon[citire];
citire=(citire+1)%n;
unlock(mutexcitire);
signal(semscriere);}

Procesele productor funcioneaz n felul urmtor: Se consider o


buclwhile din care practic nu se iese. Se citete un numr ntreg de la tastatur
n variabila valoare. Prin wait(semscriere) se asigur excluderea mutual a
procesului

respectiv

productor

fa

de

alte

eventuale

procese

consumator.Prinlock(mutexscriere) se asigur excluderea mutual a procesului


respectiv

productor

tampon[scriere]=valoarese

fa

de

scrie

alte
efectiv

scriere=(scriere+1)%nse

actualizeaz

unlock(mutexscriere)

elibereaz

se

procese

poziia
mutexul

productori s foloseasc bufferul. Prin

productoare.

valoarea
de
de

scriere
scriere,

signal(semcitire)

buffer.
n

Prin
Prin

buffer.

Prin

permind

altor

se contorizeaz

semaforul de citire cu 1, semnalnd c, dup ce procesul productor a nscris o


valoare n buffer, numrul de poziii din buffer pentru procesele consumatoare sa mrit cu 1.Procesele consumator funcioneaz n mod asemntor.

b. Metoda transmiterii de mesaje

34 | P a g e

Pentru folosirea tehnicii de transmitere prin mesaje, considerm o linie de


transmisie cu capacitate limitat care folosete un buffer cu n poziii.
Modul de comunicaie ales pentru implementare este cel direct, deci fr
mailboxuri.Algoritmul este simplu. Consumatorul trimite mai nti mesaje goale
productorului. Ori de cte ori productorul are de dat un produs consumatorului,
va lua un mesaj gol si va transmite consumatorului un mesaj plin. Prin aceasta
numrul de mesaje din sistem rmne constant n timp, nedepind capacitatea
limitat a bufferului de comunicaie.
Bufferul de comunicaie este plin atunci cnd productorul lucreaz mai
repede dect consumatorul i toate mesajele sunt pline. n acest moment
productorul se blocheaz, ateptnd ca un mesaj gol s se ntoarc.
Bufferul de comunicaie este gol atunci cnd consumatorul lucreaz mai
repede

dect

productorul.

Toate

mesajele

vor

fi

golite

ateptnd

ca

productorul s le umple. Consumatorul este blocat ateptnd pentru deblocare


un mesaj plin.
Iat mai jos o implementare a problemei productor/consumator prin
transfer de mesaje.

# define n 10000
{int val;
void productor()
message m;

/*este mesajul transmis de


productor*/

while(1)
{val=produce element();

/*o funcie care produce


mesajul transmis de
productor*/

receive(consumator,&m);

/*ateapt un mesaj gol*/

construieste mesaj(&m,val);

/*o funcie care construiete


mesajul transmis*/

send(consumator,&m);}}

/*se transmite efectiv mesajul


consumatorului*/

void consumator()

35 | P a g e

{int i,val;
message m;
for(i=1;i<=n;i++)

/*se transmit spre productor


cele n mesaje goale*/

send(productor,&m);
while(1){
receive(productor,&m);

/*se primete mesajul de la


productor*/

val=extrageremesaj(&m);

/*se extrage mesajul pentru a


putea fi prelucrat*/

send(productor,&m);

/*se trimite o replic la mesajul


gol*/

consuma element(val);}}

/*o funcie care are rolul de a


utiliza mesajul transmis de
productor*/

Se observ n implementarea aleas c parametrul mesaj este un parametru


referin.

2. Problema brbierului somnoros

Enun
Prvlia unui brbier este format din dou camere, una la strad, folosit
ca sal de ateptare, i una n spate, n care se gsete scaunul pe care se
aeaz clienii pentru a fi servii. Dac nu are clieni, brbierul somnoros se
culc. S se simuleze activitile care se desfoar n prvlia brbierului.
Rezolvare
Aceast problem este o reformulare a problemei productor/consumator,
n care locul bufferului de obiecte este luat de scaunul brbierului iar
consumatorul este brbierul care i servete (consum) clienii.

36 | P a g e

n sala de ateptare sunt

n scaune pe care se aeaz clienii; fiecare

scaun este pentru un client. Dac nu sunt clieni, brbierul doarme n scaunul de
frizerie. Cnd vine primul client l trezete pe brbier i brbierul l servete pe
client, aezndu-l n scaunul de frizerie. Dac n acest timp sosesc i ali clieni,
ei vor atepta pe cele n scaune. Cnd toate scaunele sunt ocupate i mai vine
nc un client, acesta prsete prvlia.
Problema const n a programa aceste activiti n aa fel nct s nu se
ajung la aa numitele condiii de curs. Este o problem clasic cu multe
aplicaii, mai ales n cele de helpdesk.
Pentru implementarea soluiei vom utiliza dou semafoare i un mutex:

clieni un semafor ce contorizeaz clienii ce ateapt;


brbier un semafor care arat dac brbierul este ocupat sau nu; el are

dou valori, 0 dac brbierul este ocupat i 1 dac este liber;


mutexc un mutex folosit pentru excludere mutual; arat dac scaunul
de frizerie este ocupat sau nu.
De asemenea mai folosim o variabil:

clieninateptare care, aa cum arat i numele, numr clienii care


ateapt. Aceast variabil trebuie introdus deoarece nu exist o cale de
a citi valoarea curent a semafoarelor i de aceea un client care intr n
prvlie trebuie s numere clienii care ateapt. Dac sunt mai puini
dect scaunele, se aeaz i el i ateapt; dac nu, prsete frizeria.

S descriem algoritmul . Cnd brbierul intr dimineaa n prvlie, el execut


funcia brbier(), blocnd semaforul clieni care este iniial pe zero. Apoi se culc
i doarme pn vine primul client. Cnd acesta sosete, el execut funcia
clieni() i ocup mutexul care arat c scaunul de frizerie este ocupat. Dac
intr un alt client n acest timp, el nu va putea fi servit deoarece mutexul este
ocupat. Va numra clienii care ateapt i, dac numrul lor e mai mic dect
numrul scaunelor, va rmne, dac nu, va prsi prvlia. Rmnnd, va
incrementa variabila

clieninateptare. Cnd clientul care este servit a fost

brbierit, el elibereaz mutexul, trezind clienii care ateapt i unul din ei va


ocupa mutexul, fiind servit la rndul su.
Iat mai jos implementarea acestui algoritm:
37 | P a g e

#define scaune 20

/*se definete numrul


de scaune*/

type def int semafor;


type def int mutex ;
semafor clienti=0;

/*declaraii i

iniializri*/
semafor brbier=0;
mutexc=1;
int clientiinasteptare=0;

void brbier()
{while(1){
wait(clienti);
wait(mutexc);
clientiinasteptare--;
signal(brbier);
signal(mutexc);
tunde();
}
void clienti()
{wait(mutexc);
if(clientiinasteptare<scaune)
{clientiinasteptare++;
signal(clienti);
signal(mutexc);
clienttuns();
}
else
signal(mutexc);}}

38 | P a g e

3. Problema cititori/scriitori

Problema a fost enunat de Coutois, Heymans i Parnas n 1971.


Un obiect (care poate fi o resurs, de exemplu un fiier sau o zon de
memorie) este partajat de mai multe procese concurente. Dintre aceste procese,
unele doar vor citi coninutul obiectului partajat i aceste procese poart numele
de cititori iar celelalte vor scrie n coninutul obiectului partajat, purtnd numele
de scriitori.
Cerina este ca scriitorii s aib acces exclusiv la obiectul partajat, n timp
ce cititorii s poat accesa obiectul n mod concurent (neexclusiv).
Exist mai multe posibiliti de a soluiona aceast problem. Vom aminti
dou variante:

Varianta 1
Nici un cititor nu va fi inut n ateptare, dect dac un scriitor a obinut
deja permisiunea de acces la obiectul partajat.La un acces simultan la obiectul
partajat, att al scriitorilor ct i al cititorilor, cititorii au prioritate.

Varianta 2
Cnd un scriitor este gata de scriere, el va executa scrierea ct mai curnd
posibil.La un acces simultan, scriitorii sunt prioritari.
Oricum, n ambele cazuri, problema principal ce trebuie rezolvat este
nfometarea, adic ateptarea la infinit a obinerii dreptului de acces.
S implementm un program pentru prima variant, folosind urmtoarele
semafoare, mutexuri i variabile:

scrie un semafor cu mai multe roluri; el asigur excluderea mutual a


scriitorilor; este folosit de ctre primul cititor care intr n propria seciune
critic; de remarcat c acest semafor nu este utilizat de cititorii care intr
sau ies din seciunea critic n timp ce ali cititori se afl n propria

seciune critic;
contorcitire o variabil care are rolul de a ine evidena numrului de
procese existente n cursul citirii;
39 | P a g e

semcontor un semafor care asigur excluderea mutual cnd este


actualizat variabila contorcitire.
Dac un scriitor este n seciunea critic i n cititori ateapt, atunci un

cititor ateapt la semaforul scriere iar ceilali n-1 ateapt la semcontor.


Lasignal(scrie), se poate relua fie execuia unui singur scriitor, fie a
cititorilor aflai n ateptare, decizia fiind luat de planificator.
Iat implementarea programului pentru prima variant:
typedef int semafor; /*declaraii i
initializri*/
int contorcitire=0;
semafor scrie=1,semcontor=1 ;

void scriitor()
{wait(scrie) ;
scriereobiect() ;
signal(scrie) ;}
void cititor()
{wait(semcontor) ;
contor citire++;
if(contorcitire==1)wait(scrie);/*primul cititor*/
signal(semcontor);
citireobiect();
wait(semcontor);
contor citire--;
if(contorcitire==0)signal(scrie);/*ultimul cititor*/
signal(semcontor);}

40 | P a g e

4. Problema cinei filozofilor chinezi

Cinci filozofi chinezi i petrec viaa gndind i mncnd n jurul unei mese
circulare nconjurat de cinci scaune, fiecare filozof ocupnd un scaun. n centrul
mesei este un platou cu orez i n dreptul fiecrui filozof se afl o farfurie. n
stnga i n dreapta farfuriei cte un beior. Deci, n total, cinci farfurii i cinci
beioare. Un filozof poate efectua dou operaii: gndete sau mnnc. Pentru
a putea mnca, un filozof are nevoie de dou beioare, unul din dreapta i unul
din stnga. Dar un filozof poate ridica un singur beior odat. Problema cere o
soluie pentru aceast cin.

1
3
5
4

Trebuie rezolvate dou probleme majore:

Interblocarea care poate s apar. De exemplu, dac fiecare filozof ridic


beiorul din dreapta sa, nimeni nu mai poate s-l ridice i pe cel din

stnga i apare o situaie clar de ateptare circular, deci de interblocare.


Problema nfometrii unui filozof care nu apuc s ridice niciodat cele
dou beioare.
Aceast problem a fost enunat i rezolvat de ctre Dijkstra n 1965.

Exist multe soluii ale acestei probleme, marea majoritate utiliznd excluderea
mutual.
Pentru a nu aprea interblocarea se folosesc, n general, soluii de
prevenire a acesteia adic se impun unele restricii n ceea ce privete aciunile
filozofilor, cum ar fi:

unui filozof i se permite s ia un beior numai atunci cnd ambele


beioare, din dreapta i din stnga sa, sunt disponibile;

41 | P a g e

se creeaz o coresponden biunivoc ntre mulimea numerelor naturale


i filozofi, fiecare filozof avnd un numr natural; o soluie asimetric
impune filozofilor cu numr impar s apuce mai nti beiorul din stnga
i apoi pe cel din dreapta, iar filozofilor cu numr par s ia mai nti
beiorul din dreapta i apoi pe cel din stnga.

Vom prezenta, n continuare, o soluie clasic a acestei probleme, care


rezolv i situaia interblocrii i pe cea a nfometrii. n acest algoritm, se poate
generaliza problema pentru n filozofi. Se urmrete n ce stare poate fi un filozof,
existnd trei stri posibile: mnnc, gndete i este nfometat.
Unui filozof i se permite s intre n starea mnnc numai dac cel puin
unul din vecinii si nu este n aceast stare. Prin aceast restricie se previne
interblocarea.
Pentru implementare, se utilizeaz urmtoarele structuri:

stare[n] un vector n-dimensional, n care pe poziia i se gsete starea

filozofului la un moment dat; aceasta poate fi:


o pentru starea gndete
o pentru starea nfometat
o pentru starea mnnc
sem[n] un vector n-dimensional, n care sem[i] este un semafor pentru

filozoful i;
mutexfil un mutex pentru excludere mutual;
funciafilozof(i) este funcia principal care coordoneaz toate celelalte

funcii i care se refer la filozoful i;


funcia ridic beior(i) este funcia care asigur pentru filozoful i

ridicarea ambelor beioare;


funcia pune beior i este funcia care asigur pentru fiecare filozof i

punerea ambelor beioare pe mas;


funcia test(i) este funcia care testeaz n ce stare este filozoful i.

Implementarea este:
42 | P a g e

#define n 5
#define stang(i+n-1)%n
#define drept(i+1)%n

/*am definit numrul de


filozofi*/
/*numrul vecinului din
stnga filozofului i*/
/*numrul vecinului din
stnga filozofului i*/

#define gandeste 0
#defineinfometat 1
#define mananca 2
typedef int semafor;
typedef int mutex;
int stare[n];
mutex mutexfil=1
semafor sem[n];
void filozof(int i)
while(i) {
gandeste();
ridicabetisor(i);
mananca();
punebetisor(i);
void ridicabetisor(int i)
{wait(mutexfil);
stare[i]=infometat;
test(i);
signal(mutexfil);
wait(sem[i]);}

void punebetisor(int i)
{wait(mutexfil);
stare [i]=gandeste;
test(stang);
test(drept);
signal(mutexfil);

/*filozoful i gndete*/
/*filozoful i ridic cele dou
beioare*/
/*filozoful i mnnc*/
/*filozoful i pune pe mas
dou beioare*/
/*se intr n regiunea critic*/
/*filozoful i este n starea
nfometat*/
/*ncearc s acapareze cele
dou beioare*/
/*se iese din regiunea
critic*/
/*procesul se blocheaz dac
nu se pot lua cele dou
beioare*/
/*se intr n regiunea critic*/
/*filozoful i a terminat de
gndit*/
/*se testeaz dac vecinul
din stnga filozofului i
mnnc*/
/*se testeaz dac vecinul
din dreaptafilozofului i
mnnc*/
/*se iese din regiunea
critic*/
43 | P a g e

}
void test(int i);
{if stare [i]==
infometat&&stare[stang]!=
mananca&&stare[drept]!=
mananca)
{stare[i]=mananca;
signal(sem[i]);}}

5. Problema rezervrii biletelor


Enun
Fiecare terminal al unei reele de calculatoare este plasat ntr-un punct de
vnzare a biletelor pentru transportul feroviar. Se cere s se gseasc o
modalitate de a simula vnzarea biletelor, fr a vinde dou sau mai multe bilete
pentru acelai loc.
Rezolvare
Este cazul n care mai multe procese (vnztoarele de bilete) ncearc s
utilizeze n mod concurent o resurs nepartajabil, care este o resurs critic
(locul dintren).
Problema se rezolv utiliznd excluderea mutual iar pentru implementarea ei
cea mai simpl metod este folosirea semafoarelor.

6. Problema grdinii ornamentale


Enun
Intrarea n grdinile ornamentale ale unui ora oriental se face prin

pri. S se in evidena persoanelor care au intrat n grdin.


Rezolvare
Fiecare poart de intrare n grdin este o resurs care trebuie accesat
exclusiv de unproces ( o persoan care intr n grdin) .
Dac, la un moment dat, pe una din pori intr o persoan, atunci, n acel
moment, pe nici oalt poart nu mai intr vreo persoan n grdin.
44 | P a g e

Aceast problem face parte din problema excluderii reciproce.

7. Problema emitor-receptor

Enun
Un emitor emite succesiv mesaje, fiecare dintre ele trebuind s fie
recepionate de toi receptorii, nainte ca emitorul s emit mesajul urmtor.
Rezolvare
Este o aplicaie de tipul client-server. n acest tip de aplicaii, un proces
server este un proces ce ofer servicii altor procese din sistem iar un proces
client este unul care solicit servicii de la server i le consum.
Dac procesele client i server nu sunt pe acelai calculator, atunci
aceast aplicaie este distribuit. Implementarea ei, cel mai adesea utilizat n
sistemele multicalculator, se face prin transmisie de mesaje.

45 | P a g e

S-ar putea să vă placă și