Sunteți pe pagina 1din 15

Curs 13

Gestiunea fisierelor
Implementarea sistemului de
fisiere

Sisteme de operare
Lect. Dr. Ozten CHELAI

Facultatea de Matematica si Informatica


Universitatea Ovidius Constanta

Curs10 SO - lect. dr. Ozten Chelai, 2009-2010 1


Implementarea
 Implementarea sistemului de fişiere. D.p.d.v. al proiectantului unui sistem de
operare se studiază implementarea acestuia, care se referă la:
 suprapunerea spaţiului logic, reprezentat prin nume simbolice, peste spaţiul fizic,
reprezentat prin identificatori interni gestionaţi de SO,
 gestionarea spaţiului pe disc,
 optimizarea accesului la fişier,
 implementarea modelului şi operaţiilor definite în interfaţă.
 Implementarea fişierelor
 Maşina virtuală de nivel 3 se oferă un spaţiu virtual de I/E, format din fişiere
văzute ca secvenţe liniare de înregistrări logice (octeţi sau structurate).
 Maşina virtuală de nivel 2 oferă un spaţiu fizic de I/E, pe care SO îl gestionează
ca şi colecţie de blocuri fizice de dimensiuni fixe. Un fişier va ocupa un set
oarecare de blocuri fizice (unităţi de alocare) ce pot fi văzute ca înregistrări
fizice.
 SO este responsabil cu realizarea transparenţei pentru dimensiunea unităţii de
alocare şi pentru continuitatea înregistrărilor logice.
Metode pentru alocarea spaţiului pe disc pentru fişiere
 Accesul direct, natural pentru dspozitivele de tip disc magnetic, asigură flexibilitatea
implementării sistemelor de fişiere.
 Problema principală este alocarea spaţiului de pe disc mai multor fişiere, astfel încât
spaţiul este utilizat eficient iar fişierele pot fi accesate rapid.
 Există 3 metode majore de alocare: contiguă, înlănţuită şi indexată. Fiecare metodă are
avantaje şi dezavantaje. În general, un sistem de operare utilizează una din aceste
metode, dar sunt sisteme care le suportă pe toate 3.
 Alocare contiguă
 Acest model de alocare suprapune fiecare fişier peste o colecţie de blocuri fizice consecutive
(contigue) pe disc.
 Adresele de disc definesc o ordonare liniară pe disc. Conform acesteia, presupunând că doar
un proces accesează discul, accesarea blocului b+1 după blocul b nu necesită în mod normal o
mişcare a capului de citire-scriere. Aceasta are totuşi loc atunci când se trece de la ultimul sector al
unui cilindru la primul sector al cilindrului următor şi face trecerea între două piste alăturate. Astfel,
numărul de căutări pe disc necesare accesului fişierelor cu alocare contiguă este minimal, la fel ca
şi timpul de căutare.
 Alocarea contiguă a unui fişier este definită de adresa pe disc a primului bloc şi de lungimea
(în număr de unităţi de alocare) fişierului. Dacă fişierul ocupă n blocuri şi începe la locaţia b, atunci
va ocupa blocurile b, b+2, ..., b+n-1. Intrarea în director pentru fiecare fişier indică adresa primului
bloc şi numărul de blocuri ocupate de acesta.
Fişier1
1 2 3 Director
fişier start dimens
Fişier2
Fişier1 1 2
4 5 6
Fişier2 4 2
Fişier3 Fişier3 8 4

7 8 9

Exemplu de alocare contiguă


10 11 12
Alocarea contiguă

 Accesul la un fişier care a fost alocat contiguu se realizează foarte simplu.


Ambele moduri de acces, secvenţial şi direct, sunt suportate de alocarea
contiguă.
 Pentru acces secvenţial, sistemul de fişiere memorează adresa pe disc a ultimului
bloc referit, operaţia solicitată facându-se asupra următorului bloc.
 Pentru acces direct la blocul i al unui fişier care începe la blocul b, se accesează
imediat blocul b+i.
 Această metodă de alocare are o serie de avantaje.
 Astfel, odată identificată localizarea fişierului, transferul informaţiilor are loc rapid
deoarece nu mai este necesară prelucrarea unor noi informaţii de localizare.
 De asemenea, din punct de vedere hardware, nu sunt necesare operaţii costisitoare
legate de deplasări necontinue ale capetelor de citire/scriere pe disc.
 Alocarea contiguă prezintă totuşi o serie de probleme.
 Una dintre acestea este dificultatea de a găsi spaţiu liber pentru un fişier nou sau
pentru extinderea unui fişier existent.
 În cazul fişierelor cu conţinut dinamic este necesară o alocare suplimentară de spaţiu
pe disc, a.î. să acopere necesităţile de extindere ulterioară a fişierului.
 Alocarea contiguă se conformează modelului general de alocare a memoriei pe
bază de partiţii variabile.
Alocare necontiguă
Modelul de alocare necontiguă suprapune fiecare fişier peste o colecţie de blocuri fizice neconsecutive.
 Avantaje metodei în cazul fişierelor cu conţinut dinamic sunt date de realizate în mod transparent, de
către sistemul de operare, a extinderii ulterioare a fişierului ca şi a oricăror alte modificări ale dimensiunii
acestuia.
 Dezavantaje le sunt legate de implicarea unui consum suplimentar indus de operaţiile de gestiune
necesare. De asemenea, din punct de vedere hardware, sunt necesare operaţii costisitoare legate de
deplasări necontinue ale capetelor de citire/scriere pe disc de câte ori se accesează informaţii continue
în spaţiul logic dar aflate în blocuri fizice necontigue.
 Alocarea necontiguă se conformează modelului general de alocare a memoriei pe bază de partiţii fixe.
 Tehnici de gestiune a spaţiilor logic şi fizic în gestiunea fişierelor în regim de alocare necontiguă
Fie următoarea repartizare a unui fişier în blocuri fizice:

B1 B B B B Bk B B B B B Bm
1 1 1 1 1 1 1 1 1

Fişierul este reprezentat de următorul set al blocurilor fizice:


Fi = { B1 , Bk, Bm }
 Un sistem de fişiere este reprezentat de totalitatea seturilor Fi, care formează supersetul F. Acesta
reprezintă spaţiul logic ocupat de informaţiile memorate în fişiere la un moment dat.
 Spaţiul total de pe disc este reprezentat de totalitatea blocurilor fizice. O parte din acestea sunt
ocupate de F. Restul sunt blocuri libere care sunt gestionate, de asemenea, de către sistemul de
operare.
 Gestiunea blocurilor libere este realizată utilizând fie aceleaşi structuri cu care sunt gestionate
blocurile ocupate, fie structuri diferite dar de acelaşi tip.
Alocare înlanţuită
 Fie următoarea repartizare a blocurilor unui fişier dat în varianta de alocare necontiguă.
 Observăm că fişierul care ocupă blocurile B1 , Bk şi Bm în această ordine, se conformează unei structuri
de tip listă înlănţuită ale cărei elemente sunt memorate în blocuri fizice necontigue pe disc iar
informaţiile de localizare sunt memorate la începutul fiecărui bloc.

Link Bk Link Bm EOF

B1 Bk Bm

 Alocarea înlănţuită soluţionează toate problemele alocării contigue. În acest caz fiecare fişier este o listă
înlănţuită de blocuri fizice care pot fi răspândite oriunde pe disc.
 Aşa cum am văzut anterior, în tabela directorilor sunt memorate informaţii de două tipuri
corespunzătoare fiecărui fişier. Este vorba de informaţiile care descriu fişierul şi reprezintă atributele
acestuia şi informaţiile necesare localizării fişierului în spaţiul fizic, pe disc.
 În cazul alocării cu listă înlănţuită, informaţia de localizare a fiecărui fişier este reprezentată de adresa
primului bloc, care este păstrată în intrarea corespunzătoare fişierului în directorul părinte al acestuia.
Restul informaţiilor de localizare sunt memorate pe disc, la începutul fiecărui bloc ce conţine datele din
fişier.
 Această organizare conduce la necesitatea realizării de accese la disc atât pentru operaţii de
citire/scriere informaţii utile, ale fişierului, cât şi pentru citire/scriere informaţii de organizare a fişierului
reprezentate de adresele blocurilor de disc.
 În cazul acestui tip de alocare nu există fragmentare externă, oricare bloc din lista blocurilor libere
putând fi folosit pentru a satisface o cerere.
 De asemenea, nu este necesară declararea dimensiunii fişierului în momentul creării acestuia. Un fişier
poate continua să crească(extinda) atât timp cât există blocuri libere pe disc. În consecinţă, nu este
necesară compactarea spaţiului pe disc.
Alocare înlanţuită
1 2 6 3 Director

fişier start end


File3 4 11
4 2 5 6 8

8 11 9
7

Exemplu de alocare înlănţuită


10 11 -1 12

 Totuşi alocarea cu înlănţuită are o serie de dezavantaje.


 Problema majoră este aceea că ea este eficace doar pentru fişierele cu acces secvenţial. Pentru a localiza blocul i al
unui fişier este necesară urmărirea tuturor pointerilor începând cu blocul 1 până la blocul i. Fiecare acces la un pointer
necesită o operaţie de citire de pe disc ca şi operaţii de căutare pe disc. În consecinţă, este ineficientă realizarea de operaţii
de acces direct în cazul fişierelor alocate astfel.
 Un alt dezavantaj îl constituie spaţiul necesar memorării pointerilor. Dacă un pointer necesită 4 oct. dintr-un bloc de 512
oct,. atunci 0,78 % din spaţiu este utilizat de aceştia, fiecare fişier necesitând astfel un spaţiu de memorie ceva mai mare.
 Soluţia uzuală a acestei probleme este gruparea blocurilor în cluster-e şi alocarea de cluster-e, nu de blocuri
individuale.
 De exemplu, sistemul de fişiere poate defini cluster-e formate din 4 blocuri, care să constituie unitatea de alocare. În acest caz
dimensiunea pointerilor scade.
 Această metodă permite ca maparea bloc fizice - bloc logic să rămână simplă, ca numărul de căutări la nivelul capetelor de citire-
scriere să scadă şi ca să scadă spaţiul necesar pentru alocarea blocurilor şi pentru gestionarea spaţiului liber.
 Costul plătit de acestă abordare este creşterea fragmentării interne, deoarece se alocă un număr întreg de cluster-e, iar
spaţiul irosit la nivel de cluster este mai mare decât cel la nivel de bloc. Cluster-ele pot fi utilizate pentru îmbunătăţirea
timpului de acces la disc pentru mulţi alţi algoritmi, de aceea sunt utilizate în majoritatea sistemelor de operare.
 O altă problemă a alocării indexate este fiabilitatea. Deoarece fişierele sunt legate prin pointeri răspândiţi pe toată suprafaţa
discului, distrugerea unui pointer poate conduce la efecte dramatice. Astfel, un bug la nivelul sistemului de operare sau o
cădere hardware la nivelul discului poate genera citirea greşită a unui pointer. Aceasta va conduce la accesul unui bloc liber
sau care aparţine altui fişier. Soluţii parţiale utilizează liste dublu înlănţuite sau memorează numele fişierului şi
numărul relativ (la blocurile acelui fişier) al blocului în fiecare bloc. Aceste scheme însă au ca rezultat un overhead
suplimentar pentru fiecare fişier.
 Pentru a elimina accesele la disc datorate operaţiilor asupra informaţiilor de localizare, acestea sunt izolate într-o listă
înlănţuită separată de conţinutul fişierului. Această listă conţine doar informaţiile de legătură (link) între blocurile firecărui
fişier. Dimensiunea acestei liste permite memorarea ei în memoria internă, ceea ce conduce la economii importante de timp
dacă ţinem seama de faptul că accesele la memoria internă sunt de câteva ordine de mărime (100 000 ori) mai rapide decât
cele la memoria externă. Acest model caracterizează sistemele de fişiere de tip FAT.
FAT (File Allocation Table)
 Tabela de alocare a fişierelor FAT (File Allocation Table) se referă exact la structura de tip listă înlănţuită ce conţine
localizarea fişierelor în blocurile fizice de pe disc.
 La începutul fiecărei partiţii există o zonă de disc destinată memorării acestei tabele.
 Tabela are câte o intrare pentru fiecare bloc de disc şi este indexată după numărul blocului.
 FAT este utilizată ca şi o listă înlănţuită. Intrarea în director conţine numărul primului bloc al fişierului. Fiecare intrare în
tabela FAT conţine numărul următorului bloc din fişier. Lanţul continuă până la ultimul bloc, care conţine o valoare specială,
EOF. Alocarea unui bloc nou este o simplă problemă de găsire a primei intrări cu valoare 0 (reprezentând un bloc liber) şi
înlocuirea valorii EOF anterioare cu adresa blocului corespunzător acestei intrări, precum şi înlocuirea valorii 0 cu EOF.
FAT
Intrare în director
0
test ... 99
nume bloc iniţial
99 311

234 EOF

Tabela de alocare a fişierelor


311 234

-1

 Schema de alocare cu FAT poate conduce la un număr semnificativ de căutări pe disc. Astfel, capul de citire/scriere trebuie
să se mute de la începutul partiţiei, unde face citiri din FAT, la blocul identificat. În cel mai rău caz, ambele mutări au loc
pentru fiecare dintre blocuri. O soluţie este păstrare în cache a tabelei FAT. Un avantaj al utilizării FAT este înbunătăţirea
timpului de acces în cazul accesului aleator, deoarece se poate afla localizarea oricărui bloc utilizând doar citiri din FAT.
Alocare indexată
 Alocarea înlănţuită soluţionează problemele fragmentării externe şi declaraţiei de dimensiune ce apar la alocarea contiguă.
 Totuşi, în absenţa FAT, alocarea înlănţuită nu suportă adresare directă eficientă, deoarece pointerii la blocuri, răspândiţi în blocurile de pe
toată suprafaţa discului, trebuie să fie extraşi în ordine. Alocarea indexată rezolvă acestă problemă prin aducerea tuturor pointerilor
într-o singură locaţie, blocul index.
 Fiecare fişier are un bloc index propriu, acesta fiind un vector de adrese de blocuri de disc. Intrarea i în blocul index pointează
către blocul i al fişierului. Directorul conţine adresa blocului index. Pentru citirea blocului de date i al fişierului se foloseşte intrarea i din
blocul index pentru a localiza şi citi blocul de date. Schema este similară mecanismului de paginare.
 Alocarea indexată suportă acces direct şi nu produce fragmentare externă deoarece orice bloc liber de pe disc poate satisface o
cerere de spaţiu suplimentar.
 În schimb acest mod de alocare conduce la utilizarea ineficientă a spaţiului deoarecer overhead-ul indus de pointerii din blocul index
este, în general, mai mare decât cel datorat pointerilor din lista înlănţuită. Fie cazul comun al unui fişier de unul sau două blocuri. Folosind
alocarea cu listă înlănţuită este necesar spaţiu suplimentar pentru unul sau doi pointeri. În cazul alocării indexate, un întreg bloc index
trebuie alocat chiar dacă se folosesc doar două intrări ale acestuia.
1 2 6 3 Director

fişier bloc index


File3 9
4 2 5 6 8

2
8 11 9 6
7
8
11
10 11 -1 12
-1
-1
-1

Exemplu de alocare indexată -1


(bloc index cu 8 intrări)

 De aici apare problema stabilirii dimensiunii blocului index. Deoarece fiecare fişier va avea un bloc index propriu, apare cerinţa unei
dimensiuni mici a acestuia. Dacă acesta este prea mic însă, nu va fi capabil să conţină suficienţi pointeri pentru un fişier de dimensiuni
mari, fiind necesar un mecanism special pentru rezolvarea acestor situaţii.
Alocare indexată. Alocare mixtă
 Schema înlănţuită propune ca blocul index să fie un bloc de disc astfel încât poate fi citit şi scris în mod
direct.
 Pentru a gestiona fişiere mai mari este necesară înlănţuirea mai multor blocuri index.
 De exemplu, un bloc index ar putea conţine un mic antet cu numele fişierului şi setul primelor 100
adrese de blocuri de disc.
 Adresa următorului bloc index este numai pentru fişiere de dimensiuni mici sau pointer la următorul
bloc index în cazul fişierelor de dimensiuni mari.
 Indexul multinivel este o variantă a reprezentării înlănţuite care utilizează un bloc index de nivel 1
pentru a localiza un set de blocuri index de nivel 2 care conţin pointeri la blocurile fişierului.
 Pentru a accesa un bloc de date, sistemul de operare utilizează indexul de nivel unu pentru a
localiza blocul index de nivel doi şi pe acesta din urmă pentru a localiza blocul de date dorit. Acest
model poate fi continuat cu nivele de ordin trei, patru, etc., funcţie de dimensiunea maximă a
fişierelor. Cu blocuri de 4096 oct. se pot memora 1024 pointeri de dimensiune 4 oct. într-un bloc
index. Două nivele de indexare permit memorarea de fişiere de max. 4Goct. (1 048 576 blocuri de
date).
 Schema combinată este o altă variantă, utilizată în UFS, care presupune păstrarea primilor (ex. 15)
pointeri ai blocului index în structura de date inode ataşată fişierului.
 Primii 12 pointeri conţin localizarea de blocuri directe, blocuri ce conţin date ale fişierului.Astfel
că datele fişierelor de dimensiuni mici (până în 12 blocuri) nu necesită un bloc index separat. Dacă
dimensiunea blocului este de 4Koct, atunci se pot accesa direct până la 48 Koct. de date.
 Următorii 3 pointeri indică la blocuri de indirectare.
 Un bloc de indirectare de nivel 1 este un bloc index ce conţine adrese de blocuri de date.
 Următorul pointer localizează un bloc de indirectare de nivel 2, care conţine adrese de blocuri
de indirectare de nivel 1 care, la rândul lor, conţin adrese de blocuri de date.
 Ultimul pointer ar putea conţine adresa unui bloc de indirectare de nivel 3.
 Folosind această metodă, numărul de blocuri ce pot fi alocate unui fişier depăşeşte spaţiul adresabil
cu adrese de 4oct. utilizate de majoritatea sistemelor de operare. Un pointer pe 32 biti (4 oct.) poate
adresa doar 232 oct., adică 4Goct. Multe implementări UNIX, incluzând Solaris şi AIX de la IBM,
suportă pointeri de 64 biţi, permiţând astfel dimensiuni de fişiere de ordinul tertaocteţilor.
 Schemele de alocare indexată au cam aceleaşi probleme de performanţă ca şi cele de adresare
înlănţuită. Blocurile index pot fi păstrate în memorie în regim de caching, dar blocurile de date pot fi
răspândite pe toată partiţia pe care se află instalat sistemul de fişiere.
Nume fişier Referinţă
Schemă combinată, cu i-node

Bloc
atribute date

Bloc index adr B1


adr B2 Bloc
... date
...
adr B12
Bloc index
adr BI1 Bloc index
Bloc
adr BI2 date
... adr BI3 ...

Bloc index Bloc index


Bloc index Bloc
Bloc date
date
... ...
...
Alocare mixtă (modelul Windows MFT)
 MFT (Master File Table) este o structură complexă de date care conţine
atât informaţiile generale ale sistemului de fişiere (corespunzătoare
superblocului Linux sau primelor intrări din FAT) cât şi câte o intrare
pentru fiecare fişier.
 Această intrare conţine informaţiile tipice gestionate de managerul de
fişiere: identificare fişier, atribute şi localizare.
 Dintre atribute deosebit de importante sunt cele legate de securitate. Aceste
atribute sunt puse în relaţie cu structurile de date ce conţin informaţiile de
securitate ale sistemului de operare. Acestea sunt listele de utilizatori şi
descriptorii de securitate ai acestora precum şi listele de control al
accesului (ACL) ataşate fiecărui obiect al sistemului, în cazul de faţă
fiecărui obiect de tip fişier.
 Informaţiile de localizare au la dispoziţie un spaţiu de 1Moct. La nivelul
fiecărei intrări în MFT. Această organizare permite trei variante de acces.
 În prima variantă, dacă dimensiune fişierului este mai mică de 1 Moct. atunci
conţinutul fişierului este memorat chiar în intrarea în MFT corespunzătoare
acestuia. Se asigură astfel acces imediat la informaţii, fără nici un nivel de indirectare.
 A doua variantă presupune gruparea spaţiului fizic în “cluster-e”, la rândul lor, pot fi
organizate în grupuri. În cazul fişierelor de dimensiuni mai mari, intrarea în MFT
conţine o colecţie de pointeri la aceste cluserlee sau grupurile de clustere ocupate
de fişier.
 A treia variantă este destinată fişierelor de dimensiuni foarte mari pentru fiecare din
acestea putându-se înlănţui mai multe intrări în MFT în vederea descrierii lor
complete.
Gestiunea spatiului pe disc
 Gestionarea spaţiului liber
 Sistemul de operare utilizează lista blocurilor libere pentru gestionarea spaţiului liber de pe disc.
Aceasta înregistrează toate blocurile fizice libere.
 Pentru crearea unui fişier are loc căutarea în acestă listă a unui spaţiu de dimensiune suficientă şi
alocarea acestui spaţiu noului fişier. Acest spaţiu este apoi eliminat din lista blocurilor libere.
 În ciuda numelui său, lista blocurilor libere poate să fie implementată fie ca un vector de biţi, fie
ca o listă înlănţuită.
 Metoda FAT încorporează contabilizarea blocurilor libere în aceeaşi structură utilizată
pentru gestionarea blocurilor alocate.
 O modificare a implementării cu listă înlănţuită este cea în care se memorează adresele
primelor n blocuri libere în primul bloc liber. În realitate primele n-1 blocuri dintre acestea sunt
libere. Importanţa acestei implementări constă în faptul că adresele unui număr mare de blocuri
libere pot fi găsite mult mai rapid decânt în abordarea standard cu listă înlănţuită.
 O altă abordare beneficiază de faptul că, în general, mai multe blocuri contigue ar putea fi alocate
sau eliberate simultan, în particular atunci când spaţiul este alocat cu algoritmul de alocare
contiguaă sau prin cluster-are. Astfel, în loc să se păstreze o listă cu n adrese de blocuri libere, se
pot păstra adresele primelor blocuri libere şi numărul m de blocuri libere contigue cu fiecare din
acestea. Fiecare intrare în lista spaţiilor libere va conţine câte o adresă de disc şi un număr. Deşi
fiecare astfel de intrare necesită mai mult spaţiu pe disc decât o simplă adresă, lista în ansamblu
va fi mai scurtă deoarece numărul păstrat în fiecare intrare a sa este, în general, mai mare decât
1.

 Structurile de date pentru gestiunea SF sunt:


 numărul de elemete în structurile de date de gestiune (ex. nr. I-noduri)
 numărul de blocuri pe disc
 adresa fizică a primului bloc
 adresa de început a listei blocurilor libere
 pointer la directorul rădăcină
 fişierul cu blocuri defecte
Gestiunea spatiului pe disc

 organizarea spatiului de memorie:


 continuu,
 in blocuri de dimensiune fixa : fragmentarea interna si discutie
asupra dimensiunii blocului.
 evidenta spatiilor libere:
 cu lista inlantuita (adresa blocului + nr. unitati de alocare
libere),
 harta de biti.
 stabilirea normelor de ocupare disc pentru sistemele
multiutilizator:
 stabilite de administrator,
 gestionate de SO.
BIBLIOGRAFIE
 Cristina Mindruta, Sisteme de operare –
suport de curs, www.univ-ovidius.ro/math

S-ar putea să vă placă și