Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Sistemul de operare - Clasificarea sistemelor de operare, Nucleul sistemului de operare

Sistemul de operare

Pana acum am discutat numai despre implementarea fizica a componentelor unui calculator. Desigur, buna functionare a acestora este indispensabila. Programele nu pot rula pe un calculator ale carui componente nu functioneaza corect. In acest sens, prima problema care poate aparea este posibilitatea defectarii unor circuite, caz in care acestea trebuiesc reparate sau (cel mai adesea) inlocuite. Totusi, nu este suficient ca toate componentele sa fie in stare fizica buna pentru ca sistemul de calcul in ansamblul sau sa functioneze corespunzator. Trebuie tinut cont si de faptul ca fiecare dispozitiv are propriile specificatii, propriile sarcini pe care le poate indeplini, propriul mod de comunicare cu alte dispozitive s.a.m.d. Deoarece calculatorul este format dintr-un numar mare de circuite, in general complexe si foarte diferite intre ele, este necesar sa existe un control unic asupra tuturor acestora, pentru a le face sa conlucreze in modul dorit de utilizator.



Din punct de vedere hardware, toate componentele calculatorului sunt controlate de catre procesor. La randul sau, procesorul realizeaza actiunile specificate prin programele pe care le executa. Dar, tocmai datorita structurii extrem de complicate a unui calculator, sarcina gestionarii tuturor componentelor sale nu poate fi lasata in seama programelor de aplicatii. Pe de o parte, programatorul ar trebui sa se concentreze mai mult asupra acestei gestiuni si mai putin asupra problemei propriu-zise pe care isi propune s-o rezolve. Pe de alta parte, programele ar deveni astfel mult mai voluminoase si, implicit, mai expuse la aparitia erorilor.

Ca urmare, s-a ajuns la introducerea unui program intermediar intre nivelul hardware si programele de aplicatii, care sa asigure buna functionare a sistemului de calcul. Acest program, numit sistem de operare, detine controlul asupra resurselor calculatorului si intervine atunci cand apar situatii nedorite sau neprevazute. Ca o prima consecinta, desi reprezinta o componenta software, sistemul de operare este strans legat de hardware, deoarece se ocupa in principal de gestiunea acestuia.

Putem privi din mai multe unghiuri functiile pe care trebuie sa le indeplineasca sistemul de operare. Din punct de vedere al utilizatorului, rolul sau este exclusiv de a asigura rularea in bune conditii a programelor de aplicatii. Se desprinde de aici ideea ca sistemul de operare nu este un scop in sine, ci un mijloc pentru atingerea altor scopuri.

Pentru programatorul de aplicatii, sistemul de operare este in principal un furnizor de servicii la care poate apela pentru rezolvarea problemelor intalnite. Practic, sistemul de operare pune la dispozitia aplicatiilor un set de functii predefinite, care fie sunt dificil de scris (si de aceea nu este eficient sa fie implementate de fiecare program in parte), fie pur si simplu nu pot fi lasate in seama aplicatiilor din motive de siguranta in functionare a sistemului in ansamblul sau. Aplicatiile pot folosi aceste servicii, conformandu-se regulilor impuse de sistemul de operare.

Pentru a indeplini aceste cerinte, proiectantul unui sistem de operare trebuie sa aiba in vedere urmatoarele obiective:

- sa asigure buna functionare a componentelor hardware, precum si comunicarea si cooperarea intre acestea

- sa previna interferentele nedorite intre diferitele programe de aplicatii, inclusiv sa impiedice, in masura posibilului, propagarea efectelor erorilor unui program asupra celorlalte programe

2. Clasificarea sistemelor de operare

Putem clasifica sistemele de operare dupa mai multe criterii. Primul dintre acestea reiese din discutia anterioara; dupa numarul de programe care pot rula simultan, sistemele de operare pot fi:

- single-tasking - permit rularea uni singur program la un moment dat; singurul sistem din aceasta clasa care mai este folosit astazi (dar din ce in ce mai putin) este DOS

- multitasking - Unix, Windows 9x/NT, OS/2 etc.

O alta clasificare se refera la numarul de utilizatori care pot lucra simultan pe un calculator:

- sisteme monoutilizator (single-user)

- sisteme multiutilizator (multiuser)

In mod evident, un sistem multiuser este si multitasking. Cele mai cunoscute sisteme de operare multiuser sunt cele din familia Unix, in timp ce sistemele Windows nu au aceasta facilitate. Trebuie retinut ca a da posibilitatea mai multor utilizatori sa lucreze simultan pe acelasi calculator nu este atat o problema de hardware, cat mai ales una specifica sistemului de operare.



3. Nucleul sistemului de operare

Datorita multitudinii si diversitatii sarcinilor pe care le are de indeplinit, sistemul de operare nu poate fi conceput sub forma unui program unitar. Practic, sistemul de operare consta dintr-o multime de secvente de program, fiecare indeplinind o anumita sarcina.

Un argument in favoarea unei asemenea abordari, in afara considerentelor de fiabilitate si usurinta in dezvoltare, il constituie evolutia continua a tehnologiilor utilizate, in special in ceea ce priveste dispozitivele periferice. Daca la un moment dat se pune problema inlocuirii intr-un calculator a unui asemenea periferic (de exemplu mouse) cu unul mai nou, va trebui schimbata secventa de program care se ocupa de gestionarea sa. In cazul in care sistemul de operare ar fi un program unic, acesta ar trebui inlocuit in intregime, ceea ce este inacceptabil in practica. Asupra acestui aspect vom reveni ulterior.

Pe de alta parte, exista o serie de operatiuni fundamentale, care trebuie realizate intotdeauna in acelasi mod, independent de particularitatile hardware-ului. Partile de program care indeplinesc aceste sarcini fundamentale formeaza nucleul sistemului de operare, care dirijeaza si controleaza functionarea sistemului de calcul in ansamblul sau. In continuare, notiunile de sistem de operare si de nucleu al sistemului de operare se vor confunda in mare masura, deoarece celelalte componente ale sistemului de operare sunt utilizate de catre nucleu pentru a-si indeplini sarcinile.

Nu exista intotdeauna o delimitare clara intre nucleu si celelalte componente. Conceptiile diversilor producatori de sisteme de operare difera in ceea ce priveste locul unora dintre functii - in nucleu sau in afara sa. Totusi, practic toate sistemele de operare existente includ in nucleu urmatoarele componente:

- gestiunea proceselor

- gestiunea memoriei

- sistemele de fisiere

Majoritatea activitatilor pe care le desfasoara sistemul de operare nu pot fi realizate exclusiv prin software. Este necesar un sprijin, uneori substantial, din partea componentelor hardware si in special din partea procesorului. Natura exacta a acestui sprijin va fi discutata in continuare.

Principala facilitate oferita de catre procesor o constituie sistemul de intreruperi, care a fost deja prezentat. In general, programele aflate in executie ruleaza in majoritatea timpului fara a tine cont de existenta sistemului de operare; totusi, acesta din urma trebuie sa poata interveni in anumite situatii bine definite, cum ar fi:

- o cerere de intrerupere venita din partea unui dispozitiv periferic, care poate sa nu aiba legatura cu programul aflat in executie, dar care trebuie tratata imediat (altfel datele se pot pierde)

- o operatie executata de procesor care s-a terminat anormal (de exemplu o operatie de impartire la 0), ceea ce indica incercarea unui program de a efectua o actiune nepermisa



- o cerere explicita adresata de programul de aplicatie, privind efectuarea unui anumit serviciu de catre sistemul de operare, serviciu pe care aplicatia nu-l poate efectua singura

Sistemul de operare va lasa deci orice program sa se execute fara interferente pana la aparitia uneia din situatiile descrise mai sus, dar in acest moment trebuie sa preia imediat controlul. Solutia este, asa cum am precizat deja, de natura hardware si este reprezentata de sistemul de intreruperi. Concret, acesta ofera tocmai posibilitatea intreruperii executiei programului curent in anumite conditii. Fiecareia din situatiile prezentate mai sus ii corespunde unul tipurile de intrerupere cunoscute:

- intreruperi hardware (externe)

- exceptii (intreruperi hardware interne)

- intreruperi software

Daca intreruperile hardware externe, care se ocupa de comunicarea cu dispozitivele periferice, au fost descrise pe larg, utilitatea exceptiilor ramane sa fie explicata. Pentru aceasta ne vom intoarce la mecanismele de gestiune a memoriei ale microprocesoarelor pe 32 biti, prezentate anterior. Reamintim ca, indiferent daca se utilizeaza segmentarea sau paginarea, pentru fiecare acces la memorie al unui program, procesorul realizeaza o serie de verificari, cu scopul de a determina daca accesul este corect sau nu. In cazul in care este detectata o eroare (lipsa drepturilor de acces la segment, depasirea dimensiunii segmentului, acces la o pagina virtuala inexistenta etc.), am aratat ca incercarea de acces la memorie este oprita. In realitate, procesorul nu are prea multe posibilitati de a opri executia unui program. Ceea ce se intampla in practica este ca unitatea de management a memoriei (MMU), care a detectat eroarea, genereaza o exceptie, iar rutina de tratare care se apeleaza prin mecanismul de intreruperi va trebui sa rezolve problema. Exista mai multe moduri in care rutina de tratare poate restabili situatia; in majoritatea cazurilor insa, un program care a realizat un acces ilegal la memorie este terminat fortat, deoarece acest tip de eroare este considerat foarte grav. Subliniem ca intreruperea generata in acest caz este intr-adevar de tip exceptie, deoarece MMU este o parte componenta a procesorului.

Exceptiile sunt larg utilizate de catre sistemul de operare, deoarece multe erori sunt detectate direct de catre procesor. Evident, rutinele care trateaza situatiile generatoare de intreruperi fac parte din sistemul de operare, care poate astfel rezolva problemele aparute.

3.1. Apeluri sistem

Una din sursele intreruperilor, prezentate mai sus, o constituie solicitarile formulate in mod explicit de programele de aplicatii catre sistemul de operare, pentru efectuarea anumitor servicii. De ce este insa necesar ca aceste servicii sa fie implementate de catre sistemul de operare si nu pot fi lasate in seama programelor? In primul rand, unele operatii uzuale (afisarea, cautarea pe disc etc.) se desfasoara intotdeauna in acelasi mod; deci, in loc de a scrie practic aceeasi rutina in fiecare program, este mai economic de a o scrie o singura data ca parte a sistemului de operare, astfel ca toate aplicatiile sa o poata utiliza. De altfel, apelul catre un asemenea serviciu oferit de sistem nu se deosebeste prea mult de apelul catre o procedura sau functie din acelasi program.



Pe de alta parte, o serie de actiuni, in special accesele la dispozitivele periferice, prezinta riscuri considerabile pentru intregul sistem de calcul in cazul in care nu sunt realizate corect. Nu este deci convenabil de a permite programelor de aplicatii sa realizeze singure actiunile din aceasta categorie; se prefera ca activitatile de acest tip sa fie indeplinite numai prin intermediul unor rutine incluse in sistemul de operare. Pentru a pune in practica o asemenea abordare, trebuie sa se poata interzice pur si simplu realizarea anumitor operatii de catre programele de aplicatii. Din nou este necesar un suport hardware. Practic toate procesoarele existente astazi pot functiona in doua moduri distincte:

- modul utilizator (user mode), in care exista anumite restrictii pentru procesor, in principal nu se pot executa instructiunile de acces la periferice (incercarea de a executa o asemenea instructiune duce la generarea unei exceptii)

- modul supervizor sau nucleu (kernel mode), in care procesorul nu are nici o limitare

(Facem observatia ca, in cazul microprocesoarelor Intel, acesta impartire este valabila doar cand procesorul se afla in modul protejat. Modul real, destinat pastrarii compatibilitatii cu aplicatiile mai vechi, nu beneficiaza de facilitatile hardware necesare pentru discutia de fata.)

In mod uzual, programele de aplicatii se executa in mod utilizator, iar sistemul de operare ruleaza in mod nucleu. Se asigura astfel controlul sistemului de operare asupra operatiilor critice. Desi aplicatiile pierd din performanta prin limitarile impuse de modul utilizator, cresterea stabilitatii si sigurantei in functionare justifica din plin aceasta abordare. In acest moment putem studia ce se intampla atunci cand un program cere sistemului de operare furnizarea unui anumit serviciu. O asemenea cerere poarta numele de apel sistem (system call) si consta din urmatorii pasi:

- programul, care ruleaza in modul utilizator al procesorului, depune parametrii apelului sistem pe care il solicita intr-o anumita zona de memorie; practic, mecanismul este similar apelurilor de proceduri

- se genereaza o intrerupere software, care trece procesorul in modul nucleu

- se identifica serviciul cerut si se apeleaza rutina de tratare corespunzatoare

- rutina respectiva preia parametrii apelului din zona in care au fost depusi, ii verifica si, daca nu sunt erori, realizeaza actiunea ceruta; in caz contrar, apelul esueaza

- la terminarea rutinei, rezultatele obtinute sunt la randul lor depuse intr-o zona de memorie cunoscuta si accesibila programului de aplicatie

- procesorul revine in modul utilizator si se reia executia programului din punctul in care a fost intrerupt (utilizand informatiile memorate in acest scop la aparitia intreruperii); programul poate prelua rezultatele apelului din zona in care au fost depuse

Se poate observa ca executia unui apel sistem este mare consumatoare de timp. Din fericire, puterea de calcul a procesoarelor moderne este suficient de mare incat sa reduca in limite acceptabile pierderea de performanta datorata apelurilor sistem, iar cresterea fiabilitatii sistemului de calcul in ansamblul sau reprezinta un castig mult mai important.