H. Administrarea pe doua nivele
Pana acum am presupus mai mult sau mai putin ca toate procesele care pot fi rulate exista in memoria principala. Daca nu exista suficienta memorie principala disponibila, unele dintre procesele care pot fi rulate vor trebui depozitate pe disk, in intregime sau doar o parte din ele. Aceasta situatie are implicatii majore pentru temporizare deoarece timpul de schimbare a unui proces si incarcarea altuia de pe disk implica mai mult o ordine a importantei decat schimbarea cu un proces deja existent in memoria principala.
Un mod mai practic de tratare a proceselor scoase din memorie este utilizarea unui temporizator pe doua nivele. Intai, doar parti ale proceselor care pot fi rulate sunt incarcate in memoria principala, asa cum se vede in figura 2-25(a). Apoi, pentru un timp temporizatorul se limiteaza la alegerea proceselor doar din aceste parti existente in memoria principala. Din cand in cand,un temporizator de nivel superior este solicitat sa stearga din memorie acele procese care exista acolo de mai mult timp si sa incarce acele procese care sunt de mult timp pe disk. Odata schimbarea efectuata, ca in figura 2-25(b) temporizatorul de nivel inferior se limiteaza din nou la alegerea proceselor dintre cele existente in memorie. Astfel, temporizatorul de nivel inferior este cel care alege dintre procesele care pot fi rulate existente in memorie, iar temporizatorul de nivel superior este cel care se ocupa cu transferul proceselor in ambele sensuri intre disk si memoria principala.
Fig. 2-25.
Un temporizator pe doua nivele trebuie sa mute procesele intre disk si memoria principala, precum si sa aleaga dintre procesele existente in memorie pe cele care vor rula. (a), (b) si (c) reprezinta trei momente diferite.
Un temporizator de nivel superior tine cont de mai multe criterii atunci cand ia deciziile. Dintre acestea amintim urmatoarele:
1. Cat timp a trecut de cand procesul a fost introdus sau scos din memorie?
2. Cat timp a beneficiat de procesor in ultima perioada?
3. Cat de lung este procesul? (Cele mici nu incurca)
4. Cat de ridicata este prioritatea procesului?
Si in acest caz putem folosi algoritmul circular sau cel prioritar sau orice alta metoda. Nu este obligatoriu ca cele doua temporizatoare sa foloseasca acelasi altgoritm.
I. Politica versus mecanism
Pana acum am presupus ca toate procesele din sistem apartin unor utilizatori diferiti si prin urmare sunt in competitie pentru obtinerea procesorului. Desi acest lucru este valabil in majoritatea situatiilor se intampla si ca un proces sa aiba mai multe procese subordonate. De exemplu, un proces al unui sistem de administrare a unei baze de date poate avea mai multe procese subordonate. Se poate ca fiecare proces subordonat sa lucreze la o comanda diferita sau ca fiecare sa aiba o functie de indeplinit (analizarea unei probleme, accesul la disk, etc.). Este foarte posibil ca procesul principal sa considere ca unul dintre procesele secundare este mai important decat celelalte, iar altul mai putin important decat toate celelalte. Din pacate, nici unul dintre temporizatoarele analizate mai sus nu accepta implicarea proceselor utilizatoare in luarea deciziilor de temporizare. In consecinta, rareori se intampla ca temporizatorul sa ia cea mai buna decizie.
O solutie la aceasta problema ar fi separarea mecanismului de temporizare de politica de temporizare. Acest lucru inseamna ca algoritmul de temporizare este parametrizat intr-un fel, dar parametrii pot fi stabiliti de catre procesele utilizatoare. Sa luam din nou exemplul cu baza de date. Sa presupunem ca kernelul utilizeaza un algoritm de temporizare prioritara dar furnizeaza un apel de sistem prin care un proces poate sa seteze (si sa schimbe) prioritatile proceselor subordonate lui. Astfel, fiecare proces principal poate sa controleze in detaliu modul in care sunt temporizate procesele subordonate lui, chiar daca nu este el cel care face temporizarea. In acest caz mecanismul se afla in kernel, dar politica este stabilita de un proces utilizator.
3.Intrari/Iesiri
1. Principiile hardware-ului I/O
Oamenii privesc hardware-ul I/O in moduri diferite. Electricienii vad cipuri, fire, sursa de curent, motoare si alte componente fizice care alcatuiesc hardware-ul. Programatorii vad interfata unui software – comenzile pe care le accepta hardware-ul, functiile pe care le indeplineste si afisarea erorilor. In aceasta carte ne ocupam de programarea dispozitivelor I/O, nu de proiectarea, construirea sau mentinerea lor; deci suntem interesati doar de modul in care este programat hardware-ul , nu de modul in care functioneaza in interior. Totusi programarea multor dispozitive I/O este adesea strans legata de operatiile din interiorul lor. In urmatoarele trei sectiuni va vom furniza cateva informatii generale despre modul in care hardware-ul I/O relationeaza cu programarea.
A.Dispozitivele I/O
Aceste dispozitive pot fi impartite in doua categorii principale: dispozitive in bloc si dispozitive de caracter. Un dispozitiv in bloc este cel care depoziteaza informattile in blocuri de marime fixa, fiecare bloc avand adresa proprie. Marimea unui bloc variaza de la 512 biti pana la 32.768 biti. Calitatea principala a unui astfel de dispozitiv este capacitatea sa de a citi sau scrie fiecare bloc independent de toate celelalte.
Disk-urile sunt cele mai cunoscute dispozitive in bloc.
La o analiza mai atenta ne dam seama ca limita dintre dispozitivele care au blocuri carora ne putem adresa si cele care nu au asa ceva nu este bine definita. Toata lumea este de accord ca disk-ul este un dispozitiv de adresare in bloc deoarece indiferent unde se afla bratul in momentul respectiv, el poate sa caute pe alt cilindru si apoi sa astepte ca blocul dorit sa ajunga sub capul de citire. Sa ne gandim la o banda de 8 mm sau DAT utilizata pentru a realiza backup-urile disk-ului. In general aceste benzi contin blocuri de marime fixa. Daca driver-ului benzii ii este data comanda sa citeasca blocul N, poate sa deruleze banda inainte pana ajunge la blocul N. Aceasta operatiune este similara cu cautarea facuta de disk, dar dureaza mult mai mult timp. De asemenea, nu este sigur ca un bloc se poate rescrie in mijlocul benzii. Chiar daca ar fi fost posibil sa folosim benzile ca dispozitive in bloc cu accesare aleatorie, acest lucru ar fi un pic fortat : in mod normal nu sunt folosite astfel.
Celalalt tip de dispozitiv este dispozitivul de caracter. Un astfel de dispozitiv furnizeaza sau accepta un flux de caractere, fara sa tina cont de vreo structura in bloc. Nu poate fi contactat si nu are operatiune de cautare. Printere, interfete de retea, mouse (pentru indicare), sobolani (pentru experimente de psihologie in laborator), precum si multe alte dispozitive care nu intra in categoria disk-ului pot fi privite ca dispozitive de caracter.
Aceasta schema de clasificare nu este perfecta. Unele dispozitve nu intra in nici una din aceste doua categorii. Ceasurile de exemplu, nu au blocuri care pot fi contactate si nici nu genereaza sau accepta fluxuri de caractere. Singurul lucru pe care il fac este sa produca intreruperi la intervale de timp bine stabilite. Nici ecranele cu scheme de memorie nu se incadreaza prea bine in acest model. Totusi, acest model este destul de general incat poate fi folosit ca baza pentru a face ca intr-un sistem de operare software-ul care lucreaza cu dispozitivele I/O sa fie independent. Sistemul de fisiere de exemplu, lucreaza doar cu dispozitive abstracte in bloc si lasa partea dependenta de dispozitiv in seama software-ului de nivel scazut numit si drivere pentru dispozitiv.
Dostları ilə paylaş: |