Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » referate » informatica
Sistemul de fisiere

Sistemul de fisiere


Sistemul de fisiere

Fiecare disc fix este adesea impartit logic intr-un anumit numar de partitii. Fiecare partitie este gestionata separat de catre sistemul de operare ca si cum ar fi un dispozitiv independent. In fiecare partitie se poate crea un sistem de fisiere.



Pentru gesionarea fisierelor dintr-o partitie, sistemului de operare ii sunt necesare informatii despre:

- blocurile de date libere din cadrul partitiei;

- blocurile de date ocupate de fiecare fisier in parte;

- informatii cu privire la fiecare fisier.

Toate aceste informatii de organizare a sistemului de fisiere trebuie sa se gaseasca in partitia in care a fost creat sistemul de fisiere.

Pentru a realiza coexistenta unor sisteme de fisiere diferite, in cadrul nucleului exista un nivel denumit sistem virtual de fisiere, al carui rol este de a uniformiza accesul la fisiere.Toate apelurile operatiilor cu fisiere, primite de la utilizatori, sunt directionate catre acest nivel, care le particularizeaza in functie de sistemul de fisiere in care se gaseste fisierul apelat. Deci, sistemul de fisiere virtual ofera utilizatorilor un set generic de functii pentru lucrul cu fisierele. Trebuie totusi precizat ca exista sisteme pentru care nu este permisa executia tuturor functiilor de lucru cu fisiere.

Structura sistemului de fisiere in UNIX. Tipuri de fisiere.

Operatia de montare si de demontare

Bloc pentru incarcarea

sistemului de operare

Superbloc

Lista de inoduri

Blocuri de date

Zona de swapping

Blocul de boot al sistemului de operare ocupa, de obicei, zona aflata pe primul sector al discului si, desi este considerat ca o parte a sistemului de fisiere, nu este practic folosit de catre acesta. El este rezervat pentru procedurile folosite la incarcarea sistemului de operare (operatia de boot-are).

Superblocul contine o mare parte din informatia referitoare la sistemul de fisiere, cum ar fi:

- marimea si starea sistemului de fisiere (eticheta, numele sistemului de fisiere, marimea in blocuri logice, indicator cu privire la modificarea superblocului, data si momentul ultimei modificari a superblocului);

- informatii cu privire la inoduri (numarul total de inoduri alocate, numarul de inoduri libere, tabel cu numerele indurilor libere, index in acest tabel);

- blocurile de memorie (numarul total de blocuri libere, tabel cu numerele de blocuri libere si un index in acest tabel).

Distrugerea superblocului face ca sistemul de fisiere asociat sa nu mai poata fi citit.

Superblocul nu pastreaza o lista completa a inodurilor sau a blocurilor libere, ci doar o parte din acestea, suficiente insa pentru indeplinirea cerintelor curente de lucru. Astfel, in majoritatea situatiilor, mai putin acelea in care sistemul de operare a ajuns aproape de limitele sale maxime in ceea ce priveste alocarea resurselor, se vor gasi inoduri si blocuri de date libere care nu sunt specificate in superbloc.


Cand sistemul de operare este incarcat, superblocul de root este citit in memorie. De asemenea, pe masura ce alte sisteme de fisiere sunt montate, superblocurile corespunzatoare sunt aduse in memorie.

Lista de inoduri cuprinde informatii cu privire la fiecare inod din sistem. Fiecare inod contine 64 octeti si descrie exact un fisier. Un inod contine toate informatiile cu privire la un fisier, mai putin numele lui, care este pastrat intr-un fisier de tip director.

Informatiile continute intr-un inod sunt:

- numar de ordine (numar de inod), ce desemneaza in mod unic numele interne ale fisierelor, iar directoarele contin tocmai tabela de traducere a numelui extern al fisierului in numarul de inod asociat;

Cand un proces creeaza un nou fisier, nucleul asociaza acestuia un inod liber al carui numar de inod devine identificatorul intern al fisierului si creeaza o noua intrare in directorul corespunzator.

- tipul fisierului : obisnuit, director, special (orientat pe caracter sau pe blocuri), legatura hard sau simbolica (bcdlL);

- bitii set_user_id si set_group_id;

- identificatorul proprietarului fisierului;

- identificatorul grupului caruia apartine fisierul;

- masca drepturilor de acces ale utilizatorilor din sistem, functie de relatia dintre ei si proprietarul fisierului;

- numarul de legaturi : cate nume de fisier se refera la acelasi inod;

- marimea fisierului (in octeti);

- data si momentul crearii fisierului;

- data si momentul ultimei accesari a fisierului;

- data si momentul ultimei modificari a fisierului.

In plus, inodul contine 15 pointeri (sau 13 ??) la blocurile de date. Primii 12 pointeri adreseaza direct blocurile de date. Urmatorii 3 pointeri adreseaza asa numitele blocuri de indirectare. Primul dintre acesti pointeri reprezinta adresa unui asa numit bloc de simpla indirectare. Acesta este un bloc index, care nu contine date, dar contine adresele blocurilor ce contin date. Urmatorul pointer contine adresa blocului de dubla indirectare, care contine adresele blocurilor care la randul lor contin adresele blocurilor de date. Ultimul pointer contine adresa blocului de tripla indirectare, de obicei neutilizat. (fig51.bmp)

Trebuie facuta distinctie intre operatia de scriere a unui inod si cea de scriere a continutului unui fisier. Continutul unui inod este modificat in momentul in care se modifica posesorul, permisiunile de acces sau numarul de legaturi. Modificarea continutului unui fisier implica automat modificarea inodului asociat, in timp ce o modificare a inodului nu implica neaparat si o modificare a continutului fisierului.

Blocurile de date incep imediat dupa lista de inoduri si contin date din fisiere sau date administrative. Un bloc de date poate apartine, la un moment dat, numai unui singur fisier din sistemul de fisiere. Nucleul aloca spatiu de date pe disc in unitati de cate un bloc. Totusi, cum sistemul de fisiere UNIX contine, de obicei, multe fisiere mici, blocurile de dimensiuni mari pot produce o fragmentare interna excesiva. De accea, se utilizeaza doua dimensiuni de bloc.

Astfel, toate blocurile unui fisier sunt de dimensiune maxima (de ex.,8192 octeti) , cu exceptia ultimului, a carui dimensiune este un multiplu al dimensiunii minime a unui fragment (de ex., 1024 octeti) . De ex., un fisier de dimensiune 18000 octeti va avea doua blocuri de 8192 octeti si un fragment de 2048 octeti ( care nu va completat in intregime).

Dimensiunile de bloc si fragment sunt setate in timpul generarii sistemului de fisiere, in concordanta cu modul de utilizare a respectivului sistem.

Rutina de alocare incearca sa gaseasca spatiu pe disc in imediata continuare a fragmentului deja existent, astfel incat sa se elimine necesitatea recopierii, dar daca nu este posibil, sunt necesare pana la 7 operatii de copiere, pana cand un fragment sa devina bloc.

Marimea unui bloc logic este aceeasi intr-un sistem de fisiere, dar poate varia de la un sistem la altul. Folosind blocuri logice de dimensiune mare se poate realiza o crestere a ratei de transfer intre disc si memorie, deoarece nucleul transfera astfel o cantitate mai mare de informatie in timpul unei operatii de acces la disc. Totusi, apare si dezavantajul faptului ca in situatia folosirii unor blocuri mari de date se ajunge la o risipa de memorie.

Zona de swapping contine imaginile proceselor utilizator atunci cand acestea sunt temporar eliminate din memoria interna.

Tipuri de fisiere

Fisierele obisnuite sunt constituite dintr-un sir de octeti terminat cu un marcaj de EOF. Sirul este divizat in linii de text terminate cu caracterul "new line". Restrictiile de lungime, format etc. sunt impuse de limbajul de programare sau editorul de texte, nu de sistemul de operare UNIX.

Fisierele speciale se constituie ca o interfata intre programele utilizator si rutinele din nucleul sistemului de operare, ce lucreaza direct cu dispozitivele de I/O. Astfel utilizatorul vede perifericele tot ca fisiere, activarea unui astfel de fisier coincizand cu activarea driverului de dispozitiv asociat.Ele nu au alocate pe disc blocuri de date.Atribuirile standard pentru fisiere sunt :

0 - fisier standard de intrare - tastatura;

1 - fisier standard de iesire - ecranul;

2 - fisier standard de eroare - implicit ecranul.

Directoarele sunt asemanatoare fisierelor obisnuite, continutul ambelor tipuri de fisiere fiind pastrat in blocuri de date. La nivelul inodului atasat, deosebiri exista doar la campul care caracterizeaza tipul fisierului.

Spatiul de date este impartit in intrari de cate 16 octeti: 2 pentru numarul de inod, 14 octeti pentru numele fisierului (la 4.3BSD, numele fisierului poate avea pana la 255 caractere). Primele doua nume din fiecare director sunt '.' (directorul curent) si '..' (directorul parinte), in continuare fiind prezente si alte intrari (subdirectoare sau fisiere), in limita spatiului disponibil. Pentru accesul la un anumit fisier din director, este utilizata o metoda de cautare liniara.

Operatia de montare si de demontare

La pornirea calculatorului, se incarca automat sistemul de fisiere radacina (root). Orice alt sistem de fisiere aflat in alta partitie sau pe un alt dispozitiv fizic (alt hard disc sau discheta) poate fi utilizat doar daca este incorporat in structura de fisiere accesibile utilizatorului.

Aceasta se realizeaza prin operatia de montare. Prin montare, sistemul de fisiere devine cunoscut, si mai mult, se realizeaza legarea sa la un director al sistemului de fisiere accesibile. Un sistem de fisiere nemontat nu poate fi utilizat, nefiind cunoscut de catre sistemul de operare. La sistemul de fisiere de pe calculatorul local se poate monta un sistem de fisiere care se gaseste pe o statie cu care calculatorul este conectat printr-o retea locala. Se permite astfel lucrul cu mai multe sisteme de fisiere intr-un mod transparent pentru utilizator.

Dupa cum s-a aratat, operatia de montare consta in legarea directorului radacina al sistemului de fisiere care se monteaza la un director din cadrul sistemului de fisiere de baza. Directorul sistemului de fisiere montat devine astfel un subdirector al acestuia. Daca punctul in care se face montarea contine si alte fisiere sau directoare, acestea vor fi ascunse pentru sistem pe perioada montarii.

Operatia inversa, de scoatere din sistem a unui sistem de fisiere montat anterior se numeste demontare. Numai persoana care a realizat montarea acestuia sau administratorul de sistem au dreptul de a efectua demontarea.

/*Exista in structura de inod un bit ce indica existenta unui sistem de fisiere montat.*/

Sintaxele comenzilor de montare si respectiv de demontare a unui sistem de fisiere sunt:

mount [optiuni] [dispozitiv] [director]

umount [optiuni] [dispozitiv] [director]

Fiecare invocare a comenzii mount are ca efect legarea sistemului de fisiere specificat de dispozitiv la director. Un utilizator obisnuit poate sa monteze un sistem de fisiere doar in directorul sau. Comanda umount realizeaza demontarea.

Ex.: mount /dev/dsk1 /usr

realizeaza montarea sistemului de fisiere existent pe discul identificat prin /dev/dsk1 in directorul /usr. (Fig5_2.bmp)

2. Structuri de date folosite. Gestionarea inod-urilor

Structurile de date folosite sunt prezentate in figura: (fig5_3.bmp)

La deschiderea unui fisier, este returnat un descriptor de fisier. Acesta se foloseste ca index in tabela de fisiere deschise asociata procesului respectiv. Intrarile din aceasta tabela indica spre tabela de fisiere deschise a sistemului, unde fiecare intrare contine informatii despre un anumit fisier. Printre aceste informatii se gasesc un pointer spre tabela de inoduri active (componenta a structurilor de date ale nucleului), precum si pozitia in octeti fata de inceputul fisierului la care se va efectua urmatoarea operatie de citire sau scriere, evitandu-se ca doua procese sa scrie sau sa citeasca la pozitii diferite in fisier.

Obs.: 1) daca un proces creeaza un alt proces, procesul fiu mosteneste tabela de fisiere deschise de catre parinte. Orice modificare a fisierului de catre parinte va fi vizibila si in procesul fiu si invers. Deci, daca fiul scrie in fisier, modifica deplasamentul in tabela de fisiere a sistemului, deplasamentul va fi vazut si de procesul parinte, cand va accesa acelasi fisier;

2) daca doua procese diferite deschid acelasi fisier, fiecare va avea propriul descriptor de fisier si deci propriul deplasament in fisier, ceea ce este exact ce ne-am dori.

Inodurile exista intr-o forma statica pe disc, dar pentru reducerea timpului de prelucrare, nucleul le citeste in memoria interna, intr-o tabela de inoduri active. Unul din inoduri este inodul radacina al sistemului de fisiere, prin intermediul caruia este disponibila structura de director a sistemului de fisiere. Cautarea in tabela de inoduri nu se realizeaza liniar, ci folosind o functie hashing (de dispersie). Cheia de cautare este formata din numarul inodului si numarul logic al dispozitivului.

Aceasta tabela contine in plus, pentru fiecare inod, urmatoarele campuri:

- numarul inodului;

- numarul logic de dispozitiv pe care se gaseste sistemul de fisiere din care face parte fisierul;

- stare inod : - inod blocat;

- un proces asteapta deblocarea inodului;

- inodul din memoria interna difera prin continut de cel de pe disc ca urmare a unei modificari a primului;

Nucleul manipuleaza independent indicatorul de blocare al inodului. Acesta este activat pe durata executiei unui apel sistem pentru a preveni eventuale inconsistente ce ar putea apare ca urmare a accesului din partea altor procese in momentul in care inodul este folosit.

- contor pentru indicarea numarului de instante active ale unui fisier. Un inod este activ in momentul in care este alocat de catre un proces (de ex., in situatia efectuarii unui apel de deschidere a unui fisier).

Gestionarea inod-urilor

Pentru a urmari cum se utilizeaza structurile de date, vom considera modul in care sistemul va ajunge la /users/dan/date.txt. In general, in sistemul de fisiere UNIX, inodul 2 este corespunde radacinii (root).

Se incarca in memorie inodul 2 (corespunzator directorului radacina) ce ne arata unde sunt blocurile de date ale directorului radacina. Se citesc blocurile de date pana se gaseste intrarea 'users'. Din aceasta intrare se retine numarul inodului care se citeste de pe disc (3). Cu ajutorul acestui inod se localizeaza blocurile de date ale directorului /users, ce se aduc in memorie, cautandu-se intrarea pentru 'dan'. Se identifica inodul (7), care se aduce in memorie In el se gasesc pointeri spre blocurile de date corespunzatoare directorului /users/dan. Se citesc aceste blocuri, cautandu-se intrarea 'date.txt'. Se identifica si se citeste inodul 8, de unde se afla blocurile de date ale lui /users/dan/date.txt care se aduc in memorie.

Legaturi hard si simbolice

Un fisier este alcatuit din trei parti distincte :

nume

inod

date

Un fisier are un singur inod, dar poate avea mai multe nume. Fiecare astfel de nume reprezinta o legatura hard.

La crearea unui fisier, acestuia i se aloca un inod liber, continutul fisierului este memorat in blocurile de date si i se asociaza o intrare intr-un director. Inod-ul alocat are initial numarul de legaturi egal cu unu, deoarece fisierul nou creat are un singur nume (o singura legatura).

O noua legatura implica crearea unei noi intrari in director. Aceasta intrare va contine un nou nume de fisier si numarul de inod al unui fisier existent. In urma acestei operatii, numarul de legaturi al fisierului existent va fi incrementat. Astfel, in sistem vom avea un singur inod corespunzator fisierului in cauza, dar cu referinte din mai multe directoare ale sistemului de fisiere. Limitarile legaturilor hard sunt ca ele se refera la un singur sistem de fisiere si nu pot referi directoare. Datele dintr-un fisier sunt pierdute doar in momentul in care ultima legatura catre un fisier a fost stearsa.

Legatura simbolica este un tip special de fisier ce reprezinta un alt fisier. Datele continute de o legatura simbolica constau din numele caii catre fisierul referit sau directorul la care indica legatura.

Legatura simbolica permite legarea la un fisier ce apartine unui alt sistem de fisiere. O astfel de legatura nu se refera la un inod ci la un nume de fisier.

Crearea unei legaturi simbolice presupune crearea unei noi intrari intr-un director si a unui nou inod, precum si alocarea unui bloc de date ce va contine numele caii spre fisierul la care se refera legatura simbolica. Numarul de legaturi asociat fisierului nu va incrementat.

Legatura simbolica difera, deci, de legatura obisnuita sub 3 aspecte importante :

legatura simbolica permite legarea fisierelor din sisteme de fisiere diferite;

atat fisierele obisnuite cat si directoarele pot fi legate simbolic de catre orice utilizator;

legatura simbolica poate fi creata chiar si in cazul in care fisierul referit nu exista.

Fisierul referit de o legatura simbolica poate fi de orice tip : fisier obisnuit, director, fisier special sau chiar o alta legatura simbolica.

La crearea sau stergerea unei legaturi simbolice se parcurg aceiasi pasi ca pentru orice fisier obisnuit. Pentru creare, utilizatorul trebuie sa aiba dreptul de scriere in directorul in care se creeaza legatura. Fisierul legatura simbolica va fi creat cu identificatorul utilizatorului si al grupului din care acesta face parte. Cand se va accesa legatura simbolica, atat drepturile de acces cat si proprietarul legaturii vor fi ignorate, utilizandu-se numai drepturile de acces si proprietarul pentru fisierul referit.

Crearea unei legaturi hard si simbolice se realizeaza prin comanda ln, cu diversi parametri. In cazul legaturii simbolice,.

La crearea unei legaturi simbolice, sistemul de operare nu realizeaza nici un fel de verificare. Astfel, un utilizator poate crea o legatura care se refera pe sine, sau o inlantuire de legaturi care se refera una pe cealalta (o bucla inchisa). De aceea, la evaluarea unui nume de cale, se limiteaza numarul de legaturi simbolice la variabila MAXSYMLINKS (se recomanda sa fie cel putin 20).

Legaturile simbolice sunt utile si frecvent folosite in situatii de tipul :

o partitie (un sistem de fisiere, de ex. /) a epuizat spatiul alocat la configurare. In acest caz, o legatura simbolica de la un director al acestui sistem de fisiere la un director dintr-un alt sistem de fisiere, mai putin incarcat, poate rezolva aceasta problema. Aceasta legatura simbolica va oferi un spatiu de disc suplimentar si, in general, va fi transparenta pentru utilizatori si programe.

modificarea structurii unui sistem de fisiere. Aceasta poate duce la efecte nedorite pentru programele care folosesc numele de cai anterioare. Astfel, o modificare a unui nume de cale presupune modificarea si recompilarea programelor care l-au folosit. O solutie eleganta ar fi crearea fisierelor originale ca legaturi simbolice ce vor referi noile fisiere.

resursele partajate, cand este important sa existe o singura copie a unor fisiere administrative.

4. Politici de alocare pentru optimizarea spatiului pe disc

Se incearca localizarea datelor accesate concurent si imprastierea datelor neinrudite.

Pentru cresterea vitezei de acces la un fisier, fiecare partitie este impartita in grupuri de cilindri. Fiecare grup ocupa unul sau mai multi cilindri consecutivi. La nivelul fiecarui grup de cilindri exista un superbloc, un bloc de cilindru, lista de inoduri si cateva blocuri de date.

Superblocul este identic pentru fiecare grup de cilindri, deci exista posibilitatea refacerii sale. Blocul de cilindru contine parametrii dinamici corespunzatori unui anumit grup de cilindri (harta a blocurilor si fragmentelor libere, o harta a inodurilor libere).

Inodul corespunzator unui fisier este, de obicei, alocat aceluiasi grup de cilindri ca si inodul directorului parinte corespunzator.

Pentru a imbunatati accesul la disc, blocurile de date ale unui fisier vor fi, pe cat posibil, alocate aceluiasi grup de cilindri.

Exista doua nivele de rutine pentru alocarea blocurilor pe disc: nivelul local, respectiv global.

Rutina de nivel global decide plasarea directoarelor si fisierelor nou create. Astffel, ea incearca sa plaseze inodurilor fisierelor din acelasi director in acelasi grup de cilindri, dar, pentru a se asigura ca fisierele se distribuie cat mai uniform in cadrul sistemului de fisiere, directoarele noi se creeaza in grupul de cilindri ce au un numar de inoduri libere mai mare decat valoarea medie pe sistem si un numar minim de directoare.

Rutina de nivel local utilizeaza informatia existenta in blocul de cilindru pentru a alege un bloc aproape de blocul solicitat. Daca blocul solicitat nu este folosit, atunci acesta va fi cel returnat. In caz contrar, va fi returnat un bloc din acelasi cilindru. Daca nu exista blocuri disponibile pe acelasi cilindru, se aloca un bloc in grupul de cilindri. Daca grupul de cilindri este plin, se alege un alt grup.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.