CATEGORII DOCUMENTE |
Sistemul de fisiere
Sistemul de fisiere are ca principala sarcina gestionarea in mod transparent pentru utilizator a accesului la entitatile de stocare a datelor - numite fisiere - care sunt memorate
pe medii nevolatile.
Operatiile realizate de catre un sistem de fisiere se refera la:
denumirea si manipularea fisierelor, acestea fiind accesibile utilizatorilor ca entitati cu nume si asupra carora se pot efectua operatii ( citire, scriere, executie );
asigurarea persistentei datelor, care presupune pe de o parte independenta acestora fata de crearea sau distrugerea proceselor din sistem, si pe de alta parte posibilitatea refacerii structurii si a continutului lor in caz de accident;
asigurarea mecanismelor de acces concurent al proceselor din sistem la datele stocate.
1. Structuri si tipuri de fisiere
Din punctul de vedere al structurii, exista mai multe categorii de fisiere:
secventa de octeti: fisierul se prezinta ca o secventa de octeti a carei interpretare este lasata la latitudinea programelor utilizator. Acest tip ofera maximum de flexibilitate
in reprezentarea datelor, fiind utilizat in sisteme de operare precum UNIX, Windows etc.;
secventa de inregistrari: fisierul este organizat ca succesiune de inregistrari de lungime fixa, operatiile de citire si scriere realizandu se la nivel de inregistrare. In prezent, aceasta structura nu mai este utilizata;
structura arborescenta: fisierul este format din inregistrari care contin atat informatia propriu-zisa, cat si un camp cheie ( situat pe o pozitie prestabilita in cadrul fiecarei inregistrari ). Valoarea campului cheie este folosita de catre sistemul de operare pentru gestionarea unei structuri logice interne de tip arbore a fisierelor. O astfel de structura este utilizata in calculatoare de mare capacitate dedicate procesarii masive de date.
Din punctul de vedere al tipului, fisierele pot fi:
fisiere normale: contin informatie utilizator;
directoare: fisiere sistem destinate gestionarii structurii sistemului de fisiere;
fisiere speciale de tip caracter/bloc: destinate utilizarii in conjunctie cu dispozitivele periferice;
legaturi simbolice: furnizeaza posibilitatea accesarii unui acelasi fisier fizic pe cai logice multiple.
Fisierele normale sunt la randul lor de doua tipuri:
tipul ASCII: fisierul este format din linii de text terminate cu caracterele de control
return si/sau line feed;
tipul binar: fisierul este organizat ca o secventa de octeti, dar totusi sistemul de operare ii asociaza o anumita structura interna ( cum este de exemplu cazul fitierelor executabile sau al arhivelor ).
2. Operatii cu fisiere
Desi alocarea spatiului pe discul magnetic pentru un fisier se face la nivel de blocuri ( avand dimensiune fixa, cuprinsa intre 512 octeti si 4K octesi ), de regula neadiacente, utilizatorul manipuleaza un fisier ca pe o secventa contigua de octeti in cadrul careia se poate pozitiona oriunde si de unde poate citi sau inscrie numarul dorit de octeti.
Setul de operatii pentru care sistemul de operare asigura primitive destinate lucrului
cu fisiere cuprinde urmatoarele functii de biblioteca:
create - crearea unui nou fisier;
open - intentia unui proces de a accesa date continute intr-un fisier existent;
delete - stergerea unui fisier;
read - citirea din fisier a unui numar specificat de octeti, incepand de la pozitia curenta, in spatiul de adresare al procesului care a initiat operatia;
write - scrierea intr-un fisier a unui numar specificat de octeti, incepand de la pozitia curenta, cu date continute in spatiul de adresare al procesului care a initait operatia;
append - adaugarea de date la sfarsitul unui fisier existent;
close - eliberarea structurilor de date sistem, ca urmare a terminarii operatiilor pe care un proces le-a executat asupra unui fisier;
seek - seteaza pozitia curenta in fisier;
rename - redenumeste un fisier existent;
setattribute, getattribute - operatii de setare, respectiv de citire a atribuitelor asociate unui fisier.
Accesarea fisierelor urmeaza secventa de operatii open - read - write - close. Acestor operatii le corespund functii de biblioteca pe care utilizatorul le poate apela din program. La randul lor, aceste functii initiaza apeluri sistem.
3. Directoare
Directoarele realizeaza legatura intre numele atribuit de utilizator unui fisier si localizarea fizica pe disc a informatiei asociate fisierului respectiv, operatie numita in mod uzual mapare.
Structura unui director poate fi asimilata cu aceaa a unei tabele in care fiecare intrare este asociata unui fisier si contine numele fisierului si adresa unei structuri de date sistem. Acesta structura de date contine la randul ei atributele fisierului si informatii despre localizarea acestuia pe disc. Principalele atribute ce pot caracteriza un fisier sunt:
tipul fisierului - normal, director, special sau legatura simbolica;
informatii suplimentare legate de fisier ( ASCII/binar, tipul dispozitivului periferic asociat );
informatie pentru controlul accesului la fisier ( cine poate accesa fisierul si ce operatii se pot efectua asupra fisierului );
momentul crearii, al ultimului acces si al ultimei modificari a fisierului;
contor indicand numarul de legaturi catre fisierul respectiv;
dimensiunea fisierului;
identificatorul utilizatorulu care a creat fisierului ( proprietarul fisierului ).
Intr-un context mai general, o intrare intr-un director poate indica un alt director, ceea ce conduce la o organizare arborescenta a sistemului de fisiere, in care "frunzele" sunt fisierele propriu-zise, iar nodurile intermediare si nodul radacina sunt directoare. In acest caz, identificarea unui anumit fisier se va face enumerand directoarele ce trebuie parcurse de
la nodul radacina si pana la fisierul respectiv.
Setul de operatii asigurate de catre sistemul de operare pentru lucrul cu directoare cuprinde:
create - creare director;
open - deschidere director ( de exemplu, in scopul citirii si afisarii intrarilor );
delete - stergere director;
close - eliberare structuri de date sistem care au fost alocate unui director ca urmare a unei operatii open;
readdir - returneaza urmatoarea intrare intr-un director; continutul directoarelor poate fi citit si prin intermediul operatiei read ( definita pentru fisiere ), dar aceasta returneaza intreaga tabela asociata directorului respectiv, obligand utilizatorul sa cunoasca structura acesteia in scopul regasirii informatiilor cautate;
rename - redenumire director;
link - stabilirea unei legaturi simbolice care are ca efect aparitia numelui unui acelasi fisier in mai multe locuri in cadrul sistemului de fisiere;
unlink - stergerea unei intrari intr-un director.
4. Implementarea sistemului de fisiere
4.1. Implementarea fisierelor
Cea mai simpla modalitate de implementare a fisierelor este aceea de stocare a acestora in blocuri cotigue pe disc. Dezavantajul unei astfel de metode consta in faptul ca nu poate modela in mod eficient modificarea dinamica a dimensiunii fisierelor decat cu riscul introducerii unei fragmentari a discului magnetic ( zone nealocate insumand dimensiuni importante, dar imposibil de folosit deoarece nu sunt adiacente ).
De aceea, in general, fisierele se memoreaza sub forma unor blocuri raspandite pe intraga suprafata a discului, gestionarea lor constituind una dintre sarcinile sistemului de operare.
In UNIX, implementarea fisierelor se bazeaza pe o structura de date numita i-nod (
index node ) care contine ( fiecarui fisier ii corespunde un i nod ):
atributele fisierului respectiv;
adresele pe disc ale blocurilor care stocheaza informatia din fisierul respectiv.
I-nodurile sunt la randul lor stocate pe disc ca intrari intr-o tabela de i-noduri, intr-o zona dedicata de sistem acestui scop, si pot fi referite precizand indexul lor in aceasta tabela.
O alta implementare destul de raspandita este cea de tipul FAT ( File Allocation
Table ) care foloseste un mecanism de alocare cu lista inlantuita de indecsi ( Figura 24 ).
Figura 24
4.2. Implementarea directoarelor
In UNIX, structura unei intrari de director are forma ( Figura 25 ):
Figura 25
In momentul deschiderii unui fisier este necesar ca, pornind de la numele sau, sistemul de fisiere sa-i poata localiza blocurile de date de pe disc. Sistemul de fisiere cauta mai intai directorul radacina al carui i-nod se afla la o adresa predefinita pe disc.
Organizarea pe disc a diferitelor componente ale sistemului de fisiere in UNIX este redata in Figura 26:
Figura 26
Blocul de boot contine proceduri utilizate de sistem la initializare. Superblocul contine informatii esentiale legate de sistemul de fisiere ( numarul de i-noduri, numarul de blocuri, o lista a blocurilor libere de pe disc ). Lista de i-noduri contine toate i-nodurile definite in sistem. Primul i-nod din lista este destinat gestiunii blocurilor defecte, in timp ce
al doilea este i-nodul asociat directorului radacina. Urmeaza zona alocata blocurilor de date care contin atat date utilizator, cat si date utilizte de sistemul de fisiere.
In sistemele care utilizeaza mecanisme de implementare de tip FAT, structura unei intrari de director are forma din Figura 27:
Figura 27
Principalul dezavantaj al acestei metode este absenta mecanismului de creare a legaturilor la fisiere. Pentru realizarea unor legaturi ar fi necesar ca o aceeasi intrare sa figureze in doua sau mai multe directoare, avand drept consecinta duplicarea unor date legate de pozitionarea pe disc, de timpul si dimensiunea fisierului respectiv ( ceea ce poate conduce la inconsistente ).
5. Acces concurent la nivel de proces
Fiecare proces in UNIX are asociat o tabela de descriptori ( descriptor table ). De fiecare data cand un proces deschide un fisier, apelul sistem open ii va returna un descriptor de fisier pe care procesul il va memora in tabela de descriptori si pe care il va folosi la toate referirile ulterioare pe care le va face la fisierul respectiv, pana cand acesta va
fi inchis. Descriptorul de fisier este un intreg care reprezinta un index in tabela fisierelor deschise ( open-file table ), tabela pe care sistemul de operare o intretine, si care memoreaza informatii despre toate fisierele deschise in sistem. O intrare in acesta tabela
contine urmatoarele informatii:
un pointer ( indicator ) in cadrul fisierului care indica locatia in fisier unde se va face urmatoarea operatie citire/scriere;
un camp care indica daca fisierul a fost deschis pentru citire, scriere sau citire/scriere;
un contor pentru numarul de descriptori care adreseaza intrarea respectiva.
O alta structura de date utilizata de sistem este tabela rezidenta de i-noduri ( in- memory i-node table ) in care se pastreaza atat informatiile continute in cadrul i-nodului,
cat si date strict necesare pentru controlul concurentei accesului, cum ar fi:
un camp de blocare ( lock ) ce asigura accesul exclusiv la i-nod ( la un moment dat se permite unui singur proces sa modifice continutul i-nodului );
un contor al numarului de intrari in tabela fisierelor deschise care adreseaza i nodul respectiv;
numarul i-nodului la care se refera ( din tabela de i-noduri de pe disc ); | ||
numarul dispozitivului de I/O caruia ii este asociat fisierul; | ||
pointeri catre alte i-noduri din tabela rezidenta care implementeaza tabele |
de |
|
dispersie hash table ) utilizate de sistem pentru a micsora timpul de cautare |
in |
tabela rezidenta; tabelele de dispersie sunt utilizate atat in conjunctie cu i-nodurile libere, cat si cu cele active.
In cazul in care mai multe procese folosesc in mod concurent un acelasi fisier apare necesitatea implementarii unor mecanisme suplimentare bazate pe sectiuni critice ( sectiunea critica este un segment de cod al unui proces in care se citesc variabile comune, se reactualizeaza tabele, se scriu fisiere etc.; mai mult, fiecare proces trebuie sa ceara permisiunea de a intra in propria sectiune critica si sa anunte celelalte procese atunci cand paraseste aceasta sectiune ) sau/si semafoare ( semaforul este o variabila de tip intreg care,
in afara de initializare, poate fi accesata numai prin intermediul a doua operatii standard de
tip atomic, si anume wait ( asteapta ) si signal ( semnalizeaza ); semafoarele se utilizeaza in rezolvarea unor probleme de sincronizare ) care sa gestioneze accesul la date, in scopul pastrarii consistentei acestora. Astfel de mecanisme asigura accesul exclusiv la fisier al procesului care realizeaza in mod curent o anumita operatie, blocand fisierul pentru toate
celelalte procese. Blocarea se face la nivel de componenta a fisierului ( inregistrare ), cu respectarea unor conditii mai restrictive pentru operatia de scrire.
Sistemele care se conformeaza standardului POSIX definesc un mecanism eficient si
flexibil ce asigura blocarea unor zone in cadrul unui fisier, definite cu ajutorul a doi parametri: deplasament fata de inceputul fisierului si dimensiune. Mecanismul foloseste zavoare comune ( shared locks ) si zavoare exclusive ( exclusive locks ). Zavoarele comune se pot asocia unor zone, chiar daca parti ale acestei zone sunt deja blocate prin intermediul altor zavoare comune. Zonele blocate cu zavoare comune se pot suprapune, spre deosebire de zavoarele exclusive care se pot asocia numai unor zone libere. Primitivele utilizate de mecanismul de "zavorare/blocare" pot fi primitive cu blocare ( un proces care incearca punerea unui zavor exclusiv pe ozona care nu este libera este blocat pina in momentul in care zone se elibereaza ) sau fara blocare ( returneaza imediat cu un cod ce indica succesul sau insuccesul operatiei, in caz de insucces procesul apelant putand face o noua tentativa la un moment ulterior ).
6. Protectia fisierelor
Intr-un sistem multi-utilzator este imortant ca fiecare utilizator sa poata defini drepturile de acces asupra propriilor fisiere, precizand cine le poate accesa si ce operatii poate efectua asupta lor.
Una dintre metodele folosite in acest scop este implementata in sistemele UNIX si consta in asocierea cu fiecare fisier sau director a unui grup de 9 biti ( cunoscuti sub numele
de bitii rwx ), care indica permisiunea de citire, scriere sau executie pentru proprietarul fisierului, pentru grupul de utilizatori din care face parte proprietarul si pentru ceilalti utilizatori din sistem ( Figura 28 ).
Figura 28
Grupul de 9 biti ( rwx rwx rwx ) este continut in unul dintre atributele care se regasesc in i-nodul asociat, atribut reprezentat printr-o variabila intreaga ce codifica
"modul" de acces asociat fisierului sau directorului respectiv. In cazul directoarelor, drepturile de acces au o semnificatie usor diferita: permisiunea de citire indica dreptul de a crea un fisier nou sau modifica numele sau atributele unui fisier deja existent in cadrul
directorului respectiv, iar permisiunea de executie permite cautarea in cadrul directorului
respectiv.
O alta metoda de protectie a fisierelor ( utilizata de sistemele Windows ) asociaza fiecarui fisier o lista de control al accesului ( access control list - ACL ) care contine mai multe intrari de control al accesului ( access control entries - ACE ). Fiecare ACE specifica drepturile de acces pentru un utilizator sau un grup de utilizatori, continand un identificator al utilizatorului sau grupului de utilizatori la care se refera, o descriere a drepturilor pe care le confera asupra fisierului si alte optiuni, cum ar fi cea legata de posibilitatea ca un fisier creat in cadrul unui director sa mosteneasca drepturile de acces ale acestuia. In momentul in care un utilizator incearca sa acceseze fisierul, se verifica automat
in cadrul listei de control asociate fisierului ( ACL ) daca este vorba de un acces corect sau nepermis.
7. Performantele sistemelor de fisiere
Deoarece operatii de genul cautarea unui fisier necesita accesuri multiple la disc, imbunatatirea timpilor de acces se realizeaza prin pastrarea in memoria principala a informatiilor cel mai des utilizate, minimizand pe cat posibil numarul de accesuri la disc. Aceasta functie poate fi implementata sub forma unui mecanism de tipul cache care consta
in alocarea si gestionarea de catre sistem a unei zone in memoria principala unde vor fi stocate atat structurile de date utilizate pentru administrarea sistemului de fisiere ( i-noduri, blocuri ce contin directoare ) cat si blocurile ce contin informatie utilizator ( care sunt cel mai frecvent accesate ). Astfel, operatiile efectuate asupra datelor din zona cache se
realizeaza in conjunctie cu cpiile din memoria principala ale datelor originale ( care au fost preluate de pe disc ).
Utilizarea mecanismului descris anterior asigura performante in domeniul timp, dar, pentru a nu crea probleme legate de consistenta informatiilor ( modificarile facute asupra datelor din memoria principala nu se reflecta in mod implicit si asupra datelor de pe disc ), este necesar sa se foloseasca una dintre urmatoarele politici de actualizare a informatiilor de
pe disc:
politica write-through - consta in actualizarea informatiilor pe disc dupa fiecare modificare a cpiei lor din memoria principala; aceasta politica se aplica de obicei datelor cu importanta foarte mare pentru sistem, a caror pierdere ar lasa sistemul intr-
o stare inconsistenta;
politica lazy writing - reduce accesul la disc prin intarzierea operatiilor de actualizare uneori chiar pana in momentul in care informatia modificata trebuie evacuata din zona de cache ca urmare a umplerii acestei zone; in comparatie cu politica write- through, aceasta politica asigura performante superioare in domeniul timp, dar implica riscuri marite in privinta consistentei informatiei.
O prima componenta a mecanismului de cache-ing o constituie lista rezidenta de i- noduri care contine integral informatiile stocate in cadrul i-nodurilor din tabela de i-noduri.
In UNIX functioneaza un mecanism de block-buffering care consta in alocarea de catre sistem in memoria principala a unei zone ce contine buffere ( buffer pool ) utilizabile pentru implementarea unui mecanism de cache-ing in conjunctie cu dispozitivele periferice structurate bloc. Aceste buffere sunt organizate in structuri de date ( de exemplu, tabele de
dispersie ) menite sa mareasca performantele operatiilor de regasire a cpiei unui anume bloc de pe disc sau a unui buffer liber.
Un alt mecanism ce poate asigura reducerea timpului de acces la informatiile pastrate
pe discul magnetic este acela de mapare in memorie a unui fisier, operatie care asociaza fisierului vizat un segment din spatiul virtual de adresare al procesului care a initiat operatia. Citirile/scrierile din/in fisier vor fi transpuse in citiri/scrieri din/in segmentul corespunzator,
iat in final fisierul poate fi de-mapat din memorie.
Desi pare o solutie convenabila, maparea fisierelor in memorie creeaza o serie de probleme:
daca in sistem se utilizeaza paginarea segmentelor, dimensiunea fisierului se va modifica dinamic cu cate o pagina, ceea ce face dificila precizarea lungimii reale a fisierului;
deoarece fisierele pot avea dimensiuni oricat de mari ( teoretic, chiar mai mari decat intregul spatiu virtual de adresare ) se impune a fi prevazuta posibilitatea maparii in memorie a unor regiuni apartinand fisierului si nu a fisierului in intregime;
daca un proces mapeaza in memorie un fisier accesat in mod concurent de catre un al doilea proces, modificarile realizate de primul proces afecteaza un segment din propriul spatiu de adresare, fiind invizibile celui de-al doilea proces.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1272
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved