Sunteți pe pagina 1din 118

Aritoni Ovidiu

Sisteme de operare 1

1.Introducere

Aritoni Ovidiu

Sisteme de operare 1

Fr software-ul su, un computer este n mod sigur o cutie de metal. Cu ajutorul software-ului computerul poate stoca, procesa, i recupera informa!ii, poate afi a documente multimedia, poate cuta pe "nternet, i se poate angaja n multe activit!ii. Softul unui calculator poate fi mpr!it n # categorii$ programe-sistem, care administrea% sistemul ns i& aplica!ii-program, care reali%ea% o sarcin cerut de utili%ator. 'rogramele sistem fundamentale sunt sistemele de operare, care controlea% toate resursele calculatorului i ofer o (a% peste care o aplica!ie-program poate scrie. )n sistem modern con!ine unul sau mai multe procesoare, ceva memorie *+A,, +O,, etc.-, discuri, imprimante, plac de re!ea, i alte ec.ipamente de intrareie ire. /ste o trea( dificil de a urmri ca toate componentele s rule%e corect i optim. 0ac fiecare program s-ar interesa asupra cum i lucrea% .ard dis1ul sau ce multe alte lucruri se pot nt2mpla c2nd este citit un (loc de disc, este pu!in pro(a(il ca acel program s mai rule%e. Cu mul!i ani n urm a devenit e3trem de clar c tre(uie gsit un scut pentru comple3itatea .ardware-ului unui calculator. Aceast idee a evoluat gradat i a impus, practic vor(ind, un strat la (a%a componentei .ardware care s administre%e toate componentele unui sistem i s pre%inte utili%atorului o interfa! sau o ma in virtual u or de n!eles i de programat. Acest strat de software este sistemul de operare i formea% su(iectul lucrrii. Situa!ia aceasta este pre%entat mai jos$

Fig 1-1. )n sistem de calcul consta in .ardware, programe de sistem si aplicatii 4a (a% este .ardware-ul, care n multe ca%uri este compus din # sau mai multe nivele. Cel mai de jos nivel con!ine ec.ipamente fi%ice, constituite din circuite integrate, c.ipuri, ca(luri, surse de putere, tu(uri catodice i alte ec.ipamente fi%ice similare. Cum sunt construite i lucrea% acestea, sunt sarcini ce cad asupra inginerilor. 0up acest nivel pe unele sisteme urmea% un altul al software - ului primitiv care controlea% direct aceste ec.ipamente i ofer o interfa! mai simpl pentru urmtorul nivel. Acest software, numit microprogram, este n mod o(i nuit gsit n memoria +O,. /l este ast%i un interpretor, ce aduce un lim(aj de instruc!iuni de genul A00, ,O5/ sau 6),' care re%ult ca serii de mici pa i. 'entru a aduce o instruc!iune A00 de e3emplu, microprogramul tre(uie s determine unde numerele ce tre(uie adugate sunt locali%ate, s se deplase%e, i s le adauge i s depo%ite%e re%ultatele undeva. Setul de intruc!iuni pe care microprogramul l interpretea% define te lim(ajul ma in, care nu este #

Aritoni Ovidiu

Sisteme de operare 1

deloc parte a .ardwareului, ci productorii de computere l descriu n manualele lor n a a fel nc2t mul!i oameni l consider a fi adevrata ma in. )nele computere numite +"SC, nu au un nivel de microprogramare. 'e aceste ma ini .ardul e3ecut direct instruc!iunile n lim(ajul de asam(lare. Ca de e3emplu ,otorola 789 3 O are un nivel de program dar ":, power 'C nu are. 4im(ajul de asam(lare are ntre ;<9 = <99 de instruc!iuni, cele mai multe pentru mutarea datelor, pentru calcule aritmetice i pentru a compara valori. 'e acest nivel *stratdispo%itivele de intrare i ie ire sunt controlate de valorile ncrcate n registre speciale. 0e e3emplu un dis1 poate fi programat s citeasc ncrc2nd valorile adreselor discului, adresa principal a memoriei, (>te count-ul i direc!ia *cite te sau scrie- n registrele speciale. ?n practic este nevoie de mult mai mul!i parametrii i datele re%ultatelor dintr-o opera!ie sunt foarte comple3e. ,ai departe pentru multe dispo%itive de intrare@ie ire timpul joac un rol important n programare. O func!ie major a SO este de a ascunde toat aceast comple3itate i de a da programatorului un set mai convena(il de instruc!iuni cu care s lucre%e. 0e e3emplu (locul de citire dintr-un fi ier conceptual este mai simplu dec2t de a te ngrijora despre detaliile mutrii capetelor discului, a tept2nd ca ele s se sta(ili%e%e .a. m.d. 52rful sistemului de operare este restul software-ului. Aici gsim interpretorul de comen%i *s.ell-, sistemele de ferestre, compilatoarele, editoarele i programele de aplica!ie. /ste important s ne dm seama c aceste programe cu siguran! nu fac parte din sistemul de operare, c.iar dac n mod caracteristic sunt aprovi%ionate de productorii de computere. Aceasta este un punct foarte important i su(til. Sistemul de operare este acea parte a softului care rulea% n modul Aernel sau n modul supervi%or. Sistemul de operare protejea% asupra atingerilor *a(u%urilor- utili%atorului asupra .ardwarelui *ignor2nd pentru un moment ni te microprocesoare care nu au deloc protec!ie-. Compilatoarele i editoarele lucrea% n modul user. 0ac unui utili%ator nu i place un anumit compilator el este li(er s scrie propriul compilator dac dore te aceasta. Bu este ns li(er s scrie propriul su program de ntrerupere a func!ionrii dis1ului care este parte a sistemului de operare i n mod normal este protejat de .ardwarelui mpotriva atacurilor utili%atorilor ce vor s l modifice. ,ai presus de programele sitemului sunt programele de aplica!ie. Aceste programe sunt cumprate sau scrise de utili%ator pentru a le re%olva pro(lemele personale, ca de e3emplu, procesarea te3telor, imprimare, calcule sau jocuri.

1.Ce este un Sistem de Operare?


,ul!i uliti%atori de computere au avut e3perien!e cu un sistem de operare dar este dificl de a spune cu e3acticitate ce este un sistem de operare. O parte a pro(lemei este c sistemele de operare desf oar dou func!ii de (a% care nu au legtur una cu alta. Ci depin%2nd de cine vor(e te a!i au%it mai mult de o func!ie sau cealat. Daide!i acum s ne uitm la am2ndou.

Aritoni Ovidiu

Sisteme de operare 1

A.Sistemul de operare ca i main extins


A a cum este men!ionat mai sus, ar.itectura *setul de intruc!iuni, organi%area memoriei, dispo%itivele de "@O, structura de (a%- multor calculatoare la nivelul lima(ajului ma in este primitiv i ciudat pentru program n special pentru "@O. Ca s clarificm mai mult acest punct .aide!i s ne uitm pe scurt la cum este fcut o disc.et folosind B/C '0E7< sau ec.ivalentul care este folosit pe majoritatea 'C-urilor *de-a lungul ntregii cr!ii vom folosi termeni de flopp> disc sau disc.et fr nici o diferen!'0E7< are 17 comen%i fiecare ncrc2nd ntre 1-F (>tes ntr-un registru. Aceste comen%i sunt pentru citirea i scrierea, mutarea capului de disc i formatarea datelor, ca i pentru ini!iali%area, nregistrarea@detectarea, resetarea i recali(rarea controlerului i a driverului. Cele mai importante comen%i de (a% sunt cele de citire i scriere, dintre care fiecare cere 1; parametrii mpac.eta!i n F (i!i. Ace ti parametrii specific elemente ca de e3emplu, adresa (locului ce urmea% a fi citit, numrul sectoarelor pe disc, modul de nregistrare folosit pe mediul fi%ic spa!ierea discului i ce s faci cu adresa datelor terse. 0ac nu n!elegi acest mecanism nu te ngrijora, asta este de fapt ideea, este mai degra( e%oteric. C2nd opera!ia este completat controlerul returnea% #; de re%ultate i corpuri de erori mpac.etate n E (>tes. Ca i c2nd nu ar fi suficient programul disc.etei tre(uie s fie tot timpul con tient dac motorul este nc.is sau desc.is. 0ac motorul este nc.is tre(uie s fie desc.is cu o mare nt2r%iere de pornire nainte ca datele s poat fi citite sau scrise. ,otorul nu poate fi lsat pornit mai mult timp cci disc.eta se va u%a. Astfel utili%atorul este for!at s trate%e sc.im(ul dintre nt2r%ierea lung a pornirii i u%area disc.etelor * i pierderea datelor de pe ele-. Fr a intra n detaliile adevrate tre(uie s fie clar c programatorul o(i nui pro(a(il nu vrea s se implice prea repede n programarea disc.etelor *sau a .ard dis1ului care sunt la fel de comple3e i destul de diferite-. ?n sc.im( ceea ce programatorul vrea este s trate%e o simpl a(strac!ie la nivel nalt. ?n ca%ul discurilor o a(strac!ie tipic ar fi aceea c discul con!ine o colec!ie de fi iere definite. Fiecare fi ier poate fi desc.is pentru citire sau scriere, nc.is sau desc.is i n cele din urm nc.is. 0etalii ca de e3emplu dac nregistrarea tre(uie sau nu s foloseasc modificarea frecven!ei i care este starea motorului la momentul acela, nu tre(uie s apar n a(strac!ia pre%entat utili%atorului. 'rogramul care ascunde de programator adevrul despre .ardware i pre%int o imagine drgu! i simpl a fi ierelor definite care pot fi citite sau scrise, desigur este sistemul de operare. A a cum sistemul de operare scute te programatorul de aspectele .ardware i pre%int o simpl interfa! orientat pe fi ier, la fel provoac o mul!ime de lucruri neplcute n ceea ce prive te ntreruperile, timpul i administrarea memoriei i alte trsturi de nivel sc%ut. ?n fiecare ca% a(strac!ia oferit de sistemul de operare este mai simplu i mai u or de folosit dect .ardware-ul. 0in acest fapt punct de vedere func!ia sistemului de operare este de a pre%enta utili%atorului un ec.ivalent al ma inii e3tinse sau ma inii virtuale, c2ci este mai u or s programe%i dect s administre%i .ardware-ul. Cum i o(!ine sistemul de operare !elul este o poveste lung pe care o vom studia detaliat de-a lungul acestei cr!i.

Aritoni Ovidiu

Sisteme de operare 1

B.Sistemul de operare ca i manager de resurse


Conceptul de sistemul de operare care n primul asigur utili%atorului o interfa! convena(il este o vi%iune de sus n jos. O alternativ de vedere de sus n jos sus!ine c sistemul de operare este acolo pentru a administrara toate piesele unui sistem comple3. Computerele moderne con!in procesoare, memorii, ceasuri interne, dicuri, mouse-uri, plci de re!ea, imprimante, i o larg varietate de alte dispo%itive. ?n vedere alternativ func!ia sistemului de operare este de a furni%a memorie, dispo%itive de "@O, pentru reparti%area ordonat i controlat a procesoarelor. "magina!i-v ce s-ar nt2mpla dac trei programe ce rulea% pe computer, toate ncerc2nd s tipreasc n acela i timp re%ultatul lor pe aceea i imprimant. 'rimele linii ale tipririi ar putea forma programul, urmtoarele programe #, alte c2teva programul ;, .a.m.d. +e%ultatul lor ar fi un .aos. So poate aduce ordine n poten!ialul .aos (ufferi%2nd toate re%ultatele destinate pentru tiprirea pe disc. C2nd un program este terminat sistemul de operare poate apoi s copie%e re%ultatele programului de pe (ufferul din disc unde a fost stocat n timp ce n acela i timp alt program poate continu s genere%e re%ulate ,in ciuda faptului c re%ultatul nc nu merge la imprimant. C2nd un calculator *sau o re!ea- are mai mul!i utili%atori, nevoia de administrare i protejare a memoriei, a dispo%itivelor de "@O i a altor resurse este mai mare, din moment ce utili%atorii ar putea s se interfere%e unii cu al!ii. ?n plus, deseori utili%atorii tre(uie s mpart nu numai .ardul ci de asemenea i informa!ii *fi iere, :0-. 'e scurt aceast imagine a sistemului de operare sus!ine c principala lui datorie este s conta(ili%e%e cine, ce resurse folose te, s apro(e cereri de resurse, i s medie%e confilcte ntre cereri de la diferite programe i utilitare.

2.Generatii de calculatoare
?n %iua alegerilor din 1F<#, ma ina )B"5AC de la +emington +and a fost pre%entat la televi%iunea na!ional. 0wig.t 0. /isen.ower i Adlai Stevenson candidau la pre edin!ia Statelor )nite i, pe msura primirii re%ultatelor de pe coasta de est, salaria!ii firmei +emington +and le introduceau n )B"5AC, care era programat s anticipe%e c2 tigtorul pe (a%a re%ultatelor par!iale. +e!eaua de televi%iune C:S tre(uia s anun!e c2 tigtorul sta(ilit de )B"5AC la ora nou, dar la timpul sta(ilit, comentatorii C:S au anun!at c )B"5AC nu a dat nici un re%ultat. 0e fapt, )B"5AC sta(ilise deja un re%ultat$ calculele sale l indicau pe /isen.ower ca fiind c2 tigtor n mod deta at. Comentatorii refu%aser s anun!e predic!ia deoarece *ca i to!i locuitorii !rii- cre%user c ntre cei doi candida!i va fi o competi!ie str2ns. ,ai t2r%iu n aceea i sear, c2nd a devenit clar c )Bivac anticipase corect re%ultatele, C:S a anun!at re%ultatul preliminar i )B"5AC a c2 tigat imediat credi(ilitate din partea pu(licului american. Capacit!ile televi%ate ale sistemului )B"5AC au permis marii majorit!i a americanilor neimplica!i n tiin!a calculatoarelor s priveasc sistemele de calcul ntr-un <

Aritoni Ovidiu

Sisteme de operare 1

mod nou i au contri(uit la intrarea in era calculatoarelor comerciale. ?ncep2nd cu )B"5AC i alte programe similare, de%voltarea calculatoarelor comerciale a cuprins patru etape distincte, numite genera!ii de calculatoare. Ast%i, ne aflm la grani!a celei de-a cincea genera!ii. Prima generaie: Tuburi cu vid (1942-1956)

Calculatoarele electronice din prima genera!ie, cum a fost )B"5AC, prelucrau datele utili%2nd te.nologiile tu(urilor cu vid e3perimentate pentru sistemele A:C, /B"AC i /05AC. Aceste calculatoare erau numite sisteme mainframe *cadru principaldatorit cadrelor de metal utili%ate pentru sus!inerea tu(urilor cu vid. Hu(urile cu vid sunt asemntoare unor (ecuri electrice de dimensiuni mari, care necesit un timp oarecare pentru a se ncl%i i rsp2ndesc cantit!i uluitoare de cldur. ,iile de tu(uri cu vid din calculatoarele de genul /B"AC tre(uiau toate ncl%ite i, la terminarea lucrului, era necesar o verificare amnun!it pentru a nlocui eventualele tu(uri arse. Hu(urile cu vid sunt at2t de mari nc2t, dac s-ar utili%a i ast%i n construc!ia calculatoarelor, un sistem mainframe modern ar avea dimensiunile unui %g2rie-nori. Calculatoarele din prima genera!ie con!ineau tam(uri magnetici pentru stocarea datelor. 'rogramele stocate erau scrise n lim(a ma in, secven!e de cifre 9 i 1 care reflectau direct contri(u!ia lui Ieorge :oole. Fiecare productor crea propriul su lim(aj de ma in. Irace Dopper, care a lucrat cu Doeard Ai1en la caculatorul ,ar1 n anii 1FG9, a nceput s cola(ore%e cu ,auc.l> i /c1ert dup ace tia prsiser coala ,oore. Dooper a reali%at n 1F<# primul compilator = un program care traduce un lim(aj de programare n lim(aj ma in. Compilatoarele au sc.im(at modul de programare, permi!2nd programatorilor s introduc numere i litere n locul unor secven!e de 9 i 1. 0e asemenea, astfel a crescut semnificativ numrul persoanelor dornice s se familiari%e%e cu programarea calculatoarelor. A doua generaie: Tranzi !oare (1956-196")

?n 1FG8, trei fi%icieni ai la(oratoarelor :ell- Jilliam S.oc1le%, Jalter :rattain i 6o.n :ardeen = au descoperit un nou tip de cristal numit germaniu. Iermaniul nu era un conductor de electricitate at2t de (un cum sunt cuprul sau o!elul, dar era mai (un dec2t alte materiale cum ar fi sticla sau cauciucul. Acest tip de material a fost denumit semiconductor. A urmat descoperirea altor materiale semiconductoare, inclusiv siliciul, care erau confec!ionate din materii (rute u or de procurat - pietre sau nisip. Fi%icienii au decoperit c, prin adugarea altor materiale la un semiconductor *proces denumit dopare-, re%ulta un material capa(il s ac!ione%e ca un redresor sau un amplificator electric = cu alte cuvinte, un material ce putea s nlocuiasc tu(urile cu vid . Aceste noi dispo%itive create pe (a%a materialelor semiconductoare au primit numele de tran%istoare. Hran%istoarele erau de dimensiuni mult mai mici *a cin%ecea parte din dimensiunea uni tu( cu vid-, furni%au mai mult energie i erau mai solide dec2t fragilele 7

Aritoni Ovidiu

Sisteme de operare 1

tu(uri cu vid produse din sticl. "n 1F<; a fost lansat primul dispo%itiv prev%ut cu tran%istoare destinat v2n%rii$ un sistem de m(unt!ire a au%ului care ncpea n pavilionul urec.ii. Ctre sf2r itul deceniului, tran%istoarele au nlocuit tu(urile cu vid n calculatoare, televi%oare i aparate de radio cu tran%istoare = primele aparate de radio sufucient de mici pentru a putea fi transportate ntr-un (u%unar. Aplica!iile care utili%au tran%istoarele erau numite Kn stare solidK, nct tran%istoarele erau re%istente. Boua te.nologie Kn stare solidK a fost utili%at pentru construirea primelor supercalculatoare , calculatoare uria e destinate gestionrii unor cantit!i mari de date i efecturii unor calcule rapide. ?n anii L79, calculatoarele main frame din a doua genera!ie erau fa(ricate de companii cum ar fi ":,, Done>well i Sperr>-+and *n pre%ent component a )nis>s- i erau utili%ate pe scar larg n afaceri importante. ?n 1F<E, Irace Dopper a creat un lim(aj de programare destinat afacerilor denumit Flow-,atic. ?n 1F79, Dopper a contri(uit la de%voltarea lim(ajului CO:O4 *Common :usiness-Oriented 4anguage = 4im(aj o(i nuit orientat pe afaceri-. :a%at pe Flow-,atic, CO:O4 era primul lim(aj de nivel nalt care nu era specific unui anumit tip de ma in. *4im(ajele de programare de nivel nalt seamn cu lim(a engle%, spre deose(ire de secven!ele de 9 i 1 ale lim(ajului ma in.- 'rogramele scrise n CO:O4 erau apoi traduse n lim(aj ma in utili%2nd un compilator de CO:O4. '2n n anii L89, majoritatea programelor comerciale au fost scrise n CO:O4& programele tin!ifice erau scrise n FO+H+AB *Formula Hranslator-. ?n cea de-a doua genera!ie de calculatoare, m(inarea ntre lim(ajele de programare de nivel nalt cum ar fi CO:O4 i FO+H+AB i conceptul de program stocat inventat de von Beumann a dus la crearea unor sisteme de calcul de u% general, cu adevrat fle3i(ile. )n program putea fi ncrcat rapid n memoria calculatorului *construit cu tran%istoare i nu cu tu(uri-, putea fi rulat i apoi nlocuit cu un alt program. 0atorit crerii noilor lim(aje de programare i construirii unui numr mare de calculatoare, au aprut noi ocupa!ii$ programator i analist de sistem. ?n 1F<E, ":, a lansat prima unitate de disc capa(il s efectue%e at2t opera!ii de citire, c2t i de scriere pe un disc. ?n 1F<F, 0igital /Muipment Corporation *0/C- a creat minicalculatorul '0'-1. 0e dimensiuni mai reduse dec2t sistemele mainframe, minicalculatoarele erau pre%entate pe pia! ca sisteme compacte puternice. ?n plus, erau ieftine$ calculatorul '0'-8 costa mai pu!in de 199.999 de dolari. 4a sf2r itul anilor L<9 a avut loc o alt premier$ eli(erarea cecurilor reali%at de calculatoare i nu de m2n. 4ucrtorii de la :anca Americii, cea mai mare (anc din lume, aveau pro(leme legate de durata foarte mare a introducerii informa!iilor din cecuri n conturile (ancare. A adar, n 1F<F, societatea Ieneral /lectric a instalat noua metod de nregistrare electronic a informa!iilor de conta(ilitate */lectronic +ecording ,et.od of Accounting = /+,A- la :anca Americii. /rma utili%a Calculatoare pentru nregistrarea cecurilor numerotate cu cerneal magnetic i era capa(il s sorte%e i s nregistre%e de dou ori mai multe cecuri pe minut dec2t un conta(il pe or. A doua genera!ie a inclus i primul patent penru un dispo%itiv de tip ro(ot, acordat lui Ieorge 0evol 6r. i 6osep. /ngel(erger n 1F<G. ?n 1F<8, 0evol i /ngel(erger au instalat primul ro(ot industrial, )B",AH/, ntr-o u%in de asam(lare Ieneral ,otors. ?n acela i an, C.ester Carolson a creat prima ma in de fotocopiere$ 3erocopiatorul. A !reia generaie: circui!e in!egra!e (1964-19#1)

Aritoni Ovidiu

Sisteme de operare 1

4a nceputul celei de-a treia genera!ii de calculatoare, tran%istoarele erau deja utili%ate de apro3imativ 1# ani, devenind mai compacte i mai fia(ile pe msura perfec!ionrii procesului de fa(rica!ie. Spre sf itul anilor L<9, tran%istoarele ajunseser de dimensiuni at2t de mici nc2t a aprut ideea com(inrii mai multor tran%istoare ntr-un singur dipo%itiv. ?n anul 1F<8, un inginer pe nume 6ac1 Ail(> a proiectat circuitul integrat cu cuar!. 'rimul circuit integrat con!inea trei componente ntr-un singur modul confec!ionat. )n grup de ingineri de la compania Fairc.ild Semiconductor *prima companie din Silicon 5alle>, California- ncerca, de asemenea, s pun n practic ideea integrrii mai multor tran%istoare i circuite ntr-un singur cip. "nginerul 6ac1 Doerni a descoperit un mod de a fa(rica tran%istoare plate, care au permis construirea unor module de circuite integrate plate = cipuri pentru calculatoare. 'erfec!ionarea continu a te.nologiei a determinat includerea unui numr mai mare de componente ntr-un cip. 0imensiunile calculatoarelor erau n scdere, dar pre!ul cipurilor era nc mai mare dec2t pre!ul componentelor individuale. Hrecerea de la o genera!ie la alta nu are loc peste noapte. C2nd a fost invetat tran%istorul, e3istau nc stocuri ntregi de tu(uir cu vid care a teptau s fie utili%ate. ,ulte calculatoare din genera!ia a doua con!ineau at2t tu(uir cu vid, c2t i tran%istoare iar tran%istoarele au fost folosite mpreun cu circuite integrate la construirea calculatoarelor din a treia genera!ie. Cursa trimiterii unui om pe lun a avut o contri(u!ie important la scderea pre!urilor cipurilor. )niunea Sovietic a lansat primul satelit, Sputni1 n 1F<E. ?n 1F71, pre edintele S)A 6o.n F. Aenned>, cut2nd o cale de a c2 tiga ncrederea na!ional, a promis c Statele )nite vor trimte un om pe lun p2n la sf2r itul deceniului. Bu pre!ul unei asemenea aventuri a fost o mare pro(lem, ci dimensiunea ve.iculului. 'entru a computeri%a ve.iculele spa!iale, era necesare construirea unor circuite integrate mai compacte de ctre companii cum a fost Fairc.ild. ?n sc.im(, sprijinul acordat de guvern cercetrii i producerii de circuite integrate a permis construirea unor numr mai mare de cipuri comple3e la un pre! sc%ut. )n alt progres major al celei de-a treia genera!ii a fost crearea sistemelor de operare. Sistemele de operare sunt programe care controlea% instruc!iunile de (a% ale unui calculator, inclusiv deplasarea instruc!iunilor i datelor ntre unitatea de prelucrare i memorie, tiprirea i citirea informa!iilor de pe disc . ?naintea apari!iei sistemului de operare, de e3emplu, fiecare program con!ine numeroase linii de cod ce specificau e3act modul de desc.idere a unui fi ier. )tili%2nd un sistem de operare, este suficient ca programul s con!in codul necesar pentru a trimite cererea de desc.idere a fi ierului ctre sistemul de operare care efectuau un apel de sistem. Acesta tratea% opera!ia de desc.idere a fi ierului. Sistemele de operare standardi%ate permit scrierea unor programe de dimensiuni mai reduse i ntr-un ritm mai rapid. Cu toate progresele nregistrate de te.nologia sistemelor de calcul, p2n la calculatoarele personale moderne mai era nc un drum lung de str(tut. ?n sc.im(, time-s.aring a fost e3presia magic a anilor L79. 0atorit te.nicii time-s.aring utili%atorii nu mai tre(uia s Kstea la coadK care s lucre%e la un calculator& calculatorul KtreceaK de la un utili%ator la altul, acord2ndu-i fiecruia c2te un scurt interval de timp. ?ntruc2t calculatoarele lucrea% mai rapid dec2t oamenii, utli%atorii putea lucra ntr-un ritm constant i nu o(servau c sistemul Klucrase cu altcinevaN n ultima %ecime de secund. "maginea predominant asupra viitorului era urmtoarea$ o serie de calculatoare de dimensiuni enorme, capa(ile s deserveasc fiecare mii de utili%atori n sistemul time-s.aring, utili%atori care introduceau pe cartele perforate i primeau datele de ie ire la o imprimant. 8

Aritoni Ovidiu

Sisteme de operare 1

"nginerul 0ouglas /ngel(art de la "nstitutul de Cercetri Standorf a avut o alt idee$ calculatoare indiviuale care furni%ea% datele de ie ire prin intermediul unor dispo%itive cu tu(uri catodice similare televi%oarelor *nu la imprimant- i permit utili%atorilor s manipule%e imagini i s introduc te3te. 4a sf2r itul anului 1F78, /ngel(art i-a sus!inut proiectul la o conferin! despre calculatoare, pre%ent2nd sc.ema unui calculator care con!inea o tastatur i un dispo%itiv de indicare denumit mouse. ?n 1FE9, /ngel(art a proiectat interfe!e cu utli%atorul prev%ute cu multe ferestre, predecesoarele sistemului Jindows, i a implementat un sistem de po t electronic (a%at pe un sistem mainframe. /ngel(art spera ca imaginea sa asupra calculatoarelor personale s sc.im(e radical direc!ia n care se ndreptau comapanii cum ar fi ":,, Sperr> i 0/C = dar marile companii nu credeau nc n e3isten!a unei pie!e de desfacere pentru calculatoarele u or de utli%at, orientate pe imagini. A $a!ra generaie: %ircui!e microminia!uriza!e (19#1-&)

4a nceputul anilor LE9, dimensiunile circuitelor continuau s scad. )tili%area integrrii pe scar larg *4S" = large scale integration- a permis productorilor s includ sute de componente ntr-un singur cip. He.nica 4S" a fost nlocuit cu 54S" *integrate pe scar foarte larg = ver> large scale integration-, ceea ce permitea includerea a sute de mii de componente ntr-un cip. 'rin utili%area )S" *integrrii pe scar utra larg-, numrul componentelor dintr-un cip a ajuns de ordinul milioanelor. ?n 1FE1, o companie mic numit "ntel *n pre%ent cel mai mare productor de cipuri din lume- a instalat toatele componentele esen!iale ale unui calculator ntr-un singur cip$ microprocesorul. ,icroprocesoarele erau produse de sine stttoare = un microprocesor poate fi introdus n orice calculator sau orice alt dispo%itiv. Calculatoarele au scpat de carcasele de metal, gsindu- i locul n automo(ile, cuptoare cu microunde i sisteme stereo. ?n plus, microprocesoarele erau ieftine n compara!ie cu procesoarele utili%ate n sistemele mainframe i n minicalculatoare. 4a nceputul anilor LE9, Atari a utili%at un microprocesor pentru crearea primului joc video, 'ong, n care doi juctori roteau manete ce controleau mi carea paletelor ntrun miniaturi%at de tenis de mas. Centipede i ,"ssile Command& la nceputul anilor L89, entu%ia tii jocurilor se puteau amu%a cu jocuri de acest gen la ei acas. B-a durat mult p2n c2nd productorii de jocuri mecanice ca Jiliams, :all> i 0ata /ast au introdus microprocesoare n mesele de jocuri mecanice pentru a controla sumele c2 tigate pentru afi area scorurilor. Crearea unui microprocesor a transformat n realitate vi%iunea lui /ngel(art privind calculatoarele personale. 'rimul micoprocesor comercial a devenit disponi(il n 1FE1. Anul urmtor, pe pia! a e3istat un microcalculator, de i primul calculator personal comercial de succes = Apple "" = a fost produs a(ia n 1FE7. ?n 1FF#, erau utili%ate 7< de milioane de calculatoare. +estul, dup cum se spune, este istorie . O dat cu inventarea microcalculatoarelor, a nceput cea de-a patra genera!ie de calculatoare. A cincea generaie (a vii!oru'ui)

Aritoni Ovidiu

Sisteme de operare 1

'este #9 de ani, studen!ii vor nv!a despre cea de-a cincea * i poate a asea i a aptea- genera!ie de calculatoare. ?n momentul n care citi!i acest carte, n lumea ntreag sunt create te.nologiile necesare celei de-a cincea genera!ii. Oamenii de tiin! din numeroase !ri, inclusiv Iermania, ,area :ritanie, "ndia, 6aponia i Statele )nite, lucrea% la proiecte de inteligen! artificial = programe de calculator capa(ile s g2ndeasc similar unei fiin!e umane. Acest proces poate dura ani ntregi& ntruc2t nimeni nu tie e3act cum func!ionea% inteligen!a uman, programele de acest gen sunt dificile de creat. ?n lucrul i discu!iile cu privire la inteligen!a artificial sunt implica!i oameni dintr-un numr mare de domenii, cum ar fi anatomie, (iologie, informatic, educa!ie, matematic, filosofie i neuropsi.ologie. )nele descoperiri preliminare sunt deja aplicate n sistem e3pert i ntr-un domeniu numit logica fu%%> *fu%%> O vag -. )n alt domeniu de cercetare implic modul de construire a calculatoarelor$ ar.itectura sistemelor de calcul. Calculatorul von Beumann con!inea un singur procesor, dar mul!i ingineri sunt de prere c urmtoarea genera!ie va cuprinde calculatoare cu prelucrare paralel care utili%ea% mai multe microprocesoare, permi!2nd astfel cre terea vite%ei i a eficien!ei. / posi(il ca procesoarele viitorului s fie construite utili%2nd noi materiale. ?n domeniul ingineriei electrice i a calculatoarelor se desf oar o competi!ie str2ns privind crearea unui supraconductor via(il. ,aterialele supraconductoare repre%int semiconductori care opun mult mai pu!in re%isten! la trecerea curentului electric. O re%isten! mai mic nseamn mai pu!in cldur, o vite% crescut i o eficien! superioar. Au fost descoperite o serie de materiale care pre%int propriet!i supraconductoare, dar numai la temperaturi e3trem de sc%ute, care ar face ca o %i de iarn n Artica s par incredi(il de clduroas. )n supraconductor ce ar permite utili%area la o temperatur normal ar implica nu numai o vite% mare, dar ar elimina i dispo%itivele de rcire de mari dimensiuni utili%ate de calculatoare pentru a disipa cldura produs de cipurile semiconductoare. O alt component a te.nologiei din genera!ia a cincea este dispo%itivul de stocare optic. Stocarea optic utili%ea% te.nologia laser pentru scrierea i citirea informa!iilor. 0ispo%itivele cu laser au dou avantaje$ capacitatea i dura(ilitatea. Compact-discurile utili%ate pentru stocare au o capacitate incredi(il i pot con!ine o cantitate de informa!ii de mii de ori mai mare dec2t (en%ile sau discurile magnetice de aceea i dimensiune. 4aserul nu atinge de fapt suprafa!a discului, deci discurile optice sunt mai pu!in fragile dec2t alte forme de stocare. 0e fapt, dicurile optice repre%int numai nceputul$ deja a fost construit prototipul unui cu( de stocare optic. Acesta, similar cu(urilor de stocare din filmul Star Hre1, poate con!ine un volum de informa!ii de sute de ori mai mare dec2t discurile optice.

3.Concepte de baz
"nterfa!a dintre sistemul de operare i programul utili%ator este definit de mul!imea de Kinstruc!iuni e3tinseK pe care le furni%ea% sistemul de operare. Aceste instruc!iuni e3tinse sunt cunoscute n mod tradi!ional ca apeluri sistem de i ele pot fi 19

Aritoni Ovidiu

Sisteme de operare 1

mplementate n diverse moduri la ora actual. 'entru a n!elege cu adevrat ceea ce face sistemul de operare, tre(uie s e3aminm aceast interfa! foarte ndeaproape. Apelurile sistem disponi(ile n interfa! varia% de la un sistem de operare la altul. Suntem for!a!i s facem o alegere ntre vagi generalit!i *KSO au apeluri sistem pentru fi iere ce pot fi cititeK- i c2teva SO specifice *K,"B"P are un sistem de apeluri pentru citire cu ; parametri$ unul pentru a specifica fi ierul, altul pentru a spune unde tre(uie depuse datele, i altul pentru a spune c2!i (i!i tre(uie citi!iK-. Am ales a adar ultima modalitate de a(ordare. /ste mai mult de lucru n acest mod, dar aceast variant ofer detalii mai n amnunt asupra ceea ce face SO. ?n sec!iunea urmtoare vor fi de%(tute ndeaproape apelurile de sistem. 0in motive de simplitate ne vom referi doar la sistemul de operare ,"B"P, dar majoritatea dintre apelurile de sistem )B"P corespun%toare sunt (a%ate pe standardul 'OS"P. ?nainte de a privi apelurile sistem, totu i, merit s avem o privire de ansam(lu asupra sistemului de operare )B"P, pentru a o(!ine o idee general asupra ceea ce este un sistem de operare. Aceast privire de ansam(lu se poate reali%a la fel de (ine i asupra sistemului de operare )B"P. Apelurile sistem se pot mpr!i n modul (rutal n # categorii$ prima legat de procese& a doua cu privire asupra sistemului de fi iere& Boi vom e3amina fiecare dintre acestea n continuare.

A. Procese
)n concept de (a% n ,"B"P, i n toate sistemele de operare, este cel de proces. )n proces este n mod intuitiv un program n e3ecu!ie. Asociat fiecrui proces este spa!iul de adrese, adic o list de loca!ii de memorii de la un minim de o(icei %ero la un ma3im pe care procesul poate sa le citeasca si sa le scrie. Spa!iul de adrese con!ine programul e3ecuta(il, datele programului i stiva. 0e asemenea asociate cu fiecare proces sunt seturile de regi inclusand programul de conta(ili%are ,pointerul de stiv, regi trii .ardware, i orice alte informa!ii necesare pentru a rula un program. Be vom ntoarce asupra conceptului de proces n detaliu n capitolul #, dar pentru moment, cel mai simplu mod pentru a avea o (un idee intuitiv despre procese este s ne g2ndim la sistemele distri(uite. 'eriodic, sistemul de operare decide oprirea rulrii unui proces i pornirea rulrii altuia, de e3emplu, deoarece primul a (eneficiat in ultimle secundde mai mult de procesor decat a avut dreptul . C2nd un proces a fost suspendat temporar ca acesta, el tre(uie repornit mai t2r%iu n e3act aceea i form n care era c2nd a fost oprit. Aceasta nseamn c toate inform!iile despre proces tre(uie salvate e3plicit undeva n timpul suspendrii. 0e e3emplu un proces are de desc.is mai multe fi iere pentru citire sau scriere. Asociat cu fiecare dintre aceste fi iere este un pointer ce indic po%i!ia curent *de e3emplu numrul de (i!i sau articolul ce urmea% a fi citit-. C2nd un proces este suspendat temporar to!i ace ti pointeri tre(uie salva!i astfel ca un apel de citire e3ecutat dup repornirea procesului s citeasc datele corect. ?n multe sisteme de operare, toate informa!iile despre fiecare proces, altele 11

Aritoni Ovidiu

Sisteme de operare 1

dec2t con!inutul spa!iilor sale de adrese, sunt stocate ntr-un ta(el al sistemului de operare numit ta(ela proceselor, care este un ta(el *sau o list nln!uit- de structuri, c2te una pentru fiecare proces curent e3istent. Astfel, un proces este repre%entat de spa!iile sale de adrese, numit u%ual core image i ta(ela de intrri ale procesorului care con!ine regi trii alturi de alte lucruri. "deea managementului proceselor i a apelurilor sistem este rela!ia dintre crearea i terminarea proceselor. S considerm un e3emplu tipic. )n proces numit intrepretor de comen%i sau s.ell cite te comen%i de la un terminal. )tili%atorul tocmai tastea% o comand cer2nd ca programul s fie compilat. S.ell-ul tre(uie acum s cree%e un nou proces ce va rula compilatoral. C2nd acel proces va termina compilarea, el va e3ecuta un apel sistem pentru a se opri. 0ac un proces poate creea unul sau mai multe procese *a a numitele procese fiui aceste procese n ac!iune pot s cree%e procese fiu, ajungem la un ar(ore al proceselor structurat ca n figura urmtoare$

:, C = procese fiu ale lui A& 0, /, F = procese fiu ale lui :& +ela!ia dintre procese se (a%ea% pe cooperarea care are ca scop o(!inerea de noi sarcini, comunicarea cu alte procese i sincroni%area ac!iunilor lor. Aceast comunicare se nume te "'C *interprocess comunication- i va fi tratat pe larg n capitolul #. Alt proces de apelari ale sistemului sunt disponi(ile pentru a solicita mai multa memorie sau a eli(era memorie neutili%ata ,sa astepte ca un proces su(ordonat sa se inc.eie si sa isi suprapuna programul pe unul dieferit . )neori, e3ist o nevoie de a transmite o informa!ie la un proces n rulare care nu st n a teptarea pentru aceasta. 0e e3emplu, un proces care comunic cu un alt proces de pe un calculator diferit tre(uie s transmit mesaje n re!ea. 'entru a ne proteja mpotriva posi(ilit!ii ca un mesaj sau rspunsul su s fie pierdut, e3peditorul poate cere sistemului de operare s l anun!e dup un numr specificat de secunde dac i poate retransmite procesului orice efectuea% procesul n acel timp, salvarea regi trilor si pe stiv, i porne te un semnal special pentru o procedur de tratare, de e3emplu, de a retransmite 1#

Aritoni Ovidiu

Sisteme de operare 1

semnalul presupus pierdut. C2nd semnalul de tratare este emis procesul este repornit n aceea i stare n care era nainte de primirea semnalului. Semnalele sunt analogul software al ntrruperilor .ardware i pot fi generate de o serie de cau%e sau de e3pirarea timpului. ,ulte capcane detectate de .ardware, ca e3ecutarea unei instruc!iuni ilegale sau utili%area unei adrese invalide, sunt convertite de asemenea n semnale de oprire a proceselor. Fiecrei persoane autori%ate s utili%e%e ,"B"P i este asociat un )"0 *user indentification- de ctre administratorul de sistem. Fiecare proces pornit n ,"B"P are )"0-ul persoanei care l-a pornit. )n proces fiu are acela i )"0 cu al printelui. )n uid, numit super-user, are o putere special, i poate viola multe dintre regulile de protec!ie. ?n re!elele mari, doar administratorul cunoa te parola pentru a deveni super-user, dar mul!i dintre utili%atorii o(i nui!i depun un efort considera(il pentru a ncerca s gseasc o sl(iciune a sistemului care s le permit s devin super-useri fr parol.

B. Fiiere
O alt larg categorie de apeluri sistem se refer la sistemul de fi iere. O func!ie major a sistemului de operare este de a ascunde particularit!ile discurilor i de a altor ec.ipamente de "ntrare@"e ire i de a pre%enta programatorului intr-un model a(stract curat si ingrijit de fisiere independente de dispo%itiv . Apelurile de sistem sunt vdit inten!ionate s cree%e, s mute, s citeasc i s scrie fi iere. ?nainte ca un fi ier s fie citit, el tre(uie s fie desc.is, i dup aceasta el tre(uie nc.is dup citire, astfel c apelurile-sistem sus!in aceste lucruri. 'entru a furni%a un loc unde s fie !inute fi ierele, ,"B"P are implementat conceptul de director ce desemnea% o modalitate de grupare a fi ierelor mpreun. )n student de e3emplu, tre(uie s ai( un director pentru fiecare curs la care particip, altul pentru po ta electronic, i nc un director pentru propria pagin www. Apelurile sistem sunt astfel nevoite s cree%e sau s mute directoare. Apelurile sistem sunt prev%ute astfel ca s poat introduce sau scoate fi iere din directoare. Con!inutul unui director este format de o(icei din directoare i fi iere. Acest model ofer de asemenea o structur ierar.ic ca n figura urmtoare$

1;

Aritoni Ovidiu

Sisteme de operare 1

(ig 1-6. )n sistem de fisiere pentru un departament universitar

'rocesele i ierar.ia de fi iere sunt organi%ate ca i ar(ori, dar similarit!ile se opresc aici. "erar.ia de procese nu este foarte ad2nc *nu are mai mult de ; nivele-, n timp ce ierar.ia fi ierelor are n mod u%ual G, < sau c.iar mai multe nivele de ad2ncime. "erar.ia proceselor are n general o via! scurt, de doar c2teva minute n timp ce ierar.ia directoarelor poate supravie!ui ani de %ile. 'ropriet!ile i modalit!ile de protec!ie de asemenea difer de la procese la fi iere. )%ual, doar un printe-proces poate s ai( controlul sau c.iar accesul la un proces-copil, dar mecanismele aproape ntotdeauna e3ist pentru a permite fi ierelor i directoarelor s fie citite de catre un grup mai mare nu doar de catre proprietar . Fiecare fi ier cu ierar.ia sa de directoare poate fi specificat prin introducerea numelui cii *pat. name- din v2rful ierar.iei de directoare, din directorul administratorului *root director>-. Astfel numele cii a(solute con!ine o list de directoare ce tre(uie traversate din root director> pentru a o(!ine fi ierul, cu slas.-uri ce separ componentele. Slas.urile de legtur indic faptul c numele cii este a(solut. 4a fiecare moment, fiecare proces are un director de lucru curent, n care numele cii nu ncepe cu un slas. . Ca de e3emplu, n ultima figur, dac @Facult>@'rof :rown ar fost directorul de lucru, atunci utili%area numelui de cale Courses@CS191@ ar duce la acelasi fisier ca si numele de cale de ami sus . 1G

Aritoni Ovidiu

Sisteme de operare 1

'rocesele pot sc.im(a directorul lor de lucru prin emiterea unui apel sistem ce specific noul director de lucru. Fi ierele i directoarele sunt protejate n ,"B"P prin asignarea unui cod de protec!ie pe F (i!i. Codul de protec!ie con!ine ; c2mpuri de (i!i, unul pentru proprietar, unul pentru mem(rii grupului proprietarului i unul pentru orice alt persoan. Fiecare c2mp are un (it pentru accesul n citire, un (it pentru accesul n scriere, i altul pentru accesul n e3ecu!ie. Ace ti ; (i!i sunt cunoscu!i ca (i!i rw3. 0e e3emplu, codul de protec!ie rw3 r-3--3 nseamn c proprietarul poate citi, scrie i e3ecuta fi ierul, al!i mem(rii ai grupului proprietarului pot s citeasc i s e3ecute fi ierul n timp ce orice alt persoan poate doar s l e3ecute. 'entru directoare 3 nseamn permisiunea de cutare. O liter a(solut nseamn c dreptul respectiv nu este permis. ?nainte ca un fi ier s poat fi citit sau scris, el tre(uie desc.is, moment n care permisiunea este verificat. 0ac accesul este permis, sistemul returnea% un ntreg mic denumit descriptor de fi ier *file descriptor- pentru a-l utili%a n urmtoarele opera!ii. 0ac accesul nu este permis, un cod de eroare este returnat. Alt concept important n ,"B"P este montarea sistemului de fi iere. Aproape toate 'C = urile au unul sau mai multe drivere de flopp>-dis1 n care flopp>-discurile pot fi inserate sau mutate. 'entru a furni%a o cale simpl de a ocupa de aceste discuri amovi(ile *C0-+O,, flopp>-dis1-. ,"B"P ofer sistemului de fi iere de pe un flopp>dis1 s fie ata at ar(orelui principal de fi iere. Considerm situa!ia din figura urmtoare$

(ig 1-#. *a- "nainte de montare fisierele de pe drive-ul 9 nu sunt accesi(ile *(- 0upa montare ele fac parte din ierar.ia fisierelor ?naintare de apelul de montare *,O)BH call-, discul +A, con!ine fi ierul administratorului de sistem sau i driverul O con!ine flopp> discul ce con!ine la r2ndul su alt sistem de fi iere. Ori de c2te ori, sistemul de fi iere de pe driverul O nu poate fi utili%at se datorea% faptului c nu e3ist un mod de a specifica numele cii. ,"B"P nu permite ca numele cii s fie prefi3at de numele sau numrul unui driver.?n sc.im(, apelurile sistem de montare permit sistemului de fi iere de pe driverul O s fie ata ate sistemului de 1<

Aritoni Ovidiu

Sisteme de operare 1

fi iere ale administratorului de sistem *root- oriunde decide programul ca acestea sa fie atasate . ?n ultima figur sistemul de fi iere de pe driverul O a fost montat n directorul (, acesta permi!2nd accesul la fi ierele (@3 i (@>. 0ac directorul ( ar fi con!inut orice alte fi iere care nu ar fi fost accesi(ile n timp ce driverul O a fost montat, prin @( ne-am fi referit la directorul administratorului despre driverul O. )n alt concept important n ,"B"P este cel de fi iere speciale. Fi ierele speciale fac ca dispo%itivele de "@O s arate ca ni te fi iere. Astefel ele pot fi citite si scrise utili%anad aceleasi apeluri sistem care sunt utili%ate pentru citirea si scrierea fisierelor . /3ist # tipuri speciale de fi iere$ fi ierele speciale de tip (loc *(loc1 special files-& fi ierele speciale de tip caracter *c.aracter special files-& Fi ierele speciale de tip (loc sunt utili%ate pentru a modela dispo%itivele constituite din colec!ii aleatoare de (locuri adresa(ile, ca de e3emplu discurile. 'rin desc.iderea unui fi ier special i citirea, s %icem a (locului G, programul are acces direct asupra celui de-al patrulea (loc de pe dispo%itiv, fr s ai(e o privire asupra structurii de fi iere ce o con!ine. Similar, fi ierele speciale de tip caracter sunt utili%ate pentru imprimante, modemuri i alte dispo%itive care accept un flu3 de caractere. )ltima trstur pe care o vom trata n aceast pre%entare general este una care reali%ea% legtura dintre fi iere i procese $ pipe *conduct-. )n pipe este un tip de pseudofi ier ce poate fi utili%at pentru a conecta dou procese mpreun ca n figura urmtoare&

(ig 1-). 0oua procese conectate prin pipe C2nd procesul A dore te s transmit informa!ii procesului :, el le scrie pe pipe a a cum ar scrie pe un fi ier de ie ire. Astfel comunicarea dintre procese n ,"B"P arat foarte mult ca fi ierele o(i nuite pot fi citite sau scrise."n plus crearea unui apel sistem special este singurul mod in care un proces poate sa descopere ca outputul pe care scrie nu este tocmai in fisier ci in pipe .

C. Shell ul
,"B"P este un sistem de operare care duce afar apelurile sistem. /ditoarele, compilatoarele, ansam(loarele, lin1-editoarele, interpretoarele de comen%i nu sunt o parte a sistemelor de operare, c.iar dac sunt importante i des utili%ate.Cu riscul crearii confu%iei intr-o oarecare masura in acesta sectiune vom anali%a pe scurt s.ell*interpretor- care desi nu face parte din sitemul de operare utili%ea%a foarte multe parti ale acestuia si de aceea serveste ca un (un e3emplu pentru modul in care pot fi utili%ate apelurile sistem . 17

Aritoni Ovidiu

Sisteme de operare 1

S.ellul este de asemena interfa!a primar dintre utili%ator ce st n fa!a unui terminal i sistemul de operare. C2nd orice alt utili%ator se login-ea%, s.ell-ul este pornit. S.ell consider terminalul at2t standard input c2t i standard output. /l porne te prin tastarea pe prompter a unui caracter ca un dollar *Q- care spune utili%atorului c s.ell = ul a teapt o comand. 0ac se tastea% Q date de e3emplu, s.ell creea% un proces fiu i rulea% programul date ca i fiu. ?n timp ce procesul date rulea% s.ellul l a teapt pentru a termina. C2nd procesul fiu a terminat, s.ell tipre te din nou prompterul i ncearc s citeasc urmtoarea line de comand. )tili%atorul poate specifica ca fi ierul standard output s fie redirectat spre un fi ier de e3emplu$ date R file Similar, fi ierul standard input poate fi redirec!ionat a a dup cum urmea% sort Sfile1R file # care invoc programul sort care s preia din file 1 i s trimit lui file #. Output-ul unui program poate fi utili%at ca i input pentru alt program, conectat cu primul printr-un pipe. Astfel cat file1 file# file; @sortR@dev@lp invoc programul cat pentru a concatena ; fi iere i s trimit outputul programului sort care va aranja toate liniile n ordine alfa(etic. Outputul programului sort este redirectat n fi ierul @dev@lp, care este un nume tipic pentru fi ierele special de tip caracter pentru imprimant. *'rin conven!ie, toate fi ierele speciale sunt re!inute n directorul @dev-. 0ac un utili%ator pune semnul T dup o comand, s.ell-ul nu a teapt s fie terminat comanda, i afi ea% imediat prompterul utili%ator. 'rin urmare comanda$ cat file1 file# file; @sortR@dev@lp T porne te sortarea fi ierelor n (ac1ground, n timp ce utili%atorul continu lucre%e normal n paralel ce sortarea se efectuea%. S.ell-ul are un numr mare propriet!i interesante, dar nu avem specificul necesar de%(aterii acestui su(iect aceast carte. 'entru mai multe detalii citi!i referin!ele despre s.ell-ul sistemului operare )B"P. s de n de

1E

Aritoni Ovidiu

Sisteme de operare 1

4.*!ruc!uri de i !eme de o$erare

A. Sisteme monolitice

0e departe, cea mai comun organi%are, acestei a(ordri i se poate da numele de marele de%astru. Structura este aceea c nu e3ist structur. Sistemul de operare este scris ca i o colec!ie de procedeuri dintre care fiecare poate apela pe oricare din celelalte oric2nd e nevoie. C2nd aceast te.nic este folosit fiecare procedur din sistem are o interfa! (ine definit n termeni de parametri i re%ultate i fiecare este li(er s apele%e oricare alt procedur dac cea din urm furni%ea% calcule folositoare de care are nevoie cea dint2i. 'entru a construi programul o(iect al sistemului de operare atunci c2nd aceast manier este folosit tre(uie s compile%i toate procedurile individual sau fi ierele ce con!in procedurile i apoi s le legi pe toate mpreun ntr-un singur fi ier-o(iect cu un lin1-editor. ?n termeni de ascundere a informa!iei fiecare procedur este vi%i(il oricrei alte proceduri *opus unei structuri ce con!ine module sau pac.ete n care mare parte de informa!ie este ascuns n interiorul modulului n care doar punctele de intrare special desemnate pot fi apelate din e3teriorul modulului.-.

(ig 1-16. Cum poate fi facut un appel sistem $ *1- programul utili%ator se atasea%a 1ernel-ului. *#- sistemul de operare determina numarul serviciului solicitat. *;- sistemul de operare apelea%a procedura de serviciu. *G- controlul se intoarce la programul utili%ator

Oricum c.iar n sistemul monolitic este posi(il s ai o structur mic. Serviciile *apelurile sistemului- furni%ate de SO sunt necesare pentru a pune parametrii n locuri (ine definite ca de e3emplu n registre sau pe stiv, i apoi pentru a e3ecuta o instruc!iune capcan special cunoscut ca Aernell-call sau apelul superviserului *superviser-call-. 18

Aritoni Ovidiu

Sisteme de operare 1

Aceast instruc!iune sc.im( ma ina de la modul user la modul Aernel i transfer controlul la sisteme de operare, artat ca eveniment *n figura 1.17,ulte dintre C') au dou moduri$ Aernel mod pentru sisteme de operare n care toate instructiunile sunt permise i user mod pentru programele user n care "@O i alte instruc!iuni nu sunt permise. Apoi sistemul de operare e3aminea% parametrii apelrii pentru a determina care apelare tre(uie efectuat. *ve%i fig. 1.17- apoi, sistemul de operare inde3ea% ntr-un ta(el ce con!ine un pointer n celula A ctre procedura care efectuea% apelul sistem A. Acest opera!ie artat n figura 1.17 identific procedura de serviciu, care este apoi apelat. C2nd sarcina i apelul sistem sunt terminate controlul este napoiat programul user a a c poate com(ina e3ecutarea cu declara!ia urmtorului apel de sistem. *pasul GOrgani%area sugerea% structura de (a% pentru SO$ 1.)n program principal care apelea% procedura de serviciu cerut& #.)n set de proceduri de serviciu care ndeplinesc apelurile sistem& ;.)n set de proceduri utilitare care ajut procedurile serviciu. ?n acest model pentru fiecare apel sistem e3ist o procedur de serviciu care are grij de el. 'rocedeurile utili%ate fac lucruri de care au nvoie c2teva proceduri de serviciu ca de e3emplu transmiterea datelor de la programele user. Aceast mpr!ire a procedurilor n ; straturi este artat n figura 17 $

(ig 1-1#. )n model simplu de structurare pentru un sistem monolitic

B.Sisteme stratificate
O generali%are a mamierei din fig. 1.1E este a organi%a sistemele de operare ca o ierar.ie de straturi, fiecare strat constuit pe cel de su( el. 'rimul sistem construit n acest fel a fost sistemul HD/ construit la Hec.nisc.e Dogesc.ool /ind.oven n Olanda de /$J$ 0ij1s.ra *1F78- i studen!ii lui. Sistemul HD/ a fost un simplu sistem teanc pentru un computer olande%, /lectrologica 38 care a avut ;# A(>tes i #E-(it words *(i!i erau cu mult napoia!i-. 1F

Aritoni Ovidiu

Sisteme de operare 1

Sistemul avea 7 nivele a a cum este artat n figura 1.18. Bivelul O a(ordea% *tratea%- reparti%area procesorului, sc.im(ul dintre procese c2nd au loc ntreruperii i e3pir timpii. 0easupra stratului O sistemul con!inea procese secven!iale, fiecare put2nd fi programat fr a tre(ui s te ngrijore%i de faptul c mai multe procese rulau pe un singur procesor. ?n alte situatii stratul O permitea multiprogramarea procesorului.

(ig 1-1). Structura sistemului de operare HD/ Stratul 1 reali%a administrarea memoriei aloca spa!iu pentru procesele din memoria principal i pe un cuv2nt de <1# A folosit pentru a !ine pr!i din procesele pentru care nu era spa!iu n memoria principal. 0easupra nivelului 1, procesele nu erau nevoite s se ngrijore%e dac erau n memorie principal sau n memoria au3iliar *cuv2nt <1# A-. Softul de pe stratul 1 se asigura c paginile erau aduse n memorie oric2nd era nevoie de ele. Stratul # asigura comunicarea dintre fiecare proces i consola operator. 0easupra acestui nivel fiecare proces avea efectiv propria lui consol. Stratul ; avea grij de administrarea dispo%itivelor de "@O i (uffleri%area streamurilor de informa!ii ctre i dinspre ele. 0easupra stratului ; fiecare proces putea trata dispo%itivele a(stracte de "@O cu prpriet!i drgu!e n loc de dispo%itive reale cu multe curio%it!i. Stratul G era locul unde se gseau programele user. /le nu tre(uiau s se ngrijore%e de proces, memorie, consol, administrare "@O. 'rocesele sistemelor de operare erau locali%ate n stratul <. O generali%are mai ampl a conceptului de stratificare era sistemul ,)4H"CS. ?n loc de straturi ,)4H"CS era organi%at ntr-o serie de inele concentrice, cele din interior fiind mai privilegiate dec2t cele din e3terior. C2nd o procedur dintr-un inel e3terior vroia s apele%e o procedur dintr-un inel interior tre(uia s fac ec.ivalentul unui apel sistem care este o instruc!iune-capcan *instruc!iune-trap- ai cror parametrii erau cu aten!ie verifica!i pentru validare nainte de a permite nceperea apelului. 0e i ntregul sistem de operare era parte a spa!iului adres a fiecrei proces user n ,)4H"CS .ardul fcea posi(il desemnarea procedurilor individuale, memorie, segmente *momentan protejate mpotriva "@O sau e3ecutrii-. ?n timp ce sc.ema stratificrii sistemului HD/ era doar un desen ajuttor deoarece toate pr!ile sistemului erau n cele din urm legate mpreun ntr-un singur programo(iect n ,)4H"CS mecanismul inelelor era foarte mult pre%ent la rulare i constr2ns de .ard-ware. Avantajul mecanismului inelelor este c poate fi u or e3tins la o structur de su(sisteme user. 0e e3emplu un profesor putea s scrie un program ca s teste%e programele studen!ilor i s rule%e acest program n nivelul B iar programele studen!ilor s rule%e n inelul B U 1 astfel nc2t s nu- i poat sc.im(a rangul. #9

Aritoni Ovidiu

Sisteme de operare 1

C. Maini virtuale
Sistemele generate din OS@;79 erau n mod strict n sisteme stratificate. Hotu i, mul!i utili%atori ai OS ;79 vroiau s ai( un time-s.aring a a c multe grupuri at2t din interiorul c2t i din e3teriorul ":,-ului s-au decis s reali%e%e sisteme cu time-s.aring. Sistemul time-s.aring oficial al ":,, HSS@;79 a fost scos pe pia! t2r%iu i c2nd n cele din urm a ajuns era at2t de mare i ncet incat pu!ine pie!e s-au convertit la el. ?n cele din urm a fost a(andonat dup ce de%voltarea lui a costat <9 milioane de Q *Ira.am 1FE9-. 0ar un grup de la centrul tin!ific al ":,-ului n Cam(ridge ,assac.usetts, a produs un sistem radical diferit pe care n cele din urm ":, l-a acceptat ca i produs i care este acum mult folosit pe sc.ema lui principal. Sistemul original numit C'@C,S i mai t2r%iu renumit 5, ;E9 *1FEF- era (a%at pe o ireat o(serva!ie$ un sistem time-s.aring ofer multiprogramare i o ma in e3tins cu o mult mai convena(il interfa! dec2t .ardul gol. /sen!a lui 5, ;79 este de a separa complet aceste # func!ii. "nima sistemului, cunoscut ca monitorul ma inii virtuale rulea% pe .ardul gol i face multiprogramarea, s furni%e%e nu unul ci mai multe ma inii virtuale a a cum este artat n figura 1.1F. Oricum,spre deose(ire de majoritatea sistemelor, aceste ma ini virtuale nu sunt ma ini e3tinse, cu fi iere i alte propriet!i drgu!e. ?n sc.im( ele sunt copii e3acte ale .ardului Kde%golitN inclu%2nd modul Aernel, modul user, dispo%itivele "@O, ntreruperi i orice altceva ce are ma ina real.

(ig 1-19. Structura 5,@;E9 cu C,S 0eaoarece fiecare ma in virtual este identic cu .ardul adevrat fiecare poate rula orice SO care va rula direct de pe .ardul Kde%golitN. 0iferite ma ini virtuale pot i fac asta frecvent, s rule%e diferite sisteme de operare. )nele rulea% unul din descenden!ii lui OS@;79 pentru procesare de tip stratificat sau de tip tran%ac!ie, n timp ce altele rulea% un singur sistem interactiv user numit C,S *Conversational ,on>tor S>stempentru utili%atorii. C2nd un program C,S e3ecut un pel sistem, apelul este (locat la sistemul de operare n propria sa ma in virtual, nu la 5, ;E9, cum ar tre(ui dac ar rula pe o ma in real n loc de una virtual. C,S editea% instruc!iuni .ardware de "@O pentru a citi discul lui virtual sau pentru orice este necesar efecturii apelului. Aceste instruc!iuni de "@O sunt (locate de 5,@;E9 care apoi le e3ecut ca parte a simulrii .ardului real. #1

Aritoni Ovidiu

Sisteme de operare 1

Fc2nd o separare complet a func!iilor multiprogramrii i furni%2nd o ma in e3tins fiecare din piese poate fi mult mai simpl, mai fle3i(il i mai u or de men!inut. "deea de ma in virtual este mult folosit n %ilele noastre ntr-un contact diferit$ rularea vec.ilor programe ,S-0OS pe un 'entium *sau pe un alt procesor "ntel pe ;# de (i!i.- C2nd au fost concepute 'entiumul i softul su at2t "ntel c2t i ,icrosoft credeau c va fi o cerere mare de rulare a ve.icului soft pe noul .ardware. 0in acest motiv "ntel a furni%at un model 8987. ?n acest mod ma ina se comport ca un 8987 *care este identic cu 8988 din punct de vedere al softului- inclu%2nd adresarea pe 17 (i!i cu limit de 1 ,:. Acest model este folosit de Jindows OS@N i alte sisteme de operare pentru rularea programelor ,S-0OS. Aceste programe sunt pornite n modul virtual 8987. At2ta timp c2t programele e3ecut instruc!iuni normale rulea% pe un .ardware de%golit. Oricum c2nd un program ncearc s se de(loc.e%e n sistemul de operare, s fac un apel sistem, sau ncearc s fac direct dispo%itive "@O protejate, se declan ea% o de(locare n monitorul ma ini virtuale. 0ou variante sunt posi(ile. 4a prima ,S-0osul este ncrcat pe spa!iul de adres al lui 8987 virtual, astfel c monitorul ma in virtuale doar reflect de(locarea napoi la ,S-0OS a a cum s-ar nt2mpla pe un 8987 real. C2nd mai t2r%iu ,S-0OS ncearc s fac singur dispo%itivele de "@O acea opera!ie este prins i efectuat de monitorul ma inii virtuale. ?n alt variant monitorul ma inii virtuale prinde prima de(locare i face singur dispo%itivele de "@O, din moment ce tie ce sunt toate apelurile sistem ,S-0OS i astfel tie ce tre(uie s fac fiecare de(locare. Aceast variant este mai pu!in pur dec2t prima din moment ce doar emulea% n mod corect din ,S-0OS i nu din alte sisteme de operare a a cum face primul. 'e de alt parte este mult mai rapid din moment ce elimin pro(lema pornirii ,S-0OS ului s fac dispo%itivele de "@O. )n alt de%avantaj al rulrii ,S-0OS ului n modul virtual 8987 este acela c Vse joacN cu (itul de ntrerupere 9@1 destul de mult. Bu a meritat efortul conceperii unui 8987 din moment ce ma ina fiind re%ultat din 'entium nu este un 'entium complet. Cu un sistem 5, ;E9 este posi(il s rule%i ), ;E9 de unul singur ntr-o ma in virtual. Cu 'entium nu este posi(il s rule%i un Jindows ntr-o ma in virtual 8987 deoarece nici o versiune a Jindows-ului nu poate rula pe un 8987. )n 187 este minim c.iar pentru o versiune vec.e i emula!ia #87 nu este pus la dispo%i!ie. Cu 5, ;E9 fiecare proces utili%ator o(!ine o copie e3act a computerului actual. Cu o ma in virtual 8987 pe 'entium, fiecare proces utili%ator o(!ine o copie e3act a unui computer diferit. ,erg2nd un pas mai departe, cercettorii de la ,.".H. au construit un sistem care d fiecrui utili%ator o clon a computerului actual dar cu un su(set de resurse. Astfel o singur ma in virtual o(tine (locuri pe disc de la 19#;, urmtoarea poate o(!ine (locuri de la 19#G la #9GE, .a.m.d. 4a (a%a stratului care rulea% n modul Aernel este un program *numit /POA/+B/4-. Func!ia lui este s aloce resurse ma inilor virtuale i apoi s verifice ncercrile de a le folosi pentru a se asigura c nici o ma in nu ncearc s foloseasc resursele altcuiva. Fiecare ma in virtual utili%ator pe minele poate rula propriul su sisteme de operare ca i pe ),- ;E9 i pe 'entium-urile virtuale 8987 numai c fiecare este constr2ns s foloseasc doar resursele pe care le-a cerut i care i-au fost alocate. Avantajul sc.emei e3oAernel este acela c economise te un nivel din proiect. ?n alte proiecte fiecare ma in virtual crede c are propriul su disc cu (locuri rul2nd de la 9 la ma3im, a a c monitorul ma inii virtuale tre(uie s men!in ta(ele, s redefineasc adresele discului. * i toate celelalte resurse-. Cu e3oAernel aceast ##

Aritoni Ovidiu

Sisteme de operare 1

redefinire nu este necesar. /3oAernelul tre(uie doar s conta(ili%e%e crei resurse a fost atri(uit ma ina virtual. Aceast metod nc are avantajul de a separa multiprogramarea *n e3oAernel- de codul sistemului de operare user *n spa!iul user- astfel nc2t ma inile virtuale s fie separate dar totu i apropiate.

. Modelul client!server

), @ ;E9 c2 tig mult n simplitate mut2nd o mare parte a codului de operare tradi!ional *suplementarea ma inii e3tinse- ntr-un strat superior, C,S. Hotu i, 5, ;E9 nsu i este nc un program comple3 deoarece simularea unui ;E9 nu este a a de simpl *n special dac vrei s faci acest lucru eficient-. Hendi!a n sistemele de operare moderne este de a aduce aceast idee a mutrii codului n straturile superioare, mai departe i s o ndeprte%e de sistemul de operare, ls2nd un Aernel minim. ,aniera u%ual este de a implementa majoritatea func!iilor sistemelor de operare n procesele user. A cere un serviciu ca de e3emplu s cite ti un (loc de fi iere, un proces user *acum cunoscut ca proces client- trimite o cerere la proces client- trimite o cerere la procesul server, care apoi face munca i trimite napoi rspunsul.

(ig 1-2+. ,ode'u' c'ien!- erver ?n acest model artat n figura 1.#9 tot ce face Aernelul este s asigure comunicarea dintre clien!i i servere. ?mpr!ind sistemele de operare n diferite pr!i dintre care fiecare doar se ocup de o singur fa!et a sistemului ca de e3emplu serviciul de fi ier, serviciul de proces, serviciul terminal sau serviciul de memorie, fiecare parte devine mic i u or de administrat. ,ai departe pentru c toate servele rulea% ca procese user i nu n mod Aernel nu au acces direct la .ardware. Ca i consecin! dac un (ug este n serverul de fi iere, serviciul de fi iere se poate pr(u i, dar aceasta de o(icei nu distruge ntreaga ma in. Alt avantaj al modelului client server este adapta(ilitatea lui la folosirea sistemelor distri(uite. 0ac un client comunic cu un server trimi!2ndu-i mesaje, clientul nu e nevoie s tie dac mesajul este anali%at local, sau n propria sa ma in sau dac a fost trimis prin re!ea la un server pe o ma in i%olat. ?n ceea ce l prive te pe client acela i lucru se nt2mpl n am(ele ca%uri$ O cerere este trimis i un rspuns se ntoarce #;

Aritoni Ovidiu

Sisteme de operare 1

(ig 1-21. ,odelul client-server intr-un sistem distri(uit "maginea de mai sus a Aernelului care se ocup doar de transmiterea mesajului de la clien!i la servere i napoi nu este complet real. Anumite func!ii ale sistemelor de operare *ca de e3emplu ncrcarea comen%ilor n registre fi%ice de "@O- sunt dificil dac nu c.iar imposi(il de reali%at de la un program user la altul. /3ist # ci de a trata aceast pro(lem, una este de a avea c2teva procese critice pe server *ca de e3emplu driverele de intrare-ie ire de fapt rulate n modul Aernel- cu acces complet la totul .ardul dar care nc comunic cu alte procese folosind mecanismul normal de transmitere a mesajelor. Cealalt cale este de a construi o cantitate minim de KmecanismN *algoritm- n Aernel dar s lase totu i deci%iile de tip polic> la ndemnarea servelor n spa!iul user. 0e e3emplu Aernelul ar putera recunoa te c un mesaj trimis la o anumit adres nseamn s ia con!inutul acelui mesaj i s l ncarce n registre de "@O pentru un disc, cu scopul de a porni citirea discului. ?n acest e3emplu Aernelul nici mcar nu ar inspecta (i!i din mesaj s vad dac sunt vali%i sau nu, pur i simplu i-ar copia n regi trii discului *desigur tre(uie folosite anumite sc.eme pentru limitarea a astfel de mesaje doar ctre procesele autori%ate- 0espr!irea dintre mecanisme i polic> este un concept important i se repet continuu n sistemele de operare n diferite conte3te.

#G

Aritoni Ovidiu

Sisteme de operare 1

Procese

#<

Aritoni Ovidiu

Sisteme de operare 1

1.-n!roducere

,ajoritatea calculatoarelor moderne pot s efectue%e n acela i timp mai multe lucruri. ?n timp ce rulea% un program utili%ator, calculatorul poate de asemenea s citesc de pe disc sau s afi e%e un te3t pe ecran sau la imprimant. ?n sistemele multiprogramare, C') de asemenea ntrerupe program dup program, rul2ndu-l pe fiecare c2teva sute de milisecunde. ?n timp ce, strict vor(ind, la orice moment al timpului C') rulea% un singur program, n decurs de 1 secund, el efectuea% o mul!ime de programe, oferind ilu%ia utili%atorilor de paralelism. )neori oamenii vor(esc de pseudoparalelism pentru a n!elege acest sc.im(are nainte i napoi a C') ntre programe, n contrast cu adevratul paralelism Dardware a sistemelor multiprocesor *care au # sau mai multe C') distri(uite la aceea i memorie-. Activit!ile paralele sunt greu de efectuat de ctre oameni deoarece au consecin!e multiple. 'rin urmare, designul SO a evoluat de-a lungul anilor la un model care face

A. Modele de procese
?n acest model tot softul care rulea% pe computer deseori inclu%2nd i sistemul de operare este organi%at ntr-un numr mare de procese secven!iale sau pe scurt procese. )n proces este doar un program n e3ecu!ie inclu%2nd valorile curente ale programului de conta(ili%are a numrului registrele i varia(ilelor. Conceptual vor(ind fiecare proces are propriul su procesor virtual. ?n realitate, desigur procesorul real se sc.im( napoi i nainte de la proces la proces, dar pentru n!elegerea sistemului este mult mai u or s te g2nde ti la o colec!ie de procese rul2nd n paralel *pseudoparalelism- dec2t s ncerci s !ii urma felului cum un procesor se sc.im( de la program la program. Aceast sc.im(are rapid napoi i nainte este numit multiprogramare a a cum am v%ut n capitolul precedent. ?n figura #.1 *a- noi o(servm multiprogram2ndu-se patru programe n memorie. ?n figura #.1. *(- vedem G procese, fiecare cu propriul su control. */3emplu$ 'ropriul su #7

Aritoni Ovidiu

Sisteme de operare 1

program de conta(ili%are-, i fiecare rul2nd independent unul de altul. ?n figura #.1. *cnoi o(servm c privit dup un interval de timp au fcut procese dar la un moment dat de fapt doar un proces rulea%.

(ig 2-1. *a- ,ultiprogramarea a G programme. *(- ,odel conceptula a G procese independente,secventiale *c- "n orice moment e3ista un singur program activ Cu un procesor trec2nd napoi i nainte printre procese, rata la care un proces i reali%ea% calculele nu valorific i pro(a(il nici mcar nu poate fi reprodus dac acelea i procese rulea% din nou. Astfel procesele nu tre(uie programate cu presupuneri de timp implementate. S considerm de e3emplu un proces de "@O care ncepe o por!iune de program pentru a rea(ilita fi ierele de tip (ac1-up, e3ecut unn ciclu de 19.999 pentru a reveni la vite%a ini!ial i apoi generea% o comand pentru a citi prima nregistrare. 0ac procesorul decide s treac la un alt proces in timpul ciclului por!iunea de proces sar putea s nu rule%e din nou dec2t dup ce prima nregistrare a trecut de capul de citire. C2nd un proces are cerin!e critice de timp real ca acesta, ca de e3emplu anumite evenimente tre(uie s se nt2mple ntr-un numr specificat de milisecunde, msuri speciale tre(uie luate pentru a fi sigur c ele se nt2mpl. Oricum multe procese nu sunt afectate de multiprogramarea fundamental a procesorului, sau de vite%a relativ a diferitelor procese. 0iferen!a dintre un proces i un program este su(til dar crucial. O anaologie ne poate ajuta s clarificm aceast idee. S considerm un analist programator cu nclina!ii spre gastronomie care pregte te, o prjitur pentru %iua ficei lui. +e!eta pentru prjitur cu o (uctorie (ine dotat cu toate de intrare necesare$ fin, ou, %a.r, vanilie, .a.m.d. #E

Aritoni Ovidiu

Sisteme de operare 1

?n aceast analogie re!eta este programul *un algoritm e3primat ntr-un lim(aj potrivit-, programatorul este procesorul i ingredientele pentru prjitur sun datele de intrare. 'rocesorul este activitatea ce const in (uctarul care cite te re!eta , aduce ingredientele i prepar prjitura. Acum imagina!i-v c fiul programatorului intr n fug pl2ng2nd spun2nd c a fost n!epat de o al(in. 'rogramatorul nrregistrea% unde a rmas n reli%area re!elei *starea procesorului curent este salvat-, scoate o carte de prim ajutor i ncepe s urme%e instruc!iunile din ea. Aici o(servm cum procesorul trece de la un proces *pregtirea prjiturii- la un proces care are prioritate. *administrarea ajutorului medical- fiecare av2nd un program diferit *re!eta cr!ii de prim ajutor- c2nd n!eptura de al(in a fost ngrijit, programatorul se ntoarce la prjitur de la momentul n care a rmas. "deea c.eie aici este c un proces este o activitate de un anumit fel. Are un program, date de intrare, date de ie ire i un status. )n singur procesor poate fi mpr!it ntre c2teva procese, cu un anumit algoritm = sc.eduling fiind folosit s determine momentul opririi lucrului la un proces pentru a lucra la altul.

"erarhia de procese
Sistemul de operare care suport conceptul de proces tre(uie s furni%e%e o modalitate pentru a crea toate procesele necesare. ?n sistemele foarte simple, sau n sistemele concepute pentru a rula doar o singur aplica!ie *e3emplu$ controlarea unui dispo%itiv n timp real-, este posi(il s ai( toate procesele care vor fi vreodat necesare c2nd sistemul este pronit. Oricum n majoritatea sistemelor este necesar o modalitate de a crea i a distruge procesele necesare n timpul opera!iei. ?n ,"B"P procesele sunt create de apelul sistem for1, care crea% copia identic a procesului care apelea%. 'rocesul copil poate de asemenea e3ecuta for1, deci este posi(il s o(!in o ierar.ie de procese. ?n alte sisteme de operare, apelurile sistem e3ist pentru a crea un proces, pentru a ncrca memoria, i pentru a porni rularea. Oricare ar fi natura e3act a apelului sistem procesele au nevoie de o modalitate de a crea alte procese. O(serva!i c fiecare proces are un singur printe dar %ero, una, doi sau mul!i copii. Ca e3emplu a felului cum sunt folosite ierar.ile de procese, .aide s ne uitm la felul cum ,"B"P se ini!iali%ea% c2nd porne te. )n proces special numit "B"H, este pre%ent n (oot image *imaginea de (ootare-. C2nd ncepe s rule%e cite te un fi ier spun2nd c2te terminale e3ist. Apoi generea% un nou proces pe terminal. Aceste procese a teapt ca alte proces s se login-ie%e *s se identifice-. 0ac un login este reu it procesul de login-are e3ecut un apel al s.ellului pentru a accepta comen%i. Aceste comen%i pot s genere%e mai multe procese, .a.m.d. Astfel toate procesel din ntregul sistem apr!in unei singuri ierar.i, un "B"H la rdcin *codul pentru "B"H nu este pre%entat n carte i nici s.ellul. 4inia tre(uie tras undeva.-

Strile proceselor
0e i fiecare proces nu este o entitate independent cu propriul su program de conta(ili%are i o stare intern deseori procesele tre(uie s interac!ione%e cu alte procese. #8

Aritoni Ovidiu

Sisteme de operare 1

)n proces poate genera date de ie ire pe care alt proces le poate folosi ca date de intrare. ?n comanda s.ell c2t c.apter 1, c.apter #, c.apter ;@greep tree primul proces, care rulea% c2t concreti%ea% i generea% ; fi iere. Al doilea proces, care lucrea% greep selectea% toate liniile ce con!in cuv2ntul tree. 0epin%2nd de vite%ele relative ale celor dou procese *care depind at2t de comple3itatea relativ a programelor c2t i dec2t de mult timp a avut fiecare proces-, s-ar putea nt2mpla ca greep s fie gata s rule%e, dar nu e3ist date de intrare care-l a teapt. Hre(uie astfel (locat p2n c2nd c2teva date de intrare sunt disponi(ile. C2nd un proces se (loc.ea% se nt2mpl asta pentru c din punct de vedere logic el nu poate continua deoarece a teapt datele de intrare care nu sunt nc disponi(ile. /ste de asemenea posi(il ca un proces care conceptual vor(ind este gata i capa(il s rule%e s fie oprit deoarece sistemul de operare a decis s aloce procesorul altui proces pentru un timp. Aceste dou condi!ii sunt complet diferite.?n primul ca% suspensia este inerent n pro(lema *nu po!i procesa linia comand a utili%atorului p2n c2nd nu a fost tiprit.- ?n al doilea ca% este o c.estiune de te.nic a sistemului *nu sunt suficiente procesoare pentru a acorda c2te unu fiecrui proces-. ?n figura #-# o(servm o diagram a strii art2nd cele trei stri n care poate fi un proces. +ulare *de fapt folosim procesorul n acel moment-& +ead> *pregtit de rulare care poate rula, oprit temporar pentru a lsa alt proces s rule%e-& :locat *incapa(il s rule%e p2n c2nd anumite evenimente e3terne se nt2mpl-. 0in punct de vedere logic primele dou stri sunt similare. ?n am(ele ca%uri procesul e dispus s rule%e numai ca n cea de a doua stare, temporar nu este nici un procesor disponi(il pentru el. A treia stare este diferit de primele dou prin faptul c procesul nu poate rula c.iar dac procesorul nu are nimic altceva de fcut. 'atru tran%i!ii sunt posi(ile ntre cele trei stri a a cum este artat. Hran%i!ia 1 are loc c2nd un proces descoper c nu poate continua. ?n unele sisteme procesul tre(uie s e3ecute un apel sistem :4OCA pentru a intra in starea (locat. ?n alte sisteme inclusiv ,"B"P c2nd un proces cite te dintr-un fi ier special *e3emple un terminal- i nu este nici o dat de intrare disponi(il procesul se (loc.ea% automat.

(ig 2-2. )n proces poate fi in stare de rulare, (locare sau pregatit. Hrecerile dintre aceste stari sunt cele din figura Hran%i!iile # i ; sunt cau%ate de administratorul de procese *o parte a sistemului de operare-, fr ca nici mcar procesele s tie despre ele. Hran%i!ia # are loc c2nd #F

Aritoni Ovidiu

Sisteme de operare 1

administratorul decide c procesul aflat n rulare a rulat suficient de mult i c este timpul s permit altui proces s ai(e pentru un timp acces la procesor. Hran%i!ia ; are loc n toate celelalte procese a avut partea lor i este timpul ca primul proces s ai( acces la procesor pentru a rula din nou. Func!ia administratorului care este de a decide care proces ar tre(ui s rule%e c2nd i pentru c2t timp, este mai important. O vom anali%a mai t2r%iu n acest capitol. ,ul!i algoritmi au fost divi%a!i pentru a ncerca s aprecie%e cererile competitive de eficien! pentru sistem, astfel nc2t toate aceste cereri s fie ca un ntreg pentru procesele individuale. Hran%i!ia a patra are loc c2nd un eveniment e3tern dup care un proces a tepta s se nt2mple *ca de e3emplu sosirea unor inputuri.- 0ac nici un alt proces nu rulea% la momentul respectiv tran%i!ia ; va fi pus n aplica!ie i procesul va ncepe s rule%e altfel, s-ar putea s tre(uiasc s a tepte n starea read> pentru pu!in timp p2n c2nd procesorul este disponi(il. Folosind un proces model devine mult mai u or s ne g2ndim la ce se nt2mpl n interiorul sistemului. )nele procese rulea% anume programul care efectuea% comen%i tiprite de un utili%ator. Alte procese sunt parte dintrun sistem i se ocup de comen%i ca de e3emplu$ efectuarea cererilor de servicii-fi iere, sau administrarea detalilor pentru rularea unui disc. C2nd o ntrerupere a discului are loc sistemul ia deci%ii s opreasc rularea procesului curent i s rule%e procesul de disc care era (locat a tept2nd aceea ntrerupere *de disc- . Astfel n loc s ne g2ndim la ntreruperi ne putem g2ndi la procesele user, procesele dis1, procesele terminal .a.m.d. care se (loc.ea% c2nd a teapt ca ceva s ai( loc. C2nd (locul dis1 a fost citit sau caracterul a fost tiprit, procesul care a teapt dup el este de(locat i este disponi(il s rule%e din nou. Aceast vi%iune d importan! modelului din figura #.;. Aici cel mai de jos nivel al sistemului de operare este administratorul *sc.edulerului- cu o varietate de procese deaasupra lui. Hoate ntreruperile i detaliile proceselor ce pornesc i se opresc sunt ascunse n administrator care este de fapt destul de mic. +estul SO este structurat n mod atrgtor n forma unui proces. ,odelulul din figura #.;. este folosit n ,"B"P cu n!elegerea c Vsc.edulerulN *administratorul- nu nseamn doar organi%area proceselor i de asemenea i ntreruperea i comunicarea dintre toate procesele. Hotu i ca prim apro3imare arat structura de (a%.

B. "mplementarea proceselor
'entru a implementa modelul de proces, sistemul de operare men!ine un ta(el *un ta(el de structuri- numit process ta(le, cu o intrare la fiecare proces. Aceast intrare con!ine informa!ii despre starea procesului, programul de conta(ili%are, pointeri de stiv, alocarea memoriei, starea fi ierelor desc.ise, informa!iile de organi%are, i orice altceva despre proces ce tre(uie salvat c2nd procesul este sc.im(at de la starea de runnig la starea de read>, astfel nc2t s poat fi repornit mai t2r%iu ca i cnd nu ar fi fost niciodat oprit. ?n ,"B"P administrarea proceselor, administrarea memoriei i administrarea fi ierelor sunt fiecare tratate de module separate din interiorul sistemului. Astfel ta(elul de procese este parti!ionat cu fiecare modul men!in2nd c2npurile de care are nevoie. Fig #.G. are c2teva dintre cele mai importante c2mpuri. C2mpurile din prima coloan sunt sigurele relevante pentru acest capitol. Celelalte dou coloane sunt furni%ate doar pentru a da o idee a ce informa!ii sunt necesare altundeva n sistem. Acum c2nd c ne-am uitat la ta(elul de porcese este posi(il s e3plicm pu!in mai mult despre felul cum ilu%ia proceselor multiple secven!iale este men!inut pe o ma in cu un singur procesor si mai ;9

Aritoni Ovidiu

Sisteme de operare 1

multe dispo%itive de intrare-ie ire. Ceea ce urmea% este din punct de vedere te.nic o desc.idere a felului cum administratorul *sc.eduler- din figura #.;. lucrea% n ,"B"P, dar majoritarea SO moderne lucrea% n linii mari n acela i fel. Asociat cu fiecare clas de dispo%itive de "@O *dis1ete, .ard-dis1uri, timeri si terminale- este o loca!ie l2ng memoria principal numit interrupt vector. 5ectorul de ntrurupere *interrupt vectorcon!ine adresele procedurii serviciului de ntrerupere. S presupunem c procesul user ; rulea% c2nd o ntrerupere de dis1 are loc. 'rogramul de conta(ili%are, programul de stare al proceselor, i pro(a(il unul sau mai multe registre sunt mpinse n stiva curent de .ard. Computerul sare apoi la adresa specificat n vectorul de ntrerupere. Aceasta este tot ce face .ardware-ului. 0e aici nainte totul depinde de soft. 'rocedura ncepe salv2nd toate registrele n intrarea ta(elului de procese pentru procesul curent. Bumrul procesului curent i un pointer pentru intrarea sa sunt !inute n varia(ile glo(ale astfel nc2t s fie gsite rapid. Apoi informa!ia depo%itat de vectorul de ntrerupere este mutat din stiv, iar pointerul stivei este sta(ilit la o stiv temporar folosit de administratorul de procese. Ac!iuni ca salvarea registrului i sta(ilirea pointerului de stiv nici mcar nu pot fi e3primate n C a a c ele sunt e3ecutate de un mic lim(aj de asam(lare de rutin. C2nd aceast rutin se termin apelea% o procedur de tip C pentru a face restul muncii. Comunicare dintre procese n ,"B"P este via mesaje a a c urmtoarea treapt este s construim un mesaj pentru a fi trimis la procesul dis1 care va fi (locat a tept2ndul. ,esajul spune c o ntrerupere a avut loc pentru a-l distinge de mesajele de la procesele user cer2nd locuri de dis1 pentru a fi citite i lucruri ca acesta. Starea procesului dis1 este acum sc.im(at de la starea (locat la starea read> iar sc.edulerul este apelat. ?n ,"B"P diferite procese au diferite priorit!i pentru a da servicii mai (une controlorilor de dispo%itive "@O dec2t procesele user. 0ac procesul dis1 este acum procesul rula(il de cea mai mare prioritate, va fi programat s rule%e. 0ac procesul care a fost ntrerupt este la fel de important sau mai mult va fi programat s rule%e din nou, i procesul dis1 va tre(ui s a tepte pu!in timp. ?n oricare situa!ie procedura C apelat de codul de ntrerupere a lim(ajului de asam(lare se returnea% i codul lim(ajului de asam(lare ncarc registrele i .arta memoriei pentru procesul curent i l porne te s rule%e. Controlorul i organi%atorul de ntreruperi sunt sc.i!ate n figura #.<. Bu are nici o importan! c detaliile varia% u or de la un sistem la altul.

C. #hread!uri
?ntr-un proces tradi!ional de tipul pe care tocmai l-am studiat e3ist un singur fir de control i un singur program de conta(ili%are n fiecare proces. Oricum n anumite sisteme de operare moderne suportul este furni%at pentru fire de control multiple n interiorul procesului.

;1

Aritoni Ovidiu

Sisteme de operare 1

(ig 2-5. Sc.ema cu functiile sistemului de operare de nivel inferior si momentul cand apare o intrerupere Aceste fire de control sunt de o(icei numite t.read, sau oca%ional lig.tweit processes *procese cu greutate u oar-. ?n figura #.7. se remarc ; procese tradi!ionale. Fiecare are propriul su spa!iu de adrese i un singur fir de control *t.read-. 0e i n am(ele ca%uri noi avem ; t.readuri n figura #.7 *a- fiecare din ele lucrea% ntr-un spa!iu de adrese diferit n timp ce n figura #.7 *(- fiecare mpart acela i spa!iu de adrese.

(ig 2-6. *a- Hrei procese fiecare cu cate un t.read *(- )n proces cu trei t.read Ca e3emplu unde ar putea fi folosite t.reaurile multiple, s considerm un proces serverfi ier. /l prime te cereri pentru a citi i a scrie fi iere i trimite napoi datele cerute i accept datele updatate. 'entru a m(unt!i eficien!a serverul men!ine o list a fi ierelor recent folosite n memorie, cititind din list i scriind n list oric2n este posi(il. Situa!ia se modelea% (ine cu modelul din figura #.7 *(-. C2nd o cerere vine este nm2nat unui t.read pentru procesare. 0ac acel t.read se (loc.ea% a tept2nd pentru un transfer de dis1 alte t.readuri sunt nc capa(ile s rule%e, a a c serverul poate continua procesarea noilor cererilor c.iar i n timp ce dis1ul de intrare-ie ire are loc .,odelul din figura #.7. *a- nu este potrivit deoarece este esen!ial ca toate t.readurile server s accese%e aceea i list. Cele trei t.readuri din figura #.7 *(- nu mpart acela i spa!iu de adrese i nu pot astfel mpr!i aceeas i list din memorie. Alt e3emplu unde sunt folosite t.readuri este n (rowserele pentru we( ca de e3emplu B/HSCA'/ i ,OSA"C. 'aginile we( con!in mai multe pagini mici. 'entru fiecare imagine de pe o pagin we( (rowserul tre(uie s sta(ileasc o conectare separat ntre .ome-site i cererea imaginii. O mare cantitate de ;#

Aritoni Ovidiu

Sisteme de operare 1

timp este irostit sta(ilind i eli(er2nd aceste legturi. Av2nd multiple t.readuri ntre un (rowser, multe imagini pot fi cerute n acela i timp, n cele mai multe ca%uri, mrind considera(il eficien!a din moemnt ce cu imaginile mici timpul sta(ilit este factorul limit nu vite%a liniilor de transmitere. C2nd multiple t.readuri sunt pre%ente n acela i spa!iu de adrese c2teva din c2mpurile din figura #.G. nu sunt per proces, ci per t.read, a a c un ta(el separat de t.read-uri este necesar, cu o singur intrare per t.read. 'rintre elementele atri(uite fiecrui t.read sunt programul de conta(ilitate, registrul i starea. 'rogramul de conta(ili%are este necesar deoarece t.read-urile ca i procesele pot fi suspendate i re%umate. +egi trii sunt necesari pentru ca atunci c2nd t.readurile sunt suspendate registrii lor tre(uie salva!i. ?n cele din urm t.readurile ca i procesele pot fi n starea runnig, read> sau (loc1ed. ?n anumite sisteme, sistemele de operare nu sunt con tiente de t.readuri cu alte cuvinte sunt administrate n ntregime n spa!iul user. C2n un t.read este pe punctul de a se (loca alege i porne te succesorul lui nainte de a se opri. C2teva pace.ete de t.readuri user- level sunt n u%, inclusiv '-t.readurile 'OS"P i Ct.readurile. ?n alte ca%uri, sistemul de operare este con tient de e3isten!a t.readurilor multiple per proces a a c atunci c2nd un t.read se (loc.ea% sistemul de operare alege pe urmtorul s rule%e fie de la acela i proces fie de la unul diferit. 'entru a face organi%are Aernelul tre(uie s ai( un ta(el de t.readuri care enumer toate t.readurile din sistem analog cu ta(elul proceselor. 0e i aceste dou alternative ar putea prea ec.ivalente n ceea ce prive te eficien!a ele difer considera(il. Sc.im(2nd t.readurile este mult mai rapid c2nd administrarea t.readurilor este fcut n spa!iul user dec2t atunci c2nd un apel 1ernel este necesar. Acest fapt cere cu putere reali%area administrrii n spa!iul user. 'e de alt parte t.readurile administrate n ntregime n spa!iul user i un t.read se (loc.ea% *de e3emplu a tept2nd pentru "@O sau o gre eal care tre(uie re%olvat-. Aernelul (loc.ea% ntregul proces din moment ce numai este con tient c e3ist alte t.readuri. Acest fapt cere cu putere reali%area administrrii t.readurilor n 1ernel. Ca i consecin! am(ele sisteme sunt n u% i de asemenea diferite sc.eme .i(ride au fost propuse. *Anderson et al, 1FF#-. "ndiferent dac t.readurile sunt administrate n 1ernel sau n spa!iul user ele introduc o mult!ime de pro(leme care tre(uie re%olvate i care sc.im( n mod considera(il modelul programrii. S considerm efectele apelului sistem for1*-. 0ac procesul printe are t.readuri multiple ar tre(ui ca i copilul s le ai(. 0ac nu procesul s-ar putea s nu func!ione%e corect din moment ce toate pot fi importante. Oricum dac procesul-copil o(!ine la fel demulte t.readuri ca i printele ce se nt2mpl dac un t.read s-a (locat pe un apel read> s %icem de la tastatur. Sunt acum dou t.readuri (locate de la tastaturW C2nd o linie este tiprit am2ndou t.readurile o(!in o copie a linieiW 0oar printeleW 0oar copilulW Aceea i pro(lem e3ist c2nd conectrile sunt desc.ise n re!ea. Alt clas de pro(leme are legtur cu faptul c t.readurile mpart multe structuri de date. Ce se nt2mpl dac un t.read nc.ide un fi ier n timp ce altul nc cite te din elW S presupunem c un t.read o(serv c e3ist prea pu!in memorie s ncepe s aloce mai mult memorie. Se nt2mpl alocarea o dat sau de # oriW Aproape n toate sistemele care nu au fost proiectate cu t.readuri, (i(liotecile *ca de e3emplu procedura de alocare a memoriei- nu sunt reuti%a(ile i se vor distruge dac un al doilea apel este fcut n timp ce primul este nc activ. Alt pro(lem se refer la raportarea gre elilor. ?n )B"P, dup un apel sistem, starea apelului este pus ntr-o varia(il glo(al VerrnoN. Ce se nt2mpl dac un t.read ;;

Aritoni Ovidiu

Sisteme de operare 1

face un apel sistem i nainte s fie capa(il s citeasc errno alt t.read face un apel sistem terg2nd valoarea originalW Apoi s anali%m semnalele. Anumite semnale sunt din punct de vedere logic t.readuri specifice, altele nu. 0e e3emplu dac un t.read apelea% A4A+, * - are sens ca semnalul ce re%ult s mearg la t.readul care a fcut apelul. C2nd Aernelul este con tient de t.readuri, pac.etul de t.readuri tre(uie s !in eviden!a semnalelor *alarmelor-. Complica!ie n plus pentru t.readurile user-level e3ist c2nd *ca i n )B"Pun proces poate avea doar un semnal la un anumit timp i c2teva t.readuri care apelea% semnalul independent. Alte semnale ca de e3emplu ntreruperea tastatur nu sunt t.readuri specifice. Cine ar tre(ui s le recep!ione%eW )n t.read proiectatW Hoate t.readurileW )n t.read nou creatW Hoate aceste solu!ii au pro(leme. ,ai departe ce se nt2mpl dac un t.read sc.im( controlorii de semnal, fr s spun altor t.readuri. O ultim pro(lem introdus de t.readuri este administrarea stivelor. ,ulte sisteme c2nd se nt2mpl s fie necesare mai multe stive, Aernelul pu i simplu furni%ea% mai multe stive. 0ac Aernelul nu este con tient de aceste stive nu poate n mod automat s creasc numrul lor. 0e fapt poate nici mcar nu reali%ea% c gre eala memoriei are legtur cu cre terea stivelor. Aceste pro(leme cu siguran! nu sunt repara(ile, dar arat c introducerea, t.readurilor ntr-un sistem e3istent fr o reproiectare su(stan!ial a sistemului, nu va func!iona. Sinta3a pelurilor sistem tre(uie redefinit i (i(liotecile tre(uie s fie rescrise. Hoate aceste lucruri tre(uie fcute n a a fel nc2t s rm2n compati(ile cu programele e3istente pentru ca%ul unui proces cu un singur t.read. 'entru mai multe informa!ii vede!i *Dauser et al, 1FF;, and ,ars. et al, 1FF1-.

2. %omunicarea din!re $roce e

Adesea procesele au nevoie sa comunice intre ele. 0e e3emplu, intr-o instalatie, re%ultatul primului proces tre(uie sa fie transmis celui de-al doilea, si asa mai departe. Astfel ca e3ista o nevoie de comunicare intre procese si este prefera(il ca acest lucru sa se faca intr-un mod (ine structurat, fara intreruperi. "n sectiunile urmatoare vom anali%a cateva pro(leme legate de comunicarea in!er$roce ora'a sau -P%. 'e scurt, e3ista trei pro(leme. 'rima dintre ele se refera la cele mentionate mai sus$ modul in care un proces poate sa transmita informatia altui proces. Cea de-a doua pro(lema consta in a ne asigura ca doua sau mai multe procese nu se incurca unul pe celalalt atunci cand incearca sa se angaje%e in activitati critice *sa presupunem ca doua procese incearca fiecare sa o(tinaultimii 199A de memorie-. A treia se ocupa de succedarea corespun%atoare a proceselor atunci cand apare dependenta$ daca procesul A produce date si procesul : le printea%a, : tre(uie sa astepte pana A a produs cateva date inainte de a incepe sa printe%e. "ncepand cu sectiunea urmatoare vom anali%a toate aceste pro(leme. ;G

Aritoni Ovidiu

Sisteme de operare 1

A. Conditiile de concurenta
"n unele sisteme de operare procesele care lucrea%a impreuna pot sa imparta un depo%it pe care fiecare poate sa scrie si sa-l citeasca. Acest depo%it comun poate sa se afle in memoria principala sau poate sa fie un fisier in retea& locali%area memoriei comune nu sc.im(a natura comunicarii sau a pro(lemelor care apar. 'entru a vedea modul in care functionea%a, in practica aceasta comunicare interprocesorala, sa luam un e3emplu simplu$ un spooler de imprimanta. Cand un proces vrea sa printe%e un fisier introduce numele fisierului intr-un direc!or de $ira'are. )n alt proces, daemon-ul de imprimanta, verifica periodic daca e3ista fisiere care tre(uie printate si daca e3ista le printea%a si apoi le sterge numele din director. "maginti-va ca directorul de spiralare are un numar mare *potential infinit- de sloturi, numerotate 9, 1, #X, fiecare capa(il sa suporte unnume de fisier& mai inc.ipuiti-va ca e3ista doua varia(ile comune, out, care indica urmatorul fisier care tre(uie printat si in, care indica urmatorul slot li(er al directorului. Aceste doua varia(ile ar putea fi stocate intr-un fisier de doua cuvinte accesi(il tuturor proceselor. 4a un moment dat, slot-urile de la 9 la ; sunt goale *fisierele au fost deja printate-, iar slot-urile de la G la 7 sunt ocupate *cu numele fisierelor care asteapta sa fie printate-. Aproape simultan procesele A si : .otarasc ca vor sa inscrie un fisier pe lista de asteptare pentru printare. Aceasta situatie se vede in fig. #-E. "n jurisdictia in care pot fi aplicate legile lui ,urp.> s-ar putea intampla urmatorul lucru. 'rocesul A citeste in si stoc.ea%a valoarea, E, intr-o varia(ila locala numita next_free_slot. /3act in acel moment apare o intrerupere si procesorul decide ca procesul A a rulat destul si il sc.im(a cu procesul :. procesul : citeste si el in si primeste tot E, astfel ca stoc.ea%a numele fisierului sau in slot-ul E si actuali%ea%a in pentru a ajunge la 8. apoi se ocupa de alte sarcini. "n cele din urma, procesul A rulea%a din nou, continuand de unde a ramas. 5i%uali%ea%a next_free_slot si gaseste E, deci isi scrie numele fisierului in slot-ul E, stergand numele pe care procesul : tocmai l-a pus acolo. Apoi calculea%a next_free_slot+1, care este 8, si setea%a in la 8. directorul de spiralare este acum corespun%ator in interior, asa ca daemon-ul de imprimanta nu va constata nici o neregula, dar procesul : nu va o(tine nici un re%ultat. Situatii asemanatoare in care doua sau mai multe procese citesc sau scriu date comune si re%ultatul final depinde de cel care rulea%a in momentul respectiv, se numesc condi!ii de com$e!i!ie. 0e(locarea unor programe care contin astfel de conditii nu este deloc distractiva. Hestele au de cele mai multe ori re%ultate (une, dar foarte rar se intampla ceva ciudat si care nu poate fi e3plicat.

;<

Aritoni Ovidiu

Sisteme de operare 1

(ig 2-#. 0oua procese vor sa accese%e aceeasi memorie in acelasi timp

B. Sectiuni critice
Cum evitam conditiile de competitieW 'entru a prevenii situatiile de acest gen si multe altele care implica memoria comuna, fisierele de retea, cea mai (una metoda este este sa gasim un mod de a nu permite decat unui proces sa citeasca si sa scrie date comune. Cu alte cuvinte, avem nevoie de e.c'udere reci$roca = un mod de a ne asigura ca daca unul dintre procese utili%ea%a o varia(ila sau un fisier comun, celelalte procese nu vor avea voie sa faca acelasi lucru. 'ro(lema de mai sus a aparut datorita faptului ca procesul : a inceput sa utili%e%e una dintre varia(ilele comune inainte ca procesul A sa fi terminat lucrul cu varia(ila respectiva. Alegerea operatiilor potrivite pentru reali%area e3cluderii reciproce este o pro(lema de programare majora in orice sistem de operare, precum si un su(iect pe care il vom anali%a in amanunt in sectiunile urmatoare. 'ro(lema evitarii conditiilor de competitie poate fi formulata si intr-un mod a(stract. O (ucata de timp, un proces este ocupat cu calculele interne si alte lucruri care nu duc la conditii de competitie. Hotusi, uneori se poate ca un proces sa accese%e fisiere sau memoria comuna, sau sa faca alte lucruri critice care pot sa duca la competitie. Acea parte a programului in care este accesata memoria comuna se numeste zona cri!ica sau ec!iune cri!ica. 0aca am putea aranja lucrurile astfel incat doua procese sa nu se afle niciodata in acelasi timp in %onele lor critice, am putea evita conditile de competitie. 0esi aceasta conditie evita conditiile de competitie, nu este suficienta pentru a avea procese paralele care sa coopere%e corect si eficient utili%and date comune. 'entru re%ultate (une este necesara indeplinirea a patru conditii$ 1. doua procese nu se pot afla in acelasi timp in %onele lor critice #. nu se pot face presupuneri in legatura cu vite%a sau numarul de procesoare ;. un proces care rulea%a in afara %onei sale critice nu poate (loca alte procese G. nici un proces nu tre(uie sa astepte foarte mult pentru a intra in %ona sa critica ;7

Aritoni Ovidiu

Sisteme de operare 1

C. $xcludere reciproca cu asteptare activa


"n aceasta sectiune vom anali%a diferite propuneri de reali%are a e3cluderii reciproce, astfel incat in timp ce un proces este ocupat cu actuali%area memoriei comune in %ona sa critica, nici un alt proces sa nu intre in %ona sa critica si sa faca pro(leme.

Dezactivarea intreruperilor
Cea mai simpla solutie este sa facem ca fiecare proces sa de%active%e toate intreruperile imediat ce a intrat in %ona critica si sa le active%e c.iar inainte de a o parasi. Cu aceasta metoda nu pot aparea intreruperi cau%ate de ceas. 'rocessorul este sc.im(at intre procese doar ca urmare a intreruperilor produse de ceas sau din alte motive si daca intreruperile sunt de%activate procesorul nu va fi alocat altui proces. Astfel odata ce un proces a de%activat intreruperile, poate sa anali%e%e si sa actuali%e%e memoria comuna fara ca alt proce sa intervina. "n general aceasta a(ordare nu este prea agreata deoarece nu este intelept sa " se acorde unui proces utili%ator puterea de a de%activa intreruperile. Sa presupunem ca unul dintre procese c.iar ar face acest lucru si nu le-ar mai activa inapoi. Ar putea insemna sfarsitul sistemului. "n plus, daca sistemul are doua sau mai multe procesoare, de%activarea intreruperilor afectea%a doar procesorul care a efectuat comanda de de%activare. Celelalte vor continua sa rule%e si vor putea sa accese%e memoria comuna. 'e de alta parte, este adesea convena(il pentru 1ernel sa de%active%e intreruperile pentru cateva instructiuni in timp ce actuali%ea%a varia(ile sau liste. 0aca s-ar produce o intrerupere, de e3emplu intr-un moment in care lista proceselor pregatite este intr-o stare intermediara, ar putea sa apara conditii de competitie. Conclu%ia este urmatoarea$ adesea de%activarea intreruperilor este o te.nica utila in cadrul sistemului de operare, dar nu este potrivita ca mecanism general de e3cludere reciproca pentru procesele utili%atoare.

/ariabi'e inc0i e
Ca o a dou-a incercare, sa cautam o solutie software. Sa %icem ca avem o singura varia(ila impartita,varia(ila *inc.isa-,initial 9. Cind un proces vrea sa intre in regiunea lui critica, mai intii verifica inc.i%atoarea. 0aca inc.i%atoarea este 9, procesul o setea%a la 1 si intra in regiunea critica. 0aca inc.i%atoarea . este deja 1, procesul asteapta pina ea devine 9. 0eci,un 9 inseamna ca procesul este in regiunea lui critica, iar un 1 inseamna ca unele procese sunt in regiunea lor critica. 0in pacate, aceasta idee contine e3act acelasi *flow- fatal pe care l-am intilnit la directorul *spooler-. Sa presupunem ca un proces citeste inc.i%atoarea. si vede ca este 9. "nainte de a seta inc.i%atoarea. la 1, un alt proces este programat, rulea%a, si setea%a inc.i%atoarea. la 1. Cind primul proces rulea%a din nou,si el la rindul lui va seta inc.i%atoarea la 1, si astfel doua procese vor fi in regiunea lor critica in acelasi timp. Acum puteti gindi ca am putea trece peste aceasta pro(lema citind mai intii valoarea inc.i%atorii. apoi verificind-o inca o data c.iar inainte de a o implementa, dar acest lucru ;E

Aritoni Ovidiu

Sisteme de operare 1

c.iar nu ajuta. 'ro(lema. se pune acum daca al doi-lea proces modifica inc.i%atoarea c.iar dupa ce primul proces a terminat a doua lui verificare. A'!erna!ii !ric!e

O a treia a(ordare a pro(lemei este pre%entata in fig.#-8. Aceasta sectiune de program, este scrisa in C. C a fost aleasa aici pentru ca adevaratele sisteme. de operare. sunt scrise toate in C * sau CUU-, dar rareori in ,odula # sau 'ascal. w.ile *H+)/- Y w.ile *turn ZO9- @[wait[@& critical\region*-& turnO1& noncritical\region*-$ ] *aw.ile *H+)/- Y w.ile *turn ZO1-@[wait[@& critical\region*-& turnO9& noncritical\region*-& ]

*(Fig. #-8. O posi(ila solutie la p(. regiunii critice.

"n Fig.#-8, varia(ila integer turn, initial 9, urmareste al cui rind este de a intra in regiunea critica si e3aminea%a sau reactuali%ea%a memoria inpartita. "nitial, procesul 9 *inspects- turn, o gaseste a fi 9, si intra in regiunea lui critica. 'rocesul 1 o gaseste si el a fi 9 si de aceea sta intr-un *loop- strins testind continuu turn pt. a vedea cind devine 1. Hestarea continua a varia(ilei pina cind apare o valuare se numeste a !e$!area ocu$a!a. Bormal s-ar evita, din moment ce ocupa timpul unitatii centrale de prelucrare sau a )C' sau cum vrei tuX0oar atunci cind avem o asteptare motivata ca asteptarea va fi scurta este *(us> waiting used-. Cind procesul 9 paraseste regiunea lui critica, setea%a turn la 1, pt. a permite proc.1 sa intre in reg. lui critica. 'resupunem ca procesul 1 termina reg. lui critica mai repede, deci am(ele procese sunt in regiunile lor noncritice, cu turn setat la 9.Acum procsel 9 i-si e3ecuta intreg *loop- repede, revenind la regiunea lui noncritica cu turn setat la 1. "n acest moment procesul 9 "-si termina regiunea noncritica si se intoarce in vf.*loop-ului-. 0in pacate, nu " se permite sa intre in reg. lui critica acum, pt. ca turn este 1 si procesul 1 este ocupat cu reg.lui noncritica. Altfel spus, a face ture nu este o idee prea (una cind unul din procese este mult mai incet decit celalalt. Situatia violea%a conditia ; *..-$proc.9 este (locat de catre un procf. Care nu este in reg. lui critica. +evenind la disc.despre dir *spooler-, daca acum acum asociem regiunii critice citirea s.i scrierea dir.*spooler-, procesului 9 nu " se va permite sa printe%e alt fis.ier pt. ca proc.1 facea altceva. 0efapt, aceasta solutie cere ca cele doua procese sa alterne%e strict in intrarea lor in reg. lor critice, de e3.,in fis.ierele*spooling-. Bici unuia nu " se va permite sa *spooldoua intr-un rind. Cind acest algoritm evit toate cursele*races-,nu este un candidat serios ca o solutie pt. ca violea%a conditia;.

*o'u!ia 'ui Pe!er on

;8

Aritoni Ovidiu

Sisteme de operare 1

Com(inind ideea de a face ture cu ideea varia(ilelor inc.ise si a var. avertisment, un matematician *de pe pamint-, H.0e11er, a fost primul care a *devise- o solutie softwere de p(. e3cluderii mutuale cera nu are nevoie de alternanta stricta. 5e%i *0ij1stra,1F7<-. "n 1F81, I.4.'eterson a descoperit un mult mai simplu mod de a ajunge la *mutual e3clusion-, facind astfel solutia lui 0e11er depasita. Alg. 4ui 'eterson este ilustrat in fig.#-F. Acest alg. Consta in doua proceduri scrise in ABS" C, ceea ce inseamna ca *function portot>pes- ar tre(ui alimentati pentru toate functiunile definite s.i folosite. Hotusi, pt. a economisi spatiu,nu vom arata prototipele in acest alte e3emple. "nainte de a folosi vasia(ilele impartite,fiecare proces c.eama regiunea de intrare cu propriul lui nr. 'rocesat, 9 sau 1, ca parametri. Aceasta c.emare o va face sa astepte, daca este nevoie, pina este in siguranta sa intre. 0upa ce a terminat cu varia(ila s.ared, procesul c.eama sau se adresea%a regiunii_de_plecare pt. a indica ca este gata,si sa lase alt proces sa intre,daca este nevoie. Sa vedem,dar, cum aceasta metoda functionea%a. "nitial nici un proces nu este in regiunea lui critica. Acum procesul 9 c.eama regiunea de intrare. 5a ramine acolo pina interested ^9_ ajunge la FA4S/, un evenument care se intimpla cind procesul 9 c.eama regiunea de intrare aproape simultan. Amindoua vor stoca nr.lor de procesare in turn. Oricare implementare este facuta, ultima este cea care contea%a&prima este pierduta. Sa presupunem ca proc.1 implem. )ltimul, deci turn este 1. Cind amindoua proc. Ajung la declaratia w.ile, proc. 9 se e3ecuta de 9 ori si intra in regiune lui critica. 'rocesul 1 *loops- si nu intra in regiunea lui critaca.

. %epaus si repornire
Atat solutia data de 'eterson cat si solutia cu utili%are HS4 sunt corecte, dar am(ele au defectul ca necesita asteptare activa. "n principal, aceste solutii fac urmatorul lucru$ cand un proces vrea sa intre in %ona sa critica, verifica daca intrarea este permisa. 0aca nu este, procesul ramane intr-o (ucla stransa asteptand permisiunea. Aceasta a(ordare nu numai ca iroseste timpul procesorului, dar poate sa ai(a si efecte neasteptate. Sa ne gandim la un computer cu doua procese$ D, cu o prioritate ridicata si 4, cu o prioritate sca%uta. +egulile de tempori%are spun ca D sa fie rulat de fiecare data cand este pregatit. 4a un moment dat, cand 4 se afla in %ona critica, D este pregatit sa fie rulat *e3. se inc.eie o operatie "@O-. D intra in asteptare activa, dar de vreme ce 4 nu este niciodata tempori%at in timp ce D este rulat, 4 nu maiare oca%ia s paraseasca %ona critica, asa ca D va ramane in (ucla. Aceasta situatie se mai numeste si $rob'ema inver arii $riori!a!ii. Acum sa anali%am cateva comunicari interprocesorale simple care se (loc.ea%a in loc sa iroseasca timpul procesorului atunci cand nu li se permite accesul in %ona lor critica. )na dintre cele mai simple este perec.ea repaus si pornire *S4//' si JAA/)'-.S4//' este un apel al sistemului care produce (locarea apelantului, adica suspendarea lui pana cand un alt proces este pornit. Apelul JAA/)' are un parametru, pornirea procesului. Alternativ, atat S4//' cat si JAA/)' au fiecare cate un parametru, o adresa de memorie utili%ata pentru a potrivi comen%ile S4//' si JAA/)'.

;F

Aritoni Ovidiu

Sisteme de operare 1

Problema producator-consumator
)n e3emplu pentru modul cum acestea pot fi folosite, sa ne gandim la pro(lema $roduca!or-con uma!or *cunoscuta si su( numele de bu((er de 'ega!ura-. 0oua procese impart ace;lasi (uffer de marime fi3a. )nul dintre ele, producatorul, pune informatie in (uffer, iar celalalt, consumatorul, scoate acesta informatie. *putem de asemenea sa generali%am pro(lema si sa avem m producatori si n consumatori, dar vom lua ca%ul unui singur producator si al unui singur cosumator deoarece astfel solutia este mai simpla-. 'ro(lemele apar atunci cand producatorul vrea sa puna o noua informatie in (uffer, dar acesta este deja plin. Solutia este intrarea producatorului in repaus si pornirea lui atunci cand consumatorul a scos una sau mai multe informatii. "n acelasi mod, in ca%ul in care consumatorul vrea sa scoata o informatie din (uffer si constata ca (uffer-ul este gol, intra in repaus pana cand producatorul introduce ceva in (uffer, moment in care reporneste. Acest mod de a(ordare pare destul de simplu, dar duce la acelasi tip de conditii de competitie pe care le-am va%ut mai devreme in ca%ul directorului de spiralare. 'entru a tine evidenta numarului de informatii din (uffer vom avea nevoie de o varia(ila = contul. 0aca B este numarul ma3im de informatii pe care le poate sustine (uffer-ul, codul producatorului va verifica mai intai daca in cont se afla B informatii. 0aca da, producatorul va intra in repaus& daca nu, producatorul va adauga o informatie si va mari contul. Codul consumatorului este similar$ mai intai se testea%a contul pentru a se vedea daca este 9. 0aca da, intra in repaus& daca este mai mare de %ero, scoate o informatie si scade contul. Fiecare dintre procese verifica de asemenea sa vada daca celalalt ar tre(ui sa fie in repaus, si daca nu, il reporneste. Atat codul de producator cat si cel de consumator sun aratate in fig. #-11. 'entru a e3prima in C apeluri ale sistemului cum sunt S4//' si JAA/)' le vom repre%enta su( forma de apeluri catre rutinele de (i(lioteca. /le nu fac parte din (i(lioteca C standard, dar este foarte posi(il ca ele sa fie disponi(ile pe orice alt sistem care efectiv a avut aceste apeluri ale sistemului. 'rocedurile enter_item si remove_item, care nu sunt aratate, se ocupa cu evidenta informatiilor introduse si scoase din (uffer. `define B 199 int count O 9& void producer*voidY w.ile *H+)/- Y produce\item*-& if *count OO B- sleep*-& enter\item*-& count O count U 1& if *count OO 1- wa1eup*consumer-& ] ] @[ num(er of slots in t.e (uffer [@ @[ num(er of items in t.e (uffer[@

@[ repeat forever [@ @[ generate ne3t item [@ @[ if (uffer is full, go to sleep [@ @[ put item in (uffer [@ @[ increment count of items in (uffer [@ @[ was (uffer empt>W [@

G9

Aritoni Ovidiu

Sisteme de operare 1

void consumer*voidY w.ile *H+)/- Y @[ repeat forever [@ if *count OO 9- sleep*-& @[ if (uffer is empt>, go to sleep [@ remove\item*-& @[ ta1e item out of (uffer [@ count O count = 1& @[ Fig. 2-11. 'ro(lema producator-consumator cu o conditie fatala de competitie. Acum sa ne intoarcem la conditia de competitie. Acest lucru poate sa apara datorita accesului nelimitat la cont. )rmatoarea situatie ar putea sa apara. :uffer-ul este gol si consumatorul tocmai a citit contul pentru a vedea daca este 9. "n acest moment tempori%atorul decide sa opreasca temporar rularea consumatorului si sa inceapa rularea producatorului. 'roducatorul introduce o informatie in (uffer, mareste contul si o(serva ca in acest moment are valoarea 1. +ationand ca valoarea contului era 9 si consumatorul tre(uie sa fie in repaus, producatorul apelea%a wakeup pentru a reporni consumatorul. 0in pacate, consumatorul inca nu este in mod logic in repaus, astfel incat semnalul de repornire este pierdut. 4a urmatoarea rulare a consumatorului acesta va verifica valoarea contului citit anterior , va constata ca este 9 si va intra in repaus. ,ai devreme sau mai tar%iu producatorul va umple (uffer-ul si va intra si el in repaus. Am(ele vor ramane in aceasta stare. /senta acestei pro(leme este faptul ca o comanda de repornire trimisa unui proces care *inca- nu se afla in repaus este pierduta. 0aca aceasta nu s-ar pierde, totul ar functiona. O remediere rapida ar fi sa se modifice regulile pentru a adauga in acest cadru un bi! de re$ornire a('a! in a !e$!are. Cand o comanda de repornire este trimisa unui proces care nu se afla inca in stare de repaus, acest (it este pornit. ,ai tar%iu, cand procesul incearca sa intre in repaus, daca acest (it este pornit va fi oprit, dar procesul va ramane pornit. Acest (it este un fel de (anca pentru semnale de repornire. "n timp ce in acest e3emplu simplu acest (it salvea%a situatia, este foarte usor de construit e3emple cu trei sau mai multe procese in care doar un singur (it de acest fel este insuficient. Am putea sa facem o alta cale si sa adaugam un al doilea (it sau poate inca 8 sau inca ;#, dar in principiu, pro(lema ramane aceeasi.

$. Semafoare
Aceasta era situatia in 1F7< cand /.J. 0ij1stra *1F7<- a sugerat utili%area unei varia(ile unitare pentru a numara repornirile pastrate pentru o utili%are ulterioara. "n aceasta propunere a fost introdus un nou tip de varia(ila, numita ema(oare. )n semafor putea avea valoarea 9, indicand faptul ca nu e3ista nici o repornire salvata& daca avea o valoare mai mare de 9 insemna ca e3ista una sau mai multe reporniri neefectuate. 0ij1stra a propus sa e3iste doua operatii, 0OJB si )' *generali%ari pentru S4//', respectiv JAA/)'-. Operatia 0OJB la un semafor verifica daca valoarea este mai mare de 9. 0aca da, ii scade valoarea *adica ii utili%ea%a o repornire din cele pastratesi continua. 0aca valoarea este 9, procesul intra in repaus fara a inc.eia operatia 0OJB pentru moment. 5erificarea valorii, sc.im(area ei si, posi(il intrarea in repaus, totul este reali%at in cadrul unei ac!iuni a!omice unica si indivi%i(ila. /ste garantat faptul ca o operatie de semafor odata inceputa nici un alt proces nu poate sa accese%e semaforul pana G1

Aritoni Ovidiu

Sisteme de operare 1

la inc.eierea sau (locarea operatiei. Aceasta atomicitate este a(solut esentiala pentru solutionarea pro(lemelor de sincroni%are si pentru evitarea conditiilor de competitie. Operatia )' mareste valoarea semaforului tinta. 0aca unul sau mai multe procese ar fi in repaus la semaforul respectiva, incapa(ile sa inc.eie o operatie 0OJB anterioara, unul dintre ele este ales de catre sistem *e3. la intamplare- si ii este permis sa isi inc.eie operatia 0OJB. Astfel, dupa o operatie )' la un semafor unde e3ista mai multe procese in repaus, (ariera va avea tot valoarea 9, dar va e3ista un proces mai putin in randul celor care se afla in repaus. Operatia de marire a valorii semaforului si repornire a unui proces este de asemenea indivi%i(ila. Bici un proces nu se (loc.ea%a e3ecutand o operatie )' la fel cum nici un proces nu se (loc.ea%a in timpul unui proces de repornire in cadrul modelului anterior. Ca un fapt lateral, in lucrarea originala a lui 0ij1stra acesta a utili%at numele ' si 5 in loc de 0OJB si )', dar de vreme ce acestea nu au smnificatie mnemonica pentru oamenii care nu vor(esc lim(a germana *si c.iar pentru cei care vor(esc aceasta lim(a au doar o semnificatie marginala-, vom folosi termenii 0OJB si )'. Acestea au fost introduse mai intai in Algol 78.

Solutionarea problemei producator-cosumator cu ajutorul sema oarelor


Semafoarele re%olva pro(lema repornirilor pierdute, asa cum se vede in figura #1#. este foarte important ca acestea sa fie implementate ca indivi%i(ile. "n mod normal ele se implementea%a apeluri ale sistemului, cu sistemul de operare de%activand pentru foarte scurt timp toate intreruperile in timp ce testea%a semaforul, o actuali%ea%a si trece procesele in stare de repaus, daca este necesar. 0eoarece toate aceste actiuni au nevoie doar de cateva instructiuni, de%activarea intreruperilor nu cau%ea%a nici o pro(lema. 0aca se utili%ea%a mai multe procesoare, fiecare semafor ar tre(ui protejata de o varia(ila de (locare, utili%andu-se instructiunile HS4 pentru a ne asigura ca semaforul este verificat doar de un procesor odata. Asigurati-va ca intelegeti faptul ca utili%area HS4 pentru a impiedica accesarea semaforului de mai multe procesoare in acelasi timp este diferita de asteptarea activa a producatorului sau a consumatorului ca celalalt sa umple sau sa goleasca (uffer-ul. Operatia de semafor durea%a doar cateva microsecunde, in timp ce producatorul sau consumatorul ar putea dura foarte mult. `define B 199 t>pedef int semap.ore & semap.ore mute3O1& semep.ore empt>OB& semap.ore fullO9& void producer*Y int item& w.ile*trueY @[ numarul de sloturi in (uffer @[ semafoarele sunt un tip special de intregi @[accesul controlerului in regiunea critica @[numarul sloturilor goale de pe (uffer @[numarul sloturilor pline de pe (uffer

@[true este constanta 1 G#

Aritoni Ovidiu produce\item*Titem-& down*Tempt>-& down*Tmute3-& enter\item*item-& up*Tmute3-& up*Tfull-& ] ]

Sisteme de operare 1 @[generea%a ceva pentru a pune in (uffer @[decrementea%a varia(ila empt> @[intra in regiune critica @[pune noul item in (uffer @[paraseste regiunea critica @[incrementea%a varia(ila full

void consumer*Y int item& w.ile*true@[ciclu infinit Y down*Tfull-& @[incrementea%a varia(ila count down*Tmute3-& @[intra in regiune critica remove\item*Titem-& @[scoate un item din (uffer up*Tmute3-& @[paraseste regiunea critica up*Tempt>-& @[incrementea%a varia(ila empt> consume\item*item-& @[ face ceva cu itemul ] ] Fig. 2-12. 'ro(lema utili%ator-consumator in ca%ul utili%arii (arierelor. Aceasta solutie utili%ea%a trei semafoare$ unul numit full pentru numararea sloturilor pline, unul numit empty pentru numararea slot-urilor goale si unul mutex pentru a se asigura ca producatorul si consumatorul nu accesea%a (uffer-ul in acelasi timp. Full este initial 9, empty este initial egal cu numarul de slot-uri din (uffer, iar mutex este initial 1. :arierele care incep de la 1 si sunt utili%ate de # sau mai multe procese pentru a se asigura ca doar unul dintre ele poate sa intre in %ona sa critica la un moment dat se numesc ema(oare binare. 0aca fiecare proces e3ecuta o comanda 0OJB c.iar inainte de a intra in %ona sa critica, si o comanda )' imediat dupa iesire, este garantata e3cluderea reciproca. Acum ca avem la dispo%itie o (una comunicare iterprocesorala, sa ne intoarcem si sa anali%am din nou secventa de intrerupere din fig. #-<. intr-un sistem care utili%ea%a semafoare, modul natural de a ascunde intreruperile este asocierea unui semafor, initial setata la 9, pentru fiecare dispo%itiv "@O. "mediat dupa pornirea unui dispo%itiv "@O, procesul administrator e3ecuta o comanda 0OJB la semafor asociata, astfel (locandu-se imediat. Cand se produce intrerperea, un remediator al intreruperii e3ecuta o comanda )' la semaforul asociat, lucru care face ca procesul relevant sa fie din nou pregatit pentru rulare. "n acest model, pasul 7 din figura #-< consta in e3ecutarea unei comen%i )' la (ariera dispo%itivului astfel incat la pasul E administratorul sa poata rula managerul dispo%itivului. :ineinteles, daca in acest moment e3ista mai multe procese pregatite, administratorul poate sa decida rularea unui proces mai important mai intai. ,odul in care se face administrarea il vom anali%a mai tar%iu in cadrul acestui capitol. "n e3emplul din fig. #-1# am folosit semafoarele in doua moduri diferite. Aceasta diferenta este destul de importanta incat sa merite a fi e3plicata. Semaforul mutex este utili%ata pentru e3cluderea reciproca. /ste astfel proiectata incat sa garante%e faptul ca un G;

Aritoni Ovidiu

Sisteme de operare 1

singur proces va scrie sau va citi in (uffer si varia(ilele asociate la un moment dat. /3cluderea reciproca este necesara pentru evitarea .aosului. Cealalta utili%are a semafoarelor este pentru incronizare. Semafoarele full si empty sunt necesare pentru a garanta ca anumite secvente de evenimente apar sau nu. "n acest ca% ele se asigura ca producatorul nu mai rulea%a in momentul in care (uffer-ul e plin si ca, de asemenea, consumatorul nu mai rulea%a in momentul cand (uffer-ul e gol. Aceasta utili%are este diferita de e3cluderea reciproca. 0esi seamfoarele sunt cunoscute de mai (ine de #< de ani, inca mai este cercetat modul in care se utili%ea%a. 'entru e3emplificare ve%i *Hai si Carver, 1FF7-.

$. Monitoare
Cu semafoare comunicarea interprocesorala pare usoara, nuW Bici vor(a. 'riviti mai atent ordinea comen%ilor 0OJB inaintea introducerii sau scoaterii informatiilor din (uffer din fig. #-1#. Sa presupunem ca cele doua comen%i 0OJB din codul producatorului ar fi in ordine inversa, astfel ca mutex ar fi sca%ut inainte de empty si nu dupa el. 0aca (uffer-ul ar fi plin, producatorul s-ar (loca, cu mutex setat la 9. "n consecinta, data urmatoare cand consumatorul ar incerca sa accese%e (uffer-ul ar e3ecuta o comanda 0OJB la mutex, acum setat la 9 si s-ar (loca si el. Am(ele procese ar ramane (locate si nu s-ar mai putea lucra nimic. Aceasta situatie nefericita se numeste impas. 5om studia impasurile in amanunt in capitolul ;. Aceasta pro(lema este su(liniata pentru a va arata cat de atenti tre(uie sa fiti cand utili%ati (ariere. /ste de ajuns o greseala mica si totul se opreste in lant. /ste ca si programarea intr-un lim(aj de asam(lare numai ca mult mai rau deoarece greselile duc la conditii de competitie, impasuri, si alte forme de comportament nepreva%ut si unic. 'entru a usura scrierea corecta a programelor, Doare *1FEG- si :rinc. Dansen *1FE<- au propus un nivel mai mare de sincroni%are, numit moni!or. 'ropunerea lor era putin diferita, dupa cum se vede mai jos. )n monitor este o colectie de proceduri varia(ile si structuri de date, toate grupate intr-un tip special de modul sau pac.et. 'rocesele pot sa apele%e procedurile intr-un monitor ori de cate ori doresc, dar nu pot sa accese%e direct structurile interne de date din proceduri declarate e3terioare monitorului. Fig. #-1; ilustrea%a un monitor scris intr-un lim(aj imaginar, pidgin 'ascal. ,onitor e3ample "nteger i & Condition c& 'rocedure producer*3-& XXXXXXXXX. XXXXXXXXX XXXXXXXXX XXXXXXXXX end& 'rocedure consunner*3-& XXXXXXXXX. XXXXXXXXX.. GG

Aritoni Ovidiu XXXXXXXXX. /nd& /nd monoitor& Fig. 2-1" )n monitor

Sisteme de operare 1

,onitoarele au o caracteristica importanta care le face utile pentru reali%area e3cluderii reciproce$ un singur proces poate fi activ intr-un monitor la un moment dat. ,onitoarele sunt construite ca lim(aje de programare, deci compilatorul stie ca sunt deose(ite si ca poate sa trate%e apelurile catre procedurile monitorului altfel decat alte proceduri de apel. 0e o(icei, cand un proces apelea%a o procedura de monitor, primele instructiuni ale procedurii vor verifica daca mai e3ista in mod curent vreun proces aciv in cadrul monitorului. 0aca da, procesul apelant va fi suspendat pana celalalt proces paraseste monitorul. 0aca nu, procesul poate sa intre. Compilatorul este cel care tre(uie sa implemente%e e3cluderea reciproca la intrarile in monitor, dar in mod o(isnuit se foloseste o (ariera (inara. 0eoarece compilatorul si nu programatorul se ocupa de e3cluderea reciproca este mult mai putin pro(a(il ca ceva sa nu mearga (ine. "n orice ca%, persoana care scrie monitorul nu tre(uie sa fie constienti de modul in care compilatorul reali%ea%a e3cluderea reciproca. /ste suficient sa stie ca prin transformarea %onelor critice in proceduri de monitor nu se va intampla niciodata ca doua procese sa intre in acelasi timp in %onele lor critice. 0esi monitoarele furni%ea%a un mod simplu de reali%are a e3cluderii reciproce, dupa cum am va%ut mai sus, acest lucru nu este suficient. ,ai avem nevoie de un mod de (locare a proceselor in momentul in care acestea nu pot continua. "n ca%ul pro(lemei producator-consumator este destul de usor sa includem in procedurile monitorului toate testele pentru (uffer, dar cum ar tre(ui sa se (loc.e%e producatorul cand gaseste (uffer-ul plinW Solutia consta in introducerea variabi'e'or de condi!ie, impreuna cu doua operatii JA"H si S"IBA4. Cand o procedura de monitor descopera ca nu poate merge mai departe *e3. producatorul gaseste (uffer-ul plin- e3ecuta o operatie de asteptare pe o varia(ila de conditie, de e3emplu, full. Aceasta actiune produce (locarea procesului apelant. 0e asemenea, permite altui proces sa intre in monitor in acest moment. Acest alt proces, de e3emplu consumatorul, poate sa-si porneasca partenerul aflat in repaus e3ecutand operatiunea S"IBA4 la varia(ila de conditie unde asteapta partenerul sau. 'entru a nu avea in monitor doua procese active in acelasi timp avem nevoie de o regula care sa sta(ileasca ce se intampla dupa S"IBA4. Doare a propus sa se permita rularea procesului a(ia repornit si suspedarea celuilalt. Dansen a propus sa se ceara unui proces care a e3ecutat un S"IBA4 sa paraseasca imediat monitorul. Cu alte cuvinte, o comanda S"IBA4 poate sa apara doar ca ultima comanda intr-o procedura de monitor. 5om utili%a propunerea lui Dansen deoarece este mai simpla si mai usor de implementat. 0aca operatiunea S"IBA4 se e3ecuta pe o varia(ila de conditie pe care asteapta mai multe procese, este repornit doar unul dintre ele, cel sta(ilit de administratorul sistemului. 5aria(ilele de conditie nu sunt contoare. /le nu acumulea%a semnale pentru o utili%are ulterioara, asa cum fac (arierele. Astfel daca este semnalata o varia(ila de conditie unde nu asteapta nici un proces, semnalul este pierdut. Comanda JA"H tre(uie sa vina inaintea comen%ii S"IBA4. Aceasta regula face ca implementarea sa fie mult mai G<

Aritoni Ovidiu

Sisteme de operare 1

simpla. "n practica nu este o pro(lema deoarece este usor de tinut evidenta starii fiecarui proces cu varia(ile, daca acest lucru este necesar. )n proces care ar e3ecuta o comanda S"IBA4 poate sa vada ca acest lucru nu mai este necesar, doar consultand varia(ilele. O sc.ema a pro(lemei producator-consumator cu monitoare este data in fig.#-1G in pidgin 'ascal. 'oate va ganditi ca operatiile JA"H si S"IBA4 arata similar cu S4//' si JAA/)', care, dupa cum am va%ut mai devreme au dus la conditii fatale de competitie. /le sunt foarte asemanatoare, dar cu o diferenta foarte importanta$ S4//' si JAA/)' au esuat din cau%a ca in timp ce un proces incerca sa intre in repaus celalalt incerca sa-l repporneasca. Cu monitoarele acest lucru nu se poate intampla. /3cluderea reciproca automata in ca%ul monitoarelor garantea%a ca daca, producatorul dintr-o procedura de monitor constata ca (uffer-ul e plin va putea sa inc.eie operatia JA"H fara sa tre(uiasca sa-si faca griji in legatura cu posi(ilitatea ca administratorul sa-l sc.im(e cu consumatorul c.iar inainte de a inc.eia operatia. Consumatorului nu " se va permite nici macar accesul in monitor pana cand aceasta operatiune nu este inc.eiata si producatorul nu mai rulea%a. ,onitor 'roducerConsummer & Condition full ,empt> & "nteger count& 'rocedure enter& :egin "f count OB t.en wait *full-& /nter item& Count$OcountU1& "f countO1 t.en signal*empt>-& /nd& Count$O9& /nd monitor& 'rocedure producer& :egin J.ile true do :egin 'roduce\item& 'roducerConsumer.enter& /nd /nd& 'rocedure consumer& :egin J.ile true do :egin 'orducerConsumer.remove& G7

Aritoni Ovidiu Consume\item& /nd& /nd&

Sisteme de operare 1

Fig. 2-14. O sc.ita a pro(lemei producator-consumator cu monitoare. 4a un moment dat doar o procedura a monitorului poate fi activa.(uffer-ul are B slot-uri. 'rin marcarea automata a e3cluderii reciproce in ceea ce priveste %onele critice, monitoarele fac programarea paralela mult mai putin dispusa la erori decat cu (ariere. Hotusi, si ele au cateva puncte sla(e. Bu degea(a fig. #-1G este scrisa intr-un tip ciudat de pidgin 'ascal si nu in C la fel ca celelalte e3emple din aceasta carte. 0upa cum am spus si mai devreme, monitoarele sunt un concept de lim(aj de programare. Compilatorul tre(uie sa le recunoasca cumva si sa le aranje%e pentru e3cluderea reciproca. C, 'ascal si majoritatea lim(ajelor de programare nu au monitoare, deci este anormal sa le pretindem compilatoarelor lor sa aplice vreo regula de e3cludere reciproca. 0e fapt, cum ar putea sa stie compilatorul care proceduri sunt din monitor si care nuW Aceleasi lim(aje nu au nici (ariere, dar adaugarea lor se face foarte usor$ nu tre(uie decat sa adaugi doua scurte coduri de asam(lare (i(liotecii pentru a emite apelurile sistem )' si 0OJB. Compilatoarele nici nu tre(uie sa stie de e3istenta acestora. 0esigur, sistemul de operare tre(uie sa stie de e3istenta (arierelor, dar cel putin daca avem un sistem de operare (a%at pe (ariere tot se pot scrie programe utili%atoare pentru ele in C sau CUU *sau c.iar :AS"C daca sunteti suficient de masoc.ist-. "n ca%ul monitoarelor aveti nevoie de un lim(aj care le are incluse. /3ista cateva lim(aje care le au, cum este Concurrent /uclid *Dolt, 1F8;-, dar sunt foarte rare. O alta pro(lema in ceea ce priveste monitoarele si (arierele este aceea ca au fost proiectate sa re%olve pro(lema e3cluderii reciproce in sisteme cu unul sau mai multe procesoare cu acces la memoria principala. 'unand (arierele in memoria comuna si protejarea lor cu instructiuni HS4 putem sa evitam competitia. "n ca%ul unui sistem distri(uit, constand in mai multe procesoare, fiecare cu memoria sa, conectate printr-o retea locala, aceste mijloace devin inaplica(ile.conclu%ia este ca (arierele au un nivel mult prea sca%ut, iar monitoarele nu sunt utili%a(ile decat in cateva lim(aje de programare. 0e asemenea, nici unul dintre mijloace nu asigura sc.im(ul de informatii intre masini. /ste nevoie de altceva.

F. #ransmiterea mesa&elor
Acest altceva este !ran mi!erea me a1e'or. Aceasta metoda de comunicare interprocesorala utili%ea%a doua operatii S/B0 si +/C/"5/, care asemeni (arierelor si spre deose(ire de monitoare sunt mai degra(a apeluri sistem decat construcii de lim(aj. Ca atare, ele pot fi usor puse in proceduri de (i(lioteca dupa cum urmea%a$ send*destination, Tmessage-& and receive*source, Tmessage-& GE

Aritoni Ovidiu

Sisteme de operare 1

primul apel trimite un mesaj la o anumita destinatie, iar cel din urma primeste un mesaj de la o anumita sursa *sau de la orice sursa daca receptorul nu este atent-. 0aca nu e3ista nici un mesaj disponi(il, receptorul se poate (loca pana soseste unul. "n mod alternativ poate sa raspunda imediat printr-un mesaj de eroare.

Probleme de proiecare pentru sistemele de transmitere a mesajelor


Sistemele de transmitere a mesajelor au multe pro(leme care nu apar in ca%ul monitoarelor si (arierelor mai ales daca procesele care comunica se afla pe masini diferite conectate prin retea. 0e e3emplu mesajele pot fi pierdute de catre retea. 'entru a evita pierderea mesajelor, e3peditorul si receptorul pot sa cada de acord ca imediat ce un mesaj a fost primit, receptorul va trimite inapoi un mesaj de con(irmare. 0aca e3peditorul nu a primit acest mesaj intr-un anumit interval de timp, retransmite mesajul. Acum sa vedem ce se intampla daca mesajul propriu-%is este primit, dar confirmarea se pierde. /3peditorul va retransmite mesajul astfel incat receptorul sa-l primeasca de doua ori. /ste foarte important ca receptorul sa faca deose(irea intre retransmiterea unui mesaj si un mesaj nou. 0e o(icei aceasta pro(lema este re%olvata prin punerea unor numere de secventa consecutive in fiecare mesaj original. 0aca receptorul primeste un mesaj avand acelasi numar de secventa ca mesajul anterior, va sti ca mesajul este un duplicat si ca poate fi ignorat. Sistemele de mesaj tre(uie sa re%olve si c.estiunea modului in care sunt denumite procesele, astfel incat sa fie clar ce proces este specificat intr-un apel S/B0 sau +/C/"5/. Au!en!i(icarea este o alta pro(lema a sistemelor de mesaj$ cum poate clientul sa-si dea seama daca cel cu care comunica este adevaratul server de fisier si nu un impostorW 4a celalalt capat al spectrumului e3ista de asemenea pro(leme importante cand e3peditorul si receptorul sunt conectati la aceeasi masina. )na dintre ele este performanta. Copierea mesajelor de la un proces la altul se face tot timpul mai incet decat o operatie de (ariera sau intrarea intr-un monitor. S-a lucrat mult la eficienti%area transmitarea mesajelor. C.eriton *1F8G- de e3emplu, a sugerat limitarea marimii mesajului astfel incat acesta sa incapa in registrii masinii si apoi mesajul sa se transmita cu ajutorul registriolor.

Problema producator-consumator cu transmiterea mesajelor


Acum sa vedem modul in care pro(lema producator-consumator poate fi re%olvata prin transmitere de mesaje si nu prin memorie comuna. O solutie este data in fig. #-1<. 'resupunem ca toate mesajele sunt de aceeasi marime si ca mesajele trimise , dar neprimite inca sunt amorti%ate automat de catre sistemul de operare. "n acest ca%, este utili%at un total de B mesaje, analog numarului B de slot-uri dintr-un (uffer al memoriei comune. Consumatorul incepe prin trimiterea de B mesaje goale producatorului. 0e G8

Aritoni Ovidiu

Sisteme de operare 1

fiecare data cand producatorul are de furni%at o informatie consumatorului, ia un mesaj gol si il trimite inapoi plin. Astfel, numarul total de mesaje din sistem ramane constant in timp, astfel incat ele pot fi stocate intr-o anumita cantitate de memorie, stiuta dinainte. 0aca producatorul lucrea%a mai repede decat consumatorul, toate mesajele vor sfarsi prin a fi pline asteptand consumatorul& producatorul va fi (locat asteptand ca un mesaj gol sa se intoarca. "n ca%ul in care consumatorul lucrea%a mai repede, situatia se va inversa$ toate mesajele vor fi goale asteptand ca producatorul sa le umple& consumatorul va fi (locat asteptand un mesaj plin. `define B 199 void producer*Y int item & message m& w.ile *trueY produce\item*Titem-& receive*consumer,Tm-& (uild\message*Tm,item-& send*consumer,Tm-& ] ] void consumer *Y int item,"& message m& for*"Oo&"SB&"UU- send *prodicer,Tm-& w.ile*trueY receive*producer,Tm-& e3tract\item*Tm,Titem-& send*producer,Tm-& consume\item*item-& ] ] Fig 2-15. pro(lema producator-consumator cu B mesaje. /3ista multe variante posi(ile in ca%ul transmiterii mesajului. 'entru inceput sa vedem modul in care sunt adresate mesajele. )n mod este de a atri(ui fiecarui proces o adresa unica si de a programa mesajele de-a se adresa proceselor. )n alt mod este sa inventam o noua structura de date numita cu!ie $o !a'a. O cutie postala este un loc in care se amorti%ea%a un anumit numar de mesaje, numar care de o(icei se specifica atunci cand aceasta este creata. Atunci cand sunt utili%ate cutiile postale parametrii de adresa din apelurile S/B0 si +/C/"5/ sunt cutiile postale si nu procesele. Cand un proces incearca GF

Aritoni Ovidiu

Sisteme de operare 1

sa trimita ceva unei cutii postale deja pline este suspendat pana cand un mesaj este scos din cutia postala respectiva facand loc pentru unul nou. 'entru pro(lema producator-consumator atat producatorul cat si consumatorul vor creea cutii postale destul de mari incat sa incapa B mesaje. 'roducatorul va trimite mesaje continand date catre cutia postala a consumatorului iar consumatorul va trimite mesaje goale catre cutia postala a producatorului. Atunci cand sunt folosite cutii postale mecanismul de amorti%are este clar$ cutia postala destinatara retine mesajele care au fost trimise procesului destinatar dar care n-au fost acceptate inca. /3trema opusa cutiilor postale este eliminarea oricarei amorti%ari. Atunci cand acest tip de a(ordare este urmat, daca operatia S/B0 este e3ecutata inaintea operatiei +/C/"5/ procesul e3peditor este (locat pana la inc.eierea operatie de primire, moment in care mesajul poate fi copiat direct din e3peditor in receptor fara nici un fel de amorti%are intermediara. "n acelasi mod, daca operatia +/C/"5/ este e3ecutata mai intai receptorul este (locat pana la efectuarea operatiei de primire. Aceasta strategie este cunoscuta su( numele de rendezvou . /ste mai usor de implementat decat o sc.ema de mesaj amorti%at dar este mai putin fle3i(ila de vreme ce receptorul si e3peditorul sunt o(ligati sa rule%e in pas de (locaj. Comunicarea interprocesorala dintre procesele utili%atoare din ,"B"P *si )B"Pse face prin pipes, care sunt de fapt cutii postale. Singura diferenta reala dintre un sistem de mesaj cu cutii postale si mecanism pipe este acela ca cel de-al doilea nu pastrea%a limitele mesajelor. Cu alte cuvinte daca un proces scrie 19 mesaje de cate 199 (>tes pentru un pipe si alt proces citeste 1999 (>tes de pe acelasi pipe, cititorul va primi toate cele 19 mesaje dintr-o data. "n ca%ul unui adevarat sistem de mesaj fiecare +/A0 ar tre(ui sa returne%e un singur mesaj. :ineinteles daca procesele cad de acord ca tot timpul sa citeasca si sa scrie pe pipe mesaje cu marime fi3a sau sa inc.eie fiscare mesaj cu un caracter special, nu vor e3ista nici un fel de pro(leme. 'rocesele care alcatuiesc sistemul de operare ,"B"P utili%ea%a pentru comunicarea intre ele o sc.ema de mesaj cu mesaje de marime fi3a.

3.Probleme clasice de !PC


A.Pro'lema productorilor i consumatorilor
Se d un recipient care poate s memore%e un numr limitat de o(iecte n el. Se presupune c sunt active dou categorii de procese care accea% acest recipient$ productori& consumatori. <9

Aritoni Ovidiu

Sisteme de operare 1

'roductorii introduc o(iecte n recipient iar consumatorii e3trag o(iecte din recipient. 'entru ca acest mecanism s func!ione%e corect, productorii i consumatorii tre(uie s ai( acces e3clusiv la recipient. ?n plus, dac un productor ncearc s accese%e un recipient plin, el tre(uie s a tepte consumarea cel pu!in a unui o(iect. 'e de alt parte, dac un consumator ncearc s accese%e un recipient gol, el tre(uie s a tepte p2n c2nd un productor introduce o(iecte n el. 5om pre%enta mai jos o solu!ie cu semafoare pentru aceast pro(lem. ?n acest scop vom folosi trei semafoare. 1. semafoarele plin i gol pentru sincroni%area proceselor productor i consumator& #. semaforul mute3 care asigur accesul e3clusiv la recipientul de o(iecte. 'ro(lema productorilor i a consumatorilor se implementea% folosin algoritmii descri i n urmatorul program . var int n& semap.ore mute3O1& semap.ore golOn& semap.ore plinO9& 'roducator * - Y int o(iect& w.ile *H+)/- Y creea%a *o(iect-& '*gol-& '*mute3-& depune *o(iect-& 5*mute3-& 5*plin-& @@dimensiunea recipientului de mesaje @@controlea%a accesul la regiunea critica @@retine nr. po%itii li(ere din recipient @@retine nr. po%itii ocupate din recipient

@@ produce un nou o(iect o(iect @@ decrementea%a semaforul gol @@ intra n regiunea critica @@ introduce o(iectul o(iect n recipient @@ iese din regiunea critica @@ incrementea%a semaforul plin

] ] @@ 'roducator Consumator * - Y int o(iect& w.ile *H+)/- Y ' *plin-& ' *mute3-& e3trage *o(iect-& 5 *mute3-& 5*gol-& consuma *o(iect-& ] ] @@ Consumator

@@ decrementea%a semaforul plin @@ intra n regiunea critica @@ scoate un o(iect o(iect din recipient @@ iese din regiunea critica

@@incrementea%a semaforul gol @@consuma o(iectul

<1

Aritoni Ovidiu

Sisteme de operare 1

'rogramul principal$ 'A+:/I"B 'roducator * -& a Consumator * -& 'A+/B0

B.Pro'lema cititorilor i a scriitorilor


Se d o resurs numit (a% de date la care au acces dou categorii de procese$ cititori& scriitori.

'rocesele cititori accesea% resursa numai n citire, iar scriitorii numai n scriere. Se permite ca mai mul!i cititori s citeasc simultan (a%a de date. ?n scim( fiecare proces scriitor tre(uie s accese%e e3clusiv (a%a de date. 5om modela solu!ia acestei pro(leme, folosind dou semafoare$ un semafor (d care asigur acces e3clusiv al scriitorilor la (a%a de date& un semafor mute3 care controlea% opera!iile de incrementare i decrementare a varia(ilei nrCit, care re!ine numrul de cititori activi la un moment dat.

Algoritmii dup care se lucrea% sunt pre%enta!i n urmatorul program $ var semap.ore mute3O1& semap.ore (dO1& int nrCit& Cititor * - Y w.ile *H+)/- Y ' *mute3-& @@ o(tine accesul la varia(ila nrCit nrCitOnrCit U 1& if *nrCit RO1Y '*(d-& @@ (loc.ea%a eventualii scriitori 5 *mute3-& @@ eli(erea>a semaforul mute3 citeste\(d * -& @@ citeste (a%a de date ' *mute3-& <#

Aritoni Ovidiu nrCit O nrCit = 1& if *nrCit OO 95F(d-& @@ eli(erea%a semaforul (d 5 *mute3-& utili%\data* - @@ foloseste datele citite ] ] @@ Cititor Scriitor * - Y w.ile *H+)/- Y creea%a\date * -& ' *(d-& scrie\(d * -& 5 *(d-& ] ] @@ Scriitor 'rogramul principal$ 'A+:/I"B Scriitor * -& a Cititor * -& 'A+/B0

Sisteme de operare 1

@@ creea%a date care vor fi introduse @@ o(tine accesul in scriere @@ scrie informatia in (a>a de date @@ eli(erea%a accesul e3clusiv la (a%a de date

C.Pro'lema celor ( filo)ofi


0e i insolit prin enun!, este una dintre cele mai cunoscute pro(leme de concuren!. 4a o mas rotund stau < filo%ofi, care au doar dou misiuni$ - s mn2nce& - s medite%e. Fiecare filo%of are n st2nga i n dreapta lui c2te o furculi!, partajat cu vecinul su, din partea respectiv. C2nd un filo%of dore te s mn2nce, ncearc s ia cele dou furculi!e. 0ac una dintre ele este folosit de un vecin al su, filo%oful va tre(ui s a tepte. )B filo%of mn2nc numai c2nd are am(ele furculi!e, dup care le pune din nou pe mas i i reia opera!ia de meditare. ?n aceast pro(lem, procesele sunt Kfilo%ofiiN, iar resursele accesate sunt Kfurculi!eleN. Solu!ia pro(lemei filo%ofilor urmre te evitarea a dou situa!ii nedorite$

<;

Aritoni Ovidiu impasul apare dac un filo%of a teapt la nesf2r it o(!inerea unei furculi!e. infometarea *#.G.#-

Sisteme de operare 1

apare dac accesarea furculi!elor se face inec.ita(il ntre cei < filo%ofi. 0e e3emplu, urmtoarea solu!ie poate conduce la impas, c2nd doi filo%ofi vecini ncearc s o(!in o furculi! ocupat de cellalt. Fiecare dintre ei ocup mai nt2i furculi!a din st2nga pe care nu o mai ced, dup care o solicit pe cea din dreapta, care este deja ocupat. Ac!iunile celor < filo%ofi sunt descrise n urmatorul program $ Filo%of *ind- Y +esursa furcSt, furc0r& J.ile *H+)/- Y Iandeste * -& O(tine+es *furcSt-& O(tine+es *furc0r-& ,ananca * -& /li(+es *furcSt-& /li(+es *furc0r-& ] ] @@ Filo%of @@ ind = indicele filo%ofului

'rogramul principal$ 'A+:/I"B Filo%of *1-& a Filo%of *#-& a Filo%of *;-& a Filo%of *G-& a Filo%of *<-& 'A+/B0 Solu!ii posi(ile pentru re%olvarea impasului$ 0ac un filo%of nu poate o(!ine i furculi!a din dreapta, atunci eli(erea% furculi!a din st2nga i ncearc mai t2r%iu *folosind aceast solu!ie se poate ajunge la KnfometareN-. )n singur filo%of s mn2nce la un moment dat *seriali%are-. O(!inerea am(elor furculi!e printr-o opera!ie atomic, ceea ce poate conduce la nfometarea de e3emplu a filo%ofului #, dac filo%ofii 1 i ; nu Kg2ndescN nici o dat n acela i timp. 'rogramul urmator d solu!ie corect, n care gestiunea Kfurculi!elorN este reali%at centrali%at de ctre procesul server +esServer. 'rogramul principal rm2ne cel de mai sus. var nrFil O <& @@ numarul de filo%ofi stare ^nrFil_ @@ intrarile pot fi$ "BFO,/HAH, ,ABABCA, IAB0/SH/ semap.ore self ^ _ O Y1,1,1,1,1]& @@ semafoare (inare asociate <G

Aritoni Ovidiu semap.ore multe3 O 1&

Sisteme de operare 1 @@ pentru acces e3clusiv

+esServer ds& @@ procesul server care gestionea%a furculitele Filo%of *id- Y @@ procedura asociata folo%ofului cu indicele id 0s. o(tineFurc *id-& mananca * ds. eli(Furc *id-& ] @@ Filo%of int dreapta *int iY return *nrFil U i = 1- b nrFil& ] @@ dreapta int stanga *int ireturn *i U 1] @@ stanga Y b nrFil&

o(tineFurc *int i- Y ' *mute3-& stare ^i_ O "BFO,/HAH& test *i-& @@ verific dac vecinii filo%ofului i nu se afl starea @@ ,ABACA - R ca% n care filo%oful i prime te cele dou @@ furculi!e i trece din starea "BFO,/HAH n starea @@ ,ABABCA, astfel a teapt ndeplinirea condi!iei respective 5 *mute3-& ' *self ^i_-& ] @@ o(tineFurc eli(Furc *int i- Y ' *mute3-& stare ^i_ O IAB0/SH/& test *stanga *i--& test *dreapta *i-& 5 *mute3-& ] @@ eli(Furc test *int 1Y ' *mute3-& stare ^i_ O IAB0/SH/& test *stanga *i--& test *dreapta *i--& 5 *mute3-& ] @@ eli(Furc <<

Aritoni Ovidiu test *int 1- Y if *stare ^stanga *1-_ Z O ,ABABCA T T stare ^dreapta *1-_ Z O ,ABABCA T T stare ^1_ O O "BFO,/HAH- Y stare ^1_ O ,ABABCA& 5 *self ^1_ -& ] ] @@ test

Sisteme de operare 1

.Pro'lema fri)erului
Acest pro(lem porne ter de la urmtoarele ipote%e$ un fri%er tunde pe r2nd mai mul!i clien!i& un client intr n fri%erie, dac aceasta este plin el pleac, altfel i a teapt r2ndul la tuns& dac nu mai sunt clien!i, fri%erul doarme i este tre%it de urmtorul client care dore te s fie tuns& Considerm c ini!ial fri%erul doarme i este tre%it de primul cilent venit. 'rogramul urmator pre%int o solu!ie acestei pro(lemei. var semap.ore semf O 9& semap.ore semf O 1& int nrCl O n& semap.ore mute3& Client * Y ' *mute3-& if *nrCl U 1SOn- Y nrCl O nrCl U 1& 5 *semf-& ] else Y 5 *mute3-& e3it * -& ] 5 *mute3-& ' *semp-& ] @@ Client

@@ semafor asociat fri%erului @@ semafor asociat unui client @@ numar ma3im de clien!i care pot a&tepta @@ pt. acces e3clusiv la varia(ile

@@ anun! fri%erul c dore te s fie tuns

@@ i a teapt r2ndul

<7

Aritoni Ovidiu Fri%er * - Y w.ile *trueY ' *semf-& ' *mute3-& nrCl O nrCl = 1& 5 *mute3-& 5 *semp-& ] ] @@ Fri%er

Sisteme de operare 1

@@ a teapt un client @@ l tunde @@ c.eam urmtorul clent

'rogramul principal$ int nO 19& 'A+:/I"B Fri%er * -& Client * -& a Client * -& a Client * -& . . . a Client * -& a Client * -& 'A+/B0 'rogramul #.<. 'ro(lema fri%erului

". #dministrarea proceselor


"n e3emplele din sectiunile anterioare am intalnit deseori situatii in care doua sau mai multe procese *e3. producator si consumator- puteau fi, in mod logic, rulate pe computer. Atunci cand mai mult de un proces poate fi rulat, sistemul de operare tre(uie sa decida care este primul pe care il rulae%a. 'artea din sistemul de operare care .otaraste acest lucru se numeste tempori%ator, iar algoritmul pe care il foloseste se numeste algoritm tempori%ator. 0emult, cand sistemele de incarcare aveau intrari su( forma de imagini inregistrate pe o (anda magnetica, algoritmul tempori%ator era simplu$ pur si simplu rulea%a urmatoarea sarcina de pe (anda. "n ca%ul sistemelor legate in retea algoritmul tempori%ator este mult mai comple3 deoarece e3ista adesea mai multi utili%atori care solicita serviciile computerului, la fel cum pot e3ista simultan mai multe flu3uri de incarcare *e3. intr-o firma de asigurari pentru procesarea cererilor-. C.iar si pe un computer personal pot e3ista mai multe procese initiate de catre utili%ator, procese care deja solicita procesorul, ca sa nu mai vor(im de sarcinile de fond cum sunt reteaua sau posta electronica primind sau trimitand mesaje. <E

Aritoni Ovidiu

Sisteme de operare 1

"nainte de a anali%a anumiti algoritmi de tempori%are tre(uie sa ne gandim care este functia tempori%atorului. Sa nu uitam, tempori%atorul tre(uie sa decida ordinea si nu sa furni%e%e mecanismul. /3ista mai multe criterii care tre(uie sa fie intrunite de un (un algoritm de tempori%are. 0intre acestea amintim$ 1. /c.ita(ilitatea - asgurati-va ca toate procesele folosesc parti egale din procesor. #. /ficienta - procesorul tre(uie sa lucre%e tot timpul la intreaga sa capacitate. ;. Himpul de raspuns - micsorarea timpului de raspuns pentru fiecare utili%ator interactiv. G. Confirmarea raspunsului - micsorarea timpului in care utili%atorii care introduc date primesc re%ultatul. <. 5ite%a de lucru - marirea numarului de sarcini efectuate intr-o ora. 0aca va ganditi putin veti constata ca unele dintre aceste criterii sunt contradictorii. 'entru a micsora timpul de raspuns pentru utili%atorii interactivi tempori%atorul ar tre(ui sa nu rule%e nici o sarcina de incarcare *poate doar intre orele ; a.m. si 7 a.m. cand toti utili%atorii interactivi dorm-. Hotusi, utili%atorii care doresc sa introduca date nu vor agrea, pro(a(il, acest algoritm deoarece este in contradictie cu punctul G. Se poate demonstra ca orice algoritm de tempori%are ce avantajea%a o anumita categorie de sarcini defavori%ea%a automat alta. 4a urma urmei timpul disponi(il al procesorului este limitat. 'entru a da mai mult unui utili%ator tre(uie sa-i dai altuia mai putin. Asa e viata. O pro(lema pe care tempori%atoarele tre(uie sa o re%olve este faptul ca fiecare proces este unic si imprevi%i(il. )nele pierd mult timp asteptand dupa fisiere "@O in timp ce altele ar utili%a procesorul cat mai mult timp posi(il. Cand tempori%atorul incepe sa rule%e un proces nu se stie peste cat timp procesul respectiv se va (loca fie pentru "@O, fie la o (ariera, fie din alte motive. 'entru a se asigura ca nici un proces nu rulea%a pentru prea mult timp, aproape toate computerele au incorporat un cronometru sau un ceas electronic care intrerupe periodic procesele. "n general frecventa este de <9 sau 79 de ori pe secunda *<9 sau 79 Dert%, prescurtat D%-, dar la multe computere sistemul de operare poate fi acela care setea%a aceasta frecventa. 4a fiecare intrerupere sistemul de operare ajunge sa rule%e si sa decida daca procesul care rulea%a in momentul respectiv tre(uie sa continue sau daca a (eneficiat de procesor destul timp si, pentru moment alt proces tre(uie sa utili%e%e procesorul. Aceasta strategie de a suspenda temporar procesele care pot fi rulate se numeste tempori%are preemptiva si este in opo%itie cu metoda crulea%a pana la capatc utili%ata de vec.ile sisteme de incarcare, metoda care se mai numeste si programare non-preemptiva. 0upa cum am va%ut in acest capitol, un proces poate fi suspendat intr-un moment ar(itrar, fara nici un avertisment, pentru ca alt proces sa poata fi rulat. Acest lucru crea%a conditii de competitie astfel ca (arierele, ferestrele, mesajele, precum si alte metode mai sofisticate devin necesare pentru a preveni aceasta situatie. 'e de alta parte, daca un proces ar fi lasat sa rule%e fara intreruperi pana la sfarsit ar insemna ca un proces care calculea%a valoarea lui '" cu un miliard de %ecimale ar (loca rularea altor procese pentru un timp nelimitat. Astfel, desi algoritmii de tempori%are non-preemptiva sunt simpli si usor de implementat, ei nu sunt folositi in general pentru sisteme o(isnuite cu mai multi utili%atori simultan. 'e de alta parte, pentru sisteme dedicate, asa cum este un server pentru (a%a de date se poate ca procesul principal sa initie%e un proces secundar care <8

Aritoni Ovidiu

Sisteme de operare 1

lucrea%a pentru o solicitare si sa-l lase sa rule%e pana la final sau pana se (loc.ea%a. 0iferenta dintre acest tip de sistem si sistemele o(isnuite este aceea ca intr-un sistem pentru (a%e de date toate procesele sunt controlate de acelasi stapan care stie ce va face fiecare su(ordonat si cat va dura procesul respectiv.

A. Administrarea circulara
Acum .aideti sa anali%am cateva tipuri particulare de algoritmi de administrare. )nul dintre algoritmuii cei mai vec.i, mai simpli si mai ec.ita(ili, precum si cel mai utili%at este cel circular. Fiecarui proces ii este alocat un interval de timp, numit Muantumul sau, timp in care ii este permis sa rule%e. 0aca la sfarsitul acestui interval procesul inca rulea%a, procesul este interrupt si procesorul alocat altui proces. 0aca procesul s-a (locat sau s-a inc.eiat inaintea timpului alocat, comutarea procesorului se face desigur, in momentul (locarii. Acest tip de tempori%are este foarte usor de implementat. Hot ce are de facut tempori%atorul este sa mentina o lista de procese care pot fi rulate, asa cum se vede in fig. #-##*a-. Atunci cand procesul si-a utili%at timpul alocat trece la sfarsitul listei, ca in fig. #-##*(-.

fig. #-##. Hempori%area circulara. *a- 4ista proceselor care pot fi rulate *(- 4ista proceselor care pot fi rulate dupa ce : si-a folosit timpul alocat. Singurul punct interesant in ceea ce priveste tempori%area circulara este lungimea Muantumului. Comutarea de la un proces la altul necesita un anumit timp pentru ca tre(uie salvati si incarcati registrii si sc.emele de memorie, actuali%ate diferite liste si ta(ele, etc. Sa presupunem ca aceasta sc.im(are de proces sau sc.im(are de conte3t, cum se mai numeste, durea%a < msec. Sa presupunem de asemenea ca avem un Muantum setat la #9 msec. Cu acesti parametri, dupa #9 de msec. de lucru util, procesorul tre(uie sa faca sc.im(area de proces in < msec., astfel, doua%eci la suta din timpul procesorului va fi irosit pentru sarcini administrative. 'entru a mari eficienta procesorului am putea sa setam Muantumul la <99 msec., de e3emplu. Acum, timpul pierdut nu trece de 1 procent. 0ar ganditi-va ce se intampla intr-un sistem legat la server daca 19 utili%atori interactivi apasa tasta pentru furni%area re%ultatelor apro3imativ in acelasi timp. dece procese vor fi adaugate pe lista proceselor care pot fi rulate. 0aca procesorul nu lucrea%a, primul proces va incepe imediat, cel de-al <F

Aritoni Ovidiu

Sisteme de operare 1

doilea o jumatate de secunda mai tar%iu, si asa mai departe. Cel care are g.inionul sa fie ultimul poate sa fie nevoit sa astepte < secunde pana sa ai(a oca%ia sa inceapa, presupunand ca toti ceilalti isi folosesc integral Muantumul. ,ajoritatea utili%atorilor vor fi de parere ca este mult prea mare un interval de < secunde pentru a raspunde la o comanda simpla. Aceeasi pro(lema poate sa apara la un computer personal care suporta multiprogramarea. Conclu%ia poate fi formulata astfel$ setarea unui Muantum prea scurt mareste numarul de sc.im(ari de procese si diminuea%a eficienta procesorului, dar daca acest Muantum este prea mare poate duce la o intar%iere prelungita a raspunsului pentru comen%ile scurte interactive. )n Muantum de 199 msec. este adesea un compromis re%ona(il.

B. Administrare prioritara
Administrarea circulara presupune, implicit ca toate procesele au aceeasi importanta. Adesea, cei care detin si operea%a computere cu mai multi utili%atori nu sunt de aceeasi parere.4a universitate ordinea importantei este$ intii decanul, apoi profesorii, secretarele, portarul si in sfarsit, studentii.Becesitatea de a lua in considerare factori e3terni duce la tempori%area prioritara. "deea principala este urmatoarea$ fiecarui proces ii este atri(uita o anumita importanta, iar procesul cu cea mai mare importanta este cel care va rula. C.iar si pe un computer cu un singur utili%ator pot e3ista mai multe procese, unele mai importante decat altele. 0e e3emplu, un program de fond care trimite emailuri ar tre(ui sa ai(a o mai mica importanta decat un proces care afisea%a pe ecran un film video in timp real. 'entru ca procesele cu o importanta ridicata sa nu rule%e la nesfarsit, tempori%atorul poate sa scada importanta procesului care rulea%a in momentul respectiv odata cu fiecare intrerupere a cronometrului. 0aca aceasta scadere a importantei il face sa fie mai putin important decat urmatorul proces de pe lista se produce o sc.im(are de procese. "n acelasi timp, fiecarui proces ii poate fi alocat un Muantum ma3im in care poate sa utili%e%e procesorul fara intrerupere. 4a sfarsitul acestui Muantum, urmatorul proces de pe lista incepe sa rule%e. "mportanta proceselor poate fi atri(uita static sau dinamic. 'e un computer militar procesele initiate de catre generali pot porni cu importanta de 199, cele initiate de colonei - F9, maiori - 89, capitani - E9, locotenenti - 79, si asa mai departe. "n acelasi timp, la un centru commercial de computere, cele mai importante lucrari ar putea costa 199 de dolari pe ora, cele de importanta medie - E< de dolari pe ora, iar cele cu o importanta sca%uta <9 de dolari pe ora. Sistemul )B"P are o comanda, nice, care permite, la cererea utili%atorului, scaderea importantei procesului sau pentru a fi ama(il cu ceilalti. Bimeni nu-l foloseste niciodata. 'rioritatea poate fi atri(uita dinamic de catre sistem pentru a indeplini diferite functii ale sistemului. 0e e3emplu, unele procese sunt strans legate de "@O si in cea mai mare parte a timpului asteapta finali%area "@O. 0e fiecare data cand un astfel de proces solicita procesorul, acesta ar tre(ui sa-i fie cedat imediat, pentru a-i permite sa initie%e urmatoarea comanda "@O, care poate continua in paralel cu alt proces. 0aca procesul de legatura "@O asteapta mult timp dupa procesor inseamna ca el va ocupa memoria mai mult 79

Aritoni Ovidiu

Sisteme de operare 1

timp decat este necesar. )n algoritm simplu care confera o (una efectuare a proceselor de legatura "@O este setarea prioritatii pe 1@f, unde f repre%inta raportul ultimului Muantum utili%at de un proces. )n proces care a folosit doar # msec. din cele 199 alocate va primi o prioritate de <9, in timp ce un proces care a rulat timp de <9 msec. inainte de a se (loca va primi prioritate #, iar un proces care a utili%at Muantumul in intregime va primi prioritate 1. Adesea este mult mai convena(il sa se grupe%e procesele in clase de prioritati si sa se utili%e%e tempori%area prioritara intre clase si tempori%area circulara in cadrul fiecarei clase. Figura #-#; ne arata un sistem cu G clase de prioritati. Algoritmul de tempori%are este urmatorul$ atata timp cat e3ista in clasa G de prioritati procese care pot fi rulate, sa se rule%e fiecare un Muantum, dupa metoda circulara, neluand in seama clasele cu o prioritate mai mica. 0aca in clasa G nu e3ista nici un proces, sa se rule%e procesele din clasa ; de prioritati, tot in mod circular. 0aca atat clasa G cat si clasa ; sunt goale, vor rula procesele din clasa # dupa metoda circulara, si asa mai departe. 0aca, din cand in cand prioritatile nu sunt modificate, procesele cu o mica prioritate pot sa moara acolo.

fig. #-#;. )n algoritm de tempori%are cu G clase de prioritati.

C. %anduri multiple
)nul dintre primele tempori%atoare prioritare a e3istat in CHSS *Cor(ato si al. 1F7#-. 'ro(lema intampinata de CHSS a fost aceea ca sc.im(area proceselor era foarte inceata din cau%a ca E9FG nu putea memora decat un singur process o data. Fiecare comutare insemna trecerea pe disc.eta a procesului curent si citirea de pe dis1 a unui nou proces. Cei care au proiectat CHSS si-au dat repede seama ca era mai eficient sa se dea proceselor legate de procesor un Muantum mai mare din cand in cand decat Muantumuri mici si frecvente *pentru a reduce numarul sc.im(arilor-. 'e de alta parte, un Muantum mare pentru toate procesele ar duce la cresterea timpului de raspuns, dupa cum am va%ut deja. Solutia lor a fost formarea claselor de prioritati. 'rocesele din clasele superioare erau rulate un Muantum. 'rocesele din clasele urmatoare - doua Muantumuri, urmatoarele, patru Muantumuri, si asa mai departe. 0e fiecare data cand un proces isi epui%a Muantumurile alocate era mutat o clasa mai jos. 0e e3emplu, ganditi-va la un proces care avea nevoie sa calcule%e 199 de Muantumuri fara intrerupere. "nitial ii era acordat un Muantum, apoi era sc.im(at. 0ata 71

Aritoni Ovidiu

Sisteme de operare 1

urmatoare ii erau acordate doua Muantumuri inainte de a fi sc.im(at. 4a rulari succesive ar fi o(tinut G,8,17,;# apoi 7G de Muantumuri, desi ar fi folosit pentru a-si termina sarcina doar ;E de Muantumuri din cele 7G finale. "n acest ca% ar fi nevoie numai de E sc.im(ari *inclu%and si incarcarea initiala- in loc de 199 in ca%ul unui algoritm circular pur. "n plus, pe masura ce procesul se adancea tot mai mult in randuri prioritare, ar fi rulat din ce in ce mai rar, pastrand procesorul pentru procese scurte, interactive. )rmatoarea tactica a fost folosita pentru a evita uitarea proceselor care initial necesitau o rulare indelungata, dar care ulterior, au devenit interactive. 0e fiecare data cand la un terminal se cerea finali%area, procesul apartinand terminalului respectiv era mutat in clasa cu cea mai mare importanta, presupunandu-se ca procesul este pe cale sa devina interactiv. "ntr-o %i un utili%ator cu un proces solicitant pentru procesor a descoperit ca simpla apasare a tastei /BH/+ aleatoriu, o data la cateva secunde scurta foarte mult timpul de raspuns. 4e-a spus tuturor prietenilor lui. ,orala povestii$ e mult mai usor sa faci un lucru (ine teoretic decat in practica. ,ulti alti algoritmi au fost utili%ati pentru impartirea proceselor in clase de prioritati. 0e e3emplu, sistemul P0S FG9 *4ampson, 1F78-, construit in :er1ele>, avea G clase de prioritati numite terminal, "@O, Muantum scurt si Muantum lung. Cand un proces care astepta pentru intrare de terminal era in cele din urma initiat, acesta intra in clasa cu cea mai mare imprtanta *terminal-. Cand un proces care astepta pentru dis1 era pregatit, intra in cea de-a doua clasa. Cand un proces rula inca in momentul terminarii Muantumului, acesta era initial plasat in cea de-a treia clasa. "n orice ca%, daca un proces isi epui%a integral Muantumul de prea multe ori consecutiv, fara sa se fi (locat pentru terminal sau alt "@O, era mutat in capatul randului. ,ulte alte sisteme folosesc ceva similar pentru a favori%a utili%atorii si procesele interactive fata de cele de fond.

. "ntai sarcinile cele mai scurte


,ajoritatea algoritmilor de mai sus au fost conceputi pentru sisteme interactive. Daideti sa anali%am acum unul care este potrivit in special pentru sarcini de incarcare a caror timp de rulare este cunoscut dinainte. "ntr-o companie de asigurari de e3emplu, oamenii pot sa prevada destul de e3act cat timp va fi necesar pentru a rula o incarcare de 1999 de cereri, de vreme ce o munca similara se face in fiecare %i. Atunci cand mai multe sarcini la fel de importante formea%a un rand la intrare asteptand sa fie incepute, tempori%atorul ar tre(ui sa foloseasca algoritmul cintii sarcinile cele mai scurtec. 'riviti figura #-#G. 5om vedea G sarcini A,:,C si 0 cu timpuri de rulare de 8,G,G si respectiv G minute. +ulandu-le in aceasta ordine, raspunsul pentru A va veni in 8 min, pentru : in 1#, pentru C in 17, iar pentru 0 in #9 de minute, deci o medie de 1G minute.

fig.#-#G. )n e3emplu de tempori%are de tipul cintii sarcinile cele mai scurtec 7#

Aritoni Ovidiu

Sisteme de operare 1

Acum .aideti sa anali%am ca%ul in care aceste patru sarcini sunt rulate cu ajutorul algoritmului c intii sarcinile cele mai scurtec, asa cum vedem in figura #-#G*(-. Himpurile de raspuns sunt acum de G,8,1# si #9 de minute, deci o medie de 11 minute. S-a dovedit ca aceasta metoda este cea mai (una. Sa presupunem ca e3ista patru sarcini cu timpuri de rulare de a,(,c respectiv d. 'rima sarcina este inc.eiata in intervalul de timp a, cea de-a doua in intervalul aU( si asa mai departe. ,edia de raspuns va fi de *GaU;(U#cUd-@G. /ste clar ca a contri(uie mai mult la medie decat in alte ca%uri, deci a tre(uie sa fie cea mai scurta sarcina, urmata de (, apoi de c si in cele din urma d deoarece ea fiind cea mai lunga sarcina va afecta doar timpul ei de raspuns.Acelasi argument este vala(il pentru un numar oricat de mare de sarcini. 0at fiind ca acest algoritm da cea mai mica medie a timpului de raspuns ar fi (ine daca ar putea fi folosit si pentru procesele interactive. 'ana la un anumit punct pot fi folosite. "n general, procesele interactive urmea%a modelul de asteptare a comen%ii, e3ecutarea comen%ii, si asa mai departe. 0aca privim e3ecutarea fiecarei comen%i ca pe o sarcina separata, atunci, in ansam(lu, putem sa micsoram timpul de raspuns daca rulam prima data cea mai scurta sarcina. Singura pro(lema este sa ne dam seama care este cel mai scurt dintre procesele curente care pot fi rulate. O a(ordare posi(ila ar fi sa facem estimari (a%ate pe fapte anterioare si sa rulam procesul care are cel mai scurt timp estimat. Sa presupunem ca pentru un terminal timpul estimat pentru o comanda este H9. Acum sa presupunem ca urmatoarea rulare a sa este H1. Am putea actuali%a estimarea noastra printr-o suma a acestor doua valori, adica aH9U*1-a-H1. Odata cu alegerea lui a putem sa decidem daca dorim ca procesul de estimare sa uite vec.ile rulari sau daca dorim sa le tina minte mult timp. 0aca aO1@#, o(tinem estimari succesive dupa cum urmea%a$ H9, H9@#UH1@#, H9@GUH1@GUH#@#, H9@8UH1@8UH#@GUH;@# 0upa trei noi rulari, valoarea lui H9 in noua estimare a sca%ut la 1@8.He.nica estimarii valorii urmatoare intr-o serie prin luarea mediei valorii curente masurate impreuna cu estimarea anterioara se mai numeste si cim(atranirec. Se poate aplica in multe situatii in care este necesara o estimare (a%ata pe valorile anterioare. c"m(atranireaN este usor de implementat mai ales cand aO1@#. Singurul lucru care tre(uie facut este adaugarea noii valori la estimarea curenta si impartirea sumei la #. ,erita sa su(liniem ca algoritmul cintai cea mai scurta sarcinac este potrivit doar atunci cand sarcinile tre(uie efectuate simultan. )n contra-e3emplu in acest sens$ e3ista cinci sarcini, de la A la /, cu timpuri de rulare de #,G,1,1 si respectiv 1. Himpurile lor de sosire sunt 9,9,;,; si ;. "nitial, doar A si : pot fi alese deoarece celelalte inca nu au ajuns. )tili%and algoritmul in care cea mai scurta sarcina are prioritate vom rula sarcinile in ordinea A,:,C,0 si / si vom avea o medie de asteptare de G.7. Hotusi, rulandu-le in ordinea :,C,0,/,A vom avea o medie de asteptare de G.G.

$. Administrarea garantata
O a(ordare complet diferita a tempori%arii o constituie promisiunile realiste facute utili%atorului in ceea ce priveste performanta si apoi indeplinirea lor. O promisiune 7;

Aritoni Ovidiu

Sisteme de operare 1

realista si usor de reali%at este aceasta$ daca e3ista n utili%atori conectati in momentul in care lucrati dvs., veti (eneficia de apro3imativ 1@n din capacitatea procesorului. 4a fel intr-un sistem cu un singur utili%ator care are n procese ruland, toate avand aceeasi importanta, fiecare ar tre(ui sa primeasca 1@n din ciclurile procesorului. 'entru a tine aceasta promisiune, sistemul tre(uie sa tina o evidenta in ceea ce priveste timpul alocat de procesor fiacarui proces inca de la initierea acestuia. Apoi calculea%a cantitatea de procesor la care fiecare proces are dreptul, adica timpul scurs de la initierea sa impartit la n. 0e vreme ce timpul alocat de catre procesor fiecarui proces este deja cunoscut este usor de calculat raportul dintre cantitatea de procesor avuta si cea la care are dreptul. )n raport de 9.< inseamna ca procesul a avut doar jumatate din timpul la care avea dreptul, iar un raport de #.9 arata ca procesul a folosit de doua ori mai mult timp decat avea alocat. "n acest ca% algoritmul spune sa se rule%e procesul cu cel mai mic raport pana cand acest raport este mai mare decat al celui mai apropiat competitor.

F. Administrarea aleatorie
0esi promisiunile facute utili%iatorilor si indeplinirea lor este o idee (una, ea este greu de implementat. Hotusi, un alt algoritm poate fi utili%at& acesta are re%ultate aproape la fel de previ%i(ile si este foarte usor de implementat. Aceasta este tempori%area aleatorie *Jaldspurger si Jei.l, 1FFG-. "deea de (a%a este acordarea de (ilete de loterie proceselor, pentru diferite resurse ale sistemului, cum ar fi timpul de utili%are a procesorului. 0e fiecare data cand tre(uie luata o deci%ie de tempori%are este ales la intamplare un (ilet de loterie si procesul caruia i-a fost atri(uit acel (ilet primeste resursa respectiva. Cand acest lucru se aplica la tempori%area procesorului e3tragerea se poate face de <9 de ori pe secunda, fiecare castigator primind ca premiu #9 de msec. din timpul procesorului. 'entru a-l parafra%a pe Ieorge Orwell$ cHoate procesele sunt egale, dar unele sunt mai egale.c 'roceselor mai importante le pot fi atri(uite (ilete suplimentare pentru a le mari sansele de castig. 0aca e3ista 199 de (ilete restante si un proces detine #9 dintre ele, acesta va avea sanse de #9b sa castige fiecare e3tragere. 'e termen lung, va o(tine #9b din timpul procesorului. Spre deose(ire de un tempori%ator prioritar unde este foarte greu de sta(ilit ce inseamna e3act o prioritae de G9, aici regula este clara$ un proces care detine o fractiune f din totalitatea (iletelor va o(tine o fractiune f din totalitatea resurselor in c.estiune. Hempori%area aleatorie are cateva proprietati interesante. 0e e3emplu, daca apare un nou proces si ii sunt acordate cateva (ilete, la urmatoarea e3tragere sansele de castig vor fi direct proportionale cu numarul de (ilete pe care le detine. Cu alte cuvinte, tempori%area aleatorie este foarte darnica. 0aca se doreste se pot sc.im(a (ilete intre procese cooperante. 0e e3emplu daca un proces-client trimite un mesaj unui proces-server si apoi se (loc.ea%a poate sa cede%e toate (iletele serverului pentru a creste sansele serverului de a castiga runda urmatoare. Cand serverul a terminat inapoia%a (iletele, astfel incat clientul sa poata rula din nou. 0e fapt, in a(senta clientilor serverele nici nu au nevoie de (ilete. Hempori%area aleatorie poate fi folosita pentru a trata pro(leme mai greu de re%olvat prin alte metode. )n e3emplu este un server video in care mai multe procese 7G

Aritoni Ovidiu

Sisteme de operare 1

trimit flu3uri video clientilor lor, dar la rate diferite de frame-uri. Sa presupunem ca procesele au nevoie de frame-uri la o rata de 19, #9 si #< frame-uri@sec. Alocand acestor procese 19, #9 si respectiv #< de (ilete timpul procesorului va fi impartit automat in mod corespun%ator.

*. Administrara in timp real


)n sistem in timp real este unul in care timpul joaca un rol esential. "n general, unul sau mai multe dispo%itive fi%ice, e3terne computerului generea%a stimuli la care computerul tre(uie sa reactione%e corespun%ator intr-un interval de timp (ine sta(ilit. 0e e3emplu, computerul dintr-un compact disc pla>er primeste (itii si tre(uie sa-i converteasca in mu%ica intr-un interval de timp foarte scurt. 0aca este depasit acest interval, mu%ica va suna ciudat. Alte sisteme in timp real sunt monitori%area pacientilor din sectiunea de tratament intensiv a unui spital, pilotul automat al unui aparat de %(or si controlul de siguranta dintr-un reactor nuclear. "n toate aceste ca%uri, o(tinerea unui raspuns (un dar prea tar%iu este adesea la fel de grav ca si cum nu l-am fi primit deloc. Sistemele in timp real sunt in general impartite in ctimp real durc, insemnand ca e3ista termene limita care tre(uie neaparat respectate si ctimp real (landc, ceea ce inseamna ca se poate tolera o nerespectare a termenului impus. "n am(ele ca%uri comportamentul de timp real se reali%ea%a prin divi%area programului intr-un numar de procese al caror comportament este previ%i(il si stiut dinainte. Aceste procese sunt in general scurte si pot fi duse la capat in mai putin de o secunda. Cand un eveniment e3tern este detectat, tempori%atorul este cel care tre(uie sa tempori%e%e astfel procesele incat termenul limita sa fie respectat. /venimentele carora tre(uie sa le raspunda sistemele in timp real pot fi impartite in periodice *cele care apar la intervale regulate- si aperiodice *cele a caror aparitie nu poate fi preva%uta-. Se poate ca un sistem sa tre(uiasca sa raspunda mai multor flu3uri de evenimente periodice. /ste posi(il sa nu se poata raspunde tuturor, acest lucru depin%and de timpul de care ficare eveniment are nevoie pentru procesare. 0e e3emplu, daca e3ista m evenimente periodice, iar evenimentul i apare cu o frecventa 'i si necesita Ci secunde din timpul procesorului pentru a trata fiecare eveniment, atunci incarcarea poate fi facuta doar daca FO+,)4A 0aca un sistem in timp real poate sa indeplineasca acest criteriu inseamna ca acel sistem poate fi tempori%at. 0e e3emplu, ganditi-va la un sistem ctimp real (landc cu trei evenimente periodice cu perioade de 199, #99 respectiv <99 msec. 0aca aceste evenimente necesita <9, ;9 respectiv 199 msec. din timpul procesorului pentru fiecare eveniment, inseamna ca sistemul este tempori%a(il deoarece 9.<U9.1<U9.#S1. 0aca este adaugat un al patrulea eveniment cu o perioada de 1 secunda, sistemul va ramane tempori%a(il atata vreme cat acest ultim eveniment nu necesita mai mult de 1<9 msec. din timpul procesorului pentru fiecare eveniment. "n acest calcul se presupune ca sc.im(area de conte3t se face intr-un interval atat de scurt incat poate fi ignorat. Algoritmii de tempori%are in timp real pot fi dinamici sau statici. 'rimii iau deci%iile de tempori%are in timpul rularii& cei din urma iau aceste deci%ii inainte ca 7<

Aritoni Ovidiu

Sisteme de operare 1

sistemul sa inceapa sa rule%e. Daideti sa vedem pe scurt cativa algoritmi dinamici de tempori%are in timp real. Algoritmul clasic este calgoritmul cu rata monotonac *4iu si 4a>land, 1FE;-. Acest algoritm atri(uie dinainte fiecarui proces o prioritate proportionala cu frecventa cu care apare evenimentul sau de tragere. 0e e3emplu, un eveniment care tre(uie sa rule%e la fiecare #9 msec. primeste prioritate <9, iar un proces care tre(uie sa rule%e o data la 199 msec. primeste prioritate 19. Atunci cand procesul cu cea mai mare prioritate este pregatit sa rule%e, tempori%atorul il rulea%a tot timpul pe acesta, c.iar daca tre(uie sa intrerupa alt proces care inca rulea%a in momentul respectiv. 4iu si 4a>land au dovedit ca acest altgoritm este fia(il. )n alt algoritm de tempori%are reala foarte des intalnit este cintai primul termen limitac 0e fiecare data cand este detectat un eveniment, procesul sau este adaugat pe lista proceselor pregatite pentru a fi rulate. 4ista se tine aranjata in functie de termenul limita, care pentru un eveniment periodic inseamna urmatoarea aparitie a sa. Algoritmul va rula primul proces de pe lista, cel care are termenul limita cel mai apropiat. )n al treilea algoritm calculea%a cantitatea de timp pe care o are in plus fiecare proces, adica neglijenta sa. 0aca un proces are nevoie de #99 msec. pentru a se finali%a si tre(uie sa fie terminat in #<9 msec., inseamna ca neglijenta sa este de <9 msec. Algoritmul, numit si ccea mai mica neglijentac alege procesul cu cel mai putin timp in plus. 0esi teoretic este posi(il sa transformam un sistem de operare general intr-un sistem in timp real prin utili%area unuia dintre acesti algoritmi de programare, in practica, in sistemele generale sc.im(area de conte3t durea%a atat de mult incat performanta unui sistem in timp real poate fi atinsa doar pentru aplicatiile cu termene limita destul de mari. "n consecinta, pentru majoritatea lucrarilor in timp real se utili%ea%a sisteme speciale pentru operare in timp real, care au anumite proprietati foarte importante. 0e o(icei printre acestea se numara o marime mica, timp de intrerupere foarte scurt, sc.im(area rapida a conte3telor, un interval foarte scurt in care intreruperile nu functionea%a si posi(ilitatea de administrare a mai multor cronometre la intervale de milisecunde sau microsecunde.

+. Administrarea pe doua nivele


'ana acum am presupus mai mult sau mai putin ca toate procesele care pot fi rulate e3ista in memoria principala. 0aca nu e3ista suficienta memorie principala disponi(ila, unele dintre procesele care pot fi rulate vor tre(ui depo%itate pe dis1, in intregime sau doar o parte din ele. Aceasta situatie are implicatii majore pentru tempori%are deoarece timpul de sc.im(are a unui proces si incarcarea altuia de pe dis1 implica mai mult o ordine a importantei decat sc.im(area cu un proces deja e3istent in memoria principala. )n mod mai practic de tratare a proceselor scoase din memorie este utili%area unui tempori%ator pe doua nivele. "ntai, doar parti ale proceselor care pot fi rulate sunt incarcate in memoria principala, asa cum se vede in figura #-#<*a-. Apoi, pentru un timp tempori%atorul se limitea%a la alegerea proceselor doar din aceste parti e3istente in memoria principala. 0in cand in cand,un tempori%ator de nivel superior este solicitat sa stearga din memorie acele procese care e3ista acolo de mai mult timp si sa incarce acele procese care sunt de mult timp pe dis1. Odata sc.im(area efectuata, ca in figura #-#<*(tempori%atorul de nivel inferior se limitea%a din nou la alegerea proceselor dintre cele 77

Aritoni Ovidiu

Sisteme de operare 1

e3istente in memorie. Astfel, tempori%atorul de nivel inferior este cel care alege dintre procesele care pot fi rulate e3istente in memorie, iar tempori%atorul de nivel superior este cel care se ocupa cu transferul proceselor in am(ele sensuri intre dis1 si memoria principala.

Fig. #-#<. )n tempori%ator pe doua nivele tre(uie sa mute procesele intre dis1 si memoria principala, precum si sa aleaga dintre procesele e3istente in memorie pe cele care vor rula. *a-, *(- si *c- repre%inta trei momente diferite. )n tempori%ator de nivel superior tine cont de mai multe criterii atunci cand ia deci%iile. 0intre acestea amintim urmatoarele$ 1. Cat timp a trecut de cand procesul a fost introdus sau scos din memorieW #. Cat timp a (eneficiat de procesor in ultima perioadaW ;. Cat de lung este procesulW *Cele mici nu incurcaG. Cat de ridicata este prioritatea procesuluiW Si in acest ca% putem folosi algoritmul circular sau cel prioritar sau orice alta metoda. Bu este o(ligatoriu ca cele doua tempori%atoare sa foloseasca acelasi altgoritm.

". Politica versus mecanism


'ana acum am presupus ca toate procesele din sistem apartin unor utili%atori diferiti si prin urmare sunt in competitie pentru o(tinerea procesorului. 0esi acest lucru este vala(il in majoritatea situatiilor se intampla si ca un proces sa ai(a mai multe procese su(ordonate. 0e e3emplu, un proces al unui sistem de administrare a unei (a%e de date poate avea mai multe procese su(ordonate. Se poate ca fiecare proces su(ordonat sa lucre%e la o comanda diferita sau ca fiecare sa ai(a o functie de indeplinit *anali%area unei pro(leme, accesul la dis1, etc.-. /ste foarte posi(il ca procesul principal sa considere ca unul dintre procesele secundare este mai important decat celelalte, iar altul mai putin important decat toate celelalte. 0in pacate, nici unul dintre tempori%atoarele anali%ate mai sus nu accepta implicarea proceselor utili%atoare in luarea deci%iilor de tempori%are. "n consecinta, rareori se intampla ca tempori%atorul sa ia cea mai (una deci%ie. 7E

Aritoni Ovidiu

Sisteme de operare 1

O solutie la aceasta pro(lema ar fi separarea mecanismului de tempori%are de politica de tempori%are. Acest lucru inseamna ca algoritmul de tempori%are este parametri%at intr-un fel, dar parametrii pot fi sta(iliti de catre procesele utili%atoare. Sa luam din nou e3emplul cu (a%a de date. Sa presupunem ca 1ernelul utili%ea%a un algoritm de tempori%are prioritara dar furni%ea%a un apel de sistem prin care un proces poate sa sete%e *si sa sc.im(e- prioritatile proceselor su(ordonate lui. Astfel, fiecare proces principal poate sa controle%e in detaliu modul in care sunt tempori%ate procesele su(ordonate lui, c.iar daca nu este el cel care face tempori%area. "n acest ca% mecanismul se afla in 1ernel, dar politica este sta(ilita de un proces utili%ator.

78

Aritoni Ovidiu

Sisteme de operare 1

".-n!rari2-e iri

7F

Aritoni Ovidiu

Sisteme de operare 1

$. Principiile %ard&are-ului !'O

Oamenii privesc .ardware-ul "@O in moduri diferite. /lectricienii vad cipuri, fire, sursa de curent, motoare si alte componente fi%ice care alcatuiesc .ardware-ul. 'rogramatorii vad interfata unui software = comen%ile pe care le accepta .ardware-ul, functiile pe care le indeplineste si afisarea erorilor. "n aceasta carte ne ocupam de programarea dispo%itivelor "@O, nu de proiectarea, construirea sau mentinerea lor& deci suntem interesati doar de modul in care este programat .ardware-ul , nu de modul in care functionea%a in interior. Hotusi programarea multor dispo%itive "@O este adesea strans legata de operatiile din interiorul lor. "n urmatoarele trei sectiuni va vom furni%a cateva informatii generale despre modul in care .ardware-ul "@O relationea%a cu programarea.

A. ispo)itivele ",Aceste dispo%itive pot fi impartite in doua categorii principale$ dispo%itive in (loc si dispo%itive de caracter. )n dispo%itiv in (loc este cel care depo%itea%a informattile in (locuri de marime fi3a, fiecare (loc avand adresa proprie. ,arimea unui (loc varia%a de la <1# (iti pana la ;#.E78 (iti. Calitatea principala a unui astfel de dispo%itiv este capacitatea sa de a citi sau scrie fiecare (loc independent de toate celelalte. 0is1-urile sunt cele mai cunoscute dispo%itive in (loc. 4a o anali%a mai atenta ne dam seama ca limita dintre dispo%itivele care au (locuri carora ne putem adresa si cele care nu au asa ceva nu este (ine definita. Hoata lumea este de accord ca dis1-ul este un dispo%itiv de adresare in (loc deoarece indiferent unde se afla (ratul in momentul respectiv, el poate sa caute pe alt cilindru si apoi sa astepte ca (locul dorit sa ajunga su( capul de citire. Sa ne gandim la o (anda de 8 mm sau 0AH utili%ata pentru a reali%a (ac1up-urile dis1-ului. "n general aceste (en%i contin (locuri de marime fi3a. 0aca driver-ului (en%ii ii este data comanda sa citeasca (locul N, poate sa derule%e (anda inainte pana ajunge la (locul N. Aceasta operatiune este similara cu cautarea facuta de dis1, dar durea%a mult mai mult timp. 0e asemenea, nu este sigur ca un (loc se poate rescrie in mijlocul (en%ii. C.iar daca ar fi fost posi(il sa folosim (en%ile ca dispo%itive in (loc cu accesare aleatorie, acest lucru ar fi un pic fortat $ in mod normal nu sunt folosite astfel. Celalalt tip de dispo%itiv este dispo%itivul de caracter. )n astfel de dispo%itiv furni%ea%a sau accepta un flu3 de caractere, fara sa tina cont de vreo structura in (loc. Bu poate fi contactat si nu are operatiune de cautare. 'rintere, interfete de retea, mouse *pentru indicare-, so(olani *pentru e3perimente de psi.ologie in la(orator-, precum si multe alte dispo%itive care nu intra in categoria dis1-ului pot fi privite ca dispo%itive de caracter. Aceasta sc.ema de clasificare nu este perfecta. )nele dispo%itve nu intra in nici una din aceste doua categorii. Ceasurile de e3emplu, nu au (locuri care pot fi contactate si nici nu generea%a sau accepta flu3uri de caractere. Singurul lucru pe care il fac este sa produca intreruperi la intervale de timp (ine sta(ilite. Bici ecranele cu sc.eme de E9

Aritoni Ovidiu

Sisteme de operare 1

memorie nu se incadrea%a prea (ine in acest model. Hotusi, acest model este destul de general incat poate fi folosit ca (a%a pentru a face ca intr-un sistem de operare softwareul care lucrea%a cu dispo%itivele "@O sa fie independent. Sistemul de fisiere de e3emplu, lucrea%a doar cu dispo%itive a(stracte in (loc si lasa partea dependenta de dispo%itiv in seama software-ului de nivel sca%ut numit si drivere pentru dispo%itiv.

B. Controllere de dispo)itiv

0e o(icei, unitatile "@O includ o componenta mecanica si una electronica. Adesea cele doua componente se pot separa pentru a le conferi un design mai modular si mai general. Componenta electronica se numeste controller de dispo%itiv sau adaptor. 'e computerele personale ia adesea forma unei placi cu circuit imprimat si care poate fi introdusa intr-unul din slot-urile e3istente pe placa de (a%a. Componenta mecanica o constituie c.iar dispo%itivul. 'laca de control este de o(icei preva%uta cu un conector in care poate fi introdus un ca(lu care sa faca legatura direct cu dispo%itivul. ,ulte controllere pot sa sustina doua, patru sau c.iar opt dispo%itive identice. 0aca interfata dintre controller si dispo%itiv este una standard sau una oficiala asa cum sunt ABS", "/// sau "SO sau una inclusa de producator, atunci companiile pot sa reali%e%e controllere sau dispo%itive care sa fie compati(ile cu interfata respectiva. 0e e3emplu, multe companii proiectea%a dis1 drivere care sa fie compati(ile cu interfetele de dis1 controller "0/ sau SCS". 'reci%am aceasta diferenta intre controller si dispo%itiv deoarece sistemul de operare lucrea%a aproape intotdeauna cu controllerul si nu cu dispo%itivul. Cele mai multe computere mici utili%ea%a doar modelul de (us din figura ;-1 pentru comunicarea dintre procesor si controllere. Frame-urile principale mari folosesc adesea un model diferit, cu mai multe (us-uri si computere speciali%ate pe "@O numite canale "@O care preiau o parte din sarcinile procesorului principal.

Fig. ;-1 )n model de conectare a procesorului, memoriei, controllerelor si dispo%itivelor "@O. "nterfata dintre controller si dispo%itiv este adesea o interfata de nivel sca%ut. )n dis1 de e3emplu, poate fi formatat cu 17 sectoare a cate <1# (>tes pe fiecare pista . Ceea E1

Aritoni Ovidiu

Sisteme de operare 1

ce vine efectiv de pe drive este un flu3 de (iti in serie incepand cu un pream(ul, apoi cei G9F7 de (iti dintr-un sector si, in final, suma de verificare numita si cod de corectare a erorilor */CC-. 'ream(ulul se scrie atunci cand este formatat dis1-ul si contine numarul de cilindru si cel de sector, marimea sectorului si alte date asemanatoare precum si informatiile de sincroni%are. Sarcina controller-ului este sa converteasca flu3ul serial de (iti intr-un (loc de (>tes si sa corecte%e erorile aparute. 0e o(icei (locul de (>tes este initial asam(lat (it cu (it intr-un (uffer *%ona tampon- din interiorul controller-ului. 0upa ce a fost verificat si declarat fara erori poate fi copiat in memoria principala. Controller-ul pentru un terminal C+H functionea%a tot ca un dispo%itiv cu (iti in serie si tot la nivel sca%ut. Acesta citeste (itii e3istenti in memorie si care contin caractere de afisat si generea%a semnale utili%ate pentru modularea fascicolului C+H pentru ca acesta sa scrie pe ecran. Hot controller-ul este cel care generea%a semnale care determina fascicolul C+H sa se retraga ori%ontal dupa ce a terminat o linie de scanare si o retragere verticala dupa ce intregul ecran a fost scanat. 0aca nu ar fi e3istat controller-ul C+H programatorul sistemului de operare ar fi tre(uit sa programe%e e3plicit scanarea analoaga a tu(ului. Astfel, sistemul de operare ii furni%ea%a controller-ului cativa parametrii cum ar fi numarul de caractere per linie si numarul de linii per ecran, si lasa controller-ul sa conduca efectiv fascicolul. Fiecare controller are cativa registri care sunt utili%ati pentru comunicarea cu procesorul. 'e unele computere acesti registri sunt integrati in spatiul alocat adresei memoriei. Aceasta sc.ema se numeste sc.ema de memorie "@O. 789e9 de e3emplu, utili%ea%a aceasta metoda. Alte computere folosesc spatiu special pentru adresa "@O, fiecare controller avand alocata o portiune din acest spatiu. +eparti%area adresei "@O dispo%itivelor se face de catre logica decodarii (us-urilor asociata cu controller-ul. )nii producatori de asa numitul 'C ":, compati(il folosesc adrese "@O diferite de cele folosite de ":,. "n plus fata de porturile "@O, multe controlere folosesc intreruperi pentru a-" comunica procesorului momentul in care sunt pregatite scrierea sau citirea registrilor. O intrerupere este in primul rand un eveniment electric. O Cerere de "ntrerupere a liniei este o intrare fi%ica in cipul de intrerupere al controll-erului. Bumarul unor astfel de intrari este limitat& 'C din clasa 'entium au doar 1< dispo%itive disponi(ile pentru "@O. )nele controller-e sunt conectate pe placa de (a%a prin disop%itive .ard ca la ":, 'C. "n ca%ul unui controller care se conectea%a in partea din spate, comutatoarele sau jumper dispo%itivului controller-ului pot fi folositi, cate odata pentru a selecta "+f pe care-l va folosi dispo%itivul pentru a evita conflictele *desi in ca%ul unor placi plugLn pla> "+f poate fi setat din software-. Cipul controller-ului de intreruperi monitori%ea%a fiecare intrare "+f la vector de intrerupere care locali%ea%a software-ul corespun%ator de intrerupere a sarcinii. Figura ;-# arata adresele "@O, intreruperile de .ardware si vectorii de intrerupere alocati unor controlere de pe un ":, 'C de e3emplu. ,"B"P utili%ea%a aceleasi intreruperi .ardware, dar vectorii de intrupere ,"B"P sunt diferiti de cei aratati aici pentru ms-dos. Sistemul de operare e3ecuta "@O scriind comen%i in registrii controller-ului. Controller-ul flopp>-dis1-ului ":, 'C de e3emplu accepta 1< comen%i diferite, cum sunt$ C"H/SH/, SC+"/, CA)HA, FO+,AH/AdA si +/CA4":+/AdA. ,ulte dintre comen%i au parametrii, care sunt de asemenea incarcati in registrii controller-ului. Atunci cand o comanda a fost acceptata procesorul poate sa lase controller-ul sincur si sa inceapa alta sarcina. Atunci cand comanda a fost e3ecutat, controller-ul e3ecuta o intrerupere pentru a permite sistemului de operare sa preia controlul asupra procesorului si sa teste%e E#

Aritoni Ovidiu

Sisteme de operare 1

re%ultatele operatiei. 'rocesorul o(tine re%ultatele si statulul dispo%itivului citind unul sau mai multi (>tes de informatie din registrii controller-ului.

fig ;-#.cateva e3emple de controller-e, adresele lor "@O, liniile de intrerupere .ardware si vectorii lor de intrerupere pe un 'C o(isnuit care rulea%a in ,S0OS

C. Aces direct la memorie . MA/


,ulte controller-e mai ales cele utili%ate pentru dispa%itive in (loc suporta Acces direct la memorie sau 0,A. 'entru a e3plica cum functionea%a 0,A sa ne uitam mai intai la modul cum apar citirile de dis1 atunci cand 0,A nu este utili%at. ,ai intai controller-ul citeste in serie (locul *unul sau mai multe sectoare- de pe drive (it cu (it pana cand intregul (loc sa afla in (uffer-ul intern al controller-ului. Apoi, acesta calculea%a suma de verificare pentru a vedea daca au aparut erori de citire. Apoi controller-ul produce o intrerupere. Cand sistemul de operare incepe sa rule%e poate sa citeasca (locul dis1-ului de pe (uffer-ul controller-ului cate un (>te sau cate un cuvant odata e3ecutand un loop, prin fiecare iteratie citind un (>te sau un cuvant din registrul dispo%itivului controller-ului pe care il depo%itea%a in memorie. Fireste, un loop al procesorului programat sa citeasca (>tes unul cate unul de pe controller iroseste timpul procesorului. 0,A a fost inventat pentru a eli(era procesorul de aceasta munca de nivel sca%ut. Atunci cand este utili%at, procesorul da controller-ului # informatii pe langa adresa de dis1 a (locului$ adresa de memorie a depo%itarii (loc1ului si numarul de (>tes care tre(uie transferati asa cum se vede in figura ;-;.

E;

Aritoni Ovidiu

Sisteme de operare 1

fig;-;. )n transfer 0,A se face in intregime de controller 0upa ce controller-ul a citit in intregime (locul de pe dispo%itiv in (uffer-ul sau si a verificat suma copia%a primul (>te sau cuvant in memoria principala la adresa specificata de memoria de adresa 0,A. Apoi incrementea%a adresa 0,A si decrementea%a contul 0,A in functie de numarul de (iti care tocmai au fost transferati. Acest proces se repeta pana cand contul 0,A ajunge la 9, moment in care controller-ul produce o intrerupere. Cand sistemul de operare porneste nu mai tre(uie sa copie%e (locul in memorie& acesta este deja acolo. 'oate va intre(ati de ce controller-ul nu depo%itea%a (>tes in memoria principala imediat ce-" ia de pe dis1. Cu alte cuvinte de ce are nevoie de un (uffer internW ,otivul este ca odata cu inceperea unui transfer de pe dis1, (its contiua sa soseseasca de pe dis1 cu o rata constanta indiferend daca controller-ul este sau nu pregatit pentru acest lucru controller-ului. "n ca%ul in care controller-ul ar incerca sa scrie date direct in memorie ar tre(ui sa treaca peste (uss-ul sistemului pentru fiecare cuvant transferat. 0aca (uss-ul ar fi ocupat din cau%a utili%arii lui de catre alt dispo%itiv controller-ul ar tre(ui sa astepte. 0aca urmatorul cuvant ar sosi inainte ca precedentul sa si fost depo%itat controller-ul ar tre(ui sa-l depo%ite%e undeva. 0aca (uss-ul ar fi foarte ocupat controller-ul ar putea sfarsi depo%itand destul de multe cuvinte si avand de facut destul de multa munca de administrare. Cand (locul este amorti%at in interior nu este nevoie de (uss pana la pornirea 0,A-ului, deci designul controller-ului este mult mai simplu din cau%a transferului facut de 0,A in memorie, nu este presat de timp. *0e fapt unele controlere mai vec.i mergeau direct la memorie doar cu o mica amorti%are interna, dar cand (uss-ul era foarte ocupat, se putea intampla ca un transfer sa se inc.eie cu o eroare cau%ata de suprasolicitare.'rocesul de amorti%are in doi timpi descris mai sus are implicatii majore pentru performanta "@O. in timp ce datele sunt transferate din controller in memorie fie de catre procesor fie de catre controller, sectorul urmator va trece pe su( capul de citire al discului iar (its vor ajunge in controller. Controller-ele simple nu pot face fata e3ecutarii intrarilor si iesirilor in acelasi timp, astfel ca in timp ce are loc un transfer de memorie, sectorul care trece pe su( capul de citire al discului este pierdut.

EG

Aritoni Ovidiu

Sisteme de operare 1

"n consecinta controller-ul va putea sa citeasca doar cate un (loc. Citirea unei piste complete va necesita doua rotatii complete, una pentru (locurile pare si una pentru impare. 0aca timpul de transfer al unui (loc din controller in memorie prin (uss este mai lung decat timpul de citire al unui (loc de pe dis1 ar putea fi necesara citirea unui (loc si sarirea a altor doua *sau mai multe- (locuri. Sarirea peste unele (locuri pentru a-" da timp controller-ului sa transfere datele in memorie sa numeste inserare. Cand dis1-ul este formatat (locurile sunt astfel numerotate incat sa tina evidenta factorului de inserare. "n figura ;-G*A- vedem un dis1 cu 8 (locuri@pista si fara inserare. "n figura ;-G*:- vedem acelasi dis1 cu o singura inserare. "n figura ;-G*C- se vede o du(la inserare.

Fig ;-G. *a- fara inserare. *(- o singura inserare. *c- du(la inserare 'entru acest mod de numerotare a (locurilor, ideea este sa permita sistemului de operare sa citeasca consecutiv (locurile numerotate si sa atinga, si in acest ca% vite%a ma3ima de care este capa(il .ardware-ul. 0aca (locurile ar fi numerotate ca in figura ;;*A- dar controller-ul ar putea citi doar (locurile alternative, un sistem de operare care ar aloca unui fisier opt (locuri de dis1 consecutive ar necesita 8 rotatii de dis1 pentru a citi in ordine (locurile de la 9 la E *(ine-nteles daca sistemul de operare ar cunoaste pro(lema si ar distri(ui altfel (locurile ar putea sa re%olve pro(lema din software, dar este mai (ine sa se ocupe controller-ul de inserare-. Bu toate computerele folosesc 0,A. 'rincipalul argument contra este acela ca procesorul principal este adesea mult mai rapid decat controller-ul 0,A si poate indeplini sarcina mai rapid *cand factorul limitativ nu este dispo%itivul "@O-. "n lipsa altei sarcini nu are rost ca rapidului procesor sa astepte dupa terminarea incetului controller 0,A. 0e asemenea de(arasarea de controller-ul 0,A si folosirea procesorului pentru software economiseste (ani.

2. Princi$ii a'e o(!3are-u'ui -24


Sa lasam .ardware-ul deoparte si sa anali%am modul de structurare al softwareului "@O. Scopurile generale ale software-ului "@O sunt usor de sta(ilit. "deea principala este organi%area software-ului su( forma de straturi, unde cele de jos sunt folosite pentru E<

Aritoni Ovidiu

Sisteme de operare 1

ascunderea particularitatilor de cele de sus. "ar cele de sus tre(uie sa pre%inte utili%atorilor o interfata draguta curata si uniforma. "n sectiunile urmatoare vom anali%a aceste scopuri si modul in care ele sunt reali%ate.

#.Scopurile so t&are-ului !'O


)n concept c.eie proiectarea software-ului "@O este cunoscut ca independenta dispo%itivului. Acest lucru inseamna ca ar tre(ui sa se poata scrie programe care sa poata citi fisiere de pe un flopp> dis1, .ard dis1 sau cd-rom fara a fi nevoie sa se modifice programul pentru fiecare tip diferit de dispo%itiv. Ar tre(ui sa se poata tasta o comanda cum ar fi sort SinpuR output care sa functione%e cu intrare de pe flopp> dis1, .ard dis1 sau tastatura si re%ulatul sa mearga la flopp> dis1, .ard dis1 sau c.iar la monitor. Sistemul de operare este cel care tre(uie sa re%olve pro(lemele cau%ate de faptul ca aceste dispo%itive c.iar sund diferite si necesita diferite driver-e de dispo%itiv pentru a scrie datele pe dispo%itive de afisare a re%ultatului. Strans legat de independenta dispo%itivului este scopul de numirea uniforma. Bumele unui fisier sau al unui dispo%itiv ar tre(ui sa fie pur si simplu cuvant sau un tot si sa nu depinda de dispo%itiv in nici un fel. "n )B"P toate discurile pot fi integrate impreuna in ierar.ia sistemelor de fisiere in moduri ar(itrare astfel incat utili%atorul nu are nevoie sa stie carui dispo%itiv ii corespunde un nume. 0e e3emplu un flopp> dis1 poate fi urcat in varful dosarului /usr/ast/backup astfel ca daca copiem un fisier in usr/ast/backup/ onday fisierul se va copia pe flopp> dis1. Astfel atat fisierelor cat si dispo%itivelor ne adresam in acelasi mod$ printr-un Kpat. nameN. )n alt punct important pentru software-ul "@O este tratarea erorilor. "n general erorile ar tre(ui tratate pe cat posi(il, in cat mai stransa legatura cu .ardware-ul. "n ca%ul in care controller-ul descopera o eroare de citire ar tre(ui sa incerce sa o corecte%e daca poate. 0aca nu poate, atunci driverul dispo%itivului ar tre(ui sa o corecte%e, pro(a(il prin simpla incercare de a reciti (locul respectiv. ,ulte dintre erori sunt trecatoare, cum sun erorile de citire cau%ate de fire de praf aparute pe capul de citire, si vor disparea odata cu repetarea operatiei. Straturile superioare tre(uie informate de eroare doar daca straturile inferioare nu o pot remedia. "n multe ca%uri eroarea poate fi reparata in straturile de jos fara ca straturile superioare sa afle de eroarea respectiva. Hotusi, un alt punct c.eie il repre%inta transferurile sincroni%ate *(locate- versus cele nesincroni%ate *intrerupte-. Cea mai mare parte dintre componentele fi%ice "@O sunt nesincroni%ate = procesorul initia%a transferul si apoi continua cu alte sarcini pana in momentul intreruperii. 'rogramele utili%atoare sunt mult mai usor de scris daca operatiile "@O se (loc.ea%a-dupa ce a primit comanda KcitesteN programul este automat suspendat pana cand datele sunt disponi(ile in (uffer. Sistemul de operare este cel care tre(uie sa faca in asa fel incat operatiile care sunt de fapt intrerupte sa para (locate pentru programele utili%atoare. )ltimul concept pe care-l vom trata aici il constituie dispo%itivele comune versus dispo%itivele dedicate. )nele dispo%itive "@O cum sunt discurile pot fi folosite de mai multi utili%atori in acelasi timp. Faptul ca mai multi utili%atori au fisiere desc.ise de pe acelasi dis1 in acelasi timp nu cau%ea%a pro(leme. Alte dispo%itive cum sint driverele de E7

Aritoni Ovidiu

Sisteme de operare 1

(anda tre(uie sa fie dedicate unui singur utili%ator pana cand acesta termina. Apoi alt utili%ator poate (eneficia de driverul de (anda. "n mod sigur nu se poate ca doi sau mai multi utili%atori sa scrie (locuri in acelasi timp si pe aceasi (anda. "ntroducerea dispo%itivelor dedicate *care nu pot fi impartite- produce si diferite pro(leme. 0in nou sistemul de operare tre(uie sa fie capa(il sa lucre%e ata cu dispo%itivele dedicate cat si cu cele comune astfel incat sa evite pro(lemele. Aceste scopuri pot fi reali%ate intr-un mod eficient prin sctucturarea software-ului "@O in patru straturi$ 1.remedierea intreruperilor *cel mai jos#.driver-ele dispo%itivului ;.software-ul sistemului de operare independent de dispo%itiv G.software la nivel de utili%ator *cel mai susAceste patru straturi sunt *nu intamplator- aceleasi patru straturi pe care le-am va%ut in fig.#-#7. in sectiunile urmatoare le vom anali%a pe fiecare pe rand, incepand cu cel mai de jos. "n acest capitol accentul se pune pe drive-ele de dispo%itiv *stratul #-, dar vom re%uma si restul software-ului "@O pentru a arata modul in care conlucrea%a diferitele componente ale sistemului "@O.

B.%emedierea intreruperilor
"ntreruperile sunt o realitate neplacuta. Acestea ar tre(ui ascunse cat mai adanc in centrul sistemului de operare, asfel incat o cat mai mica parte a sistemului sa stie de ele. Cel mai (un mod de a le ascunde este de a face sa se (loc.e%e fiecare proces care a inceput o operatie "@O, pana in momentul intreruperii cand "@O a inc.eiat. 'rocesul se poate (loca daca e3ecuta una din comen%ile 6OS la (ariera, ASH/A'HA la o varia(ila de conditie sau '+",/SH/ la un mesaj, de e3emplu. Atunci cand are loc intreruperea procedura de intrerupere face tot ce este necesar pentru a de(loca procesul care a initiat-o. 4a unele sisteme prin comanda S)S la o (ariera. 4a altele un S/,BA4 la o varia(ila de conditie din monitor, iar la altele se va trimite un mesaj procesului (locat. "n toate ca%urile efectul de retea va fi ca un proces pana acum (locat acum va putea rula.

C.

river!e de dispo)itiv

Hoate codurile dependente de dispo%itiv sunt trimise la driver-ele de dispo%itiv. Fiecare driver de dispo%itiv tratea%a un tip de dispo%itiv sau, cel mult, o clasa de dispo%itive asemanatoare. 0e e3emplu, ar fi pro(a(il o idee (una sa e3iste un singur driver de terminal c.iar daca sistemul suporta mai multe tipuri de terminaluri, putin EE

Aritoni Ovidiu

Sisteme de operare 1

diferite intre ele. 'e de alta parte, un terminal prost, o copie .ard mecanica si un terminal inteligent cu grafica pe sc.ema de (iti si un mouse sunt atat de diferite incat se impune folosirea unor driver-e diferite. 'ana acum in acest capitol am anali%at functia controller-elor de dispo%itiv. Am va%ut ca fiecare controller are unul sau mai multi registri de dispo%itiv utili%ati pentru a ii da comen%i. 0river-ele de dispo%itiv emit aceste comen%i si verifica indeplinirea corecta a lor. Astfel, dis1 driver-ul este singura parte a sistemului de operare care stie cati registri cre controller-ul respectiv si pentru ce sunt folositi. 0oar el stie despre sectoare, piste, cilindri, capuri de citire, miscarea (ratului, factori de inserare, motor, momentul de ase%are al capului de citire si alte mecanisme care fac ca dis1-ul sa functione%e cum tre(uie. "n termeni generali sarcina unui driver de dispo%itiv este de a accepta cererile a(stracte venite de la software-ul independent de dispo%itiv superior lui si sa ai(a grija ca aceste cereri sa fie indeplinite. )na din cererile o(isnuite este sa se (loc.e%e n. daca driver-ul nu lucrea%a in momentul in care soseste o cerere, incepe imediat sa e3ecute sarcina. Hotusi, daca deja este ocupat cu alta cerere va inscrie cererea pe o lista de asteptare cu cereri care tre(uie tratate cat mai curand posi(il. 'rimul pas in tratarea unei cereri "@O pentru dis1 de e3emplu, este traducerea ei din termeni a(stracti in termeni concreti. 'entru un dis1 driver acest lucru inseamna locali%area (locului pe dis1, verificarea daca motorul rulea%a, daca (ratul se afla pe cilindrul corespun%ator si asa mai departe. 'e scurt, tre(uie sa decida care operatii ale controller-ului sunt necesare si in ce sectiune. Odata ce a sta(ilit care comen%i tre(uie transmise controller-ului incepe sa le emita inscriindu-le in registrii dispo%itivului controller-ului. )nele controllere pot sa trate%e doar cate o comanda. Alte controller-e pot sa accepte o lista de comen%i pe care le tratea%a singure fara alt ajutor din partea sistemului de operare. 0upa ce comanda sau comen%ile au fost emise se va aplica una din cele doua situatii. "n multe ca%uri driver-ul de dispo%itiv tre(uie sa astepte pana cand controller-ul ii da ceva de lucru, astfel ca se (loc.ea%a pana in momentul in care se produce intreruperea care il de(loc.ea%a. Hotusi, in alte ca%uri operatia se inc.eie fara intar%ieri, astfel ca nu este nevoie ca driver-ul sa se (loc.e%e. )n e3emplu al acestei situatii este ca derularea ecranului pe unele terminale nu necesita decat scrierea catorva (>tes in registrii controller-ului. Bu este nevoie de nici o miscare mecanica, astfel ca intreaga operatie poate fi inc.eiata in cateva microsecunde. "n primul ca% driver-ul (locat va fi repornit de intrerupere. "n cel de-al doilea nu se va (loca deloc. "n oricare din cele doua ca%uri dupa ce operatia s-a inc.eiat tre(uie verificata sa nu ai(a erori. 0aca totul este in regula, se poate ca driver-ul sa ai(a date de transmis softare-ului independent de dispo%itiv *e3. )n (loc tocmai a fost citit.-. in cele din urma, returnea%a unele informatii de statut pentru raportarea erorilor inapoi la apelant. 0aca mai e3ista alte cereri pe lista una dintre ele poate fi acum selectata si initiata. 0aca nu e3ista nici o sarcina pe lista de asteptare, driver-ul se (loc.ea%a in asteptarea cererii urmatoare.

. Soft0are ",- independent de dispo)itiv


0esi o parte din software-ul "@O este specific pentru un anumit tip de dispo%itiv e3ista si o parte destul de mare care este independenta de dispo%itiv. 4imita e3acta dintre E8

Aritoni Ovidiu

Sisteme de operare 1

driver-e si software-ul independent de dispo%itiv o sta(ileste sistemul deoarece unele functii care ar putea fi indeplinite intr-un mod independent de dispo%itiv ar putea fi indeplinite in driver-e din ratiuni de eficienta sau din alte motive. Functiile aratate in fig. ;-< sunt de o(icei indeplinite de software-ul independent de dispo%itiv. "n ,"B"P, majoritatea software-ului independent de dispo%itiv face parte din sistemul de fisiere, in stratul ; *fig. #-#7-. 0esi vom anali%a sistemul de fisiere in Cap. <, vom arunca o privire rapida asupra software-ului independent de dispo%itiv, pentru a da o imagine a "@O si a vedea mai (ine unde se incadrea%a driver-ele.

Fig. ;-<. functii ale software-ului "@O independent de dispo%itiv Functia de (a%a a software-ului independent de dispo%itiv este de a indeplini functiile "@O commune tuturor dispo%itivelor si sa furni%e%e o interfata uniforma pentru software-ul la nivel de utili%ator. O pro(lema majora intr-un s>stem de operare este modul in care sunt numite o(iectele cum sunt fisierele si dispo%itivele "@O. software-ul independent de dispo%itiv are grija ca numele sim(olice ale dispo%itivelor sa fie indicate pe driver-ele corespun%atoare. "n )B"P un nume de dispo%itiv, cum ar fi /dev/tty!!, specifica doar nodul " pentru un anume fisier, iar acest nod " contine numarul major de dispo%itiv, care este utili%at pentru a locali%a driver-ul corespun%ator. Acest nod mai contine si numarul minor de dispo%itiv si care este transmis driver-ului ca parametru ce specifica unitatea care tre(uie scrisa sau citita. 'rotectia este foarte strans legata de denumire. Cum face sistemul pentru a impiedica folosirea dispo%itivului de catre utili%atori care nu au acest dreptW "n sistemele de pe computerele personale nu e3ista deloc protectie. Orice process poate sa faca orice. "n cele mai multe dintre sistemele principale accesarea dispo%itivelor "@O de catre procesele utili%atoare este complet inter%isa. "n )B"P este utili%ata o sc.ema mai fle3i(ila. Fisierele corespun%atoare dispo%itivelor "@O sunt protejate de (itii rwx. Si atunci administratorul sistemului poate sa sete%e permisiunea corespun%atoare pentru fiecare dispo%itiv. 0is1-urile diferite pot sa ai(a marimi diferite de sectoare. 0epinde de software-ul independent de dispo%itiv sa ascunda acest lucru si sa furni%e%e straturilor de sus o marime de (loc uniforma, de e3emplu prin tratarea catorva sectoare ca unic (loc logic. EF

Aritoni Ovidiu

Sisteme de operare 1

Astfel, straturile de sus au de-a face doar cu dispo%itive a(stracte care folosesc toate aceeasi marime de (loc logica, independenta de marimea fi%ica de sector. 4a fel unele dispo%itive de caracter isi trasmit datele (>te cu (>te *e3. modem-ul-, in timp ce altele si le transmit in unitati mai mari *e3. interfetele de retea-. Si aceste diferente tre(uie ascunse. Si amorti%area este o pro(lema, atat pentru dispo%itivele in (loc cat si pentru cele cu caractere. 'entru dispo%itivele in (loc, .ardware-ul insista in general pe citirea si scrierea (locurilor intregi dintr-o data, dar procesele utili%atoare sunt li(ere sa citeasca si sa scrie in unitati ar(itrare. 0aca un process utili%ator scrie o jumatate de (loc, in mod normal sistemul de operare va tine datele in interior pana cand sunt scrise si restul datelor, moment in care intregul (loc poate fi transferat pe dis1. 'entru dispo%itivele cu caractere, utili%atorii pot sa introduca date in sistem mai repede decat poate acesta sa le scoata si de aceea este necesara amorti%area. "ntrarea e tastatura care ajunge mai repede decat este nevoie necesita, de asemenea, amorti%are. "n timp ce se crea%a un fisier de date, noile (locuri de dis1 tre(uie sa fie allocate fisierului. 'entru a reali%a aceasta alocare, sistemul de operare are nevoie de o lista sau sc.ema de (iti ale (locurilor li(ere pe fiecare dis1, dar algoritmul pentru locali%area unui (loc li(er este independent de dispo%itiv si poate fi facut pe un nivel superior driver-ului. )nele dispo%itive cum sunt cd-rom recorder pot fi utili%ate in orice moment dat pentru un singur process. Sistemul de operare este cel care tre(uie sa anali%e%e cererile de utili%are a dispo%itivului si sa le accepte sau respinga in functie de disponi(ilitatea dispo%itivului. )n mod simplu de-a re%olva aceste cereri este sa ceara proceselor sa e3ecute comen%i de desc.idere direct pe fisierele speciale pentru dispo%itive. 0aca dispo%itivul nu este disponi(il, comanda de desc.idere nu se va e3ecuta. )n astfel de dispo%itiv dedicat va fi eli(erat doar dupa inc.iderea sa. +emedierea erorilor se face de catre driver-e. cele mai multe erori sunt strans legate de dispo%itiv, astfel incat numai driver-ul stie ce tre(uie facut *e3. incearca din nou, ignora, alarma-. O eroare des intalnita este cau%ata de un (loc de dis1 care a fost avariat si nu mai poate fi citit. 0upa ce driver-ul a incercat sa citeasca (locul respective de mai multe ori, renunta si informea%a software-ul independent de dispo%itiv. 0e aici incolo este independent de dispo%itiv modul in care eroarea va fi tratata. 0aca eroarea a aparut in timpul citirii unui fisier utili%ator poate fi suficienta transmiterea erorii inapoi catre apelant. Hotusi daca a aparut in timpul citirii structurii unui s>stem critic de date, asa cum este (locul care contine sc.ema de (iti care arata (locurile li(ere s-ar putea ca sistemul de operare sa nu ai(a alta alternativa decat sa afise%e un mesaj de eroare si sa inc.eie.

$. Spatiul utili)atorului soft0are!ului ",0esi cea mai mare parte a software-ului "@O se afla in interiorul sistemului de operare, o mica parte a lui este formata din (i(lioteci legate intre ele prin programe utili%atoare si c.iar programe intregi ruland in afara 1ernel-ului. Apelarile sistemului, inclusive apelarile sistemului "@O sunt in moe normal facute prin functiile (i(liotecii. Cand un procram C contine apelul CountOwrite*fd, (uffer, n(>tes-& 89

Aritoni Ovidiu

Sisteme de operare 1

Functia write a (i(liotecii va fi legata de program si continuta in programul (inar> present in memorie in timpul rularii. Colectarea tuturor acestor functii de (i(lioteca constituie in mod evident o parte a sistemului "@O. "n timp ce aceste functii fac putin mai mult decat sa isi inscrie parametrii in locul corespun%ator pentru apelarea sistemului, e3ista alte functii "@O care intr-adevar lucrea%a. Formatarea intrarii si iesirii se face prin functii din (i(lioteca. )n e3emplu din C este printf" care ia un format de sir de caractere si posi(il cateva varia(ile ca intrare, construieste un sir de caractere ASC"", si apoi apelea%a comanda scrie pentru a vi%uali%a sirul. )n e3emplu de functie asemanatoare pentru intare este scanf care citeste intrarea si o depo%itea%a in varia(ilele descries intr-un format de siruri de caractere folosind aceeasi sinta3a ca printf. :i(lioteca "@O standard contine un numar de functii care implica "@O si functionea%a ca parte a programelor utili%atoare. Bu tot software-ul "@O de la nivelul utili%atorului consta in functii de (i(lioteca. Alta categorie importanta este sistemul in spirala. Spiralarea este un mod de a trata dispo%itivele "@O dedicate intr-un sistem de programare. )n dispo%itiv in spirala o(isnuit este imprimanta. 0esi din punct de vedere te.nic ar fi mai usor sa " se permita oricarui process utili%ator sa desc.ida fisierul special de caractere pentru imprimanta, sa presupunem ca un process l-ar desc.ide si timp de mai multe ore nu ar face nimic. Asta ar insemna ca nici alt proces n-ar mai putea printa nimic. "n sc.im( se creea%a un proces special numit daemon si un director special numit director de spiralare. 'entru a printa un fisier, un proces generea%a mai intai intregul fisier care tre(uie printat si il depo%itea%a in directorul de spiralare. 0aemonul .otareste care este singurul proces caruia " se permite sa utili%e%e fisierul special al imprimantei pentru a printa fisierele din director. 'rin protejarea fisierului special impotriva folosirii directe de catre utili%ator este eliminata posi(ilitatea ca cineva sa-l tina desc.is mai mult decata este necesar. Spiarlarea nu este folosita doar pentru imprimante. Se foloseste si in alte situatii. 0e e3emplu transferul de fisiere printr-o retea foloseste adesea un daemon de retea. 'entru a trimite undeva un fisier, un utili%ator il pune in disrectorul de spiralare pentru retea. ,ai tar%iu daemonul de retea il scoate si il transmite. )n ca% particular de transmitere spiralata a unui fisier este sistemul de posta elecronica prin internet. Aceasta retea consta in milioane de aparate din toata lumea ce comunica folosind mai multe retele de computere. 'entru atrimite cuiva un mesaj se apelea%a un program cum este send, care accepta scrisoarea care tre(uie trimisa si apoi o depo%itea%a intr-un director de spiralare pentru a o transmite ulterior. "ntregul sistem de mesaje rulea%a in afara sistemului de operare. Figura ;-7 re%uma sistemul "@O aratand toate straturile precum si functiile principale ale fiecarui strat. "ncepand de jos straturile sunt$ .ardware-ul, cererile de intrerupere, drivere de dispo%itiv, software independent de dispo%itiv si in cele din urma procesele utili%atoare. Sagetile din figura ;-7 arata flu3ul de control. Cand un program utili%ator incearca sa citeasca un (loc dintr-un fisier, de e3emplu, sistemul de operare este invocat pentru a duce apelul la sfarsit. Software-ul independent de dispo%itiv verifica depo%itul de (locuri, de e3emplu. 0aca (locul necesar nu este acolo acesta apelea%a driver-ul dispo%itivului pentru a transmite cererea catre .ardware. Apoi procesul este (locat pana operatia de pe dis1 sa inc.eiat. 81

Aritoni Ovidiu

Sisteme de operare 1

Cand discul a terminat .ardware-ul produce o intrerupere. Cererea de intrerupere este rulata pentru a descoperi ce sa intamplat adica, care este dispo%itivul care solicita atentia in acel moment. Apoi e3trage statutul de pe dispo%itiv si porneste procesul resident pentru a finali%a cererea "@O si lasa procesul utili%ator sa continue.

Fig ;-7. straturile sistemului "@O si functiile principale ale fiecarui strat.

". -m$a uri

Sistemele computerelor sunt pline de resurse care pot fi folosite de un singur process odata. 'rinter e3emplele o(isnuite se numara ploterele cu pat plat cd-rom reader si cd-rom recorder, sisteme de (ac1-up pe (anda de 8mm 0AH si sloturile din ta(la de process a sistemului. /3istenta a doua procese care scriu simultan pe printer duce la erori. /3istenta a doua procese ce utili%ea%a acelasi slot din ta(la de procese va duce, pro(a(il la eronarea sistemului. "n consecinta toate sistemele de operare au capacitatea sa garante%e temporar unui proces acces e3clusiv la anumite resurse. 'entru multe aplicatii un proces are nevoie de acces e3clusiv la mai multe resurse nu doar la una singura. Ianditiva de e3emplu la o companie de van%ari care se speciali%ea%a in van%area unor .arti demografice mari si detaliate ale S)A e3ecutate pe un plotter cu plat plat de 1m latime. "nformatia demografica vine prin cd-rom si contine recensamantul si alte date. Sa presupunem ca procesul A cere unitatea de cd-rom si o o(tine. )n moment mai tar%iu procesul : cere pltter-ul si il o(tine si el. Acum procesul A cere si el plotter-ul si se (loc.ea%a asteptandu-l. in cele din urma procesul : cere cd-romul si se (loc.ea%a si el. "n acest moment am(ele procese sunt (locate si vor ramane asa pentru totdeauna. Aceasta situatie se numeste impas. Bu este (ine sa aveti impasuri in sistemul dumneavoastra. 8#

Aritoni Ovidiu

Sisteme de operare 1

"mpasurile pot aparea in multe alte situatii pe langa solocitarea dispo%itivelor "@O dedicate. 0e e3emplu intr-un sistem de (a%e de date un program poate fi nevoit sa (loc.e%e mai multe inregistrari pe care ele le foloseste, pentru a evita conditile de competitie. 0aca procesul A (loc.ea%a inregistrarea +1 si procesul : (loc.ea%a inregistrarea +# si apoi fiecare proces incearca sa (loc.e%e inregistrarea celuilalt avem de asemenea un impas. Astfel impasurile pot sa apara atat pentru resursele .ardware cat si pentru software. "n aceasta sectiune vom anali%a mai atent impasurile pentru a vedea atat modul in care apar cat si modul in care pot fi prevenite sau evitate. Ca e3emplu vom vor(i despre o(tinerea dispo%itivelor fi%ice cum sunt (en%ile, cd-rom si plotter, deoarece acestea sunt usor de vi%iali%at dar principiile si algoritmii sunt vala(ili si pentru alte tipuri de impasuri.

A. %esurse
"mpasurile pot aparea atunci cand proceselor le-a fost garantat acces e3clusiv la fisiere dispo%itive etc. 'ntru a generali%a cat mai mult discutia despre impasuri ne vom referi la o(iectele garantate ca resurse. O resursa poate fi un dispo%itiv .ardware *o (anda- sau o informatie *o inregistrare (locata dintr-o (a%a de date-. "n mod normal un computer poate avea mai multe resurse diferite care pot fi o(tinute. 'entru unele resurse pot fi disponi(ile mai multe e3emplare identice asa cum este unitatea cu trei (en%i. Cand sunt disponi(ile mai multe copii ale unei resurse oricare din ele poate fi folosita pentru a satisface orice cerere de resurse. 'e scurt numim resursa orice care poate fi folosit la un moment dat de un singur proces. +esursele sunt de doua feluri$ preempti(ila si nepreempti(ila. O resursa preempti(ila este una care poate fi luata procesului care o foloseste fara efecte secundare pentru acesta. ,emoria este un e3emplu in acest sens. Ianditi-va, de e3emplu la un sistem cu memorie utili%a(ila de <1#1, o imprimanta, si doua procese de <1#1 am(ele dorind sa printe%e ceva. 'rocesul A cere si primeste imprimanta, apoi incepe sa calcule%e valorile care tre(uie printate. "nainte ca el sa termine calculul ii e3pira Muantum-ul si este sc.im(at. Acum rulea%a procesul : si incearca fara sa reuseasca, sa o(tina imprimanta. Acum avem o potentiala situatie de impas deoarece A are imprimanta si : are memoria si nici unul nu poate sa mearga mai departe fara resursa detinuta de celalalt. 0in fericire este posi(il sa " se ia memoria procesului : prin sc.im(area lui cu procesul A. acum A poate sa rule%e, sa printe%e si apoi sa eli(ere%e imprimanta& astfel nu apare nici un impas. O resursa nonpreempti(ila este una care nu ii poate fi luata utili%atorului ei curent fara a produce o esuarea a procesului. 0aca un proces a inceput sa printe%e re%ultatul si ii luam imprimanta si o dam altui proces re%ulatul va fi deformat. "mprimantele nu sunt preempti(ile. "n general impasurile implica resurse nonpreempti(ile. "mpasurile potentiale care implica resurse preempti(ile pot fi re%olvate prin realocarea resursei de la un proces la altul. Astfel anali%a noastra se va concentra asupra resurselor nonpreempti(ile. Succesiunea evenimentelor, necesara pentru a folosi o resursa este 1 solicitarea resursei # utili%area resursei ; eli(erarea resursei 8;

Aritoni Ovidiu

Sisteme de operare 1

0aca resursa nu este disponi(ila in momentul solicitarii procesul de solicitare este nevoit sa astepte. 4a unele sisteme de operare procesul este (locat automat in momentul in care o solicitare de resurse esuea%a si este repornit in momentul in care este disponi(ila. 4a alte sisteme solicitarea esuea%a cu un cod de eroare, si procesul apelant tre(uie sa astepte un timp si apoi sa reancerce.

B. Principii ale impasului

"mpasul poate fi definit astfel$ # serie de procese se afla in impas daca fiecare proces din serie asteapta un eveniment care poate fi cau$at doar de alt proces din serie. 0eoarece toate procesele sunt in asteptare nici unul dintre ele nu va cau%a vreodata unul din evenimentele care ar putea sa porneasca oricare alt mem(ru al seriei si astfel, toate procesele asteapta la nesfarsit. "n majoritatea ca%urilor evenimentul pe care-l asteapta fiecare proces este eli(erarea unei resurse detinuta in momentul respectiv de alt mem(ru al seriei. Cu alte cuvinte fiecare mem(ru al seriei de procese aflate in impas asteapta o resursa care este detinuta de un proces aflat in inpas. Bici unul dintre procese nu poate sa rule%e, nici unul dintre ele nu poate sa eli(ere%e vreo resursa si nici unul nu poate fi repornit. Bu este important numarul proceselor si nici numarul si tipul resurselor detinute si solicitate.

Conditi de impas
Coffman et al. *1FE1- a aratat ca e3ista G conditii de impas$ 1-Conditia de e3cludere reciproca. Ficare resursa este ori disponi(ila ori detinuta in mod curent de un singur proces. #-Conditia retine si asteapta. 'rocesele care detin in mod curent resurse garantate anterior pot sa solicite noi resurse. ;-Conditia de nepreemtiune. +esursele garantate date anterior nu pot fi luate a(u%iv unui proces. /le tre(uie sa fie in mod e3plicit eli(erate de catre procesul care le detine. G-Conditia asteptarii circulare. Hre(uie sa e3iste o inlantuire de doua sau mai multe procese fiecare dintre ele asteptand o resursa detinuta de urmatorul mem(ru al inlatuirii. Hoate aceste G conditii tre(uie sa fie pre%ente pentru ca un impas sa apara. 0aca una sau mai multe dintre aceste conditii nu apare impasul nu este posi(il. 8G

Aritoni Ovidiu

Sisteme de operare 1

,odelarea impasului
Dolt*1FE#- a aratat ca aceste G conditii pot fi modelate folosind diagramele directionale. 0iagramele au # tipuri de noduri$ procese, repre%entate ca cercuri si resurse repre%entate prin patrate. )n arc de la un nod de resurse *patrat- la un nod de proces *cerc- arata ca resursa a fost solicitata anterior, acordata si momentan este detinuta de procesul respectiv. "n figura ;-E*a- resursa + este acordata procesului A in acest moment.

Fig ;-E. 0iagrama alocarii resurselor. *a- detinerea unei resurse. *(- solicitarea unei resurse. *c- impas. )n arc de la un proces la o resursa arata ca procesul este (locat in momentul actual si asteapta resursa respectiva. "n figura ;-E*(- procesul : asteapta resursa S. in figura ;-E*c- vedem un impas$ procesul C asteapta resursa H care este detinuta in mod curent de procesud 0. 'rocesul 0 nu este pe punctul de-a eli(era resursa H deoarece asteapta resursa ), detinuta de C. Am(ele procese vor astepat la nesfarsit. )n ciclu in diagrama arata ca e3ista un impas in care sunt implicate procesele si resursele din ciclu. "n acest e3emplu ciclul este C-H-0-)-C. Acum sa vedem un e3emplu despre modul de folosire al diagramelor de resurse. Avem ; procese A,: si C si ; resurse +,S si H. Solicitarile si eli(erarile celor ; procese sunt date in figura ;-8*a--*c-. Sistemul de operare este li(er sa rule%e in orice moment orice proces care nu este (locat astfel ca ar putea decide sa rule%e A pana A isi termina sarcina, apoi sa rule%e : pana la sfarsit si, in final C. Aceasta ordonare nu duce la nici un impas *deoarece nu e3ista competitie pentru resurse- dar nici paralelism nu e3ista. 'e langa solicitarea si eli(erarea de resurse, procesele calculea%a si fac "@O. atunci cand procesele sunt rulate secvential nu e3ista posi(iliatatea ca, in timp ce un proces asteapta "@O altul sa poata folosi procesorul. 0e aceea se poate ca rularea proceslor strict secvential sa nu fie cea mai (una alegere. 'e de alta parte daca nici unul din procese nu face deloc "@O algoritmul Kintai cea mai scurta sarcinaN este prefera(il in locul celui circular astfel ca in unele conditii rularea secventiala a tuturor proceselor poate fi cea mai (una alegere. Sa presupunem acum ca procesele fac atat "@O cat si calculare astfel ca algoritmul circular este un mod de tempori%are re%ona(il. Solicitarile de resursa ar putea aparea in 8<

Aritoni Ovidiu

Sisteme de operare 1

ordinea din figura ;-8*d-. 0aca aceste 7 cereri sunt indeplinite in aceasta ordina cele 7 diagrame care re%ulta sunt aratate in figura ;-8*e-j-. 0upa ce solicitarea G a fost facuta A se (loc.ea%a asteptan S ca in figura ;-8*.-. "n urmatorii # pasi si : si C se (loc.ea%a, in cele din urma ducand la un ciclu si la impasul din figura ;.8*j-. Hotusi dupa cum am mentionat deja sistemului de operare nu " se cere sa rule%e procesele intro ordine anume. "n particular, daca satisfacerea unei anumite cereri poate duce la impas sistemul de operare poate sa suspende pur si simplu procesul fara sa-" indeplineasca cererea *adica sa nu includa procesul in tempori%are- pana la un moment favora(il. "n figura ;-8 daca sistemul de operare ar sti despre iminenta impasului ar putea sa-l suspende pe : in loc sa-" acorde acestuia S. 0aca rulam doar A si C vom o(tine solicitarile si eli(erarile din figura ;-8*1- in loc de cele din figura ;-8*d-. aceasta secventa duce la diagrama de resursa din figurile ;-8*l-M-, care nu duc la impas. 0upa pasul *M- procesului : ii poate fi acordat S deoarece A a terminat si C are tot ceea ce ii tre(uie. C.iar daca : s-ar (loca in momentul solicitarii H, nu poate sa apara un impas. : va astepta pana C termina. ,ai tar%iu in acest capitol von studia un algoritm detaliat folosit pentru luarea deci%iilor de alocare care nu duc la impas. Ceea ce tre(uie sa intelegem acum este ca diagramele de resurse sunt un instrument care ne permite sa vedem daca o secventa cerere@eli(erare data duce la impas. 'ur si simplu ducem la (un sfarsit pas cu pas solicitarile si eli(erarile si dupa fiecare pas verificam diagrama pentru a vedea daca nu contine un ciclu. 0aca acest lucru se intampla avem un impas& daca nu, nu e3ista nici un impas. 0esi aceasta anali%a a diagramelor de resursa a fost facut pentru ca%ul in care e3ista o singura resursa din fiecare tip, diagramele de resursa pot fi si ele generali%ate pentru a se ocupa de mai multe resurse de acelasi tip *Dolt,1FE#-. "n general e3ista G strategii de re%olvare a impasurilor. 1.'ur si simplu sa se ignore pro(lema #.0etectare si remediere ;./vitarea dinamica prin atenta alocare a resursei G.'revenirea prin negarea structurala a uneia dintre cele G conditii necesare pentru producerea impasului. "n urmatoarele G sectiuni vom anali%a pe rand fiecare din aceste metode.

C. Algoritmul strutului
Cea mai simpla metoda de a(ordare este algoritmul strutului$ iti (agi capul in nisip si te prefaci ca nu e3ista nici o pro(lema. Oamenii reactionea%a diferit fata de aceasta strategie. ,atematicienii o gasesc inaccepta(iala si spun ca impasurile tre(uie prevenite prin orice mijloace. "nginerii intrea(a cat de des eronea%a sistemul din alte motive si cat de grav este un impas. 0aca impasurile apar, in medie o data la <9 de ani dar sistemul se pra(useste datorita erorilor de .ardware, erori de compilare si (ug-uri in sistemul de operare care apar o data pe luna majoritatea inginerilor nu ar fi dispusi sa piarda atat de mult din performanta sau avantaje pentru a elimina impasurile.

87

Aritoni Ovidiu

Sisteme de operare 1

fig. ;-8. )n e3emplu pentru modurile cum apare un impas si felul in care poate fi evitat. 'entru a face acest contrast si mai specific, )B"P *si ,"B"P- pot suferi de impasuri care nici nu sunt detectate, ca sa nu mai vor(im de defectiunil automate. Bumarul total de procese din sistem este determinat de numarul de intrari din ta(la de procese. Astfel, slot-urile de pe ta(la de procese sunt resurse limitate. 0aca o comanda FO+A esuea%a din cau%a ca ta(la e plina, programul respectiv ar tre(ui sa astepte un timp si apoi sa incerce din nou. Acum sa presupunem ca un sistem )B"P are 199 de slot-uri pentru procese. 19 programe rulea%a, fiecare dintre ele avand nevoie sa cree%e cate 1# su(-procese. 0upa ce fiecare a creat F procese, cele 19 procese initiale plus cele F9 de procese nou create au umplut ta(la. Avem o situatie de impas deoarece fiecare dintre cele 19 procese initiale asteapta intr-un circuit fara nici un capat. 'ro(a(ilitatea ca aceasta situatie sa apara este minima, dar este totusi posi(il. Ar tre(ui sa a(andonam procesele si comanda FO+A pentru a re%olva pro(lemaW Si numarul ma3im de fisiere desc.ise este limitat tot de marimea ta(lei pentru nod ", astfel ca o pro(lema asemanatoare apare atunci cand acesta se umple. Spatiul de sc.im(are de pe dis1 este tot o resursa limitata. 0e fapt, aproape toate ta(lele din sistemul de operare repre%inta resurse limitate. Ar tre(ui sa le anulam pe toate pentru ca se poate intampla ca un numar n de procese sa ceara fiecare 1@n din total, si apoi fiecare sa incerce sa il ceara pe celalaltW

8E

Aritoni Ovidiu

Sisteme de operare 1

A(ordarea )B"P este de a ignora pur si simplu pro(lema presupunand ca majoritatea utili%atorilor ar prefera un impas oca%ional in locul unei reguli care sa restrictione%e utili%atorii la un singur proces, un singur fisier desc.is, si asa mai departe. 0aca impasurile ar putea fi eliminate pe gratis nu ar e3ista multe discutii pe tema asta. 'ro(lema este ca pretul este destul de mare, mai ales in ceea ce priveste restrictionarea proceselor, cum vom vedea mai incolo, lucru care este destul de neplacut. Astfel ca suntem in fata unei situatii neplacute in care tre(uie sa alegem intre avantaje si corectitudine si a unei discutii aprinse despre care dintre ele este mai importanta.

etectare si remediere

O a doua te.nica este detectarea si remedierea. Atunci cand este folosita aceasta te.nica sistemul nu face altceva decat sa monitori%e%e solicitarile si eli(erarile resurselor. 0e fiecare data cand o resursa este solicitata sau eli(erata diagrama de resursa este actuali%ata si se verifica daca e3ista vreun ciclu. 0aca e3ista, unul dintre procesele ciclului este omorat. 0aca ciclul nu este intrerupt, un alt proces este oorat, si tot asa pana se intrerupe ciclul. O metoda mai dura este aceea in care nici macar nu se mentine diagrama de resursa, dar se verifica periodic daca e3ista vreun proces care a fost (loca fara intrerupere timp de o ora, de e3emplu. )n astfel de proces este omorat. Strategia de detectare si remediere este adesea folosita pentru computerele principale mari, in special in sistemele de incarcare in care este accepta(ila omorarea si apoi restartarea uni proces. Hotusi tre(uie sa se ai(a grija ca toate fisierele modificate sa fie readuse la starea lor initiala prcum si sa se anule%e oricare alt efect secundar care este posi(il sa fi aparut.

$. Prevenirea impasurilor
O a treia strategie pentru impasuri este impunerea unor restrictii adecvate proceselor, astfel incat, din punct de vedere structural un impas sa fie imposi(il. Cele patru conditii sta(ilite de Cauffman et al. *1FE1- furni%ea%a un indiciu pentru posi(ile solutii. 0aca ne putem asigura ca cel putin una din aceste conditii nu este indeplinita niciodata, atunci impasurile sunt imposi(ile *Davender, 1F78-. ,ai intai sa anali%am conditia e3cluderii reciproce. 0aca nici o resursa nu ar fi alocata doar unui singur proces impasurile nu ar putea sa apara. Hotusi, este la fel de clar ca daca permitem ca doua procese sa foloseasca imprimanta in acelasi timp vom crea o stare de .aos. 'rin spiralarea iesirii de imprimanta, mai multe procese vor putea sa scoata re%ultatele in acelasi timp. "n acest model singurul proces care cere efectiv imprimanta fi%ica este daemon-ul de imprimanta. 0e vreme ce acest daemon nu solicita niciodata alta resursa, putem sa eliminam posi(ilitatea unui impas in ceea ce priveste imprimanta. 0in pacate, nu toate dispo%itivele pot fi spiralate *ta(la de procese nu se pretea%a la spiralare-. "n plus, c.iar competitia pentru spatiul de dis1 care poate fi spiralat poate sa duca la impas. Ce s-ar intampla daca ar e3ista doua procese si fiecare sa umple jumatate din spatiiul de spiralat si n-ar fi inc.eiat niciunul dintre eleW 0aca daemonul ar fi programat sa inceapa printarea c.iar inainte ca toate re%ultatele sa fie spiralate, se poate 88

Aritoni Ovidiu

Sisteme de operare 1

ca imprimanta sa nu lucre%e daca un proces de iesire ar decide sa astepte cateva ore pana la prima iesire. 0in acest motiv, in mod normal daemon-urile sunt programate sa inceapa sa printe%e doar cand este disponi(il intregul fisier de iesire. Bici un proces nu va termina vreodata, deci avem un impas de dis1. Cea de-a doua conditie formulata de Coffman et al. arata mul mai promitator. 0aca putem sa impiedicam procesul care detine resursele sa astepte mai multe resurse, putem sa evitam impasurile. )n mod de a reali%a acest lucru este sa cerem proceselor sa solicite resursele inainte de a incepe e3ecutarea. 0aca toate resursele ar fi disponi(ile, procesului "-ar fi alocata orice resursa de care are nevoie si ar putea sa rule%e pana la sfarsit. 0aca una sau mai multe resurse ar fi ocupate, nimic n-ar fi alocat si procesul ar astepta pur si simplu. O mare pro(lema a acestui tip de a(ordare este faptul ca multe procese nu stiu inainte de momentul cand incep sa rule%e de cate resurse vor avea nevoie. O alta pro(lema este aceea ca daca folosim acest mod de a(ordare resursele nu vor fi utili%ate in mod optim. 0e e3emplu, sa ne gandim ca un proces care citeste date de pe o (anda de intrare, anali%ea%a timp de o ora, apoi scrie re%ultatul pe (anda si il scoate pe plotter. 0aca toate aceste resurse ar tre(ui solicitate dinainte, procesul va ocupa unitatea de iesire pe (anda si plotter-ul timp de o ora. )n mod putin diferit de a nu indeplini conditia Kretine si asteaptaN este sa cerem procesului care solicita o resursa sa eli(ere%e mai intai, pentru un timp toate resursele pe care le detine. Bumai daca aceasta cerere este indeplinita poate procesul sa-si primeasca resursele inapoi. A(ordarea celei de-a treia conditii *fara preemptiune- este si mai putin promitatoare decat a celei de-a doua. 0aca unui proces "-a fost alocata imprimanta si se afla in mijlocul printarii re%ultatului, vom crea de%ordine daca ii luam a(u%iv imprimanta deoarece plotter-ul de care are nevoie nu este disponi(il. A mai ramas o singura conditie. Asteptarea circulara poate fi eliminata in mai multe moduri. )nul dintre ele este sta(ilirea unei reguli care sa inter%ica proceselor sa detina mai mult de o resursa odata. 0aca are nevoie de o a doua resursa tre(uie sa eli(ere%e prima resursa. 'entru un proces care tre(uie sa copie%e un fisier foarte mare de pe o (anda pe o imprimanta aceasta restricie este inaccepta(ila. )n alt mod de a evita asteptarea circulara este furni%area unei numerotari glo(ale a tuturor resurselor, asa cum se vede in figura ;-F*a-. acum regula este urmatoarea$ procesele pot sa solicite resurse in orice moment, dar toate solicitarile tre(uie facute in ordine numerica. )n proces poate sa solicite intai o imprimanta si apoi o unitate de (anda, dar nu poate sa solicite intai un plotter si apoi o imprimanta.

Figura ;-F. *a- +esurse ordonate numeric. *(- O diagrama de resursa. 8F

Aritoni Ovidiu

Sisteme de operare 1

Cu aceasta regula, diagrama alocarii resurselor nu poate sa ai(a cicluri. Sa vedem in figura ;-F*(- de ce acest lucru este vala(il si pentru ca%ul in care e3ista doua procese. )n impas poate sa apara doar daca A solicita resursa j si : solicita resursa i. 0aca presupunem ca i si j sunt resurse diferite, ele vor avea numere diferite de ordine. 0aca i%j, atunci A nu are voie sa solicite j. 0aca i&j, atunci : nu are voie sa solicite i. Oricum, un impas este imposi(il. Se procedea%a la fel si in ca%ul in care e3ista mai multe procese. "n fiecare moment, una dintre resursele alocate va avea po%itia cea mai de sus. 'rocesul care detine aceasta resursa nu va mai putea sa solicite alta resursa deja alocata. Ori va temina, ori, in cel mai rau ca%, va solicita o resursa de pe o po%itie superioara, dintre cele disponi(ile. "n cele din urma va termina si va eli(era resursele pe care le detine. "n acest moment, alt proces va primi resursa si va putea sa termine si el. 'e scurt, este un scenariu in care toate procesele termina, deci nu apare nici un impas. O variatie minora a acestui algoritm este sa se ceara ca resursele sa fie o(tinute strict in ordine crescatoare si sa insiste doar asupra faptului ca nici un proces sa nu solicite o resursa situata mai jos decat cea pe care o detine deja. 0aca, initial un proces solicita resursele F si 19, si apoi le eli(erea%a pe amandoua, efectiv se incepe de la inceput, deci nu e3ista nici un motiv sa se inter%ica de acum incolo solicitarea resursei 1. 0esi ordonarea numerica a resurselor elimina pro(lema impasurilor, se poate gasi o ordonare care sa satisfaca pe toata lumea. Atunci cand resursele include si sloturile ta(lei de procese, spatiul de spiralare al dis1-ului, (a%a de date cu inregistrarile (locate si ale resurse a(stracte, numarul resurselor potentiale si util%arile diferite pot fi atat de numeroase incat nici un fel de ordonare nu ar putea functiona. 0iferitele a(ordari pentru prevenirea impasurilor sunt re%umate in figura ;-19.

Fig. ;-19. +e%umat al a(ordarilor folosite pentru prevenirea impasurilor.

F.$vitarea impasului
"n figura ;-8 am va%ut ca impasul a fost evitat nu prin impunerea unor reguli ar(itrare pentru procese, ci prin anali%area atenta a fiecarei solicitari de resursa pentru a vedea daca poate fi acordata in deplina siguranta. Se punu urmatoarea intre(are$ e3ista un algoritm care sa evite intotdeauna impasurile prin luarea celei mai (une deci%iiW +aspunsul este un da .otarat = putem saevitam impasurile, dar numai daca anumite informatii sunt disponi(ile dinainte. "n aceasta sectiune vom anali%a modurile de evitare a impasurilo printr-o atenta alocare a resurselor. Algoritmul (anc.erului pentru o singura resursa F9

Aritoni Ovidiu

Sisteme de operare 1

)n algoritm de tempori%are care poate sa evite impasurile il datoram lui 0ij1stra *1F7<- si este cunoscut su( denumirea de algoritmul (anc.erului. /ste conceput dupa modul in care un (anc.er dintr-un oras mic ar putea sa trate%e un grup de client carora lea acordat linii de credit. "n figura ;-11*a- vedem patru clienti si fiecaruia dintre ei "-a fost acordat un anumit numar de unitati de credit *e3. o unitate este 1Adolari-. :anc.erul stie ca nu toti clientii vor avea imediat nevoie de cantitatea ma3ima a creditului lor, astfel ca si-a re%ervat pentru a ii servi doar 19 unitati in loc de ## . *in aceasta analogie clientii repre%inta procesele, unitatile sunt, de e3emplu, unitatile de (anda si (anc.erul repre%inta sistemul de operare-. Clientii isi conduc afacerile facand din cand in cand cereri de imprumut. 4a un moment dat, apare situatia aratata in figura ;-11*(-. o lista de clienti care arata (anii deja imprumutati *unitati de (anda deja alocate- si creditul ma3im dispoi(il in ca%ul lor *numarul ma3im de unitati de (anda de care vor avea nevoie mai tar%iu- se numeste starea sistemului in ceea ce priveste alocarea resurselor. 0espre o stare se poate spue ca e sigura atunci cand e3ista o secventa de alte stari care face ca toti clientii sa primeasca imprumuturi in limitele creditului lor *toate procesele sa-si primeasca toate resursele si sa termine-. Starea din figura ;-11*(- este sigura deoarece, cu doua unitati ramase, (anc.erul poate sa intar%ie orice solicitare in afara de cea a lu ,arvin, lasandu-l astfel pe ,arvin sa termine si sa eli(ere%e toate cele patru resurse pe care le detine. Cu inca patru unitati, (anc.erul poate sa acorde unitatile necesare fie :ar(arei, fie Su%annei, etc.

fig ;-11. trei stari de alocare a resurei$ *a- sigura& *(- sigura& *c- nesigura Ianditi-va ce s-ar intampla daca ar fi apro(ata o solicitare a :ar(arei pentru una sau mai multe unitati *ve%i fig. ;-11*(--. Am avea situatia din figura ;-11*c-, care nu este sigura. 0aca (rusc, toti clientii si-ar solicita creditul ma3im, (anc.erul nu ar putea satisface nici una din aceste cereri si s-ar ajunge la un impas. O stare nesigura nu duce neaparat la un impas deoarece se poate ca acel client sa nu ai(a nevoie de intregul credit disponi(il, dar (anc.erul nupoate sa se (a%e%e pe acest lucru. 'rin urmare, algoritmul (anc.erului presupune anali%area fiecarei cereri pe masura ce acestea apar si verificarea daca satisfacerea ei duce la o stare sigura. 0aca da, cererea este satisfacuta& altfel, este amanata. 'entru a vedea daca o stare este sigura, (anc.erul verifica daca are suficiente resurse pentru a satisface clientul la ma3im. 0aca are aceste resurse, clientul este platit din nou si urmatorul client care este cel mai aproape de limitele sale este verificat, si asa mai departe. 0aca toate imprumuturile pot fi replatite inseamna ca starea este sigura si cererea initiala poate fi satisfacuta.

F1

Aritoni Ovidiu

Sisteme de operare 1

'raiectoriile resurselor
Algoritmul de mai sus a fost descris in termenii unei sigure clase de resurse *e3. doar unitati de (anda sau doar imprimante, dar nu am(ele-. "n figura ;-1# vedem un model pentru a trata cu doua procese si cu doua resurse, de e3emplu o imprimanta si un plotter. A3a ori%ontala repre%inta numarul de instrunctiuni e3ecutate de procesul A. a3a verticala repre%inta numarul de instrunctiuni e3ecutate de procesul :. 4a momentul "1 A solicita o imprimanta& la momentul "# are nevoie de un plotter. "mprimanta si plotter-ul sunt eli(erate la momentele "; si respectiv "G. 'rocesul : are nevoie de plotter de la momentul "< la momentul "E si de imprimanta de la momentul "7 la momentul "8. Fiecare punct din diagrama repre%inta o stare reunita a acestor doua procese. "nitial, starea este in punctul p, cand nici un proces nu a e3ecutat nici o instructiune. 0aca tempori%atorul il alege pe A pentru a rula primul, ajungem in punctul ( in care A a e3ecutat un numar de instructiuni, dar : nu a e3ecutat niciuna. "n punctul ( traietoria devine verticala, indicand faptul ca tempori%atorul a decis ca : sa rule%e. Cand avem un singur procesor toate caile tre(uie sa fie ori%ontale sau verticale, niciodata pe diagonala. "n plus, miscarea se face intotdeauna spre nord sau spre est, niciodata spre sud sau spre vest *procesele nu pot rula inapoi-.

Fig. ;-1# 0oua traiectorii proces-resursa. Cand A intersectea%a linia "1 in timp ce parcurge calea de la r la s" solicita si ii este acordata imprimanta. Cand : ajunge in punctul t, solicita plotter-ul. donele .asurate sunt in mod special interesante. donele cu linii inclinate de la sud-vest spre nord-est repre%inta am(ele procese care detin imprimanta. +egula e3cluderii reciproce face imposi(il accesul in aceasta %ona. "n acelasi mod %ona .asurata repre%inta am(ele procese care detin plotter-ul si este la fel, imposi(il de accesat. 0aca sistemul intra vreodata in casuta delimitata de "1 si "# lateral si de "< si "7 sus si jos, va ajunge in impas la intersectia dintre "# si "7. "n acest punct Acere plotter-ul si : cere imprimanta si am(ele sunt deja acordate. "ntreaga casuta este nesigura si tre(uie F#

Aritoni Ovidiu

Sisteme de operare 1

evitata. "n punctul t singurul lucru sigurul lucru sigur este rularea procesului A pana ajunge la "G. 0incolo de acesta va fi (una orice traiectorie spre u.

Algoritmul (anc.erului pentru resurse multiple


Acest model de diagrama este greu de aplicat in ca%ul general al unui numar ar(itrar de procese si de clase de resurse, fiecare cu mai multe e3emplare *e3. doua plotter-e, trei unitati de (anda-. Hotusi, algoritmul (anc.erului poate fi generali%at pentru a indeplini aceasta sarcina. "n figura ;-1; vedem cum functionea%a. "n figura ;-1; vedem doua matrice. Cea din stanga arata cate resurse din fiecare tip sunt in mod curent alocate fiecaruia dintre cele cinci procese. ,atricea din dreapta, arata de cate resurse mai are nevoie fiecare proces pentru a se inc.eia. Ca in ca%ul cu o singura resursa, procesele tre(uie sa anunte totalul de resurse de care au nevoie, inainte de a incepe sae3ecute, astfel incat sistemul sa poata calcula la fiecare pas matricea din dreapta.

Fig. ;-1; Algoritmul (anc.erului cu mai multe resurse Cei trei vectori din dreapta figurii arata resursele e3istente = /, resursele detinute = ' si A - resursele disponi(ile. 0e la / stim ca sistemul are sase unitati de (anda, trei plotter-e, patru imprimante si doua unitati C0-+O,. 0intre acestea, cinci unitati de (anda, trei plotter-e, patru imprimante si doua unitati C0-+O, sunt in mod curent alocate. Acest fapt poate fi va%ut prin adunarea coloanelor cu cele patru resurse din matricea din stanga. 5ectorul de resurse disponi(ile este diferenta dintre ceea ce are sistemul si ceea ce se utili%ea%a in mod curent. Algoritmul prin care se verifica daca o stare este sigura sau nu poate fi acum formulat. Cautati un rand + ale carui nevoi nesatisfacute de resurse sunt mai mici sau egale cu A. 0aca nu e3ista un astfel de rand, in cele din urma sistemul va ajunge in impas deoarece nici un proces nu se poate inc.eia. Sa presupunem ca procesul din randul ales solicita toate resursele de care are nevoie *lucru care este garantat a fi posi(il- si se inc.eie. ,arcam faptul ca procesul a terminat si adaugam toate resursele sale vectorului A.

F;

Aritoni Ovidiu

Sisteme de operare 1

+epetam pasii 1 si # pana cand fie toate procesele se inc.eie, ca% in care starea iniiala era sigura, fie pana cand apare un impas, ca% in care inseamna ca acea stare nu e sigura. 0aca mai multe procese sunt potrivite pentru a fi alese la pasul 1, nu are importanta care dintre ele este selectat $ cantitatea de resurse ori se mareste, ori, in cel mai rau ca%, ramane aceeasi. Acum sa ne intoarcem la e3emplul din figura ;-1;. starea curenta este sigura. Sa presupunem ca procesul : solicita in acest moment o imprimanta. Aceasta cerere poate fi indeplinita deoarece deoarece si starea urmatoare este sigura *procesul 0 poate sa termine si apoi procesele A sau /, urmate de celelalte-. Acum sa ne inc.ipuim ca dupa ce i se acorda lui : unul dintre cele doua imprimante ramase / vrea sa o(tina ultima imprimanta. Satisfacerea acestei cereri ar reduce vectorul resurselor disponi(ile la *1 9 9 9-, care duce la impas. "n mod evident cererea lui / nu ppoate fi satisfacuta imediat si tre(uie amanata pentru un timp. Acest algoritm a fost pu(licat de catre 0ij1stra pentru prima data in 1F7<. de atunci, aproape fiecare carte despre sistemele de operare a descris in detaliu acest altgoritm. Au fost scrise nenumarate lucrari despre diferite aspecte ale acestui altgoritm. 0in pacate, putini autori au avut indra%neala sa su(linie%e ca desi este minunat in teorie, in practica este aproape inutil deoarece deoarece sunt putine ca%urile in care procesele stiu dinainte care vor fi nevoile lor ma3ime de resurse. "n plus, numarul proceselo nu este fi3, ci varia%a in mod dinamic pe masura ce utili%atorii intra sau ies din sistem. ,ai mult c.iar, resursele care se astepta sa fie disponi(ile pot sa dispara (rusc *unitatile de (anda se pot strica. 'e scurt, sc.emele descrise anterior su( denumirea KprevenireN sunt foarte restrictive, iar algoritmul descris aici ca KevitareN necesita informatii care de o(icei nu sunt disponi(ile. 0aca va puteti gandi la un algoritm general care face aceste lucruri si in practica nu numai in teorie, scrieti-l si trimiteti-l. 'entru ca%uri particulare de aplicatii e3ista multe algoritmuri speciale e3celente. 0e e3emplu, in multe sisteme de (a%e de date, o operatie care apare frecvent cere (locarea catorva inregistrari si apoi actuali%ea%a toate inregistrarile (locate. Atunci cand mai multe procee rulea%a in acelasi timp e3ista un real pericol de impas. O a(ordare des intalnita este numita (locare in doua fa%e. "n prima fa%a procesul incearca sa (loc.e%e toate inregistrarile de care are nevoie, una cate una. 0aca reuseste face actuali%arile si eli(erea%a inregistrarile. 0aca vreo inregistrare e deja (locata, eli(erea%a inregistrarile pe care le detine deja si incepe din nou. "ntr-un fel aceasta a(ordare se aseamana cu solicitarea in avans a tuturor resurselor necesare sau cel putin inainte de a se face ceva ireversi(il. Hotusi, aceasta strategie nu este general vala(ila. "n sistemele in timp real si in sistemele de control al proceselor de e3emplu, nu se accepta ca un proces sa se inc.eie inainte de a ajunge la sfarsit si sa inceapa de la inceput din cau%a ca o resursa nu est disponi(ila. Bu se accepta nici sa inceapa din nou daca procesul a scris sau a citit mesaje din retea, a actuali%at fisiere sau daca a facut orice altceva care nu pote fi repetat in siguanta. Algoritmul functionea%a doar in acele situatii in care programatorul a aranjat lucrurile foarte atent, astfel incat programul poate fi oprit in orice moment al primei fa%e si apoi restartat. 0in pacate, nu toate aplicatiile pot fi structurate in acest mod.

FG

Aritoni Ovidiu

Sisteme de operare 1

Ane.a 1

Proce e ub 5indo3 6T

%onvenii de 'imba1 'a $rogramarea 5indo3


4im(ajul nativ de de%voltare a aplica!iilor 5indo3 este % 77. 0in aceast cau%, n cele ce urmea% vom descrie principiile programrii folosind construc!ii % i %77. Deaderul Swindows..R con!ine principalele construc!ii de lima(aj folosite n interfa!a 5indo3 .

%on !an!e
?n Swindows..R se definesc o serie de constante. Bumele acestora este compus din dou pr!i$ o prim parte indic grupul din care face parte constanta, apoi caracterul K\N i n final numele specific, de regul suficient de lung nc2t s sugere%e ce repre%int. "at c2teva nume de grupe$ CS SJ "0C "0" 0H JS J, stilul clasei de ferestre& crearea ferestrei& identificator de cursor& identificator de icon& atri(ut de afi are te3te& stilul ferestrei& mesaj asociat unei ferestre

0e e3emplu, pentru fi3area stilului unei clase se pot lega prin operatorul C gaL *sau- constantele de mai jos *care nu sunt singurele, mai pot fi i altele-$ - CS\0:4C4"AS = mesajele se transmit ferestrei prin du(lu clic1& - CS\D+/0+AJ sau CS\5+/0+AJ = provoac redesenarea ferestrei dup o redimensionare ori%ontal@vertical.

Ti$uri de da!e
Jindows folose te o serie de tipuri de date noi, prin care s-a urmrit cre terea prota(ilit!ii aplica!iilor n ca%ul unor noi ar.itecturi de calculatoare. Astfel, avem tipurile$ - :OO4, :hH/, 0JO+0 *;# (i!i-& - FA+'+OC *pointer spre func!ie-& - 4'SH+ *pointer ctre string-& - 4',SI *pointer ctre o structur ,SI- etc. 'entru desemnarea o(iectelor sunt definite ni te tipuri de date speciale$ descriptor sau .andle. Acestea sunt ntregi pe 17 (i!i prin intermediul crora se pot referi o(iecte. Hipurile de .andle folosite sunt$

F<

Aritoni Ovidiu DAB04/ D:+)SD DC)+SO+ D"COB D,/B) DJB0

Sisteme de operare 1 indicator general& indicator general spre o(iect KpensulK& indicator spre resurs cursor& indicator spre icon& indicator spre o resurs meniu& indicator indicator spre o fereastr.

6ume de variabi'e
Atri(uirea de nume pentru varia(ile se face respect2ndu-se anumite conven!ii, provenit din e3perien!a programatorilor. /ste vor(a de nota!ia ungar de denumire a varia(ilelor. ^11G_. /le nu sunt restric!ii impuse de sistem, dar este de preferat s fie respectate. 0e regul numele atri(uite sunt lungi, ncep cu liter mic, iar n cadrul numelor apar litere mari la nceputurile cuvintelor care le compun. 0e multe ori, c2nd este vor(a de o singur varia(il de un anumit tip, numele ei este numele tipului, scris cu liter mic. Hot ca i conven!ii, nceputurile *prefi3ele- numelor de varia(ile au semnifica!ie$ ( pentru :OO4& (> pentru :hH/& c pentru c.ar& dw pentru 0JO+0& fn pentru func!ie& . pentru .andle& i pentru int& lp petru pointer lung& w pentru JO+0 etc.

A$'icaii con o'8


?n ceea ce prive te programarea 5indo3 , pre%enta lucrare nu are, nici pe departe, inten!ia de a o descrie e3.austiv. 5om a(orda doar ceea ce este strict necesae pentru a putea eviden!ia aspectele de concuren! posi(ile, n conte3tul cadru, multiplatform, al demersurilor noastre. Cele mai simple aplica!ii care se pot scrie su( 5indo3 6T sunt aplica!iile consol. Acestea sunt, n fapt, aplica!ii cu intrare i ie ire standard n mod te3t, la fel ca i la programele simple su( 9ni.. Spre e3emplu, un program e3trem de simplu este programul prim.cpp de mai jos *Programu' ".6-$ int main *int c, c.ar[ a ^ _ Y int i& c.ar n ^1#9_& printf *KBumeleW N-& gets *n-& printf *K Salut bsin)rmea%a parametrii liniei de comandainN, n-& for *iO9& a^i_& iUU-

F7

Aritoni Ovidiu printf *KbsinN, a^i_ -& return 9& ]

Sisteme de operare 1

Programu' ".6. 4 a$'icaie con o'8: $rim.c$$


'resupunem c n urma compilrii i lin1-editrii acestui program s-a o(!inut filierul e3ecuta(il prim.e3e. O e3ecu!ie a lui se face ntr-o fereastr ,S0os 'rompt *fereastr Cmd- de su( 5indo3 6T. 0ac se lansea% programul prin comanda$ XR prim 11111 doi trei;;; G i se d la cerere numele *unuia dintre autori-. /$iF4O+"BR prim.e3e 11111 doi trei;;; G BumeleW Florian :oian Salut Florian :oian )rmea%a parametrii liniei de comanda 'rim.e3ej 11111 doi trei;;; G /$iF4O+"BR

Programu' ".5. :ezu'!a!u' e.ecuiei $rogramu'ui $rim.e.e


)n al doilea e3emplu de aplica!ie consol simpl este un program filtru. Acesta cite te linie cu linie de la intrarea standard i d la ie ire acelea i linii, scurtate la primele 19 caractere. Sursa Filtru.cpp este pre%entat n continuare *Programu' ".#.). `include Sstdio..R `include Sstring..R int main *int c, c.ar[ a ^ _ - Y c.ar 1 ^1#8_& for *& &Y if *gets*1- O O B)44(rea1& if *strlen *1- R 191 ^19_ O 9& printf *KbsirinN, 1-& ] FE

Aritoni Ovidiu return 9& ]

Sisteme de operare 1

Programu' ".#. *ur a Fi'!ru.c$$ 4ansarea unui astfel de filtru se face, de asemenea, dintr-o fereastr Cmd, put2ndu-se, la fel ca n 9ni. sau ;o , s se redirecte%e intrarea i ie irea lui standard, astfel$ Filtru.e3e SFisier"ntrare RFisier"esire )um se ajunge de la aceste surse cpp la fi*ierele executabile corespun$+toare, Aceasta depinde de mediul cpp cu care se de>volt aplica!iile. Bu inten!ionm o pre%entare e3.austiv a acestor medii, deoarece nu constituie o(iectul pre%entei lucrri. 5om e3pune, strict telegrafic, pa ii reali%rii lor folosind mediul 0evStudio pentru ,icro o(! /i ua' %77 6.+. 1. ?n meniul File se selectea% Bew, n fereastra de dialog o(!inut se selectea% 'roject. #. ?n cadrul acesteia se selectea% Jin;# Console Application. ;. ?n spa!iul 'roject Bame se scrie numele proiectantului, n ca%ul nostru prim sau filtru. G. ?n spa!iul 4ocation se trece locul n structura de directori, n care mediul i va de%volta aplica!ia, de e3emplu i)seriiflorin Aici, mediul creea% un su(director cu numele proiectului *n ca%ul nostru prim sau filtru-. <. Se alege tipul de aplica!ie consol dorit$ An empt> project& A simple application, A KDello worldZN application& An application t.at supports ,FC. Considerm c n acest e3emplu am ales$ A simple application. 7. 0up O1, se afi ea% un mesaj de informare, iar n su(directorul din location sunt create su(directoarele$ SourceFiles, DeaderFiles,

+esourceFiles.
F8

Aritoni Ovidiu

Sisteme de operare 1

0e asemenea, este depus acolo un fi ier +ead,e.t3t n care se e3plic rolul fiecrui fi ier sau director creat de mediu. E. Se selectea% din menioul File5iew, se e3pandea% directorul cu numele proiectului, apoi su(directorul SourceFiles n care un fi ier cu numele proiectului i tipul cpp. Acest fi ier surs con!ine, gata generat, sc.eletul programului principal *al func!iei main-. 0up un du(lu clic1 pe numele acestuia, el apare n fereastra de editare. 8. 0in acest moment programatorul poate s scrie efectiv con!inutul aplica!iei sale, plec2nd de la sc.eletul furni%at de mediu. F. 4a terminare, meniul :uild ofer, printre altele, posi(ilitatea de a compila surs respectiv *Compile sau %!r'7F#-, respectiv s o(!in un fi ier e3e *:uild sau F#-. 19. Fi ierul de tip e3e o(!inut este plasat n su(directorul 0e(ug al directorului cu numele proiectului. /l poate fi lansat n e3ecu!ie din mediu sau dinafara lui, poate fi copiat n alt parte *cum l-am depus noi pe prim.e3e n e$2florin- i lansa de acolo, etc. Crearea unui proces Jindows Crearea unui proces n Jindows BH se face prin apelul func!iei Create'rocess de ctre un t.read *fir de e3ecu!ie- dintr-un alt proces. Func!ia are urmtorul prototip$ :OO4 Create'rocess * 4'CHSH+ lps%"mageBame, 4'CHSH+ 4'S/C)+"Hh\AHH+":)H/S 4'S/C)+"Hh\AHH+":)H/S :OO4 0JO+0 4'5O"0 lpv/nvironment, 4'HSH+ 4'SHA+H)'"BFO 4'+OC/SS\"BFO+,AH"OB - ]

lps%Command4ine, lpsa'rocess, lpsaH.read, f"n.eritDandles, fdwCreate, lps%Cur0ir, lpsiStart"nfo, lppi'roc"nfo

Atunci c2nd un fir de e3ecu!ie apelea% func!ia Create'rocess, sistemul creea% un spa!iu de adresare i ncarc noul proces n acest spa!iu. 0up aceast opera!ie, sistemul creea% t.readul primar pentru noul proces i-l lansea% n e3ecu!ie. FF

Aritoni Ovidiu S vedem semnifica!ia parametrilor func!iei Create'rocess$ lps%"mageBame

Sisteme de operare 1

'arametrul identific numele fi ierului e3ecuta(il n care este memorat codul pentru procesul ce se va crea. Create'rocess va cuta fi ierul mai nt2i n directorul curent, i apoi n directorele descrise de varia(ila de mediu 'AHD. 0ac acest parametru este B)44, func!ia va lua numele fi ierului din primul cuv2nt al liniei de comand specificat de parametrul lps%Command4ine. lps%Command4ine 'arametrul specific argumentele care tre(uie transmise ctre noul proces. 4a pornirea procesului, aceste argumente vor fi regsite n argumentul lps%Cmd4ine al func!iei Jin,Ain. laps%Command4ine punctea% ctre un ir de caractere A6*-. lpsa'rocess i lpsaH.read "dentific atri(utele de securitate care tre(uie date noului proces i t.readului su primar. 0ac valorile lor sunt B)44, sistemul va furni%a valori implicite pentru ace ti parametri. f"n.eritDandles Specific modul n care se mo tenesc referin!ele la o(iecte de ctre procesul fiu. ?n mod normal, n Jindows BH acestea nu sunt acelea i pentru fiecare proces. C.iar dac este vor(a de acela i o(iect sistem, procese diferite pot lucra cu valori diferite. 0ac dorim ca aceste valori s fie identice n procesul tat i n procesul fiu, atunci putem specifica valoarea H+)/ acestui program. fdwCreate Con!ine comutatorii *flags- ce afectea% modul n care este creat noul proces. Se pot specifica mai mul!i comutatori com(in2ndu-" prin operatorul KaN. lpv/nvironment +efer un (loc de memorie n care sunt memorate irurile, care descriu varia(ilele de mediu ce tre(uie utili%ate de noul proces. 0e o(icei, valoarea acestui paramteru trenuie s fie B)44, ca% n care procesul fiu prime te acelea i varia(ile de mediu ca i printele. lps%Cur0ir 199

Aritoni Ovidiu

Sisteme de operare 1

'arametrul permite specificarea unui nou disc i a unui nou director curent pentru procesul nou creat. 0ac valoarea transmis pentru acest parametru este B)44, directorul i discul de lucru ale noului proces sunt acelea i ca li cele ale procesului printe. lpsiStart"nfo 'unctea% ctre o structur SHA+H)'"BFO. Aceste informa!ii sunt necesare pentru su(sistemul Jin;# la crearea unui nou proces. Aceast structur este prea comple3 pentru a o descrie aici. S re!inem doar c n ea se pot specifica$ caracteristicile unei ferestre consol$ o culoare& o numr de linii& o coloane& o po%i!ie pe ecran& o titlu, etc.& informa!ii despre modul n care va fi afi at fereastra aplica!iei$ o ma3imi%at& o icon, etc.& informa!ii despre comportarea sistemului n timpul ncrcrii aplica!iei$ o forma cusorului, etc.

lppi'roc"nfo Con!ine adresa unei structuri care va fi completat cu informa!ii de ctre func!ia Create'roces nainte ca aceasta s- i termine e3ecu!ia. Aceast structur va con!ine referin!ele pentru noul proces, pentru t.readul su primar, precum i identificatorii acestora. Structura este declarat astfel$ t>pedef struct \'+OC/SS\"BFO+,AH"OB Y DAB04/ .'rocess& DAB04/ .H.read& 0JO+0 dw'rocess"d& 0JO+0 dwH.read"d& ] '+OC/SS\"BFO+,AH"OB&

Terminarea unui $roce 5indo3


191

Aritoni Ovidiu

Sisteme de operare 1

)n proces poate fi terminat pe dou ci$ apel2nd din interior func!ia /i3t'rocess sau apl2nd din e3terior func!ia Herminate'rocess. /ste prefera(il prima cale, cea de-a doua tre(uie folosit doar pentru situa!ii e3treme. 'rototipul func!iei <.i!Proce este$

5O"0 /3it'rocess *)"BH fu/3itCode-& Func!ia termin procesul care a apelat-o i i setea% acestuia codul de retur pe valoarea fu/3itCode. Func!ia Herminate'rocess are urmtorul prototip$ :OO4 Herminate'rocess *DAB04/ .'rocess, )"BH fu/3itCode-& Cu aceast func!ie, un proces poate termina orice alt proces din sistem, inclusiv pe el nsu i. 'rocesul teminat este dat de referin!a .'rocess. Codul de retur a procesului terminat va fi setat pe valoarea parametrului fu/3itCode. Folosirea func!iei Herminate'rocess poate fi periculoas la o programare nengrijit. ?n mod normal, evenimentul de terminare a unui proces este semnalat de ctre Jindows BH tuturor 044-urilor ata ate de proces. 4a terminarea procesului, folosind func!ia Herminate'rocess, aceste 044-uri nu vor fi averti%ate, produc2ndu-se eventuale pierderi de date. Jindows BH garantea% totu i c toate resursele sistem utili%ate de proces vor fi eli(erate indiferent cum este terminat procesul. <.em$'u de creare $roce ub 5indo3

/3emplul care urmea% este similar celui din Programu' ".". Aplica!ia consol creea% un proces fiu, n care se va face re%umatul directorului curent, lans2nd n acest scop comanda sistem dir. ?nainte de a pre%enta programul 0irJindows.cpp, introducem rutina err\s>s, corespun%toare sursei ;.1, de data aceasta, n dou variante *Programu' ".).-. 4a fel ca su( 9ni., vom folosi una din cele dou func!ii err\s>s, n ca%ul unor diverse apeluri de func!ii 5indo3 , care e uea%. `include Sassert..R @@afisea%a te3tul si termina programul int err\s>s *c.ar [te3tY puts *te3t-& e3it *1-& 19#

Aritoni Ovidiu ] @@er\s>s Programu' ".). *ur e'e err= > .c$$

Sisteme de operare 1

*Su( unele implementri, rolul func!iei noastre err\s>s poate fi preluat de ctre un apel sistem numit perror.Programu' ".9. pre%int sursa 0irJindows.cpp. `include kstdaf3..k `define SH+"CH `include Swindows..R `include Sstdio..R `include Kerr\s>s.cppN int main * Y

SHA+H)'"BFO si O Y si%eof *si- ]& '+OC/SS\"BFO+,AH"OB pi& :OO4 ( O Create'rocess *Kre%umat.(atN, B)44, B)44, B)44, FA4S/, 9, B)44, B)44 Tsi, Tpi-& if * ( - Y @@ Asteapta procesul sa-si inceapa e3ecutia *v. mai josSleep *1999-& @@ Am considerat necesar acest timp de asteptare pt. @@ a permite sistemului sa cree%e procesul inainte @@ de a testa terminarea lui if *Herminate'rocess *pi..'rocess, #- Y 0JO+0 dwH, dw'& Iet/3itCode'rocess *pi. .'rocess, Tdw'-& @@ o(tine codul de retur al t.read-ului principal Iet/3itCodeH.read *pi..H.read, TdwH-& if * dwH Z O # printf *KCod de retur incorect pentru procesN-& if * dwH Z O #printf *K+etur incorect pentru t.read principalN-& CloseDandle *pi. .'rocess-& CloseDandle *pi. .H.read-& 'rintf *Kin/3ecutie cu succesinN-& ] else err\s>s *Iet4ast/rror * - -& ] else 19;

Aritoni Ovidiu err\s>s *Keroare la lansare re%umat.(atinN-& return 9& ] Programu' ".9. *ur a ;ir5indo3 .c$$

Sisteme de operare 1

'reci%m c dac procesul creat i nc.eie e3ecu!ia nainte de apelul Herminate'rocess * -, acest apel returnea% /++O+\ACC/SS\0/B"/0. 4nsm pe seama cititorului s modifice acest e3emplu, scriind un program propriu care s fie lansat n cadrul procesului fiu.

Ane.a 2

Pi$e ub 5indo3 6T

?n 5indo3 6T, e3ist dou posi(ilit!i de a folosi pipe n -P%. O prim variant este pipe anonime, care se pot folosi numai pentru comunicarea ntre procese de pe aceea i ma in. A doua variant este pipe cu nume, folosite pentru comunicarea ntre procese ce operea% nu neaprat pe aceea i ma in BH. Pi$e anonim 5indo3 Be vom ocupa mai nt2i de pipe anonime, ca i mecanism "'C n programarea concurent su( Jindows BH. )n pipe anonim poate fi folosit, ca i pipe-ul de su( )ni3, pentru comunicarea ntre procese descendente din creatorul pipe-ului. ?n urma crerii, procesul creator poate trimite fiilor *nepo!ilor etc.- .andle-urile pipe-ului, n momentul crerii proceselor fii prin apeluri ale func!iei Create'roces * - *ve%i ;.1.;.;-. 'entru ca fiul s mo teneasc .andle-ul la pipe, printele tre(uie s sete%e parametrul f"n.eritDandle, din apelul Create'roces * -, la valoarea H+)/. )n pipe fr nume se creea% folosind apelul Create'ipe * -. 'ipe-ul se nc.ide cu ajutorul func!iei CloseDandle * -. Func!ia Create'ipe * - creea% un pipe fr nume i are urmtorul prototip$ :OO4 Create'ipe *'DAB04/ p.+ead, 'DAB04/ p.Jrite, 4'S/C)+"Hh\AH+":)H/S lpsa, 0JO+0 c('ipe Func!ia ntoarce H+)/ n ca% de succes sau FA4S/ la e ec. p.+ead i p.Jrite Sunt pointerii spre cele dou .andle-uri *de citire i de scriere- o(!inute n urma crerii. lpsa - 'arametrul are o du(l semnifica!ie$ determin dac .andle-ul la pipe, returnat de func!ie poate fi mo tenit n procesele fii, proprietate care are 19G

Aritoni Ovidiu

Sisteme de operare 1 loc pentru o valoare diferit de B)44. Acela i parametru repre%int un descriptor de securitate. 0ac se specfic pentru acest parametru valoarea B)44, sistemul va fi3a atri(utele de securitate implicite.

c('ipe

- Specific dimensiunea (uferului re%ervat pentru opera!iile de "@O prin pipe. 0ac aceast valoare este 9, atunci dimensiunea implicit a (uferului o sta(ile te sistemul de operare.

Scrierea i citirea din pipe-urile anonime se face folosind func!iile +eadFile * - i JriteFile * -. 'rototipurile acestora sunt date n ;.#.;.#. Opera!iile sunt atomice. O citire va opri procesul p2n c2nd va reu i s se e3ecute. ?n mod similar, o scriere va (loca procesul p2n c2nd va avea suficient spa!iu n pipe pentru efectua opera!ia de scriere dorit. At2t procesul creator, c2t i procesele fii care mo tenesc cele dou .andle-uri ale pipe-ului, le pot folosi ntre momentul primirii lor i momentul nc.iderii. Astfel, procesul creator poate ncepe imediat s foloseasc pipe prinapelurile +eadFile * - i JriteFile * -. 0up creare i primirea .andle-urilor, procesele fii pot s foloseasc la r2ndul lor func!iile +eadFile * - i JriteFile * - pentru a citi sau scrie din pipe. )rmtorul e3emplu, o nou solu!ie a pro(lemei propo%i!iilor *;.#.1.#.-, demonstrea% modul de folosire al pipe-urilor anonime ntre un proces printe i procesul su fiu. 'ipe-ul anonim i procesul fiu sunt astfel create nc2t fiul s mo teneasc de la printe .andle-ul de citire. 'rogramul 'ropo%itii'ipeScriitor.cpp cite te de la intrarea standard liniile de te3t i le depune n pipe. 'rogramul 'ropo%itii'ipeCititor.cpp prime te de la printe .andle-ul de citire din pipe, cite te din pipe i afi ea% propo%i!iile la ie irea lui standard. 'rocesul printe creea% un pipe anonim i un proces fiu, cruia i trimite, prin linia de coman, .andle-ul de citire din pipe. Apoi i depune n pipe succesiunea de linii citite de la intrarea lui standard. Programu' ".26 pre%int sursa acestuia, iar Programu' ".2# sursa 'ropo%itii'ipeCititor.cpp. ` include Swindows..R ` include Sstdio..R ` include Sstdli(..R ` include Smemor>..R ` include Kerr\s>s.cppN ` include Kscriitor"n'ipe.cN ` define ,/SSAI/\S"d/ 1999 int cdecl main *int argc, c.ar [[argv- Y 0JO+0 dwCod0e+eturn, dwOctetiCititi& int iFiu, iContor& S/C)+"Hh\AHH+":)H/S saAtri(ute$ SHA+H)'"BFO si"nfo& '+OC/SS\"BFO+,AH"OB piFiu& DAB04/ .'ipeCitire, .'ipesScriere& 19<

Aritoni Ovidiu

Sisteme de operare 1

@@ Configurarea atri(utelor de securitate @@ cu care pipe@ul va fi mostenit memset *TsAtri(ute, 93oo, si%eof *S/C)+"Hh\AHH+":)H/SsaAtri(ute.n4engt. O si%eof *S/C)+"Hh\AHH+":)H/S-& saAtri(ute.("n.eritDandle O H+)/&

-&

@@ Crearea unui pipe anonim if *Create'ie *T.'ipeCitire, @@ Dandle de citire din pipe T.'ipeScriere, @@ Dandle pentru scrierea in pipe TsaAtri(ute, @@ Atri(ute de securitate ,/SSAI/\S"d/ @@ 0imensiune (ufer pentru pipe - O O Falseerr\s>s *K/roare la creare pipeinN-& @@ Hrimite clientului .andle de pipe prin care sa poata citi @@ prin crearea corespun%atoare a liniei de comanda HCDA+ ws%4inia0eComanda ^ ,AP\'AHD _& sprintf * ws%4inia0eComanda, Kfiu bdN, .'ipeCitire-& @@ Creare proces fiu memset * Tsi"nfo, 9399, si%eof *SHA+H)'"BFO- -& si"nfo.c( O si%eof *SHA+H)'"BFO-& si"nfo.lpHitle O K'roces fiuN& if *Create'rocess *B)44, @@ 'ointer la nume modul e3ecuta(il ws%4inia0eComanda, @@ 4inia de comanda TsaAtri(ute, @@ Atri(. de securitate pt. proces TsaAtri(ute, @@ Atri(. de securitate pt. t.read H+)/, @@ mosteneste toate .andle-urile C+/AH/\B/J\COBSO4/, @@ Atri(. suplimentare B)44, @@ 5aria(ila de mediu B)44, @@ 0irectorul curent Tsi"nfo, @@ "nformatii start TpiFiu @@ Aici returnare informatii @@ despre procesul fiu - O O FA4S/err\s>s *K/roare la crearea procesului fiu inN-& scriitor"n'ipe *.'ipeScriere-& @@ Asteapta sa termine procesul fiu do Y if *Iet/3itCode'rocess *piFiu..'rocess, TdwCod0e+eturn- O O FA4S/err\s>s *K/roare la Iet/3itCode'rocessinN-& if *dwCod0e+eturn O O SH"44\ACH"5/197

Aritoni Ovidiu Sleep *1-& ] w.ile *dwCod0e+eturn O O SH"44\ACH"5/-& CloseDandle *.'ipeScriere-& +eturn *9-& ]

Sisteme de operare 1

Programu' ".26. *ur a Pro$ozi!iiPi$e*crii!or.c$$ `include Swindows..W `include Sstdio..W `include Sstdli(..W `include Smemor>..R `include Kcititor0in'ipe.cN int cdecl main *int argc, c.ar [[argv- Y DAB04/ .'ipeCitire& @@ o(tine un .andle de citire din pipe .'ipeCitire O *DAB04/- atol *argv ^1_-& @@ apelea%a rutina de citire din pipe cititor0in'ipe *.'ipeCitire-& CloseDandle *.'ipeCitire-& return *9-& ] Programu' ".2#. *ur a Pro$ozi!iiPi$e%i!i!or.c$$ 'ipe cu nume su( windows 'ipe cu nume este un mecanism de comunicare ntre dou sisteme diferite, am(ele fiind opera!ionale pe platforme din clasa ,icro o(!$ 5indo3 95, 9), 2+++, 6T, precum i platforme mai vec.i, ca 4*22, 6ove'', ;4* *numai client-. /ste un -P% bidireciona'? cu (aci'i!8i a$ro$ia!e de ce'e a'e comunic8rii $rin oc@e! A11B. ?n (igura ".1+ sunt pre%entate succesiunile apelurilor sistem, at2t pentru server, c2t i pentru client. Cititorul poate u or o(serva particulari%rile necesare pentru comunicarea prin pipe anonim. 1. #. ;. G. <. 7. CreateBamed'ipe ConnectBamed'ipe +eadFile JriteFile 0isconnectBamed'ipe CloseDandle CloseDandle

1. CreateFile #. +eadFile ;. JriteFile G.

19E

Aritoni Ovidiu

Sisteme de operare 1

*erver

'ipe cu nume

*erver

Figura ".1+. %omunicarea $rin $i$e cu nume ub 5indo3 Crearea unui pipe cu nume se face prin apelul sistem$ CreateBamed'ipe, cu prototipul$ DAB04/ CreateBamed'ipe * 4'SH+ nume'ipe, 0JO+0 optiuni,odOpen, 0JO+0 optiuni,od'ipe, 0JO+0 n,a3"nstances, 0JO+0 lung:ufOut, 0JO+0 lung:uf"n, 0JO+0 timeOut, 4'S/C)+"Hd\AHH+":)H/S lpsa unde$ nume'ipe /ste un string prin care se indic numele pipe-ului. Conven!iile ,icrosoft de specificare a acestor nume impun dou sinta3e, una pentru pipe local i alta pentru pipe de pe o alt ma in. Aceste specificri sunt$ ii.iP-P<inume'ipe'e,Asina iiadresa,asinaiP-P<inume'ipe'e,asina adresa ma inii este fie o specificare "nternet, fie o adres "' ^1_. A!enieC ?n constantele string de specificare a acestor nume, fiecare caracter i tre(uie du(lat, a a cum cer regulile de evitare specifice lim(ajului %. optiuni,odOpen Specific direc!ia de desc.idere a pipe-ului. 5aloarea lui poate fi una dintre constantele$ '"'/\ACC/SS\0)'4/P, '"'/\ACC/SS\"B:O)B0, '"'/\ACC/SS\O)H:O)B0, 198

Aritoni Ovidiu

Sisteme de operare 1

indic2nd fie am(ele sensuri, fie numai de la client la server, fie numai de la server spre client. optiuni,od'ipe 'reci%ea% caracteristicile acestui pipe. 'entru specificare, se folosesc constante sau com(ina!ii legate ntre ele prin operatorul KaN. '"'/\Hh'/:hH/, '"'/\Hh'/\,/SSAI/ pentru scrierea ca flu3 de octe!i, respectiv ca i mesaj& '"'/\+/A0,O0/\:hH/, '"'/\+/A0,O0/\,/SSAI/ pentru citirea dup regulile flu3ului de octe!i sau citirea ca i mesaj& '"'/\JA"H, '"'/\BOJA"H pentru comunicarea sincron, respectiv asincron. n,a3"nstances Specific numrul de clien!i care se vor conecta la acest pipe. 4a nevoie, se poate folosi constanta '"'/\)B4","H/0\"BSHABC/S. lung:ufOut i lung:uf"n Specific dimensiunile (ufferelor, pentru ie ire i intrare. Sistemul ia aceste numere doar ca sugestii, n func!ie de conte3t el put2nd s redimensione%e aceste (uffere. timeOut "ndic, n milisecunde, durata ma3im de a teptare. lpsa Specific atri(utele de securitate. 0e cele mai multe ori se specific B)44, ls2nd astfel pe seama sistemului fi3area acestora. Apelul sistem ntoarce un .andle, care va fi folosit ca i argument n celelalte apeluri sistem legate de pipe. 0up crearea unui pipe cu nume, serverul apelea%$ ConnectBamed'ipe *DAB04/ .Bamed'ipe& 4'O5/+4A''/0 lpoO 'rimul .andle este cel ntors de crearea pipe. Al doilea parametru, de regul B)44,

19F

Aritoni Ovidiu

Sisteme de operare 1

indic faptul c se a teapt la conectare p2n c2nd un client se conectea% efectiv la pipe. *A se compara aceast regul cu cea similar de la F"FO de su( 9ni.-. 4a fel ca i la pipe anonime, se folosesc apelurile +eadFile i JriteFile pentru sc.im(ul cu pipe. Serverul i nc.eie activitatea apel2nd$ 0isconnectBamed'ipe *DAB04/ .Bamed'ipe-& CloseDandle -DAB04/ .Bamed'ipe-& 'entru client, conectarea la un pipe cu nume presupune un apel sistem CreateFile 0escriem aici, prototipurile func!iilor de lucru cu fi iere su( 5indo3 . DAB04/ CreateFile * 4'CHSH+ numeFisier, 0JO+0 acces, 0JO+0 partajare, 4'S/C)+"Hh\AHH+":)H/S descr\sec, 0JO+0 mod\desc.id, 0JO+0 atri(uteFisier, DAB04/ fis\atri( -& unde$ numeFisier - /ste numele fi ierului care se va crea. acces - /ste modul de acces *n citire i@sau scriere-. partajare - /ste modul de partajare a fi ierului. mod\desc.id - /ste modul de creare a fi ierului. atri(uteFisier - Sunt atri(ute fi&ier. ?n ca%ul crerii unui pipe cu nume, numeFisier repre%int numele pipe-ului, cu sinta3a specificat mai sus, la apelul CreateBamed'ipe. DF"4/ OpenF"4/ * 4'CSH+ numeFisier, 4'OFSH+)CH lp:uf, )"BH uActiune -& unde$ numeFisier = /ste numele fi ierului care se va desc.ide. lp:uf - /ste pointer la o structur care re!ine informa!ii despre fi ier. uActiune - "ndic opera!ia care se va efectua asupra fi ierului. 119

Aritoni Ovidiu :OO4 JriteFile * DAB04/ .Fisier, 4'C5O"0 lp:uf, 0JO+0 nBrOcteti0eScris, 4'0JO+0 lpBumarOctetiScrisi, 4'O5/+4A''/0 lStruct"O -& unde$

Sisteme de operare 1

.Fisier - /ste .andle-ul fisierului n care se va sc3rie. lp:uf - /ste pointer la datele care se vor scrie n fi ier. nBrOcteti0eScris - /ste num de octe!i de scris. 1pBumarOctetiScrisi - /ste pointer la numrul de octe!i scri i efectiv. lpStruct"O - /ste de o(icei are valoarea B)44. :OO4 +edaFile * DAB04/ .Fisier, 4'C5O"0 lp:uf, 0JO+0 nBrOctetiCititi, 4'O5/+4A''/0 lpStruct"O -& unde$ .Fisier - /ste .andle-ul fi ierului din care se va citi. lp:uf - /ste pointer la un (ufer n care se vor citi datele. nBrOcteti0eScris - /ste numr de octe!i de citit. lpBumarOctetiCititi - /ste pointer la numrul de octe!i citi!i efectiv. lpStruct"O - /ste de o(icei are valoarea B)44. :OO4 CloseDandle *DAB04/ .O(ject-& unde$ .O(ject - /ste .andle-ul la un o(iect desc.is. 'entru mai multe informa!ii legate de prototipurile acestor func!ii, se recomand consultarea documenta!iei ,S0B ^8;_. 0rept e3emplu de utili%are a acestui pipe, vom da nc o solu!ie a pro(lemei propo%i!iilor. Considerm c at2t programul scriitor *n pipe-, c2t i programul care cite te din pipe se gsesc pe aceea i ma in. Spre deose(ire de pipe su( )ni3, n ca%ul Jindows creatorul resursei pipe tre(uie s fie activ, pentru ca eventualii scriitori sau cititori s poat comunica folosind pipe-ul respectiv. 0e aceea, vom include opera!ia de creare a pipe-ului n programul care scrie date n pipe. 'rogramul ;.#8 indic sursa scriitorului n pipe *care este i creatorul resursei pipe-, iar 'rogramul ;.#F indic sursa cititorului din pipe. 111

Aritoni Ovidiu

Sisteme de operare 1

`include Kscriitor"n'ipe.cN `include Swin(ase..R `include Nerr\s>s.cppN main * Y

Dandle .Bamed'ipe& @@ creea%a pipe@ul cu numele Vpropo%N .Bamed'ipe O CreateBamed'ipe *iiii.ii'"'/iipropo%, '"'/\ACC/SS\O)H:O)B0 a F"4/\F4AI\J+"H/\HD+O)ID, '"'/\Hh'/\:hH/ a '"'/\JA"H, ;, dim:uf"n, 0im:ufOut, H,O)H, B)44-& err\s>s *.Bamed'ipeZ O "B5A4"0\DAB04/\5A4)/-& @@ asteapta sa se conecte%e un client ConnectBamed'ipe *.Bamed'ipe, B)44-& @@ apelea%a rutina de scriere in pipe scriitor"n'ipe *.Bamed'ipe-& 0isconnectBamed'ipe *.Bamed'ipe-& CloseDandle *.Bamed'ipe-& ] Programu' ".2). *ur a Pro$ozi!iiFi(i*crii!or.c$$ `include `include `include `include Swindows..R Sstdio..R Ncititor0in'ipe.cN Nerr\s>s.cppN

main * - Y DAB04/ .Bamed'ipe& @@ desc.ide pipe@ul in citire .Bamed'ipe O CreateFile *[iiii.ii'"'/iipropo%N, I/B/+"C\+/A0, F"4/\SDA+/\+/A0, B)44, O'/B\/P"SH"BI, 9, B)44-& err\s>s *.Bamed'ipeZ O "B5A4"0\DAB04/\5A4)/-& @@ apelea%a rutina de citire din pipe cititor0in'ipe *.Bamed'ipe-& ClosedDandle *.Bamed'ipe-& ] 11#

Aritoni Ovidiu

Sisteme de operare 1

Programu' ".29. *ur a Pro$ozi!iiFi(o%i!i!or.c$$ "nvitm cititorul s construiasc programele corespun%toare surselor ;.##. *SemnaturaFifoScriitor.c- i ;.#; *SemanaturaFifoCititor.c-, n ca%ul mecanismului de comunicare pipe cu nume, su( 5indo3 .

A6<DA " %omunicarea En!re $roce e 5indo3 $rin memorie $ar!a1a!8


FiFiere -24 ma$a!e En memorie Fi zone $ar!a1a!e ,aparea *g%duirea- fi ierelor n memoria intern este o facilitate preluat de Jindows BH de la sistemul de operare 0OS. Aceast mapare permite aplica!iilor s accese%e pr!i ale fi ierului mapat folosin pointeri din memoria intern, n loc de accesare a discului. 'rin aceasta se o(!ine o vite% de acces mult mai mare. 'rintre alte avantaje ale maprii, mai amintim faptul c se (eneficia% de mecanismul de cac.e-ing i de paginare a memoriei interne, oferit de Jindows BH. O aplica!ie poate mapa fi iere de la 1 octet p2n la #I octe!i. Fi ierele mapate n memorie permit, de asemnea, ca dou sau mai multe procesoare s partaje%e aceste fi iere i implicit s partaje%e memoria intern. ?n continuare, pre%entm o succesiune de < *cinci- pa i ce tre(uie urma!i de orice aplica!ie Jindows care folose te o %on de memorie partajat$ 1. Crearea segmentului de memorie partajat CreateFile,apping. Aceast opera!ie se poate reali%a dou moduri$ a.(.folosind func!ia

folosind un fi ier definit anterior de ctre utili%ator, cu ajutorul apelurilor CreateFile sau OpenFile. Folosind o pagin sistem, specificat cu ajutorul unui .andler predefinit, cu valoarea 93FFFFFFFF.

0ac segmentul de memorie partajat e3ist deja, desc.iderea accesului la segment se o(!ine cu ajutorul func!iei OpenFile,apping. O(iectul Jindows, asociat segmentului de memorie partajat, poart numele de file-mapping. At2t func!ia CreateFile,apping, c2t i func!ia OpenFile,apping ntorc un .andle la o(iectul file-mapping asociat segmentului de memorie partajat referit. #. ,aparea propriu->is a segmentului de memorie partajat *repre%entat prin o(iectul file-mapping-, n spa!iul de memorie al procesului curent, este reali%at cu ajutorul apelului ,ap5iewOfFile. Aceast func!ie ntoarce un pointer la o por!iune din aceast memorie partajat. 11;

Aritoni Ovidiu

Sisteme de operare 1

;. 'ointerul o(!inut n urma apelului precedent, permite aplica!iei apelante s accese%e %ona de memorie partajat n citire i@sau scriere, n func!ie de parametrii specifica!i la apel. G. Opera!ia complementar celei de mapare, se reali%ea% cu ajutorul apelului )nmap5iewOfFile. Astfel, se reali%ea% Ndeta areaN aplica!iei curente de la segmentul de memorie partajat, prin eli(erarea spa!iului de memorie ocupat prin opera!ia de mapare. <. ?n final, nc.iderea .andle-ului la o(iectul file-mapping se reali%ea% cu func!ia CloseDandle. 0e asemenea, folosind CloseDandle, se nc.ide fi ierul desc.is cu CreateFile sau OpenFile. Crearea@desc.iderea n varianta 1.(, cu .andle-ul special 93FFFFFFFF permite folosirea unei singure %one partajate n sistem. Folosind numai acest .andle, B) este posi(il ca pe acela i sistem s e3iste mai multe %one de memorie partajat. 'entru a permite ca fiecare grup de procese s- i foloseasc propria %on de memorie partajat, tre(uie s se foloseasc crearea@desc.iderea n varianta 1.a, CreateFile@OpenFile. Astfel, se creea%@desc.ide c2te un fi ier mapat n memorie pentru fiecare %on de memorie partajat dorit. ?n continuare, punctm o compara!ie, la nivel A'", ntre opera!iile de lucru cu memorie partajat su( )ni3 i su( Jindows$ CreateFile,apping - -R s.mget ,ap5iewOfFile - -R s.mat )nmap5iewOfFile - -R s.mdt CloseDandle - -R s.mctl Sinta3a e3act a func!iilor implicate n utili%area segementelor de memorie partajat su( Jindows, va fi descris mai jos. 'rototipurile func!iilor CreateFile, +eadFile i JriteFile au fost pre%entate n ;.#.;.#. 'rototipurile celorlalte func!ii folosite sunt descrise n continuare$ DAB04/ CreateFile,apping * DAB04/ .Fis, 4'S/C)+"Hh\AHH+":)H/S descr\sec, 0JO+0 prot, 0JO+0 ma3Dig., 0JO+0 ma34ow, 4'CHSH+ nume\file\mapping -& unde$ - /ste .andle la fi ierul de mapat& valoarea 93FFFFFFFF pentru acest parametru indic o pagin implicit sistem. descr\sec - /ste descriptor de securitate& dac se specific valoarea B)44 pentru 11G .Fis

Aritoni Ovidiu

Sisteme de operare 1

acest parametru, sistemul va folosi atri(utele de securitate implicite. prot - /ste atri(utul de protec!ie pentru o(iectul de mapat. ma3Dig. i ma34ow - Compun dimensiunea pe ;# de (i!i a o(iectului de mapat. nume\file\mapping - /ste numele o(iectului file mapping DAB04/ OpenFile,apping * 0JO+0 acces, :OO4 (Dandle,ostenire, 4'CHSH+ nume\file\mapping -& unde$ acces - "ndic modul de acces *citire i@sau scriere-. (Dandle,ostenire - "ndic dac o(iectul file-mapping va fi mo tenit de eventuale procese fii. nume\file\mapping - /ste numele o(iectului file-mapping. 4'5O"0 ,ap5iewOfFile * DAB04/ .File,ap, 0JO+0 acces, 0JO+0 offsetDig., 0JO+0 offset4ow, 0JO+0 nrOcteti0e,apat -& unde$ .File,ap = /ste .andle la o(iectul file-mapping *.andle returnat de CreateFile,apping-. acces = "ndic modul de acces *citire i@sau scriere-. offsetDig. i offset4ow - Compun offsetul pe ;# de (i!i, a %onei de memorie de mapat. nrOcteti0e,apat = /ste numrul de octe!i de mapat. :OO4 )nmap5iewOfFile *4'C5O"0 lpAdresa,apata-& unde$ lpAdresa,apata = /ste adresa de memorie unde ncepe maparea 'entru mai multe informa!ii legate de semnifica!ia parametrilor i prototipurilor func!iilor ce operea% cu memorie partajat su( Jindows, se recomand consultarea documenta!iei ,S0B. -m$'emen!area (oii de ca'cu' ub 5indo3 11<

Aritoni Ovidiu

Sisteme de operare 1

Aplica!ia de mai jos implementea% calculul ta(elar pentru pro(lema definit n ;.;.1. Programu' "."5 este fi ierul .eader al aplica!iei, similar Programu'ui "."1. `include Sassert..R `include Sct>pe..R `include Sstdio..R `include Stime..R `include Swinsoc1#..R `include Swindows..R `include KsemnaturaHemporala.cppN `define S,AP 1999 struct foaie\de\calcul Y c.ar s^G_ ^199_& int v^G_& ]& `define 4)BF",/ si>eof *struct foaie\de\calcul`define B),/\S/I,/BH\,/,O+"/\'A+HA6AHA K,emoria,ea'artajataN Programu' "."5. FiFieru' 0eader memPar!Foaie5in.0 Fi ierul .eader define te foaia de calcul, lungimea acesteia i define te numele segmentului de memorie partajat. 4a fel ca n ca%ul comunicrii folosind pipe, i mecanismul de comunicare folosind memorie partajat, su( Jindows, presupune c creatorul o(iectului file-mapping este activ, c2t timp scriitorii i cititorii partajea% resursa respectiv. 0e aceea, vom include opera!ia de creare a o(iectului file-mapping n programul care accesea% o(iectul file-mapping n scriere. Sursele programele scriitor i cititor sunt pre%entate n 'rogramul ;.;7, respectiv ;.;E. `include Kmem'artFoaieJin..N @@ 9 `define B+\"H/+ 199 int main * - Y int it, s.md, i, 3,& struct foaie\de\calcul [mp& c.ar s ^S,AP_& DAB04/ .andle,emorie'artajata& @@ creea%a o(iectul file-mapping .andle,emorie'artajata O CreateFile,apping * *DAB04/- 9PFFFFFFFF, B)44, 'AI/\+/A0J+"H/, 9, 117

Aritoni Ovidiu

Sisteme de operare 1 si%eof *struct foaie\de\calcul-, B),/\S/I,/BH\,/,O+"/\'A+HA6AHA-&

assert *.andle,emorie'artajataZ O B)44-& mp O *struct foaie\de\clacul [-,ap5iewOfFile * .andle,emorie'artajata, F"4/\,A'\J+"H/, 9, 9, 199-& assert *mpZ O B)44-& @@ 1 for *it O 9& itSB+\"H/+& Sleep *1999[*rand* - b #- -, it U U Y i O rand * - b ; & 3 O 1 U rand * - b FF& strcp> *s, semanaturaHemporala * - -& @@ # strcp> *mp - Rs ^i_, s-& mp -R v ^;_ O mp -R v ^;_ - mp -Rv ^i_ U 3& mp -R v ^i_ O 3& strcp> *mp -R s^;_, s-& @@; ] )nmap5iewOfFile *mp-& CloseDandle *.andle,emorie'artajat-& @@G ] Programu' "."6. *ur a memPar!*crii!orFoaie.c$$ `include Kmem'artFoaieJin..N `define B+\"H/+ <9 int main * - Y int it, s.md, i, 3, j& struct foaie\de\calcul [mp, [copie& c.ar s ^S,AP_& DAB04/ .andle,emorie'artajata& @@ desc.ide un o(iect file-mapping .andle,emorie'artajata O OpenFile,apping * F"4/\,A'\+/A0, 9, B),/\S/I,/BH\,/,O+"/\'A+HA6AHA-& assert *.andler,emorie'artajataZ O B)44-& mp O *struct foaie\de\calcul [,ap5iewOfFile *.andle,emorie'artajata, F"4/\,A'\+/A0, 9, 9, 9-& 11E

Aritoni Ovidiu assert *mpZ O B)44-&

Sisteme de operare 1

copie O *struct foaie\de\calcul [ - malloc *si%eof *struct foaie\de\calcul - -& for *it O 9& itSB+\"H/+& Sleep *1999 [ *rand * - b # - -, it UU- Y for *jO9&jSG& jUU- Y copie -R v^j_ O mp -R v ^j_& strcp> *copie- -R s ^j_, mp -R s^j_ -& ] strcp> *s, semanaturaHemporala * - -& 3 O copie -R v ^;_ = copie -R v ^9_ = copie -R v^1_ = copie -R v^#_& i O o& if *strcmp *copie -R s^;_, copie -R s^9_ - TT strcmp *copie -R s ^;_, copie -R s^1_- TT strcmp *copie -R s^;_, copie -R s ^#_- i O 1& printf *Kcitire$ bsN, s-& if *i- printf *KitSemnatura total eronataZN-& if *3- printf *Kibd este diferenta la totalZN, 3-& printf *KinN-& for *iOo& iSG& iUUprintf *KbsitbdinN, copie -R s ^i_, copie -R v ^i_ -& printf *KinN-& ] )nmap5iewOfFile *mp-& CloseDandle *.andle,emorie'artajata-& ] Programu' "."#. *ur a memPar!%i!i!orFoaie.c$$

118

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