DIRECTOARE
Pentru a pastra fisierele,sistemele de fisiere au in mod normal directoare si fisiere care in multe sisteme au la randul lor alte fisiere.In aceasta parte vom discuta despre directoare,organizarea lor,proprietatile lor,si operatiile care pot fi realizate cu ele.
Sistemele de directoare pe un singur nivel
Cea mai simpla forma de sisteme de directoare are un director care
contine toate fisierele.Cateodata este numit directorul radacina ,dar cum este singurul numele nu conteaza prea mult.Pe calculatoarele personale sistemul este comun,in parte deoarece este doar un utilizator. Destul de interesant dar primul supercalculator din lume CDC 6600,avea deasemenea un singur director pentru toate fisierele,desi era folosit de mai multi utilizatori in acelasi timp.Aceasta decizie a fost luata fara indoiala pentru a mentine designul de retea mai simplu.
Un exemplu cu sistem cu un singur director este dat in figura 6-7.Aici directorul contine 4 fisiere.Detinatorii de fisiere sunt desenati in figura,nu numele fisierelor(pentru ca detinatorii sunt importanti in punctul in care ne aflam).Avantajul acestei scheme 656d39g este simplitatea si posibilitatea de a localiza fisierele mai usor—este un singur loc unde sa le cautam.
Figura 6-7. Un system de directoare pe un singur nivel cu 4 fisiere,detinute de 3 utilizatori diferiti A,B si C
Problema care apare cand avem un singur director apare intr-un system cu mai multi utilizatori cand mai multi utilizatori pot denumi la fel fisiere diferite.De exemplu daca utilizatorul A creeaza un fisier “mailbox” si apoi alt utilizator B creeaza un fisier cu acelasi nume,se va rescrie fisierul utilizatorului A.In consecinta aceasta schema nu mai este folosita pentru un sistem cu mai multi utilizatori ,dar poate fi folosit pentru un sisteme mici incorporate,de exemplu,un sistem intr-o masina care este realizat pentru a inregistra profilul mai multor utilizatori pentru un numar mic de soferi.
Sistemul de directoare pe doua nivele
Pentru a evita conflictul cauzat de mai multi utilizatori care folosesc
acelasi nume propriilor fisiere,urmatorul pas este sa dai fiecarui utilizator propriul director.Astfel numele alese de un utilizator nu interfereaza cu numele fisierului alese de un alt utilizator si nu este nicio problema cauzata de fisiere cu acelasi nume in unul sau mai multe directoare.Acest mod de organizare duce la sistemul din Figura 6-8.Acest altgoritm poate fi utilizat,de exemplu,pe un calculator cu mai multi utilizatori sau pe o retea simpla de calculatoare personale care impart fisiere de server comune pe o arie de retea locala.
Figura 6-8. Sistem de directoare pe doua nivele.Literele indica detinatorii directoarelor si fisierelor.
Implicit in acest desen cand un utilizator incearca sa deschida un fiser,sistemul stie care utilizator in ce director sa caute.In consecinta este nevoie de o procedura,in care un utilizator specifica un nume de identificare,lucru care nu este necesar la un sistem cu un director pe un singur nivel.
Cand acest sistem este implementat in formele sale de baza,utilizatorii pot avea acces doar la fisierele proprii.Totusi o mica extensie permite utilizatorilor sa acceseze fisierele celorlalti dand informatii despre care fisiere ar trebui deschise.Astfel,de exemplu.
Open(“x”)
Poate fi apelul pentru a deschide un fisier numit “x” in directorul utilizatorului ,si
Open(“nancy/x”)
Poate fi apelul pentru a deschide un fisier al directorului al altui utilizator,Nancy.
O situatie in care utilizatorii trebuie sa acceseze fisiere altele decat ale lor trebuie sa execute programele de sisteme binare.Avand o copie a toate programelor prezente si necesare in fiecare director este in mod clar ineficient.De aceea este nevoie de un sistem de directoare cu programe binare executabile.
6.2.3 Sistemul ierarhic de directoare
Sistemul ierarhic pe 2 nivele elimina conflictele de nume printre utilizatori dar nu este satisfacator pentru utilizatori cu un numar mare de fisiere.Chiar pentru un calculator personal este neconvenabil.Este foarte normal pentru utilizatori sa doreasca sa-si grupeze fisierele impreuna in moduri logice.Un profesor,de exemplu,poate avea o colectie de fisiere care impreuna formeaza o carte pe care a scris-o pentru un curs,o a doua colectie de fisiere continand programe pentru studenti prezentate pentru alt curs,un al treilea grup de fisiere continand codul unui sistem avansat de compilare-scriere pe care il construieste,un al patrulea grup continand propunerile acordate,cum poate avea alte fisiere pentru posta electronica,ore de intalnire,lucrari pe care le-a scris,jocuri,si asa mai departe.Trebuie grupate aceste fisiere impreuna in moduri flexibile alese de utilizator.
De aceea este nevoie de o ierarhie generala (i.e. cu trei directoare).
Astfel,fiecare utilizator poate avea atatea directoare cate are nevoie si fisierele pot fi grupate impreuna in moduri logice.Aceasta gandire este aratata in figura 6-9.Aici,directoarele A,B si C continute in directorul radacina apartin fiecare unui utilizator diferit,doua dintre ele creandu-si subdirectoare pentru functionare proprie.
Figura 6-9. Sistem ierarhic de directoare
Abilitatea utilizatorilor de a crea un numar aleator de subdirectoare duce la o structura puternica de intrumente pentru ei de a se organiza.De aceea,aproape toate sistemele moderne sunt organizate astfel.
Calea de adresare
Cand un sistem este organizat intr-un mod
ramificat,este nevoie sa specificam numele fisierelor.Doua metode sunt cel mai des utilizate.In prima metoda,fiecarui fisier i se aloca o cale de adresare care consta in traseul de la directorul radacina pana la fisier.Ca si in exemplu,drumul /usr/ast/mailbox inseamna ca directorul radacina contine un subdirector usr ,care la randul lui contine un subdirector ast , care contine fisierul mailbox .Calea de adresare pana la un fisier pleaca intotdeauna de la directorul radacina si este unica.La UNIX componentele drumurilor sunt separate de “/”.La Windows separarea este facuta de “”.La MULTICS este “>”.
Desi este acelasi drum va fi scris ca mai jos in trei sisteme:
Windows usrastmailbox
UNIX /usr/ast/mailbox
MULTICS >usr>ast>mailbox
Nu conteaza ce caracter este utilizat,daca primul caracter al cai este separatorul,atunci calea este absoluta.
Un altfel de nume este numele relativ al caii.Acesta este folosit coroborat cu conceptul de director in uz (mai este denumit si directorul curent).Un utilizator poate desemna un director ca fiind director curent,caz in care toate drumurile nu pornesc de la directorul radacina si se muta de la directorul curent.De exemplu daca directorul curent este /usr/ast ,atunci fisierul a carei cale absoluta este /usr/ast/mailbox ii putem spune doar mailbox .Cu alte cuvinte comanda UNIX
cp /usr/ast/mailbox /usr/ast/mailbox.bak
si comanda
cp mailbox mailbox.bak
fac exact acelasi lucru daca directorul curent este /usr/ast/ .Forma relativa este adesea mai convenabila,dar face acelasi lucru ca forma absoluta.
Anumite programe trebuie sa acceseze un fisier specific fara sa conteze care este directorul specific.In cazul acesta,ar trebui sa foloseasca intotdeauna drumul absolut al numelui.De exemplu,pentru o verificare a ortografiei ar trebui sa citeasca /usr/lib/dictionary pentru a functiona.Ar trebui sa foloseasca intreaga cale (absoluta) in acest caz pentru ca poate stii care va fi directorul current cand va fi apelat.Calea absoluta functioneaza intotdeauna,nu conteaza care este directorul current.
Desigur daca verificarea ortografiei are nevoie de un numar mare de fisiere de la /usr/lib ,o solutie alternativa este sa gasim o posibilitate in sistemul de apeluri pentru a schimba directorul radacina in /usr/lib,
si apoi sa il deschidem dupa primul parametru.Modificand directorul radacina,ar trebui sa stim sigur unde se afla in ierarhie,pentru a putea folosi caile relative.
Fiecare proces are propriul director radacina,astfel incat un proces isi schimba directorul radacina,niciun alt proces nu este afectat si niciun traseu catre un fisier nu este modificat in sistem.In acest mod este sigur intotdeauna pentru un proces ca putem modifica directorul radacina.Altfel,daca o procedura modifica directorul curent si nu este schimbat fata de atunci cand s-a incheiat,restul programului poate sa nu functioneze datorita presupunerii locului unde poate fii invalid.De aceea,procedurile de biblioteca modifica foarte rar directorul current,si atunci cand trebuie il modifca la loc inainte de a se intoarce.
Majoritatea sistemelor de operare care suporta sistemul ierarhic de directoare are doua intrari speciale in fiecare director, “.” si “..” pronuntate “punct” si “punctpunct”.Punct se refera la directorul curent si punctpunct se refera la parintele sau.Pentru a vedea cum acestea sunt folosite,consideram structura de fisiere UNIX din figura 6-10.Un anumit proces are /usr/ast director curent.Putem folosi .. pentru a ne intoarce la directorul parinte.De exemplu,putem copia fisierul /usr/lib/dictionary la directorul sau folosind comanda
Cp ../lib/dictionary
Prima cale sfatuieste sistemul sa urce(catre directorul usr ),apoi spre directorul lib pentru a gasi fisierul dictionary .
Figura 6-10. Structura de directoare UNIX
Al doilea argument (punct) denumeste directorul curent.Cand comanda cp primeste numele directorului (inclusiv punct) ca ultim argument,copiaza toate fisierele acolo.Desigur modul prin care il putem copia este astfel
Cp/usr/lib/dictionary
Aici prin folosirea punctului utilizatorul este scutit de tiparirea dictionary pentru a doua oara.Cu toate acestea,tiparind
Cp/usr/lib/dictionary dictionary
Functioneaza de asemenea la fel de bine ca,
Cp/usr/lib/dictionary /usr/ast/dictionary
Toate acestea fac exact acelasi lucru.
Operatii cu directoare
Sistemul de apeluri permis pentru gestionarea directoarelor prezinta mai multe variante de la un sistem la altul decat sistemul de apeluri pentru fisiere.Pentru a vedea ce sunt si cum functioneaza,vom da un exemplu (luat din UNIX).
1. Create(creerea). Un director este creat. Este gol cu exceptia lui “.” Si “..”,care sunt puse automat de sistem(sau in cateva cazuri de programul mkdir).
2. Delete(stergere). Un director este sters. Numai un director gol poate fi sters. Un director care contine doar “.” si “..” este considerat gol si acestea nu pot fi sterse in mod normal.
3. Opendir(deschide directorul). Directoarele pot fi citite. De exemplu,pentru a lista toate fisierele intr-un director,un program de listare deschide directorul cu toate numele fisierelor pe care le contine.Inainte ca un director sa poata fi citit,acesta trebuie deschis,analog se deschide si se citeste un fisier.
4. Closedir(inchide directorul) . Cand un director a fost citit,ar trebui sa fie inchis pentru a elibera spatiul intern al tabelei.
5. Readdir (citire). Acest apel returneaza urmatoarea intrare intr-un director deschis.Se mai pot citi directoare folosind sistemul de apeluri de citire usual,dar aceasta apropiere are dezavantajul fortarii utilizatorului sa stie si sa lucreze cu structura interna a directoarelor.In contradictie readdir returneaza intotdeauna o intrare in format standard,necontand care structura posibila a directorului este folosita.
6. Rename. (redenumire) In multe situatii directoarele sunt la fel ca fisierele si pot fi redenumite la fel ca acestea.
7. Link . Aceasta este o tehnica care permite unui fisier sa apara in mai mult de un director.Acest sistem de apeluri specifica un fisier existent si o cale de adresare si creeaza o legatura de la fisierul existent la numele specificat de cale.Astfel acelasi fisier poate aparea in mai multe directoare.O legatura de acest fel,incrementeaza numaratorul fisierelor i-node (pentru a memora numarul de intrari ale directoarelor care contin acest fisier)este denumit cateodata hard link.
8. Unlink. Intrarea unui director este mutata . Daca fisierul care este mutat este prezent doar intr-un director (cazul normal) este mutat din sistemul de fisiere. Daca este prezent in mai multe directoare ,doar calea este modificata.Celelalte raman.La UNIX sistemul de apeluri de stergere a fisierelor (discutat mai sus) este ,de fapt, mutarea(unlink).
Lista de mai sus reprezinta cele mai importante apeluri,dar mai exista cateva,de exemplu, de a intretine protectia informatiei asociata cu directorul.
|