Gestionarea fisierelor in UNIX
1. Generalitati
UNIX-ul recunoaste 6 tipuri de fisiere:
1) Fisierele obisnuite ("regular files") contin date, fie sub forma de text (sfarsitul unui astfel de fisier este marcat prin CTRL/D), fie sub forma binara. Nucleul nu face distinctie intre cele doua formate, iar interpretarea continutului fisierelor obisnuite este sarcina exclusiva a programelor de aplicatie. SO nu recunoaste si nu controleaza nici o structurare logica a informatiei din fisierele obisnuite. Un astfel de fisier este un sir de octeti de lungime variabila (modelul byte-stream). Programele utilizator sunt cele care structureaza si interpreteaza informatia din fisierele obisnuite (de exemplu fisierele text sunt linii de caractere ASCII separate prin newline - 0X0A). Extensia fisierelor este doar o conventie intre programele utilizatorilor; SO nu recunoaste separat extensia unui fisier, dar compilatoarele o analizeaza.
2) Fisierele director contin descrieri ale altor fisiere, care la randul lor pot fi directoare. In versiunile mai noi de UNIX, fiecare intrare de director are o dimensiune variabila, fiind formata din 3 campuri:
- primul octet retine lungimea totala a intrarii;
- al doilea camp reprezinta numele fisierului, fiind de lungime variabila;
- ultimul camp reprezinta pointerul la i-nod-ul corespunzator.
3) Fisierele speciale identifica fiecare cate un dispozitiv periferic. Nu ocupa spatiu pe disc, ci numai intrari in director.
4) Fisierele legaturi simbolice (soft links) sunt in esenta nume alternative pentru un fisier, continand numele de cale complet al acestuia. Numele alternative pot fi obtinute si prin hard links, care sunt intrari in directoare ce refera acelasi i-nod. Un director contine totdeauna cel putin doua legaturi hard: "." - legatura catre el insusi si ".." - legatura catre directorul parinte.
5) Fisierele conducte (FIFO) reprezinta un tip special de fisiere, utilizate pentru comunicatii intre procese prin mecanismul pipe.
6) Fisierele socket reprezinta un tip special de fisiere, utilizate pentru comunicatii intre procese in retele de calculatoare, dar numai in familia UNIX domain.
Fiecare volum are propriul sau sistem de fisiere, arborescent, a carui radacina poate fi atasata la orice catalog din arborele sistemului de fisiere existent in acel moment. Atasarea se realizeaza prin operatia de montare (comanda mount) si are ca efect o extindere a sistemului de fisiere cu subarborele corespunzator volumului montat; operatia se executa pe fisiere director vide, create special in acest scop. Operatia complementara se realizeaza prin comanda unmount. Nu este permisa realizarea de legaturi intre fisiere de pe volume diferite.
2. Structura informatiei pe disc
Sub controlul UNIX, utilizatorii lucreaza cu un sistem logic de fisiere care poate cuprinde mai multe sisteme fizice de fisiere. Sistemele fizice de fisiere pot fi situate pe dispozitive periferice diferite.
Discurile de capacitate mare pot fi partitionate in partitii, fiecare putand detine un alt sistem fizic de fisiere. Partitionarea prezinta avantajele:(a) siguranta mai mare (o pana SW afecteaza o singura partitie); (b) specializarea sistemului de fisiere; (c) impiedicarea unor programe de a folosi tot spatiul liber. Eficienta poate fi marita daca pentru fiecare partitie se folosesc parametri diferiti (de ex. dimensiuni diferite pentru blocuri, pentru fragmente, etc.)
Montarea sistemelor fizice de fisiere se poate face si in sistemele distribuite de fisiere (NFS - Network File System). Astfel, intr-un director vid al nodului curent se poate monta sistemul de fisiere al unui nod situat la distanta.
La UNIX, structura unui sistem fizic de fisiere este urmatoarea:
1) Primul bloc (boot block) contine un program care apeleaza un incarcator, acesta realizand incarcarea partii rezidente a SO.
2) Superblocul contine informatii de sistem precum: dimensiunea unui bloc si a unui fragment, dimensiunea totala a discului, lista de blocuri libere si lista de inoduri libere.
3) Zona de inoduri (catalogul de baza) contine etichete de fisier, denumite noduri index (inoduri). Un inod contine urmatoarele informatii:
a) identificatorul numeric al proprietarului fisierului (UID);
b) identificatorul numeric al grupului proprietarului (GID);
c) tipul fisierului si protectia fisierului, codificate in 2 octeti (fig. 6.24). Bitul sticky bit are semnificatie numai pentru fisierele executabile: cand este 1, fisierul corespondent va fi salvat in zona de swaping dupa executie;
d) contorul legaturilor hard indica numarul de directoare care contin referinte la acest inod. Atunci cand devine nul, inodul si spatiul ocupat de fisier sunt eliberate;
e) dimensiunea fisierului;
f) data ultimului acces la fisier, a ultimei modificari a fisierului si a ultimei modificari a inodului;
g) tabela de alocare a fisierelor;
4) zona de swapping contine imaginile proceselor utilizator atunci cand acestea sunt evacuate din MI.
5) Continut.
Ïn fig. 6.25 este reprezentata structura informatiei dintr-o partitie pentru sisteme UNIX clasice.
3. Structuri de date pentru accesul la fisiere
Legatura intre fisierele de pe disc, procesele utilizator si SO este realizata de urmatoarele tabele, gestionate de nucleu in MI (fig. 6.26):
Fig. 6.26
1) Tabela descriptorilor fisierelor utilizatorului (TDFU) , cate una pentru fiecare proces. Aceasta tabela contine cate o intrare pentru fiecare fisier deschis sau creat de procesul utilizator asociat. Atunci cand un proces creaza sau deschide un fisier, i se returneaza indexul intrarii corespunzatoare din aceasta tabela (index numit descriptor de fisier). Prin conventie, descriptorul 0 este atasat fisierului standard de intrare, descriptorul 1 este atasat fisierului standard de iesire, iar descriptorul 2 este atasat fisierului standard de erori. In fiecare intrare din tabela exista cate un pointer catre intrarea corespunzatoare din tabela fisierelor. Prin apelul sistem dup() se poate copia o intrare in TDFU.
2) Tabela fisierelor (TF) este unica in sistem si contine cate o intrare aferenta fiecarei deschideri sau creari de fisier (daca un fisier a fost deschis de n ori, in TF exista n intrari, cate una pentru fiecare deschidere). O intrare in TF cuprinde campurile:
a) Pointer catre intrarea corespunzatoare fisierului din tabela inodurilor.
b) Deplasament R/W, care reprezinta deplasamentul fata de inceputul fisierului al urmatorului octet de scris sau de citit. Fiecare acces pentru citire sau scriere actualizeaza acest deplasament. In fig. 6.26, procesele 1 si 3, neinrudite, utilizeaza acelasi fisier (intrarea 3 din TDFU), dar fara a partaja si deplasamentul in fisier. Cand un proces genereaza un fiu, (ex. procesele 1 a generat procesul 2 din fig. 6.26), cele doua procese partajeaza aceleasi intrari in TF. O modificare a deplasamentului efectuata de oricare dintre procesele inrudite va fi vizibila si pentru celelalte procese inrudite.
c) Tipul accesului la deschidere.
d) Contor al numarului de referiri din tabelele TDFU. Acesta are initial valoarea 0 si poate fi incrementat prin oricare dintre apelurile sistem open(), creat(), fork(), dup(). Cand contorul devine 0 (in urma unui apel sistem close()) intrarea corespunzatoare din TF este eliberata.
3) Tabela inodurilor (TI), unica in nucleu, contine cate o intrare pentru fiecare fisier deschis. Cand are loc deschiderea unui fisier, informatiile din inodul de pe disc sunt copiate in MI. Orice modificare ulterioara a fisierului deschis va fi reflectata in versiunea din MI a inodului, versiune care nu va fi rescrisa imediat pe disc. Daca un proces deschide un fisier deschis deja in aceeasi sesiune de lucru (activ), procesul va partaja intrarea in TI impreuna cu celelalte procese care utilizeaza fisierul (de ex. procesele 1,2 si 3 din fig. 6.26). I-nodul rezident in memorie contine, in plus fata de informatiile din i-nodul de pe disc, urmatoarele informatii:
a) Numarul logic al dispozitivului pe care se afla fisierul.
b) Numarul inodului in lista de inoduri de pe disc.
c) Pointeri spre alte inoduri din MI; pentru gestionare, inodurile ocupate sunt aranjate in cozi conform unei functii de dispersie (hashing), ce tine seama de numarul dispozitivului logic si de numarul inodului respectiv iar inodurile libere sunt aranjate in cozi de inoduri libere.
d) Contor al referirilor inodului respectiv, care indica numarul de deschideri ale fisierului si este incrementat la fiecare apel sistem open(), creat(), fork() si dup(). Daca in urma unei inchideri de fisier acest contor devine 0, atunci inodul din MI va fi scris in inodul corespunzator de pe disc si apoi va fi eliberat.
e) Starea inodului.
4) Tabela sistemelor de fisiere montate (in fig. 6.28, Tabela de montare), unica in nucleu, este parcursa atunci cand starea inodului din memorie este "punct montat". Consideram exemplul din fig. 6.27 in care se monteaza sistemul de fisiere gazduit de fisierul special de tip bloc /dev/dsk1 (care reprezinta un sistem fizic de fisiere cu superbloc, lista de inoduri si inod radacina); montarea se face in directorul /usr.
Tabela contine informatii de identificare aferente fiecarui sistem de fisiere activ, in fiecare intrare din tabela regasindu-se informatii ca (fig. 6.28):
- numarul logic al dispozitivului de pe care se monteaza sistemul de fisiere;
- un pointer la o zona de memorie ce contine superblocul volumului ce se monteaza;
- pointer catre inodul radacina al sistemului ce se monteaza;
- pointer catre inodul directorului ce este punct de montare.
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |