CATEGORII DOCUMENTE |
Translatarea nume fisier-inod - UNIX
Accesul initial la un fisier se face precizand numele caii sale (vezi apelurile sistem open, chdir si link). Deoarece nucleul opereaza intern cu inoduri (si nu cu numele caii), pentru a accesa un fisier converteste numele caii sale in inod. Algoritmul namei analizeaza numele caii componenta cu componenta, convertind fiecare componenta pe baza numelui ei si a directorului in care se executa cautarea, si returneaza eventual inodul corespunzator numelui caii dat ca intrare (vezi figura 4.11).
Fiecare proces are asociat un directorul curent, iar zona sa u area contine un pointer catre inodul directorului curent. Directorul curent al primului proces din sistem (procesul 0) este directorul radacina. Directorul curent al oricarui alt proces este directorul curent al procesului parinte din momentul crearii. Procesele schimba directorul lor curent folosind apelul sistem chdir. Cautarea incepe din directorul curent daca primul caracter din cale nu este '/', altfel va incepe din directorul radacina. In ambele situatii nucleul gaseste usor inodul din care incepe cautarea, deoarece directorul curent se regaseste in zona u area a procesului, iar inodul radacinii sistemului este memorata intr-o variabila globala.
Algoritmul namei utilizeaza inoduri intermediare in analiza unui nume de cale, numite inoduri de lucru (working inode). Primul inod de lucru, este cel din care se incepe cautarea. Pe durata fiecarui ciclu din namei, nucleul se asigura ca inodul de lucru este al unui director. Altfel, sistemul ar incalca asertiunea ca fisierele care nu sunt directoare pot fi doar noduri frunza in arborele de fisiere. Procesul trebuie sa aiba si permisiunea de a cauta in director (permisiunea de citire nu este suficienta). Pentru aceasta identificatorul utilizator (UID) al procesului trebuie sa se potriveasca cu identificatorul proprietarului sau grupului (GID) fisierului, sau fisierul trebuie sa permita tuturor utilizatorilor cautarea. Astfel cautarea esueaza.
algoritm namei /* converteste nume cale intr-un inod */
intrare: nume cale
iesire: inod blocat
else /* componenta nu este in director */
return (nici un inod);
}
return (inodul de lucru); }
Figura 4.11. Conversia nume cale-inod
Nucleul executa o cautare secventiala in fisierul director asociat inodului de lucru, incercand sa determine o potrivire intre componenta curenta a numelui caii si numele unei intrari in director. Pe baza deplasamentului (incepand cu 0) in fisierul director se determina blocul disc corespunzator (folosind algoritmul bmap) pe care-l citeste (folosind algoritmul bread ). Tratand continutul blocului ca o secventa de intrari in director, nucleul cauta o intrare care se potriveste cu componenta curenta din numele caii. Daca gaseste o potrivire, el inregistreaza numarul inodului din intrarea respectiva, elibereaza blocul (algoritm brelse) si vechiul inod de lucru (algoritm iput), si aloca un inod componentei pentru care s-a realizat potrivirea (algoritm iget'). Acest inod devine noul inod de lucru. Daca nucleul nu determina nici o potrivire, elibereaza blocul si ajusteaza deplasamentul cu numarul de octeti corespunzator unui bloc, determina numarul blocului disc corespunzator noului deplasament (algoritm bmap) si citeste urmatorul bloc. Nucleul repeta procedura pana gaseste o potrivire intre componenta din numele caii si un nume de intrare in director sau pana ajunge la sfarsitul directorului.
Sa presupunem, de exemplu, ca un proces vrea sa deschida fisierul '/etc/passwd'. Cand nucleul incepe analiza numelui caii, intalneste caracterul '/' si obtine inodul radacina al sistemului. Dupa ce inodul radacina devine inod de lucru, nucleul receptioneaza sirul 'etc'. In continuare se verifica daca inodul curent ("/") este al unui director si daca procesul are permisiunile necesare de a cauta in el. Dupa aceea nucleu acceseaza datele din directorul radacina bloc cu bloc, pana localizeaza o intrare pentru 'etc'. Gasind intrarea, nucleul elibereaza inodul pentru radacina (algoritm iput) si aloca un inod corespunzator numarului inodului intrarii gasite (algoritm iget). Dupa ce se asigura ca 'etc' este un director si ca are permisiunile necesare de cautare, nucleul cauta in 'etc' bloc cu bloc o intrare pentru fisierul 'passwd'. Dupa cum reiese din figura 4.10, a noua intrare in director este cea cautata ("passwd"). Cand o gaseste, nucleul elibereaza inodul pentru 'etc', aloca un inod pentru 'passwd' si, dupa ce constata ca nu mai sunt componente neanalizate, returneaza acest inod.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 821
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved