Sunteți pe pagina 1din 20

5. Gestiunea informaiei.......................................................................................................................................................

2
5.1. Principiile gestiunii informaiei.................................................................................................................................2
5.1.1. Definiii generale................................................................................................................................................2
5.1.2. Interpretarea numelor.........................................................................................................................................3
5.1.2.1. Construirea cii de acces.............................................................................................................................4
5.1.2.2. Structura reprezentrilor. Descriptori..........................................................................................................4
5.1.2.3. Contexte i medii.........................................................................................................................................5
5.1.3. Legarea...............................................................................................................................................................6
5.1.4. Protecia..............................................................................................................................................................7
5.1.4.1. Domenii i drepturi de acces.......................................................................................................................7
5.1.4.3. Problemele proteciei...................................................................................................................................8
5.2. Desemnarea i legarea fiierelor i intrrilor-ieirilor...............................................................................................9
5.2.1. Ci de acces la un fiier......................................................................................................................................9
5.2.2. Desemnarea extern a fiierelor. Cataloage........................................................................................................9
5.2.2.1. Introducere.................................................................................................................................................10
5.2.2.2. Organizarea arborescent..........................................................................................................................10
5.2.3. Legarea fiierelor cu fluxurile de intrare-ieire................................................................................................11
5.3. Legarea programelor i datelor................................................................................................................................12
5.3.1. Etapele de via a unui program.......................................................................................................................12
5.3.2. Funcionarea unui ncrctor............................................................................................................................13
5.3.3. Funcionarea unui editor de legturi.................................................................................................................14
5.3.3.1. Legarea prin substituie.............................................................................................................................14
5.3.3.2. Legarea prin nlnuire..............................................................................................................................17
5.4. Mecanisme de gestiune a obiectelor........................................................................................................................17
5.4.1. Segmentarea.....................................................................................................................................................17
5.5. Exerciii la capitolul 5.....................................................................................................................................19

/conversion/tmp/scratch/371683215.doc Victor Beliu p.1 din 20


5. Gestiunea informaiei
Acest capitol este consacrat studierii principiilor de gestiune a informaiei ntr-un sistem de operare. Noiunea de
obiect, introdus n capitolul 3, formeaz suportul director al studiului dat. Vom ncepe cu prezentarea unor concepte de
baz, care permit o mai bun nelegere a mecanismelor de administrare a informaiei ntr-un sistem: nume sau
identificator, cale de acces, legare, protecia obiectelor. Aceste noiuni vor fi utilizate n dou domenii importante:
desemnarea i legarea fiierelor (5.2) i legarea programelor i a datelor (5.3). Vom mai prezenta n 5.4 mecanismele
fizice i logice de baz, care faciliteaz administrarea obiectelor (segmente, capaciti) i exemple de implementare a
acestora n cadrul sistemelor de operare.
Se consider c informaia, care circul ntr-un sistem de calcul const din obiecte; obiectele sunt entitile asupra
crora sunt efectuate anumite operaii. Toate operaiile pot fi clasificate n patru categorii:
de creare,
de modificare,
de cutare,
de distrugere a obiectelor.
Fiecare obiect are o reprezentare extern (n afara calculatorului) i una intern, determinat de suportul fizic. Un
obiect poate fi accesat cu ajutorul funciilor de acces.
Problema central a administrrii informaiei const n conversia reprezentrii externe i a funciilor de acces
asociate n reprezentarea intern i funciile de acces corespunztoare tuturor obiectelor sistemului.

5.1. Principiile gestiunii informaiei


Noiunile de identificator, valoare, tip, desemnare, reprezentare sunt utilizate n informatic n forme extrem de
diverse. Elaborarea unui model general pentru aceste noiuni mai este nc o problem deschis. Ne vom limita aici cu
prezentarea unui model simplificat, care se contureaz n cadrul limbajelor de programare i care permite s inem cont
de cele mai frecvente situaii.
5.1.1. Definiii generale
Programul unui sistem informatic descrie acest sistem ca o mulime de obiecte, obiectele sistemului i operaiile
asociate sunt cele specificate de limbajul utilizat. Pentru implementarea sistemului descris ntr-un sistem informatic va
trebui s definim pentru fiecare obiect o reprezentare concret, care are forma unei mulimi de informaii n memorie,
pentru unitile periferice, etc. Implementarea sistemului se traduce prin aciuni, care modific starea acestor
reprezentri.
Procesul de reprezentare utilizeaz dou scheme de baz. n schema compilrii obiectele abstracte, specificate de
program, sunt nlocuite, n faza preliminar de translatare, prin reprezentrile lor. Aceste reprezentri sunt obiecte
executabile direct interpretate de un dispozitiv fizic. n schema interpretrii un sistem logic (interpretorul) este
alimentat direct de program; el asociaz (n mod static sau dinamic) o reprezentare intern fiecrui obiect i stabilete
corespondena ntre obiectul abstract i reprezentarea la fiecare accesare. Schema interpretrii este de regul mai puin
eficace n comparaie cu schema compilrii, deoarece corespondena obiectelor trebuie realizat la fiecare accesare, ns
ea convine mai mult n cazul unei gestionri dinamice a obiectelor (nlocuirea unui obiect prin altul, modificarea
reprezentrii unui obiect). n practic, este bine de combinat aceste dou scheme n funcie de restriciile specifice
concrete.
Programul unui sistem utilizeaz nume pentru a desemna obiectele acestui sistem. Numele unui obiect este o
informaie cu funcie dubl: pe de o parte permite s se fac distincia obiectului dat de alte obiecte; pe de alt parte, el
servete ca i cale de acces la obiect, adic el poate fi interpretat n scopul efecturii unor aciuni asupra obiectului.
Numele respect anumite reguli proprii limbajului de programare. Nume sunt identificatorii, care desemneaz
variabilele i procedurile ntr-un limbaj de programare sau fiierele ntr-un limbaj de comand.
n cazul reprezentrii externe un identificator desemneaz un anumit obiect, care poate fi o constant sau o
informaie ce permite accesul la un alt obiect (obiectul permite referirea unui alt obiect, fig.5.1).
Program
..
. D obiect/ Ri
identificator
.. reper
.
obiect

Fig.5.1. Relaia identificator - obiect


Trecerea de la identificator la obiectul propriu-zis se realizeaz prin compunerea funciilor de acces D i Ri, obinnd
calea de acces la un obiect.
Suportul fizic al informaiei este memoria. La acest nivel memoria poate fi considerat un ir de amplasamente
caracterizate printr-un coninut. Un proces desemneaz un amplasament printr-un nume folosit de unitatea central

/conversion/tmp/scratch/371683215.doc Victor Beliu p.2 din 20


pentru a citi i la necesitate a modifica coninutul acestui amplasament. Coninutul unui amplasament poate fi interpretat
ca un ntreg, o instruciune etc., sau ca un nume care desemneaz alt amplasament.
Reprezentarea extern este convertit n cuplul (amplasament, coninut), numele amplasamentului devenind numele
obiectului. De exemplu, o constant devine un cuplu (amplasament, coninut invariabil), iar un obiect care repereaz
altul - (amplasament, coninut variabil): amplasamentul conine reprezentarea unui obiect care este fie reprezentarea
intern a unei constante, fie un nume.
Vom face o deosebire ntre celulele memoriei fizice i amplasamente prin utilizarea noiunii de adres pentru
primele i nume pentru amplasamente. Obiectele definite de perechea (amplasament, coninut) pot fi deplasate n
memoria fizic, schimbarea adresei fizice a unui amplasament nu afecteaz, n general, numele lui.
Acestea au fost obiectele simple. Obiectele constituite din mai multe obiecte de acelai tip sau de tip diferit (masive,
fiiere, structuri) se numesc obiecte compuse. Numele obiectului compus se afl ntr-un amplasament al crui coninut
este un descriptor. Descriptorul, fiind reprezentarea intern a unui obiect compus, definete tipul, numrul
componentelor obiectului, o eventual ordine a acestora, precum i amplasamentele n care se afl aceste componente.
Funcia de acces asociat descriptorului are parametri i furnizeaz un coninut sau un nume de amplasament.
Numim obiect accesibil un obiect cruia i s-a asociat o cale de acces. Numim obiect partajat orice obiect care este
accesibil mai multor utilizatori (eventual cu drepturi de acces difereniate). Folosirea numelor care iniiaz calea de
acces la un obiect partajat poate fi imaginat n mai multe feluri: fie utilizarea aceluiai nume sau a unor nume diferite
pentru a avea acces la acelai obiect, fie folosirea aceluiai nume pentru a desemna reprezentri diferite.
Partajarea obiectelor la nivelul aceluiai nume (fig.5.2, a) presupune rezervarea numelor tuturor obiectelor
partajabile n mod potenial. Rezervarea acestor nume rmne efectiv chiar dac obiectele n cauz nu mai sunt
folosite, ansamblul obiectelor accesibile unui proces mprindu-se n dou pri disjuncte: obiectele private ale
procesului i cele potenial partajabile.
n cazul partajrii unui obiect folosind nume diferite (fig.5.2, b), fiecare proces posed un nume care, dup stabilirea
cii de acces, i permite accesul la o reprezentare unic.
n unele situaii acelai nume permite accesul la reprezentri diferite; este cazul procedurilor reenterabile n care un
nume fixat la compilare conduce n timpul execuiei la reprezentri diferite, proprii proceselor care utilizeaz aceast
procedur (fig.5.2, c).
proces i proces j

a) nume nume

b) nume i nume j

c)
..
obiect i obiect j
nume
..
.

Fig.5.2. Accesarea obiectelor partajate


Numim durat de existen sau de via a unui obiect perioada de timp n care acesta este accesibil. Sistemul de
operare i tipul obiectului determin durata de existen a obiectului. Un masiv creat de un program ntr-un limbaj de
programare este distrus la terminarea execuiei programului, amplasamentele pe care le ocup putnd fi reutilizate
pentru reprezentarea altor obiecte, n timp ce un fiier poate supravieui programul care l-a creat.
5.1.2. Interpretarea numelor
La nivelul sistemului de operare obiectele sunt memorate n amplasamente, iar procesele le pot accesa prin nume.
Stabilirea cii de acces la un obiect prin compunerea funciilor de acces ataate se numete legare. Se spune c un
obiect este legat atunci cnd pentru el este stabilit calea de acces. n cazul operaiilor aritmetice calea de acces asociat
unui obiect conduce la o constant; n cazul listelor sau parametrilor - la un nume. Legarea se traduce, n ultim
instan, prin stabilirea corespondenei ntre identificatori i adrese. Aceast coresponden este stabilit parcurgnd un
ir de etape consecutive: se trece de la identificator la adres conform unui set de relaii, care se numete cale de acces
(avem, deci, nc o definiie a noiunii cale de acces, care este echivalent celei introduse anterior).

n calculatoarele care permit adresarea imediat, o constant poate fi reprezentat n instruciune.

/conversion/tmp/scratch/371683215.doc Victor Beliu p.3 din 20


5.1.2.1. Construirea cii de acces
Fie F1 i F2 doua funcii de acces, F1 permind accesul de la o1 la o2, iar F2 de la o2 la o3: o1F1o2 i o2F2o3, accesul de la
o1 la o3 fiind realizat prin compunerea acestor funcii. Calea de acces de la o1 la o3 poate fi construit prin metoda
substituiei sau prin metoda nlnuirii.
Metoda substituiei stabilete o nou funcie de acces F3, o3 fiind accesat direct de la o1: o1F3o3. Metoda are avantajul
c accesul este rapid, dar i dezavantajul c o2 este iremediabil pierdut.
Metoda nlnuirii cere ca la fiecare accesare a obiectului o3 pornind de la o1 s fie parcurs calea o1F1o2F2o3. Nu se
pierde nici o informaie, dar accesul este mai lent.
Unele obiecte pot fi legate la faza de compilare (de exemplu, obiectele private ale unui program), pentru altele calea
de acces este stabilit ntr-o faz ulterioar (obiectele externe i parametrii sunt obiecte libere dup compilare). Pentru
un obiect extern compilatorul creeaz un obiect legtur al crui coninut este un ir de caractere ce alctuiesc
identificatorul sau i o informaie ce permite regsirea tuturor numelor ce desemneaz aceast legtur. Operaia de
legare a externilor se numete editare de legturi. Ea poate fi realizat ntr-o faz distinct, premergtoare fazei de
execuie (static), sau n faza de execuie (dinamic), cnd se face prima referin la obiectul extern. Editarea legturilor se
face prin nlnuire sau prin metoda substituiei. n primul caz numele externului este la legtura prevzut de
compilator i aceast legtur este pstrat n continuare, iar n cel de-al doilea - numele externului este plasat n toate
amplasamentele indicate de legtur, dup care aceasta este distrus.
La acest nivel prin segment subnelegem un ansamblu de amplasamente consecutive n care se reprezint obiecte
de acelai tip, cu aceeai durat de existen i cu acelai grad de protecie. Segmentul este cea mai mic unitate care
poate fi partajat i poate conine obiecte compuse - un masiv, un fiier, o stiv sau o procedur - accesibile unui proces
la un anumit moment. Un descriptor, reprezentat ntr-un amplasament, definete segmentul, iar numele amplasamentului
care conine descriptorul este chiar numele segmentului.
Obiectului procedur i sunt asociate mai multe noiuni: modul surs, modul obiect sau modul executabil.
Modulul surs al unei proceduri este textul acesteia scris de ctre programator ntr-un limbaj de programare i care va fi
tratat de ctre compilator. Modulul obiect al procedurii este obinut la ieirea compilatorului, deci este un produs al
compilatorului. Modulul obiect este reprezentat ntr-un segment sau ntr-un fiier, destinat interpretrii (dup editarea
legturilor, la necesitate) de ctre procesor ca instruciuni, valori etc., fiind manipulat n consecin. Pentru a separa
gestiunea resurselor de administrarea informaiei, interferen ce are loc din mai multe motive (memorii limitate din
punctul de vedere al capacitii, timpi de acces foarte variai, execuia instruciunilor numai atunci cnd se afl n
memoria operativ, ceea ce impune un grad de mobilitate al obiectelor pe suporturile fizice etc.), s-a introdus noiunea
de memorie fictiv: memorie operativ ipotetic suficient de mare pentru a conine toate obiectele sistemului. Memoria
fictiv este asociat sistemului, iar memoria virtual este proprie procesului.
5.1.2.2. Structura reprezentrilor. Descriptori
Schema de mai jos poate fi utilizat doar pentru obiecte elementare, cum ar fi valori ntregi, reale sau caractere,
reprezentarea crora cere un singur amplasament i pentru care funciile de acces sunt reprezentate direct prin
instruciunile mainii fizice. Se va mai ine cont de urmtoarele dou aspecte:
1) pot exista obiecte compuse, structura intern a crora poate fi complex, lungimea poate varia pe perioada
timpului de existen a obiectului,
2) poate fi necesar s se realizeze unele funcii complexe de accesare a obiectelor compuse.
Dup cum a fost menionat, numele obiectului compus se afl ntr-un amplasament al crui coninut este un
descriptor. Utilizarea unui descriptor pentru a accesa un obiect impune trecerea printr-un program de accesare care va
interpreta acest descriptor i prezint urmtoarele avantaje:
1) n cazul n care obiectul este pasat ca parametru unei proceduri este suficient s fie transmis descriptorul
sau adresa acestuia: este mult mai simplu s administrezi informaii de volum fix i cunoscut,
2) descriptorul constituie un punct de trecere impus pentru accesarea reperat a obiectului i, ca rezultat,
poate servi la implementarea unor controale ale accesrii, de msurare, etc.,
3) descriptorul asigur un acces indirect la obiectul reperat, ceea ce permite modificarea dinamic a cii de
acces (substituirea unui obiect printr-un alt obiect) sau deplasarea unui obiect n memorie fr
recompilarea modulului surs,
4) partajarea obiectelor ntre mai muli utilizatori cu drepturi sau proceduri de accesare diferite poate fi
realizat construind tot atia descriptori, ci utilizatori exist; aceti descriptori repereaz acelai obiect i
au aceleai informaii de localizare fizic.
Exemplul 5.1. Un tablou este de obicei reperat de un descriptor, care conine adresa de nceput a implantrii sale n memorie, numrul de
amplasamente, ocupate de un element, numrul dimensiunilor i pentru fiecare dimensiune, valorile maxime ale indicilor. Aceste
informaii permit calcularea adresei de implantare a fiecrui element al tabloului; ele mai permit s se controleze dac indicii introdui
aparin intervalului permis.

Noiunea de descriptor este larg folosit n sistemele de gestiune a fiierelor (v.5.2 i cap.7). O alt utilizare este
realizarea mecanismului de adresare segmentat. Segmentarea este o tehnic elementar de structurare a softului. Putem
spune, c segmentul este un obiect compus, de lungime variabil, reprezentarea n memorie a cruia ocup o suit de

/conversion/tmp/scratch/371683215.doc Victor Beliu p.4 din 20


amplasamente consecutive; el permite ordonarea obiectelor, care se afl ntr-o relaie logic. Segmentarea permite
utilizatorului s-i organizeze programele i datele sub forma unui ansamblu de segmente, fr s se preocupe de
implantarea lor fizic. De exemplu, fiecare procedur a unui program complex poate ocupa un segment distinct. n
calculatoarele cu adresare segmentat fiecare segment este reperat de un descriptor, numele acestor descriptori fiind
direct interpretate de procesor.
5.1.2.3. Contexte i medii
Enumerm mai jos considerentele din care mulimea obiectelor accesibile unui proces variaz n timp:
1. Decompoziia aplicaiilor. Metodele de decompoziie, utilizate pentru structurarea unei aplicaii complexe,
definesc componentele (module, proceduri, etc.). Fiecrei componente i se asociaz o mulime distinct de
obiecte accesibile.
2. Gestiunea dinamic. Mulimea obiectelor accesibile unui proces i poate modifica compoziia din
considerente, legate chiar de natura aplicaiei: obiectele pot fi create sau distruse n timpul execuiei.
3. Protecia. O modalitate simpl de a mpiedica un proces s atepte un obiect, accesul la care i este interzis,
este de a suprima toate cile de acces ale procesului spre acest obiect pentru durata interdiciei. Vor fi
evitate n acest fel cheltuieli exagerate la execuie.
4. Eficacitatea. Dac un obiect este cutat ntr-o mulime de alte obiecte, cutarea este cu att mai eficace cu
ct mulimea are mai puine elemente.
Trebuie, deci, s lum n consideraie att posibilitatea evoluiei dinamice a mulimii obiectelor, ct i a cilor de
acces la aceste obiecte. Introducem pentru aceasta noiunile care urmeaz.
Vom numi lexic o mulime de identificatori. Mulimea obiectelor, desemnate de identificatorii lexicii la un moment
de timp dat, se numete context asociat la aceast lexic (adic mulimea obiectelor pentru care exist o cale de acces
pornind de la unul dintre aceti identificatori). Starea de execuie a unui context este starea mulimii obiectelor, care
constituie acest context.
Fiind dat doar lexica nu putem defini un context: mai trebuie s fie specificate regulile de interpretare, care vor fi
aplicate identificatorilor din cadrul lexicii. Vom numi mediu mulimea format dintr-o lexic i informaiile (programe,
date, reguli de interpretare) necesare la utilizarea acestei lexici. Aceste informaii pot lua diferite forme n dependen de
limbajul utilizat (limbaj de comand, limbaj de programare).
Vom numi accesibilitate a unui identificator ntr-un program regiunea programului n care acest identificator este
valid, adic poate fi utilizat ca origine a unei ci de acces. Altfel spus, un proces poate utiliza acest identificator pentru a
desemna un obiect atunci cnd el execut partea n cauz a programului.
Noiunea de durat de existen sau de via a unui obiect poate fi extins i pentru cile de acces, nelegnd prin
aceasta perioada de timp n care acestea exist (intervalul de timp care separ crearea de distrugere).
Atunci cnd un proces execut un program, mulimea obiectelor la care procesul are acces este definit pentru orice
moment de timp, aplicnd identificatorilor valizi n aceste momente de timp regulile de interpretare, specificate de
mediul curent: regsim noiunea de context pentru execuia unui proces, introdus n capitolul 3.
Exemplul 5.2. Fie procesul (presupus unic) asociat utilizatorului unui sistem interactiv. n mediul, definit de interpretorul limbajului de comand,
lexica conine numele fiierelor accesibile utilizatorului. Atunci cnd utilizatorul comand execuia unei proceduri, mediul se
modific: lexica conine identificatorii definii n interiorul procedurii de regulile de accesibilitate ale limbajului i interpretai conform
regulilor proprii acestui limbaj.

ident.
context

reguli de
lexica interpretare obiect
cale de acces

mediul
Fig.5.3. Contextul de execuie a unui proces
Conform specificaiilor sistemului de operare, identificatorii fiierelor pot sau nu pot continua a fi utilizabili (conform regulilor proprii
de interpretare).

Starea de execuie a unui proces (valoarea obiectelor contextului su) se poate modifica la execuia fiecrei
instruciuni, ns coninutul contextului su (identitatea obiectelor care-l formeaz), se schimb cu o frecven mai mic.
Iat evenimentele principale care pot modifica coninutul contextului unui proces:

/conversion/tmp/scratch/371683215.doc Victor Beliu p.5 din 20


1) Schimbarea mediului, implicnd o modificare a compoziiei lexicii i, eventual, aplicarea unor reguli de
interpretare noi: apel de procedur, intrarea ntr-un bloc nou (ntr-un limbaj cu structur de blocuri),
schimbarea catalogului curent (ntr-un limbaj de comand).
2) Modificarea explicit a cii de acces, pornind de la un identificator al lexicii: asocierea unui fiier sau unui
periferic unui flux de intrare-ieire.
3) Crearea sau distrugerea explicit a unui obiect desemnat de un identificator din lexic: crearea sau
distrugerea unui fiier, alocarea sau eliberarea unei variabile administrate dinamic.
Examinnd aceste cazuri putem diferenia durata de via a unui obiect, a unui identificator, care desemneaz acest
obiect i cea a unei ci de acces, care conduce la obiectul n cauz. Sunt posibile diferite situaii: un identificator poate fi
legat succesiv de diferite obiecte; reciproc, un obiect poate succesiv (sau simultan) s fie desemnat de mai muli
identificatori diferii; un obiect poate deveni inaccesibil (nici o cale de acces nu conduce la el). Existena obiectelor
inaccesibile pune problema recuperrii spaiului ocupat de acestea: tehnici speciale de adunare a frmiturilor, permit
rezolvarea acestei probleme.
Exemplul 5.3. Cu titlu de exemplu vom indica diferite clase de obiecte, accesibile unui proces n cursul execuiei unei proceduri, exprimat ntr-un
limbaj de programare de nivel nalt. Aceste clase difer din punct de vedere a duratei de via, duratei legturii i modului de partajare
a obiectelor.
1) Obiecte interne: acestea sunt instruciunile, care compun textul procedurii. Ele sunt desemnate de etichetele, utilizate pentru
instruciunile de ramificare. Durat lor de via coincide cu durat de via a procedurii.
2) Obiecte locale: acestea sunt variabilele, declarate n interiorul procedurii. Aceste obiecte sunt create la fiecare apel al procedurii
i distruse la retur. n cazul unui apel recursiv, un exemplar nou al fiecrui obiect local este creat la fiecare apel i identificatorul
su desemneaz ultimul exemplar creat (celelalte rmnnd inaccesibile pn la returul la nivelul corespunztor).
3) Obiecte remanente i obiecte globale: acestea sunt obiectele care existau deja la apelul procedurii i care vor supravieui la retur;
durata lor de via este fie cea a procesului (obiecte remanente), fie cea a unei proceduri, care nglobeaz procedura dat (obiecte
globale).
4) Obiecte externe: sunt obiectele construite i pstrate independent de procedura i procesul considerat (alte proceduri, fiiere,
etc.). Durata lor de via nu depinde de cea a procedurii sau a procesului; ele pot fi create sau distruse n mod dinamic n timpul
execuiei procedurii.
5) Parametri: parametrii formali sunt identificatori, utilizai n interiorul procedurii i care sunt legai doar n momentul apelrii.
Obiectele legate de acestea sunt numite parametri efectivi sau activi; parametrii efectivi sunt furnizai de ctre procedura
apelant sau sunt obiecte externe. Legtura dintre parametrii formali i cei efectivi poate lua diferite forme n dependen de
regulile definite n limbajul de programare: apelare prin nume, prin valoare, prin referin. Aceste forme difer prin momentul
stabilirii i permanenei legturii. Legtura dispare la returul din procedur.

n cazul n care mai multe procese partajeaz o procedur, fiecare proces posed un set propriu de obiecte locale,
remanente, globale. Obiectele externe sunt n exemplar unic, ca i textul (invariant) al procedurii.
5.1.3. Legarea
Numim legare procesul construirii unei ci de acces. Acest proces acoper o varietate mare de situaii, care vor fi
analizate din mai multe puncte de vedere: natura relaiei de desemnare, momentul legrii, permanena legturii. Vom
prezenta mai jos i tehnicile principale utilizate.
Legarea obiectelor unui program poate fi efectuat la diferite momente de via a programului n sistem:
1) n momentul scrierii programului. Este cazul unui program scris direct n cod binar cnd fiecare obiect este
desemnat prin adresa absolut a amplasamentului, care-l conine. Un atare program poate fi imediat executat, dar orice
modificare este dificil i conine un risc ridicat de eroare. n practic, unicele obiecte legate la etapa scrierii
programului sunt notaiile universale, care desemneaz constantele.
2) La una din fazele de translatare (asamblare sau compilare). Legtura este definitiv i identificatorii sunt
nlocuii prin adrese absolute. Dezavantajul este c programul nu poate fi deplasat n memorie fr a fi recompilat (dac
nu exist mecanisme de translatare a adreselor). De asemenea, legtura stabilit la translatare nu este dect parial :
identificatorii nu sunt nlocuii de adrese absolute, ci relative ncepnd cu originea programului (deplasare).
3) La o faz de ncrcare i editare a legturilor. Faza ncrcrii are drept scop nlocuirea adreselor relative prin
adrese absolute, fixnd originea programelor n memorie. Faza editrii legturilor are ca scop stabilirea legturii
referinelor externe (s ne amintim, c vorbim despre identificatorii, care desemneaz obiecte construite sau pstrate
independent de programul n cauz). ncrcarea i editarea legturilor pot fi combinate ntr-o singur operaie sau
realizate separat. Algoritmii utilizai sunt descrii n 5.3.
O operaie analogic editrii legturilor este cea a legrii fluxurilor de intrare-ieire cu fiierele sau perifericele. Ca
i editarea legturilor, aceast operaie, descris n 5.2.3.2 poate fi realizat n prealabil sau n timpul execuiei.
4) n timpul execuiei; legtura este numit n acest caz dinamic. Exist mai multe considerente de retardare a
legturii pn la faza de execuie:
informaiile necesare pot fi cunoscute doar la aceast faz, n particular dac obiectele desemnate sunt create
dinamic, fiind, deci necunoscute la momentul compilrii,
calea de acces trebuie modificat n timpul execuiei: este cazul cnd un identificator este reutilizat pentru a
desemna succesiv mai multe obiecte (de exemplu, flux de intrare-ieire reasociat mai multor fiiere diferite),

Cu excepia sistemelor de nlnuire a programelor, numite compile and go n care programele sunt traduse i executate imediat; aceste sisteme
sunt prevzute pentru programe scurte, destinate unei singure execuii.

/conversion/tmp/scratch/371683215.doc Victor Beliu p.6 din 20


mecanismul interpretrii impune o legtur dinamic: poate fi cazul, de exemplu, al variabilelor locale a unei
proceduri recursive, adresa crora poate fi stabilit doar n cursul execuiei.
Legarea dinamic const, cel mai frecvent, n completarea unei ci de acces existente deja parial.
Tabelul, care urmeaz, aduce un rezumat al caracteristicilor legturii n dependen de momentul stabilirii acesteia.
Tabelul 5.1. Caracteristicile legturilor
Legtura Condiii Caracteristici
Devreme Informaiile sunt cunoscute din timp Eficien n execuie
Condiii de execuie invariante Cale de acces nemodificabil
Trzie Informaii cunoscute parial Necesitatea pstrrii informaiilor de legtur
Condiii de execuie variabile Timp mare de execuie, programe adaptabile
Dac criteriul principal este comoditatea utilizrii unui sistem i adaptabilitatea lui la condiii diverse de execuie
(ceea ce este cazul sistemelor interactive), vom fi cointeresai s ntrziem momentul stabilirii legturii (delay binding
time). Motivaia principal a unei legturi, stabilite la etapa iniial de elaborare a programului, este eficacitatea
execuiei.
5.1.4. Protecia
Vom nelege prin termenul protecie mulimea metodelor i mecanismelor, care vizeaz specificarea regulilor de
utilizare a obiectelor i garanteaz respectarea acestor reguli. Protecia este asigurat de o combinaie de dispozitive
fizice i logice.
Exist legturi strnse ntre desemnarea obiectelor i protecia lor. S ne reamintim trei observaii, legate de
protecie:
1) O modalitate simpl de a interzice unui proces orice acces la un obiect const n suprimarea tuturor cilor de
acces la acest obiect, altfel spus, de a le retrage din contextul procesului,
2) Atunci cnd operaiile permise asupra unui obiect sunt specificate prin apartenena la o clas sau un tip, este
posibil verificarea prealabil execuiei (adic n momentul compilrii sau editrii legturilor) dac obiectul este
utilizat conform regulilor specificate,
3) n cazul n care verificarea este fcut n momentul execuiei, o procedur de acces faciliteaz implementarea
verificrii i reduce riscul unor erori. Aceast procedur poate fi la nivel logic (un interpretor, de exemplu) sau
fizic (un dispozitiv va aproba trecerea mai departe).
Prezentm mai nti un model simplu, care va permite s introducem noiunile principale, necesare studierii
proteciei. Mecanismele, care permit implementarea proteciei ntr-un sistem informatic, sunt descrise n 5.4.
5.1.4.1. Domenii i drepturi de acces
Printre obiectele, care formeaz un sistem informatic cele care pot aciona asupra altor obiecte, modificndu-le
starea, vor fi numite active. Regulile de utilizare pot fi exprimate specificnd drepturile de acces ale fiecrui obiect
activ, adic mulimea de operaii pe care obiectele active sunt autorizate s le execute asupra altor obiecte.
S precizm acum noiunea de obiect activ, adic s definim entitile crora sunt ataate drepturile. Am putea s
legm drepturile direct de procese, ns aceast alegere nu permite exprimarea simpl:
1) a posibilitii evoluiei dinamice a drepturilor unui proces,
2) a faptului, c mai multe procese pot avea, n aceleai circumstane, acelai set de drepturi.
Pentru a ine cont de aceste dou aspecte a fost introdus noiunea de domeniu de protecie. Aceast noiune este un
caz particular al noiunii de mediu - un domeniu definete:
o mulime de obiecte accesibile sau context,
pentru fiecare dintre aceste obiecte, o mulime de operaii permise (drepturi),
un mecanism, care asigur accesul la aceste obiecte, respectnd restriciile de mai sus.
Un proces este ntotdeauna executat ntr-un domeniu bine definit; contextul su este cel ataat domeniului, procesul
posednd drepturile specificate asupra tuturor obiectelor acestui context. Un proces poate schimba domeniul cu ajutorul
unei operaii particulare (apelare domeniu). Un domeniu este el nsui un obiect asupra cruia poate fi executat
operaia de apel; alte operaii sunt definite mai departe.
Exemplul 5.4. Fie o mulime de procese executate pe un procesor. Pot fi definite dou domenii, supervizor i sclav, conform modului de execuie,
specificat n cuvntul de stare. n modul supervizor, procesul poate executa toate instruciunile procesorului; n modul sclav el poate
executa doar instruciunile neprivilegiate. Un proces poate schimba domeniul, executnd instruciuni speciale: atunci cnd procesul
este n modul supervizor este suficient s fie ncrcat un cuvnt de stare care conine modul sclave; dac procesul este n modul sclave
el nu poate trece la modul supervizor dect n urma unei devieri sau a unui apel al supervizorului, care conine modificarea modului.
Remarcm, c n acest caz el poate executa doar programul asociat devierii sau apelului supervizorului i nu orice program. Anume
acest mecanism asigur eficacitatea dispozitivului de protecie.

Domeniile de protecie pot fi definite prin mai multe modaliti; exemplificm cteva mai jos.
un domeniu pentru sistemul de operare, unul pentru fiecare utilizator,
un domeniu pentru fiecare subsistem, care realizeaz o funcie particular,
un domeniu pentru fiecare mediu (definit, de exemplu, de cuplul (procedur, catalog curent)).

/conversion/tmp/scratch/371683215.doc Victor Beliu p.7 din 20


Alegerea depinde de funciile cerute i, cel mai important, de mecanismele disponibile (v. 5.4).
Presupunem pentru nceput, c exist un numr constant de obiecte. Regulile de protecie pot fi reprezentate sub
forma unui tablou bidimensional, numit matricea drepturilor. Acest tablou conine cte o linie pentru fiecare domeniu
Di i cte o coloan pentru fiecare obiect Oj (notm, c domeniile, fiind obiecte particulare, apar de asemenea i n
coloane). Caseta (i, j) conine drepturile pe care le are un proces, care se execut n domeniul Di, asupra unui obiect Oj.
Tabelul 5.2. Exemplu de matrice de drepturi
fiierul 1 fiierul 2 periferic D1 D2 D3
D1 <citire, scriere, <citire, scriere, <alocare, <> <apelare> <schimbare
executare> executare> retragere> drepturi>
D2 <citire, scriere, <citire, scriere, <cerere, <apelare> <> <apelare>
executare> executare> eliberare>
D3 <citire, scriere, <citire, scriere, <> <nil> <apelare> <>
executare> executare>
Notaia nil semnific faptul, c obiectul Oj nu figureaz n contextul domeniului Di, iar notaia <> definete o list
vid. n ambele cazuri Oj este inaccesibil n Di; diferena apare dac s vrea s se ofere lui Di drepturi asupra lui Oj: n
primul caz este necesar s se introduc Oj n contextul lui Di, adic s-l legm; n cel de-al doilea caz este suficient s
extindem lista existent.
n practic, matricea drepturilor este foarte rarefiat, adic foarte multe casete conin nil sau <>. Din aceast cauz
sunt utilizate alte forme de reprezentare a matricei drepturilor:
1) Reprezentarea coloanelor: lista de acces
Lista de acces, asociat unui obiect este o list (Di, <di>), unde Di este un domeniu, care conine obiectul, iar <di>
este mulimea drepturilor acestui domeniu asupra lui. De exemplu, dac un domeniu este asociat fiecrui utilizator al
unui sistem n timp partajat, lista de acces a unui fiier conine pentru fiecare utilizator lista operaiilor pe care el este
autorizat s le ntreprind asupra fiierului.
O metod frecvent utilizat pentru a reprezenta mai compact listele de acces const n specificarea pentru un obiect a
unor drepturi implicite (default) pe care le posed fiecare domeniu. De exemplu, putem specifica implicit, c orice fiier
este accesibil doar pentru lectur fiecrui utilizator. Lista de acces va conine doar cuplurile (Di, <di>) pentru care
drepturile difer de cele implicite.
2) Reprezentarea liniilor: lista de drepturi i capaciti
Lista drepturilor asociat unui domeniu este o list (Oj, <dj>) n care Oj desemneaz un obiect, care figureaz n
contextul domeniului, iar <dj> este mulimea drepturilor domeniului asupra lui Oj. Un proces, care este executat n
domeniul considerat, primete aceast list de drepturi; la fiecare accesare a unui obiect mecanismul de accesare trebuie
s verifice c operaia curent este licit, adic este n <dj>. Din considerente de eficacitate, este de dorit ca acest
mecanism s fie cablat. Forma cea mai primitiv n acest sens este bitul supervizor-sclave a cuvntului de stare a unui
procesor. O form mai evoluat este capacitatea (v. 5.4.3), care reunete ntr-o structur unic de date, interpretat la
fiecare accesare, adresa unui obiect i mulimea drepturilor permise. n acest fel, lista drepturilor unui domeniu este lista
capacitilor.
O operaie important este cea de schimbare a domeniului, care permite unui proces s-i modifice mediul i
drepturile asupra obiectelor. Aceast schimbare a domeniului ia adesea forma unui apel de procedur, atunci cnd
procesul trebuie s revin n domeniul su iniial. Pentru a garanta respectarea regulilor de protecie, trebuie luate
msuri de precauie de fiecare dat, cnd are loc extinderea drepturilor. Aceast circumstan se poate produce n egal
msur att la apel, ct i la retur. Pentru controlarea operaiei de schimbare, se cere ca apelul i returul domeniului s se
fac n mod exclusiv prin execuia unor proceduri speciale (ghieu de apel sau de retur), programele crora garanteaz
respectarea regulilor specificate. Schimbarea domeniului pe o alt cale dect cea a ghieului este interzis de
mecanismele de protecie a domeniului.
Exemplul 5.5. n cazul domeniilor, definite de modurile supervizor i sclav, ghieele de apel, n modul sclav, sunt definite prin devieri i apelri a
regimului supervizor, care realizeaz primitivele interfeei sistemului de operare. Programul acestor primitive, care este protejat,
verific validitatea parametrilor transmii. Deoarece drepturile n modul supervizor sunt totdeauna mai mari dect cele din modul
sclav, ghieul de retur este inutil i primitivele sunt executate n totalitate n modul supervizor; ghieul devine necesar, dac aceste
primitive trebuie s apeleze o procedur n regimul sclav, deoarece are loc o extensie de drepturi la retur.

Vom gsi n 5.4.2 i 5.4.3 o cercetare mai detaliat a mecanismelor de protecie i cteva exemple de utilizare a
acestora n sistemele de operare.
5.1.4.3. Problemele proteciei
Prezentm succint cteva probleme, legate de implementarea proteciei n sistemele informatice.
1) Protecie ierarhizat
n aceast situaie simpl vrem s protejm un subsistem A contra erorilor sau aciunilor prohibitive, provenite dintr-
un subsistem B, care utilizeaz serviciile subsistemului A, dar nu are vre-un drept asupra lui A. n acelai timp A poate
accesa fr restricii toate informaiile lui B. Subsistemul A este, de exemplu, un sistem de operare, iar B - o aplicaie.

/conversion/tmp/scratch/371683215.doc Victor Beliu p.8 din 20


Aceast problem este rezolvat prin mecanisme ierarhice cum ar fi regimurile supervizor/sclav, cu trecere obligatorie
printr-un apel la regimul supervizor pentru comunicarea ntre A i B. Schema inelelor de protecie (v.5.4.2.5) este o
generalizare a acestui principiu.
2) Subsisteme reciproc suspicioase
Exist o suspiciune reciproc ntre dou subsisteme n cazul n care fiecare specific, c unele din informaiile sale
trebuie s fie protejate contra erorilor sau aciunilor prohibitive ale celuilalt subsistem. Aceast situaie nu poate fi
tratat cu ajutorul unui mecanism de protecie ierarhic.
3) Acordarea i retragerea drepturilor de acces
Problema pus aici este problema modificrii dinamice a drepturilor de acces. n particular, este posibil s se
doreasc s avem posibilitatea de a extinde sau restrnge drepturile unui domeniu. Cnd transmiterea drepturilor este
tranzitiv (extinderea drepturilor unui domeniu permindu-i la rndul su s transmit drepturi), poate fi foarte dificil
s se cunoasc la un moment de timp dat mulimea drepturilor ataate unui obiect anume. Apare o problem, dac se va
decide restrngerea sau suprimarea acestor drepturi pentru toate domeniile sau doar pentru o parte a lor, care pot accede
obiectul. O soluie posibil const n introducerea unui pasaj unic (descriptor) la traversarea cruia se vor permite
accesrile obiectului. ns aceast metod nu permite tratarea cazului unei retrageri selective, pentru care poate fi
necesar s fie parcurse legturile inverse ntre obiect i domeniile, care au acces la obiect.

5.2. Desemnarea i legarea fiierelor i intrrilor-ieirilor


Organizarea fiierelor i realizarea funciilor lor de acces vor face obiectul de studiu al capitolului 6. Vom examina
aici modul de desemnare a fiierelor, legarea lor cu programele, care le utilizeaz i relaiile lor cu intrrile-ieirile. Nu
avem nevoie pentru aceasta s cunoatem organizarea intern a unui fiier, interesndu-ne doar organizarea lui ca un tot
ntreg n cazul unui limbaj de comand sau al unui program.
5.2.1. Ci de acces la un fiier
Un fiier este un obiect compus: el posed un descriptor, care conine informaiile, necesare localizrii sale fizice i
realizrii funciilor de acces. Pentru sistemul de operare, numele descriptorului unei fiier (adresa fizic sau indicile ntr-
un tabel de descriptori) permite accesul la fiier. Acest nume al descriptorului, de obicei necunoscut de utilizatori i
rezervat doar pentru sistemul de operare, este numit nume intern al fiierului. Descriptorul i numele intern al fiierului
sunt unice. Coninutul unui descriptor de fiier este detaliat n 6.4.
Un fiier este desemnat de ctre utilizatorii externi cu ajutorul identificatorilor nume externe. Aceste nume externe
sunt definite ntr-un mediu comun mai multor utilizatori. Structurile de date, care permit construirea cii de acces la un
fiier pornind de la unul din numele sale externe, sunt numite cataloage sau directorii (eng., directory). Structura
cataloagelor i interpretarea numelor externe sunt descrise n 5.2.2.
n afara numelor interne i externe, adesea mai este definit un nume, zis local sau temporar. Un nume local este
definit ntr-un mediu propriu unui utilizator i are o existen doar temporar (de exemplu, durata de execuie a unui
program). Necesitatea unui asemenea nume rezid n urmtoarele:
Eficacitate: numele locale sunt definite ntr-un mediu mai restrns dect numele externe i interpretarea lor este,
deci mai rapid (cataloagele nu sunt parcurse la fiecare accesare a fiierului),
Comoditatea utilizrii i adaptabilitatea programelor: acelai nume poate fi refolosit pentru a desemna fiiere
diferite pentru instane de timp distincte, ceea ce permite reutilizarea unui program cu fiiere diferite fr a fi
necesar s se modifice textul programului,
Acces selectiv: interpretarea numelor locale permite introducerea unui acces selectiv la un fiier n dependen
de utilizator (funcii de acces sau drepturi de acces diferite).
Legarea numelor locale este realizat prin nlnuire: un nume local desemneaz un descriptor local, care la rndul
su, direct sau indirect, repereaz descriptorul unic al fiierului.

Mediul global Mediul local Mediul SGF

nume externe nume local nume intern

(Cataloage) descriptor local Descriptor


fiier

Fig.5.4. Ci de acces la un fiier

5.2.2. Desemnarea extern a fiierelor. Cataloage


Vom examina modul n care un utilizator poate nota fiierele cu ajutorul identificatorilor sau nume externe, i
structurile de date sau cataloagele, care permit determinarea descriptorului fiierului, pornind de la un nume extern,

/conversion/tmp/scratch/371683215.doc Victor Beliu p.9 din 20


Pentru simplificarea expunerii vom presupune, c descriptorii se conin direct n catalog; n realitate doar o parte a
descriptorului se poate afla n catalog, acompaniat de un nume intern, care permite determinarea restului.
5.2.2.1. Introducere
Un catalog definete n sensul 5.1.2, un mediu, adic o mulime de identificatori (sau o lexic) i regulile de
interpretare a acestor identificatori. Organizarea cea mai simpl poate fi schematic reprezentat de un tabel, care
asociaz unui identificator descriptorul fiierului pe care acesta l desemneaz. Acest tabel este administrat prin una din
tehnicile cunoscute (organizare secvenial, adresare dispersat, etc.). O astfel de organizare a fost descris n 3.3. Ea
trateaz la acelai nivel toate numele, ceea ce implic urmtoarele inconveniente:
ntr-un sistem mono-utilizator ar fi bine s avem la dispoziie posibilitatea de a clasifica fiierele pe rubrici,
ntr-un sistem multi-utilizator conflictele datorate omonimiei a dou fiiere de utilizatori diferii, restricioneaz
libera alegere a numelor,
n toate cazurile, cutarea unui fiier cu numele dat, se efectueaz pe toat mulimea numelor, n timp ce
informaii referitoare la natura sau apartenena fiierului ar putea accelera aceast cutare.
Reieind din aceste considerente, organizarea pe un singur nivel (fig.5.5, (a)) nu este folosit, cu excepia unor
sisteme mono-utilizator foarte mici. Este preferat cea ierarhic n care fiierele i cataloagele sunt organizate conform
unei structuri arborescente. Aceast structur se reflect n structura identificatorilor. Adncimea arborescenei poate fi
limitat: de exemplu, o structur cu dou nivele (fig.5.5 (b)) permite definirea a cte un catalog pentru fiecare utilizator
a unui sistem, aceste cataloage fiind i ele grupate ntr-un catalog general.

catalogul
(a) (b) utilizatorilor

catalog

Victor ... Christy ... Eugen

fiier program doc ... ... ...

test doc program doc program fiier

Fig. 5.5. Organizarea fiierelor pe niveluri


Modelul general al organizrii ierarhice, prezentat mai jos, a fost propus n sistemul Multics; multe sisteme s-au
inspirat de acest model.
5.2.2.2. Organizarea arborescent
O organizare arborescent este definit dup cum urmeaz:
Unui catalog i se asociaz o mulime (care poate fi vid) de alte cataloage i fiiere; aceste obiecte se numesc
incluse n catalog; ele sunt desemnate aici printr-un identificator zis nume simple. Relaia ntre un catalog i un
alt catalog, inclus n primul, se numete relaie de legtur; ea permite s se defineasc un fiu (catalogul inclus)
i un tat.
Exist un catalog, i numai unul singur, numit rdcin, care nu are tat. Orice alt catalog are un tat, i doar
unul singur.
Relaia de legtur definete o arborescen de cataloage cu rdcina n catalogul rdcin. Sunt utilizai termenii de
predecesori sau descendeni pentru a desemna cataloagele la care poate ajunge de la un catalog dat prin intermediul unei
suite de relaii tat sau fiu.
Plecnd de la un catalog dat, exist o cale unic ntr-o arborescen pentru a ajunge la oricare din descendenii si.
Aceast proprietate este utilizat pentru desemnare: numele unui catalog este construit prin concatenarea numelor
simple succesive, care desemneaz predecesorii si, ncepnd cu catalogul iniial; numele unui fiier este concatenarea
catalogului, care l include i a numelui su simplu. n identificatorii construii astfel (zise nume calificate sau compuse)
este utilizat un simbol special (> n Multics, / n Unix sau / n MS DOS) pentru separarea numelor simple
succesive.
n acest mod putem asocia un mediu fiecrui catalog; lexica acestui mediu este mulimea numelor, simple sau
compuse, construite cum a fost indicat; contextul este mulimea format din catalogul considerat, descendenii si i
toate fiierele, incluse n aceste cataloage. Mediul i numele asociate catalogului rdcin se numesc universale.
De exemplu, n sistemul Multics, simbolul > este utilizat ca separator pentru construirea numelor compuse;
utilizarea separat a acestui simbol desemneaz prin convenie, catalogul rdcin. La orice moment de timp un catalog
curent este asociat fiecrui utilizator. Prin convenie, mediul utilizatorului este reuniunea mediului definit de catalogul

/conversion/tmp/scratch/371683215.doc Victor Beliu p.10 din 20


curent i de mediul universal. Utilizatorul poate desemna orice obiect, utiliznd numele universal (care ncepe cu >);
cu numele simplu, dar numai obiectele din catalogul curent, sau cu un nume calificat obiectele incluse n descendenii
acestui catalog.
Acest mod de desemnare permite determinarea oricrui fiier; totui, numele universal poate fi prea lung pentru
obiectele situate la o mare adncime n ierarhie. Pentru a permite o desemnare mai simpl a obiectelor, care nu sunt
incluse n relaia de descenden a catalogului curent, sunt definite dou extensii pentru construcia numelor:

rdcina

... utilizatori lib_sistem

SYS ... Aplicaii

cataloagele
Corina ... Alex Victor ... Eugen ... utilizatorilor

catalog
doc test doc ... fi_exe

demo
fiier
program
n Pascal
legtur

Fig.5.6. Organizare arborescent a unui sistem de gestiune a fiierelor


1) Desemnarea printelui. Prin convenie, un simbol special (< n Multics, .. n Unix) desemneaz n orice
catalog diferit de rdcin, tatl catalogului dat. Utilizarea poate fi iterat (<< desemneaz bunelul, etc.). Pot
fi de asemenea desemnate simplu obiecte incluse n cataloagele frate sau verior ai catalogului curent.
2) Creare de legturi. Numim legtur asocierea unui nume simplu (numele legturii) i a unui alt nume (nume
obiectiv sau scop). Crearea unei legturi ntr-un catalog introduce aici numele simplu (numele legturii), care
trebuie s fie unic n cadrul catalogului dat. Aceast operaie este o legare prin nlnuire: cnd numele legturii
este interpretat, n mediul catalogului unde a fost creat, el este nlocuit prin numele obiectiv.
Posibilitatea crerii legturilor modific caracterul pur arborescent al desemnrii, ceea ce poate crea probleme
delicate necesitii de a avea mai multe ci de acces la un obiect.
5.2.3. Legarea fiierelor cu fluxurile de intrare-ieire
Un program schimb informaii cu mediul exterior prin intermediul unor operaii de intrare-ieire. care permit
comunicarea cu un fiier sau un periferic. n momentul elaborrii programului nu este nc cunoscut cu care fiier sau
periferic se vor produce intrrile-ieirile; adesea este necesar s se utilizeze fiiere sau periferice, care difer de la o
execuie la alt. Din aceste considerente este util s se poat ntrzia legtura unui program cu fiierele sau perifericele
pe care acesta le utilizeaz. n acest scop se introduce noiunea de flux de intrare-ieire.
Un flux de intrare-ieire este un obiect, care posed toate caracteristicile unui periferic de intrare-ieire (nume,
operaii de acces), dar care nu are o existen real. Pentru a fi efectiv utilizat n transferul informaiilor, un flux trebuie
s fie n prealabil legat, cu ajutorul unei operaii, numite asociere, cu un fiier sau periferic. Transferul informaiei,
descris de operaiile asupra fluxului, vor fi executate asupra fiierului sau perifericului, asociat fluxului. Asocierea poate
fi modificat de la o execuie la alta, ns textul programului, care face referin doar la numele fluxului, rmne
invariant.
nume de flux nume de flux
nume de flux
fiier perif
nil descriptor descriptor descriptor
de flux de fiier de periferic

tampon procedur tampon procedur


(a) pn la asociere de acces de acces

(b) dup asociere la un fiier (c) dup asociere la un periferic


Fig.5.7. Asocierea unui flux de intrare-ieire

/conversion/tmp/scratch/371683215.doc Victor Beliu p.11 din 20


La realizarea asocierii este folosit legarea prin nlnuire. Fiecrui flux i se asociaz un descriptor. Operaia de
asociere cere ca acest descriptor s conin un pointer spre descriptorul fiierului sau perifericului, pe care l asociaz
fluxului. La execuia unei operaii de intrare-ieire asupra fluxului, o direcionare permite obinerea suportului
corespunztor (fig.5.7).
n schema, prezentat n fig.5.7 am presupus, c descriptorul fluxului permite s se ajung pn la procedura i zona
tampoanelor, utilizate pentru intrri-ieiri. Legtura respectiv poate fi realizat, n dependen de sistem, la asocierea
fluxului sau la o faz ulterioar deschiderii.
Asemeni editrii legturilor, asocierea fluxurilor utilizate de un program poate fi realizat la dou dintre etapele de
derulare:
naintea execuiei programului, cu ajutorul unei instruciuni a limbajului de comand,
n timpul execuiei, cu ajutorul unei primitive de sistem, implementat printr-un apel de supervizor.
Sistemele de operare ofer utilizatorilor un set de fluxuri predefinite i asociate iniial, n mod implicit, la periferice
determinate. De exemplu, un sistem interactiv utilizeaz un flux standard de intrare i un flux standard de ieire; n
momentul n care un utilizator este admis n sistem aceste fluxuri sunt asociate, implicit, la tastatur i ecran. Ele pot fi
temporar reasociate fiierelor; n caz de eroare, asocierea implicit este n mod automat restabilit pentru a permite
utilizatorului s intervin.
Sistemele ofer de asemenea de obicei posibilitatea de a crea fluxuri noi, care se adaug celor predefinite. Ca i
asocierea, aceast creare poate fi cerut de o instruciune sau de un apel al regimului supervizor.
Exemplul 5.6. Fluxuri n sistemul Unix. n acest sistem sunt utilizate dou tipuri de nume: nume externe, care sunt identificatori construii n mod
ierarhic, i nume interne, care sunt numere ntregi. Numele externe sunt interpretate ntr-un mediu global tuturor proceselor, numele
locale ntr-un mediu propriu fiecrui proces. Crearea i interpretarea numelor locale sunt descrise n 6.6.
Numele locale sunt utilizate i pentru desemnarea fluxurilor. Prin convenie, numele locale 0, 1 i 2 desemneaz fluxul standard de
intrare, fluxul standard de ieire i fluxul mesajelor de eroare, respectiv. Orice instruciune este executat de un proces creat n acest
scop i care folosete aceste trei fluxuri. Iniial, fluxurile 0 i 1 sunt n mod implicit asociate respectiv la claviatura i ecranul
utilizatorului, care a creat procesul.
Sistemul pune la dispoziie urmtoarele operaii asupra fluxurilor:
1) Reasocierea fluxurilor. Dac flux_in i flux_out desemneaz, respectiv, un flux de intrare i un flux de ieire, iar id_fiier este un
identificator de fiier, instruciunile
flux_in < id_fiier
i flux_out > id_fiier
reasociaz, respectiv, flux_in i flux_out la id_fiier. Dac flux_in i flux_out nu sunt specificate n instruciune, ele iau
n mod implicit valorile 0 i 1 respectiv, adic cele corespunztoare fluxurilor standard. Astfel, instruciunea:
a < surs > destinaie
provoac execuia instruciunii a, dup ce n prealabil au fost reasociate fluxurile standard de intrare i ieire la fiierele surs i
destinaie.
2) Crearea mecanismelor pipe. Un tub (pipe n Unix) este un tampon, care permite ca dou procese s comunice conform schemei
productor-consumator. El conine un flux de intrare (depozit) i unul de ieire (retragere) i poate fi creat n dou feluri:
a) n mod implicit, prin intermediul limbajului de comand. O instruciune de forma
a|b
n care a i b sunt instruciuni elementare cu urmtorul efect:
i) s se creeze dou procese, fie proc_a i proc_b, mputernicite s execute a i b, respectiv,
ii) s se creeze un tub,
iii) s se reasocieze fluxul standard a proc_a la intrarea tubului, iar fluxul standard de ieire la ieirea tubului.
Cele dou procese vor funciona acum n modul productor-consumator. Pot fi create mai multe tuburi n serie ( a|b|c...); este de
asemenea posibil nlnuirea unei suite de instruciuni n pipe-line. Aceast construcie poate fi combinat cu reasocierea
fluxurilor (exemplu: <surs a|b...>destinaie).
b) n mod explicit, prin apelarea regimului supervizor. Un apel al supervizorului permite crearea unui tub i obinerea numelor
locale pentru intrarea i ieirea sa; aceste nume pot apoi fi asociate fiierelor. Aceste nume locale sunt cunoscute procesului
apelant i tuturor descendenilor lui.

5.3. Legarea programelor i datelor


5.3.1. Etapele de via a unui program
Am prezentat mai sus diferite momente n care poate fi stabilit legtura dintre instruciunile i datele unui program.
Vom prezenta n rezumat cele mai frecvente scheme nainte de a trece la realizarea lor. Aceast prezentare vizeaz, n
principal, expunerea folosirii noiunii de legare, fr a detalia aspectele tehnice ale funcionrii unui ncrctor sau
editor de legturi.
1) Program interpretat
date

program surs program interpretat rezultat


2) Program compilat
a) program unic
program obiect
program translator program obiect ncrctor (adrese absolute)
surs (adrese relative)

date calculatorul

/conversion/tmp/scratch/371683215.doc Victor Beliu p.12 din 20


rezultatul
Compararea acestor dou scheme pune n eviden diferena important ntre interpretare i compilare: modificarea
unui program interpretat are efect imediat, n timp ce n cazul compilrii suntem nevoii s parcurgem toate etapele,
ncepnd cu translatarea.
b) program compus
Constituirea unui program unic, pornind de la programe construite independent, se realizeaz pornind de la
programe obiect n adrese relative (deplasabile), adic obinute dup translatare, prin legarea referinelor externe.
Aceast operaie poate fi combinat cu ncrcarea (ceea ce nu este obligator). O condiie este ca formatul modulelor
obiect n adrese relative s respecte o convenie comun la care trebuie s se conformeze translatoarele; anume sub
aceast form programele comune se vor pstra n memorie.
program obiect n
adrese relative
ncrctor,
program obiect n editor de program obiect n
adrese relative legturi adrese absolute

program obiect n
adrese relative

5.3.2. Funcionarea unui ncrctor


Un ncrctor este destinat s pun n form absolut un program (sau modul) obiect n adrese relative. Aceast
operaie const n nlocuirea tuturor adreselor relative la originea modulului prin adrese absolute. Pentru aceasta se va
efectua un lucru preliminar n faza de translatare: nregistrrilor modulului obiect, care conin o adres translatabil, li
se va ataa un indicator, care va fixa poziia acestei adrese n interiorul nregistrrii (dac poziia nu este specificat n
mod implicit). Adresele translatabile pot s apar:
sau n cmpul de adres al instruciunii,
sau n cazul datelor, n expresii pentru calcularea adresei, destinate a fi utilizate ca relaii de direcionare sau
s fie ncrcate n registrele de baz.
ncrctorul utilizeaz metoda substituiei: orice adres relativ a este nlocuit prin adresa absolut a+originea,
unde originea este adresa absolut ncepnd cu care este ncrcat modulul. Pentru un calculator cu registre de baz acest
lucru este simplificat considerabil; reamplasarea este realizat la execuie prin calcularea adresei, cu condiia c
registrele de baz sunt ncrcate corect.
Dac programul ncrcat trebuie imediat executat, o funcie suplimentar a ncrctorului va determina adresa
absolut de la care trebuie s nceap execuia. Aceast adres este adesea fixat prin convenie (de exemplu, se va porni
de la primul amplasament al modulului). Pentru cazuri mai generale, modulul poate avea mai multe puncte de intrare,
desemnate cu ajutorul identificatorilor; el va conine n acest caz un tabel al punctelor de intrare, construit de translator,
care asociaz o adres relativ fiecrui identificator. Aceste adrese sunt transformate n adrese absolute; adresa
punctului de intrare este determinat pornind de la identificator prin intermediul unei cutri n tabel.
Pentru a ilustra prezentm un format posibil al unui modul obiect translatabil i programul corespunztor al
ncrctorului.
en-tte <id_modul, lungime,...>
...
corpul modulului <adr, n, r, cod>
...
...
tabelul punctelor de intrare <identificator, adres relativ>
...
O nregistrare a corpului modulului este de forma <adr, n, r, cod> cu
adr : adresa relativ a codului <cod> n modul
n : lungimea lui <cod> n octei
r : 1 sau 0 (cod translatabil sau nu)

/conversion/tmp/scratch/371683215.doc Victor Beliu p.13 din 20


cod : n octei ai programului.
Algoritmul ncrctorului poate fi urmtorul:
Parametrii de apel : identitatea modulului (numele fiierului)
: adr_ncrcare (adresa absolut de ncrcare)
: id_nceput (identificatorul punctului de intrare)
citire(en-tte);
<verificare dac lungimea permite ncrcarea>
repeat
citire nregistrare; -- <adr, n, r, cod>
if r = 1 then
translatare(cod)
endif;
adr_implantare := adr + adr_ncrcare;
<ordonarea codului pornind de la adr_implantare>
until corp de modul epuizat
citire(tabel de puncte de intrare);
cutare(id_nceput,adr_exe);
if eec then
<ieire eroare> -- sau alegerea unei adrese implicite
else -- implicit
adr_exe := adr_exe + adr_ncrcare
endif;
<ramificaie la adresa adr_exe>
Procedura translatare(cod) modific <cod>-ul, translatnd adresele relative ale acestuia: fiecare adres relativ este
incrementat cu adr_ncrcare. Poziia acestor adrese n interiorul nregistrrii trebuie, deci, s fie cunoscut (cel mai
des, fiecare nregistrare conine o instruciune unic n care adresa ocup o poziie fix).
Utilizarea unei adresri cu registre de baz simplific lucrul ncrctorului, translatarea fiind realizat automat,
naintea execuiei, ncrcnd ntr-un registru de baz adresa de implantare a programului. Folosirea a mai multor registre
de baz permite reimplantarea independent a mai multor fragmente de program (de exemplu, procedurile de o parte,
datele de alta). Unicele informaii care trebuie s fie translatate de ctre ncrctor sunt expresiile adreselor, utilizate
pentru ncrcarea registrelor de baz.
5.3.3. Funcionarea unui editor de legturi
Vom descrie mai jos principiile de funcionare a unui editor de legturi presupunnd, c el mai ndeplinete i
ncrcarea. Editorul de legturi primete la intrare un set de module obiect translatabile i construiete la ieire un modul
obiect absolut. El este obligat, deci, pentru fiecare modul obiect:
1) s determine adresa de implantare a acestuia,
2) s ndeplineasc modificrile informaiilor translatabile,
3) s realizeze legarea referinelor externe.
5.3.3.1. Legarea prin substituie
n cazul editrii legturilor prin substituie fiecare referin la un obiect extern n cadrul unui modul este nlocuit
prin adresa absolut a acestui obiect.
Prin definiie, un modul A utilizeaz un modul B dac programul lui A face referine la obiecte, coninute n B.
Deoarece graful relaiei utilizeaz poate conine circuite, editarea legturilor folosete un algoritm n doi pai. Primul
pas construiete planul implantrii modulelor i determin adresa absolut a tuturor obiectelor externe; al doilea pas
soluioneaz referinele la aceste obiecte.
Formatul modulelor obiect, indicate n 5.3.2, este completat de un tabel de referine externe, care conine
identificatorii tuturor obiectelor externe, folosite de modul; o referin extern din program este nlocuit printr-o
referin la intrarea corespunztoare a tabelului. Aceast ordonare permite s fie pstrat doar un exemplar a fiecrui
identificator extern i evit dispersarea acestor identificatori n corpul modulului.
Pentru prezentarea unui algoritm al editorului de legturi indicm un format posibil al modulelor translatabile.
en-tte <id_modul, lungime,...>
...

/conversion/tmp/scratch/371683215.doc Victor Beliu p.14 din 20


tabelul referinelor externe <identificator extern>
...
...
corpul modulului (program) <adr, n, r, cod>
...
...
tabelul definiiilor externe <identificator, adres relativ>
...
O nregistrare din corpul modulului are acum urmtoarea semnificaie:
adr : adresa relativ a codului <cod>
n : lungimea lui <cod> n octei
r : indicator de reimplantare a adresei
cod : fragment de program sau date
0 : informaie absolut
1 : informaie translatabil (intern)
< 0 : informaie extern, referina n0-r n tabelul referinelor externe.
Comunicarea ntre cei doi pai ai editorului de legturi este asigurat de un tabel global de identificatori externi,
construit la primul pas, i care pentru un obiect extern conine cuplul
(identificator, adres absolut)
Specificm dou proceduri de acces la acest tabel:
intrare(id, val) -- introduce cuplul (id, val) n tabel
cutare(id, val) -- caut un cuplu cu identificatorul id; n caz de eec (nu a fost
gsit) val este fr semnificaie, altfel returneaz valoarea
asociat lui val.
Parametrii de intrare ai unui editor de legturi sunt:
adresa de ncrcare a modulului executabil (adr_ncrcare),
numele fiierelor modulelor, care se vor lega,
bibliotecile n care vor fi cutate referinele nesatisfcute.
Programul primului pas va fi de forma:
adr_init := adr_ncrcare -- adresa nceputului modulului
repeat -- iteraii asupra modulului
citire(en-tte); -- (id_modul,lungime)
<tratare en-tte>;
repeat -- iteraii asupra referinelor externe
citire(id_ref);
<tratare ref_externe>;
until tabel de referine epuizat
trece(corpul modulului); -- pas de tratare
repeat -- iteraii asupra definiiilor externe
citire(id_def,adr_def);
<tratare_def_externe>
until tabel def epuizat
until mai exist module de tratat;
<sfrit pas 1>
n timpul constituirii tabelului externilor valoarea val=0, asociat unui identificator semnific, prin convenie, c
aceasta a fost ntlnit n cel puin o referin, dar nu nc i ntr-o definiie. Avem, deci, o referin (provizoriu)
nesatisfcut. Precizm procedurile:
<tratare_ en-tte>:
cutare(id_modul,val); -- numele modulului
if eec or val=0 then -- referin nou
intrare(id_modul,adr_init)
else
eroare(definiie dubl)
endif;

/conversion/tmp/scratch/371683215.doc Victor Beliu p.15 din 20


baza:=adr_init; -- nceputul modulului curent
adr_init:=adr_init+lungime -- nceputul modulului urmtor
<verificare dac lungimea permite ncrcare>
<tratare_def_externe> :
cutare(id_def,val);
if eec or val=0 then
intrare(id_def,baza+adr_def) -- adres absolut a definiiei externe
else
eroare(definiie dubl)
endif
<tratare_ref_externe> :
cutare(id_ref,val);
if eec or val=0 then
intrare(id_ref,val) -- aciune vid, dac referina este deja prezent
endif
<sfrit pas 1>:
pentru toate(id_ref,val) pentru care val=0 -- referin nesatisfcut
<s se caute n biblioteca specificat modulul, care conine id_ref i s se determine
adresa sa de implantare (acest modul va fi ncrcat n memorie cu programul)>
<s se calculeze val i intrare(id_ref,val)
La trecerea pasului 1 tabelul global al externilor este construit. Cu excepia cazurilor de eroare, orice identificator al
acestui tabel este asociat unei adrese absolute de implantare.
Rolul pasului 2 este de a efectua translatarea adreselor i ncrcarea n memorie, utiliznd informaiile gsite n
tabelul externilor.
<pasul 2>:
repeat -- iteraii asupra modulului
citire(en-tte);
cutare(id_modul,val);
baza:=val;
citire(tabel de referine externe);
repeat -- iteraii asupra tabelului de referine
<tratare_nregistrare>
until corpul mudulului epuizat
until mai exist module de tratat;
<sfrit pas 2>;
Precizm procedurile fazei a doua:
<tratare_nregistrare>:
adr_implantare:=adr+baza;
if r=1 then -- referin intern translatabil
<translatare_nregistrare(baza)>
else
if r<0 then -- referin extern
id_ref:=<intrarea n0 r n tabelul referinelor externe>;
cutare(id_ref,val);
translatare_nregistrare(val);
endif
endif; -- terminat, dac r=0
<ncrcare nregistrare de la adr_implantare>
<sfrit pas 2>:
cutare(id_intrare,val);
if eec or val=0 then
eroare(adres necunoscut de execuie) -- sau alegere implicit (default)
else
adr_exe:=val

/conversion/tmp/scratch/371683215.doc Victor Beliu p.16 din 20


endif;
<imprimarea coninutului tabelului externilor> -- diagrama implantrii map
<ramificaie la adresa adr_exe>
Imprimarea tabelului externilor sub forma diagramei de implantare (eng. map) permite semnalizarea erorilor
(definiii duble, referine nesatisfcute) i facilitarea punerii la punct i localizrii informaiilor n memorie. Diagrama
de implantare este o secven de linii de forma:
<identificator extern> <adres absolut> <o diagnoz eventual>
5.3.3.2. Legare prin nlnuire
1) Vector de transfer
Metoda vectorului de transfer este relativ puin utilizat pentru programele compilate, totui descriem principiile
acestei tehnici, deoarece:
ea este aplicabil n cazul programelor interpretate sau celor combinate,
ea permite introducerea ntr-o form primitiv a noiunii de segment de legtur, noiune dezvoltat n
continuare.
Fiecare modul conine un tabel, numit vector de transfer, care are cte o intrare pentru o referin extern. n corpul
modulului fiecare referin la un obiect extern este nlocuit printr-o referin indirect la intrarea respectiv a
vectorului de transfer. Prima trecere a editrii legturilor are loc ca i n 5.3.3.1; a doua trecere const n asocierea
intrrilor vectorilor de transfer din diferite module cu adresele corespunztoare a obiectelor externe. La execuie,
accesul la un obiect extern este, deci, realizat prin direcionarea via un cuvnt al vectorului de transfer. Aceast metod
este costisitoare n spaiu (vectorii de transfer trebuie pstrai) i n timp (referire indirect). Ea convine pentru cazul
nlocuirii unui modul ntr-un program deja legat; anume din aceast cauz metoda vectorilor de transfer prezint interes
pentru programele interpretate sau pentru sistemele de depanare.
2) Registre de baz
Ca i n cazul ncrctorului, adresarea cu ajutorul registrelor de baz simplific lucrul editorului de legturi. Exist
dou moduri distincte de utilizare a acestor registre:
1. Registrele de baz sunt accesibile utilizatorilor: n acest caz sunt definite convenii de utilizare care permit, de
exemplu, folosirea registrelor de baz specificai pentru a adresa un subprogram, o zon de date, un bloc de
parametri etc. Aceste convenii sunt implementate de ctre translatoare sau direct de ctre utilizatori, dac acetia
programeaz n limbaj de asamblare.
2. Registrele de baz sunt administrate de sistemul de operare i sunt inaccesibili utilizatorilor. n acest caz,
sistemul asociaz un registru de baz fiecrui fragment independent (program sau zon de date) i asigur
realocarea acestor registre, dac numrul lor este insuficient.
n ambele cazuri, lucrul unui editor de legturi const n calcularea expresiilor adreselor, care vor fi ncrcate n
registrele de baz. n al doilea caz, printre altele, este necesar s fie introduse instruciunile de ncrcare a acestor
registre (sub form de apel al regimului supervizor) n modulele obiect.

5.4. Mecanisme de gestiune a obiectelor


5.4.1. Segmentarea
Utilizarea registrelor de baz permite reimplantarea independent n memorie a procedurilor i datelor unui
program. Totui, acest mecanism are dou restricii:
pentru utilizator: necesitatea de a se conforma conveniilor de folosire a registrelor de baz,
pentru sistemul de operare: necesitatea gestiunii alocrii registrelor de baz, dac acestea sunt n numr
insuficient.
Aceste restricii vor fi eliminate, dac utilizatorul ar putea numi cu un nume la alegere proprie elementele de
informaie i dac sistemul ar dispune de un mecanism de plasare n memorie i de legare pentru a administra astfel de
elemente. Anume la aceste dou ntrebri ncearc s rspund segmentarea.
Un segment este p mulime de informaii considerat ca o unitate logic i desemnat de un nume; reprezentarea sa
ocup o mulime de amplasamente adiacente (contigue). Un segment poate fi de lungime variabil. n interiorul unui
segment informaiile sunt desemnate cu ajutorul unei deplasri, care este o adres relativ n raport cu nceputul
segmentului. O informaie este desemnat de un cuplu (nume de segment, deplasare), care se numete adres
segmentat (fig. 5.8).

/conversion/tmp/scratch/371683215.doc Victor Beliu p.17 din 20


Este important s se noteze, c segmentele sunt reciproc independente att din punct de vedere fizic, ct i logic.
Fizic, un segment poate fi implantat la o adres oarecare, cu condiia s fie ocupate adrese adiacente. Logic, diferite
segmente, administrate de un sistem de operare, sunt independente i trebuie considerate ca tot attea spaii de adresare
liniare distincte. Chiar dac numele segmentelor sunt frecvent reprezentate de numere ntregi consecutive, nu exist o
relaie de adiacen ntre ultimul amplasament al segmentului i i primul amplasament al segmentului i+1. Folosirea
unei deplasri negative sau mai mare dect lungimea segmentului utilizat este o eroare de adresare.
segmentul 1 segmentul i segmentul n

(seg_i, d)

Fig. 5.8. Adresare segmentat


Segmentele sunt utilizate:
ca uniti de secionare logic a unui program, pentru reprezentarea, de exemplu, a diferitor proceduri, module,
date legate logic (tabele, structuri),
ca unitate de partajare ntre mai muli utilizatori,
ca unitate de protecie (consecin a partajrii): segmentul este entitatea la care sunt ataate drepturile de acces.
Realizarea adresrii segmentate utilizeaz principiul, descris n figura 5.9.
eroare
adres segmentat dL
s d
d<L
Registru baz al tabelului segmentelor

Memoria fizic

s d
L
L a

Tabelul segmentelor

Fig.5.9. Realizarea adresrii segmentate


Fiecrui segment i este asociat un descriptor; el conine (cel puin) adresa de implantare a segmentului, lungimea sa
i drepturile de acces. Descriptorii se afl n tabelul segmentelor; un segment este desemnat de indicele descriptorului
su n acest tabel. Exist mai multe posibiliti de realizare, care sunt dictate de organizarea tabelelor descriptorilor:
1) Tabel unic. Toi descriptorii sunt pstrai ntr-un singur tabel; numele unic al unui segment este indicile
descriptorului su din acest tabel. Descriptorul conine o list de acces, care definete drepturile fiecrui
utilizator al segmentului. Aceast metod permite partajarea segmentelor, ns toi utilizatorii sunt obligai s
utilizeze unul i acelai nume unic, ceea ce adesea nu este comod.
2) Tabele multiple. Exist un tabel distinct pentru fiecare mediu; ntr-un mediu oarecare numele segmentului (dac
este accesibil n acest mediu) este indicele descriptorului su n acest tabel local. Un tabel accesibil n mai multe
medii are mai muli descriptori i mai multe nume distincte.
3) Organizare mixt. Fiecare segment posed un descriptor central, care conine caracteristicile sale de implantare
fizic (lungimea, adresa). El mai posed un descriptor local n fiecare mediu n care este accesibil; acest
descriptor conine informaiile proprii mediului (subliniem drepturile de acces) i puncteaz pe descriptorul
central. Un segment are n acest mod un nume distinct pentru fiecare mediu, iar caracteristicile fizice sunt
situate ntr-un loc unic, descriptorul central.

/conversion/tmp/scratch/371683215.doc Victor Beliu p.18 din 20


Figura 5.10 prezint aceste moduri de organizare.

nume local

nume
global

a) Tabel unic

c) Tabele locale
b) Tabele locale + tabel central
Fig.5.10. Moduri de organizare ale tabelelor segmentelor

5.5. Exerciii la capitolul 5


Exerciiul 5.1. Examinai problemele, ce in de retragerea drepturilor de acces la un obiect ntr-un mecanism de
protecie. Se dorete s se permit unui proces proprietar al unui obiect posibilitatea de a acorda i a retrage selectiv
drepturile de acces la acest obiect. Examinai separat cazul n care acordarea drepturilor este tranzitiv (un proces poate
la rndul su s retransmit drepturile pe care el le-a primit). Indicaii: dou mecanisme necesare sunt redirecionarea i
crearea unor legturi inverse.
Exerciiul 5.2. n schema integrrii unui volum amovibil n cadrul unui catalog al unui sistem de gestiune a fiierelor
examinai urmtoarele probleme:
posibilitatea de a crea legturi, care s nu treac prin rdcina volumului,
posibilitatea de a crea fiiere multivolum.
Exerciiul 5.3. Specificnd structura datelor necesare, precizai realizarea procedurilor de montare i demontare a unui
volum amovibil.
Exerciiul 5.4. Dac vom reprezenta catalogul unui sistem de gestiune a fiierelor printr-un graf nodurile cruia sunt
cataloage i fiiere, iar arcele relaiile de desemnare, sistemul de fiiere din Multics (fr a ine seama de legturi)
poate fi reprezentat printr-o arborescen i cel din Unix (n care nu exist diferen ntre legturi i nume simple) printr-
un graf fr circuite (subgraful catalogului rmnnd o arborescen).
Examinai avantajele, inconvenienele i problemele de realizare, care vor apare pentru structuri mai generale.
Exerciiul 5.4. Propunei o schem care ar permite editarea legturilor ntr-o singur faz conform principiului lanului
de reluare, utilizat n asambloarele cu o singur faz.
Exerciiul 5.5. Se propune s se realizeze un mecanism pentru executarea programelor modulare pe un calculator cu
adresare segmentat. Un modul conine o mulime de variabile globale i proceduri, care acceseaz aceste variabile.
Procedurile unui modul M pot fi apelate dintr-un alt modul, care utilizeaz M. Ne vom limita la un proces unic.
Un segment este identificat prin indicele descriptorului su ntr-un tabel general al segmentelor. Unui modul i sunt
asociate dou segmente: unul conine codul procedurilor sale, altul variabilele sale globale. Dou registre de baz
RBP i RBD conin numerele acestor dou segmente pentru modulul, care este n curs de execuie. Contorul ordinal CO
conine deplasarea instruciunii curente n segmentul procedur. Un segment special servete ca stiv de execuie;
parametrii procedurilor sunt pasai prin valori n stiv.
Procedurile modulelor, utilizate de un modul M, sunt numite externe pentru M. Desemnarea lor face apel la un segment
de legtur, fiecare amplasament n al cruia conine numerele segmentelor procedur i date ale unui modul E, folosit

/conversion/tmp/scratch/371683215.doc Victor Beliu p.19 din 20


de M. Un registru de baz RBL conine numrul segmentului de legtur a modulului curent. Segmentul procedur a
unui modul M este organizat dup cum urmeaz:
primul amplasament (deplasarea 0) conine adresa de baz a segmentului de legtur a modulului M,
urmtoarele m amplasamente conin deplasrile punctelor de intrare a celor m proceduri ale modulului,
restul segmentului conine codul executabil al procedurilor.

punct de
intrare
proceduri proceduri

date date
registre segment de
de baz legtur
modul apelant modul apelat

n programul unui modul M apelul procedurii cu numrul k a modulului, descris de amplasamentul cu numrul n al
segmentului de legtur este realizat cu ajutorul unei instruciuni call n, k.
1) Permite oare aceast schem realizarea mai multor module care ar avea proceduri comune i variabile globale
proprii? Care sunt avantajele unei atare posibiliti?
2) Descriei detaliat secvena operaiilor, care vor fi executate la apelul unei proceduri externe a unui modul i la
returul din procedur.
call n, k
3) Permite oare aceast schem editarea dinamic a legturilor? Descriei structurile de date necesare i principiul de
realizare.

/conversion/tmp/scratch/371683215.doc Victor Beliu p.20 din 20

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