Rețeaua de comunicații de date

2.2.1 Modelul de denumire

Este util să avem un model al modului în care numele sunt asociate cu obiecte specifice. Un proiectant de sistem creează un model de denumire, care constă din trei elemente. Primul element este un spațiu de nume, care cuprinde un alfabet de simboluri împreună cu reguli de sintaxă care specifică ce nume sunt acceptabile. Al doilea element este un algoritm de atribuire a numelor, care asociază unele (nu neapărat toate) nume din spațiul de nume cu unele (din nou, nu neapărat toate) valori dintr-un univers de valori, care este al treilea și ultimul element al schemei de denumire. O valoare poate fi un obiect sau poate fi un alt nume din spațiul de nume original sau dintr-un alt spațiu de nume. O corespondență nume-valoare este un exemplu de legătură, iar atunci când există o astfel de corespondență, se spune că numele este legat de valoare. Figura 2.10 ilustrează acest lucru.

Figura 2.10. Model general de funcționare a unei scheme de denumire. Algoritmul de mapare a numelor preia un nume și un context și returnează un element din universul de valori. Săgețile indică faptul că, folosind contextul “A”, algoritmul rezolvă numele “N4” în valoarea “13”.

În majoritatea sistemelor, de obicei, mai multe scheme de denumire distincte sunt în funcțiune simultan. De exemplu, un sistem poate utiliza o schemă de denumire pentru numele căsuțelor poștale de e-mail, o a doua schemă de denumire pentru gazdele de internet, o a treia pentru fișiere și o a patra pentru adresele de memorie virtuală. Atunci când interpretorul unui program întâlnește un nume, trebuie să știe ce schemă de denumire trebuie să invoce. Mediul care înconjoară utilizarea numelui oferă, de obicei, suficiente informații pentru a identifica schema de denumire. De exemplu, într-un program de aplicație, autorul acelui program știe că programul ar trebui să se aștepte ca numele de fișiere să fie interpretate numai de sistemul de fișiere și ca numele de gazdă Internet să fie interpretate numai de un serviciu de rețea.

Interpretul care întâlnește numele execută algoritmul de mapare a numelor din schema de denumire corespunzătoare. Algoritmul de mapare a numelui rezolvă numele, ceea ce înseamnă că descoperă și returnează valoarea asociată (din acest motiv, algoritmul de mapare a numelui este numit și rezolvator). De obicei, algoritmul de atribuire a numelui este controlat de un parametru suplimentar, cunoscut sub numele de context. Pentru o anumită schemă de denumire, pot exista mai multe contexte diferite, iar un singur nume din spațiul de nume poate fi asociat unor valori diferite atunci când rezolvatorul utilizează contexte diferite. De exemplu, în discursul obișnuit, atunci când o persoană se referă la numele “tu”, “aici” sau “Alice”, semnificația fiecăruia dintre aceste nume depinde de contextul în care persoana îl rostește. Pe de altă parte, unele scheme de denumire au un singur context. Astfel de scheme de denumire oferă ceea ce se numește spații de nume universale și au proprietatea plăcută că un nume are întotdeauna același înțeles în cadrul acelei scheme de denumire, indiferent de cine îl folosește. De exemplu, în Statele Unite, numerele de securitate socială, care identifică conturile guvernamentale de pensii și impozite, constituie un spațiu universal de nume. În cazul în care există mai mult de un context, interpretul îi poate spune rezolvatorului care ar trebui să îl folosească sau acesta poate folosi un context implicit.

Potem rezuma modelul de denumire prin definirea următoarei operații conceptuale asupra numelor:

valoare ← rezolvare (nume, context)

Când un interpret întâlnește un nume într-un obiect, acesta își dă seama mai întâi ce schemă de denumire este implicată și, prin urmare, ce versiune de rezolvare ar trebui să invoce. Apoi identifică un context adecvat, rezolvă numele în acel context și înlocuiește numele cu valoarea rezolvată pe măsură ce continuă interpretarea. Variabila context indică rezolvării ce context să folosească. Această variabilă conține un nume cunoscut sub numele de referință de context.

Într-un procesor, numerele de registru sunt nume. Într-un procesor simplu, atât setul de nume de registre, cât și registrele la care sunt legate aceste nume sunt fixate în momentul proiectării. În majoritatea celorlalte sisteme care utilizează nume (inclusiv schema de denumire a registrelor din unele procesoare de înaltă performanță), este posibil să se creeze noi legături și să se șteargă cele vechi, să se enumere spațiul de nume pentru a obține o listă a legăturilor existente și să se compare două nume. În aceste scopuri, definim încă patru operații conceptuale:

status ← bind (nume, valoare, context)

status ← unbind (nume, context)

listă ← enumerare (context)

rezultat ← comparare (nume1, nume2)

Prima operație schimbă contextul prin adăugarea unei noi legături; rezultatul de stare raportează dacă modificarea a reușit sau nu (ar putea eșua dacă numele propus încalcă regulile de sintaxă ale spațiului de nume). După un apel reușit la bind, resolve va returna noua valoare pentru name.*A doua operație, unbind, elimină o legătură existentă din context, statusul raportând din nou succesul sau eșecul (poate pentru că nu a existat o astfel de legătură existentă). După un apel reușit la unbind, resolve nu va mai returna acea valoare pentru name. Operațiile bind și unbind permit utilizarea numelor pentru a stabili conexiuni între obiecte și pentru a modifica ulterior aceste conexiuni. Proiectantul unui obiect poate, prin utilizarea unui nume pentru a se referi la un obiect component, să aleagă obiectul la care este legat acel nume, fie în acel moment, fie ulterior, prin apelarea funcției bind, și să elimine o legătură care nu mai este adecvată prin apelarea funcției unbind, toate acestea fără a modifica obiectul care utilizează numele. Această capacitate de a amâna și de a modifica legăturile este un instrument puternic utilizat în proiectarea aproape tuturor sistemelor. Unele implementări de denumire oferă o operațiune de enumerare, care returnează o listă cu toate numele care pot fi rezolvate în context. Unele implementări ale enumerării pot, de asemenea, să returneze o listă cu toate valorile legate în prezent în context. În cele din urmă, operația de comparare raportează (adevărat sau fals) dacă numele1 este sau nu identic cu numele2. Semnificația cuvântului “același” este o întrebare interesantă abordată în secțiunea 2.2.5 și poate necesita furnizarea de argumente de context suplimentare.

Diferite scheme de denumire au reguli diferite privind unicitatea corespondențelor nume-valoare. Unele scheme de denumire au o regulă conform căreia un nume trebuie să corespundă exact unei singure valori într-un anumit context și o valoare trebuie să aibă un singur nume, în timp ce în alte scheme de denumire un nume poate corespunde mai multor valori sau o valoare poate avea mai multe nume, chiar și în același context. Un alt tip de regulă de unicitate este cea a unui spațiu de nume cu identificator unic, care oferă un set de nume care nu vor fi reutilizate niciodată pe toată durata de viață a spațiului de nume și care, odată legate, vor rămâne întotdeauna legate de aceeași valoare. Se spune că un astfel de nume are o legătură stabilă. În cazul în care un spațiu de nume cu identificator unic are, de asemenea, regula conform căreia o valoare nu poate avea decât un singur nume, numele unice devin utile pentru a ține evidența obiectelor pe o perioadă lungă de timp, pentru a compara referințele pentru a vedea dacă acestea se referă la același obiect și pentru a coordona mai multe copii în sistemele în care obiectele sunt reproduse pentru performanță sau fiabilitate. De exemplu, numărul de cont al clientului din majoritatea sistemelor de facturare constituie un spațiu de nume de identificare unic. Numărul de cont se va referi întotdeauna la același cont al clientului, atâta timp cât acesta există, în ciuda schimbărilor de adresă, de număr de telefon sau chiar de nume personal al clientului. În cazul în care contul unui client este șters, numărul de cont al acelui client nu va fi refolosit într-o zi pentru contul unui alt client. Câmpurile numite din cadrul contului, cum ar fi soldul datorat, se pot schimba din când în când, dar legătura dintre numărul de cont al clientului și contul în sine este stabilă.

Agoritmul de cartografiere a numelor plus un singur context nu mapează neapărat toate numele din spațiul de nume în valori. Astfel, un rezultat posibil al efectuării rezolvării poate fi un rezultat “not-found”, pe care rezolvarea îl poate comunica apelantului fie ca o valoare rezervată, fie ca o excepție. Pe de altă parte, în cazul în care schema de denumire permite ca un nume să corespundă mai multor valori, un rezultat posibil poate fi o listă de valori. În acest caz, operația de dezlegare poate necesita un argument suplimentar care să precizeze ce valoare trebuie dezlegată. În cele din urmă, unele scheme de denumire oferă o căutare inversă, ceea ce înseamnă că un apelant poate furniza o valoare ca argument pentru algoritmul de mapare a numelor și poate afla ce nume sau nume sunt legate de acea valoare.

Figura 2.10 ilustrează modelul de denumire, prezentând un spațiu de nume, universul corespunzător de valori, un algoritm de mapare a numelor și un context care controlează algoritmul de mapare a numelor.

În practică, se întâlnesc trei algoritmi de mapare a numelor frecvent utilizați:

Cercetare în tabel

Cercetare recursivă

Cercetare multiplă

Cea mai frecventă implementare a unui context este un tabel de perechi {nume, valoare}. Atunci când punerea în aplicare a unui context este un tabel, algoritmul de mapare a numelui este doar o căutare a numelui în acel tabel. Tabelul în sine poate fi complex, implicând hashing sau B-trees, dar ideea de bază rămâne aceeași. Legarea unui nume nou de o valoare constă în adăugarea perechii {nume, valoare} la tabel. Figura 2.11 ilustrează această implementare obișnuită a modelului de denumire. Există un astfel de tabel pentru fiecare context, iar contexte diferite pot conține legături diferite pentru același nume.

Figura 2.11. Un sistem care utilizează consultarea tabelelor ca algoritm de mapare a numelor. Ca și în exemplul din figura 2.10, și acest sistem rezolvă numele “N4” la valoarea “13”.

Exemplele din lumea reală atât ale modelului general de denumire, cât și ale implementării table-lookup abundă:

O carte de telefon este un context de table-lookup care leagă nume de persoane și organizații de numere de telefon. Ca și în exemplul rețelei de comunicații de date, numerele de telefon sunt ele însele nume pe care compania de telefonie le rezolvă în apariții de linii fizice, folosind un algoritm de cartografiere a numelor care implică coduri de zonă, centrale și comutatoare fizice. Anuarele telefonice pentru Boston și pentru San Francisco sunt două contexte ale aceleiași scheme de denumire; un anumit nume poate apărea în ambele anuare telefonice, dar dacă este așa, probabil că este legat de numere de telefon diferite.

Primele numere întregi denumesc registrele unui procesor. Valoarea este registrul însuși, iar maparea de la nume la valoare este realizată prin cablare.

Celele de memorie sunt denumite în mod similar cu numere numite adrese, iar maparea de la nume la valoare este din nou realizată prin cablare. Capitolul 5 descrie un mecanism de redenumire a adreselor cunoscut sub numele de memorie virtuală, care leagă blocuri de adrese virtuale de blocuri de celule de memorie contigue. Atunci când un sistem implementează mai multe memorii virtuale, fiecare memorie virtuală este un context distinct; o anumită adresă se poate referi la o celulă de memorie diferită în fiecare memorie virtuală. Celulele de memorie pot fi, de asemenea, partajate între memoriile virtuale, caz în care aceeași celulă de memorie poate avea aceleași adrese (sau adrese diferite) în diferite memorii virtuale, așa cum este determinat de legături.

Un sistem de fișiere tipic pentru calculatoare utilizează mai multe straturi de nume și contexte: sectoarele de disc, partițiile de disc, fișierele și directoarele sunt toate obiecte denumite. Directoarele sunt exemple de contexte de consultare a tabelelor. Un anumit nume de fișier poate apărea în mai multe directoare diferite, legate fie de același fișier, fie de fișiere diferite. Secțiunea 2.5 prezintă un studiu de caz privind denumirea în sistemul de fișiere unix.

Computerele se conectează la rețelele de comunicații de date în locuri cunoscute sub numele de puncte de conectare la rețea. Punctele de atașare la rețea sunt de obicei denumite cu două scheme de denumire distincte. Prima, utilizată în interiorul rețelei, implică un spațiu de nume format din numere într-un câmp de lungime fixă. Aceste nume sunt legate, uneori permanent, alteori doar pentru scurt timp, de punctele fizice de intrare și ieșire din rețea. O a doua schemă de denumire, utilizată de clienții rețelei, mapează un spațiu de nume universal mai ușor de utilizat, format din șiruri de caractere, la numele din primul spațiu de nume. Secțiunea 4.4 este un studiu de caz al Sistemului de nume de domenii, care oferă o denumire a punctelor de atașament ușor de utilizat pentru Internet.

Un programator identifică variabilele de procedură prin nume, iar fiecare activare a procedurii oferă un context distinct în care sunt rezolvate majoritatea acestor nume. Unele nume, identificate ca “nume statice” sau “nume globale”, pot fi în schimb rezolvate într-un context care este partajat între activări sau între diferite proceduri. Atunci când o procedură este compilată, unele dintre denumirile originale ale variabilelor, ușor de utilizat, pot fi înlocuite cu identificatori de numere întregi care sunt mai ușor de manipulat de către o mașină, dar modelul de denumire rămâne valabil.

Un Uniform Resource Locator (URL) de pe World Wide Web este asociat unei pagini web specifice printr-un algoritm relativ complicat care împarte URL-ul în mai multe părți constitutive și rezolvă părțile folosind diferite scheme de denumire; rezultatul identifică în cele din urmă o anumită pagină web. Secțiunea 3.2 este un studiu de caz al acestei scheme de denumire.

Un sistem de facturare a clienților păstrează de obicei cel puțin două tipuri de nume pentru fiecare cont de client. Numărul de cont numește contul într-un spațiu de nume cu identificator unic, dar există, de asemenea, un spațiu de nume distinct de nume personale care poate fi, de asemenea, utilizat pentru a identifica contul. Ambele nume sunt de obicei puse în corespondență cu înregistrările contului de către un sistem de baze de date, astfel încât conturile pot fi recuperate fie după numărul de cont, fie după numele personal.

Aceste exemple evidențiază, de asemenea, o distincție între “denumire” și legare. Unele, dar nu toate contextele “denumesc” lucruri, în sensul că ele pun în corespondență un nume cu un obiect care este considerat în mod obișnuit ca având acel nume. Astfel, directorul de telefonie nu “numește” nici persoane, nici linii telefonice. În altă parte, există contexte care leagă numele de persoane și care leagă numerele de telefon de anumite telefoane fizice. Anuarul telefonic leagă numele oamenilor de numele telefoanelor.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.