|
Sistemul de
operare MS-DOS
. Cand este scris un asemenea lant (numit si cale),
caracterul care separa intre ele numele directoarelor este
simbolul "\". In practica s-a constatat ca, de cele mai multe
ori, utilizatorul lucreaza perioade lungi de timp in mod
preponderent cu fisierele dintr-un anumit director (ceea ce
este normal, deoarece structura de directoare a fost creata
tocmai pentru a permite gruparea fisierelor dupa rolul lor).
Intrucat este relativ greu de a scrie de fiecare data numele
unui fisier precedat de calea pe care se afla in sistemul de
fisiere, s-a introdus notiunea de director curent. Directorul
curent are proprietatea ca toate fisierele (si
subdirectoarele) pe care le contine pot fi identificate prin
numele lor, fara a mai trebui precizata si calea. Pentru a
evita conflictele, un sistem de fisiere nu are decat un singur
director curent la un moment dat. Utilizatorul poate schimba
directorul curent in orice moment, dupa dorinta. Sa dam cateva
exemple de nume de fisiere: \programe\tp\turbo.exe \dos\ansi.sys \autoexec.batfisier1.txttemp\fisier1.aux
In primele trei exemple se observa ca primul
caracter al caii este "\", ceea ce inseamna ca se porneste din
directorul radacina. Al treilea exemplu reprezinta un fisier
aflat chiar in directorul radacina. In ultimele doua exemple,
deoarece primul caracter nu este "\", calea porneste din
directorul curent. Asa cum am afirmat, pot exista mai multe
sisteme de fisiere la un moment dat. In primul rand, orice
calculator contine mai multe dispozitive de stocare - o
unitate de disc flexibil si unul sau mai multe discuri hard.
In al doilea rand, un disc dur poate fi impartit in mai multe
zone independente una de alta (numite partitii), fiecare
dintre acestea continand cate un sistem de fisiere, de
asemenea independent de celelalte. Trebuie deci gasita o forma
de a diferentia fisierele aflate in sisteme de fisiere
diferite, deci in structuri de directoare diferite.Solutia
adoptata de sistemul DOS este de a denumi fiecare sistem de
fisiere printr-o litera urmata de simbolul ":". Astfel,
unitatile de disc flexibil sunt desemnate prin literele a: si
respectiv b:, iar discurile dure si apoi unitatile CD-ROM,
precum si alte dispozitive de stocare, primesc literele c:, d:
etc. Aceasta litera precede denumirea fisierului, precizand
astfel in care sistem de fisiere trebuie cautat fisierul
respectiv. Din aceste motive, sistemele de fisiere se mai
numesc unitati de disc, iar literele asociate lor, litere de
disc. Similar directorului curent, exista si o unitate de disc
curenta, avand un rol analog. Practic, toate numele de fisiere
(precedate sau nu de calea de directoare corespunzatoare)
de pe unitatea curenta nu au nevoie de a preciza care este
unitatea pe care se afla. Mai mult, fiecare unitate are
propriul director curent. Desigur, utilizatorul poate decide
atat unitatea curenta, cat si directoarele curente pe toate
unitatile de disc. Exemple:c:\files\fisier1.txt
numele fisierului este precedat de litera unitatii de disc si
de calea de directoare\files\fisier1.txt se precizeaza o cale
pe unitatea de disc curent a fisier1.txt fisierul este cautat
in directorul curent al unitatii curented:fisier2.doc fisierul
este cautat in directorul curent al unitatii d:, deoarece
calea care urmeaza dupa litera de disc nu incepe cu simbolul
"\", deci nu se porneste din radacina. Cum realizeaza
sistemul de operare gestiunea sistemelor de fisiere, altfel
spus, cum este regasit pe disc un fisier despre care in prima
instanta se cunoaste doar numele? Pentru a raspunde la
aceasta intrebare trebuie sa urmarim cum isi organizeaza
sistemul de operare informatia pe disc. Mai intai se impun
cateva consideratii sumare legate de organizarea fizica a
discului. Intr-un mod destul de asemanator memoriei, fiecare
octet de pe disc este identificat printr-o adresa. Practic
insa, discul este impartit in zone de date de dimensiuni mai
mari, numite sectoare (care au in cele mai multe cazuri 512
octeti). Din motive tehnologice, cautarea unui octet pe disc
consta din doua etape distincte:- cautarea sectorului din care
face parte octetul dorit- cautarea octetului respectiv in
sectorul din care face parte In general, prima etapa are o
durata mult mai mare. Daca tinem cont ca, in orice program,
cel mai adesea se acceseaza in mod repetat datele invecinate,
rezulta ca este mult mai rapid sa citim printr-o singura
operatie un grup mai mare de octeti decat sa realizam cate o
operatie de citire pentru fiecare dintre acei octeti (desigur,
la fel se intampla si la scriere).Din acest motiv, citirile si
crierile de date pe disc nu se fac la nivel de octet, ci la
nivel de bloc de octeti. Dimensiunea unui asemenea bloc
variaza in functie de mai multi factori. Primul sector al uni
disc hard contine tabela de partitii. Asa cum am aratat
anterior, un disc hard poate contine mai multe zone
independente una de alta, numite partitii. Numarul maxim de
paritii care pot fi create pe disc este 4 (desi poate fi marit
prin anumite mijloace, care nu intereseaza aici), deci tabela
are 4 elemente. Fiecare element poate contine informatii
despre una dintre partitii, in principal adresele primului si
ultimului sector din partitia respectiva (evident, pentru a nu
complica prea mult structura, partitiile sunt zone continui de
date pe disc). In plus, deoarece la pornirea calculatorului
sistemul de operare este incarcat de obicei de pe disc, este
marcata partitia care contine sistemul de operare, numita
partitie activa. Deoarece dischetele nu pot avea decat o
singura partitie, ele nu au tabela de partitii, iar structura
unei dischete este identica cu a unei partitii de pe discul
hard.Structura unei partitii este urmatoarea: FAT 1 FAT 2
Sectorul de boot Tabelele de
alocare a fisierelor Directorul radacina Zona
de date Sectorul de boot (sau de autoincarcare)
contine un mic program care realizeaza incarcarea in memorie a
fisierelor care formeaza sistemul de operare. Acest sector nu
este utilizat decat in cazul partitiei active. Tabelele
de alocare a fisierelor (FAT - File Allocation
Table) memoreaza modul de ocupare cu informatie a zonei de
date a partitiei si sunt identice nu numai in structura, ci si
in continut. Sistemul DOS mentine doua copii tocmai pentru a
putea restabili informatia in cazul cand una dintre tabele
este alterata din diverse motive. Asa cum am vazut, informatia
este transferata inspre si dinspre disc in blocuri. La randul
sau, sistemul de operare stocheaza fisierele pe disc utilizand
ca unitate elementara clusterul, care reprezinta o zona
continua formata din unul sau mai multe sectoare, in functie
de caracteristicile discului. In acest fel, un fisier va ocupa
pe disc mai mult decat dimensiunea sa reala. De exemplu,
pentru un disc la care un cluster are 4 sectoare (deci 2048
octeti), un fisier de 9473 octeti va ocupa pe disc 5 clustere,
adica 10240 octeti. Tabela de alocare a fisierelor contine,
pentru fiecare cluster de pe partitie, o valoare care
indica una din urmatoarele situatii: - clusterul nu este
alocat (nu contine nici un fel de informatie utila) -
clusterul este defect (eroare fizica pe disc) - cluster
rezervat pentru uzul sistemului de operare - clusterul
contine date ale unui fisier; in acest caz, valoarea din
FAT fie va reprezenta numarul clusterului care contine
urmatoarele date ale aceluiasi fisier, fie va marca (printr-o
valoare speciala) faptul ca acest cluster contine finalul
fisierului.Deci, pentru fiecare fisier exista un lant de
clustere care contin datele respectivului fisier. Practic,
pentru a putea accesa un fisier in intregime, trebuie
cunoscuta numai adresa primului sau cluster si, utilizand
informatiile din FAT, se pot determina si clusterele
urmatoare. Acest mod de memorare elimina necesitatea ca
fisierele sa ocupe zone continui de date pe disc, deoarece
datele pot fi regasite si cand fisierul ocupa clustere aflate
in pozitii neinvecinate. Urmatoarea zona o reprezinta
directorul radacina. Acesta, ca si oricare alt director, este
de fapt un tabel ale carui elemente, numite si intrari in
director, contin informatii despre cate un fisier sau
subdirector. Aceste informatii sunt: - numele
fisierului - numarul primului cluster ocupat de catre
fisier - dimensiunea fisierului - data si ora cand a
fost creat fisierul etc. Pornind de la numele unui fisier,
sistemul de operare il poate regasi pe disc. Sa luam ca
exemplu urmatorul nume (complet) de fisier: c:\programe\bc\bin\bc.exe In
primul rand se identifica unitatea de disc pe care se face
cautarea, in cazul de fata unitatea c:. Daca unitatea de disc
nu este precizata, sistemul cauta pe unitatea implicita. In
continuare se observa ca, deoarece calea incepe cu simbolul
"\", autarea va porni din directorul radacina. In caz contrar,
cautarea ar porni din directorul curent al unitatii
respective. Evident, este necesar sa fie cunoscuta pozitia pe
disc a directorului din care incepe cautarea. Asa cum am
aratat, directorul radacina incepe de la o adresa fixa pe
disc, cunoscuta de sistem. In ceea ce priveste directorul
curent, adresa de inceput a acestuia este retinuta in
permanenta de catre sistemul de operare. Deci, in oricare din
cazuri, sistemul stie de unde sa inceapa cautarea. Urmeaza
inspectarea intrarilor din directorul radacina, pentru a gasi
elementul corespunzator subdirectorului programe. Daca nu
exista un subdirector cu acest nume in directorul radacina,
cautarea este abandonata si sistemul de operare semnalizeaza
esecul. Daca s-a gasit subdirectorul, se citeste adresa
primului sau cluster si, de la acea adresa, se incepe
inspectarea intrarilor sale pentru a gasi subdirectorul
bc. Cautarea continua in acest fel pana cand se intalneste un
caz de eroare sau pana cand este gasit fisierul bc.exe. Din
acest moment, folosind adresa primului cluster ocupat de
fisier si informatiile din FAT, fisierul poate fi accesat dupa
dorinta.
|