Aritoni Ovidiu Sisteme de operare 1 Introducere



Yüklə 486,94 Kb.
səhifə15/27
tarix12.01.2019
ölçüsü486,94 Kb.
#96236
1   ...   11   12   13   14   15   16   17   18   ...   27

D.Problema frizerului

Acestă problemă porneşter de la următoarele ipoteze:




  • un frizer tunde pe rând mai mulţi clienţi;

  • un client intră în frizerie, dacă aceasta este plină el pleacă, altfel îşi aşteaptă rândul la tuns;

  • dacă nu mai sunt clienţi, frizerul doarme şi este trezit de următorul client care doreşte să fie tuns;

Considerăm că iniţial frizerul doarme şi este trezit de primul cilent venit.
Programul urmator prezintă o soluţie acestei problemei.

var


semaphore semf = 0; // semafor asociat frizerului

semaphore semf = 1; // semafor asociat unui client

int nrCl = n; // numar maxim de clienţi care pot a;tepta
semaphore mutex; // pt. acces exclusiv la variabile
Client ( ) {

P (mutex);

if (nrCl + 1<=n) {

nrCl = nrCl + 1;

V (semf); // anunţă frizerul că doreşte să fie tuns

}

else {



V (mutex);

exit ( );

}

V (mutex);



P (semp); // îşi aşteaptă rândul

} // Client


Frizer ( ) {

while (true) {

P (semf); // aşteaptă un client

P (mutex);

nrCl = nrCl – 1; // îl tunde

V (mutex);

V (semp); // cheamă următorul clent

}

} // Frizer


Programul principal:

int n= 10;

PARBEGIN

Frizer ( );

Client ( ); | Client ( ); | Client ( ); . . . |

Client ( ); | Client ( );

PAREND
Programul 2.5. Problema frizerului

4. Administrarea proceselor

In exemplele din sectiunile anterioare am intalnit deseori situatii in care doua sau mai multe procese (ex. producator si consumator) puteau fi, in mod logic, rulate pe computer. Atunci cand mai mult de un proces poate fi rulat, sistemul de operare trebuie sa decida care este primul pe care il rulaeza. Partea din sistemul de operare care hotaraste acest lucru se numeste temporizator, iar algoritmul pe care il foloseste se numeste algoritm temporizator.

Demult, cand sistemele de incarcare aveau intrari sub forma de imagini inregistrate pe o banda magnetica, algoritmul temporizator era simplu: pur si simplu ruleaza urmatoarea sarcina de pe banda. In cazul sistemelor legate in retea algoritmul temporizator este mult mai complex deoarece exista adesea mai multi utilizatori care solicita serviciile computerului, la fel cum pot exista simultan mai multe fluxuri de incarcare (ex. intr-o firma de asigurari pentru procesarea cererilor). Chiar si pe un computer personal pot exista mai multe procese initiate de catre utilizator, procese care deja solicita procesorul, ca sa nu mai vorbim de sarcinile de fond cum sunt reteaua sau posta electronica primind sau trimitand mesaje.

Inainte de a analiza anumiti algoritmi de temporizare trebuie sa ne gandim care este functia temporizatorului. Sa nu uitam, temporizatorul trebuie sa decida ordinea si nu sa furnizeze mecanismul. Exista mai multe criterii care trebuie sa fie intrunite de un bun algoritm de temporizare. Dintre acestea amintim:

1. Echitabilitatea - asgurati-va ca toate procesele folosesc parti egale din procesor.

2. Eficienta - procesorul trebuie sa lucreze tot timpul la intreaga sa capacitate.

3. Timpul de raspuns - micsorarea timpului de raspuns pentru fiecare utilizator interactiv.

4. Confirmarea raspunsului - micsorarea timpului in care utilizatorii care introduc date primesc rezultatul.

5. Viteza de lucru - marirea numarului de sarcini efectuate intr-o ora.
Daca va ganditi putin veti constata ca unele dintre aceste criterii sunt contradictorii. Pentru a micsora timpul de raspuns pentru utilizatorii interactivi temporizatorul ar trebui sa nu ruleze nici o sarcina de incarcare (poate doar intre orele 3 a.m. si 6 a.m. cand toti utilizatorii interactivi dorm). Totusi, utilizatorii care doresc sa introduca date nu vor agrea, probabil, acest algoritm deoarece este in contradictie cu punctul 4. Se poate demonstra ca orice algoritm de temporizare ce avantajeaza o anumita categorie de sarcini defavorizeaza automat alta. La urma urmei timpul disponibil al procesorului este limitat. Pentru a da mai mult unui utilizator trebuie sa-i dai altuia mai putin. Asa e viata.

O problema pe care temporizatoarele trebuie sa o rezolve este faptul ca fiecare proces este unic si imprevizibil. Unele pierd mult timp asteptand dupa fisiere I/O in timp ce altele ar utiliza procesorul cat mai mult timp posibil. Cand temporizatorul incepe sa ruleze un proces nu se stie peste cat timp procesul respectiv se va bloca fie pentru I/O, fie la o bariera, fie din alte motive. Pentru a se asigura ca nici un proces nu ruleaza pentru prea mult timp, aproape toate computerele au incorporat un cronometru sau un ceas electronic care intrerupe periodic procesele. In general frecventa este de 50 sau 60 de ori pe secunda (50 sau 60 Hertz, prescurtat Hz), dar la multe computere sistemul de operare poate fi acela care seteaza aceasta frecventa. La fiecare intrerupere sistemul de operare ajunge sa ruleze si sa decida daca procesul care ruleaza in momentul respectiv trebuie sa continue sau daca a beneficiat de procesor destul timp si, pentru moment alt proces trebuie sa utilizeze procesorul.

Aceasta strategie de a suspenda temporar procesele care pot fi rulate se numeste temporizare preemptiva si este in opozitie cu metoda "ruleaza pana la capat" utilizata de vechile sisteme de incarcare, metoda care se mai numeste si programare non-preemptiva. Dupa cum am vazut in acest capitol, un proces poate fi suspendat intr-un moment arbitrar, fara nici un avertisment, pentru ca alt proces sa poata fi rulat. Acest lucru creaza conditii de competitie astfel ca barierele, ferestrele, mesajele, precum si alte metode mai sofisticate devin necesare pentru a preveni aceasta situatie. Pe de alta parte, daca un proces ar fi lasat sa ruleze fara intreruperi pana la sfarsit ar insemna ca un proces care calculeaza valoarea lui PI cu un miliard de zecimale ar bloca rularea altor procese pentru un timp nelimitat.

Astfel, desi algoritmii de temporizare non-preemptiva sunt simpli si usor de implementat, ei nu sunt folositi in general pentru sisteme obisnuite cu mai multi utilizatori simultan. Pe de alta parte, pentru sisteme dedicate, asa cum este un server pentru baza de date se poate ca procesul principal sa initieze un proces secundar care lucreaza pentru o solicitare si sa-l lase sa ruleze pana la final sau pana se blocheaza. Diferenta dintre acest tip de sistem si sistemele obisnuite este aceea ca intr-un sistem pentru baze de date toate procesele sunt controlate de acelasi stapan care stie ce va face fiecare subordonat si cat va dura procesul respectiv.




Yüklə 486,94 Kb.

Dostları ilə paylaş:
1   ...   11   12   13   14   15   16   17   18   ...   27




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin