![]() | |
![]() |
![]() ![]() |
Politica de confidentialitate |
|
![]() | |
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
![]() |
![]() |
||||||
Structura unui sistem de calcul | ||||||
![]() |
||||||
|
||||||
l2j23js 2. Generalitati despre structura unui sistem de calcul Asa cum s-a evidentiat in cursul precedent, in evolutia sistemelor de calcul un rol esential a fost reprezentat de multiplexarea in mod automat a activitatii CPU si a dispozitivelor de I/O. Introducerea acestui sistem de multiplexare a implicat in acelasi timp o sporire in complexitate a sistemului de operare, care trebuia sa se asigure de functionarea corecta a calculatorului. O parte din facilitatile pe care le ofera un sistem de operare modern sunt facilitate de proprietatile speciale ale hardware-ului pe care ruleaza. In cele ce urmeaza, vom trece in revista cateva astfel de proprietati. Sistemul de intreruperi ---------------------- Pentru ca operatiile CPU si I/O sa poata fi multiplexate, este nevoie de un mecanism care sa permita desincronizarea si resincronizarea operatiilor. O functionare sincrona a CPU si I/O ar insemna ca, la momente bine stabilite, CPU sa verifice daca exista o cerere spre sau dinspre dispozitivele de I/O. Ca analogie, putem sa ne gindim la o situatie in care, in loc sa fim avertizati de soneria telefonului ca urmeaza sa primim un telefon, sa verificam, din minut in minut, daca nu este cineva care asteapta la celalalt capat al liniei sa raspundem. Asa cum analogia este absurda, si o abordare a unui sistem de calcul sincron este aberanta. Din acest motiv, asincronismul (prin care CPU sa fie notificat de existenta unei cereri spre/dinspre un dispozitiv I/O) trebuie sa existe in orice sistem. Posibiliatea realizarii asincronismului este data de doua metode: - Transferul datelor prin intermediul intreruperilor - Accesul direct la memorie (DMA) Schema generala pentru un sistem bazat pe intreruperi este: aSil pag. 31i Fiecare controller este un circuit (sau procesor) specializat, care poate sa functioneze in paralel (asincron) cu CPU. Controller-ul este responsabil de observarea starii dispozitivelor din subordine; in cazul aparitiei unui eveniment interesant (de exemplu utilizatorul a apasat o tasta), informatia este transferata intr-o zona de memorie proprie si apoi este notificat CPU asupra existentei unei operatii care trebuie procesata. Notificarea se face prin intermediul unei intreruperi. In cazul aparitiei unei intreruperi, CPU va trebui sa isi suspende activitatea pe care o efectua asupra procesului, sa salveze contextul (continutul registrilor), sa identifice natura intreruperii si sa transfere controlul unei rutine (functii) care sa prelucreze intreruperea respectiva. Toate aceste operatii nu pot fi efectuate exclusiv prin sistemul de operare, care este la randul lui un program care poate fi intrerupt. Din acest motiv este necesar un sprijin, uneori substantial, din partea componentelor hardware si in special din partea procesorului. O asemenea facilitate oferita de catre procesor o constituie sistemul de intreruperi. Necesitatea acestuia devine evidenta in momentul in care studiem modul in care se executa programele de aplicatie sub controlul sistemului de operare. Practic, un program aflat in executie ruleaza in majoritatea timpului fara a tine cont de existenta sistemului de operare; acesta din urma intervine numai in anumite situatii bine definite, cum ar fi: - incercarea unui program de a efectua o actiune nepermisa (de exemplu, o impartire la zero) - 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 Se observa deci ca un program se executa fara interferente pana la aparitia uneia din situatiile descrise mai sus. In acest moment, executia sa este intrerupta, iar controlul este preluat de catre sistemul de operare, care se ocupa de rezolvarea situatiei ce a cauzat intreruperea. In final, dupa ce si-a indeplinit sarcina, sistemul de operare preda din nou controlul programului care a fost intrerupt, acesta fiind reluat din punctul in care executia sa a fost suspendata. Acest mod de tratare este extrem de simplu si eficient, dar ridica o problema: atat timp cat procesorul executa instructiunile unui program, nu exista nici o cale de a suspenda prin software executia respectivului program si de a executa (temporar) instructiuni apartinand altor programe. In acest fel este anulata posibilitatea sistemului de operare, care este tot un program, de a prelua controlul sistemului in momentele in care interventia sa este necesara. 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 una din urmatoarele situatii: - 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 Indiferent care este cauza care a produs intreruperea, comportarea procesorului este urmatoarea: - 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 Evident, rutinele care trateaza situatiile generatoare de intreruperi fac parte din sistemul de operare, care poate astfel rezolva problemele aparute. Trebuie totusi ca intruperea sa nu fie, la randul ei, suspendata din executie de o alta intrerupere. Ca urmare, procesoarele ofera diferite solutii in cazul suprapunerii a mai multe intreruperi. Este posibil ca acestea sa fie, la randul lor, ierarhizate, si o intrerupere de prioritate inalta sa poata prelua CPU de la o alta intrerupere. Ca exemplu de eficienta a unui sistem de operare bazat pe intreruperi, vom studia cazul unui terminal (cu o tastatutra si un monitor). In general, un terminal nu are o viteza de afisare a caracterelor foarte mare; o viteza normala este de 1200 de biti pe secunda (1200 bauds). Un calcul simplu arata ca, pentru un astfel de terminal, un eveniment va aparea aproximativ o data la 7 milisecunde (1000ms / (1200 biti pe secunda/8 biti) = 7 ). 7 milisecunde = 7000 microsecunde O functie pentru tratarea intreruperii data de aparitia unui caracter tastat poate sa dureze aproximativ 20 de microsecunde. Ca urmare, procesorul ar fi ocupat 6980 din 7000 de milisecunde, deci aproximativ 99.7%. Practic, in restul timpului procesorul se poate ocupa de executia altor programe, si poate sa dea impresia unui utilizator de terminal ca lucreaza singur pe acel calculator. Sintuatia se poate schimba in cazul in care inlocuim terminalul cu un dispozitiv mult mai rapid, de exemplu un hard disk, unde rata de transfer este mult mai mare (de ordinul a 5Mbytes pe secunda). In astfel de cazuri, un calcul ca cel de mai sus ar arata o incarcare inacceptabila pentru procesor; ca urmare, s-a dezvoltat o tehnica diferita pentru astfel de dispozitive. Aceasta metoda se numeste acces direct la memorie (DMA). In acest caz, controllerul are acces direct la memorie, dar nu va apela la procesor decat in momentul in care o intreaga zona de memorie va fi completata. Datorita flexibilitatii sale, mecanismul intreruperilor este folosit astazi de toate procesoarele existente. Asa cum vom vedea in continuare, acest mecanism sta la baza multor facilitati oferite de sistemele de operare. Exista, insa, si anumite probleme legate de utilizarea unui sistem de intreruperi, care complica de cele mai multe ori sistemele de operare. De exemplu, un sistem de operare este total compromis daca utilizatorii lui pot sa il ocoleasca si sa acapareze procesorul cu propriul lor cod. Din acest motiv, anumite intructiuni vor fi declarate 'periculoase' si vor fi interzise utilizatorului, lasandu-le accesibile doar sistemului de operare. Din nou, o astfel de separare a intructiunilor nu este posibila la nivel soft, ci trebuie sa fie o facilitate oferita de hardware. Prin urmare, activitatile in sistemul de calcul trebuie sa se desfasoare in (cel putin) doua moduri: un mod restrictionat in care utilizatorii sa poata sa isi ruleze propriile programe, si un mod privilegiat, in care ruleaza sistemul de operare. 2. Generalitati despre structura unui sistem de calcul Operarea duala ------------- Versiunile primitive de sisteme de operare (iar MS-DOS este un exemplu) ofereau putere deplina utilizatorilor care le utilizau. Fiind single-user, un mecanism de protectie a sistemului de operare era, de altfel, inutil. Astfel, un utilizator putea sa suprascrie zonele de memorie rezervate de sistemul de operare, sa foloseasca orice instructiune a CPU si sa acceseze in orice mod posibil un dispozitiv de intrare/iesire. Exemple: defectare a HDD, a monitorului etc In plus, pentru a creste eficienta sistemelor, anumite resurse au inceput sa fie partajate. Am discutat in primul curs despre modul de partajare a dispozitivelor de I/O si a procesorului folosind procedeele de buffering si spooling. Sistemele de tip time sharing au reprezentat un mare pas inainte in evolutia sistemelor multiutilizator. Astfel, fiecare program poate fi executat intr-un interval de timp; daca nu isi termina executia in acest interval, un alt program urmeaza sa fie incarcat si sa se execute pentru un interval de timp. Astfel, pentru un observator extern, mai multe programe se executa in acelasi timp, dind impresia ca exista mai multe procesoare care prelucreaza programele. Dar, odata cu aparitia sistemelor de tip time sharing, alte probleme mai complicate au aparut. De exemplu, o functionare defectuoasa a unui program nu trebuie sa afecteze executia unui alt program. - protectia programelor unul de celalalt - protectia programului care efectueaza schimbarea de taskuri Anumite erori pot fi capturate de hardware, caz in care executia programului trebuie sa fie intrerupta. Exemplu: impartire la zero. De asemenea, incercarile de executie a unor instructiuni invalide, sau de accesare a memoriei, vor genera intreruperi soft pe care sistemul de operare le va trata, intrerupand fluxul de intructiuni al programului in cauza. Ca urmare, trebuie sa existe posibilitatea ca nu doar erorile detectate de hardware sa intrerupa executia, ci toate erorile trebuie sa fie prinse. Din acest motiv, hardware-ul trebuie sa fie cel care sa ofere posibilitatea de a proteja instructiunile fata de programele utilizatorilor. In acelasi timp, trebuie ca sistemul de operare sa aiba acces nelimitat la toate resursele. Pentru aceasta, hardware-ul trebuie sa ofere (cel putin) doua moduri de lucru: real (in care sa se execute sistemul de operare) si protejat (pentru programele utilizator). Descriere a celor doua moduri: acces la operatiile de I/O si la memorie... Corelarea modului dual cu intreruperile Intreruperile implica trecerea dintr-un mod in altul Se definesc anumite instructiuni ale CPU ca instructiuni protejate. Incercarea de accesare a lor in user mode este semnalata sistemului de operare. Concluzii: avantajele oferite de operarea duala a hardware-ului, contra cresterii complexitatii sistemului de operare. Protectia hardware ----------------- Asa cum s-a evidentiat in cursurile precedente, un utilizator poate incerca sa afecteze executia programelor in sistem prin generarea de instructiuni de I/O ilegale, prin accesarea memoriei apartinand sistemului de operare (si eventual modificarea ei) sau prin oprirea CPU (folosind intructiunea halt, de exemplu). Ca urmare, este natural ca toate aceste probleme sa fie rezolvate chiar la nivel hardware. Astfel, utilizatorii pot sa fie restrictionati in a folosi in mod direct operatiile de I/O, prin definirea acestora ca instructiuni protejate. Pentru a asigura o protectie eficienta a sistemului de operare, toate instructiunile protejate trebuie sa fie executate doar in mod real. Astfel, utilizatorii nu vor putea accesa dispozitivele de I/O in mod direct (pentru ca nu pot folosi instructiunile de I/O in mod direct). Programele utilizator vor folosi apelurile sistem (system calls) pentru a realiza accesarea dispozitivelor de I/O. Pe de alta parte, orice intrerupere se executa in mod real; daca utilizatorul are acces la memoria in care este stocat codul de tratare a intreruperii, atunci ar putea sa il inlocuiasca cu propriul cod, si astfel sa compromita sistemul. Prin urmare, anumite zone de memorie (cele ale sistemului de operare, care ruleaza in mod real, si cele ale altor programe) trebuie sa fie protejate. Intr-un curs viitor se vor prezenta cateva mecanisme de protejare a memoriei. Ca exemplu, se poate pastra, pentru fiecare program care se executa in calculator, un interval cu adresele valide, in format (inceput, sfarsit). Alocarea acestor zone se face de sistemul de operare, dintr-o lista de zone libere. In cazul in care programul acceseaza o adresa in afara acestor limite, hardware-ul va genera o intrerupere catre sistemul de operare, care va actiona in consecinta. Un program poate, de exemplu, sa se execute intr-un timp foarte mare, sau sa intre intr-o bucla infinita. Ca urmare, hardware-ul trebuie sa poata aloca intervale de executie pentru un program. Descriere a timerului. Utilizare a timerului pentru a calcula timpul de executie pentru un program, sau pentru a calcula ora curenta. Componentele unui sistem de operare ---------------------------------- Din cele discutate pana acum, ne-am putut face o idee asupra functiilor pe care le executa un sistem de operare. Pentru a oferi altor programe posibilitatea de executie, sistemul de operare este, in general, impartit in unitati cu un rol bine determinat. In lumea reala exista foarte multe sisteme de operare si multe abordari pentru construirea lor. Din acest motiv, enumerarea componentelor este informativa. 1. Management-ul proceselor - creare, stergere, alocare a resurselor, suspendare, sincronizare, comunicatii interproces 2. Management-ul memoriei (primare) - lista zonelor de memorie libere si ocupate, alocarea/dealocarea de memorie, memoria virtuala (swap) 3. Management-ul memoriei (secundare) - alocarea spatiului de stocare, planificarea discului 4. Dispozitive de I/O - sistemul de buffere, drivere 5. Fisiere - crearea/stergerea/citirea etc 6. Mecanismul de protectie - controlul accesului la anumite resurse 7. Retele de calculatoare - punerea in comun a resurselor intre mai multe sisteme 8. Interpretorul de comenzi (interfata directa cu utilizatorul) - lansarea de programe Fiecare din aceste sectiuni se poate executa, in functie de arhitectura sistemului si de optiunile proiectantului, in mod real sau protejat, sau mixt. Este insa evident ca trebuie sa existe posibilitatea ca un program care se executa la un moment dat sa poata accesa anumite informatii la care nu are acces decat sistemul de operare. Despre aceste mecanisme vom discuta in cele ce urmeaza. 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. Partile de cod care se executa de foarte multe ori pot fi optimizate. A optimiza acelasi cod in fiecare program ar fi nepractic si imposibil de controlat; ca urmare, este util sa existe un cod bine optimizat si partajabil de toate procesele din sistem. Dispozitivele de I/O sunt, in general, de citeva tipuri (disc, tastatura, monitor etc). Nu exista insa o compatibilitate a acestor dispozitive; ... Citirea unui fisier de pe floppy in loc de HDD ar implica rescrierea programului. 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 poate 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 |
||||||
![]() |
||||||
![]() |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
![]() |
|