Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Incarcarea proceselor - UNIX

linux



+ Font mai mare | - Font mai mic



Incarcarea proceselor - UNIX

Procesul 0, incarcatorul, este singurul proces care incarca procese in memorie de pe dispozitivele de swap. La sfarsitul initializarii sistemului, procesul incarcator intra intr-o bucla infinita, in care singura sa sarcina este sa faca incarcarea/evacuarea proceselor. El incearca sa incarce procese din zona de swap, si evacueaza procese daca este nevoie de spatiu in memoria principala.



Daca nu are nici o sarcina de rezolvat, procesul incarcator se pune in asteptare(de exemplu, daca nu exista procese de incarcat) sau daca este incapabil sa faca altceva (nu exista procese care pot fi alese pentru a fi evacuate); nucleul il trezeste periodic, asa cum se va vedea in continuare.

Nucleul planifica procesul incarcator sa se execute asa cum planifica orice alt proces,dar acesta se executa numai in modul kernel.

Procesul incarcator nu face apeluri de functii sistem dar utilizeaza functii interne ale nucleului pentru a executa transferul.

algoritm swapper /*incarca procesele evacuate in memorie*/

intrare: nici una;

iesire: nici una;

if (este loc suficient pentru proces in memoria principala)

/* bucla2:se afla aici in algoritmul revizuit */

for (toate procesele incarcate in memoria principala, care nu sunt

in starea zombie si nu sunt blocate in memorie)

if (procesul ales nu este in asteptare sau cerintele de rezidenta

nu sunt satisfacute )

sleep(eveniment : trebuie sa incarce un proces);

else

evacueaza procesul;

goto la bucla; /*goto bucla 2 in algoritmul revizuit */

Figura 11.9 Algoritmul swapper

Rutina de tratare a intreruperii de ceas masoara timpul cat fiecare proces a stat in memoria interna sau a fost evacuat. Cand procesul incarcator este trezit pentru a incarca procese, el verifica toate procesele care sunt in starea 'gata de executie' dar evacuate si il selecteaza pe acela care a stat cel mai mult timp evacuat.

Daca exista suficienta memorie libera disponibila, procesul incarcator incarca procesul in memorie, executand operatiile inverse evacuarii: aloca memorie fizica, citeste procesul din zona de swap si elibereaza spatiul de swap.

Daca procesul incarcator a terminat cu succes incarcarea unui proces, el cauta un alt proces in starea 'gata de executie' dar evacuat pentru a-l incarca in memorie si repeta procedura descrisa mai inainte. Poate aparea, in final, una din urmatoarele situatii:

Nu exista procese in starea 'gata de executie' pe dispozitivul de swap : procesul incarcator trece in starea de asteptare pana cand il trezeste un proces de pe dispozitivul de swap sau pana cand nucleul evacueaza un proces care este in starea 'gata de executie ' (a se revedea diagrama starilor din figura 7.1).

Procesul incarcator gaseste un proces potrivit pentru a fi incarcat, dar sistemul nu dispune de memorie suficienta: procesul incarcator incearca sa evacueze un alt proces, si, daca reuseste, reia algoritmul de incarcare, cautand un proces pentru a-l incarca in memorie.

Daca procesul incarcator trebuie sa evacueze un proces, el examineaza toate procesele din memorie. Procesele in starea 'zombie' nu vor fi evacuate deoarece ele nu ocupa memorie fizica; procesele blocate in memorie pe timpul operatiilor cu regiuni nu vor fi de asemenea evacuate. Nucleul evacueaza mai degraba procesele in asteptare decat cele in starea 'gata de executie', deoarece procesele in starea 'gata de executie ' au sanse mult mai mari sa fie planificate pentru executie. Alegerea procesului in asteptare care se evacueaza se face in functie de prioritate si de timpul cat procesul a stat in memorie. Daca nu sunt procese in asteptare in memorie, alegerea unui proces in starea 'gata de executie ' pentru a fi evacuat se face in functie de valoarea nice a procesului si de timpul cat acesta a stat in memorie.

Un proces in starea 'gata de executie ' trebuie sa stea in memorie cel putin 2 secunde inainte de a fi evacuat, iar un proces poate fi incarcat doar daca a fost evacuat de cel putin timp de 2 secunde. Daca procesul incarcator nu gaseste nici un proces de evacuat si daca nici unul dintre procesele care trebuiesc incarcate nu au stat evacuate cel putin 2 secunde, atunci procesul incarcator se pune in asteptare pe evenimentul: doreste sa incarce un proces in memorie dar nu are loc suficient. Ceasul va trezi procesul incarcator o data pe secunda. Nucleul trezeste de asemenea procesul incarcator daca un alt proces intra in starea de asteptare, devenind astfel mai potrivit pentru a fi evacuat decat procesele examinate anterior. Daca procesul incarcator evacueaza un proces sau daca se pune in asteptare pentru ca nu poate evacua un proces, el isi va relua executia de la inceputul algoritmului, incercand sa incarce un proces.

Figura 11.10 Secventa de operatii de evacuare/incarcare

Figura 11.10 descrie cinci procese si timpii pe care acestea i-au petrecut in memorie sau in zona de evacuare ca urmare a trecerii printr-o secventa de operatii evacuare/incarcare. Pentru simplificare sa presupunem ca toate procesele lucreaza intens cu UCP si nu apeleaza nici o functie sistem; din aceasta cauza schimbarea contextului va avea loc doar ca rezultat al intreruperilor de ceas la intervale de o secunda. Procesul incarcator se executa cu cea mai mare prioritate de planificare, astfel se executa rapid la intervale de o secunda, daca are ce face. Mai mult, sa presupunem ca procesele sunt de aceeasi marime iar sistemul poate contine cel mult doua procese simultan in memoria principala. Initial, procesele A si B sunt in memoria principala, iar celelalte procese sunt evacuate. Procesul incarcator nu poate evacua/incarca nici un proces timp de 2 secunde, deoarece nici un proces nu a stat in memorie sau pe dispozitivul de swap timp de 2 secunde (cerinta de rezidenta), dar la sfarsitul celei de-a doua secunde, el evacueaza procesele A si B si incarca procesele C si D; incearca sa incarce si procesul E, dar nu poate deoarece nu mai are loc in memorie. La secunda 3 procesul E este posibil sa fie ales pentru a fi incarcat deoarece el a stat in zona de swap 3 secunde, dar procesul incarcator nu poate evacua procese din memoria principala deoarece timpul lor de rezidenta este sub 2 secunde. La sfarsitul celei de-a 4-a secunde, procesul incarcator evacueaza procesele C si D incarca procesele E si A.

Procesul incarcator alege procesele de incarcat bazandu-se pe marimea timpului cat acestea au stat evacuate. Un alt criteriu ar putea fi incarcarea procesului in starea 'gata de executie' care are prioritatea cea mai mare, deoarece acesta are o probabilitate mai mare de a fi executat.

Algoritmul pentru alegerea unui proces care urmeaza sa fie evacuat pentru a face loc in memorie are, totusi, serioase neajunsuri. Mai intai procesul incarcator evacueaza un proces bazandu-se pe prioritatea acestuia, pe timpul de rezidenta in memorie si pe valoarea nice. Desi evacueaza un proces numai pentru a crea spatiu pentru un proces care urmeaza sa fie incarcat, el poate evacua un proces care sa nu asigure memorie suficienta pentru procesul ce se va incarca. De exemplu, daca procesul incarcator incearca sa incarce un proces care ocupa 1Mo iar sistemul nu contine memorie libera, este inutil sa evacueze un proces care ocupa numai 2 Ko de memorie. O strategie alternativa ar fi sa evacueze grupuri de procese, dar numai daca acestea asigura memorie suficienta pentru procesul care trebuie incarcat.

In al doilea rand, daca procesul incarcator se pune in asteptare deoarece nu poate gasi memorie suficienta pentru a incarca un proces, el cauta din nou un proces pentru a-l incarca desi alesese unul anterior. Motivul este acela ca alte procese evacuate il pot trezi intre timp si acestea pot fi mai potrivite pentru incarcare decat procesul ales anterior. In unele implementari, procesul Incarcator Incearca sa evacueze mai multe procese mai mici pentru a face loc unui proces mare sa fie incarcat inainte sa caute alt proces eligibil pentru incarcare; in aceasta consta revizuirea algoritmului procesului incarcator prezentata In figura 11.9.

In al treilea rand, daca procesul Incarcator alege pentru evacuare un proces In starea 'gata de executie', este posibil ca acesta sa nu se fi executat de cand el a fost Incarcat mai Inainte. Figura 11.11 ilustreaza un asemenea caz, In care nucleul Incarca procesul D la secunda 2, planifica procesul C si apoi, la secunda 3, evacueaza procesul D in favoarea procesului E (ca urmare a actiunii valorii nice ) chiar daca procesul D nu s-a executat.

Figura 11.11 Neajunsuri la incarcare/evacuare

Un ultim inconvenient este demn de mentionat: daca procesul incarcator incearca sa evacueze un proces dar nu gaseste spatiu in zona de swap, poate rezulta o blocare a sistemului daca sunt indeplinite urmatoarele patru conditii:

toate procesele din memoria principala sunt inactive (sunt in asteptare);

toate procesele in starea 'gata de executie ' sunt evacuate;

nu exista spatiu pe dispozitivul de swap pentru noi procese;

nu exista spatiu in memoria principala pentru procesele care trebuie incarcate.

Preocuparile pentru rezolvarea deficientelor procesului incarcator prezentate mai inainte au scazut in ultimii ani, cand au fost implementati algoritmii de paginare la cerere pentru sistemele UNIX.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1028
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved