|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
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 c5l11ld Sistemul de intreruperi daca instructiunea curenta este una de salt, va fi executata in continuare
instructiunea de la adresa la care se face saltul in caz contrar, va fi executata in continuare instructiunea aflata in memorie
la adresa imediat urmatoare dupa instructiunea curenta 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 alte evenimente aparute in sistem, care pot sa nu aiba legatura cu programul
aflat in executie, dar care trebuie tratate imediat o cerere de intrerupere venita din partea unui dispozitiv periferic; acest
caz poarta denumirea de intrerupere hardware o operatie executata de procesor, care a dat un rezultat anormal (de exemplu
o operatie de impartire la 0); asemenea situatii sunt denumite exceptii o cerere explicita venita chiar din partea programului aflat in curs de executie;
asemenea cereri, numite intreruperi software, sunt utilizate de obicei pentru
a cere sistemului de operare efectuarea unui anumit serviciu pe care programul
de aplicatie nu-l poate realiza singur executia programului curent este suspendata si se memoreaza informatiile necesare
pentru a putea relua in viitor executia respectivului program, fara a-i fi afectata
comportarea se identifica sursa cererii de intrerupere in functie de cauza intreruperii, se apeleaza o anumita rutina care este responsabila
de tratarea respectivei situatii la terminarea rutinei, folosind informatiile memorate, se revine la executia
programului intrerupt, exact in punctul in care se afla acesta in momentul intreruperii
Apeluri sistem 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 aplicatie 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 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 executa o instructiune speciala (in general o intrerupere software), care
trece procesorul in modul nucleu se salveaza (in general pe stiva) informatiile legate de programul intrerupt
care sunt necesare pentru reluarea ulterioara a executiei sale din acelasi punct
se identifica serviciul cerut si se apeleaza rutina corespunzatoare rutina respectiva preia parametrii apelului din zona in care au fost depusi,
ii verifica si, daca nu sunt erori, realizeaza actiunea ceruta; rezultatele
obtinute sunt la randul lor depuse intr-o zona de memorie cunoscuta programului
de aplicatie la terminarea rutinei, procesorul revine in mod utilizator si se reia executia
programului din punctul in care a fost intrerupt (utilizand informatiile memorate
anterior in acest scop); programul poate prelua rezultatele apelului din zona
in care au fost depuse Esenta acestei idei este urmatoarea: pentru majoritatea perifericelor, o mare parte din timpul de comunicare se datoreaza initierii accesului si nu transferului propriu-zis de date. Rezulta de aici ca s-ar putea economisi timp daca ar fi servite mai multe asemenea cereri intr-un singur acces, in loc de a le servi pe fiecare intr-un acces separat. In mod particular accesul la disc are aceasta caracteristica foarte pronuntata. Solutia este deci de a nu incerca servirea imediata a fiecarei cereri de transfer de date cu un periferic, ci de a astepta acumularea mai multor cereri si a le servi pe toate intr-un singur acces. In acest scop, cererile care asteapta sa fie servite trebuie memorate intr-o zona de memorie dedicata, numita buffer. Ca un exemplu, consideram sistemele din familia Unix, in care aplicatiile sunt scrise in mod traditional in limbajul C. Functia de biblioteca printf se bazeaza pe apelul sistem write, care realizeaza afisarea propriu-zisa. La fiecare apel al functiei printf, sirul de caractere care se doreste a fi afisat este depus intr-un buffer; in plus se verifica daca bufferul s-a umplut, caz in care este realizat un apel sistem write, ce afiseaza toate sirurile din buffer. In acest mod se obtine un castig de viteza care in unele cazuri poate fi substantial. In multe situatii sistemul de operare foloseste el insusi buffere. In general insa apelurile sistem lucreaza fara buffere, deoarece in unele cazuri aplicatia poate avea nevoie ca un anumit transfer sa fie efectuat cat mai repede posibil, fara a mai astepta sosirea altor cereri care sa umple bufferul. Modul de lucrul cu buffere poate fi implementat la nivelul functiilor de biblioteca sau chiar direct de catre utilizator. Drivere de dispozitiv Utilitatea mecanismului driverelor este evidenta: permite schimbarea usoara
a oricarui periferic, fara a fi necesara reinstalarea intregului sistem de operare.
De asemenea, depistarea si corectarea erorilor devine mult mai facila. Cu toate
acestea, in mod traditional, sistemele de operare din familia Unix au o abordare
mai putin flexibila, incluzand driverele in nucleu. Aceasta atitudine se justifica
prin faptul ca, pentru majoritatea sistemelor Unix, producatorul este si singurul
ofertant de hardware, deci nu trebuie sa faca fata unui numar mare de dispozitive
produse de alte firme. Totusi, sistemul Linux si alte sisteme Unix ofera in
ultima vreme suport pentru incarcarea dinamica a unor module. |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|