Sisteme de operare: Quo Vadis?

În lumea sistemelor de operare linistea este aparentă. Internet-ul este doar unul dintre elementele turbulente.

Mihai Nelu

Sistemele de operare sunt probabil una dintre cele mai complexe abstractiuni inventate, proiectate si construite de fiinta umană. Există multe încercări de definire a acestui concept foarte sofisticat în aparentă, dar simplu în esentă. Sistemele de operare sunt masini virtuale construite cu ajutorul limbajelor de programare (de asamblare sau de nivel înalt) care permit utilizatorului să controleze, programeze si să extindă posibilitătile masinii hardware pe care sunt implementate.

Un exemplu, devenit clasic, este sistemul de operare Unix, care initial a fost conceput ca un gestionar de fisiere (file manager). Grosso modo, sistemul de operare este un gestionar de resurse (resource manager). Cu timpul conceptul a evoluat, în sensul că sistemele de operare au fost extinse să controleze resurse din ce în ce mai complicate si din afara cadrului restrâns al unei singure masini hardware: sisteme multiprocesor, sisteme distribuite, sisteme de retele de calculatoare, sisteme de operare globale. Oricine cunoaste că, în general, aceste sisteme de operare sunt implementate pe calculatoare de tip mainframe sau desktop, dar mai putini stiu că ele sunt prezente în masini electrocasnice, automobile (ultimele tipuri contin în configuratie o adevărată retea locala de 4-16 unităti centrale), sisteme de telecomunicatii, avioane, navete spatiale, televizoare, echipamente de retea (routere, gateways, PBX, set-up boxes), centrale electrice, etc., si în general oriunde fiinta umană a avut nevoie de ajutorul calculatorului pentru a cunoaste si controla lumea înconjurătoare. În realitate multimea sistemelor de operare nu este limitată la MS DOS, VMS, UNIX sau mai recentul Windows 95/NT, ci este o lume variată, colorată, cu multe accente exotice.

În acest articol vom încerca să abordăm această lume fascinantă nu numai prin prisma "personajelor cunoscute" ci mai ales prin prisma acelora, care, desi mai putin cunoscute de publicul larg, de multe ori au însemnat mai mult pentru evolutia calculatoarelor decât "primadonele" cu care ne-am obisnuit, mai ales datorita contributiei câtorva companii ca Apple, Microsoft, DEC, IBM sau mai recent SUN.

Considerând că structura generală a unui sistem de operare nu mai prezintă nici un secret pentru cititorii acestei reviste, deci notiuni că procese, thread-uri, kernel, subsistem de intrare/iesire, drivere de periferice au intrat în vocabularul activ, articolul îsi propune să abordeze câteva dintre subiectele mai interesante la ordinea zilei în proiectarea si implementarea sistemelor de operare moderne.

Microkernel sau kernel monolitic?

Modalitatea clasică de a proiecta nucleul unui sistem de operare (kernel) constă în a include în structura lui orice componenta care, în cazul în care ar fi utilizată în mod defectuos de utilizator, ar putea produce căderea software-ului de sistem. Un astfel de kernel se numeste monolitic. Pe la mijlocul anilor '80 a apărut un nou concept în proiectarea nucleelor sistemelor de operare, numit "microkernel".

Semnificatia de bază a notiunii de "microkernel" constă în a construi cât mai mult din functionalitate în procese si nu în kernelul propriu-zis; sisteme de operare diferite rezolvă această problemă în moduri specifice. De exemplu, Mach (vezi mai departe) lasă driverele de periferice în kernel si plasează serviciile de nivel superior (sistemul de fisiere, etc), în afara kernelului; altele că de exemplu QNX mută driverele de periferice în afara kernelului. Adevărul este că distinctia dintre notiunea de microkernel si cea de kernel monolitic devine din ce în ce mai neclară pe măsura ce cele două concepte evoluează. De exemplu, cele mai multe kernele monolitice moderne implementează acum multithreading si paralelism în executie. Din punct de vedere arhitectural aceasta modalitate devine similară cu situatia în care procesele de kernel rulează toate din memoria partajata de utilizatori.

Să considerăm trei exemple consacrate:

Mach, despre care multi se plâng că este atât de mare încât nu se pune problema să fie un microkernel. În realitate, notiunea de microkernel este mai mult definită de functionalitate decât de mărime. Pe de alta parte, mărimea exagerată a lui Mach se datorează mai mult faptului că o mare parte a lui este generată automat prin generatoare de stub-uri optimizate insuficient si de faptul că driverele de periferice sunt incluse în kernel. Neîndoielnic, Mach este un microkernel.

Serviciul de marketing al lui Microsoft pretinde că Windows NT are o structură de microkernel. O analiză mai atentă a kernelului arată că, desi componentele lui sunt separate si comunică prin "message passing", de fapt managerii de subsisteme (de procese, de comunicatie, de periferice, de fisiere, etc.) sunt implementati în spatiul kernel. Cu toate acestea, interfata de programare Win32 este implementată în spatiul utilizator. De fapt, însusi David Cutler (directorul proiectului) recunoaste în unele ocazii că Windows NT este un fel de hibrid între conceptele de kernel monolitic si microkernel. Si pentru că suntem la Windows NT, trebuie să recunoastem că după aproape un deceniu de suprematie în industria de software, în sfârsit Microsoft a reusit să producă un sistem de operare care să înlocuiască MS-DOS (care, spun unii, poate fi numit oricum, numai sistem de operare nu). Mai că as fi gata să adresez felicitări, dacă Microsoft nu ar fi scos la iveală (exclusiv din ratiuni comerciale) un alt caz nefericit: Windows 95. Lăsând la o parte gluma, Windows NT este un sistem de operare solid, superior tuturor versiunilor existente de Unix si care în 2-3 ani va constitui o altă sursă de miliarde pentru gigantul din Redmond, Washington.

QNX este un exemplu necontestat de microkernel comercial. Având în principiu 11 functii de sistem, fiind extrem de compact (10-15k), suportând procesare distribuită si de timp real, QNX reprezintă o fericită exceptie, fiind totodată un succes tehnic si unul comercial. Acest microkernel este folosit ca material de studiu în multe universităti americane.

Dezbaterea "microkernel" contra "kernel monolitic" trebuie abordată exclusiv din punct de vedere arhitectural. În acelasi mod în care un procesor RISC nu minimizează în mod necesar numărul de instructiuni, ci mai mult face un compromis între ceea ce este implementat în setul de instructiuni si ceea ce este implementat în alte modalităti, problema esentială a arhitecturii de microkernel este care servicii sunt implementate în interiorul lui si care în exteriorul lui.

Distribuit, multiprocesor, retea

Dacă articolul ar fi fost scris acum 2 ani, acest paragraf ar fi fost coloana vertebrală a lui. Însă în 1996 realitatea este total schimbată. Aceasta nu înseamnă că subiectul a fost epuizat; nici pe departe. Există o largă paletă de articole si cărti care atacă acest subiect. Există de asemenea numeroase implementări (în cercetare si comerciale) dintre care ar trebui să mentionăm:

Din această enumerare am omis numeroase altele, dar cele mentionate reprezintă toate adevărate "bijuterii" în domeniu.

Din punct de vedere al structurii hardware, sistemele care cuprind mai multe procesoare pot fi: "puternic" cuplate sau "slab" cuplate. Cele "puternic" cuplate sunt conectate la nivel de memorie, cele "slab" cuplate sunt conectate la nivel de retea de calculatoare. Primele se mai numesc "multiprocesoare", ultimele se mai numsc "multicalculatoare". O altă clasificare poate fi făcută după valoarea timpului de acces la memorie:

Din punct vedere al structurii software sistemele de operare pot fi de asemenea "puternic" sau "slab" cuplate. Un sistem "slab cuplat" permite masinilor unui sistem distribuit să fie fundamental independente, dar interactionând într-un anumit grad. Un sistem "puternic cuplat" software este un sistem distribuit în care utilizatorul vede toate procesoarele ca un singur procesor virtual si în fapt structura hardware este total ascunsă de structura software. Odată înarmati cu aceste notiuni putem să definim intuitiv cuvintele din titlul acestui paragraf.

Un sistem de operare de retea este implementat prin software "slab cuplat" ce rulează pe hardware "slab cuplat".

Un sistem de operare distribuit este caracterizat prin software "puternic cuplat" implementat pe hardware "slab cuplat".

Un sistem de operare multiprocesor înseamnă software "puternic cuplat" executat pe un hardware "puternic cuplat".

Sperând că aceste clasificări au reusit întrucâtva să fixeze notiunile, ne vom opri aici cu acest subiect făcând însă observatia că sistemul de operare comercial care va domina industria de software va trebui să includă toate cele 3 caracteristici. Windows NT are bune sanse să ajungă în aceasta pozitie în câtiva ani.

Timp real

Pentru o lungă perioadă de timp sistemele de operare de timp real au fost utilizate în principal în aplicatii specializate care necesită constrângeri din punctul de vedere al vitezei de răspuns si a predictibilitătii. Dezvoltarea exceptională a retelelor de calculatoare, a Internetului si necesitatea tot mai stringentă de a suporta aplicatii de timp real (în special multimedia) pe calculatoare de tip desktop vor impune aparitia de sisteme de operare de timp real în asa numita lume "Wintel" (sistem de operare Windows pe microprocesoare Intel). Proiectarea sistemelor de operare de timp real este mult mai complicată decât proiectarea sistemelor de operare clasice datorită numeroaselor conditionări ce trebuie rezolvate at runtime si care impun schimbarea în mod dinamic a comportării unui element de executie (proces, task, thread). Prin definitie, toate aplicatiile de tip Internet includ aspecte de timp real. Pentru cei neinitiati în acest domeniu să mentionăm câteva dintre sistemele de operare de timp real comerciale mai cunoscute: QNX, VxWorks, pSOS, Vrtx, OS/9, Lynx. Majoritatea acestor sisteme de operare sunt extrem de portabile, fiind implementate pe numeroase procesoare.

O definitie simplistă a software-ului de timp real ar fi: acel software care trebuie să opereze în cadrul unor constrângeri specifice de timp.

Din punct de vedere al comportării în timp, aplicatiile de timp real se împart în 3 mari categorii:

Bineînteles că aplicatii care combină caracteristicile celor trei categorii sunt extrem de abundente.

Din punctul de vedere al importantei interpretării unui eveniment înainte de timpul limită si al consecintelor rezultate din neinterpretarea în timp util al unui eveniment, sistemele de operare pot fi de tip:

Un sistem de operare de timp real permite implementarea de aplicatii cu comportare predictibilă si controlabilă. De exemplu, lucrând cu Windows 95/NT as dori ca în timp ce sunt conectat la Internet si urmăresc la prima conferinta mondiala Java pe Scott McNealy (CEO-ul companiei Sun) făcând o entuziastă pledoarie pentru Java - care va cuceri lumea -, dacă programul ScanDisk n-are altceva de făcut decât să-si aducă aminte că trebuie să controleze discul de sistem în acel moment, să pot să urmăresc transmisia în bune conditii, si nu să-l aud pe Scott bâlbâindu-se si făcând pauze de 10-20 de secunde între cuvinte. Un sistem de operare în timp real îmi garantează executia "cvasi paralelă" a celor două activităti mentionate mai sus alocând fiecăruia un corect buget de timp la momente corecte de timp.

Aplicatia de mai sus ne conduce si mai departe la necesitatea unor protocoale de retea care să suporte activităti de timp real prin controlabilitatea traficului si rezervarea timpului de retea. Un astfel de protocol este RTP, implementat deasupra protocolului UDP din familia de protocoale TCP/IP. RTP a fost proiectat special pentru a permite implementarea de aplicatii Internet de tip multimedia.

Cea mai complicata parte a unui sistem de operare de timp real este dispecerul de procese. Exista 2 categorii de astfel dispecere:

Scopul acestui articol nu ne permite să intrăm în mai multe amănunte, dar este de ajuns să mentionăm că Solaris si Windows 95/NT contin rudimente de suport pentru aplicatii de timp real la nivelul kernelului. Putini programatori le folosesc si pe bună dreptate, pentru că sunt asa de primitiv implementate încât probabilitatea de a bloca sistemul este foarte aproape de 1.

Sisteme de operare si retele de calculatoare de tip gigabit

Nu de mult, Sun Microsystems a lansat un nou logo care afirmă: "The Computer is the Network". Desi aceasta este doar o strategie de marketing care are menirea să suporte si să promoveze Java ca limbaj de retea, semnificatia ei este cu mult mai profundă. Mutatii esentiale au loc în arhitectura si performantele sistemelor de calcul ("computing"), în comunicatia de date ("data communications") în telecomunicatii. Sistemele de calcul sunt în pragul atingerii cifrei de 1 BIPS ca viteză de procesare, tehnologii că RAID (Redundant Arrays of Inexpensive Disks) creează posibilitatea de a grupa un mare număr de mici si ieftine discuri hard în structuri vectoriale, cu ajutorul cărora cantităti enorme de date pot fi citite în paralel, la viteze impresionante; subsistemele grafice comerciale sunt capabile să afiseze gigabiti de date pe secundă (un banal display cu rezolutie de 1024x1024x32 actualizând memoria de display de 30 de ori pe secundă transferă de fapt aproximativ 1 gigabit de date pe secundă); tehnologii de retea că HIPPI si ATM/ SONET sunt capabile să schimbe date între 2 calculatoare la rate de ordinul un gigabit. Problema de principiu care se pune este: sunt sistemele de operare actuale capabile să controleze si să gestioneze în mod eficient resurse hardware din clasa celor mai de sus? Dacă răspunsul este nu, care sunt modificările de arhitectură sau noile tehnologii care trebuie asimilate pentru a fi siguri că sistemele de operare vor face fată acestor noi necesităti? Sunt cele 2 sisteme de operare comerciale (bătrânul UNIX si mai tânărul Windows NT) care controlează industria de software în acest moment la nivelul cerintelor? Răspunsul este categoric nu. Unix este la apusul carierei si oricât se vor strădui companii ca Sun Microsystems, Silicon Graphics, Hewlett-Packard sau altele să-l mentină viabil din punct de vedere comercial, eforturile lor sunt sortite probabil esecului. De fapt, soarta comercială a Unix-ului se datorează faptului că nici una (dar absolut nici una) dintre companiile care l-au adoptat n-au făcut altceva decât să-l sustină fără să-l ajute să evolueze din punct de vedere arhitectural. Este greu să te pozitionezi corect pentru a ataca mileniul 2 cu tehnologii din anii 1970-1975. Succesul Unix-ului se bazează în mare măsură pe eforturile a două colective strălucite de cercetători: Bell Labs (AT&T) si universitatea din Berkeley (California). În mod surprinzător, Windows NT pare a avea mai multe sanse (dacă evoluează în mod corect) să facă o figură frumoasă în actualul deceniu. David Cutler & company au reusit să creeze un elegant prototip al modului în care ar trebui să arate un sistem de operare (comercial) în anii 1990, încorporând tehnologii moderne puse la punct în universităti si industrie si preluând ideile mai interesante din arhitectura sistemelor de operare existente. Windows NT suportă mai multe procesoare, procesare multithreading, procesare orientata pe obiecte, procesare de retea, aplicatii de tip multimedia si este extrem de portabil (mai portabil decât Unix). Să încercăm să analizăm care ar fi problemele pe care sistemele de operare ar trebui să le rezolve în viitorul apropiat.

O cerintă esentială este minimizarea costurilor transferului de date între interfetele de retea, sistemul de operare local si aplicatiile de retea. O mare parte a problemei se datorează faptului că vitezele de acces la memorie nu au tinut pasul cu îmbunătătirea performantelor procesoarelor. Procesoarele mai moderne, ca Alpha si Pentium, încearcă să rezolve aceste probleme utilizând arhitecturi "superscalare", care permit ca instructiuni multiple să fie executate în aceeasi perioadă de ceas (în acest mod, dacă o instructiune este încărcată din memorie si următoarea instructiune executată nu foloseste ca intrare o iesire a anterioarei, cele două instructiuni se execută în paralel), sau arhitecturi de tip "scoreboarding" în care instructiunile care încarcă date în registrele procesorului nu asteaptă ca acestea să fie livrate, ci marchează registrele ca fiind în stare de asteptare, în timp ce procesorul execută următoarele instructiuni.

O altă cerintă ar fi ca datele să fie copiate numai o singură dată în drumul lor dintre interfata de retea si aplicatie. Sistemele de operare din ziua de astăzi execută copii multiple ale datelor: un exemplu clasic este asa numitul algoritm "mbufs" din 4BSD UNIX. De asemenea, faimosul concept de "arhitectura ierarhizata", atât de utilizat în proiectarea sistemelor de operare, are ca rezultat copierea excesivă si inutilă a datelor. Din fericire, aceste deficiente pot fi corectate printr-o arhitectură adecvată si utilizarea unor combinatii de tehnici, ca I/E programată (programmed I/O), în care memoria interfetelor de retea este de fapt o parte din memoria procesorului principal, sau acces direct la memorie (DMA) asociat cu algoritmul copiază-numai-la-scriere (copy-on-write).

Noile sisteme de operare trebuie de asemenea să minimizeze numărul de comutări de context al unitătilor de executie (context switch) necesare la primirea si receptia datelor din retea. În mod normal, o singură comutarea de context este suficientă. Minimizarea comutărilor de context este de importantă strategică mai ales din cauza conexiunii indirecte cu managerul de memorie care trebuie să actualizeze memoria cache (pentru a mentine coerenta datelor) de fiecare dată când o nouă unitate de executie (task, proces, thread, etc.) preia controlul procesorului. De asemenea, este necesară utilizarea mai judicioasă a sistemului de întreruperi al procesorului. De exemplu, la receptia datelor, dacă memoria de retea este organizata FIFO (First-In-First-Out), sistemul de operare poate procesa buffere multiple la fiecare întrerupere. La transmiterea datelor se poate salva o întrerupere.

O alta optimizare provine din utilizarea optimă de către sistemul de operare a memoriei cu arhitectura ierarhizată, în care memoria cache joacă un rol strategic. Algoritmii actuali folositi în controlul memoriei cache sunt primitivi si trebuie perfectionati în sensul cresterii eficacitătii si a optimizării metodelor de păstrare a consistentei cu memoria principală.

Un subiect interesant, în legătură cu cresterea performantelor protocoalelor software de retea, este legat de folosirea sistemelor de operare multiprocesor pe servere de mare performantă. În mod paradoxal, numeroase studii arată că sistemele multiprocesor au o influentă minimă în micsorarea timpului de răspuns al serverului la o tranzactie de tip client-server în cazul TCP/IP. De ce ? Răspunsul este foarte simplu: sistemele de operare multiprocesor sunt încă în fază de început (nimeni nu stie în acest moment cum să rezolve în mod eficient comunicatia între procesoare în sisteme cu mai mult 16-32 procesoare) iar protocoalele de retea, ca TCP/IP, sunt în general secventiale. Întrucât după ani de studii s-a ajuns la concluzia că procesarea unui pachet de date pe mai multe procesoare nu pare a avea sens, cercetările în acest moment se îndreaptă către ideea de a procesa pachete diferite de date pe procesoare diferite. Sistemul de operare, care a introdus cele mai multe inovatii în acest domeniu este Mach, dezvoltat la universitatea Carnegie Melon si îmbunătătit în special la universitatea din Utah.

O altă piatră de încercare în abordarea proiectării sistemelor de operare capabile să lucreze optim cu retelele de calculatoare ale viitorului este posibilitatea de a suporta aplicatii de timp real care necesită un trafic intens de retea. Vom încerca să abordăm această problemă într-un alt paragraf.

Internet

Între "corolarele" fenomenului Internet probabil că cele mai interesante se numesc Java si Inferno/Limbo. Primul a apărut din pură întâmplare la SUN, unde un grup de ingineri lucrând la un set-up box ce se dovedise un total fiasco au realizat că limbajul pus la punct de ei , în fapt un subset al lui C++ (si denumit cu mândrie primul limbaj de "runtime"), poate avea aplicatii interesante într-o lume în care navigatoarele si protocoalele de retea guvernează. Al doilea, a fost pus la punct la Bell Labs de o echipă care include pe 2 dintre creatorii Unix-ului si ai limbajului C, dar în care vioara principală au fost câtiva cercetători ce anterior lucraseră la sistemul de operare denumit Plan9.

Să încercăm să caracterizăm pe scurt pe fiecare.

Java este un limbaj orientat pe obiecte, dar păstrând simplitatea drept calitate primordială. Pentru că Java este un limbaj interpretat, ciclul clasic (compilează - editează legăturile - testează - depanează - rulează) poate fi transformat în ciclul, extrem de simplu, compilează-rulează. Java asigură portabilitatea între diferite arhitecturi: din momentul în care un program a fost rulat prima data el va rula fără nici o modificare pe orice sistem de operare sau platformă hardware. Managerul de memorie, având o proiectare specifică si incluzând "garbage collection", asigură aplicatiilor o robustete deosebită. Java suportă programarea multithreading ca o facilitate de limbaj, si nu ca o facilitate de sistem de operare. Java permite crearea de aplicatii adaptabile care pot fi încărcate sub formă de module-cod de oriunde din retea si deci este un excelent candidat pentru implementarea de aplicatii distribuite sau de tip client-server.

În sfârsit, Java permite rularea aplicatiilor în conditii acceptabile de securitate.

Principiul pe care functionează Java este foarte simplu. Programul sursă este compilat în Java cod obiect (Java byte code) care reprezintă de fapt o masină hardware virtuală (un fel de procesor virtual). Prin intermediul Internetului programele în cod obiect sunt transportate la diferite noduri-gazdă (hosts) unde sunt executate (interpretate sau translatate) de către masina virtuală Java. Aceasta se poate face independent, dacă calculatorul dispune de sistemul de dezvoltare Java, sau prin intermediul unui browser, dacă acesta încorporează Java (Java enabled).

Ca întotdeauna când un nou limbaj de succes apare pe scenă, majoritatea programatorilor sunt înclinati să-i absolutizeze calitătile. Să încercăm să punctăm câteva conceptii gresite. În primul rând, Java nu este o extensie a limbajului HTML (cum cred unii); Java este într-adevăr simplu dar nici un limbaj atât de puternic nu este foarte usor de folosit când vrei să scrii aplicatii serioase, profesionale (există mai mult de 150 de clase si interfete). Java nu dispune încă de un mediu integrat de programare, bine pus la punct (Symantec si Borland au lansat noi produse în aceasta directie) si de aceea timpul de dezvoltare a software-ului noi nu este cel optim. Una dintre marile deficiente este faptul că fiind un limbaj interpretat este extrem de lent pentru aplicatii cu adevărat serioase. În ultimul timp, lansarea asa numitelor compilatoare "just-in-time" prezintă un plus, dar performantele sunt încă departe de ceea ce asteaptă programatorul profesionist. Este foarte posibil ca Java să revolutioneze lumea aplicatiilor client-server având abilitatea de a lucra cu modele de calcul distribuit, ca interfetele CORBA (Common Object Request Broker) sau OpenDoc, dar încă nu dispune de un set de primitive din clasa OCX, de exemplu, care permit utilizatorului să încorporeze automat componente software în interfete grafice utilizator. Părerea mea este că soarta acestui limbaj nu va depinde de Sun, care pare a nu avea rapiditatea necesară, ci de pleiada de companii software care l-au adoptat si care îl vor perfectiona din toate punctele de vedere. Este foarte probabil ca Microsoft să aibă din nou ultimul cuvânt si în ceea ce priveste Java.

În sfârsit, Inferno/Limbo este un ansamblu sistem de operare / limbaj, menit să ofere o interfată comună aplicatiilor de retea si multimedia. Câteva din calitătile sale îl fac un serios competitor. Inferno este un sistem de operare extrem de portabil: este implementat ca o masină virtuală de stare peste sistemele de operare Windows NT/95, Unix, Plan9, dar rulează si direct pe procesoare fără sisteme de operare gazdă.

Inferno are un sistem de comunicatie distribuit, realizat prin intermediul unui protocol denumit Styx, care este implementat la nivelul de retea (network layer), respectiv IP. Inferno are nevoie de numai 1 megabyte de memorie RAM pentru a rula si permite implementarea de aplicatii portabile la nivel de cod obiect prin intermediul unui limbaj asociat, denumit Limbo. De asemenea, Inferno include facilităti specifice de securitate a aplicatiilor si (foarte interesant) poate executa aplicatii cu performante comparabile pe retele de calculatoare cu conexiune lentă (narrow band networks) cât si cu conexiune rapidă (wide band networks) de tip LAN.

Limbajul Limbo este modular, interpretat si asemănător cu C, deci nu suportă programare orientată pe obiecte (este mai rapid). Limbo include facilităti de programare paralelă (multithreading) si "garbage collection" de tip referintă prin numărare, care permite dealocarea resurselor în mod automat, fără interventia programatorului. Motto-ul sistemului este "orice resursă arată ca un fisier"; în consecintă toate obiectele din sistem (procese, conexiuni de retea, periferice, servicii) pot fi accesate la fel ca un fisier.

Evident, există similitudini între Limbo si Java, dar primul merge ceva mai departe în a implementa elemente pe care le putem numi de avangardă.

Care sunt diferentele? Limbo foloseste mai mult facilitătile de programare paralelă în interiorul limbajului, dar Java suportă programarea orientată pe obiecte. Limbo are o mai bună implementare a managerului de memorie, dar Java nu foloseste pointeri la memorie, o adevărată sabie cu două tăisuri care a dat multă bătaie de cap programatorilor de limbaj C. Masina virtuală Limbo se bazează pe o arhitectură de tip memorie, pe când masina virtuală Java implementează o arhitectură de tip stivă. Implicatia directă este că în cazul Limbo compilatorul on-the-fly este mai compact si deci mai rapid.

Altă deosebire extrem de interesantă este în ceea ce priveste bibilotecile grafice. Java a încercat definirea unui nou standard grafic cu biblioteca "awt" în timp ce Limbo urmează modelul Tk, datorat lui John Ousterhout, care se bucură de largă acceptare în mediile universitare. Curios este că acum Ousterhout lucrează pentru Sun, dar se pare că n-a reusit să convingă echipa Java să preia Tk ca interfata grafică. Indiferent de această decizie, modelul Tcl/Tk reprezintă o adevărată bijuterie în materie.

Noutatea cea mai de seamă, adusă de limbaje ca Java si Limbo, este aceea că au reusit să încorporeze într-un tot unitar atât facilitătile de limbaj de programare cât si pe cele de sistem de operare.

Sistem de operare de tip browser?

În ultimul an si jumătate un nou fenomen apărut ca din senin, care de fapt a înconjurat lumea într-un timp extrem de scurt si care se numeste World Wide Web, va exercita implicatii importante în felul în care sistemele de operare vor evolua în viitorul apropiat. Termeni ca "browser", compilatoare "just-în time", sisteme de operare de tip Internet, limbaje arhitectural neutre si ubicue au devenit mai "moderne" decât termeni consacrati ca "microkernel" sau sisteme de operare distribuite. Putini cercetători de la CERN sau Centrul de Supercomputing al universitătii din Illinois, cărora le datorăm HTML (Hypertext Markup Language), HTTP (Hypertext Transport Protocol) si primul browser (Mosaic) bănuiau că ceea ce acum numim WWW va cuceri pur si simplu lumea: de la Wall Street, unde oamenii de afaceri să înghesuie să investească miliarde de dolari în orice companie "start-up" care lansează orice software operând cu adrese IP, făcând miliardari într-o singură zi (vezi Netscape), până la industria de software, unde până si hegemonicul Microsoft a trebuit să-si "flexeze muschii" pentru a nu pierde trenul care se cheamă Internet.

Trăim o nouă "goana după aur", în febra căreia chiar si companii gigantice, ca IBM sau AT&T, au trebuit să facă eforturi considerabile pentru a ocupa pozitii avantajoase într-o cursă care de abia a început si care se anuntă a fi plină de imprevizibil.

În acest context, sistemele de operare vor avea, ca întotdeauna, o importantă strategică.

Pentru a implementa sisteme de operare distribuite, capabile să ruleze pe diferite arhitecturi hardware, este necesar ca sistemul de operare în sine să fie compilat pentru fiecare procesor în parte. Să considerăm de exemplu Amoeba (un sistem de operare distribuit proiectat la Free University din Amsterdam). Fiecare utilitar de sistem de operare (incluzând kernelul) este precompilat pentru toate tipurile de procesoare pe care sistemul de operare le suporta. Cu alte cuvinte, câte procesoare atâtea instante ale kernelului stocate în sisteme de fisiere alocate procesoarelor respective. Dacă, de exemplu, este lansat un proces, sistemul de operare trebuie să execute acea copie a procesului care este generat în cod obiect pentru procesorul respectiv.

Să analizăm sistemul de comunicatie într-un sistem de operare distribuit. Trebuie să fie bazat pe "message passing" (pentru a permite decuplarea serverului de client) si pe proceduri de tip RPC (remote procedure call) care să asigure transparenta procedurilor de la un host la altul. Comunicatia de tip RPC (inventată de Birrel si Nelson) reprezintă o superbă abstractizare, dar are 2 deficiente majore: este dificil de implementat si este limitată din punctul de vedere al performantei. Pe de altă parte, experienta a arătat că implementarea protocoalelor de comunicatie de tip special pentru a asigura performanta maximă nu este cea mai bună solutie. În ziua de astăzi, când schimbul mondial de informatie se face prin Internet, conditia sine qua non în implementarea unui subsistem de comunicatie, pentru a avea impact asupra pietei, este de a fi compatibil cu IP (Internet Protocol). Cele două protocoale care au revolutionat Internetul sunt HTTP si HTML. Primul dintre ele (sau o variantă a lui) s-ar putea să joace un rol primordial în elaborarea sistemelor de operare de tip Internet. Există câteva caracteristici esentiale ale HTTP-ului: toate resursele din retea sunt văzute în mod uniform (ca un fisier, localizat într-un sistem de fisiere); protocolul este simplu, manipulând caractere ASCII (deci nu e nevoie ca datele să fie convertite din "ordine locală" în "ordine de retea" si viceversa, ca în orice sistem bazat pe RPC); poate fi folosit în regim de tranzactie (adică trimite o cerere si asteaptă răspunsul); este simplu de implementat. Noua generatie de servere HTTP vor include: o masina de stare care va permite păstrarea conexiunilor, un subsistem de securitate a datelor, un subsistem cache si performante superioare.

Întrebarea care se pune este: oare ar fi posibil ca, folosind browserul ca punct de plecare, acesta să evolueze în asa fel încât să fie capabil să gestioneze toate resursele unei masini hardware, oferind în acelasi timp posibilităti extraordinare de cuplare la retea. Există deja sisteme de fisiere distribuite bazate pe HTTP, Sun lucrează la o noua generatie de NFS care în loc să folosească RPC va folosi HTTP, Netscape incorporează în acest moment Java si Javascript, permite în acelasi timp gestionarea sistemului de I/E pentru a efectua convorbiri telefonice, vizionarea de filme, auditia de muzica, grafică 3-dimensională si altele. Evident că, în principiu, este posibil si probabil că aceasta ar fi una din sansele lui Netscape de a-si păstra portiunea de piata pe care o controlează în acest moment, dar pe care a început s-o piardă încet dar sigur în fata Microsoft-ului. Este interesant de observat această luptă pe viată si pe moarte între Netscape, care îsi pune oamenii să lucreze 100 de ore pe săptămână pentru a lansa noi versiuni ale browserului în fiecare trimestru, si gigantul Microsoft, care aproape a recuperat terenul pierdut în noua versiune a Internet Explorer-ului. Va avea Netscape soarta lui Borland sau - cine stie - miracolul se va întâmpla? Oricum, pentru prima dată în existenta sa Netscape a înregistrat profit în ultimul trimestru.

Sisteme de operare si aplicatii de multimedia

Unul din principalele roluri ale unui sistem de operare este să ofere aplicatiilor suficient suport pentru a rula în conditii optime. Aplicatiile de tip multimedia intră în clasa de aplicatii de timp real.

Prin aplicatii multimedia se înteleg aplicatii care procesează voce, audio, video sau, mai direct, aplicatii care permit vizionarea de filme, audierea de muzică si conversatii telefonice utilizând tehnici digitale pe calculator. Ultimele generatii de sisteme de operare dispun de facilităti care permit controlul si programarea sistemului de intrare/iesire pentru astfel de operatii. Problemele care apar se datoresc faptului că sistemele de operare comerciale nu sunt încă capabile să asocieze comportări diferite la tipuri diferite de date si să gestioneze timpul de acces la unitatea centrala, în asa fel încât aplicatiile de timp real să fie executate în cadrul conditionărilor de timp specifice fiecărui tip. Lucrurile se complică în mod esential când datele ce reprezintă voce sau imagine sunt transmise prin intermediul Internetului.

Să analizăm pe scurt fiecare dintre aceste tipuri de date.

Sistemele telefonice utilizează date codificate pe 7 biti (USA) si 8 biti (Europa) care sunt esantionate la rate de 8000 de ori pe secundă. Asta înseamnă rate de transfer de 56, respectiv 64 kbps (kilobiti pe secundă).

Un sistem audio cu compact disc foloseste o rata de esantionare de 44100 esantioane pe secundă, suficient pentru a capta frecventa de până la 22050 Hz. Datele sunt codificate pe 16 biti. Din nou, aceasta înseamnă că un CD audio are nevoie de o rata de transfer de 705.6 kbps pentru sunet mono si 1.411 kbps pentru stereo. Asadar, pentru a transmite sunet cu calitate stereo este nevoie de un canal T1.

Pentru imagini video este nevoie de o frecventa de actualizare a imaginii de 50 de cadre pe secunda, pentru ca ochiul uman să nu perceapă aspectul discret al imaginii. Pentru a transmite imagine video pe ecranul calculatorului personal reteaua de calculatoare trebuie să suporte rate de transfer de aproape 500 Mbps. Aceasta înseamnă că ar trebui să avem în fiecare casă o conexiune ATM.

Din fericire, calculatorul personal are memorie locală si aceasta poate fi folosită pentru stocarea unor cadre si, mai ales, pentru implementarea unor tehnici de codificare/decodifcare si compresie/decompresie, care reduc mărimea pachetelor de date transmise prin retea. Pentru compresia imaginilor de tip fotografic a fost inventat standardul JPEG, care compactează cu factorul 20 la 1, iar pentru imagini video (deci imagine si sunet) există MPEG 1-4, care permit transmiterea de imagini video la rate de până la 64 kbps, cu actualizarea cadrelor de 10 ori pe secundă. Asta înseamnă că se pot tine videoconferinte pe linii ISDN.

Altă aplicatie de tip multimedia este asa-numita "video la cerere". Aplicatia este similară cu sistemul de cablu TV, cu exceptia faptului că fiecare utilizator poate încărca si viziona un film dorit, poate să-si alcătuiască propriul program. Sistemul este format din video-servere conectate prin retea ATM si care se continuă cu comutatoare de retea, ce fac trecerea la sistemul de cablu prezent în fiecare casă. Receptorul poate fi un "set-up box", vizionarea făcându-se pe televizor sau calculator personal. Este nevoie de sisteme de operare "hard real time" pe serverele video, si "soft real time" pe "set-up box"-uri sau pe calculatorul personal. Există o mare probabilitate ca după explozia Internetului si "foamea" de rate mari de transfer, conexiunea cu Internetul să se facă (în loc de linie telefonica sau ISDN) prin sistemul de cablu video, o dată că aparitia la sfârsitul anului a modemurilor de cablu TV. În Statele Unite, de exemplu, aproape toată reteaua de cabluri (telefonice, TV) este bazată pe fibră optică. Este extrem de posibil ca în viitorul apropiat cablul TV să fie mediul prin care se va face conexiunea la Internet. Deci să nu fiti surprinsi dacă viitorul televizor va fi un hibrid între calculator, telefon, fax si televizor, care bineînteles va avea sistemul de operare propriu. Java/Limbo si JavaOS/Inferno sunt candidati ideali pentru aceste aplicatii. În sfârsit, trebuie mentionat că aceeasi problemă este atacată de sistemul digital multimedia Mbone (Multicast Backbone) care foloseste exclusiv Internetul. Mbone este un fel de radio-televiziune, care foloseste ca mediu de transmisie Internetul. Suntem, în momentul de fată, în pragul informatizării totale a aparatelor electrice casnice (care functionează prin receptia/ transmiterea de date) si în consolidarea lor în masini casnice Internet (în loc de electrice).

Concluzie

Este lăsată pe seama cititorului, autorul mentionând doar că este un adevărat noroc să fim martorii directi ai celei mai dinamice si mai revolutionare perioade de la inventarea calculatorului si poate de la aparitia tehnologiei ca atribut al civilizatiei umane. 

Dl. Mihai Nelu este absolvent al Facultătii de Automatizări si Calculatoare din Politehnica Bucuresteană. Actualmente este arhitect de sistem la AT&T Labs (California), departamentul de tehnologii avansate, ocupându-se de sisteme de operare globale si limbaje/protocoale/sisteme de timp real pentru aplicatii Internet.

Java OS si Java Beans


(C) Copyright Computer Press Agora