Sunteți pe pagina 1din 25

6. Gestiunea fiierelor..............................................................................................................................................................

2
6.1. Noiuni generale..........................................................................................................................................................2
6.1.1. Funciile unui sistem de gestiune a fiierelor.......................................................................................................2
6.1.2. Organizarea general a unui sistem de gestiune a fiierelor.................................................................................2
6.2. Organizarea logic a fiierelor.....................................................................................................................................3
6.2.1. Introducere............................................................................................................................................................3
6.2.2. Acces secvenial....................................................................................................................................................4
6.2.3. Acces direct..........................................................................................................................................................5
6.2.3.1. Cheie unic....................................................................................................................................................5
6.2.3.2. Chei multiple.................................................................................................................................................7
6.3. Organizarea fizic a fiierelor......................................................................................................................................8
6.3.1. Implantare secvenial..........................................................................................................................................8
6.3.2. Implantare non contigu.......................................................................................................................................9
6.3.2.1. Blocuri nlnuite...........................................................................................................................................9
6.3.2.2. Tabele de implantare......................................................................................................................................9
6.3.3. Alocarea memoriei secundare.............................................................................................................................11
6.4. Realizarea funciilor de acces elementar...................................................................................................................12
6.4.1. Organizarea descriptorilor..................................................................................................................................12
6.4.1.1. Localizarea fizic.........................................................................................................................................12
6.4.1.2. Informaii de utilizare..................................................................................................................................12
6.4.2. Crearea i distrugerea.........................................................................................................................................12
6.4.2.1. Crearea.........................................................................................................................................................12
6.4.2.2. Distrugerea..................................................................................................................................................13
6.4.3. Deschiderea i nchiderea...................................................................................................................................13
6.4.3.1. Deschiderea.................................................................................................................................................13
6.4.3.2. nchiderea....................................................................................................................................................14
6.4.4. Acces elementar la informaii.............................................................................................................................14
6.5. Securitatea i protecia fiierelor...............................................................................................................................15
6.5.1. Despre securitate i protecie..............................................................................................................................15
6.5.2. Securitatea fiierelor...........................................................................................................................................15
6.5.2.1. Redundana intern i restabilirea informaiilor..........................................................................................15
6.5.2.2. Salvare periodic.........................................................................................................................................16
6.5.3. Protecia fiierelor..............................................................................................................................................16
6.5.4. Autentificarea n Windows NT...........................................................................................................................16
6.5.4.1. Funcia LogonUser.......................................................................................................................................17
6.5.4.2. Autentificare cu ajutorul Security Support Provider Interface.....................................................................19
6.5.4.3. Funcia NetUserChangePassword................................................................................................................20
6.6. SGF din sistemul de operare Unix.............................................................................................................................21
6.6.1. Caracteristici generale........................................................................................................................................21
6.6.2. Organizarea datelor.............................................................................................................................................21
6.6.2.1. Descriptorii..................................................................................................................................................21
6.6.2.2. Implantarea fizic........................................................................................................................................22
6.6.2.3. Administrarea perifericelor..........................................................................................................................23
6.6.2.4. Volume amovibile........................................................................................................................................23
......................................................................................................................................................................................24
6.6.3. Funcionarea i utilizarea....................................................................................................................................24
6.6.3.1. Gestiunea descriptorilor. Nume locale.........................................................................................................24
6.6.3.2. Primitive de acces........................................................................................................................................24
6.6.3.3. Protecia fiierelor n UNIX........................................................................................................................24

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.1 din 25


6. Gestiunea fiierelor
Acest capitol este consacrat studierii detaliate a gestiunii fiierelor n sistemele de operare: organizarea logic,
reprezentarea informaiei, realizarea funciilor de acces, protecia i securitatea. Noiunile menionate sunt ilustrate cu
exemple de gestionare a fiierelor n sistemele de operare Windows i Unix.

6.1. Noiuni generale


6.1.1. Funciile unui sistem de gestiune a fiierelor
Numim fiier o mulime de informaii, formate cu scopul pstrrii i utilizrii lor n cadrul unui sistem informatic.
Fiierele au de obicei o durat de via superioar timpului de execuie a unui program sau duratei unui ciclu de lucru: ca
rezultat, suportul lor permanent este memoria secundar. Fiierul este un obiect: el posed un nume, care permite
desemnarea sa, are asociate funcii de acces, adic operaii, care permit crearea sau distrugerea, consultarea sau
modificarea informaiilor, etc. Componentele unui sistem de operare, care asigur posibilitatea pstrrii fiierelor i
realizeaz funciile de acces se numete sistem de gestionare a fiierelor (SGF).
Utilizatorul unui sistem informatic organizeaz informaiile fiierelor conform necesitilor proprii, impunndu-le o
structur sau organizare, numit logic; funciile de acces sunt exprimate cu ajutorul acestei structuri. Reprezentarea
informaiilor fiierelor n memoria secundar (adresa de implantare, codificarea informaiei) determin organizarea fizic
a fiierelor. Reprezentarea structurii logice a fiierelor printr-o organizare fizic este sarcina SGF.
Adesea un fiier este definit ca o colecie de informaii elementare de aceeai natur, numite nregistrri sau articole
(eng. items sau records). O nregistrare poate ea nsi avea o structur mai complicat (este introdus noiunea de
cmpuri pentru desemnarea unor componente). Exemple de organizare logic sunt date n 6.2.
Funciile principale, asigurate de un sistem de gestiune a fiierelor sunt:
crearea unui fiier (definirea numelui, alocarea eventual a spaiului),
distrugerea unui fiier (eliberarea numelui i a spaiului, alocat fiierului),
deschiderea unui fiier (declararea inteniei de a folosi fiierul cu ajutorul funciilor de acces i a drepturilor
specificate),
nchiderea unui fiier deschis (interzicerea oricrui acces ulterior),
diverse funcii de consultare i modificare: citire, scriere, modificarea lungimii, etc. (detaliile legate de aceste
funcii depind de organizarea logic a fiierului).
Aceste funcii sunt materializate prin operaiile de baz, prezente n toate SGF. Trebuie s adugm aici diverse funcii
detaliile crora depind de organizarea sistemului de gestiune: specificarea i consultarea drepturilor de acces, consultarea
caracteristicilor (data crerii, modificrii, etc.), operaii asupra numelui (schimbarea numelui, etc.).
Pstrarea fiierelor i realizarea funciilor de acces impune SGF s aib n arj:
gestiunea suporturilor fizice ale informaiei, ascunznd unui utilizator obinuit detaliile organizrii fizice,
securitatea i protecia fiierelor, adic garantarea integritii lor n caz de accident sau de rea voin i respectarea
regulilor stabilite de utilizare (drepturi de acces, condiii de partajare).
ntr-un sistem de operare SGF joac rolul central, deoarece el trebuie s comande cea mai mare parte a informaiilor
utilizatorilor, ct i a sistemului propriu-zis. SGF are legturi strnse cu sistemul de intrare-ieire, este adesea convenabil
conceptual s nu se fac distincie ntre fiiere i unitile periferice ca suport surs sau destinaie a informaiei n timpul
execuiei unui program. n sistemele cu dispozitive speciale de adresare i desemnare a informaiei, cum ar fi memoria
virtual sau segmentat, SGF trebuie s fie legat de aceste mecanisme, din care cauz adesea pot avea loc confuzii.
6.1.2. Organizarea general a unui sistem de gestiune a fiierelor
SGF realizeaz corespondena ntre organizarea logic i organizarea fizic a fiierelor. Organizarea logic,
unic cunoscut de utilizator, este determinat de consideraii de comoditate i universalitate; organizarea fizic, legat de
suporturile de memorie utilizate, este determinat de considerente de economisire a spaiului i eficacitatea accesului.
Aceste dou organizri sunt, n genere, diferite fiecare fiind definite prin structuri de date proprii, controlate de SGF.
Drept rezultat, SGF sunt construite conform unei structuri ierarhice, care are cel puin dou niveluri corespunztoare celor
dou organizri, menionate mai sus: orice aciune, definit la nivelul logic este interpretat de un set de aciuni la nivelul
fizic. Pentru facilitarea concepiei sau pentru a rspunde unor necesiti specifice (portabilitate, de exemplu) pot fi
definite i unele nivele intermediare.
Pentru separarea organizrii fizice de organizarea logic este recomandabil s fie introdus o organizare intermediar,
care joac rol de interfa. Aceast organizare intermediar poate fi un segment, adic o suit de amplasamente adiacente,

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.2 din 25


desemnate de valori ntregi pozitive, numite adrese logice sau deplasri. Putem separa, n acest caz, n dou etape
stabilirea corespondenei ntre organizarea logic i cea fizic (fig.6.1):
traducerea numelor, specificate de funciile de acces la fiier, n adrese logice (un atare nume desemneaz o
nregistrare sau un cmp al acesteia),
traducerea adreselor logice n adrese fizice
.
funcii de acces

desemnarea nregistrrii adres logic adres fizic

Fig.6.1. Adresare logic ntr-un fiier


Aceast schem reprezint doar un model explicativ, adesea etapa intermediar este scurtcircuitat, funciile de acces
fiind traduse direct n adrese fizice. Mai notm, c n cazul unui calculator cu memorie segmentat, reprezentarea
fiierelor se reduce la prima etap: implantarea fizic a segmentelor este n arja sistemului de operare.
Completnd modelul de mai sus cu elementele, legate de desemnarea fiierelor din 5.2, construirea organizrii SGF
poate fi reprezentat conform schemei din figura 6.2.

Funcii de acces logic


Nume
externe i Interfaa
locale legarea numelor utilizatorului

Interpretarea Interpretarea
numelor locale numelor externe

Nume Realizarea
interne funciilor de acces
logic

Interfee interne la SGF


Adrese Realizarea
logice funciilor de acces
fizic

Adrese Alocarea Realizarea


fizice memoriei I-E
secundare fizice

Fig.6.2. Organizarea unui sistem de gestiune a fiierelor

Aceast schem nu trebuie s fie considerat drept un cadru rigid, care ar putea ine cont de toate modurile de
organizare a SGF, ci doar ca un ghid pentru stabilirea funciilor i structurilor de date mai frecvente. Planul adoptat pentru
restul capitolului va urma, ntr-un mod descendent, ierarhia astfel stabilit.

6.2. Organizarea logic a fiierelor


6.2.1. Introducere
Vom examina acuma modurile principale de organizare logic a unui fiier i realizarea lor. La aceast faz a studiului
este suficient s traducem n adrese logice sau deplasare localizarea nregistrrilor, manipulate de funciile de acces;
determinarea adreselor lor fizice este examinat n 6.4.
Pentru specificarea organizrii logice a unui fiier definim mai nti o structur abstract a fiierului. Pentru aceasta
vom utiliza un model simplu de descriere a datelor, care ne va permite s caracterizm nregistrrile, s definim
organizarea global a fiierului i s exprimm funciile de acces. Vom preciza mai apoi reprezentarea concret a
informaiilor, care se conin n fiier.

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.3 din 25


Un fiier este o mulime de nregistrri (articole). Fiecrui articol i este asociat un numr constant de n atribute,
aceleai pentru toate articolele. Un atribut este definit printr-un nume i un domeniu de valori. Numele este pentru
desemnarea atributului; dou atribute distincte au nume diferite. Domeniul de valori specific valorile pe care le poate lua
atributul.
Specificarea organizrii fiierului este completat de restriciile, care trebuie s fie satisfcute de ctre articole. Aceste
restricii pot lua forme diverse (restricii de ordine a articolelor, restricii legate de valorile atributelor, relaii ntre
atributele diferitelor articole, etc.). Desemnarea articolelor, n expresia funciilor de acces, utilizeaz atributele articolelor,
innd cont de restriciile specificate.
Ilustrm aceste definiii cu dou exemple, care vor fi necesare mai apoi.
Exemplul 6.1. Fiier secvenial de caractere. Fiecare nregistrare a fiierului posed urmtoarele atribute:
(numr, <ntreg>)
(coninut, <caracter ASCII>)
Restricia este, c articolele fiierului sunt ordonate, articolele succesive avnd drept numr valori ntregi consecutive.
n reprezentarea fiierului atributul numr nu este reprezentat explicit, dar este definit de ordinea articolelor. Mai mult, atributul
valoare este reprezentat doar prin valoarea sa, iar fiierul este simplu reprezentat sub forma unei suite de caractere.
Utilizarea atributului numr permite specificarea diferitor funcii de acces. De exemplu, dac ne vom limita la consultare:
citire(urm) citete caracterul, care urmeaz dup o poziie curent specificat (poziia ultimei lecturi); pune valoarea
caracterului n urm.
citire(i, c) citete caracterul cu numrul i; valoarea acestuia este pus n c.
n ambele cazuri se va specifica efectul funciei, dac caracterul nu exist.
Prima funcie este de tip acces secvenial, cea de-a dou de tip acces direct.
Exemplul 6.2. Fiier de tip document. Fiecare nregistrare a acestui fiier, folosit pentru gestiunea unei biblioteci, are urmtoarele atribute:
(nume_lucrare, <identificatorul lucrrii>)
(autor, <lan de caractere>)
(editor, <lan de caractere>)
(an, <ntreg>)
(subiect, <lan de caractere>)
O restricie poate fi c dou articole diferite au ca nume identificatori de lucrri distincte (cu alte cuvinte, o lucrare este determinat n
mod unic de numele su).
S examinm reprezentarea acestui fiier. Dac stabilim o anumit ordine a celor cinci atribute ale unei nregistrri, numele acestor
atribute (care este acelai pentru orice articol), nu este necesar s fie pstrat n mod explicit. Fiecare articol este reprezentat de un ir
de cinci cmpuri, fiecare avnd un format prestabilit.
Pot fi specificate funcii de acces direct, desemnnd un articol prin atributul nume_lucrare (dac aceast desemnare este unic). Pentru
a specifica funcii de acces secvenial va fi necesar s ordonm n prealabil articolele cu ajutorul unei restricii suplimentare (relaii de
ordine, de exemplu, definind o ordine a numelor, autorilor, anului de editare, etc.).

Metodele de organizare logic a fiierelor (reprezentarea datelor, realizarea funciilor de acces) sunt aplicaii directe
ale structurilor de date: tabele, fire de ateptare, liste, etc., care sunt tratate n alte discipline. Ne vom opri la o succint
descriere a organizrii uzuale, fcnd trimitere la literatura de specialitate pentru studii mai aprofundate. Interesul
principal al acestei descrieri este de a elucida restriciile introduse de organizarea fizic a fiierelor.
6.2.2. Acces secvenial
n cadrul unei organizri secveniale nregistrrile sunt ordonate i pot fi desemnate de valori ntregi consecutive.
Totui, aceste numere de ordine nu pot fi folosite n cadrul funciilor de acces; este permis doar utilizarea funciei
succesor. Accesul secvenial este modul obinuit de utilizare a unui fiier, implantat fizic pe un suport n care accesarea
amplasamentelor este ea nsi secvenial, cum ar fi banda magnetic.
Un fiier f poate fi deschis pentru citire sau scriere. Unele organizri autorizeaz scrierea ncepnd de la o nregistrare
oarecare (v. exemplul din capitolul 9). Considerm, c scrierea se face la sfritul fiierului i deschiderea pentru scriere
iniializeaz fiierul n vid.
Deschiderea pentru scriere este realizat prin operaia:
deschide(mod):
if mod=citire then
f.rest:=<irul nregistrilor fiierului>
else
f:=<vid>
endif;
f.mod:=mod;
avansare
unde funcia avansare este definit dup cum urmeaz:

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.4 din 25


if f.rest=vid then
f.sfrit:=true
else
f.primul:=<pointer pe primul(f.rest)>;
f.rest:=f.rest-primul(f.rest)
endif
Operaia de citire a unei nregistrri are forma:
citire(f, a):
if non f.sfrit then
a:=<nregistrarea desemnat de f.primul>;
avansare
endif
Scrierea adaug o nregistrare la sfritul fiierului:
scriere(f,a):
if mod=citire then
<eroare>
else
alocare articol nou;
if eec then -- lungimea maxim a fost atins sau este necesar un spaiu mai mare
<eroare>
else
f.pa:=<pointer pe amplasamentul nregistrrii noi>;
<copiere a n amplasamentul desemnat de f.pa>
endif
endif
Aceste funcii de acces se traduc utiliznd adresele logice. Dac articolul curent nu este ultimul n fiier, adresa logic
a succesorului su este dat de adresa(curent)+lungimea(curent).
Dac articolele sunt de lungime variabil, lungimea nregistrrii curente poate fi obinut plecnd de la coninutul
acestui articol (de obicei, lungimea unei nregistrri este prezent explicit).
6.2.3. Acces direct
n cadrul organizrilor cu acces direct funciile de acces sunt exprimate ca funcii ale atributelor nregistrrilor; aceste
atribute sunt valori ale diferitor cmpuri. Se numete cheie orice cmp al unei nregistrri valoarea cruia poate servi la
identificarea nregistrrii. Conform organizrii adoptate, una sau mai multe cmpuri pot servi drept cheie.
6.2.3.1. Cheie unic
ntr-un fiier cu cheie unic fiecare nregistrare conine o singur cheie, care identific nregistrarea fr ambiguitate;
restul nregistrrii este informaia propriu-zis. Dou nregistrri distincte vor avea totdeauna dou valori diferite ale
cheii. Definim o procedur cutare(cheie, al), care pentru orice valoare a cheii:
sau pune la dispoziie adresa logic al (unic) a nregistrrii pentru care cheia posed valoarea dat (caz de
succes)
sau semnalizeaz cu ajutorul unui mecanism descris n capitolul 9, c o atare nregistrare nu exist (caz de eec):
excepie, cod de condiie; valoarea al este adresa la care nregistrarea ar putea fi inserat (valoare special, dac
nu mai este spaiu liber).
Procedura cutare servete la realizarea funciilor elementare de acces direct citire(cheie, info), adugare(cheie, info),
suprimare(cheie, info), modificare(cheie, info). Funciile citire, suprimare, modificare pot conduce la erori, dac
procedura cutare eueaz; procedura adugare genereaz o eroare, dac procedura cutare se termin cu succes.
Metodele realizrii procedurii cutare formeaz obiectul multor cercetri speciale. Aducem aici doar rezultatele
principale. Pentru realizarea procedurii cutare pot fi utilizate dou metode: adresarea dispersat i constituirea unui
indice.
a) Adresare dispersat (hash-coding)
Procedura cutare este realizat direct, construind o funcie al = f(cheie). Funcia f se numete funcie de dispersare.

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.5 din 25


Pare a fi o soluie funcia identitate: de exemplu, n cazul unei chei cu valoare ntreag, trebuie s lum n calitate de
adres al valoarea cheii (sau de k ori aceast valoare, dac o nregistrare ocup k amplasamente). Totui, aceast metod
este impracticabil. Fie, de exemplu, un fiier pentru care cheia are 9 cifre; un atare fiier poate s ocupe maximum 10 9
amplasamente logice. Dac lungimea medie a fiierului este de 10 5 nregistrri rata de umplere a fiierului cu nregistrri
utile este doar de ordinul 10-4. Dac dorim s evitm utilizarea ineficient a spaiului memoriei va trebui s ndreptm
atenia spre alegerea funciei de coresponden a adreselor logice i celor fizice. Folosirea funciei identitate este limitat
la cazurile rare pentru care domeniul de variaie a cheii este utilizat eficient cu o rat ridicat de ocupare a memoriei.
O funcie de dispersare ideal realizeaz o permutare ntre mulimea cheilor i cea a adreselor logice, limitat la
numrul de nregistrri din fiier. Pentru simplitate presupunem, c adresele logice pentru un fiier cu n nregistrri sunt
0,..., n-1. Funcia de dispersare trebuie s posede urmtoarele proprieti:
pentru orice nregistrare din fiier cu cheia c: 0 f(c) < n, (6.1)
pentru orice cuplu de nregistrri f(c1) f(c2), dac c1 c2. (6.2)
n practic este foarte dificil s se satisfac proprietatea (6.2): din aceast cauz trebuie admis posibilitatea
coliziunilor, adic existena cheilor, care nu verific ultima proprietate. Numrul de valori distincte calculate de funcia de
dispersare este inferior valorii lui n. n caz de coliziune este necesar o faz suplimentar pentru determinarea nregistrrii
cutate sau, n cazul unei inserri, s i se caute un loc. Alegerea funciei de dispersare n scopul reducerii probabilitii
coliziunilor i a metodelor de tratare a coliziunilor trebuie s in cont de caracteristicile utilizrii fiierului:
probabilitatea unor valori diferite ale cheii,
frecvena relativ a operaiilor de cutare, inserare i suprimare a articolelor.
Figura 6.3 prezint schematic organizarea unui fiier cu acces direct prin adresare dispersat.

articol 2 al2=f(cheie2)
f(cheie2)= f(cheie3)

cheie 1
cheie 2 funcie de f(cheie1) al1=f(cheie1)
dispersare articol 1
cheie 3
tratare
coliziuni
(coliziune ntre cheie1 i cheie3)
articol 3 al 3

Fig.6.3. Acces direct prin adresare dispersat


Principalul avantaj al metodei adresrii dispersate (dac se reuete s se asigure un nivel acceptabil al coliziunilor)
este rapiditatea: n lipsa coliziunilor gsirea unei nregistrri necesit o singur accesare a discului. Totui, n cazul cel
mai frecvent, cnd mulimea cheilor este ordonat, funcia de dispersare nu ntotdeauna asigur o relaie simpl ntre
ordinea cheilor i ordinea adreselor logice a nregistrrilor respective. Drept consecin, un acces secvenial, care ar
respecta ordinea cheilor, trebuie s fie realizat ca o suit de accese directe, fr simplificri. Metodele accesului indexat
permit remedierea acestui inconvenient.
b) Fiiere indexate
Metodele accesului indexat sunt utilizate n cazul cnd mulimea cheilor este ordonat. Relaia dintre cheie i adresa
logic este materializat printr-un tabel, numit tabel al indicilor, n care ordinea cheilor este semnificativ. Schema
principiului organizrii indexate este dat de fig.6.4
Tabelul indicilor
articol 2

Cheie 1

Cheie 2 articol 1

Cheie 3

articol 3

Fig.6.4. Acces direct prin indexare


14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.6 din 25
Schemele utilizate efectiv n practic sunt mai complexe pentru a permite:
accelerarea cutrii n cadrului indicelui,
facilitarea inserrii i a suprimrii nregistrrilor.
Fie n numrul nregistrrilor ntr-un fiier. Dac tabelul indicilor este organizat secvenial n ordinea cheilor i
cutarea unei chei se face prin parcurgere secvenial, numrul mediu de comparri (i de accesare a tabelului) este de
ordinul n/2. Aceast valoarea poate fi redus pn la log2 n adoptnd o organizare arborescent a tabelului (log2 n
reprezint adncimea medie a unui arbore binar echilibrat cu n vrfuri). Arborele risc s devin dezechilibrat, dac exist
foarte multe inserri i suprimri; pentru cazul cel mai puin favorabil adncimea arborelui devine de ordinul lui n. De
asemenea sunt utilizate forme particulare de arbore, cum ar fi B-arborii, pentru care este garantat, c timpul de cutare
rmne efectiv de ordinul lui log2 n.
Atunci cnd un fiier cu acces direct trebuie s poat fi utilizat n egal msur i n acces secvenial, fiierul poate fi
organizat conform unei scheme mixte, numit secvenial indexat, care conine un tabel al indicilor la diferite nivele la
care exist adrese fizice directe (v.6.3.2).
6.2.3.2. Chei multiple
Este cazul cnd pot fi utilizate mai multe chei pentru a desemna o nregistrare. n caz general, pot exista mai multe
nregistrri pentru care o cheie particular are o valoare dat. O cheie, valoarea creia determin nregistrarea n mod
univoc, se numete cheie primar; acest termen este aplicat, prin extensie, i pentru o combinaie de chei.
Tehnica de baz folosit pentru manipularea unui fiier cu chei multiple este organizarea multilist. Este utilizat cte
un indice distinct pentru fiecare cheie. Fiecare intrare a tabelului indicilor, asociat unei chei concrete, care corespunde
unei valori distincte a acestei chei, puncteaz topul unei liste n care sunt toate nregistrrile pentru care cheia considerat
posed valoarea dat. Pentru realizarea acestor liste fiecare nregistrare trebuie s conin tot atia pointeri cte chei ale
referinelor distincte exist. Figura 6.5 ilustreaz aceast organizare pentru exemplul unui fiier document.
pointeri autori
tabelul indicilor 200 pointeri editori
referinelor 500
900 adrese logice
100
750

tabelul indicilor
autorilor

tabelul indicilor
editorilor

Fig.6.5. Organizare multilist pentru un fiier cu chei multiple


n afara tabelului indicilor referinelor au mai fost introduse un tabel al autorilor i unul al editorilor. Fiecare intrare a
tabelului indicilor autorilor este topul unei liste, care grupeaz toate nregistrrile pentru care valoarea cmpului autor
este aceeai. Pointerii acestor liste sunt adrese logice. Este simplu de gsit toate lucrrile unui autor publicate la una i
aceeai editur. Pot fi obinute combinaii pentru aceste cereri cu ajutorul operaiei intersecie.
Este posibil comprimarea reprezentrii fiierului, utiliznd liste circulare, care includ intrrile corespunztoare ale
tabelelor indicilor (lista lucrrilor scrise de Paul, de exemplu, se nchide la intrarea Paul din tabelul indicilor autorilor).
Cmpurile autor i editor ale prii info a reprezentrii nregistrrilor pot fi suprimate pentru c ele pot fi determinate din
listele respective. Dezvoltnd aceast idee, se poate crea cte un indice distinct pentru fiecare cmp; reprezentarea

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.7 din 25


nregistrrilor va conine doar pointeri i toat informaia se conine doar n tabelele indicilor. Un fiier reprezentat n
acest mod se numete inversat. Aceast reprezentare permite un rspuns imediat la cereri legate de combinaii ale
cmpurilor i poate fi combinat cu organizarea direct, utiliznd o cheie primar. Tabelele indicilor secundari conin n
acest caz listele valorilor cheii primare. Pentru exemplul unui fiier documentar organizarea descris mai sus este
schematic prezentat n figura 6.6.

adres logic
tabelul
indicilor
referinelor

tabelul indicilor
autorilor nregistrri

tabelul indicilor
editorilor

tabelul indicilor
anilor

Fig.6.6. Organizarea unui fiier inversat


Terminm studierea funciilor de acces logic subliniind, c funciile de acces complex sunt construite pornind de la
funcii elementare. De exemplu, fiierele sistemului Unix sunt fiiere de caractere pentru care sunt puse la dispoziie un
set de primitive de acces direct. Orice funcie de acces mai complicat trebuie programat, utiliznd aceste primitive.

6.3. Organizarea fizic a fiierelor


n modelul ierarhic, prezentat mai sus, problema organizrii fizice a fiierelor poate fi formulat astfel: s se elaboreze
o implantare n memoria secundar a unei mulimi de fiiere respectnd urmtoarele ipoteze:
orice fiier este definit logic ca un segment, adic ca o mulime de informaii, care ocup amplasamente
adiacente, reperate prin adrese logice sau deplasri,
dac nu exist concretizri particulare (band magnetic, de exemplu), memoria secundar este de tip disc,
organizat ca o mulime de blocuri de lungime fix. Modul de adresare a blocurilor este precizat n 6.3.3; este
suficient s se cunoasc c blocurile sunt desemnate de adrese fizice ordonate, adrese consecutive desemnnd
blocuri adiacente.
Notm aici, c dac sistemul de operare realizeaz o memorie virtual segmentat, implantarea fizic a segmentelor i
realizarea funciilor de acces elementar (citire, scriere, execuie) sunt puse n arja sistemului. Este posibil n acest caz
confundarea noiunilor de segment i fiier. Funciile SGF sunt reduse la gestiunea numelor i organizarea logic, ceea ce
este realizat, de exemplu, pentru sistemul Multics.
Vom trata cazul unei gestionri directe de ctre SGF a implantrii fizice a fiierelor. Pot fi evideniate dou clase de
metode, dac lum n consideraie respectarea sau nerespectarea contiguitii adreselor logice.
6.3.1. Implantare secvenial
n acest caz fiecare fiier ocup o mulime de blocuri consecutive n memoria secundar. Este unicul mod de
implantare n cazul unei benzi magnetice: fiierele sunt aranjate consecutiv pe band, fiecare fiind separat de urmtorul cu
ajutorul unui simbol, numit sfrit de fiier (end of file, EOF). Un EOF dublu marcheaz sfritul prii utilizate a benzii.
Descriptorul unui fiier este plasat la nceputul fiierului i, adesea, repetat la sfritul fiierului. n interiorul fiierului
nregistrrile sunt aranjate consecutiv; dac lungimea lor este variabil, ea va fi prezent la nceputul fiecrei nregistrri.

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.8 din 25


Caracterul EOF este detectat n mod automat de controlerul mecanismului de derulare a benzii. O operaie cutarea
EOF-ului fiierului permite saltul de la un fiier la altul pentru cutarea unui fiier cu numele dat.
Implantarea secvenial poate fi n egal msur folosit i pentru discuri. Avantajul principal const n garantarea
unui acces secvenial eficient (informaiile cu adrese logice succesive sunt implantate n blocuri adiacente) permind n
acelai timp un acces direct eficient (calcularea adresei fizice pornind de la adresa logic este foarte simpl i nu cere
accesarea discului). Totui, aceast metod prezint inconveniente grave n cazul n care crearea, distrugerea sau
modificarea lungimii unui fiier sunt operaii frecvente:
memoria secundar devine fragmentat, defragmentarea periodic este costisitoare;
este complicat organizarea modificrii lungimii unui fiier: un fiier poate fi de o lungime mai mare doar
recopiindu-l integral ntr-o zon de memorie mai mare.
Drept consecin, implantarea secvenial pe disc este utilizat doar n cazurile n care dezavantajele susmenionate
pot fi diminuate:
pentru fiierele numrul i lungimea crora nu variaz (de exemplu, fiiere create odat pentru totdeauna i
utilizate mai apoi doar pentru consultare);
sisteme primitive pentru microcalculatoare, cnd simplitatea realizrii este un factor preponderent.
6.3.2. Implantare non contigu
Dac abandonm restricia contiguitii implantrii, memoria secundar se transform ntr-o resurs banalizat,
blocurile memoriei secundare fiind echivalente din punctul de vedere al alocrii lor. Pentru nceput introducem
informaiile necesare pentru realizarea funciilor de acces; informaiile pentru asigurarea securitii sunt descrise n 6.5.
6.3.2.1. Blocuri nlnuite
Blocurile fizice, care conin amplasamente logice consecutive sunt nlnuite ntre ele; pentru aceast nlnuire
trebuie s fie rezervat n fiecare bloc un pointer. Descriptorul conine un pointer la primul i ultimul bloc i numrul
blocurilor ocupate (fig.6.7).

Fig.6.7. Alocare prin blocuri nlnuite


Ultimul bloc, care poate fi utilizat parial, trebuie s conin indicaii despre numrul de amplasamente ocupate. Deci,
este necesar un amplasament n fiecare bloc pentru aceast informaie sau cel puin un bit (indicator) pentru marcarea
ultimul bloc. Deoarece exist un pointer la ultimul bloc este simplu s extindem un fiier, adugnd informaii la sfrit.
Acest mod de alocare este bine adaptat accesului secvenial. Ca rezultat, putem accesa un bloc doar respectnd
nlnuirea; accesul direct este costisitor, deoarece fiecare citire a unui pointer necesit o accesare a discului. La fel i
extinderea altfel, dect la sfrit, este foarte dificil: trebuie s permitem existena blocurilor parial pline, s prevedem o
dubl nlnuire, etc. Utilizarea alocrii nlnuite este limitat de cazul sistemelor mici, n special pentru organizarea
fiierelor pe dischete.
6.3.2.2. Tabele de implantare
n cazul accesului direct timpul de acces la un bloc trebuie s nu depind de adresa sa, ceea ce poate fi obinut punnd
toi pointerii ntr-un tabel unic de implantare. Descriem mai multe variante ale acestei metode, care difer prin modul de
organizare a tabelului. Problema principal este garantarea uniformitii timpilor de acces pentru tabelele de lungime
mare i permiterea inserrii i distrugerii blocurilor n orice punct al fiierului.
1) Tabel unic
Figura 6.8 (a) descrie o organizare cu tabel unic. Lungimea fiierului este limitat de numrul blocurilor pe care
descriptorul le definete n tabel (el nsui coninndu-se ntr-un numr ntreg de blocuri).
2) Tabel nlnuit
Conform organizrii din fig.6.8 (b) tabela de implantare const dintr-o suit de blocuri nlnuite. Putem depi n
acest fel limitarea dimensiunii unui fiier, devine posibil inserarea blocurilor n mijlocul fiierului, cu condiia rezervrii
unor amplasamente libere n tabel. Reorganizarea generat de inserare este legat de un bloc al tabelului, iar dimensiunea

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.9 din 25


tabelului de implantare este limitat de costul cutrii n acest tabel. Pentru tabele mari organizarea descris este mai
eficace.
3) Tabele cu mai multe nivele
Figura 6.9 descrie o organizare n care tabelul de implantare a fiierului este organizat n mod arborescent, pe niveluri
(de obicei, dou sau trei niveluri).
Organizarea dat permite un acces direct rapid la un bloc cu adresa logic dat; ea permite inserrile cu unele msuri
de precauie.

Fig.6.8. Tabel de implantare cu un nivel

Fig.6.9. Tabel de implantare cu dou nivele

4) Aplicaii: organizare secvenial indexat


Cu titlu de exemplu vom descrie o organizare frecvent utilizat, cea a fiierelor secveniale indexate. Este vorba de o
schem n care organizarea logic i cea fizic nu sunt separate net: tabelul indicilor i tabelul implantrii sunt grupate
ntr-o structur de date unic.
Aceast organizare se aplic la fiiere pentru care se cere utilizarea simultan a accesului direct (cu ajutorul cheilor) i
a accesului secvenial (specificat de o ordonare a cheilor). Pentru simplitate, vom descrie o organizare n care cheia este
unic.
Principiul const n organizarea tabelului indicilor (ordonai conform valorii cheii) ca un tabel de implantare cu mai
multe niveluri n care figureaz nu adrese logice, ci adrese fizice. Printre altele, cel puin pentru implantarea iniial se
ncearc s se plaseze informaii logic contigue n blocuri vecine pentru a permite un acces secvenial eficient.
Figura 6.10 ilustreaz principiul organizrii secveniale indexate pentru cazul, descris n exemplul 2 din 6.2.1. Cheia
utilizat este numrul referinei. Este folosit o organizare pe dou niveluri. Intrarea i a tabelului primar al indicilor (cheia
cp[i]) puncteaz la un tabel secundar al indicilor, care repereaz nregistrrile pentru care cheia c verific relaia

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.10 din 25


cp[i-1] < c cp[i]
Mai mult, fiecare intrare a tabelului secundar puncteaz o zon, unde sunt plasate secvenial nregistrrile cu aceeai
organizare a cheilor. Aceast ultim zon este de lungime suficient de mic pentru a putea fi citit ntreag n memorie
atunci cnd este accesat un articol pe care ea l conine. Tabelul primar fiind pstrat n memoria central atunci cnd
fiierul este deschis, consultarea unei nregistrri cere dou accesri a discului pentru prima citire a unei zone i nici una
pentru consultarea nregistrrilor succesive din zon. Accesul secvenial este astfel eficient, ns accesul direct rmne
posibil graie tabelului indicilor.

Fig.6.10. Fiier secvenial indexat

Problema principal a organizrii secveniale indexate vine de la inserarea i suprimarea nregistrrilor. Chiar de la
crearea iniial a fiierului, pot fi lsate amplasamente libere n fiecare zon, care este apoi modificat prin compresie,
atunci cnd au loc modificri. Dac toate amplasamentele rezervate sunt ocupate, sunt utilizate zone de depire: fiecrui
tabel secundar i se asociaz o zon de depire, nregistrrile fiind ordonate n ordinea inserrii. Cutarea unui articol are
o durat mai mare, iar atunci cnd zonele de depire sunt foarte pline este preferabil s fie reorganizat fiierul n
ntregime, alocnd zone noi i crend, la necesitate, tabele secundare noi.
6.3.3. Alocarea memoriei secundare
Problema alocrii memoriei secundare poate fi pus n termeni similari cu cea a memoriei principale; restriciile
principale sunt:
alocarea prin blocuri de lungime fix,
costul ridicat al accesului,
caracteristicile proprii fiecrui suport: organizarea pe piste, dispozitive de citire-scriere mobile sau fixe.
Interfaa alocatorului memoriei secundare conine dou primitive:
cerere_zon(n,a) date : n (ntreg), numrul de blocuri contigue cerute
rezultat : a (adres), adresa primului bloc
excepie : numr de blocuri insuficiente
eliberare_zon(n,a) date :
n (ntreg), numrul de blocuri contigue eliberate
a (adres), adresa primului bloc
excepie : numr de blocuri eliberate
Cazul n=1 este ntlnit frecvent i poate justifica folosirea primitivelor particulare (cerere_zon, eliberare_zon).
Structura de date cel mai des utilizat pentru a descrie starea de ocupare a memoriei este un lan de bii, bitul cu
numrul i indicnd starea (ocupat sau liber) a blocului cu acelai numr.
Acest tabel de ocupare poate atinge dimensiuni importante; de exemplu, sunt necesari 12,5 Ko pentru a descrie
ocuparea unui disc de 200 Mo alocai prin blocuri de 2 Ko. Pentru a spori eficiena algoritmilor de alocare tabelul poate fi
organizat pe mai multe niveluri.
Exemplul 6.3. Discurile cu brae mobile sunt organizate pe cilindre (mulime de blocuri, accesibile pentru o poziie dat a braului mobil). Fiecare
cilindru conine tabelul de ocupare a blocurilor pe care intr n componena sa; mai mult, un tabel care duce evidena umplerii

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.11 din 25


cilindrelor, ncrcat n memoria central, indic numrul de blocuri libere n fiecare cilindru. Cutarea unei zone libere poate s se fac
fr deplasarea braului, dac cilindrul curent conine un numr suficient de blocuri libere; n caz contrar, dintre cilindrele posibile
poate fi ales cilindrul, care este cel mai aproape de poziia curent a braului.

Din raionamente de securitate (v. 6.5), starea liber sau ocupat a unui bloc este pstrat chiar n blocul propriu-zis.

6.4. Realizarea funciilor de acces elementar


6.4.1. Organizarea descriptorilor
Un descriptor de fiier trebuie s conin informaii de tipuri diverse:
informaii pentru localizarea fizic,
informaii referitor la utilizare,
informaii asociate proteciei i securitii.
6.4.1.1. Localizarea fizic
Informaiile pentru localizarea fizic a unui fiier au fost descrise n 6.3. Dac aceste informaii sunt de dimensiune
fix i redus (implantare contigu, blocuri nlnuite) ele se conin direct n descriptor; n caz contrar (tabele de
implantare nlnuite sau pe mai multe niveluri), descriptorul conine doar un pointer la tabelul de implantare i nite
informaii sintetice, cum ar fi dimensiunea fiierului, dimensiunea tabelului de implantare, etc.
6.4.1.2. Informaii de utilizare
Informaiile, legate de utilizarea unui fiier pot fi clasificate dup cum urmeaz:
1) Informaii de stare. Aceste informaii definesc starea curent a fiierului: deschis sau nchis, gradul de partajare
(numrul de utilizatori, care au deschis simultan fiierul), disponibilitatea pentru modificare, etc.
2) Informaii despre coninutul fiierului. Aceste informaii permit interpretarea coninutului fiierului. Este posibil
s se asocieze unui fiier un tip, care specific operaiile permise. Sunt utilizate, de exemplu, tipurile text
ASCII, binar translatabil, binar absolut, catalog, etc. Chiar la deschiderea unui fiier putem verifica, dac
utilizarea pretins este compatibil cu tipul fiierului.
3) Informaii despre structura logic. Aici pot fi plasate informaiile care permit trecere de la structura logic la
structura fizic a fiierului. De exemplu, n cazul nregistrrilor de lungime fix este convenabil s se aleag
lungimea nregistrrii multiplu sau submultiplu al lungimii blocului fizic. Raportul lungimea blocului/lungimea
nregistrrii, adesea numit factor de bloc, figureaz n cadrul descriptorului.
4) Informaii despre utilizrile precedente. Aceste informaii pot fi de natur statistic (numrul deschiderilor,
accesrilor, intervalul mediu timp de ntre accesri, gradul mediu de partajare, etc.) i au scopul de a nelege mai
bine funcionarea sistemului pentru ameliorarea lui. De exemplu, informaiile despre utilizare pot ajuta la o
gestiune automat a ierarhiei memoriei secundare: fiierele neutilizate o perioad lung pot fi transferate ntr-o
memorie de arhivare pentru a elibera loc n memoriile cu acces rapid. Aceste informaii mai pot fi utilizate pentru
diferite funcii de securitate: nregistrarea datei ultimului acces sau a ultimei modificri permite un control al
utilizrii fiierului.
Precizm realizarea funciilor elementare de acces (primitive), definite n 6.1.
Ca i majoritatea funciilor unui sistem de operare, aceste primitive pot fi apelate n dou moduri: cu ajutorul unor
instruciuni sau prin apelarea regimului supervizor. La nivelul limbajului de comand fiierele sunt desemnate prin
numele lor simbolic, care este interpretat n contextul curent. Dac o primitiv este apelat printr-un apel al
supervizorului, n timpul execuiei unui program, fiierele sunt, de obicei, desemnate de numele local, care este cel al unui
descriptor valid n interiorul programului curent. Corespondena ntre numele simbolice i numele locale este realizat
prin instruciuni de asociere. Interpretarea numelor fiierelor este comun tuturor primitivelor.
Pentru fiecare primitiv vom prezenta:
specificrile interfeei,
algoritmul care o realizeaz,
situaiile anormale posibile.
6.4.2. Crearea i distrugerea
6.4.2.1. Crearea
1) Specificarea interfeei
Parametrii furnizai sunt:
numele fiierului

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.12 din 25


tipul (opional)
lungimea (opional)
starea iniial (opional)
Cel mai frecvent, parametrii starea iniial i lungimea nu sunt furnizai, avnd valori implicite: lungimea = 0, fiierul
este nchis, lista de acces predefinit.
2) Operaii
s se creeze un descriptor pentru fiier, obinem astfel un nume intern,
dac numele furnizat este un nume extern, s se creeze o intrare a acestui nume n catalogul curent,
s se aloce memorie fiierului; chiar dac lungimea sa este nul, un fiier conine un antet, care ocup primul su
bloc,
s se iniializeze descriptorul cu informaiile de localizare, lungime, protecie (lista drepturilor iniiale de acces),
dac descriptorul nu se conine direct n catalog, s se introduc o intrare n catalog cu numele intern al fiierului
(adresa descriptorului).
3) Cazuri anormale
nume furnizat incorect (incorect construit sau care desemneaz un fiier deja existent);
memorie insuficient n memoria secundar.
Fiierul nu poate fi creat i situaia anormal este semnalat.
6.4.2.2. Distrugerea
1) Specificarea interfeei
Unicul parametru furnizat este numele fiierului. Efectul operaiei este de a suprima orice acces ulterior la fiier,
invalidnd toate numele acestuia i elibernd toate resursele pe care fiierul le utilizeaz (intrri n tabele, memorie).
2) Operaii
s se elibereze toat memoria, care a fost alocat fiierului;
s se elibereze memoria alocat descriptorului i numele intern s devin reutilizabil (sau invalidat definitiv);
suprimarea numelui extern al fiierului n catalogul, care-l include, de asemenea, dac este cazul, n tabelul
numelor locale.
Aceast ultim operaie poate fi destul de delicat, dac exist mai multe ci de acces la fiier. Poate fi utilizat una
din urmtoarele soluii:
dac cile multiple de acces sunt legturi, nu se va lua nici o msur; un acces ulterior prin una din aceste legturi
va conduce la numele extern. Inexistena fiierului va fi detectat (cu excepia cazului n care un fiier cu acelai
nume a fost creat n intervalul de timp dat);
dac cile multiple de acces sunt nume (ceea ce se poate produce, dac structura catalogului nu este o
arborescen) vor fi utilizate sau legturi inverse (metod costisitoare), sau un contor al referinelor pstrat n
descriptor, care duce evidena numrului cilor de acces. Un fiier poate fi distrus doar dac exist o singur cale
de acces. Aceast soluie este utilizat, de exemplu, n sistemul Unix.
6.4.3. Deschiderea i nchiderea
6.4.3.1. Deschiderea
1) Specificarea interfeei
Parametrii operaiei de deschidere sunt:
numele fiierului
condiiile de utilizare:
modul de acces (citire, scriere, execuie, etc.)
procedurile de acces (secvenial, direct, sincron, etc.)
parametrii de transfer (tampoane, etc.)
Operaia de deschidere are scopul de a pune un fiier n starea n care accesul este posibil conform modului specificat.
Aceast operaiei este de dubl utilitate pentru SGF:
Protecie. SGF poate s controleze:
la deschidere, dac utilizatorul este autorizat s acceseze fiierul n condiiile specificate,
la fiecare accesare a fiierului, dac condiiile de acces sunt compatibile cu cele specificate la deschidere,

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.13 din 25


n caz de partajare, dac condiiile de accesare ale utilizatorilor sunt reciproc compatibile.
Eficien. SGF poate s accelereze accesul la fiierele deschise, aducnd n memorie descriptorii lor, tabelele de
implantare i textele procedurilor de acces. Fiierul nsui poate fi transferat, eventual, pe un suport cu acces mai
rapid; dac el se afl pe un suport amovibil nemontat, montarea este necesar.
Numele furnizat ca parametru poate fi un nume extern sau local. Pentru durata deschiderii unui fiier SGF trebuie s
poat accesa rapid toate informaiile necesare utilizrii: descriptorul i condiiile de utilizare valabile pentru perioada
deschiderii. Aceste informaii sunt apoi plasate ntr-un descriptor local, durata de existen a cruia este durata aflrii
fiierului n starea deschis; numele local este numele acestui descriptor local.
2) Operaii
La deschidere vor fi realizate urmtoarele operaii:
localizarea fiierului i, eventual, transferarea lui pe un suport mai rapid; cerere eventual de montare a acestuia,
controlarea dreptului utilizatorului de a deschide fiierul n modul specificat (consultnd lista de acces),
crearea unui descriptor local (dac fiierul nu posed deja unul n mediul curent) i atribuirea unui nume local,
alocarea eventual a memoriei pentru zonele tampon de intrare-ieire; n unele cazuri programul de intrare-ieire
al canalului poate fi construit n dependen de condiiile specificate pentru transfer.
3) Cazuri anormale
condiii de deschidere incompatibile cu drepturile utilizatorului,
imposibilitatea deschiderii, datorat restriciilor specificate pentru partajare (de exemplu, restricii de tipul cititor-
redactor),
lipsa spaiului n memorie pentru descriptorul local sau zonele tampon.
6.4.3.2. nchiderea
1) Specificarea interfeei
Unicul parametru necesar este numele fiierului. Efectul operaiei este de a interzice orice acces ulterior la fiier i de
a-l transfera ntr-o stare coerent i stabil, redndu-i definitiv toate modificrile operate n perioada ct a fost deschis.
2) Operaii
Descriptorul fiierului este actualizat (dac aceasta nu a fost fcut anterior) pentru a nregistra definitiv modificrile
operate n perioada ct a fost deschis; descriptorul local este suprimat, numele local putnd fi reutilizat. Memoria ocupat
de zonele tampon i procedurile de intrare-ieire este eliberat, dac ea a fost alocat doar pentru perioada de deschidere a
fiierului. Fiierul este, eventual, transferat pe suportul su de origine; o cerere de demontare este trimis dac suportul de
origine este amovibil.
Unele sisteme opereaz cu fiiere temporare, adic fiiere desemnate doar de numele local. La nchiderea unui astfel
de fiier, utilizatorul are de ales ntre dou posibiliti:
s catalogheze fiierul, atribuindu-i un nume extern; fiierul va fi n acest caz salvat.
(implicit) s nu fac nimic, fiierul fiind distrus n acest caz.
3) Cazuri anormale
Pentru garantarea coerenei fiierului, n timpul nchiderii nu trebuie s aib loc operaii de transfer (a descriptorului
sau a fiierului).
6.4.4. Acces elementar la informaii
Parametrii primitivelor de transfer permit specificarea:
metodei de acces utilizate, care determin modul de desemnare a nregistrrilor - obiectul transferului (acces
secvenial, direct, cu chei, etc.),
sincronizarea transferului (transfer sincron sau asincron); n cazul unui transfer asincron, modul de deblocare a
unui proces apelant,
zonele tampon utilizate (specificate de ctre utilizator sau furnizate de SGF).
Accesul elementar (citire sau scriere) la o nregistrare a fiierului const din dou etape:
determinarea adresei fizice a nregistrrii plecnd de la desemnarea sa logic; pentru aceasta sunt utilizate
metodele descrise n 6.2,
executarea transferului fizic; va fi folosit adresa obinut mai sus i primitivele de acces fizic la disc (v.cap.4).

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.14 din 25


6.5. Securitatea i protecia fiierelor
6.5.1. Despre securitate i protecie
Fiierele conin toat informaia administrat de sistemul de operare, inclusiv informaia necesar gestiunii sistemului.
Este important s se garanteze integritatea acestor informaii n eventualitatea unor pene fizice, logice sau n caz de rea
voin. Obiectivele i metodele pot fi considerate aparinnd la dou direcii: securitate i protecie.
Cu titlul securitate vom ngloba mulimea metodelor, care sunt chemate s garanteze execuia tuturor operaiilor
asupra unui fiier n conformitate cu specificaiile lor, chiar n cazul unor defecte n cursul execuiei, i c informaiile
coninute ntr-un fiier nu sunt alterate, dac nici o operaie nu a fost executat. Metodele utilizate sunt, n caz general,
cele care asigur tolerana sistemului la defecte; baza lor este redundana informaiilor.
Prin protecie vom nelege mulimea metodelor chemate s specifice regulile de utilizare i s garanteze respectarea
lor. O descriere succint a metodelor principale de protecie a fost adus n 5.1.4. Ele se bazeaz pe noiunea de drept de
acces i existena unui mecanism, care permite s se garanteze conformitatea operaiilor drepturilor de acces specificate.
6.5.2. Securitatea fiierelor
Securitatea fiierelor este asigurat, dup cum a fost menionat, prin redundana informaiilor. Redundana poate fi
introdus n dou moduri: salvarea periodic a unor informaii, pentru a putea restabili o stare anterioar n caz de
distrugere, i redundana intern, care permite reconstituirea unor informaii devenite incoerente din cauza unui accident
de origine fizic sau logic, care a provocat o alterare parial.
6.5.2.1. Redundana intern i restabilirea informaiilor
Principiul redundanei interne const n organizarea structurilor de date astfel, nct orice informaie s poat fi
obinut prin cel puin dou ci distincte. Se reduce astfel probabilitatea c distrugerea accidental a unei pri a
informaiei va conduce la pierderea iremediabil a coninutului fiierului.
Tehnicile frecvent utilizate n acest scop sunt urmtoarele:
pentru un fiier pstrat pe disc n blocuri nlnuite se va folosi nlnuirea dubl (succesor-predecesor),
se va include n fiecare bloc un pointer la blocul, care conine descriptorul, sau indicaia c blocul este liber,
se va include n descriptor numele simbolic al fiierului i un pointer la catalogul n care se conine fiierul,
o parte a descriptorului va fi dublat (de exemplu, n primul i ultimul bloc al fiierului).
Exemplul 6.4. Cu titlul de ilustrare a tehnicilor de redundan intern descriem principiul organizrii fiierelor pe un calculator personal (Alto Xerox,
organizare, care a fost preluat n sistemul Pilot al firmei Xerox).
Un fiier este organizat logic sub forma unei suite de nregistrri de lungime fix (256 octei), numite pagini. Pagina fiierului este
informaia elementar accesibil. Concepia SGF se bazeaz pe urmtoarele principii:
1. Informaiile se mpart n absolute i auxiliare; informaiile absolute sunt suficiente, n principiu, pentru definirea total a
SGF; informaiile auxiliare servesc pentru accelerarea accesului,
2. Dac o informaie auxiliar este utilizat pentru un acces, validitatea accesului este ntotdeauna verificat utiliznd o
informaie absolut,
3. Informaiile auxiliare pot fi reconstituite pornind de la cele absolute.
Sunt disponibile urmtoarele funcii:
crearea unui fiier (iniial vid),
adugarea unei pagini la sfritul unui fiier,
distrugerea ultimei pagini a unui fiier,
citirea sau scrierea unei pagini oarecare a unui fiier,
distrugerea fiierului.
Un fiier este desemnat cu ajutorul unui nume intern FV, care este concatenarea unui nume unic F i unui numr de versiune V. O
pagin cu numrul N a unui fiier FV este desemnat printr-un nume logic (FV, N). Orice acces la o pagin a fiierului utilizeaz
numele su logic.
Fiecare pagin ocup un bloc pe disc. Un bloc cu adresa fizic AD pe disc, care conine o pagin (FV, N) conine urmtoarele
informaii:
numrul discului i adresa AD paginii pe acest disc,
un antet compus dup cum urmeaz:
F nume unic absolut
V numrul versiunii absolut
N numrul paginii n fiier absolut
AP adresa pe disc a paginii N-1 auxiliar
AS adresa pe disc a paginii N+1 auxiliar
256 octei care conin valoarea paginii fiierului.
Desemnarea extern a fiierelor este realizat cu ajutorul cataloagelor, care ele singure sunt fiiere. Orice intrare a unui catalog, care
corespunde unui fiier, este un triplet (id, FV, AD) unde:
id este identificatorul fiierului
FV este numele intern al fiierului
AD este adresa pe disc a paginii 0 a fiierului.
Un fiier poate aparine mai multor cataloage; unul dintre acestea fiind identificat catalog proprietar.
Fiecare fiier conine o pagin suplimentar, numit pagin de gard, identificat de numrul 1. Aceast pagin conine:

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.15 din 25


identificatorul fiierului,
numele catalogului proprietar i adresa primei sale pagini.
Aceste informaii sunt absolute, coninutul catalogului, din contra, este considerat informaii auxiliare.
Principiul redundanei active este realizat dup cum urmeaz.
a) Verificare la alocare i la eliberare
Un bloc liber are antetul plin de zerouri. Aceast informaie este absolut; tabelul de ocupare a discului (un bit per bloc, starea liber
sau ocupat) are doar valoare auxiliar.
Antetul unei pagini este modificat n dou situaii:
la prima scriere dup alocare; se verific dac blocul este liber,
la eliberarea blocului; se verific dac FV este al paginii eliberate, umplnd antetul cu zerouri.
b) Verificarea accesului
Numele absolut al unei pagini de fiier este (FV, N); este numele utilizat pentru specificarea unui acces. De fapt, aceasta este o adres,
informaie auxiliar, care este utilizat pentru operaia fizic de acces. La fiece acces fizic la o pagin antetul acesteia este consultat
pentru a verifica dac numele absolut (FV, N), care-i prezent aici este chiar cel al paginii specificate. Modul de funcionare a
controlerului discului permite executarea acestei operaii din zbor fr a pierde o turaie a discului.
c) Restabilirea
Operaia de restabilirea permite reconstituirea informaiilor auxiliare pornind de la informaiile absolute, n mod special:
se verific, dac toate legturile sunt valide i sunt restabilite care au putut fi distruse,
sunt restabilite cataloagele,
este restabilit tabelul de ocupare a discului,
sunt semnalate toate incoerenele, care nu au putut fi reparate.
Restabilirea este realizat la lansarea sistemului, dar mai poate fi cerut, dac au aprut unele incoerene n timpul lucrului. Algoritmul
restabilirii poate fi de forma:
1) Va fi parcurs tot discul, bloc cu bloc; pentru fiecare bloc de numr i procedndu-se dup cum urmeaz:
dac antetul blocului conine doar zerouri, se va marca blocul i liber n tabelul de ocupare,
n caz contrar, s se introduc (FV, N, i) ntr-un tabel de blocuri, triat conform FV, N; s se verifice legturile i s fie
actualizate, dac este cazul.
2) Vor fi parcurse toate cataloagele (cataloagele au numerele F rezervate); se va verifica dac fiecare catalog conine un pointer la
pagina 0 a unui fiier; dac rmn fiiere necatalogate, se va crea o intrare pentru fiecare n catalogul proprietarului su; dac
acest catalog nu exist, fiierul va fi clasat ntr-un catalog al fiierelor eronate.
3) Vor fi inventariate fiierele, care nu au putut fi restabilite.

6.5.2.2. Salvare periodic


Se poate apriori conveni s fie salvate, la intervale regulate de timp, toate informaiile coninute ntr-un SGF.
Admind o salvare pe discul dur la un debit de 20 Mo/s, durata acestei operaii este de aproximativ 50 s pentru 1 Go.
Poate fi realizat salvarea doar a modificrilor, care au avut loc pentru ultima perioad, concomitent cu lucrul normal al
sistemului.
Informaiile obinute n acest mod pot fi utilizate n dou moduri:
la cererea explicit a unui utilizator, pentru a restabili o stare anterioar a unui fiier specificat,
dup o pan, conform procedurii de mai jos.
n caz de pan, se va ncerca mai nti s se restabileasc informaiile SGF utiliznd redundana intern, cum a fost
descris mai sus. La terminarea acestei operaii vom avea la dispoziie o list a fiierelor bnuite a fi alterate. Dup aceasta
vor fi restabilite fiierele presupuse a fi alterate, folosind datele cele mai recent salvate.
6.5.3. Protecia fiierelor
Protecia fiierelor folosete principiul listelor de acces. O list de acces, asociat unui fiier, conine drepturile
fiecrui utilizator asupra fiierului, adic mulimea operaiilor care i sunt permise. n practic, diferite convenii permit
reducerea listei. Este definit mai nti mulimea drepturilor atribuite implicit fiecrui utilizator (mulime, care poate fi
vid); lista de acces va conine doar utilizatorii, drepturile crora difer de cele implicite. Convenii de grupare permit
asocierea unei mulimi de drepturi unui grup de utilizatori (membrii unui proiect, etc.), ceea ce reduce i mai mult lista.
Lista de acces servete la verificarea validitii oricrei operaii asupra fiierului.
6.5.4. Autentificarea n Windows NT
Sistemul de operare Windows NT posed mai multe instrumente de control a drepturilor de acces al utilizatorilor la
resursele sistemului. Aceste instrumente ar fi absolut inutile n lipsa posibilitii de a controla dac la calculator se afl
anume acel utilizator, care corespunde datelor de eviden. Mecanismul, cu ajutorul cruia un utilizator i poate confirma
autenticitatea se numete de autentificare. Autentificarea se produce n baza unui element secret (autentificator), aflat
doar n posesia utilizatorului definit de informaia de eviden. De obicei, drept autentificator servete parola
utilizatorului, ns acesta poate fi i o cartel special (smart, badge) sau informaii, legate de datele biometrice ale
utilizatorului. Windows NT permite dezvoltatorilor externi extinderea mecanismelor de autentificare. SO Windows NT
execut autentificarea la intrarea n sistem. Pentru majoritatea cazurilor aceasta este suficient, deoarece sistemul n mod
automat personalizeaz accesul n baza numelui utilizatorului intrat n sistem. Mai mult, Microsoft nu recomand
introducerea unor mecanisme de autentificare proprii n aplicaii, respectnd principiul intrrii unice (Unified Logon)
utilizatorul trebuie s introduc parola o singur dat la intrarea n sistem. Exist mai multe motivaii pentru aceasta:

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.16 din 25


1.Cereri suplimentare de introducere a numelui i parolei pot fi enervante pentru unii utilizatori,
2.Programarea incorect a mecanismului de autentificare poate diminua securitatea sistemului,
3.Windows NT permite extinderea mecanismului de autentificare. Programele, construite cu un mecanism
propriu de autentificare pot fi inutile, dac sistemul utilizeaz un alt mecanism, dect cel presupus la
elaborarea aplicaiei.
Dac se presupune obligator controlul numelui utilizatorului i a parolei, pot fi propuse dou metode de autentificare:
1. cu ajutorul funciei LogonUser - este cea mai simpl metod, dar cere existena unor prioriti pentru cel
care apeleaz funcia dat (nu este cazul i pentru Windows XP).
2. utiliznd Security Support Provider Interface (SSPI) - o metod mai complicat, dar nu cere prioriti
suplimentare. Mai mult, metoda este funcional i pentru autentificare la distan.
Vom mai cerceta i metoda bazat pe funcia NetUserChangePassword, recomandat pentru controlul parolelor.
Unii autori nu agreeaz aceast metod la prima vedere foarte simpl.
Fiecare metod va fi ilustrat cu ajutorul unei funcii de forma:
BOOL CheckPassword_Method(
IN PCTSTR pszDomainName, // numele domenului
IN PCTSTR pszUserName, // numele utilizatorului
IN PCTSTR pszPassword, // parola
OUT PHANDLE phToken // token-ul utilizatorului
);
La intrarea funciei se va da numele informaiei de eviden, parola i numele domenului care conine nregistrarea de
eviden. Numele domenului poate fi NULL, n acest caz funcia alege singur domenul. Dac numele utilizatorului i
parola au fost indicate corect, funcia returneaz TRUE, altfel FALSE. Codul erorii poate fi obinut prin funcia
GetLastError. Funcia mai ntoarce aa numitul token al utilizatorului (obiectul marker). Acesta poate fi util, dac va fi
necesar s se ndeplineasc anumite operaiuni n numele utilizatorului autentificat (cerere de ajutor n cazul n care parola
a fost uitat poate fi un exemplu). n caz contrar parametrul phToken poate fi pus NULL.
6.5.4.1. Funcia LogonUser
Funcia LogonUser din Win32 API este destinat exclusiv pentru soluionarea problemei autentificrii i este de
forma:
BOOL LogonUser(
PTSTR pszUsername, // numele utilizatorului
PTSTR pszDomain, // numele domenului
PTSTR pszPassword, // parola
DWORD dwLogonType, // tipul accesrii
DWORD dwLogonProvider, // provider-ul accesrii
PHANDLE phToken // token-ul utilizatorului
);
Destinaia primilor trei parametri este evident. Unele versiuni timpurii ale SO Windows NT nu permiteau s fie
indicat valoarea NULL pentru numele domenului. Acest caz trebuie tratat n mod separat, dac se dorete ca procedura
autentificrii s funcioneze n toate versiunile sistemului. Parametrul dwLogonType indic modul de intrare n sistem.
Principiul de baz, care permite diferenierea intrrilor n sistem, este legat de prioritile prezente n informaiile de
eviden i setul de grupe introdus n token-ul final. De exemplu, dac se ncearc intrarea n sistem n regim de tratare pe
loturi, informaia de eviden, desemnat de parametrul pszUsername, trebuie s posede prioritatea
SE_BATCH_LOGON_NAME, iar n token-ul utilizatorului va fi adugat grupul Batch (S-1-5-3). Suplimentar exist o
serie de diferene subtile, care pot fi gsite n documentaia LogonUser. Pentru exemplul nostru vom folosi metoda de
intrare LOGON32_LOGON_NETWORK, care este cea mai rapid. n acest caz utilizatorii, controlai cu ajutorul
funciei date, trebuie s posede dreptul de intrare n reea (n mod implicit toi utilizatorii au acest drept). Parametrul
dwLogonProvider indic care provider va fi utilizat. Utiliznd valoarea LOGON32_PROVIDER_DEFAULT, va fi
folosit provider-ul implicit. Parametrul phToken puncteaz variabila n care, n caz de succes, va fi introdus token-ul
utilizatorului.
Mai jos este prezentat un fragment de cod n care funcia CheckPassword_LogonUser folosete LogonUser pentru
controlul numelui i parolei utilizatorului:
BOOL CheckPassword_LogonUser(
IN PCTSTR pszDomainName,
IN PCTSTR pszUserName,
IN PCTSTR pszPassword,
OUT PHANDLE phToken
)

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.17 din 25


{
_ASSERTE(pszUserName != NULL);
_ASSERTE(pszPassword != NULL);

HANDLE hToken;

TCHAR szDomainName[DNLEN + 1];


TCHAR szUserName[UNLEN + 1];
TCHAR szPassword[PWLEN + 1];

if (pszDomainName == NULL)
{
BYTE bSid[8 + 4 * SID_MAX_SUB_AUTHORITIES];
ULONG cbSid = sizeof(bSid);
ULONG cchDomainName = countof(szDomainName);
SID_NAME_USE Use;

if (!LookupAccountName(NULL, pszUserName, (PSID)bSid, &cbSid,


szDomainName, &cchDomainName, &Use))
return FALSE;
}
else
lstrcpyn(szDomainName, pszDomainName, countof(szDomainName));

lstrcpyn(szUserName, pszUserName, countof(szUserName));


lstrcpyn(szPassword, pszPassword, countof(szPassword));

if (!LogonUser(szUserName, szDomainName, szPassword,


LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,
&hToken))
return FALSE;

if (phToken == NULL)
_VERIFY(CloseHandle(hToken));
else
*phToken = hToken;
return TRUE;
}
Cteva comentarii sunt necesare. n primul rnd, toate string-urile de intrare sunt copiate n masive speciale din stiva
funciei. Aceasta este necesar din cauza c toi parametrii funciei sunt declarai constante string, iar LogonUser primete
indicatori la string-uri, care pot fi modificate. n unele condiii LogonUser poate scrie n parametrii pe care i primete
ceea ce poate conduce la prohibitarea proteciei memoriei. Doi: conform celor menionate mai sus, unele versiuni timpurii
ale sistemului de operare Windows NT nu permit valoarea NULL pentru numele domenului. Aceast situaie va fi tratat
n mod individual i numele corespunztor pentru domen este depistat cu ajutorul funciei LookupAccountName.
Observm, c utilizarea funciei LogonUser nu este complicat, dar n Windows NT i Windows 2000 are o restricie
substanial: utilizatorul, care apeleaz aceast funcie trebuie s posede prioritatea SE_TCB_NAME. Este o prioritate
foarte nalt, chiar nici administratorii nu o posed, semnificnd controlul total asupra sistemului. TCB - Trusted
Computing Base (Baza Calculelor Sigure, n care poi avea ncredere) este o component a sistemului de calcul, care
asigur ndeplinirea politicii securitii. Este un cod, executat n regim de nucleu i un cod de regim user, executat n
contextul informaiilor de eviden, care are prioritatea TCB. Dei nu este periculos s fie acordat aceast prioritate
nregistrrii de eviden, destinate execuiei unui serviciu de sistem, Microsoft nu recomand acest lucru, ci recomand s
fie executat un cod, care cere prezena prioritii TCB n contextul nregistrrii de eviden de sistem. Folosirea
nregistrrii de eviden de sistem are un avantaj: aceasta nu posed parol, n rezultat ea nu poate fi furat sau calculat.
Dac nu este respectat recomandarea Microsoft, securitatea sistemului este redus la zero, controlul parolei devenind
inutil.
Necesitatea prezenei prioritii TCB restricioneaz substanial domeniul de utilizare a metodei date. n Windows XP
LogonUser nu mai cere prezena prioritii TCB la apelant, dar numrul de copii Windows NT i Windows 2000 este
nc foarte mare.

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.18 din 25


6.5.4.2. Autentificare cu ajutorul Security Support Provider Interface
O alt posibilitate este cea bazat pe Security Support Provider Interface (SSPI), o variaie a standardului
Generic Security Service API (GSS-API), realizat de firma Microsoft. Ambele interfee sunt destinate autentificrii i
proteciei informaiilor, transmise prin reea. Ideea se bazeaz pe faptul, c toate protocoalele autentificrii de reea (fie
NTLM, Kerberos sau SSL) pot fi reprezentate sub forma unui schimb ordonat de mesaje, n timpul cruia un participant
identific pe cellalt (sau prile se autentific reciproc). Evident, SSPI poate fi utilizat i local, n acest caz transmiterea
pachetelor prin reea este nlocuit de transmiterea zonei de memorie tampon dintr-un loc al programului n altul.
SSPI este doar o interfa care permite acces standardizat la diferite pachete de securitate (security packages). n
componena SO Windows NT 4 intr un singur pachet (NTLM), care poate fi utilizat pentru autentificarea utilizatorilor.
ncepnd cu Windows 2000 la acest pachet au mai fost adugate pachetele Kerberos i Negotiate. Fragmentul de cod,
care urmeaz controleaz corectitudinea numelui i parolei unui utilizator folosind interfaa SSPI i pachetul de securitate
NTLM.
BOOL CheckPassword_SSPI(
IN PCTSTR pszDomainName,
IN PCTSTR pszUserName,
IN PCTSTR pszPassword,
OUT PHANDLE phToken
)
{
_ASSERTE(pszUserName != NULL);
_ASSERTE(pszPassword != NULL);

ULONG lRes;
CSspiClient Client;
CSspiServer Server;

// iniializarea obiectului client


lRes = Client.Initialize(pszDomainName, pszUserName, pszPassword);
if (lRes != ERROR_SUCCESS)
return SetLastError(lRes), FALSE;

// iniializarea obiectului server


lRes = Server.Initialize();
if (lRes != ERROR_SUCCESS)
return SetLastError(lRes), FALSE;

PVOID pRequest = NULL, pResponse = NULL;


ULONG cbRequest, cbResponse;

// generarea cererii iniiale de autentificare


lRes = Client.Start(&pRequest, &cbRequest);
if (lRes != ERROR_MORE_DATA)
return SetLastError(lRes), FALSE;

// ciclul principal de schimburi de mesaje


for (;;)
{
// prelucrarea cererii client i generarea rspunsului
lRes = Server.Continue(pRequest, cbRequest,
&pResponse, &cbResponse);
if (lRes != ERROR_MORE_DATA)
break;

Client.FreeBuffer(pRequest);
pRequest = NULL;

// prelucrarea cererii serverului i crearea unei cereri noi

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.19 din 25


lRes = Client.Continue(pResponse, cbResponse,
&pRequest, &cbRequest);
if (lRes != ERROR_SUCCESS &&
lRes != ERROR_MORE_DATA)
break;

Server.FreeBuffer(pResponse);
pResponse = NULL;
}

if (pRequest != NULL)
Client.FreeBuffer(pRequest);
if (pResponse != NULL)
Server.FreeBuffer(pResponse);

if (lRes != ERROR_SUCCESS)
return SetLastError(lRes), FALSE;

// control nregistrare de eviden a oaspeilor


lRes = Server.CheckGuest();
if (lRes != ERROR_SUCCESS)
return SetLastError(lRes), FALSE;

// creare token la necesitate


if (phToken != NULL)
{
lRes = Server.GetToken(phToken, TOKEN_ALL_ACCESS);
if (lRes != ERROR_SUCCESS)
return SetLastError(lRes), FALSE;
}

return TRUE;
}
n codul iniial al funciei CheckPassword_SSPI nu exist apelri directe a funciei SSPI toate apelurile sunt incluse
n superclasele SspiClient i CsspiServer. Aceasta permite pe de o parte evidenierea schimbului de mesaje ntre
client i server, iar pe de alt parte folosirea acestor clase n calitate de baz, dac se dorete realizarea autentificrii de
reea n aplicaie.
Lucrul ncepe cu crearea i iniializarea obiectelor clientului i ale serverului, n procesul de iniializare obiectului
clientului fiindu-i transmise informaii despre utilizator. Apoi este apelat metoda CSspiClient::Start, pentru a genera
cererea iniial de autentificare i are loc trecerea n ciclul de mesaje. Aici funcia apeleaz metoda
CSspiServer::Continue i CSspiClient::Continue. Aceste metode primesc la intrare mesajul celeilalte pri i
returneaz mesajul de rspuns. Ciclul de mesaje dureaz pn n momentul n care serverul stabilete, c autentificarea s-a
petrecut cu succes sau invers. Pentru autentificarea NTLM n Windows NT 4.0 i Windows 2000 este caracteristic
urmtorul moment: dac un client ncearc s intre n sistem cu un nume necunoscut nici pentru sistemul local, nici
pentru domene, i n sistemul local nu este blocat nregistrarea de eviden a oaspeilor, atunci autentificarea se termin
cu succes, iar clientul intr n sistem sub numele nregistrrii locale de eviden a oaspeilor. Aceasta s-a realizat din
dorina compatibilitii cu produsul mai vechi al firmei Microsoft NT Lan Manager (de unde i vine numirea NTLM).
De aceea, n caz de succes, este apelat metoda CSspiServer::CheckGuest, care controleaz, dac nu cumva succesul
autentificrii se datoreaz acestui moment. n sfrit, dac este necesar token-ul utilizatorului, funcia apeleaz metoda
CSspiServer::GetToken, responsabil de obinerea token-ului. Cercetarea claselor CSspiClient i CsspiServer, care
necesit o studierea mai amnunit a interfeei SSPI, este lsat ca exerciiu.
6.5.4.3. Funcia NetUserChangePassword
Utilizarea acestei funcii pentru autentificare are loc conform codului care urmeaz:
BOOL CheckPassword_ChangePwd(
IN PCTSTR pszDomainName,
IN PCTSTR pszUserName,
IN PCTSTR pszPassword,

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.20 din 25


OUT PHANDLE phToken
)
{
_ASSERTE(pszUserName != NULL);
_ASSERTE(pszPassword != NULL);
_ASSERTE(phToken == NULL);

USES_CONVERSION;

PCWSTR pszPasswordW = T2CW(pszPassword);

ULONG lRes = NetUserChangePassword(T2CW(pszDomainName),


T2CW(pszUserName), pszPasswordW, pszPasswordW);

if (lRes == ERROR_INVALID_PASSWORD ||
lRes == NERR_UserNotFound)
return SetLastError(ERROR_LOGON_FAILURE), FALSE;

return TRUE;
}
Exist mai multe considerente, care nu recomand utilizarea acestei funcii pentru autentificare. Principalul considerent
este faptul, c funcia NetUserChangePassword nu este destinat autentificrii utilizatorilor.

6.6. SGF din sistemul de operare Unix


Descriem cu titlu de exemplu organizarea fiierelor n sistemul de operare Unix.
6.6.1. Caracteristici generale
Toate fiierelor manipulate de utilizator formeaz o baz de date de tip ierarhic, modelul matematic fiind un arbore n
care vrfurile intermediare corespund cataloagelor, iar frunzele cataloagelor vide sau fiierelor. Structura sistemului de
gestiune a fiierelor este prezentat n fig. 6.11. n realitate fiecare disc logic conine o structur ierarhic separat de
cataloage i fiiere. Pentru a obine n mod dinamic arborele general este utilizat conectarea ierarhiilor separate la o
rdcin fix a sistemului de fiiere. n mediul utilizatorilor sistemului de operare UNIX istoric noiunea de sistem de
fiiere semnific n acelai timp ierarhia cataloagelor i fiierelor i partea nucleului sistemului de operare, care
administreaz cataloagele i fiierele. Ar fi mai corect c numim ierarhia cataloagelor i fiierelor arhiv a fiierelor, iar
noiunea de sistem de fiiere s fie utilizat doar n cel de-al doilea sens.
Utilizatorii sistemului de operare Unix cunosc trei tipuri de fiiere: fiiere ordinare, cataloage i fiiere speciale.
Fiierele speciale sunt de fapt unica cale de acces direct la periferice; utilizarea lor este prezentat mai trziu. Diferena
dintre fiierele ordinare i cataloage este c modificarea coninutului cataloagelor este permis doar prin intermediul unor
comenzi speciale ale sistemului. Un fiier n Unix este o suit de caractere (8 bii); alte structurri nu sunt furnizate de
ctre SGF. Sistemul de gestiune a fiierelor nu face nici o ipotez despre coninutul fiierelor ordinare, interpretarea fiind
pus n arja utilizatorului.
Desemnarea fiierelor se bazeaz pe schema arborescent, descris n 5.2.2. Identificatorii sunt interpretai n mediul
catalogului curent; simbolurile speciale . (un punct) i .. (dou puncte) desemneaz respectiv, n orice mediu, altul dect
catalogul rdcin, catalogul curent i tatl su. Simbolul / desemneaz catalogul rdcin; orice identificator, care ncepe
cu / este interpretat n mediul rdcinii. Acelai simbol / servete ca separator pentru numele calificate.
Este posibil crearea unor legturi la un fiier. O legtur, definit pentru fiier, cableaz un nume nou, care are acelai
statut ca i numele iniial. Pentru a pstra organizarea arborescent a cataloagelor nu se permite crearea unei legturi la un
catalog. Suprimarea ultimei legturi la un fiier antreneaz n mod automat distrugerea fiierului.
6.6.2. Organizarea datelor
6.6.2.1. Descriptorii
ntr-un catalog, intrarea care corespunde unui fiier conine identificatorul fiierului i un nume intern, care este
indicele descriptorului su ntr-un tabel general, asociat suportului. Descriptorul (i-nod n terminologia Unix) conine:
tipul fiierului (ordinar, catalog, special),
numele i grupul proprietarului fiierului (v.6.5.3),
informaiile de protecie,
informaiile localizrii fizice (v.6.3.2.2),

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.21 din 25


lungimea fiierului, n caractere,
datele despre creare, ultima modificare, ultimul acces.
Fiecare suport fizic are un tabel propriu al descriptorilor (6.6.2.4).

punct de montare a unui catalog

catalog

fiier obinuit

fiier special

SGF la distan

cale

Fig.6.11. Structura SGF UNIX


6.6.2.2. Implantarea fizic
Memoria secundar este organizat n blocuri de lungime fix (512 octei). n descriptorul unui fiier este rezervat un
tabel T de 13 cuvinte pentru informaiile despre localizarea fizic. n dependen de numrul t al blocurilor ocupate de
fiier, sunt utilizate 1, 2 sau 3 niveluri de direcionare (v.6.3.2.2):
cuvintele de la T[0] la T[9] conin adresele blocurilor 0 9 ale fiierului (ultimele fiind puse n 0, dac t<10),
dac t>10, cuvntul T[10] conine adresa unui tabel de implantare de 128 de cuvinte, n care sunt adresele
blocurilor de la 10 la 137,
dac t>138, n cuvntul T[11] se afl adresa unui tabel, care stabilete adresele a 128 noi tabele de implantare; se
poate ajunge astfel pn la 10+128+1282 = 16522 blocuri,

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.22 din 25


n sfrit, dac t>16522, pentru blocurile urmtoare este utilizat o direcionare pe trei niveluri; adresa tabelului
primar este n T[12]; se poate astfel atinge o lungime maxim de 16522+1283 = 2 113 674 blocuri.
Notm, c timpul de accesare a informaiilor unui fiier nu este uniform, nceputul fiierului fiind privilegiat. Astfel,
timpul de acces la primele 5120 caractere (10 blocuri) nu depinde de lungimea fiierului. Aceast proprietate poate fi
exploatat, plasnd n fiier informaiile cel mai frecvent utilizate.
Dac exist mai multe suporturi de memorie secundar, sau volume, pentru fiiere, fiecrui suport i se va asocia un
tabel distinct de descriptori. Tabelul se afl la o adres fix pe volum. Numele intern al unui fiier este cuplul (adres
suport, indicile descriptorului n tabel).
6.6.2.3. Administrarea perifericelor
Perifericele sunt reprezentate de fiiere speciale, grupate ntr-un catalog unic (/dev). n locul informaiilor de
implantare, descriptorul unui fiier special conine un pointer la descriptorul perifericului, care, la rndul su conine doi
indici, numii major i minor. Indicele major identific tipul perifericului i puncteaz la programele primitivelor sale de
acces, partajate de periferice de acelai tip. Indicele minor identific individual fiecare periferic i permite accesul la
datele sale proprii, adic la tampoanele de intrare-ieire utilizate.
6.6.2.4. Volume amovibile
Administrarea volumelor amovibile este realizat conform principiilor, descrise n 5.2.3.2. Catalogul unui volum
amovibil este organizat exact ca i catalogul general. Comanda unei montri logice (montare) permite integrarea
catalogului unui volum n catalogul general, la un nivel oarecare i cu un nume ales. De la acest moment, toate fiierele
volumului devin accesibile. Unica restricie este c nu-i posibil crearea unor legturi ntre suporturi diferite: un fiier
dintr-un volum este accesibil doar traversnd rdcina catalogului acestui volum, iar aceast rdcin nu puncteaz la
tatl su. Sunt evitate astfel orice cutri de legturi la demontare.

TDA
nume local
0
TFD
nmax

utilizatorul 1 citire ptr1

exec ptr2

utilizatorul 2
[n memorie]

[pe disc]

descriptor

zona descriptorilor
blocuri
Fig.6.12. Descriptorii fiierelor n Unix

6.6.3. Funcionarea i utilizarea


6.6.3.1. Gestiunea descriptorilor. Nume locale
Din considerente de economie, doar descriptorii fiierelor deschise au o copie n memoria central. Aceti descriptori,
zii activi, sunt grupai ntr-un tabel unic (TDA). Un fiier poate fi deschis simultan de mai muli utilizatori, fiecare
utilizndu-l independent cu ajutorul unui pointer de citire-scriere propriu. Acest pointer nu poate fi coninut n
descriptorul fiierului, care este unic: el este pstrat ntr-un tabel rezident, numit tabel al fiierelor deschise (TFD). La
fiecare nou deschidere n acest tabel este creat o intrare nou i mai multe intrri pot desemna acelai fiier, deschis

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.23 din 25


simultan pentru mai muli utilizatori. Plus la pointerul de citire-scriere, aceast intrare conine modul de deschidere a
fiierului i un pointer la o intrare a TDA (fig.6.12).
n sfrit, pentru a reduce frecvena cutrilor n cataloage i a simplifica desemnarea, un utilizator poate desemna un
fiier printr-un nume local. Acest nume, care este un ntreg din intervalul 0..nmax (nmax avnd valori pn la 20), este
alocat la deschiderea fiierului. El servete ca indice ntr-un tabel al numelor locale, pstrat n spaiul propriu al fiecrui
utilizator. Intrrile acestui tabel sunt pointeri la TFD. S ne amintim, c un nume local este de fapt un nume de flux, care
poate n egal msur desemna un fiier sau un tub (v.5.2.3.1).
6.6.3.2. Primitive de acces
Funciile de acces, descrise mai jos sunt primitive realizate prin apelarea regimului supervizor. Ele sunt utilizate
pentru a realiza operaiile disponibile n limbajul de comand. Fiecare primitiv returneaz un rezultat de tip ntreg, care
servete n special pentru a semnala erorile posibile.
Primitiva dup (duplicare) permite crearea unui alt nume local pentru un fiier deja deschis. Ea servete n special
pentru a conecta tuburile i pentru a determina, dac un nume local dat este al unui fiier deschis.

Citirea i scrierea are loc pornind de la o poziie curent, definit de un pointer. Aceste operaii incrementeaz n mod
automat pointerul cu numrul de caractere citite sau scrise. Primitiva lseek permite deplasarea explicit a pointerului.
Denumirea operaiei Efectul Rezultatul
open(nume fiier, mod de acces) deschide fiierul cu modul de acces indicat nume local alocat (-1 dac eec)
close(nbloc) abrog asocierea ntre numele local nbloc i succes 0, eroare -1
fiierul (sau tub) asociat
dup(nbloc) dac nbloc este numele local al unui fiier succes nbloc1, eroare -1
deschis, aloc un alt nume local nbloc1
sinonimul lui nbloc (desemnnd acelai
fiier)
read(nbloc,tampon,ncar) citete ncar caractere din fiierul (sau tub) numrul de caractere citite efectiv
cu numele local nbloc n zona tampon (mai mic dect ncar, dac s-a
ajuns la sfritul fiierului)
write(nbloc,tampon,ncar) scrie ncar caractere din zona tampon n numrul de caractere efectiv scrise
fiierul (sau tubul) cu numele local nbloc
lseek(nbloc,depl,orig) deplaseaz pointerul de citire-scriere depl poziia curent nou, (-1 n caz de
caractere, pornind de la poziia definit de eroare)
orig: 0 nceputul fiierului,
1 poziia curent a pointerului
2 sfritul fiierului
Notm, c este posibil s deplasm pointerul dup sfritul fiierului. Efectul este sporirea lungimii fiierului, poziiile
intermediare rmnnd goale; aceste guri nu ocup loc n memorie.
6.6.3.3. Protecia fiierelor n UNIX
Protecia este asigurat cu ajutorul listelor de acces conform principiului din 6.5.3. Exist trei moduri de acces
elementar: citire, execuie, scriere pentru un fiier; consultare, acces, modificare pentru un catalog.
Pentru controlul drepturilor, utilizatorii nu sunt individualizai, ci partajai n trei clase: proprietarul fiierului, membrii
unui grup de utilizatori, restul utilizatorilor. Lista de acces la un fiier este, deci, de lungime fix; ea enumr drepturile
de acces ataate fiecrei grupe; ea poate fi modificat doar de proprietarul fiierului sau de administratorul sistemului. O
caracteristic original a sistemului de protecie este c proprietarul unui fiier poate fi schimbat.
De la nceputuri UNIX a fost gndit ca un sistem de operare interactiv. Pentru a ncepe lucrul un utilizator trebuie s
intre n sistem, introducnd de la terminal numele propriu de eviden (contul, account name) i, poate, parola
(password), devenind astfel utilizator nregistrat al sistemului. Noii utilizatori sunt introdui (nregistrai) de ctre
administrator. Utilizatorul nu-i poate modifica contul propriu, n schimb parola este la discreia lui. Parolele sunt
codificate i pstrate ntr-un fiier separat. Nici administratorul nu poate restabili o parol uitat. Fiecrui utilizator
nregistrat i corespunde un catalog propriu al SGF, numit home. La intrare utilizatorului i se confer acces total la acest
catalog, inclusiv i la toate cataloagele i fiierele, care se conin aici. Accesul la alte cataloage i fiiere poate fi
restricionat.
Deoarece UNIX este un sistem de operare multiuser, o problem foarte actual este problema autorizrii accesului
utilizatorilor la fiierele SGF. Prin autorizarea accesului sunt considerate aciunile sistemului, care conduc la permiterea
sau interzicerea accesului unui utilizator concret la un fiier dat n dependen de drepturile de acces ale utilizatorului i

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.24 din 25


restriciile de acces, asociate fiierului. Schema autorizrii accesului n UNIX este foarte simpl, n acelai timp foarte
comod i puternic, nct a devenit standard de facto pentru sistemele contemporane.
Fiecrui proces n SO UNIX i sunt asociate un identificator real i un identificator activ al utilizatorului. Aceti
identificatori sunt desemnai cu ajutorul apelului de sistem setuid, care poate fi executat doar n mod supervizor.
Analogic, de fiecare proces sunt legai doi identificatori ai grupului de utilizatori unul real i unul activ. Acetia sunt
desemnai cu ajutorul apelului de sistem privilegiat setgid. La intrarea utilizatorului n sistem programul login
controleaz, dac utilizatorul este nregistrat n sistem i a introdus parola corect (dac parola este necesar), formeaz
un proces nou i lanseaz n acest proces mediul (shell) utilizatorului dat. Dar, nainte de aceasta login seteaz, pentru
procesul nou creat, identificatorii utilizatorului i grupului, folosind informaia din fiierele /etc/passwd i /etc/group.
Restriciile de accesare a fiierelor devin active dup legarea acestor identificatori de proces. Procesul poate avea acces la
un fiier sau s execute un fiier executabil numai dac restriciile de accesare, pstrate cu fiierul permit aceasta.
Identificatorii procesului sunt transmii tuturor proceselor descendente, extinznd pentru acestea aceleai restricii. n
unele cazuri un proces i poate modifica drepturile sale utiliznd apelurile de sistem setuid i setgid, iar n alte cazuri
sistemul poate modifica drepturile de accesare ale procesului n mod automat.
Fie ca exemplu urmtoarea situaie. Scrierea n fiierul /etc/passwd este permis doar administratorului (superuserul
poate scrie n orice fiier). Acest fiier conine, printre altele, parolele utilizatorilor i fiecare utilizator are dreptul s-i
modifice parola. Exist un program special /bin/passwd, care realizeaz modificarea parolelor. ns un utilizator obinuit
nu poate face acest lucru chiar utiliznd acest program, deoarece scriere n /etc/passwd este interzis. n UNIX problema
dat este rezolvat n modul urmtor. Pentru un fiier executabil poate fi indicat, c la lansarea lui vor fi setai
identificatorii utilizatorului i/sau grupului. Dac utilizatorul cere lansarea unui atare program (cu ajutorul apelului de
sistem exec), atunci pentru procesul respectiv este stabilit identificatorul utilizatorului, care corespunde identificatorului
stpnului fiierului executabil i/sau identificatorul grupului acestui stpn. n particular, la lansarea programului
/bin/passwd procesului se atribuie identificatorul administratorului i programul poate scrie n fiierul /etc/passwd.
Pentru identificatorul utilizatorului i pentru identificatorul grupului ID real este identificatorul adevrat, iar ID activ este
identificatorul execuiei curente. Dac identificatorul curent al utilizatorului corespunde identificatorului
administratorului, atunci acest identificator ca i identificatorul grupului poate fi modificat cu ajutorul apelurilor de sistem
setuid i setgid. n cazul n care identificatorul curent al utilizatorului difer de identificatorul administratorului, atunci
execuia apelurilor de sistem setuid i setgid conduce la nlocuirea identificatorului curent cu identificatorul adevrat (al
utilizatorului sau al grupului, respectiv).
n UNIX, ca i n orice sistem de operare multiuser, este susinut un mecanism standard de control al accesului la
fiierele i directoriile sistemului de fiiere. Orice proces poate accesa un fiier atunci i numai atunci, cnd drepturile de
acces, ataate fiierului, corespund posibilitilor procesului dat.
Protecia fiierelor contra unor accese nesancionate se bazeaz pe trei momente. Unu: fiecrui proces, care creaz un
fiier (sau un director) este ataat un identificator al utilizatorului (identificator unic n sistem), care mai apoi va fi
considerat ca identificatorul posesorului fiierului nou creat. Doi: de fiecare proces, care ncearc s acceseze un fiier,
este legat un cuplu de identificatori identificatorii activi al utilizatorului i al grupului utilizatorului. Trei: fiecrui fiier
n mod univoc i corespunde descriptorul propriu i-node. Informaia dintr-un i-node conine identificatorii posesorului
curent (imediat dup crearea fiierului identificatorii posesorului curent sunt stabilii de ctre identificatorul respectiv
activ al procesului printe, dar mai trziu pot fi modificai cu ajutorul apelurilor de sistem chown i chgrp). Tot aici se
conin indicaii despre operaiile permise posesorului fiierului, ce drepturi au asupra fiierului membrii grupului
posesorului i care sunt drepturile celorlali utilizatori.

14/11/17 21:34 /conversion/tmp/scratch/371683729.doc p.25 din 25

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

  • Laboratorul6 BDC
    Laboratorul6 BDC
    Document6 pagini
    Laboratorul6 BDC
    fr4nky95
    Încă nu există evaluări
  • PR Lab2-3
    PR Lab2-3
    Document5 pagini
    PR Lab2-3
    fr4nky95
    Încă nu există evaluări
  • AMSI Lab6
    AMSI Lab6
    Document6 pagini
    AMSI Lab6
    fr4nky95
    Încă nu există evaluări
  • SM12
    SM12
    Document6 pagini
    SM12
    fr4nky95
    Încă nu există evaluări
  • Lucrare de Laborator NR. 2: Sisteme Multimedia
    Lucrare de Laborator NR. 2: Sisteme Multimedia
    Document4 pagini
    Lucrare de Laborator NR. 2: Sisteme Multimedia
    fr4nky95
    Încă nu există evaluări
  • PSI ParteI V 30 09 2017
    PSI ParteI V 30 09 2017
    Document200 pagini
    PSI ParteI V 30 09 2017
    Chicu Roman
    Încă nu există evaluări
  • PR Lab2-3
    PR Lab2-3
    Document5 pagini
    PR Lab2-3
    fr4nky95
    Încă nu există evaluări
  • Untitled 10
    Untitled 10
    Document5 pagini
    Untitled 10
    fr4nky95
    Încă nu există evaluări
  • Cap 4
    Cap 4
    Document18 pagini
    Cap 4
    fr4nky95
    Încă nu există evaluări
  • Cap. 2
    Cap. 2
    Document26 pagini
    Cap. 2
    Andrei Carp
    Încă nu există evaluări
  • 612
    612
    Document73 pagini
    612
    verginarojnita
    Încă nu există evaluări
  • Cap 3
    Cap 3
    Document35 pagini
    Cap 3
    fr4nky95
    Încă nu există evaluări
  • Cap 5
    Cap 5
    Document20 pagini
    Cap 5
    fr4nky95
    Încă nu există evaluări
  • ACSO Cuprins
    ACSO Cuprins
    Document9 pagini
    ACSO Cuprins
    DumitruGuba
    Încă nu există evaluări
  • Partea 5 Mec Cuantica Tiparim
    Partea 5 Mec Cuantica Tiparim
    Document38 pagini
    Partea 5 Mec Cuantica Tiparim
    fr4nky95
    Încă nu există evaluări
  • Cap 1
    Cap 1
    Document21 pagini
    Cap 1
    DumitruGuba
    Încă nu există evaluări
  • Metode Numerice Lab 1
    Metode Numerice Lab 1
    Document6 pagini
    Metode Numerice Lab 1
    fr4nky95
    Încă nu există evaluări
  • Oceanul Pacific
    Oceanul Pacific
    Document6 pagini
    Oceanul Pacific
    fr4nky95
    Încă nu există evaluări
  • 4 Oscilatii Si Unde - Tiparim PDF
    4 Oscilatii Si Unde - Tiparim PDF
    Document55 pagini
    4 Oscilatii Si Unde - Tiparim PDF
    fr4nky95
    Încă nu există evaluări
  • Lab 7 C
    Lab 7 C
    Document5 pagini
    Lab 7 C
    fr4nky95
    Încă nu există evaluări
  • Economia Curs2 1
    Economia Curs2 1
    Document10 pagini
    Economia Curs2 1
    fr4nky95
    Încă nu există evaluări
  • Programa FCIM Nu Tiparim PDF
    Programa FCIM Nu Tiparim PDF
    Document24 pagini
    Programa FCIM Nu Tiparim PDF
    fr4nky95
    Încă nu există evaluări
  • Laborator 1 Conditii
    Laborator 1 Conditii
    Document7 pagini
    Laborator 1 Conditii
    fr4nky95
    Încă nu există evaluări
  • Mecanica CIM 2017 Nu Tiparim PDF
    Mecanica CIM 2017 Nu Tiparim PDF
    Document37 pagini
    Mecanica CIM 2017 Nu Tiparim PDF
    Dorin Gribincea
    Încă nu există evaluări
  • Economia Curs2 1
    Economia Curs2 1
    Document9 pagini
    Economia Curs2 1
    fr4nky95
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document2 pagini
    Lab 2
    fr4nky95
    Încă nu există evaluări
  • Oceanul Pacific
    Oceanul Pacific
    Document6 pagini
    Oceanul Pacific
    fr4nky95
    Încă nu există evaluări
  • Tema 12
    Tema 12
    Document1 pagină
    Tema 12
    fr4nky95
    Încă nu există evaluări
  • Economia Ramurii Conspect
    Economia Ramurii Conspect
    Document32 pagini
    Economia Ramurii Conspect
    fr4nky95
    Încă nu există evaluări