CATEGORII DOCUMENTE |
Exec intr-un sistem cu paginare - UNIX
Cand un proces invoca apelul sistem exec, nucleul citeste fisierul executabil in memorie din sistemul de fisiere, asa cum s-a aratat in capitolul 8. Intr-un sistem cu paginare la cerere, fisierul executabil poate fi totusi prea mare ca sa incapa in memoria principala.
De aceea, nucleul nu preasigneaza memorie pentru fisierul executabil, dar genereaza o intrerupere, asignandu-i cata memorie are nevoie. Acesta asigneaza mai intai tabele de pagini si descriptori de bloc disc pentru fisierul executabil, marcand intrarile in tabela de pagina "incarcare la cerere" (pentru date non-BSS) sau "initializare cu zero" (pentru date BSS ). Urmand o varianta a algoritmului read pentru citirea fisierului in memorie, procesul produce o intrerupere de validitate (Paragraful 12.5.1) la citirea fiecarei pagini.
Rutina de tratare a intreruperii retine daca pagina este marcata"incarcare la cerere", insemnand ca imediat va fi rescris continutul sau cu continutul fisierului executabil, astfel incat nu este necesara stergerea sa, sau daca este marcata " initializare cu zero", situatie in care continutul sau trebuie sa fie sters.
Aceasta schema prezinta si unele deficiente. In primul rand, un proces produce o intrerupere de pagina cand citeste fiecare pagina a fisierului executabil, chiar daca nu va trebui sa acceseze niciodata pagina respectiva. In al doilea rand, procesul "page-stealer" poate sa evacueze pagini din memorie inainte de terminarea apelului sistem exec, rezultand in plus doua operatii de transfer pentru fiecare pagina daca procesul solicita pagina respectiva curand. Pentru a face apelul sistem exec mai eficient, nucleul poate solicita pagini direct din fisierul executabil daca datele sunt aliniate corespunzator dupa cum indica numarul magic. Totusi, folosirea algoritmilor standard pentru accesarea unui fisier (ca, de exemplu, bmap), ar face prea costisitoare paginarea la cerere prin blocurile de indirectare din cauza acceselor multiple la buffere-le cache necesare pentru citirea unui bloc. Nucleul seteaza diferitii parametri I/O in zona u area pe timpul apelului sistem read. Daca un proces provoaca o intrerupere de pagina pe timpul unui apel sistem read cand incearca sa copieze datele in spatiul utilizator, acesta trebuie sa rescrie aceste campuri in zona u area pentru a citi pagina din sistemul de fisiere. De aceea, nucleul nu poate folosi algoritmii obisnuiti pentru intreruperile de pagina. Algoritmii sunt reentranti in cazurile obisnuite deoarece fiecare proces are o zona u area proprie iar procesul nu poate executa simultan mai multe apeluri sistem.
Figura 12.6 Maparea unui fisier intr-o regiune
Pentru a incarca o pagina direct din fisierul executabil, nucleul gaseste toate numerele blocurilor disc ale fisierului executabil cand apeleaza exec si ataseaza lista lor la inodul fisierului.
Cand seteaza tabelele de pagini pentru un astfel de fisier executabil, nucleul marcheaza descriptorul de bloc disc cu numarul blocului logic (pornind de la blocul 0 din fisier ) care contine pagina; rutina de tratare a intreruperii de validitate foloseste aceasta informatie mai tarziu pentru a incarca pagina din fisier. Figura 12.6 prezinta un aranjament tipic, in care descriptorul de bloc disc indica faptul ca pagina se gaseste la deplasamentul de bloc logic 84 in fisier. Nucleul urmareste pointerul de la regiune catre inod si gaseste numarul blocului disc corespunzator (279).
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 849
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved