4 ELEMENTE DE TELEINFORMATIC{
Teleinformatica (telematica) se poate defini ca fiind domeniul
informaticii care utilizeaza mijloace de transmisie la distanta a
informatiilor.
Retelele de calculatoare sunt constituite din elemente ale informaticii si
ale sistemelor de telecomunicatii.
Evolutia teleinformaticii a cunoscut mai multe etape:
a) transmiterea datelor între doua calculatoare (anii '60);
b) accesarea informatiei la distanta, deci o tendinta de descentralizare
prin utilizarea statiilor de intrare/iesire (anii '70);
c) retele de terminale (comutare de circuite cu concentratori,
multiplexare), retele de calculatoare (comutare mesaje, pachete)
(sfârsitul anilor '70);
d) teleinformatica cu utilizarea pe scara larga a retelelor publice,
locale, comunicatie între retele prin tehnica satelitilor, utilizarea
fibrelor optice ca suport fizic, comunicatia digitala etc. (anii '80 si
în prezent).
În general, o retea poate fi definita ca o multime de noduri legate printr -
un ansamblu de drumuri (deci poate fi reprezentata printr -un graf).
Topologia retelei vizeaza localizarea nodurilor si modul de înlantuire al
acestora.
În mod obisnuit se utilizeaza un numar de retele, ca de exemplu: sosele,
cai ferate, linii aeriene, posta, telefon, electricitate, apa, radio, televiziune
etc
Notiunea de retea nu este un concept nou si exemplele anterioare permit
evidentierea unor caracteristici generale ale retelelor:
a) serviciul oferit prin retea depinde de tipul legaturii folosite în retea.
De exemplu, soselele furnizeaza o retea punct la punct, în timp ce
apa este difuzata în toate nodurile retelei;
b) utilizarea unei retele în bune conditiuni implica respectarea unui
anumit numar de reguli. De exemplu, pe sosele se poate circula
respectând regulile de circulatie;
c) o retea se poate construi pe alte retele. De exemplu, posta utilizeaza
sosele, cai ferate, linii aeriene.
O retea teleinformatica (o vom numi, fara riscul confuziei, retea) este o
retea ale carei noduri sunt constituite din unitati de prelucrare a informatiei,
schimbul de informatie realizându-se prin intermediul legaturilor dintre
noduri, numite canale de transmisie.
În practica, nodurile pot fi calculatoare sau echipamente terminale
(ecran de vizualizare + tastatura + imprimanta) si canalele de transmisie
sunt adesea linii telefonice pentru marile retele si cabluri coaxiale pentru
retelele locale.
Pentru schimbul de informatie, doua unitati de prelucrare trebuie sa
respecte aceleasi protocoale, care sunt reguli complexe de comunicare.
4.1 Transmisia informatiilor
Suporturi fizice ale unei cai de transmisie
Toate caile de transmisie se bazeaza pe propagarea undelor
electromagnetice:
a) cale metalica: este o linie electrica ce poate fi o linie telefonica sau
un cablu electric. Aceasta solutie prezinta unele inconveniente care
se refera la sensibilitatea la zgomote, scaderea semnalului transmis
la distanta etc;
b) fascicol hertzian: utilizeaza unde radioelectrice pentru transportul
informatiei;
c) fibre optice: transportul informatiei este realizat prin propagarea
undelor luminoase în fibre de sticla, prezenta sau absenta unui
semnal luminos permitând codificarea unui bit de informatie.
Utilizarea acestor diverse suporturi de informatie poate fi schematizata
astfel: o legatura intercontinentala este realizata cu ajutorul unui satelit, o
legatura între calculatoarele unei tari se realizeaza prin linii telefonice, o
legatura între doua cladiri din acelasi oras se face prin fibre optice, legatura
între diverse echipamente din aceesi cladire utilizeaza cablu coaxial, iar
daca echipamentele sunt apropiate, se foloseste un simplu cablu electric.
Moduri de transmisie a informatiei
a) transmisie paralela: se transmit mai multi biti simultan, de
exemplu, bus-ul unui microcalculator transmite 8 sau 16 biti
simultan, o linie telefonica de lunga distanta poate asigura 12
comunicatii simultane etc.;
b) transmisie seriala: informatiile se transmit pe aceeasi linie si se
succed în timp.
Sincronizarea transmisiei informatiei
Orice transfer de informatie care utilizeaza telecomunicatiile este în
general realizat sub forma seriala. Una din principalele probleme ale
transmisiei seriale consta în sincronizarea emitatorului cu receptorul
informatiei. Transmisia paralela ridica probleme de sincronizare si mai mari
si nu se utilizeaza decât pe distante scurte. Majoritatea echipamentelor
informatice sunt dotate cu o iesire (poarta) RS232C, care este iesire
standard permitând o transmisie seriala. Sincronizarea determina esantioane
ale semnalului transmis pentru a recunoaste bitii constituind informatia. O
secventa de biti corespunde unui sir de schimbari ale starii semnalului,
fiecare stare dureaza un interval foarte scurt de timp. Receptorul trebuie sa
fie sincronizat pentru ca începutul si sfârsitul esantioanelor sa corespunda
schimbarilor de stare (sincronizare bit). Când receptorul primeste bitii de
informatie ele trebuie sa reconstituie semnalul, deci sa reconstituie
caracterele (sincronizare caracter). Se disting doua moduri de transmisie:
a) transmisia asincrona: caracterele sunt emise în mod neregulat, ca
de exemplu caracterele tastate. Sincronizarea între emitator si
receptor se realizeaza în timpul transmiterii fiecarui caracter.
Datorita transmisiei aleatoare a caracterelor, acestea sunt încadrate
de biti suplimentari pentru asigurarea corectitudinii transmisiei
(start-bit, stop-bit, bit de paritate). Acest mod de transmisie este
relativ simplu si ieftin, dar redondanta datorata bitilor adaugati nu
permite realizarea unei mari capacitati de transmisie si utilizarea sa
este limitata la terminale lente ca tastatura sau imprimanta;
b) transmisia sincrona: bitii sunt emisi în mod regulat, fara separare
între caractere. Pentru sincronizare se utilizeaza un ceas-bit atât de
catre emitator cât si de catre receptor. Sincronizarea caracterelor se
realizeaza prin recunoasterea secventelor particulare de biti. Acest
mod de transmisie permite debite mai mari de informatie
(superioare de 12000 biti/sec).
Moduri de exploatare a unei cai de transmisie
a) simplex: transmisia este unidirectionala, o extremitate emite iar
cealalta receptioneaza. Difuziunile radio si TV sunt exemplele cele
mai caracteristice;
b) semiduplex half-duplex (bidirectional alternat): permite o
transmisie în doua sensuri, dar alternativ, fiecare din cele doua
extremitati primeste si emite la rândul sau, dar niciodata simultan;
c) duplex full-duplex (bidirectional simultan): permite o transmisie
simultana în cele doua sensuri.
Banda de trecere
O cale de transmisie nu permite decât transportul semnalelor care
apartin unui anumit domeniu (banda) de frecvente. Banda de frecvente
corect transmisa este numita banda de trecere (notata W), si constituie
caracteristica esentiala care determina direct capacitatea de transmisie.
H. Nyquist a aratat ca rapiditatea de semnalizare (capacitatea de
transmisie) a unei cai este C = 2*W bound, unde W este marimea benzii de
trecere. Bound-ul este unitatea de rapiditate a semnalizarii si corespunde
unui anumit numar de semnale pe secunda, iar daca fiecare semnal permite
transmiterea a n biti, atunci C = 2*n*W biti/sec (bps).
În anul 1948, C. Shannon a aratat ca rapiditatea de semnalizare este
determinata nu numai de banda de trecere ci si de raportul semnal (S) /
bruiaj (B), si anume: C = W * log (1 + S / B) (Hz).
Transmisie analogica si digitala
a) transmisia analogica: consta în a utiliza un semnal simplu numit
unda purtatoare careia i se modifica unul sau mai multi parametri:
amplitudine, frecventa, faza;
b) modularea: consta în transformarea informatiilor digitale în
informatii analogice prin modelarea unei unde purtatoare
sinusoidala periodica ce se poate reprezenta s (t) =A*sin (w*t+j
sau s(t)=A*sin (2*p*f*t+j unde: A este amplitudinea semnalului,
w este pulsatia, f este frecventa, iar j este faza intiala. Exista trei
posibilitati de modulare a semnalului:
modulare în amplitudine: s (t) = A (t) * sin (w * t + j
modulare în frecventa: s (t) = A * sin (2 * p * f (t) * t+j)
modulare de faza: s (t) = A * sin (2 * p * f * t + j (t))
Transmisia digitala si modularea
Transmisia digitala sau numerica consta în a transmite bitii sub forma de
impulsuri electrice patrate având o durata si o amplitudine patrate.
Codificarea informatiilor se realizeaza în mod asemanator cu cea
utilizata pentru memorare pe un suport magnetic. Transmisia digitala
necesita o banda de trecere larga. Noile tehnologii bazate pe fibre optice
permit transmisii digitale.
Pentru transmisia informatiilor analogice este necesara efectuarea unei
modulari care consta în esantionarea semnalului analogic la emisie,
transmisia esantioanelor sub forma digitala si reconstituirea semnalului la
receptie. Un rafinament al acestei tehnici, modularea delta, consta în
transmiterea diferentelor între doua esantioane în locul acestora.
Multiplexare
Multiplexarea înseamna partajarea unei cai de transmisie între mai multe
legaturi. O legatura este stabilirea unei comunicatii între doua echipamente
informatice. Sunt utilizate în principal doua tehnici:
a) multiplexare frecventiala FDM: Frequency Division
Multiplexing (spatiala) care consta în divizarea benzii de trecere a
caii de transmisie, semnalele sub-benzilor de trecere sunt adaugate
unele altora pentru a fi transmise pe calea de transmisie cu ajutorul
multiplexorului, iar la receptie un demultiplexor filtreaza
semnalul primit. Semnalele transmise astfel sunt analogice, pentru
semnalele numerice trebuie utilizat un modem pentru modularea
acestora;
b) multiplexarea temporala: TDM: Time Division Multiplexing]
consta în partajarea în timp a caii de transmisie între mai multe
transmisii, tehnica ce se poate utiliza si pentru transmisii digitale.
Multiplexoarele inteligente ITDM: Intelligent TDM] sau
statistice rezolva problema alocarii transelor de timp potrivit
necesitatilor fiecarei legaturi (mod asincron) (se mai numesc
concentratoare
3.2 Retele de calculatoare
O retea de calculatoare network este o multime de calculatoare (si
echipamente terminale), geografic dipersate, conectate între ele prin una sau
mai multe legaturi pentru a permite schimburi de informatii.
Calculatoarele unei retele pot sa apartina unor categorii diverse, de la
supercalculatoare pâna de la microcalculatoare care evident, pot fi de tipuri
diferite. Daca sistemele de calcul ale retelei sunt compatibile între ele
reteaua este omogena, altfel reteaua este neomogena.
O retea are drept scop de a oferi un anumit numar de servicii
utilizatorilor, bazate pe schimbul informatiilor (acces la distanta):
acces la informatii (programe, date) stocate pe alte calculatoare ale
retelei;
acces la alte calculatoare (de exemplu un supercalculator sau
calculator specializat);
permite schimbul de informatii între utilizatori (mesagerie);
În functie de "diametrul" retelei, adica departarea maxima între noduri,
exista urmatoarea clasificare a retelelor:
a) retea extinsa WAN: Wide Area Network]: retea ale carei noduri
sunt geografic foarte îndepartate unele de altele (mai multe sute, sau
chiar mii de kilometri). Acest tip de retea utilizeaza în general
retelele publice (de exemplu, linii telefonice);
b) retea metropolitana MAN: Metropolitan Area Network]: retea ale
carei noduri se situeaza în aceeasi metropola. Fibrele optice sunt
adesea utilizate pentru realizarea unei asemenea retele;
c) retea locala LAN: Local Area Network]: retea ale carei noduri se
gasesc în aceeasi cladire sau în cladiri vecine, deci departate pâna la
câteva sute de metri.
Erorile de transmisie a informatiilor în retea constituie o problema
importanta. Exista metode de detectare a erorilor, iar estimarea posibilitatii
de aparitie a erorilor este exprimata astfel:
1 bit eronat din 10 în retelele locale;
1 bit eronat din 10 în retelele extinse.
Retelele punct la punct si retelele de difuziune
Pentru a permite schimbul de informatii între doi utilizatori este necesar
sa se poata adresa membrii retelei. O tehnica consta în a adauga fiecarui
mesaj adresa destinatarului, într-o maniera analoaga corespondentei postale.
Deoarece destinatarul nu este în mod obligatoriu legat direct cu expeditorul,
mesajul va tranzita prin nodurile intermediare care decodifica adresa si care
transmit în continuare mesajul la un nod apropiat, într-o buna directie.
Aceasta este o retea punct la punct.
O alta tehnica de transmisie la distanta utilizeaza o retea de difuziune
broadcasting , care difuzeaza direct informatia catre toti membrii retelei.
Mesajul este întotdeauna etichetat cu o adresa pe care numai destinatarul o
recunoaste. Acest tip de retea necesita în mod normal utilizarea unui satelit
pentru transmisia informatiilor.
Tehnici de comutatie a datelor
În general, drumul urmat de informatie de la expeditor la destinatar,
parcurge un anumit numar de noduri intermediare care trebuie sa asigure
respectarea corectitudinii datelor pe care le primesc. Exista mai multe
metode care permit efectuarea comutatiilor necesare fiecarui nod:
a) comutatia de circuite circuit switching]: se stabileste o conexiune
fizica temporara între nodurile implicate în schimbul de informatie.
Transferul are loc din momentul stabilirii conexiunii care ramâne
activa pe tot parcursul comunicatiei, chiar si în perioadele când nu
are loc nici-un schimb de informatie. Acest tip de comutatie este
rentabil pentru o linie care suporta putine schimburi de informatie,
exemplul cel mai sugestiv fiind cel al unei retele telefonice.
b) comutatia de mesaje message switching]: cu aceasta tehnica se
trimite un mesaj cu adresa sa în retea. Când mesajul soseste la un
nod, acesta decodifica adresa si-l trimite nodului urmator, în directia
destinatarului, conform tabelei de rutare. Marimea mesajelor poate
fi variabila, ceea ce impune nodurilor sa dispuna de mijloace de
stocare a mesajelor. Acest tip de comutatie este mai suplu decât cel
precedent deoarece permite înregistrarea mesajului daca nodul
receptor nu este disponibil.
c) comutatia de pachete packet switching]: este similara cu
comutatia de mesaje, dar limiteaza marimea informatiilor transmise.
Se procedeaza la divizarea mesajului de transmis în pachete de
marime limitata (de exemplu 1024 biti = 128 octeti) si se trimit
separat pachetele în retea. Datorita marimii reduse, pachetele sunt
mai putin sensibile la erori, mai usor de stocat (este suficienta
memoria centrala). Printr-o numerotare corespunzatoare a
pachetelor se poate reconstitui mesajul la destinatie.
Topologia retelelor de calculatoare
În figura urmatoare sunt prezentate diverse topologii de retea:
Reteaua de tip plasa este caracterizata prin faptul ca doua noduri
oarecare sunt legate între ele. Acest tip de retea asigura o mare suplete si
siguranta în utilizare, dar este dificil de realizat pentru un numar foarte
mare de noduri. În general plasa nu este perfecta (sunt anumite noduri
nelegate), situatie în care se vorbeste despre retea plasa partiala. Toate
celelalte tipuri de retele sunt particularizari ale retelei de tip plasa, obtinute
prin impunerea unor restrictii asupra legaturilor între noduri.
Retea de tip plasa Retea de tip stea Retea de tip arbore
Retea de tip inel Retea de tip bus
a) Reteaua de tip stea este o retea centralizata, un singur nod este
legat direct la toate celelalte, fara ca acestea sa aiba legaturi între
ele. Nodul central suporta orice sarcina a retelei.
b) Reteaua de tip arbore este o retea ierarhica repartizata pe mai
multe nivele, nodurile aceluiasi nivel nu sunt legate între ele dar
sunt legate la un nod de nivel superior (reteaua telefonica este un
exemplu caracteristic).
c) Reteaua de tip bucla sau inel este o retea în care fiecare nod este
legat la doua noduri pentru a forma un inel. Este o retea
descentralizata de tip punct la punct.
d) Reteaua de tip bus este o retea de difuzine, în care toate nodurile
sunt conectate pe acelasi suport.
Retelele extinse au în general o topologie obtinuta pornind de la o
combinatie de trei topologii: retea partiala de tip plasa, retea de tip stea si
retea de tip arbore.
Topologiile cele mai utilizate pentru retelele locale sunt cele de tip bus
si inel.
Suportul fizic de transmisie cel mai utilizat în retelele locale este cablul
coaxial.
Retelele locale functioneaza în general prin difuziune, adica o statie ce
doreste sa transmita un mesaj îl expediaza în retea, statia vizata prin mesaj
recunoaste adresa sa si în consecinta ea trateaza acest mesaj, în timp ce alte
statii, nerecunoscând mesajul, îl ignora.
Protocoale de retea
Un protocol de retea este constituit din multimea regulilor care trebuie
sa fie respectate pentru a realiza un schimb de informatii între sistemele de
calcul din cadrul retelei.
O modalitate de simplificare a problemei comunicarii în retea este
aceea de divizare a acesteia prin definirea mai multor nivele de comunicare
si stabilind un protocol pentru fiecare nivel.
Problema standardizarii presupune definirea de norme pentru
simplificarea comunicatiilor în retelele eterogene.
În timp ce constructorii au tendinta de a defini propriile lor protocoale,
totusi, un anumit numar de institutii si organizatii internationale încearca sa
defineasca standarde, si anume:
departamentul apararii americane DOD a definit protocolul
TCP/IP pentru reteaua Arpanet;
institutiile internationale:
CCITT Comit Consultatif International du Tél phone et du
T l graphe a definit recomandari reunite sub denumirea de
seria V (pentru transmisia datelor prin telefon) si seria X
(pentru retele publice);
ISO International Standards Organization] cu modelul OSI
Open Systems Interconnection];
Modelul ISO - OSI
Modelul OSI Open Systems Interconnection], elaborat de organizatia
ISO International Standards Organization] între anii 1975-1985, trebuie sa
permita interconectarea sistemelor de calcul de tipuri diferite.
Interesul acestui model este acela de a diviza multimea protocoalelor de
retea în sapte nivele, între care sunt definite doua tipuri de relatii:
verticale, între nivelele aceluiasi sistem (se numesc interfete);
orizontale, relative la dialogul la acelasi nivel între sisteme diferite
(protocoale care definesc reguli de schimb).
Fiecare nivel furnizeaza nivelului superior un anumit numar de
informatii cunoscute sub denumirea de primitive.
Vom prezenta în continuare o descriere succinta a celor sapte nivele ale
modelului ISO-OSI:
a) Nivelul 1 (fizic) este cel mai de jos nivel si descrie caracteristicile
electrice si echipamentul fizic de transmisie (cabluri, fascicole
hertziene etc.). El se ocupa de conexiunea fizica a statiei la retea,
permite transmisia de biti între doua sisteme, defineste daca
transmisia este sincrona sau asincrona, rezolva probleme de
modulare/demodulare ale informatiilor.
b) Nivelul al 2-lea (legatura de date, sau linie) data link] are drept
scop transmisia datelor structurate în pachete de biti fara erori (în
caz de eroare se procedeaza la retransmisia acestora).
c) Nivelul al 3-lea (retea) serveste în principal asigurarii comutatiei si
rutarii pachetelor de date între nodurile retelei, de asemenea
efectueaza controlul fluxului informatiilor.
d) Nivelul al 4-lea (transport) permite stabilirea, întretinerea si
întreruperea conexiunilor de transport. Se efectueaza controlul
fluxului informatiilor si se asigura segmentarea si reasamblarea
mesajelor, precum si multiplexarea cailor de tramsmisie.
e) Nivelul al 5-lea (sesiune) permite stabilirea unei conexiuni logice
între doua aplicatii, asigura organizarea si sincronizarea dialogului,
modul de transmisie: simplex, semiduplex, duplex.
f) Nivelul al 6-lea (prezentare) se ocupa de aspectele prezentarii
(sintaxa) datelor, conversia codului, formatul datelor, optimizarea
transferului prin diverse metode de comprimare si asigurarea
securitatii datelor prin criptare.
g) Nivelul al 7-lea (aplicatie) furnizeaza servicii si interfete de
comunicatie ale utilizatorului, deci constituie multimea punctelor de
intrare în programele utilizatorilor.
Conexiuni între retele
Retele, sau anumite parti ale retelelor locale pot fi legate, utilizând:
a) repetor repeater : ce permite conectarea a doua retele la nivelul
fizic, lucreaza deci la nivelul 1 OSI si are drept scop unic
transmiterea de biti de la o retea la alta;
b) pod bridge : lucreaza la nivelul al 2-lea OSI si asigura trasmiterea
fizica a informatiilor sub forma de pachete, garantând absenta
erorilor;
c) rutor router : lucreaza la nivelul al 3-lea OSI si asigura rutarea
pachetelor între diferite retele;
d) pasarela gateway : lucreaza în general la nivelul al 7-lea OSI si
leaga doua retele oricare ar fi natura lor, ocupându-se de toate
conversiile necesare.
Conexiuni inter-retele: internet si TCP/IP
Pentru a încerca rezolvarea conexiunii între diferite retele a aparut
notiunea de internetwork sau general referita internet. Internet defineste o
multime de protocoale independente de retea. O versiune UNIX a acestor
protocoale a fost dezvoltata în ultima perioada si a avut ca efect conexiunea
unui mare numar de universitati, firme si persoane fizice.
Un anumit numar de aplicatii sunt bazate pe protocoale TCP/IP de înalt
nivel si pot fi considerate ca servicii universale:
posta electronica;
transfer de fisiere la distanta;
emularea unui terminal la distanta;
gestiunea automata a retelelor.
Adresarea statiilor într-o retea internet se realizeaza printr-o adresa pe
32 biti descompusa în doua parti (identificatorul retelei si identificatorul
local al statiei) si reprezentata în general prin patru numere de câte 8 biti.
Conceptul client - server
O utilizare importanta a retelelor este cooperarea între aplicatii.
Conceptul de baza utilizat pentru cooperare este acela de client - server,
care este folosit ca model de baza pentru aplicatiile distribuite.
Termenul server se aplica oricarui program care ofera un serviciu care
poate fi extins de-a lungul retelei. Un server primeste cereri, le trateaza si le
retrimite celui care le-a solicitat (client).
Termenul client se aplica oricarui program care trimite o cerere unui
server si asteapta rezultatele.
Evolutia retelelor de calculatoare
În situatia actuala, retelele de telecomunicatii existente permit
transportul unei mari varietati de informatii sub forme diverse, ca de
exemplu: cuvinte (telefon), mesaje (telex), imagini (telecopiator,
televiziune), ca si date informatice. Pentru a se putea transporta toate aceste
tipuri de informatii au fost realizate: retea telefonica, retea telex, diverse
retele specializate permitând schimbul de informatii între sistemele de
calcul. Cea mai importanta este reteaua telefonica bazata pe transmisia
semnalelor analogice.
Retelele viitorului vor fi bazate pe transmisii numerice, vor utiliza
cabluri coaxiale, fibre optice si sateliti pentru a transmite date, imagini si
conversatii telefonice.
a) RNIS (retea numerica de servicii integrate) IDSN , este
implementata în cea mai mare parte a tarilor europene si SUA.
Legaturile internationale ridica însa unele probleme datorita
particularitatilor de implementare a retelelor specifice fiecarei tari.
Aceasta retea ofera servicii deosebite:
servicii suport de informatii (transmisie date + servicii
telefonice);
servicii complementare (identificare apel, sub-adresare
terminale, portabilitate etc);
teleservicii (transmisii de fisiere cu imagini fixe sau animate,
videofonia, videoconferinta etc);
b) Evolutia comutatiei prin pachete vizeaza urmatoarele aspecte
importante:
cresterea performantelor prin sporirea debitului si simplificarea
protocoalelor de retea;
posibilitatea transmisiei izocrone (vocea);
c) Releu de cadre frame relay]: este o simplificare a transmisiei prin
pachete. În acest caz se utilizeaza acelasi protocol de rutare, dar se
suprima protocoalele de control a erorilor si a fluxului (nivelul
retea este vid). Aceasta abordare este de 4-10 ori mai rapida decât
comutatia prin pachete si se dovedeste bine adaptata pentru
interconexiunea retelelor locale.
d) Releu de celule cell relay] are drept principiu descompunerea
informatiilor în mici pachete de lungime fixa si determinarea rutei
acestora. Comutatia prin circuite permite transportul informatiilor
izocrone (vocea), în timp ce comutatia prin pachete este mai
adaptata transmisiei informatiilor numerice. Releul de celule
realizeaza deci un compromis între cele doua moduri de comutatie.
e) RNIS cu banda larga: permite transportul tuturor tipurilor de
informatii (de exemplu, imaginile de televiziune). Spre deosebire
de RNIS prima versiune, care nu solicita modificarea cablajului
abonatilor, RNIS cu banda larga cere modificari multiple în
reteaua de transport si va utiliza în acest sens tehnica satelitilor si
fibrele optice, mod de transfer asincron potrivit tehnicii ATM
Asynchronous Transfer Mode].
f) Retele locale fara fir CLAN: Cordless LAN]: nu necesita
cablare, se utilizeaza doar în cazuri particulare datorita tehnologiei
foarte costisitoare. Transmisia se realizeaza prin unde radio sau
prin infrarosu.
g) Retele de foarte înalt debit: dezvolta viteze de transfer de ordinul
gigabitilor pe secunda prin utilizarea fibrelor optice. Înca nu s -au
definit protocoale standard ci doar protocoale particulare care
realizeaza conexiuni punct la punct si care necesita echipamente
specifice foarte perfectionate.
5 ELABORAREA PROGRAMELOR
Tehnologia produselor software software engineering] caracterizeaza
multimea tuturor metodelor si instrumentelor care permit elaborarea
produselor software.
Dezvoltarea unei mari aplicatii este o problema complexa care nu consta
numai în a programa, în sensul strict al cuvântului, aceasta presupune
parcurgerea unui anumit numar de etape, ceea ce constituie ciclul de viata
al unui produs software
În plus, un mare proiect este dezvoltat de catre echipe de programatori,
ceea ce obliga la descompunerea problemei în subprobleme pentru fi
repartizate între echipe, asigurarea comunicatiei corespunzatoare între
echipe, controlul evolutiei proiectului si a calitatii produsului software.
Ciclul de viata se compune din fazele urmatoare:
a) Analiza si formularea clara a problemei: consta în a stabili
functionalitatile, restrictiile si obiectivele proiectului în acord cu
clientul/utilizatorul. Principala problema a acestei faze rezida în
comunicarea dintre conceptor si client.
b) Specificarea: consta în determinarea functionalitatilor detaliate ale
produsului software ce urmeaza a fi realizat, fara o preocupare
deosebita pentru modalitatea de implementare efectiva.
c) Conceptia: este faza de definire a structurii modulare a produsului
software, alegerea algoritmilor corespunzatori precum si a
limbajelor de programare adecvate.
d) Programarea consta în implementarea efectiva a diferitelor module
care compun produsul software.
e) Testarea si validarea: consta în depistarea erorilor de conceptie si
de programare încât sa se poata oferi asigurarea ca produsul
software raspunde bine exigentelor formulate initial.
f) Întretinerea: este faza cea mai îndelungata a ciclului de viata a
unui produs software, care dureaza toata perioada de exploatare a
produsului. În timpul acestei faze se încearca sa se raspunda
cerintelor utilizatorilor, fie corectând erorile aparute, fie efectuând
modificari, fie adaugând noi functionalitati.
g) Documentarea: consta în regruparea tuturor informatiilor produse
în timpul ciclului de viata. Documentarea nu este deci o faza
proprie a ciclului de viata, dar ea trebuie sa se efectueze în timpul
fiecarei faze în paralel cu derularea acesteia. Documentarea trebuie
sa permita întelegerea si modificarea ulterioara a produsului
software.
Trecerea de la o faza a ciclului de viata la urmatoarea este rareori
definitiva, se întâmpla frecvent sa se revina la o faza anterioara pentru a se
aduce un anumit numar de modificari. Într-adevar, este foarte dificil sa se
prevada în avans toate aspectele si în plus, în timpul fazei de întretinere,
modificarile importante cum ar fi crearea unei noi versiuni implica
dezvoltarea completa pornind de la faza de specificare. Din acest aspect
decurge notiunea de ciclu.
Etapele ciclului de viata ale unui produs software sunt prezentate
schematic în figura urmatoare:
Analiza problemei
Specificare
Conceptie
Programare
Testare si validare
Întretinere
Conceptul de software este utilizat pentru a caracteriza toate programele
care sunt executate de catre sistemul de calcul. Acest concept se opune
aceluia de hardware care desemneaza aspectul material, fizic al sistemului
de calcul.
Executia unui program care este elaborat în faza de programare a
ciclului de viata a unui produs software consta în a furniza sistemului de
calcul o secventa de instructiuni direct interpretabile.
În mod obigatoriu, primele programe erau scrise în binar (limbajul
masina), activitate dificila si expusa riscurilor de eroare, datorita
secventelor de biti a caror semnificatie era înscrisa într-o tabela descriind
toate operatiile posibile si semnificatia lor binara.
În continuare, pentru usurarea activitatii de programare s-au elaborat
limbajele de asamblare.
Scrierea de programe în limbaj de asamblare ramâne o sarcina
complicata si de asemenea programele depind de sistemul de calcul pe care
au fost concepute. Limbaje evoluate, ca de exemplu, Fortran sau Pascal au
adus o solutie (partiala) acestor probleme.
Ca si în cazul limbajelor de asamblare, programele scrise în limbajele de
programare evoluate trebuie sa fie convertite în limbaj masina pentru a fi
executate, iar conversia se poate efectua în doua moduri diferite: traducere
sau interpretare.
Traducerea consta în a genera un program echivalent programului
sursa, dar codificat în limbajul binar al calculatorului. Traducerea este un
procedeu prin care, pornind de programul sursa, se genereaza un program
obiect, care se poate încarca ulterior în memorie pentru executie.
Interpretarea efectueaza conversia si executia unui program într-o
singura etapa: instructiunile sunt citite unele dupa altele si sunt convertite
imediat în limbaj masina prin intermediul interpretorului care realizeaza
executia lor pe masura aparitiei. Totul se petrece ca si când limbajul sursa
ar fi acceptat de catre masina.
Interpretarea este mai bine adaptata dezvoltarii si punerii la punct a
programelor deoarece executia începe imediat, iar traducerea este indicata
pentru exploatarea programelor, când nu mai este reluata traducerea.
Limbajele evoluate dispun în general de un traducator ( compilator), dar
pot dispune si de un intrerpretor (exemplul limbajului Pascal).
4.1 Limbajul de asamblare
Limbajul de asamblare este utilizat astazi de catre specialistii în
informatica, în general pentru rezolvarea unor probleme de optimizare,
atunci când se impune exploatarea arhitecturii calculatorului si functionarea
sa la nivelul operatiilor elementare.
Limbajul de asamblare este o varianta simbolica a limbajului masina.
Activitatea de programare este facilitata de utilizarea codurilor de operatii
mnemonice, etichete (adrese simbolice), literale (constante numerice) si
directive (rezervare de spatiu de memorie, declararea unei macroinstructiuni
etc
Spre deosebire de limbajele evoluate, limbajul de asamblare nu ascunde
nimic programatorului, permitând accesarea tuturor resurselor sistemului si
exploatarea facilitatilor de prelucrare ale acestuia.
O instructiune în limbaj de asamblare este divizata în mai multe câmpuri
care sunt separate în general prin spatii. Numarul operanzilor din al zona de
adresa variaza de la un sistem de calcul la altul între 0 si 3. Dupa acest câmp
este de dorit adaugarea comentariilor pentru documentare. Iata structura
tipica a unei instructiuni în limbaj de asamblare:
eticheta cod operatie (mnemonic) operanzi
Codurile operatiilor mnemonice
Codurile operatiilor sunt simbolizate într-o tabla a codurilor mnemonice
care urmeaza a fi consultata la scrierea de programe în limbajul de
asamblare, mai ales daca setul de instructiuni este complex (arhitecturi
CISC).
Operanzi si etichete
Spre deosebire de limbajul masina, limbajul de asamblare permite
atribuirea de nume pentru variabile si etichete (adrese de instructiuni), ceea
ce usureaza programarea.
De asemenea, operanzii pot sa posede un nume care permite referirea
lor, iar fiecare registru are un nume predefinit, recunoscut de catre
programul de traducere.
Exemple de operanzi si etichete:
Tab DS 1 Definirea unei variabile Tab de un cuvânt;
Zece DC 10 Definirea constantei Zece care are val. 10;
Ciclu: MOVE Zece, A Transferul valorii 10 în registrul A
MOVE A ,Tab Transfer valoare registru A în variabila Tab;
JUMP Ciclu Salt neconditionat la adresa Ciclu.
Literale
Limbajul de asamblare permite definirea valorilor întregi sau reale în
diverse baze de numeratie (2, 8, 10 sau 16) ca siruri de caractere, care sunt
traduse de catre asamblor. Specificarea bazei de numeratie se face prin
plasarea unui caracter particular la începutul fiecarei date. Absenta
caracterului particular specifica o data zecimala. }irurile de caractere sunt
de regula delimitate de caracterul " ' ".
Directive
Directivele sau pseudo-instructiunile sunt instructiuni neexecutabile
(referite prin cod mnemonic) care nu au cod masina echivalent. Acestea
sunt indicatii pentru asamblor (programul de traducere) în vederea
traducerii programului.
Exemple de directive:
TTL 'Titlul programului'
Vec DS 50 Definire variabila Vec si rezervare 50
cuvinte;
Zero DC 0 Definire constanta Zero cu valoare 0;
PLEN 50 50 linii pe pagina (PLEN=Page
Length
END Sfârsit de program.
Expresii aritmetice
Spre deosebire de limbajele evoluate, expresiile aritmetice utilizate
pentru a calcula valoarea unei variabile, ca de exemplu în atribuirea
urmatoare: A = B + C / D, nu sunt admise în limbajul de asamblare si de
aceea trebuie programate prin mai multe instructiuni.
Macroinstructiuni si subprograme
Anumite asambloare permit structurarea programelor, ele ofera în
general posibilitatea de a grupa o secventa de instructiuni sub forma unui
subprogram sau a unei macroinstructiuni, în scopul modularizarii
programului si a evitarii scrierii repetate a unor grupuri de instructiuni.
Macroinstructiuni
O macroinstructiune se construieste prin izolarea unei secvente de
instructiuni careia i se atribuie un nume simbolic prin care poate fi referita.
Ori de câte ori în cadrul programului se face referire la acest nume,
asamblorul, în etapa de traducere, înlocuieste referinta cu secventa de
instructiuni corespunzatoare.
Utilizarea macroinstructiunilor prezinta mai multe avantaje, si anume:
extinderea setului de instructiuni, deoarece fiecare
macroinstructiune se utilizeaza ca o alta instructiune;
reducerea si structurarea programelor, care conduce la întelegerea si
modificarea usoara a acestora;
economisirea timpului de programare.
Instructiunile care servesc pentru definirea si delimitatea
macroinstructiunilor (de exemplu, MACRO si ENDM) sunt cazuri tipice de
directive; în timpul asamblarii, fiecare apel al unei macroinstructiuni este
înlocuit prin corpul macroinstructiunii si cele doua pseudo-instructiuni sunt
eliminate.
Exemplu: Calculul cubului unui numar:
MACRO CUB (val, valcub)
MOVE val, D1
MOVE val, D2
MUL D1, D2 (D2:= D1 D2)
MUL D1, D2
MOVE D2, valcub
ENDM
Subprograme
Subprogramele sunt definite ca si macroinstructiunile, având de
asemenea scopul de a evita repetarea scrierii unei secvente de instructiuni ce
va fi utilizata de mai multe ori.
O diferenta esentiala fata de macroinstructiune rezida în faptul ca
instructiunile care compun subprogramul constituie o entitate bine separata
de programul principal, iar aceasta separare se pastreaza si dupa traducere,
încât subprogramul se gaseste o singura data în memorie si doar la executia
programului se satisfac referintele la un subprogram al sau.
Aceasta maniera de abordare a programarii conduce la avantaje
suplimentare fata de utilizarea macroinstructiunilor, deoarece permite
minimizarea taliei codului executabil, ceea ce nu este cazul
macroinstructiunilor.
Figura urmatoare ilustreaza diferenta dintre o macroinstructiune si un
subprogram.
macroinstructiune program subprogram subprogram
salvare
stare
program
program
restaurare
stare
revenire
program
apel macroinstructiune
instructiune normala
apel subprogram
MACROINSTRUC|IUNE SUBPROGRAM
Problemele care se manifesta în situatia utilizarii subprogramelor se
refera în special la asigurarea salvarii adresei de revenire în timpul
executiei unui subprogram. Adresa de revenire este adresa instructiunii care
urmeaza dupa instructiunea de apel a subprogramului.
Deci, principala diferenta între o macroinstructiune si un subprogram
este aceea ca apelurile la o macroinstructiune sunt înlocuite prin corpul
macroinstructiunii în timpul traducerii, pe când apelurile la un subprogram
sunt tratate în timpul executiei.
Transmiterea parametrilor
Un program poate sa schimbe date cu macroinstructiunile si
subprogramele sale prin intermediul parametrilor. Un parametru este o
variabila al carei nume este cunoscut, dar al carei continut nu este precizat
decât în momentul executiei. O macroinstructiune sau un subprogram se
scrie utilizând parametrii formali care vor fi înlocuiti prin parametrii
efectivi corespunzatori datelor reale care sunt tratate.
Substitutia parametrilor formali cu cei efectivi se realizeaza la traducere,
pentru macroinstructiuni, si la executie, pentru subprograme.
Pentru subprograme exista mai multe tehnici de transmitere a
parametrilor:
a) Transmiterea prin valoare consta în recopierea valorii de transmis
într-o zona cunoscuta de subprogram, care poate fi o zona de
memorie sau un registru. În acest fel, subprogramele actioneaza
asupra unei copii a parametrilor, orice modificare a parametrului nu
este posibila decât în interiorul subprogramului, iar la revenire în
programul apelant parametrul regaseste valoarea sa initiala, ceea ce
permite o anumita protectie a parametrilor.
b) Transmiterea prin referinta consta în a transmite catre
subprogram adresele parametrilor. Subprogramul lucreaza deci
efectiv asupra datelor programului apelant, deci orice modificare a
valorii parametrului în interiorul subprogramului este reflectata la
revenire în programul apelant.
Salvarea starii masinii
Salvarea starii masinii consta în a salva starea registrelor CPU (în alte
registre CPU prevazute în acest scop sau în memoria centrala) pentru a
permite executarea unui alt program si la sfârsitul executiei acestuia,
reluarea executiei primului.
Spre deosebire de macroinstructiuni, unde expandarea (înlocuirea
apelului prin corpul macroinstructiunii) se realizeaza la traducere, în cazul
subprogramelor este necesara salvarea starii masinii la apelul acestora.
Într-adevar, apelul unui subprogram consta în trecerea controlului CPUului
acestui subprogram, care se comporta ca un program independent si
care trebuie sa fie capabil sa redea controlul programului apelant la sfârsitul
executiei sale. Primele instructiuni ale subprogramului servesc la salvarea
starii diverselor registre, iar ultimele instructiuni restaureaza aceste valori
salvate, revenind la contextul anterior apelului.
Recursivitate
Un subprogram este recursiv daca poate sa se autoapeleze (direct sau
indirect).
Problema unui subprogram recursiv este ca în timpul fiecarui apel,
trebuie salvata starea masinii. Datorita faptului ca nu se poate utiliza aceeasi
zona de memorie pentru salvare, se adopta o solutie bazata pe utilizarea
unei stive care lucreaza dupa principiul LIFO Last In, First Out], în care se
salveaza starea masinii pe masura activarii apelurilor recursive (este
necesara o conditie de sfârsit pentru apelurile recursive).
4.2 Limbaje de programare
Un limbaj este o modalitate de exprimare si comunicare a gândurilor.
Exista o multitudine de limbaje: limbaje orale, scrise, limbajul semnelor (de
exemplu, limbajul surdo-mutilor) si multe alte limbaje care utilizeaza
diverse moduri de transmisie (de exemplu, limbajul albinelor).
Un limbaj informatic cuprinde:
un alfabet: multimea simbolurilor elementare disponibile;
nume sau identificatori: grupe de simboluri ale alfabetului (cu
anumite restrictii: numar de caractere, tipul primului caracter etc.);
fraze sau instructiuni: secvente de nume si simboluri de punctuatie
care respecta aspectele sintactice si semantice ale limbajului.
Limbajele informatice, spre deosebire de limbajele naturale, sunt
structurate, riguros neambigue si pot fi definite în mod formal.
Limbajele de asamblare au fost primele limbaje informatice si ele
depind de arhitectura sistemelor de calcul.
Limbajele evoluate HLL: High Level Languages] au aparut mai târziu
si permit comunicarea cu sistemul de calcul fara a tine seama de arhitectura
sa.
În informatica se disting mai multe categorii de limbaje: limbajele de
programare si limbajele de comanda sunt cele mai utilizate, dar exista de
asemenea si limbaje de analiza si limbaje de specificare, care ajuta în
timpul primelor faze de dezvoltare a produselor software.
Scrierea unui program se realizeaza prin utilizarea simbolurilor
limbajului de programare pentru constituirea frazelor sau instructiunilor
care trebuie sa respecte sintaxa limbajului.
Cele doua modalitati de reprezentare a sintaxei unui limbaj sunt:
notatia BNF Backus Naur Form];
diagramele sintactice
Prezentam în continuare un exemplu de sintaxa a unui limbaj foarte
simplu care permite definirea identificatorilor (încep întotdeauna cu o
litera), întregii fara semn, expresiile aritmetice simple si instructiunea de
atribuire.
Pentru notatia BNF, semnul " indica o alternativa, semnele "< " si "
> " delimiteaza obiectele limbajului si semnul " := " indica atribuirea.
< litera > ::= a b c d . . .y z
< cifra > ::= 0
< identificator > ::= < litera > <identificator > < litera >
< identificator > < cifra >
< întreg > ::= < cifra > < întreg > < cifra >
< termen > ::= < întreg > < identificator >
< operator > ::= +
<expresie > ::= < termen >
<termen> < operator><expresie>
< atribuire > ::= < identificator > := < expresie >
Utilizând diagramele sintactice, prezentam acelasi exemplu de definire a
sintaxei limbajului:
litera
identificator litera
cifra
întreg cifra
întreg
termen
identificator
operator
expresie termen
operator
atribuire identificator := expresie
Concepte de baza ale limbajelor evoluate
Limbajele evoluate permit usurarea activitatii de programare printr -o
apropiere de limbajul natural, dar cu respectarea exigentelor de rigoare si
neambiguitate
Primele concepte de baza ale limbajelor de programare evoluate se
refereau la independenta fata de sistemul de calcul, ceea ce a permis
elaborarea unor instructiuni posedând un nivel semantic superior limbajului
de asamblare.
Elaborarea de limbaje de programare evoluate a vizat înca de la început
trei directii importante, si s-a concretizat prin trei categorii de limbaje:
a) limbaje bazate pe conceptele de algoritm si prelucrarea datelor cu
caracter stiintific (Fortran, Algol);
b) limbaje bazate pe prelucrarea datelor (Cobol);
c) limbaje bazate pe prelucrarea listelor (Lisp).
Limbajele din primele doua categorii sunt limbaje procedurale care
furnizeaza o descriere detaliata a algoritmilor de rezolvare a problemelor,
iar limbajele din a treia categorie sunt limbaje functionale, care subliniaza
aspectul functional al rezolvarii unei probleme, fara a intra în detalii.
Orientarea algoritmica a permis în continuare dezvoltarea limbajelor
Algol 60, Algol 68, Fortran II, Fortran IV, Fortran 66, Fortran 77,
Fortran 90, Pascal, C, Modula-2, Ada si C++, care furnizeaza
metodologii bazate pe conceptele de programare structurata,
abstractizare, modularitate etc.
A doua orientare, bazata pe prelucrarea datelor a ramas fidela limbajului
Cobol, dar a evoluat spre sisteme de gestiune de baze de date care permit
rezolvarea problemelor specifice bazelor de date.
Limbajul Prolog, instrument de baza în domeniul inteligentei
artificiale, a rezultat din abordarea functionala si aduce nou, în afara de
prelucrarea listelor, un mecanism de inferenta foarte util pentru realizarea
sistemelor expert.
Asistam astazi la o oarecare convergenta între limbajele orientate
obiect si bazele de cunostinte, ceea ce permite gruparea si unificarea
conceptelor de baza ale diverselor orientari.
Vom prezenta în continuare o scurta descriere pentru câteva limbaje de
programare dintre cele mai utilizate:
Fortran Formula Translator] este primul limbaj algoritmic, utilizat
în principal pentru rezolvarea problemelor cu caracter stiintific. El
produce cod eficace, utilizeaza o mare cantitate de biblioteci
matematice si a introdus concepte importante, ca de exemplu,
structurarea expresiilor aritmetice, subprograme, compilarea
independenta a subprogramelor. Limbajul a evoluat mereu,
versiunea Fortran 90 permite programarea paralela si concurenta
specifica supercalculatoarelor.
Cobol Common Business Oriented Language] este un limbaj
destul de utilizat în lume, si este adaptat aplicatiilor de gestiune care
permit un acces usor la fisiere si baze de date. Inconvenientele
utilizarii sale provin din aspectul "stufos" al scrierii si dificultatea
de structurare a programelor.
Algol Algorithmic Oriented Language] este un limbaj care a avut o
influenta primordiala asupra limbajelor actuale. Definit pentru
aplicatii stiintifice, limbajul nu a reusit sa se impuna din cauza
complexitatii sale, lipsei de soliditate a intrarilor/iesirilor si lipsa
eficacitatii. Totusi, Algol a introdus conceptul de structurare, cu
structuri de blocuri, structuri de control, proceduri, recursivitate.
Este primul limbaj definit în notatia BNF si a evoluat în Algol 60,
Algol 68, Algol W dar nu a reusit sa paraseasca mediul academic.
Lisp List Processing] a fost conceput pentru manipularea
expresiilor si functiilor simbolice. Caracteristicile sale sunt:
capacitatea de tratare a listelor, un numar mic de operatori de baza,
un numar mare de paranteze si recursivitatea care joaca un rol de
seama în parcurgerea listelor. Limbajul este utilizat curent în
inteligenta artificiala. Datorita lipsei de eficacitate pe sisteme de
calcul traditionale, anumiti constructori au dezvoltat masini Lisp,
care accepta acest limbaj ca limbaj masina, având o arhitectura
particulara, bazata pe notiunea de stiva.
Basic Beginner's All-purpose Symbolic Instruction Code] este un
limbaj foarte rudimentar, care a fost dezvoltat doar în scop didactic.
El a devenit un limbaj foarte raspândit datorita dezvoltarii
microcalculatoarelor care, la început nu aveau capacitatea de a
utiliza alte limbaje.
PL/1 Programming Language number 1 este o realizare
ambitioasa, un limbaj aproape universal, menit sa înlocuiasca
limbajele Fortran, Algol si Cobol utilizate în acea epoca. Din
cauza complexitatii sale, lipsa de omogenitate si de rigoare limbajul
nu a cunoscut o mare raspândire, limitându-se la calculatoarele din
familia IBM.
Pascal, care poarta numele matematicianului francez creator al
uneia dintre primele masini aritmetice de calcul din secolul XVII, a
fost dezvoltat de catre elvetianul Niklaus Wirth. Acest limbaj
provenit din Algol caruia îi preia conceptele, este bazat pe o mare
simplitate si este destinat înainte de toate învatarii programarii.
Modula-2 este înca un limbaj dezvoltat de Wirth. Limbajul este un
descendent al limbajului Pascal, caruia îi adauga notiunea de
modularitate care permite compilarea independenta a modulelor.
Smalltalk este un limbaj care caracterizeaza o noua tendinta de
programare bazata pe conceptul de obiect. El permite o interactiune
grafica cu sistemul, bazata pe utilizarea ferestrelor si a meniurilor,
ceea ce constituie o inovatie în domeniul programarii.
Prolog Programmation Logique] (elaborat în 1972 de catre
Colmerauer) este un limbaj care preia conceptele limbajului Lisp,
adaugând un mecanism de inferenta utilizat la realizarea sistemelor
expert. Japonezii si-au pus mari sperante în acest limbaj pentru
proiectul de sisteme de calcul de generatia a cincea.
C, un succesor al limbajelor BCPL si B, este un limbaj orientat spre
programare de sistem. Succesul limbajului se datoreaza utilizarii
sale pentru dezvoltarea sistemului de operare UNIX. C este un
limbaj relativ simplu la nivel de concepte, codul generat de
compilator este eficace, dar sintaxa permite scrierea într-o linie a
instructiunilor foarte complexe, care devin aproape ilizibile.
Ada, al carui nume aduce omagiu Adei Byron (sec. XIX),
considerata ca prima informaticiana, este un limbaj conceput pentru
departamentul apararii al SUA. El preia conceptele limbajelor
Pascal si Modula-2, adaugând concepte de timp real, paralelism,
genericitate si gestiunea exceptiilor.
C++ este un succesor al limbajului C, dezvoltat de catre Bjarne
Stroustrup la începutul anilor '80. Acest limbaj poate fi vazut ca o
evolutie naturala a limbajului C, reia conceptele acestui limbaj, la
care se adauga un anumit numar de concepte legate de programarea
orientata obiect, ca de exemplu, notiunea de clasa de obiecte,
mostenire între clase etc
Orientarea obiect
Evolutia programarii clasice se poate rezuma în felul urmator:
a) Programarea procedurala procedural programming]: accentul
este pus pe algoritmi, codul este repartizat în proceduri, iar
structurile de date nu sunt luate în considerare. Este cazul limbajelor
Fortran sau C.
b) Încapsularea si abstractizarea datelor data hidding and
abstraction : apare notiunea de modul, care permite descompunerea
codului în diferite module. Datele sunt închise în interiorul
modulelor ceea ce constituie tipurile abstracte de date ADT:
Abstract Data Type]. Practic, un ADT poate fi vazut ca o "cutie
neagra", iar seviciile (metode) sunt oferite prin intermediul unei
interfete. Este cazul limbajelor Modula-2 si Ada.
c) Programarea orientata obiect object oriented programming]: reia
conceptele de tipuri abstracte de date dar se insista asupra notiunii
de reutilizare a obiectelor sistemului. În acest sens, se determina
principalele modele de date necesare, care se vor numi clase de
obiecte si în continuare se stabilesc metodele care vor manipula
aceste modele. Un program se compune deci dintr -un ansamblu de
obiecte care interactioneaza între ele trimitându-si mesaje care
activeaza metodele specifice fiecarei clase de obiecte. Este cazul
limbajelor Smalltalk, Eiffel, C++, Objective-C.
Tipuri abstracte de date
Un tip abstract de date permite descrierea unei clase de structuri de date
prin lista functiunilor (metode) disponibile asupra structurilor de date si nu
prin implementarea lor.
Clase si obiecte
O clasa de obiecte corespunde implementarii unui tip abstract de date.
Definitia unei clase descrie comportamentul tipului sau abstract prin
specificarea interfetei tuturor operatiilor (metode) care pot fi aplicate asupra
tipului abstract.
Definitia unei clase comporta de asemenea detalii cu privire la
implementarea unor astfel de structuri de date sau codul sursa care
implementeaza metodele.
Un obiect object este o variabila a carei tip este o clasa. El reprezinta o
instanta (realizare) a unei clase. Actiunile pot fi aplicate asupra acestui
obiect invocând metodele definite în clasa, care se realizeaza printr -un
procedeu numit trimitere de mesaje obiectelor clasei.
Clasele sunt entitati definite în codul sursa al unui program, ele descriu
de o maniera statica o multime de obiecte (pot fi considerate si ca tipuri de
date), în timp ce obiectele sunt elementele dinamice, ele nu exista decât la
executie si corespund instantelor clasei.
Mesaje
Obiectele pot comunica între ele trimitându-si mesaje prin care se
solicita efectuarea unei anumite operatii asupra acestor obiecte. Multimea
tipurilor de mesaje proprii unui obiect corespunde interfetei sale.
Polimorfism
Polimorfismul permite efectuarea unei actiuni prin trimiterea unui mesaj
la un obiect pentru care sunt posibile mai multe instante de executie.
Aceasta capacitate este foarte importanta atunci când acelasi mesaj poate fi
îndeplinit în moduri diferite pentru tipuri diferite de obiecte.
Limbajele orientate obiect permit trimiterea mesajelor identice spre
obiecte care apartin unor clase diferite (dar derivate din clasa de baza).
Polimorfismul consta în esenta în posibilitatea asocierii mai multor
implementari ale aceluiasi mesaj, iar sistemul de calcul trebuie sa fie în
masura sa stabileasca implementarea corespunzatoare mesajului transmis.
Acesta decizie (constând în legarea mesajului de implementarea
corespunzatoare) se poate lua fie la compilare early sau static bilding], fie
la executie late sau dynamic bilding].
Mostenirea si ierarhizarea claselor
Prin mecanismul mostenirii inheritance , programarea orientata obiect
permite definirea subclaselor. O subclasa, numita si clasa derivata permite
caracterizarea comportamentului unei multimi de obiecte care mostenesc
caracteristicile clasei lor "parinte", dar care poate de asemenea sa posede
caracteristici particulare proprii, pe care "parintele" nu le are.
Utilizarea subclaselor permite diminuarea costului si complexitatii
programelor, deoarece subclasele faciliteaza reutilizarea claselor existente,
permitând în acelasi timp modificarea lor.
Genericitate
Genericitatea se exprima prin capacitatea de a defini clase
parametrizabile. De exemplu, presupunem ca este necesara o stiva de
numere întregi si o stiva de numere reale. În locul definirii celor doua tipuri
de stiva se va proceda la definirea unei clase parametrizata numita stiva, din
care se vor genera cele doua clase dorite.
Genericitatea si mostenirea corespund unor necesitati diferite si
genereaza structuri diferite: mostenirea favorizeaza rafinamente succesive
ale unei aceeasi clase rezultând astfel o structura pe verticala, în timp ce
genericitatea permite definirea unei clase de baza parametrizata care se
poate instantia de mai multe ori cu tipuri diferite, rezultând astfel o structura
pe orizontala. Figura urmatoare evidentiaza aceasta situatie.
Mostenire Genericitate
structura verticala structura orizontala
Inteligenta artificiala si sistemele
expert
Inteligenta artificiala este domeniul informaticii care propune
simularea pe sistemele de calcul a comportamentului inteligent al omului.
Sunt implicate domeniile perceperii, întelegerii, luarii deciziilor, învatarii.
Aceasta orientare a condus la unele rezultate notabile, în special în unele
domenii: teoria jocurilor, demonstrarea teoremelor, recunoasterea formelor,
recunoasterea parolelor, întelegerea limbajelor naturale, rezolvarea
problemelor care necesita expertiza legata de un domeniu specific (de
exemplu, diagnosticul medical), matematici simbolice etc.
Inteligenta artificiala trebuie sa permita rezolvarea problemelor pentru
care abordarea algoritmica este ineficienta sau chiar imposibil de aplicat.
Un program al inteligentei artificiale se caracterizeaza prin utilizarea
simbolurilor în locul informatiilor alfanumerice.
Sisteme expert
Sistemele expert constituie cu siguranta domeniul inteligentei artificiale
care a cunoscut cea mai mare dezvoltare. Un sistem expert este un program
care utilizeaza intensiv cunostinta în scopul rezolvarii problemelor care
necesita în mod normal expertiza umana.
Într-un sistem expert exista o separatie neta între programe si cunostinte.
Arhitectura de baza a unui sistem expert cuprinde trei parti:
a) Baza de fapte este un fel de baza de date care regrupeaza faptele si
asertiunile vizând problema tratata;
b) Baza de reguli contine cunostintele care permit manipularea
faptelor din baza de fapte. Cunostintele se exprima sub forma de
reguli de productie. O regula comporta o parte stânga, exprimând
o conditie (daca) si o parte dreapta continând concluzii (atunci);
c) Motorul de inferenta exploateaza baza de cunostinte (baza de
fapte + baza de reguli) asociind faptele si regulile pentru a formula
un rationament asupra problemei puse. Pentru aceasta, pornind de la
baza de fapte, el determina multimea regulilor a caror parte stânga
este verificata, faptele continute în partea dreapta adagându-se la
baza de fapte. În continuare, motorul de inferenta aplica aceste
reguli (înlantuire înainte) pentru a ajunge la o concluzie, procesul
oprindu-se când nu se mai pot genera fapte noi. Se poate de
asemenea porni de la concluzie, inferentele propagându-se invers
(înlantuire înapoi). Ele determina noi subscopuri mai simplu de
verificat pâna la gasirea partilor stângi ale regulilor corespunzatoare
faptelor din baza de fapte. Un anumit numar de limbaje (Lisp si
Prolog) permit dezvoltarea cu usurinta a sistemelor expert simple.
4.3 Etapele dezvoltarii unui program
Dezvoltarea unui program, de la analiza problemei pâna la punerea sa la
punct, necesita numeroase instrumente software constituite într-un mediu
de programare, care utilizeaza serviciile sistemului de operare, în special
sistemul de gestiune al fisierelor.
Elementele clasice ale unui mediu de programare sunt urmatoarele:
editorul de texte, traducatorul (compilator sau asamblor), editorul de
legaturi, programul încarcator si programul corector.
Figura urmatoare prezinta grafic un mediu de programare minim:
idee
Editor de texte
program sursa
Traducator asamblor
compilator
program obiect
subprograme subprograme
de biblioteca traduse separat
Editor de legaturi
program obiect
Încarcator
program executabil
executie
Corector
Editorul de texte
Un editor de texte text editor] este un program interactiv care permite
preluarea unui text pornind de la tastatura si stocarea sa într-un fisier.
Informatiile continute în fisier sunt de tip text, adica o multime de caractere,
în general structurate în linii.
Principalele functiuni ale unui editor de texte sunt:
vizualizarea unei parti a textului;
deplasarea si pozitionarea în fisier (se indica pozitia curenta);
modificarea textului prin inserare, modificare, stergere;
regasirea sirurilor de caractere particulare.
Editorul poate fi utilizat atât pentru tastarea textului sursa al unui
program cât si pentru introducerea datelor necesare programului.
Vom evidentia doua dintre cele mai importante tipuri de editoare:
a) editor sintactic, adaptat prelucrarii programelor sursa, care verifica
sintaxa programelor pe masura tastarii acestora, permitând de
asemenea gestionarea automata a structurilor sintactice proprii
limbajului de programare utilizat;
b) procesor de texte, destinat tratarii textelor. Acest tip de editor ofera
functionalitati mult mai pronuntate pentru manipularea caracterelor:
utilizarea literelor accentuate, fonturi diferite (adica diferite seturi
de caractere), alinierea textului, inserare de desene etc., mai general
se zice ca aceste editoare ofera facilitati de punere în pagina pentru
scriere de scrisori, articole, carti etc.
Compilatorul
Un compilator este un program sistem care traduce un program sursa
scris într-un limbaj de programare de nivel înalt în program obiect.
Activitatea compilatorului se divide în doua mari componente:
a) faza de analiza, care cuprinde urmatoarele etape:
analiza lexicala
analiza sintactica
analiza semantica
b) faza de sinteza, care cuprinde urmatoarele etape:
generarea codului intermediar
optimizarea codului
generarea codului obiect
Activitatea compilatorului este prezentata schematic astfel:
program
sursa
tabela de analiza lexicala arbore sintactic
simboluri
analiza sintactica
analiza semantica
generarea codului
intermediar
optimizarea
codului
generarea codului
obiect
Compilator
program obiect
Analiza lexicala
Analiza lexicala este prima faza a compilarii. Rolul sau major consta în
citirea secventei de caractere care constituie programul sursa si producerea
unor secvente de elemente sintactice ale limbajului.
Identificatorii, de exemplu numele de variabile, sau de proceduri ca si
atributele lor sunt stocate într-o tabela de simboluri, în timp ce informatiile
inutile pentru compilator (comentariile) sunt eliminate.
Analiza sintactica
Analizorul sintactic primeste o lista de elemente sintactice (cuvinte
rezervate, identificatori, operatori aritmetici, semne de punctuatie etc.)
elaborata de catre analizorul lexical.
El verifica daca aceasta lista este corecta în raport cu sintaxa limbajului
si pornind de la aceste elemente, analizorul sintactic genereaza arborele
sintactic al programului.
Sunt posibile doua abordari pentru generarea arborelui sintactic:
ascendenta: se analizeaza elementele componentr ale frazei de
tratat si se cauta regulile care permit ascensiunea spre radacina;
descendenta: se porneste de la radacina si se aplica regulile care
permit construirea frazei dorite.
Analiza semantica
Analiza semantica se ocupa de analiza sensului si a semnificatiei
frazelor limbajului, utilizând arborele sintactic pentru a identifica operatorii
si operanzii instructiunilor.
Sarcina principala a unui analizor semantic este verificarea concordantei
tipurilor, ceea ce revine la a verifica daca fiecare operator actioneaza asupra
operanzilor care sunt autorizati prin limbaj. Pentru efectuarea acestor
verificari, analizorul semantic utilizeaza informatiile care sunt stocate în
tabela de simboluri.
Generarea codului intermediar
Dupa etapele fazei de analiza, se procedeaza la generarea programului în
cod obiect. O metoda raspândita consta în divizarea acestei sarcini în doua
etape: generarea codului intermediar si generarea codului obiect.
Codul intermediar se poate defini ca un cod al unei masini abstracte,
care trebuie sa posede doua proprietati: sa fie usor de generat pornind de la
arborele sintactic al unui program si sa fie usor de tradus în cod obiect.
Deci, pornind de la arborele sintactic al unui program, compilatorul
genereaza un flux de instructiuni simple care se aseamana cu
macroinstructiunile, dar contrar asamblorului, acestea nu fac referire
explicita la registrele sistemului de calcul.
Optimizarea codului
Optimizarea codului consta în ameliorarea codului pentru a -l face mai
rapid de executat si mai putin "încurcat" în memorie, si vizeaza în special
eliminarea redondantelor si evaluarea expresiilor care utilizeaza constante.
Deoarece optimizarea conduce la o crestere substantiala a timpului de
compilare, este de preferat evitarea acestei faze în timpul dezvoltarii si
punerii la punct a programelor.
Optimizarea codului joaca un rol determinant pentru sistemele de calcul
care utilizeaza un procesor RISC, datorita complexitatii compilatoarelor
pentru astfel de masini, care utilizeaza un numar mare de registre în vederea
reducerii numarului de accese la memoria centrala.
Generarea codului obiect
Generarea codului obiect este faza finala a compilarii, care genereaza
codul obiect relocabil, adica relativ la originea 0. Fiecare instructiune a
codului intermediar este tradusa într-o secventa de instructiuni în cod
obiect. Generarea codului obiect atribuie pozitii în memorie pentru datele si
instructiunile programului.
Tabela de simboluri
În timpul compilarii este necesara descrierea identificatorilor si a
caracteristicilor acestora. Tabela de simboluri permite gruparea acestor
informatii care sunt puse la dispozitia diferitelor faze ale compilatorului.
În tabela se gasesc numele variabilelor, constantelor si procedurilor.
Fiecarei intrari din tabela i se asociaza o înregistrare care contine numele
obiectului considerat si caracteristicile proprii (tip, adresa numerica,
numarul si tipul parametrilor etc.). Accesul la aceasta tabela trebuie sa fie
rapid, deoarece toate fazele compilarii pot utiliza tabela de simboluri.
Tratarea erorilor
În activitatea practica de programare s-a constatat ca este dificila
scrierea programelor fara erori si din aceasta cauza, un bun compilator
trebuie sa faca posibila detectarea si corectarea acestor erori.
La sfârsitul compilarii se întocmeste un raport al erorilor depistate si se
încearca specificarea cauzei care a generat eroarea precum si pozitia sa în
cadrul textului sursa.
Un program scris într-un limbaj de pogramare evoluat poate contine
erori de natura diferita:
a) erori lexicale: erori de ortografiere a identificatorilor sau cuvintelor
rezervate, caractere ilegale etc.
b) erori sintactice: constituie majoritatea erorilor de programare si se
refera la: expresii aritmetice sau logice incorecte, erori de
structurare a blocurilor, lipsa separatorilor etc.
c) erori semantice: identificatori nedeclarati, incompatibilitate între
operatori si operanzi etc.
d) erori logice: erori aritmetice de tipul împartirii cu zero, radacina
patrata dintr-un numar negativ, depasirea limitelor unui tablou,
ciclu infinit, adresare incorecta etc.
Erorile din primele trei categorii sunt detectate de compilator în timpul
analizei cu acelasi nume (analiza lexicala, sintactica, semantica), si sunt
relativ usor de corectat deoarece compilatorul indica prezenta lor.
Erorile logice sunt vizibile doar la executie si au ca efect fie efectuarea
unor calcule eronate, fie oprirea executiei programului. Acestea sunt erorile
cele mai dificil de detectat si corectat, si la fiecare tentativa de corectare
trebuie reluat ciclul compilare - executie - testare.
Editorul de legaturi
Un editor de legaturi linker, linkage editor] este un produs software
care permite combinarea mai multor programe obiect, obtinându -se un
singur modul obiect.
Dezvoltarea unor programe complexe se realizeaza prin descompunerea
acestora în module care se traduc independent, deci un program poate fi
constituit din mai multe fisiere (sau subprograme), unul dintre fisiere
continând în mod obligatoriu programul principal.
Toate aceste fisiere sunt traduse separat, ele pot utiliza subprograme
care se gasesc în alte fisiere, ceea ce da nastere la referinte exterioare.
Exista doua tipuri de referinte exterioare:
a) posibilitatea ca un modul sa apeleze alt modul sau subprogram de
biblioteca;
b) posibilitatea ca un modul sa fie referit de un alt modul;
Referintele exterioare unui modul ridica probleme deosebite pentru
programul traducator care nu poate satisface referintele exterioare ci doar
întocmeste o lista a acestora pe care o transmite editorului de legaturi.
Editorul de legaturi preia modulele independente, le grupeaza si
satisface toate referintele exterioare pentru a forma un program complet,
care este executabil.
Figura urmatoare prezinta un exemplu de editare de legaturi pentru un
program care contine doua subprograme traduse si stocate în fisiere
separate, si care face de asemenea apel la doua module de biblioteca care
sunt traduse în prealabil si conservate în cod obiect.
subprogram program principal subprogram
(cod sursa) (cod sursa) (cod sursa)
traducere traducere traducere
modul de modul de
subprogram program principal subprogram biblioteca biblioteca
(cod obiect) (cod obiect) (cod obiect) (cod obiect) (cod obiect)
editare de legaturi
program
complet
executabil
Programul încarcator
Programul obiect care rezulta în urma editarii de legaturi, trebuie sa fie
încarcat în memoria calculatorului pentru a putea fi executat. Programul
încarcator loader , care este de obicei cuplat cu editorul de legaturi
realizeaza încarcarea programului obiect la adresa sa de încarcare.
Exista doua tipuri de programe încarcatoare:
a) încarcator absolut, specific vechilor sisteme de calcul care permite
încarcarea programului (unic în memorie) la o adresa fixata în
avans, ca si toate adresele din cadrul programului.
b) încarcator relocabil, specific noilor tipuri de sisteme
multiprogramate, care utilizeaza pentru încarcare în memorie
tehnica relocarii. O modalitate de realizare a relocarii este aceea a
utilizarii indicatorului de relocare de catre programul traducator în
câmpul de adresa al instructiunii. Relocarea se mai poate realiza
prin intermediul unui registru de baza, astfel:
se traduce programul în raport cu adresa 0 si se realizeaza
editarea de legaturi;
se alege un registru de baza printre cele disponibile;
se depune în registrul de baza adresa de baza (adresa absoluta a
programului);
se încarca programul în memorie, pornind de la adresa de baza,
fara modificarea adreselor programului. În timpul executiei, la
fiecare referire a unei adrese, sistemul de calcul efectueaza
operatiile:
adresa efectiva = adresa de baza + adresa referita.
6 STRUCTURI DE DATE
6.1 Tipuri si structuri
Un sistem de calcul este programat pentru prelucrarea instructiunilor.
Un program este un ansamblu de instructiuni si date. În capitolele
precedente au fost introduse conceptele esentiale ale programarii,
instructiuni în cod masina si limbaje de programare. Prezentul capitol se
refera la organizarea informatiilor de prelucrat în memoria calculatorului.
Sistemul de calcul defineste la nivel hardware un set de instructiuni
elementare si câteva reprezentari ale datelor elementare.
O data structurata se poate defini ca fiind o colectie de date elementare.
O astfel de colectie se mai numeste structura de date.
Structurile de date au aparut la nivelul limbajelor de programare
evoluate care definesc structuri abstracte asupra instructiunilor, de exemplu,
macrodefinitii, proceduri, functii, subprograme, etc. Ele definesc de
asemenea structuri de date precum variabile dubla precizie, numere
complexe, vectori, siruri de caractere etc.
Structurile de date sunt construite pornind de la datele elementare
realizate la nivel masina. Utilizatorul poate sa lucreze si cu informatii mai
complexe , deci la un nivel superior de abstractizare, fara sa tina seama de
detaliile implementarii fizice a acestor structuri care sunt "ascunse" de
limbajul de programare si software-ul asociat (traducator, interpretor, etc.).
Utilizatorul poate defini structuri de date si mai complexe (arbori,
tabele, liste, etc.) utilizând datele structurate la nivelul limbajului de
programare.
Pentru a introduce o noua structura abstracta se procedeaza astfel :
se defineste structura informatiei;
se definesc operatiile aplicabile acelei structuri;
se lucreaza cu aceasta informatie structurata la acest nivel de
abstractizare, fara a se tine seama de detaliile de implementare;
Exista un mare numar de structuri de date. Vom prezenta câteva
exemple dintre structurile cele mai utilizate : vectori, tablouri, liste, arbori,
cozi, stive si tabele.
Exemple de structuri de date întâlnite la diferite nivele de abstractizare
sunt prezentate în figura urmatoare:
Vectori
Vectorii vectors sunt structuri foarte utile, folosite de majoritatea
limbajelor de programare (procesoarele vectoriale suporta vectorii la nivel
hardware). Un vector este o multime finita si ordonata de elemente, toate de
acelasi tip. El este definit prin numarul de elemente, ca si prin tipul si
Nivel masina
Biti
Octeti
Cuvinte
Memorie
Registre
Numere întregi
Numere
în virgula
mobila
Nivel
limbaj
Multimi Înregistrari Tablouri
Variabile logice
Vectori
Variabile întregi Variabile reale Variabile
caracter
Nivel aplicatie
Arbori Stive LIFO Fisiere
Tabele Cozi FIFO Liste
marimea lor, stabilindu-se o corespondenta imediata între structura abstracta
si organizarea în memorie. Figura urmatoare prezinta schematizat structura
unui vector:
1 2 3 4 5 6 7 n-1 n
Tablouri
Un tablou array este o colectie multidimensionala de
obiecte de acelasi tip. Un tablou cu o singura dimensiune este
un vector. Fiecare element al tabloului este reperat printr-un set
de indici subscripts . Accesul la informatia continuta într-un
tablou este deci aleator. Realizarea unui tablou
multidimensional utilizeaza vectori, iar specificarea
dimensiunilor necesita o declaratie în cadrul programului.
Liste
Listele lists sunt structuri suple capabile sa contina un numar
nedeterminat de obiecte. Daca fiecare obiect este accesibil prin cel
precedent datorita unui pointer, atunci avem de a face cu o lista legata sau
înlantuita linked list]. Un astfel de exemplu este prezentat în figura
urmatoare:
Exista de asemenea liste dublu înlantuite care pot fi parcurse în ambele
sensuri, fiecare element fiind compus dintr-un obiect si doi pointeri.
Evident, realizarea unei astfel de liste se bazeaza pe notiunea de pointer. Se
spune ca un pointer înlantuieste elementele sau pointeaza, asupra unui
element. Pointerul este o variabila a carei valoare corespunde unei adrese.
Schimbând un pointer, se poate insera un nou element într-o lista, iar
prin simpla modificare a pointerilor se pot suprima elemente dintr-o lista.
Pointer catre
elementul urmator
element element element
Arbori
Arborele este o structura constituita din noduri legate prin arce. Fiecare
nod contine un obiect al colectiei. Arborele este o structura ierarhica. În vârf
exista un nod numit radacina, de la care pornesc ramurile, catre nodurile
nivelului inferior. Nodurile terminale se numesc frunze.
Arborele binar este un caz particular în care fiecare nod poseda cel mult
doua ramuri catre nodurile nivelului inferior.
Implementarea în memorie a unui arbore se poate realiza cu ajutorul
pointerilor. Fiecarui nod îi corespunde un ansamblu de cuvinte de memorie
care contin datele si pointerii reprezentând ramurile care pleaca din nod.
Cozi
O coada este un fir de asteptare (FIFO = First In First Out). Inserarile se
realizeaza la o extremitate iar extragerile se fac la celalalt capat. Realizarea
este posibila cu ajutorul unui vector si a doi pointeri.
Pentru a evita deplasarea cozii în memorie, se poate defini o zona de
memorie circulara, adica prima adresa sa urmeze dupa ultima adresa. Un
pointer pointeaza asupra ultimului element din coada, unde se adauga
datele, iar al doilea pointer indica primul element, unde se extrag datele.
Stive
O siva LIFO = Last In First Out] este o structura liniara particulara, în
care datele sunt adaugate sau extrase la o extremitate predeterminata.
Stiva este una dintre structurile cele mai importante si mai utilizate (de
exemplu: recursivitate, întreruperi multinivel, masina pe 0 adrese etc.).
Implementarea în memorie a unei stive se poate face cu ajutorul unui
vector si a unui pointer care indica vârful stivei, unde datele sunt depuse sau
de unde sunt extrase.
Tabele
În capitolul precedent am descris tabelele utilizate de asamblor si
compilator pentru pastrarea simbolurilor si valorilor corespunzatoare.
Se poate defini o tabela ca o structura în general neordonata de date de
acelasi tip, unde fiecare data are asociata o informatie unica numita cheie si
care serveste la identificarea elementului tabelei. De exemplu, daca vom
considera o agenda telefonica, cheia este numele abonatului iar informatiile
asociate pot fi adresa si numarul de telefon.
Cautarea unui element în tabela se realizeaza prin specificarea cheii.
Desi au fost elaborate mai multe metode de cautare în tabele, nu exista o
tehnica universala si optimala, alegerea depinzând de tipul si talia tabelei,
precum si de specificul utilizarii sale.
Vom prezenta trei algoritmi de cautare în tabele utilizati frecvent în
programare: cautarea liniara, cautarea binara si adresajul dispersat.
Cautarea liniara
Tabelele de simboluri, construite în timpul primei treceri ale unui
asamblor si în timpul fazelor de analiza lexicala si sintactica ale unui
compilator, asociaza numele simbolic al unei variabile sau al unui
identificator oarecare utilizat drept cheie a tabelei un anumit numar de
atribute, ca de exemplu: tip, adresa, protectie, etc. Atunci când traducatorul
întâlneste un simbol, el trebuie sa verifice daca exista deja în tabela, altfel
trebuie sa stabileasca o noua intrare în tabela.
Deoarece nici simbolurile si nici ordinea de prezentare nu sunt
cunoscute în prealabil, traducatorul introduce datele în tabela, pe masura ce
întâlneste noi simboluri în programul sursa, deci tabela este nesortata.
Pentru a gasi un element în tabela se poate utiliza metoda de cautare
liniara. Este cea mai simpla metoda, dar si cea mai putin performanta. Ea
consta în a parcurge tabela începând cu primul element si comparând
fiecare nume cu cheia de cautare. Cu o tabela de n elemente, timpul mediu
de cautare este proportional cu n / 2.
Dezavantajul unei astfel de metode este deci numarul mare de
comparatii. Avantajele se refera la usurinta de realizare, aplicarea ei pentru
tabele nesortate (sortarea unei tabele ia mult timp) si faptul ca pot fi
efectuate cautari în timpul încarcarii tabelei.
Cautarea binara
Printre tehnicile rapide, dar care impun existenta unei tabele ordonate,
se poate cita cautarea binara sau dihotomica binary search].
Ideea consta în a considera cheile ca fiind uniform distribuite si deci de
a începe cautarea prin compararea cheii date cu cea plasata în mijlocul
tabelei. Aceasta comparare permite eliminarea dintr-o data a unei jumatati a
tabelei. Se poate continua în acelasi mod aplicând metoda pentru elementele
ramase s.a.m.d. Metoda converge rapid si durata cautarii este proportionala
cu log (n).
Avantajul acestei tehnici provine din numarul redus de comparatii
necesare pentru a gasi obiectul dorit. Pentru o tabela cu 1000 de date,
cautarea binara va putea gasi orice cheie din 10 comparari, în timp ce
cautarea liniara ar necesita în medie 500 de comparari.
Figura urmatoare prezinta comparativ cele doua cautari si se observa ca
metoda de cautare liniara necesita 13 comparari în timp ce metoda
compararii binare necesita doar 4 comparari ale cheii (cauta: mmmmm).
ccccc aaaaaa
ggggg bbbbb
zzzzz Ccccc
sssss ddddd
eeeee Eeeee
hhhhh Fffff
kkkkk ggggg
lllll hhhhh
qqqqq Iiiii
aaaaa Jjjjj
ddddd kkkkk
fffff Lllll
wwwww mmmmm
mmmmm nnnnn
ooooo ooooo
ttttt ppppp
bbbbb qqqqq
rrrrr Rrrrr
uuuuu Sssss
Cautare liniara
Tabela nesortata Tabela sortata
Cautare binara
Adresaj dispersat
O solutie ideala ar fi ca sa existe un mecanism de cautare rapida care sa
nu impuna ca tabela sa fie ordonata. Memoriile asociative realizeaza o
cautare paralela pe toate cheile, dar o memorie asociativa de mare
capacitate este costisitoare. Pentru simularea comportamentului unei
memorii asociative (acces aleator) se poate utiliza metoda de adresaj
dispersat (hashing, hash code).
Aceasta tehnica foarte utilizata consta în evidentierea unei functii de
hashcode, care se aplica cheii si furnizeaza o adresa sau un indice în tabela
asociata. Functia de hashcode este importanta, ea trebuie sa furnizeze adrese
destul de uniform distribuite în intervalul de adrese disponibile.
Daca aplicarea functiei de hashcode asupra a doua nume de simboluri
alese drept cheie da acelasi rezultat, adica cele doua obiecte ar trebui sa fie
plasate la aceeasi adresa, spunem ca s-a realizat o coliziune. O buna functie
de hashcode trebuie sa genereze un numar minim de coliziuni.
Este foarte clar ca spatiul de adrese din cadrul tabelei trebuie sa fie
suficient pentru a contine toate obiectele.
Pentru rezolvarea coliziunilor se pot utiliza mai multe strategii:
liste înlantuite pentru adresarea obiectelor implicate, fiecare lista sa
înceapa la adresa comuna;
repetarea calculului de adresa cu o a doua functie de hashcode;
plasarea obiectului care gaseste locul ocupat la adresa urmatoare
sau la prima adresa disponibila (presupune o tabela generos
dimensionata, si în plus o cautare liniara).
Metoda adresajului dispersat permite stabilirea unei relatii functionale
cheie-adresa, de aceea cautarea în tabele se limiteaza la o singura comparare
(exceptând coliziunile) dupa calculul adresei cu ajutorul functiei de
hashcode
6.2 Fisiere si de baze de date
Structurile de date prezentate sunt adaptate organizarii memoriei
centrale, adresabile prin cuvinte sau octeti.
Fisierele sunt o structura adaptata memoriilor auxiliare (unitati de banda
si discuri magnetice).
Un fisier este o colectie de date reprezentând o entitate pentru
utilizator. În mediul informatic, datele unui fisier sunt înregistrate astfel
încât sa fie facilitata citirea si prelucrarea acestora cu calculatorul. În acest
context, un fisier este deci o colectie de date, rezultate, un text, un program
sursa, un program binar executabil etc. Un fisier este conceput ca o colectie
de înregistrari. Prezentarea detaliata a conceptului de fisier va fi realizata în
capitolul urmator.
O baza de date este un ansamblu structurat de date. Continutul unei
baze de date este cunoscut sub numele de banca de date.
O baza de date permite regruparea si centralizarea informatiilor
necesare diverselor aplicatii în vederea unei mai bune repartizari.
Din punct de vedere logic, o baza de date (BD) data base] este
constituita din multimea informatiilor relative la un subiect dat. Aceasta
multime trebuie sa respecte urmatoarele criterii:
- exhaustiviate : informatii complete despre un subiect dat;
- neredondanta : unicitatea informatiilor în baza de date;
- structura : asigura o buna gestionare a bazei de date.
Din punct de vedere fizic, o baza de date este o virtualizare a notiunii
de fisier. În general, bazele de date sunt stocate pe discuri magnetice si
gestiunea lor se efectueaza direct asupra discurilor. O baza de date este
implementata cu fisiere dar acest aspect nu este transparent pentru
utilizatori. Stocajul fizic al unei baze de date consta într-o multime de
înregistrari fizice organizate cu ajutorul listelor, pointerilor si diverselor
metode de indexare.
Operatiile care se pot efectua asupra unei baze de date sunt :
interogare sau consultare;
actualizare;
inserare;
suprimare.
Pentru efectuarea acestor operatii sunt necesare programe adecvate,
reunite sub denumirea de Sistem de gestiune de baze de date (SGBD)
DBMS : DataBase Management System].
Un aspect important al bazelor de date actuale este independenta
datelor fata de aplicatii, ceea ce constituie principalul obiectiv al bazelor de
date. În vederea asigurarii unei accesibilitati sporite a informatiilor se
realizeaza o separare între problemele de stocaj si întretinere, pe de o parte,
si problemele de prelucrare ale utilizatorilor, pe de alta parte, realizându-se
astfel o independenta între date si metodele de acces.
Pentru simplificarea problemelor de acces s-au elaboart mai multe
modele logice de baze de date: modelul ierarhic, modelul retea, modelul
relational si modelul pe obiecte.
Modelul ierarhic consta în organizarea datelor de maniera
arborescenta, ceea ce constituie o structura simpla care este o ierarhie în
care fiecare element nu are decât un superior, fara a exista conexiuni între
ramurile de pe acelasi nivel.
Modelul retea este o extensie a modelului precedent deoarece permite
stabilirea conexiunilor între elemente diferite. În acest mod se poate realiza
un mare numar de interogari posibile, dar acestea trebuiesc prevazute la
construirea bazei de date. În aceasta clasa de SGBD, modelul CODASYL
este unul din cele mai raspândite.
Modelul relational (de exemplu: SGBD Ingres, SQL/DS, Oracle,
Informix, Access etc.) permite eliminarea constrângerii de cunoastere în
avans a interogarilor care se vor efectua, permitând stabilirea conexiunilor
în momentul executiei.
Datele sunt stocate sub forma de relatii în tabele, iar accesul la
informatii se efectueaza prin aplicarea celor trei operatii de baza: selectia,
proiectia, compunerea.
Selectia consta în extragerea dintr-o relatie a acelor elemente care
satisfac o conditie.
Proiectia permite izolarea unui numar de coloane dorite.
Compunerea produce noi tabele pornind de la tabele existente.
Bazele de date permit definirea unei structuri logice deasupra structurii
fizice (cea de fisiere pe disc) care nu este adaptata manipularii datelor.
Interfata dintre o aplicatie si o baza de date este efectuata cu ajutorul
limbajelor specifice, dintre care cel mai cunoscut este SQL. Limbajul SQL
Structured Query Language] este un limbaj standard de definire si
manipulare a datelor din bazele de date relationale.
Modelul pe obiecte este un sistem de baze de date orientate obiect
OODB-Object Oriented DataBases]. Principiul acestui nou model este
relativ simplu, el consta în a utiliza aceleasi structuri de date în aplicatie si
în baza de date, realizând astfel o corespondenta directa între aplicatie si
baza de date.
Aceste structuri de date sunt clase de obiecte si baza de date este o baza
de obiecte. Obiectele bazei de date sunt obiecte persistente si care
beneficiaza de polimorfism si mostenire ceea ce garanteaza o buna
flexibilitate.
Conceptul de obiect a dat nastere unei noi tehnologii care se aplica în
numeroase domenii, de exemplu: limbajele de programare, sistemele de
operare si bazele de date.
7 SISTEME DE OPERARE
Un sistem de calcul fara software-ul sau este inutil. Software-ul
exploateaza universalitatea sistemului, asigurându-i potentialul necesar
rezolvarii problemelor. Sistemul de calcul, prin intermediul software -ului
sau, poate de exemplu, sa faciliteze scrierea unei scrisori, sa recunoasca
forme, sa prevada timpul, sa stocheze sau sa imprime imagini, sa corecteze
erori de ortografie, sa realizeze simplificarea unei expresii algebrice,
optimizarea conceptiei unui circuit electronic, simularea comportamentului
unor subansamble pentru diverse tipuri de masini etc.
De-a lungul timpului software-urile au evoluat în mai multe directii:
a) software-uri de aplicatie, care servesc la rezolvarea unor
probleme specifice, pot fi scrise de utilizator, sau sunt elaborate de
catre firme specializate, cum este cazul programelor de utilitate
generala: procesoare de texte, software-uri de gestiune si
contabilitate, pentru conceptia asistata de calculator, didactice etc.
b) software-uri utilitare, care ofera ajutor pentru dezvoltarea
aplicatiilor, cum ar fi: compilatoarele, asambloarele, linkeditoarele,
programele încarcatoare si depanatoare etc., cuprinzând de
asemenea instrumente grafice si de comunicare.
Sistemul de operare operating sistem] este un produs software care
coordoneaza ansamblul tuturor activitatilor sistemului de calcul, asigura
gestiunea eficienta a resurselor sale si faciliteaza munca utilizatorilor prin
preluarea unor sarcini complicate cum ar fi, de exemplu, controlul
perifericelor sau stocarea si gestiunea fisierelor.
Sistemul de operare permite interactiunea directa între om si sistemul de
calcul, oferind în acest sens o interfata convenabila si organizând
prelucrarea si stocarea programelor si datelor.
Sarcinile sistemelor de operare s-au amplificat de-a lungul timpului si
astfel, volumul sau a crescut considerabil, necesitând eforturi deosebite
pentru programare. Un sistem de operare modern este constituit din sute de
mii, chiar milioane de instructiuni, solicitând utilizarea limbajelor de
programare evoluate adaptate scrierii acestui gen de software.
Pentru a reliefa importanta deosebita a sistemului de operare, în
lumea informaticii se spune adesea ca "un elefant este un soricel
împreuna cu sistemul sau de operare"
7.1 Evolutie si caracteristici
Calculatoarele primei generatii erau lipsite de sistem de operare, erau
programate în binar, programele erau încarcate în memorie, executate si
puse la punct de la pupitrul de comanda.
Chiar si dupa aparitia limbajului de asamblare procedura de utilizare a
sistemului de calcul era aceeasi, utilizatorul era stapân unic asupra masinii
pe toata durata de executie a programului sau care putea sa fie foarte mare.
Etapele evolutiei unui sistem de operare corespund introducerii unor noi
dispozitive capabile sa amelioreze performantele sistemului de calcul.
Evolutia sistemelor de operare cuprinde urmatoarele etape:
a) Monitorul sau executivul anilor '60 este precursorul sistemelor de
operare moderne. El este un program însarcinat cu asigurarea bunei
desfasurari a operatiilor prin secventializarea actiunilor utilizatorilor
si continuitatea operatiilor;
b) Sisteme pe loturi sau trenuri de lucrari batch , sunt sisteme
monoutilizator aparute la sfârsitul anilor '50, o data cu introducerea
primelor sisteme pe tranzistoare si dotate cu benzi magnetice, care
asigurau succesiunea mai rapida a informatiilor. Programarea era în
plin avânt datorita aparitiei limbajului Fortran. Separarea operatiilor
de intrare/iesire de cele de prelucrare se realizeaza prin utilizarea
unui calculator auxiliar. Joburile, prezentate operatorului sub forma
de pachete de cartele perforate sunt recopiate pe banda magnetica
de catre calculatorul auxiliar. Banda, continând un lot de lucrari se
constituie ca intrare pentru calculatorul principal care executa
actiunile în ordinea prezentarii, iar rezultatele se scriu de asemenea
pe banda pentru a putea fi imprimate în continuare de catre
calculatorul auxiliar;
c) Independenta intrarilor/iesirilor este un deziderat atins la
mijlocul anilor '50, si care se materializeaza prin realizarea
urmatoarelor dispozitive:
unitati de discuri si tambururi magnetice la un pret
abordabil, care ofera un acces aleator si capacitati de
memorare importante;
unitati de canal si sistemul de întreruperi, care elimina
dependenta intrarilor/iesirilor de prelucrari;
Joburile sunt citite si stocate pe disc în fisiere (spooling), si sunt
utilizate de catre monitor în momentul executiei, acesta putând
alege ordinea de executie pe baza unor criterii de exploatare care se
prezinta sub forma unui sistem de prioritati. Monitorul este dotat în
acest sens cu un nou modul, planificatorul scheduler , care
asigura planificarea lucrului.
d) Multiprogramarea. Un sistem de calcul este multiprogramat daca
mai multe programe sunt încarcate în memorie în scopul partajarii
CPU-ului, asigurându-se exploatarea mai eficienta a sistemului de
calcul prin eliminarea perioadei de asteptare a unitatilor de
prelucrare în timpul operatiilor de intrare/iesire. Sistemul de
operare va contine un nou modul, alocatorul, care asigura
gestiunea CPU tinând cont de sistemul de prioritati gestionat de
catre planificator, dar poate decide de asemenea întreruperea unei
executii prelungite fara sa astepte o operatie de intrare-iesire în
vederea unei partajari echitabile a CPU-ului. Multiprogramarea
ridica un anumit numar de probleme:
partajarea unitatii de prelucrare între programe si salvarea
contextului (starea de executie) pentru fiecare program;
gestiunea memoriei centrale încât sa permita încarcarea unui
numar ridicat de programe într-un spatiu limitat;
gestiunea intrarilor/iesirilor pentru diversele programe,
asigurând transferul de date între memorie si unitatile
periferice si împiedicând sistemul sa "amestece" informatiile
specifice programelor diferite;
protejarea programelor si a datelor stocate în memoria centrala
si pe disc, eventualele erori putând avea consecinte grave
asupra derularii operatiilor;
e) Sistemele în timp partajat time-sharing , numite de asemenea
multiacces sau multiutilizator, sunt o varianta a sistemelor
multiprogramate în care timpul CPU este distribuit în mici transe
egale unui mare numar de utilizatori interactivi, conectati la sistem.
Sistemele actuale combina prelucrarile batch si time-sharing. Întrun
sistem în timp partajat, orice job lansat de la un terminal poate fi
direct controlat de catre utilizator, care are posibilitatea, de
exemplu, sa decida corectarea erorilor, recompilarea si relansarea în
executie. Acest mod de exploatare este adaptat în special fazei de
punere la punct a unui program, în timp ce modul batch este utilizat
în general pentru aplicatii care vizeaza activitati de productie si
pentru alte sarcini interactive.
Caracteristicile sistemelor de operare pentru sistemele
multiprogramate vizeaza urmatoarele aspecte:
a) Exploatarea resurselor este o sarcina fundamentala care asigura:
paralelismul între diverse activitati în vederea cresterii
performantelor sistemului de calcul. Notiunea de procese
paralele si concurente faciliteaza întelegerea functionarii unui
sistem de calcul multiprogramat;
partajarea resurselor si a informatiilor este asigurata prin
gestiunea diferitelor unitati functionale ale sistemului (CPU,
memorie centrala si auxiliara, dispozitive de intrare/iesire),
permitând acccesul simultan la datele comune (baze de date,
fisiere etc.) si la anumite programe (utilitare, biblioteci etc.);
interdependenta între functiunile sistemului de operare si
alte functiuni, deoarece nu exista o distinctie neta între ele,
de exemplu, compilatorul si editorul de texte sunt considerate
programe utilitare, iar în sistemul Unix, modulul de gestiune a
fisierelor este tratat ca o aplicatie oarecare;
nedeterminismul operatiilor care vizeaza caracteristica de
comportament a sistemelor de operare. Daca la nivelul unei
aplicatii, executii repetate cu aceleasi date produc aceleasi
rezultate, sistemul de operare trebuie sa reactioneze la situatii
nereproductibile, la evenimente aleatoare, ca de exemplu,
întreruperi generate de dispozitive de intrare/iesire, transferuri
de date repetate ca urmare a erorilor detectate în urma
verificarilor de paritate, incidente în functionare etc.
b) Virtualizarea sistemului prezinta utilizatorului, prin intermediul
limbajului de comanda, o masina virtuala mai usor de programat
decât cea reala. Limbajul de comanda furnizeaza modalitatea de a
comunica sistemului, prin formularea de cereri, toate informatiile
necesare diferitelor etape de lucru. Desi exista o oarecare asemanare
între limbajele de comanda si cele de programare în sensul
formularii unor fraze care specifica într-un mod neambiguu actiuni
de executat, totusi, instructiunile unui limbaj evoluat de programare
sunt în mod normal executate de catre CPU dupa ce au fost traduse
de catre compilator, în timp ce comenzile unui limbaj de comanda
sunt interpretate de catre sistemul de operare. Masina virtuala
ascunde" utilizatorului toate detaliile privind, de exemplu, o
operatie de intrare/iesire sau o manipulare de fisiere;
c) Dispozitivele esentiale pentru sisteme multiprogramate, ca de
exemplu, canale de intrare/iesire, sistemul de întreruperi, memoriile
auxiliare si terminalele interactive, la care se adauga alte dispozitive
pentru protectia programelor si a datelor, pentru relocarea dinamica
a programelor sau pentru gestiunea memoriei virtuale stau la baza
oricarui sistem de operare modern;
d) Masina cu doua stari:
starea supervizor, rezervata sistemului de operare;
starea utilizator, în care intra programele de aplicatie.
Aceasta conceptie permite dotarea sistemului cu un set instructiuni
de baza, executabile în cele doua stari, si câteva instructiuni
suplimentare, instructiuni privilegiate, executabile numai în mod
supervizor. Starea sistemului este specificata prin pozitionarea unui
indicator accesibil pentru modificare doar sistemului de operare (de
exemplu, un bit al registrului de stare).
În anumite situatii, indicatorul de stare trece automat în starea
supervizor, de exemplu în cazul unei întreruperi sau în caz de
eroare, sau în general, ca urmare a unui eveniment care necesita
interventia sistemului.
Interfata între cele doua stari este asigurata prin existenta unei
instructiuni neprivilegiate, numita cerere a supervizorului.
e) Program, procesor, proces. Un program este o secventa statica de
instructiuni. Un procesor executa instructiunile unui program. Un
proces este o actiune, o secventa de operatii care se deruleaza
pentru realizarea unei sarcini determinate, pe scurt, este un program
în executie.
7.2 Structura unui sistem de operare modern
Examinând functiunile unui sistem de operare modern, se poate aprecia
ca acesta se bazeaza pe un model structurat pe nivele, de exemplu, sistemul
de gestiune a fisierelor face apel la sistemul de gestiune a intrarilor/iesirilor,
care la rândul sau, utilizeaza modulul de prelucrare a întreruperilor etc.
Se poate realiza un model de sistem de operare bazat pe o suprapunere
de nivele functionale, nivelele inferioare fiind în interactiune directa cu
hardware-ul, iar cele superioare servesc interfetei cu utilizatorul. Fiecare
nivel utilizeaza functiuni definite de catre nivelele inferioare, iar aceasta
abordare este asemanatoare cu cea adoptata pentru definirea nivelelor
functionale privind protocoalele de comunicare într -o retea de calculatoare
(modelul ISO-OSI).
Figura urmatoare prezinta structura unui sistem de operare conform
modelului expus, din care se desprinde ideea complexitatii sistemului de
operare.
utilizatori
programe de
interfata utilizator aplicatie ale
interpretor de comenzi utilizatorilor
si
planificarea lucrului programe de
servicii
gestiunea fisierelor - compilatoare
linkeditoare
gestiunea intrarilor/iesirilor - editor de texte
gestiunea memoriei centrale
nucleu sistem de operare
gestiunea gestiunea gestiunea
proceselor întreruperilor CPU
hardware
Nucleul sistemului de operare
Functiunile principale ale nucleului kernel sunt urmatoarele:
a) alocarea CPU;
b) gestiunea întreruperilor;
c) gestiunea proceselor.
Nucleul este singura componenta a SO în întregime rezidenta în
memoria centrala. Functiunile sale implica interventii frecvente si rapide.
De aceea, si datorita ocuparii permanente a unei parti din memorie,
codificarea nucleului trebuie realizata cu mare atentie si optimizata.
Este într-adevar nivelul cel mai solicitat al sistemului, codificat adesea
în limbaj de asamblare, restul sistemului fiind codificat în limbaj de
programare evoluat orientat sistem (C, Pascal concurent, Modula -2).
Alocare CPU
Alocatorul (dispecerul) este responsabil cu repartizarea timpului
disponibil unitatii de prelucrare (sau unitatilor de prelucrare în cazul
arhitecturilor multiprocesor) între diferite procese.
Sarcina sa implica gestiunea unui fir de asteptare, unde procesele care
sunt gata sa utilizeze CPU sunt clasate în ordinea prioritatii. Prioritatea
este atribuita de planificator în functie de urgenta prelucrarii si resursele
solicitate si este modificata dinamic pe baza timpului de asteptare între doua
executii partiale. Dispecerul aloca CPU procesului care se gaseste în capul
cozii în momentul în care CPU devine disponibil.
Dispecerul trebuie de asemenea sa salveze starea (contextul) procesului
a carui executie s-a întrerupt si trebuie sa furnizeze CPU-ului elementele de
context (echipament) ale procesului desemnat ca succesor.
Pentru salvarea informatiilor privind starea proceselor, se asociaza
fiecarui proces o zona de memorie continând toate informatiile esentiale ca:
identificator, paritate, context, statut (de exemplu activ, daca este stapân al
CPU; gata de executie, daca este încarcat în memorie si dispune de toate
resursele, fara CPU; în asteptare, daca este pe disc în asteptarea posesiei
perifericelor si spatiului de memorie necesare; suspendat, daca executia sa
a fost întrerupta; terminat, daca procesul si-a realizat sarcinile si executia
sa a luat sfârsit), necesitatile în resurse etc.
Acest bloc de informatii se numeste vector de stare, sau descriptor,
sau imaginea procesului. Acesti descriptori sunt regrupati într-o structura
de date si pot fi accesati printr-un pointer pornind de la o tabela centrala.
Aceasta structura este accesibila programelor nucleului.
Dispecerul este solicitat în toate cazurile în care trebuie schimbat
procesul stapân al CPU. De exemplu când procesul executant declanseaza o
operatie de intrare/iesire, sau când o întrerupere de ceas semnaleaza ca
transa de timp alocata este epuizata si trebuie suspendata executia, atunci
trebuie atribuit CPU unui alt proces.
Dispecerul va fi de asemenea activ când o întrerupere externa modifica
starea procesului stapân al CPU, sau îl face pe moment inoperant (de
exemplu tratarea unei erori).
Gestiunea proceselor
Un proces (task) este un calcul care poate fi executat concurent sau în
paralel cu alte calcule. El este o abstractizare a procesorului, fiind
considerat ca un program în executie.
Existenta unui proces este conditionata de existenta a trei factori:
a) o procedura (un set de instructiuni) care trebuie executata;
b) un procesor care sa poata executa aceste instructiuni;
c) un mediu (memorie, periferice) asupra caruia sa actioneze
procesorul conform celor precizate în procedura.
Programare paralela si concurenta
Caracteristic programarii paralele este faptul ca procesele paralele nu
sunt conditionate unul de celalalt, nu colaboreaza între ele, executia unuia
nu este în nici un moment dependenta de rezultatele partiale ale celuilalt.
Spunem ca avem de-a face cu programare concurenta atunci când
procesele paralele se interconditioneaza reciproc.
Într-un sistem de calcul, paralelismul proceselor trebuie înteles astfel:
Daca Ii si Ij sunt momentele de început a doua procese Pi si Pj, iar Hi si
Hj sunt momentele lor de sfârsit, Pi si Pj sunt executate concurent daca max
(Ii , Ij) min (Hi , Hj).
Definitia 7.1 Executie paralela
Despre doua instructiuni succesive S si S spunem ca pot fi executate în
paralel, daca efectul lor asupra mediului este acelasi, indiferent daca mai
întâi se executa complet S si apoi S , sau se executa complet S si apoi S
sau executia uneia începe înaintea terminarii executiei celeilalte.
Exemplul 1: Un program citeste de la doua periferice diferite pe a si b,
dupa care tipareste suma lor c. S si S se pot executa în paralel.
S : read (a);
S : read (b);
S : c : a+b
S : write (c);
Definitia 7.2 Graf de precedenta
Un graf aciclic (X, U) este graf de precedenta asociat unui program,
daca X este multimea instructiunilor programului, iar multimea arcelor U
este formata din perechi (Si, Sj) pentru care Si precede Sj.
Exemple de grafuri de precedenta si neprecedenta:
S S S S
S S S
S S S
S S
S S
Grafuri de precedenta Graf de neprecedenta
Mecanisme de specificare a concurentei
Grafurile de precedenta sunt un model matematic pentru concurenta,
dar nu pot descrie direct concurenta în limbajele de programare.
Constructiile FORK, JOIN, QUIT
Instructiunea FORK are sintaxa: FORK eticheta; si provoaca executia
concurenta a doua secvente de program, deci creaza doua procese paralele.
Instructiunile primului proces încep la eticheta eticheta, iar pentru al doilea
proces instructiunile sunt cele care urmeaza dupa FORK.
Instructiunea JOIN are sintaxa: JOIN nr, eticheta si are rolul de a
recombina nr procese, toate terminate. Dupa ce a fost executata a nr-a oara,
se trece la instructiunea cu eticheta eticheta. Variabila nr indica numarul de
procese paralele care mai sunt de asteptat în vederea reunirii.
Instructiunea QUIT are sintaxa: QUIT si are ca efect terminarea
procesului care o executa (de obicei însoteste pe JOIN).
Prezentam descrierea FORK-JOIN-QUIT pentru grafurile de
precedenta din figura anterioara:
nr 2; S
FORK L ; nr :
read(a); FORK L
goto L ; S
L : read (b); S
L : JOIN nr, L ; FORK L
QUIT; S
L : c:= a+b; goto L
write (c) L : S
goto L
L : S
L : JOIN nr, L
QUIT;
L : S
Mecanismul PARBEGIN-PAREND
O astfel de constructie are forma: S ; PARBEGIN S S Sn
PAREND; Sn+1; si corespunde grafului de precedenta urmator:
S
S S ... Sn
Sn+1
Deci instructiunile S , S , ..., Sn sunt lansate în executie simultan si sunt
executate concurent. Prezentam descrierea grafurilor de precedenta din
figura anterioara cu PARBEGIN-PAREND.
S
PARBEGIN
begin
PARBEGIN S
read (a); S
read (b); PARBEGIN
PAREND S
c := a+ b; S
write (c); PAREND
end
S
PAREND
S
Prezentam în continuare un exemplu de copiere a unui fisier F într -un
fisier G, situat pe un suport diferit, folosind instructiuni concurente:
Type articol record . . . end;
Var F, G: file of articol;
w, r: articol;
begin
reset (F);
rewrite (G);
read (F, r);
while not eof (F) do begin
w: r
PARBEGIN
read (F, r); write (G, w);
PAREND;
end
write (G,r);
close (F);
close (G);
end
Conceptul de semafor
Un semafor s este o pereche (v (s), c (s)), unde v (s) este valoarea
semaforului (valoarea initiala v (s)), iar c (s) o coada de asteptare care
contine pointeri la procesele care asteapta la semaforul s. Pentru gestiunea
semafoarelor se definesc doua operatii primitive: WAIT si SIGNAL.
WAIT(s) apelat de procesul A : SIGNAL(s) apelat de procesul A:
v (s): v (s) -1; v (s): v (s) + 1;
if v (s) < 0 then begin if v (s) < 0 then begin
Trece A în asteptare; c (s) > B;
c(s) < A; Se extrage din coada B;
Trece controlul la dispecer; Trece controlul la dispecer;
end end
else else
Se trece controlul la A; Se trece controlul la A;
endif endif
Deci operatia SIGNAL (s) incrementeaza semaforul s cu o unitate, iar
WAIT (s) decrementeaza s cu o unitate daca s este pozitiv.
Sectiune critica, resursa critica,
excludere mutuala
Problema sectiunii critice consta în aceea ca doua sau mai multe procese
concurente încearca sa modifice o aceeasi variabila, de un numar neprecizat
de ori:
PARBEGIN
P : . . . v : v + 1; . . .
P : . . . v : v + 1; . . .
PAREND
Vom spune ca portiunea de program prezentata, v : v + 1 este o
sectiune critica, deoarece nu este permis ca ea sa fie executata simultan de
cele doua procese. Analog, vom spune ca variabila v este o resursa critica,
deoarece nu poate fi accesata simultan de mai multe procese. Procesele P si
P se exclud reciproc, deoarece au acces exclusiv la sectiunea si la resursa
critica.
Folosirea semafoarelor rezolva complet si elegant problema sectiunii
critice, fiind necesar un singur semafor s care se numeste semafor de
excludere mutuala
var s:semafor
v (s):
PARBEGIN
P : repeat
WAIT (s);
sectiune critica;
SIGNAL (s);
rest program1
until false
P : repeat
WAIT (s);
sectiune critica;
SIGNAL (s);
rest program2
until false
PAREND
Sincronizarea proceselor
Operatia de sincronizare a doua procese se enunta astfel: Un proces P
nu poate trece de un anumit punct A decât dupa ce un alt proces P ajunge
într-un punct B. Prin intermediul semafoarelor, procesul P va astepta în
punctul A, prin operatia WAIT (s), pâna când procesul P va efectua în
punctul B operatia SIGNAL (s).
var s:semafor;
v (s) :
PARBEGIN
P : repeat . . . A: WAIT (s); . . . until false;
P : repeat . . . B: SIGNAL (s) . . . until false;
PAREND
Prezentam în continuare câteva aplicatii ale sincronizarii proceselor:
Problema producatorului si consumatorului
Sa presupunem ca exista unul sau mai multe procese numite
producatoare, si unul sau mai multe procese consumatoare (de exemplu
conceptele de pipe si spooling). Transmiterea informatiilor de la producatori
la consumatori se efectueaza prin intermediul unui buffer cu n intrari.
Problema consta în a dirija cele doua tipuri de procese astfel ca:
a) sa existe acces exclusiv la buffer (semaforul exclus);
b) consumatorii sa astepte când bufferul este gol (semaforul plin);
c) producatorii sa astepte când bufferul este plin (semaforul gol).
Var plin, gol, exclus: semafor;
v (plin) :
v (gol) : n;
v (exclus) :
PARBEGIN
Producator: repeat
produce articol;
WAIT (gol);
WAIT (exclus);
depune articol în buffer;
SIGNAL (exclus);
SIGNAL (plin);
until false;
Consumator: repeat
WAIT (plin);
WAIT (exclus);
extrage articol din buffer;
SIGNAL (exclus);
SIGNAL (gol);
consuma articol;
until false
PAREND
Problema impasului
Problema impasului se manifesta în urmatoarea situatie când ambele
procese sunt blocate.
var x,y: semafor;
v (x) :
v (y) :
PARBEGIN
A: . . . WAIT (x); . . . WAIT (y);
B: . . . WAIT (y); . . . WAIT (x);
PAREND
Impasul este o stare foarte grava care poate duce la blocarea sistemului
de operare sau la distrugerea unor procese.
Modelarea matematica a impasului
Sa consideram n procese si m tipuri de resurse. Un proces oarecare va fi
notat cu litera i si i 1, 2, ..., n}, iar o resursa oarecare cu litera j, si j
1, 2, ..., m}.
Notam cu x j cantitatea din resursa j existenta în sistem;
Notam cu c i, j (t) cantitatea din resursa j ceruta de procesul i la
momentul t;
Notam cu a i, j (t) cantitatea din resursa j alocata procesului i la
momentul t;
Notam cu r j (t) cantitatea din resursa j care mai este libera la
momentul t;
Definitie 5.3 Stare realizabila
Numim stare realizabila a alocarii resurselor la momentul t, daca au loc
conditiile:
c i, j (t) x j "i, "j;
a i, j (t) c i, j (t), "i, "j;
a 1, j (t) + a 2, j (t) + ... + a n, j (t) x j "i, "j;
Problemele impasului si rezolvarea lor
a) Iesirea din impas se rezolva de regula adoptând urmatoarele
strategii:
reîncarcarea sistemului de operare;
alegerea unui proces "victima" care este distrus;
crearea unui punct de reluare, care este o fotografie a
memoriei pentru procesul "victima" si pentru procesele cu
care colaboreaza;
b) Detectarea unui impas daca sistemul poseda un mecanism de
prevenire a impasului (de exemplu, detectarea ciclurilor în graful de
alocare a resurselor);
c) Prevenirea impasului se face prin urnmatoarele metode:
Metoda 1: "totul sau nimic". Procesul cere resurse în
momentul încarcarii, iar SO întocmeste graful alocarii
resurselor;
Metoda a 2-a: cererea de resurse într-o anumita ordine, prin
numerotarea resurselor;
Metoda a 3-a: alocare si suspendare controlata.
Gestiunea întreruperilor
Întreruperile sunt constituite dintr-un ansamblu de rutine, fiecare dintre
ele fiind activata la aparitia unui semnal fizic de întrerupere.
Sarcina modulului de gestiune a întreruperilor este determinarea sursei
întreruperii si activarea rutinei de serviciu sau de raspuns corespunzatoare.
Am vazut ce este un program în limbaj masina. Putem presupune ca
executia unei instructiuni masina nu poate fi întrerupta.
Prin starea unui program la un moment dat, notata prescurtat PSW
Program Status Word întelegem o pereche formata din:
a) adresa urmatoarei instructiuni de executat;
b) continutul registrelor masina la terminarea ultimei instructiuni.
Fiecare sursa posibila a unei întreruperi are asociata o locatie fixa de
memorie. În aceasta locatie se afla o adresa care indica locul din memorie la
care se gaseste o secventa de instructiuni, numita handler, care deserveste
întreruperea respectiva.
La aparitia semnalului de întrerupere, dupa ce instructiunea masina în
curs s-a executat, se deruleaza în aceasta ordine, urmatoarele activitati:
a) se salveaza într-o zona de memorie (în stiva, sau o zona prestabilita)
PSW-ul programului în curs de desfasurare;
b) se restaureaza PSW al handlerului asociat întreruperii;
c) handlerul executa actiunile necesare deservirii întreruperii;
d) se salveaza, numai daca este necesara corelarea a doua actiuni
succesive ale aceluiasi handler, PSW al handlerului;
e) se restaureaza PSW al programului care a fost întrerupt.
Printre întreruperile care trebuie tratate la acest nivel se includ
întreruperile interne, provocate, de exemplu, de detectarea unei erori sau
printr-o actiune care solicita trecerea în starea supervizor, ca si toate
întreruperile externe
Ca exemplu de actiune care cauzeaza trecerea în starea supervizor se
poate cita cazul unui utilizator care încearca sa execute o instructiune
privilegiata sau cauta sa acceseze o informatie protejata etc.
Daca întreruperea implica o schimbare de alocare a procesorului, acest
modul al nucleului va activa dispecerul.
Gestiunea memoriei centrale
Programele au nevoie de memorie pentru executia lor (pentru stocarea
instructiunilor si datelor). Numai instructiunile stocate în memoria centrala
pot fi executate de CPU.
Daca sistemul de calcul (SC) este exploatat în monoprogramare,
problema se reduce la partajarea memoriei între programul de aplicatie de
executat si partea sistemului de operare rezidenta în memorie, care ocupa în
mod normal o zona de adrese pornind de la adresa 0, care se numeste adesea
partea de jos a memoriei.
Daca sistemul ocupa zona de adrese de la 0 la N, programul utilizator va
avea la dispozitie spatiul de adrese de la N + 1 la extremitatea superioara a
memoriei.
Daca programul utilizator are o talie mai mare decât spatiul disponibil,
programatorul trebuie sa "decupeze" programul în module care sa se poata
succede în zona de memorie pusa la dispozitia lor.
Sistemul nu este în mod obligatoriu stocat în memoria RAM, în anumite
cazuri se prefera utilizarea unei memorii ROM separate, pentru ratiuni de
protectie si nevolatilitate.
Memoria centrala este o resursa costisitoare si deci ea este limitata si
constituie un element critic al performantei unui calculator.
Dimensiunea memoriilor a crescut considerabil, o data cu adoptarea
memoriilor electronice, dar si cea aprogramelor a urmat aceeasi tendinta.
Spatiul de memorie trebuie gestionat eficient, iar al doilea nivel al SO
este asigura partajarea memoriei între mai multe procese în asteptare.
Partitii cu talie fixa
Ideea cea mai simpla de partitionare a memoriei ca ea sa poata contine
un numar maxim de programe consta în "decuparea" memoriei fizice
disponibile în partitii fixe, dar nu obligatoriu de talie identica, fixate la
generarea sistemului.
Aceste partitii fiind fixate în avans si o data pentru totdeauna, alocarea
lor prezinta câteva probleme:
a) trebuie gestionate mai multe cozi de procese în asteptare, sortând
procesele în functie de talia lor;
b) se produce o oarecare risipa de memorie, deoarece nu poate fi
prevazuta talia joburilor de executat si rareori se va gasi un proces a
carui talie sa corespunda unei partitii prestabilite.
Partitii cu talie variabila
Inevitabila risipa de memorie a sistemelor cu partitii fixe conduce la
conceptia partitiilor adaptabile taliei programelor, numite partitii cu talie
variabila.
Daca unul sau mai multe programe îsi termina executia, apar zone de
memorie neocupate, deci ar fi de dorit sa se ofere posibilitatea deplasarii
programelor în memorie. În acest sens, sistemul, din când în când suspenda
executia programelor si efectueaza o compactare a spatiului de memorie
care permite rearanjarea memoriei ramase si crearea de spatiu pentru
programele în asteptare.
Pentru a realiza aceasta operatie de reasezare sau compactare este
necesara o tehnica de deplasare corecta a programelor încât acestea sa -si
poata continua executia. Aceasta tehnica se numeste relocare (realocare),
sau translatare dinamica si este realizata cu ajutorul registrelor de baza si
a dispozitivului de calcul al adresei efective în momentul executiei.
Adresa efectiva = adresa de baza + adresa începutului de program
Relocarea dinamica a spatiului de adrese poate fi realizata deplasând
programul si modificând continutul registrului de baza asociat, iar executia
se va efectua corect, adresele fiind calculate la executie, în functie de adresa
continuta în registrul de baza.
Figura urmatoare ilustreaza aceasta idee care rezolva problema numai în
faza initiala de încarcare a programelor.
zona sistem zona sistem zona sistem
program A program A program A
program B program C
program C program C program D
program D program D program F
program E program G
program F program F
program G program G
Încarcare Dupa un anu- Rearanjare
initiala mit timp de prin relocare
functionare dinamica
Translatarea dinamica si protectia
În sistemele multiprogramate trebuie protejat fiecare program contra
eventualelor greseli ale altor programe, greseli susceptibile de a periclita
executia corecta a unui program prin posibilitatea de a patrunde în zona sa
de memorie.
În principiu, este suficienta verificarea ca orice adresa calculata în
timpul executiei unui program sa fie interna intervalului de adrese alocate
programului respectiv.
Aceasta verificare se realizeaza cu ajutorul unui dispozitiv special care
compara adresa efectiv calculata cu adresele extreme ale zonei alocate
programului, stocate în registre "borna" sau marginite (este necesar un
singur registru marginit, deoarece adresa primei locatii de memorie este
stocata în registrul de baza).
Pentru a gasi adresa referita se calculeaza adresa efectiva AE = baza +
dep si se testeaza daca baza AE sup
Numai SO are dreptul sa modifice continutul registrelor de baza si al
celor marginite, ceea ce implica instructiuni privilegiate care nu pot fi
executate decât în mod supervizor, iar daca un program face referire la o
adresa din exteriorul bornelor sale, dispozitivul de verificare genereaza o
întrerupere alertând SO.
Figura urmatoare prezinta aceste mecanisme.
memorie
baza baza registru de baza
adresa referita dep deplasament
program în raport cu B
sup sup registru marginit
(lim. superioara)
Pentru relocarea dinamica a memoriei si partajarea mai multor procese
se utilizeaza dispozitivele urmatoare:
a) registru de baza;
b) registru marginit;
c) dispozitiv de calcul al adresei efective pentru orice referinta la
memorie;
d) dispozitiv de verificare a apartenentei adresei efective la zona de
memorie a procesului.
Datorita acestor dispozitive, SO poate decide deplasarea unui program si
poate efectua din când în când o reasezare a memoriei. Procesele care devin
temporar inactive pot fi puse în asteptare pe disc si înlocuite în memorie de
alte procese (swapping).
Principalele limite ale acestei tehnici sunt:
a) timp deloc neglijabil petrecut cu reasezarea;
b) necesitatea alocarii de spatiu contiguu de memorie.
În evolutia conceptuala a sistemelor de gestiune a memoriei, etapa
urmatoare consta în a cauta metode de fragmentare a programelor si
memoriei, astfel încât un program sa poata fi încarcat în zone necontigue de
memorie.
Segmentarea
Segmentarea consta în divizarea unui program în module sau segmente,
fiecare segment corespunzând unei entitati logice cum ar fi o procedura sau
un bloc de date, independenta de alte segmente.
Sistemul de operare se ocupa de plasarea în memorie a segmentelor
necesare executiei programelor gata sa utilizeze CPU. Sistemul de operare
trebuie sa stie unde sunt stocate diferitele segmente, si pentru aceasta el
organizeaza si gestioneaza un ansamblu de tabele de segmente, câte o
tabela pentru fiecare program, continând adresele de încarcare ale
segmentelor programului respectiv.
Adresa este structurata si contine 2 câmpuri:
a) numarul segmentului;
b) deplasamentul în cadrul segmentului.
Calculul adresei efective este realizat ca de obicei cu ajutorul unui
dispozitiv special, adaugând offsetul adresei de încarcare a segmentului care
este stocat în tabele de segmente.
Protectia poate fi asigurata la nivelul tabelei de segmente adaugându -
i talia fiecarui segment sau ultima adresa a segmentului.
Memorie
Spatiul de memorie Tabela de
al programului segmente 50K
(în memorie)
70K
Segment 1 Numar Pozitie 95K
1 50K
0 120K
Segment 2
25 2 95K 130K
0 145K
Segment 3 3 130K
15 155K
0 4 155K 165K
Segment 4
Notiunea de memorie virtuala
Ideea de memorie virtuala este simpla, eleganta si consta în a trata
diferentiat adresele referite prin program (adrese virtuale) si adresele
memoriei fizice (adrese reale).
Multimea adreselor virtuale este independenta de implementarea
programului în memoria fizica, este vorba deci de un spatiu de memorie
virtual (care nu exista), dar poate fi utilizat de catre programator ca model
de memorie centrala la dispozitia sa.
Totul se petrece ca si când utilizatorul ar avea acces la o memorie având
n locatii, n fiind numarul de biti pentru adresele programului.
Acest numar n poate fi mult mai mare decât numarul m care reprezinta
talia memoriei fizice. O tabela de corespondenta numita tabela de pagini
sau topografie de memorie, gestionata de catre sistemul de operare pune în
corespondenta cele doua spatii de adrese, iar un dispozitiv special asigura
transformarea unei adrese virtuale în adresa fizica.
Spatiul virtual de adrese, care rezulta de regula din linkeditarea
programului este gestionat de sistemul de operare, care este obligat sa
utilizeze memorii auxiliare (discuri, tambururi, memorii de sprijin etc), ca
extensii ale memoriei centrale.
Conceptul de memorie virtuala dezvoltat în perioada anilor '60 a facut
obiectul mai multor proiecte de cercetare, iar cea mai mare parte a
calculatoarele anilor '70 erau dotate cu memorie virtuala.
Realizarea conceptului de memorie virtuala se bazeaza pe tehnica
paginarii
Paginare
Conceptul de paginare consta în a decupa cele doua spatii de adrese în
pagini de aceeasi talie (1024 sau 2048 cuvinte) si de a evidentia un
mecanism de transfer de pagini între memoria virtuala si cea reala.
În orice moment, un program gata de executie va avea plasate în
memorie câteva copii ale paginilor sale virtuale, alese în mod corespunzator
pentru a permite executiei sale sa avanseze.
Sistemul de operare trebuie sa rezolve câteva probleme importante:
a) daca o anumita pagina se gaseste deja în memorie si unde;
b) cum se convertesc adresele virtuale ale programului în adrese reale;
c) ce pagina va fi înlocuita pentru a face loc alteia;
d) cum se poate sti daca pagina evacuata din memorie a fost
modificata si trebuie deci recopiata în memoria auxiliara.
Tabela paginilor
Tabela paginilor constituie mecanismul esential care face sa corespunda
fiecarei pagini virtuale o serie de informatii, actualizate de catre sistem. Un
bit indicator specifica prezenta (sau absenta) paginii în memoria principala.
Daca pagina este în memoria principala, numarul paginii reale este
înscris în tabela.
Un alt bit indica daca pagina a fost modificata în timpul executiei.
Mecanismul de transformare a adreselor este urmatorul: câmpul de
adresa este divizat în doua parti:
a) numarul de pagina, singurul element care se modifica;
b) pozitia în cadrul paginii.
Tabela paginilor contine de asemenea biti de protectie specificând un
anumit nivel al protectiei (protejare în citire, scriere, executie etc.).
Tabela paginilor ofera de asemenea protectia informatiilor în sensul
apartenentei adreselor la domeniul alocat paginii respective.
Paginarea la cerere
Aceasta metoda de gestiune a memoriei consta în încarcarea unei pagini
din memoria virtuala numai daca ea a fost referita.
Spatiul de lucru
O alternativa a paginarii la cerere consta în a plasa în memorie a unui
mic numar de pagini oportun selectionate, acest ansamblu de pagini
numindu-se spatiu de lucru.
Paginare si segmentare
Anumite arhitecturi permit combinarea segmentarii cu paginarea.
Spatiul adreselor virtuale este segmentat si segmentele sunt decupate în
pagini. Structura adresei trebuie sa prevada atunci trei câmpuri:
a) numarul segmentului ;
b) numarul paginii în cadrul segmentului;
c) deplasamentul în pagina.
Segmentarea fiind o divizare logica a spatiului de adrese al programului,
este sarcina programatorului sa defineasca segmentele. Paginarea este
realizata prin intermediul hardware-ului si a sistemului de operare, ea este
deci transparenta pentru utilizator.
Paginarea sistemului de operare
Sistemul de operare este un program chiar daca el nu este chiar ca toate
celelalte (instructiuni privilegiate, mod supervizor etc.), iar cea mai mare
parte a sistemului de operare este supusa paginarii, deoarece, datorita taliei
sale el nu poate fi stocat în întregime în memoria principala. Fac exceptie de
la aceasta regula nucleul si o parte a programelor de gestiune a memoriei si
intrarile/iesirile.
Programele de serviciu sunt de asemenea paginate. Ca regula generala,
programele care se executa într-un sistem multiprogramat modern nu au
decât câteva pagini în memoria centrala.
Tendintele actuale sunt pe de o parte de a trata majoritatea functiunilor
sistemului de operare ca procese utilizator si pe de alta parte de a profita de
microelectronica si de a încredinta hardware-ului sau microprogramarii
sarcinile frecvente.
Organizarea intrarilor/iesirilor
Intrarile/iesirile constituie domeniul cel mai delicat în conceptia si
realizarea unui sistem de operare. Importanta lor este fundamentala, dar
orice generalizare devine dificila prin varietatea unitatilor periferice si a
procedurilor de intrare/iesire utilizate în sistemele de calcul actuale.
Dificultatile se refera atât la aspectele materiale cât mai ales la
necesitatea de a asigura o gestiune optimala a resurselor sistemului precum
si simplificarea sarcinii utilizatorilor acestuia.
Iata câteva aspecte ale problemelor care se ridica:
a) diversitatea functionala a unitatilor periferice: imprimante laser,
unitati de discuri magnetice si optice, cartuse magnetice etc.
b) diferenta de viteza între unitatile periferice: de la câteva
caractere pe secunda ale tastaturii sau terminalului, la câteva
milioane de caractere într-o secunda pentru o unitate de discuri;
c) diversitatea de codificare si structurare a informatiilor
transferate: ASCII, EBCDIC, binar, cuvinte, octeti, blocuri;
d) diferenta între metodele de acces ale unitatilor: acces secvential
sau aleator, adresaj complet diferit pentru unitatile de banda, discuri
sau mari memorii de arhivare;
e) diferenta între conditiile de partajare a perifericelor: o unitate
de discuri sau ecranul terminalului pot fi utilizate în acelasi timp de
catre mai multe procese, în timp ce o imprimanta nu poate fi
partajata decât în timp si numai pentru job-uri întregi;
f) marea diversitate a conditiilor de eroare: eroare de paritate,
imprimanta fara hârtie, eroare de pozitionare a unui cap de
citire/scriere pe disc, unitate deconectata, eroare de adresare etc.;
g) complexitatea sistemelor de legatura între periferice si unitatea
centrala: DMA, canale, bus, unitati de comanda, unitati de
telecomunicatii etc.;
h) gradul înalt de paralelism al operatiilor;
i) necesitatea protejarii utilizatorilor: "ascunderea" anumitor detalii
legate de operatiile de intrare/iesire;
j) necesitatea de a asigura independenta programelor fata de tipul
perifericelor utilizate.
Pentru rezolvarea acestor probleme, sistemul de operare încearca sa
trateze toate perifericele de o maniera uniforma (periferice virtuale,
codificare interna a caracterelor etc.), încredintând toate prelucrarile
particulare modulelor specializate, numite gestionari de unitati periferce
device handlers, drivers].
Ca structura interna, acest nivel al sistemului de operare care se ocupa
cu gestiunea intrarilor/iesirilor, se poate detalia pe subnivele, astfel:
a) proceduri standard (programe de biblioteca) utilizate de catre
aplicatii si continând cereri catre supervizor;
b) un software de intrare/iesire independent de unitatile periferice;
c) drivere, comandând fiecare unitate în detaliu;
d) programe de serviciu ale întreruperilor, actionând în colaborare
cu functiunile nucleului.
Utilizatorul dispune de un set de instructiuni de intrare/iesire virtuale,
spre deosebire de instructiunile de intrare/iesire în cod masina, specifice
sistemului de operare.
Instructiunile de intrare/iesire virtuale se prezinta într-un limbaj de
programare evoluat sub forma unui apel de procedura sistem (read, write,
print etc), cu argumentele necesare de apel (nume variabile sau fisier, talie,
format, unitate logica etc.).
Aceste instructiuni sun înlocuite prin procedurile sistem corespunzatoare
în timpul fazei de compilare.
Exista de asemenea probleme de protectie la nivelul intrarilor/iesirilor.
În acest context, sistemul de operare verifica corectitudinea convertirii
adreselor virtuale în adrese reale în momentul initializarii, împiedicând
modificarea acestora înaintea terminarii operatiei de intrare/iesire.
Fisiere si gestiunea fisierelor. SGF.
Gestiunea fisierelor este serviciul cel mai vizibil oferit utilizatorului de
catre un sistemul de operare. Cea mai interesanta situatie apare atunci când
memorarea se face pe suport magnetic, cu accent pe suportul disc, cel mai
convenabil tip de suport magnetic.
Gestiunea fisierelor privita de utilizator
Un volum poate fi o rola de banda, un ansamblu formând un disc de
masa, un disc cartus, un disc flexibil (discheta).
În cadrul unui volum, informatiile sunt grupate de catre SO la indicatia
utilizatorului în ansambluri distincte numite fisiere.
Utilizatorul are acces prin programele sale la o (mica) entitate din cadrul
unui fisier, cunoscuta sub numele de articol. Putem spune ca un articol este
o subdiviziune a unui fisier care are un înteles de sine statator.
Informatiile dintr-un articol sunt de regula grupate în subdiviziuni
numite câmpuri sau atribute. Fiecare câmp sau atribut are în fisier o
anumita valoare. O pereche (atribut, valoare) o vom numi cheie. O cheie
unica se numeste index de articol.
Lungimea de reprezentare a unui articol poate fi constanta pentru toate
articolele sau poate sa varieze de la un articol la altul, deci putem avea
articole de format fix sau variabil.
Sistemul de gestiune a fisierelor (SGF) este un ansamblu de rutine de
legatura între utilizatori si componenta sistemului de intrare/iesire la nivel
fizic pentru operarea cu fisiere. Utilizatorul dipune de o serie de operatii
primitive pe care le poate solicita SGF-ului pentru serviciile dorite.
Conceptul de fisier abstract
Se poate defini un fisier ca o functie f: N T, unde N este multimea
numerelor naturale iar T multimea valorilor posibile pentru un tip de data
deja definit. Pentru tipurile de date obisnuite (integer, char, real) avem dea
face cu un fisier obisnuit.
Prin f (i) notam multimea valorilor câmpurilor articolului al i-lea din
fisier.
Daca tipul de data este la rândul sau un tip fisier, avem de-a face cu o
baza de date.
Principalele operatii asupra unui fisier notat f, presupunând ca înaintea
efectuarii operatiei, fisierul are n articole, sunt urmatoarele:
a) Citirea Read articolului k înseamna obtinerea valorii f (k);
b) Scrierea Write înseamna adaugarea unui nou articol la fisier. Deci
fisierul f cu n articole se transforma în fisierul f' cu n +1 articole
definite astfel:
f' (i) = f (i) , "i 1, 2, ..., n};
f' (n + 1) = x, unde x este valoarea articolului adaugat.
c) Inserarea Insert unui nou articol cu valoarea x, dupa articolul cu
numarul de ordine k înseamna obtinerea unui nou fisier f' cu n+1
articole:
f' (i) = f (i) , "i 1, 2, ..., k};
f' (k + 1) = x;
f' (i + 1) = f (i) , "i k+1, ..., n}.
Se observa ca scrierea este echivalenta cu inserarea la sfârsitul
fisierului iar inserarea dupa pozitia 0 înseamna adaugare la
începutul fisierului.
d) }tergerea Delete articolului k înseamna obtinerea unui nou fisier
f':
f' (i) = f (i) , "i 1, 2, ..., k - 1
f' (i - 1) = f (i) , "i k+1, ..., n}.
e) Modificarea Modify, Update, Replace articolului k cu un altul
de valoare x înseamna obtinerea fisierului f' cu n articole, astfel:
f' (i) = f (i) , "i 1, 2, ..., k - 1
f' (k) = x;
f' (i) = f (i) , "i k+1, ..., n}.
Tipuri de acces la articole
a) Accesul secvential la un articol f (i) presupune i - 1 accese în
ordine, la articolele cu numerele de ordine 1, 2, ..., i - 1.
b) Accesul direct random access presupune existenta unui mecanism
de obtinere a articolului cautat fara a parcurge secvential toate
articolele care-l preced. Mecanismul de acces este de doua feluri:
acesul direct prin numar de pozitie (adresa) are loc atunci
când i se furnizeaza SGF-ului o valoare i si acesta returneaza
f (i) (acces relativ);
prin continut, are loc atunci când i se furnizeaza SGF-ului o
cheie (a, v) si acesta returneaza acel articol i pentru care f
(i). a = v.
Clasificarea fisierelor
a) Dupa lungimea unui aricol:
fisiere cu articole de format fix;
fisiere cu articole de format variabil.
b) Dupa posibilitatea de afisare sau tiparire:
fisiere text al caror continut poate fi afisat pe ecran sau la
imprimanta;
fisiere binare, formate din siruri de octeti consecutivi, fara
nici-o semnificatie pentru afisare.
c) Dupa suportul pe care este rezident fisierul
fisiere pe disc magnetic;
fisiere pe banda magnetica;
fisiere pe imprimanta;
fisiere tastatura;
fisiere pe ecran;
fisiere pe plotter, digitizor;
fisiere pe cartele perforate;
fisiere pe banda de hârtie perforata.
d) Dupa modurile de acces
fisiere secventiale;
fisiere în acces direct:
i) acces direct prin adresa;
ii) acces direct prin continut:
secvential-indexat;
selectiv;
multilista
B - arbore;
Referirea unui fisier
Utilizatorul se refera la un fisier în conformitate cu anumite reguli
sintactice impuse de catre SO. În general, referirea la un fisier se face
printr-un sir de caractere, diferite de spatiu. }irul de referinta contine 5
zone, plasate de la stânga la dreapta, astfel:
Periferic : Cale Nume . Tip ; Versiune
Periferic indica numele perifericului suport al fisierului, impus de
sistemul de operare.
Cale desemneaza subdirectorul din cadrul discului unde se afla fisierul
cautat.
Nume este o succesiune de litere si cifre date de creatorul fisierului.
Tip sau extensie a numelui este data tot de utilizator si ea reflecta
continutul fisierului.
Versiune este o notiune specifica unui anumit SO si diferentiaza mai
multe versiuni ale aceluiasi fisier.
Actiunile SGF la nivel de articol
a) citire pentru suporturile disc, banda magnetica, cartele, tastatura;
b) scriere pentru suporturile disc, banda magnetica, ecran,
imprimanta, plotter;
c) inserare, stergere, modificare, pentru suporturile de tip disc.
Actiunile SGF la nivel de fisier
a) functiile de deschidere si închidere (open, close). Open este
operatia de deschidere si contine actiunile SGF efectuate înaintea
primului acces la fisier, iar close (închidere) dupa ultimul acces.
b) alte operatii globale:
crearea unui fisier;
stergerea unui fisier;
copierea unui fisier în alt fisier;
schimbarea numelui unui fisier (redenumire, mutare);
listarea unui fisier;
concatenarea mai multor fisiere;
compararea a doua fisiere;
fuzionarea a doua sau mai multe fisiere;
sortarea (ordonarea) articolelor unui fisier;
operatii de filtrare a unui fisier.
Descriptorul de fisier este un articol special care contine informatiile
de descriere ale unui fisier. Locul sau de memorare este în directorul
fisierului. Apar patru grupe de informatii:
a) identificarea fisierului (N, I), unde N este numele simbolic al
fisierului (specificatorul de fisier fara periferic), iar I este un numar
prin care descriptorul este reperat pe disc) în mod direct;
b) adresele fizice ocupate de fisier;
c) controlul accesului la fisier;
d) informatii de organizare calendaristice.
Pentru controlul accesului la fisiere se foloseste matricea de control
unde a (i, j)=1 daca utilizatorul i are drept de acces la fisierul j, si 0 în rest.
Clase de utilizatori:
a) proprietar: cel care creaza fisierul si stabileste drepturi de acces la
fisier;
b) utilizatori specificati: nominalizati de proprietar, cu statut special
în raport cu fisierul;
c) grup sau proiect: care pot folosi împreuna un fisier;
d) public: restul utilizatorilor.
Moduri de organizare a fisierelor
a) organizare secventiala;
b) fisiere în acces direct prin pozitie;
c) fisiere în acces direct prin continut;
d) fisiere inverse: pe lânga fisierul de baza se creaza automat un fisier
invers care contine pentru fiecare cheie specificata, adresele disc la
care se afla articolele care contin cheia respectiva. Daca n , n , ..., np
sunt numerele de articole care contin cheile 1, 2, ..., p, iar a ij adresa
articolului j cu cheia i, atunci, daca j k, aij aik "i.
e) fisiere multilista: se definesc atribute si valori cheie. SGF ataseaza
fiecarei chei un pointer catre articolul urmator care contine aceeasi
cheie. Exista atâtea liste câte chei sunt. Fiecare articol participa la c
liste, unde c este numarul de scrieri ale articolului, adica numarul de
aparitii ale valorii unei chei. Se creaza o zona cu cheile fisierului si
adresele primelor articole (fisierul director). Avem ca :
daca j k atunci aij aik "i;
daca i k atunci aij akj , care apare de c ori.
f) fisiere secvential-indexate: articolele sunt scrise pe suport în
acces secvential si plasate în ordinea crescatoare a valorilor
indexului, rezulta ca se creaza o tabela de indecsi care are o parte
principala si o parte de depasire. Exista trei nivele pentru
tabelele de indecsi:
nivelul 3: fisier: numarul intrarilor este egal cu cel al
volumelor;
nivelul 2: volum: numarul intrarilor este egal cu numarul
cilindrilor din cadrul volumului;
nivelul 1: cilindru, contine atâtea intrari câte pagini sunt în
cilindrul respectiv.
g) fisiere selective: au functia de regasire materializata printr-un
calcul al CPU, numita functie de randomizare f : multimea
valorilor posibile pentru index 0, 1, ..., n - 1 Articolele care
au aceeasi valoare pentru functie se numesc sinonime.
h) fisiere organizate în B - arbori regulari. Fiecare nod este prevazut
cu m casute (pentru m chei unice). În fiecare nod pot fi maxim m si
minim m div 2 chei. Înainte de prima cheie, între 2 chei si dupa
ultima cheie sunt pointeri spre noduri subordonate.
Actiunile SGF la nivel de suport disc
SGF are trei sarcini principale:
a) sistem de regasire a fisierelor pe disc;
b) evidenta spatiului neutilizat pe disc;
c) utilizarea acestui spatiu pentru crearea sau extinderea fisierelor.
Sisteme de cataloage (directoare)
Sunt tabele care contin fisierele existente si informatii necesare
accesului la aceste fisiere. Fiecare intrare în director contine un descriptor
de fisier. Principalele operatii asupra cataloagelor sunt urmatoarele: cautare,
inserare, stergere, listare, salvare/restaurare etc.
Integritatea informatiilor
Deoarece utilizatorul depinde de sistemul de fisiere pentru tot ceea ce
vizeaza aspecte legate de lucrul cu datele sale, este esential ca sistemul sa
fie dotat cu mecanisme de salvare a informatiilor permitând eventual
reconstituirea fisierelor pierdute într-un accident software sau hardware.
Printre metodele comune utilizate în acest sens, sunt urmatoarele:
a) salvare completa backup , care permite recopierea pe banda
magnetica a fisierelor disc, o data la doua sau trei zile. În caz de
accident, se pot reconstitui fisierele care existau în momentul
ultimului backup;
b) salvare incrementala, care permite recopierea doar a informatiilor
modificate dupa ultimul backup. Aceasta abordare permite
reducerea frecventei backup-urilor masive (de exemplu, o data pe
saptamâna sau pe luna). În cazul reconstructiei fisierelor,
procedurile de lucru sunt mai complexe;
c) dublarea sistematica a fisierelor disc, care consta în a pastra
întotdeauna doua copii ale fiecarui fisier pe doua unitati de disc
diferite. Aceasta metoda necesita mai putine interventii din partea
operatorilor, dar implica dublarea spatiului disc disponibil.
Servere de fisiere
O abordare moderna a gestiunii fisierelor, foarte la moda datorita
avântului informaticii distribuite, consta în a încredinta unui calculator
independent întreaga gestiune a fisierelor specifice unei comunitati de
utilizatori conectati la o retea locala. Un astfel de calculator se numeste
server de fisiere. În aceasta arhitectura, partea majora a spatiului disc este
concentrata în jurul serverului, celelalte calculatoare din retea nu au nevoie
de capacitate disc locala pentru fisierele lor.
O alta realizare recenta, datorata integrarii tot mai pronuntate a
calculatoarelor si a retelelor este aceea a dispersate într-o retea. Utilizatorul
unui astfel de sistem nu stie si nu are nevoie sa stie în care calculator sunt
stocate fisierele sale. În momentul în care o cerere de acces este adresata
sistemului de fisiere, acesta determina pozitia fisierului cautat si, utilizând
serviciile retelei, pune la dispozitia solicitantului o copie a fisierului
respectiv.
Alocarea resurselor
Într-un mod general, definim o resursa ca fiind un element necesar unui
procesor pentru a asigura executia sa în bune conditiuni.
Resursele materiale ale unui sistem de calcul (CPU, memorii,
dispozitive de intrare/iesire etc.), sunt disponibile în cantitate limitata si
trebuie sa fie partajate între diferite procese.
Produsele software si fisierele, daca pot fi partajate, fac de asemenea
parte dintre resursele pe care sistemul trebuie sa le gestioneze.
Mecanismele de alocare ale unei resurse particulare sunt realizate pe
diferitele nivele ale sistemului de operare. De exemplu, dispecerul decide
daca alocarea CPU si alocarea unui fisier al unui proces este implementata
la nivelul gestiunii fisierelor.
Strategia de repartizare si de alocare a resurselor trebuie sa fie
determinata global, pentru tot sistemul. La nivelul sistemului, se iau decizii
în legatura cu planificarea globala a activitatii, se decide, de exemplu,
crearea de noi procese, sau asteptarea, pe baza resurselor disponibile,
nivelul de prioritate al unui job.
Obiectivele acestui nivel al sistemului pot fi rezumate astfel:
a) asigurarea unei bune utilizari a resurselor: contabilizarea si
furnizarea de statistici asupra resurselor principale;
b) crearea de noi procese si atribuirea unui nivel de prioritate
corespunzator: se permite fiecarui proces existent în sistem sa
obtina resursele necesare în limite de timp rezonabile;
c) excluderea mutuala a proceselor care solicita aceeasi resursa
nepartajabila si si evitarea situatiilor de blocare (asteptare fara
sfârsit a unei resurse de catre mai multe procese).
Procesul sistem care se ocupa de toate aceste probleme se numeste
planificator scheduler . Planificatorul determina ordinea de executie a joburilor
lansate de utilizatori, el alege momentul pentru lansarea unei executii
si refuza accesul unui utilizator interactiv daca numarul de utilizatori
conectati poate conduce la o degradare inacceptabila a timpului de raspuns.
Scopul planificatorului este de a asigura o exploatare echilibrata si în
consecinta un serviciu satisfacator pentru toti utilizatorii.
Interfata utilizator-sistem
Interfata între utilizator si sistemul de operare se efectueaza prin
intermediul unui limbaj, numit limbaj de comanda. Natura acestui limbaj
depinde de sistemul considerat.
Sistemele batch sunt dotate cu un limbaj relativ suplu si puternic,
permitând utilizatorului sa specifice în avans succesiunea prelucrarilor de
realizat, tinând cont de toate alternativele posibile.
Sistemele interactive ofera interfete mai simple prin care utilizatorul
poate urmari derularea job-ului sau si decide succesiunea operatiilor pe
masura ce se prezinta situatiile posibile.
În majoritatea sistemelor actuale, modurile de lucru batch si multiacces
coexista, iar limbajul de comanda este adaptat în mod corespunzator.
Tendinta actuala este de a simplifica sarcina utilizatorului, propunându-i
un repertoar de comenzi usor de utilizat. Aceste comenzi se exprima sub
forma cuvintelor cheie (Login, Logout, Edit, Fortran, Run, File, Copy,
Help etc.), urmate de anumiti parametri. Este de asemenea normala
procedura de lucru prin care se realizeaza prescurtarea comenzilor (de
exemplu, fl în loc de file list) sau regruparea acestora în fisiere executabile,
un fel de macro-comenzi, de exemplu, se poate înlocui secventa Compile,
Link, Load, Run prin procedura Execute.
Directivele pe care utilizatorul le furnizeaza sistemului cu ajutorul
limbajului de comanda sunt interpretate de catre interpretorul de comenzi
command interpreter . Acesta citeste comenzile provenind de la terminal si
dupa interpretarea acestora realizeaza serviciile solicitate. Datorita
dialogului, sistemul trebuie sa semnaleze faptul ca el "asculta" si este gata
sa primeasca instructiunile utilizatorului, raspunzând comenzilor si
comunicând disponibilitatea sa prin afisarea pe ecran a unui caracter special
prompt , invitând utilizatorul de a formula noi cereri.
Comenzile trimise catre sistem sunt o forma de cereri la supervizor
sistem calls , cu deosebirea ca, în loc sa provina dintr-un program sau
dintr-o procedura de biblioteca, aceste comenzi sunt comunicate direct
sistemului de catre utilizator.
Majoritatea limbajelor de comanda reflecta structura interna a sistemului
de operare, neputând fi schimbate decât cu mare greutate. Totusi, în cazul
sistemului Unix, interpretorul de comenzi, numit shell, poate fi modificat
sau chiar înlocuit de catre utilizator, care poate sa comunice astfel cu
sistemul într-un limbaj convenabil ales.
Shell-ul interpreteaza comenzile provenind de la un terminal sau de la
un fisier shell script si poseda structuri de control puternice, permitând
executia conditionata sau repetata a unei succesiuni de comenzi.
Cu abordarea shell, este usor de a combina proceduri existente si diverse
elemente de programare; adesea se utilizeaza shell-ul pentru a se evita
scrierea de noi programe.
Interfata utilizator grafica
Pâna la debutul anilor '80, toate interfetele utilizator erau bazate pe
limbaje de comanda ca shell-ul sistemului Unix. Pentru fiecare actiune de
efectuat, utilizatorul trebuia sa cunoasca si sa tasteze numele comenzii.
În laboratoarele Xerox Park, a fost elaborat un nou tip de interfata, si
anume interfata grafica GUI: Graphical User Interface , bazata pe
utilizarea unui ecran grafic în locul unui ecran alfanumeric.
Au aparut noi concepte, principalele fiind acelea de ferestre, pictograme,
meniuri care defileaza, mouse etc.
Acest tip de interfata a devenit la moda prin intermediul familiei
Macintosh elaborata de firma Apple.
La ora actuala, majoritatea sistemelor de calcul utilizeaza interfete
utilizator grafice.
Introducerea grafismului în interfetele utilizator a revolutionat lumea
informaticii, în principal prin aceea ca permite publicului larg sa utilizeze
calculatoarele prin imagine, fara a cunoaste un jargon specific.
Dupa revolutia imaginii se estimeaza ca va veni revolutia sunetului,
recunoasterea vocala din cadrul interfetelor om -masina.
8 SISTEMELE DE OPERARE ACTUALE
Sistemele de operare se clasifica în doua categorii:
a) sisteme proprietare, care sunt sisteme specifice unei masini sau
unei game de masini ale unui anumit constructor, ca de exemplu
VMS, elaborat de firma DEC pentru gama VAX, MS-DOS, pentru
microcalculatoare bazate pe microprocesoare Intel, VM, pentru
calculatoare IBM, MACOS pentru Macintosh al firmei Apple etc.
b) sisteme deschise, care sunt sisteme portabile pe diverse masini.
Sistemul Unix este exemplul tipic al unui sistem deschis, el a fost
implementat pe masini dintre cele mai diverse, de la
microcalculatoare si pâna la supercalculatoare.
Sistemele proprietare au tendinta sa dispara în beneficiul sistemelor
deschise standard.
O noua generatie de sisteme de operare deschise se dezvolta la ora
actuala, (ca de exemplu, sistemul Windows NT al firmei MicroSoft) sisteme
deschise care functioneaza în regim de multiprogramare, multiutilizator, cu
o interfata grafica, si care integreaza multiple posibilitati de lucru în retea.
8.1 Sistemul DOS
DOS Disk Operating System] este un sistem de operare care cuprinde
programe de interfata între utilizator si sistemul de calcul stocate pe disc
magnetic.
Structura sistemului de operare DOS este urmatoarea:
a) Componenta ROM-BIOS este livrata de catre firma producatoare a
sistemului de calcul si are rolul de a egaliza toate diferentele
constructive ale sistemelor de calcul fata de conventiile DOS, deci
calculatoarele sunt compatibile. ROM-BIOS ofera rutine de
întrerupere prin care se realizeaza legatura cu toate unitatile
periferice conectate la sistem;
b) Componenta DISK-BIOS, este independenta de hardware-ul
sistemului de calcul si ea extinde functiile ROM-BIOS. Aceasta
componenta este materializata printr-un fisier disc care, în functie
de versiunea sistemului de operare poate avea unul dintre numele:
IBMBIO.COM, BIO.COM, IO.SYS, si este rezidenta pe discheta
sau discul Wincester de pe care se încarca sistemul. Functiile BIOS
care vizeaza a) si b) au în vedere urmatoarele sarcini:
încarcare sistem de operare;
determinarea si testarea echipamentelor periferice;
testarea memoriei RAM;
functii de baza asupra ecranului video;
functii elementare de citire a tastaturii;
functii elementare de lucru cu dischetele sau cu hard-discul;
functii de lucru cu caseta magnetica;
functii de lucru cu liniile de comunicatie asincrona
(imprimanta, scanner, plotter etc.);
Pentru lucrul cu discul, BIOS opereaza cu cilindri, piste si sectoare.
c) Componenta BDOS extinde functiile BIOS la un nivel mai înalt, în
special catre lucrul cu discurile. Aceasta componenta este
materializata printr-un fisier disc care, în functie de versiunea
sistemului de operare poate avea unul dintre numele:
IBMDOS.COM, DOS.COM, MSDOS.SYS, si este rezidenta pe
discheta sau discul Wincester de pe care se încarca sistemul. Cele
mai importante sarcini BDOS sunt urmatoarele:
gestiunea memoriei: alocarea si eliberarea spatiului de
memorie necesar programelor;
gestiunea proceselor (programelor);
executia operatiilor de intrare/iesire cu periferice de tip
caracter;
tratarea fisierelor disc: creare, deschidere, închidere, accesare,
stergere;
partajarea fisierelor între mai multe procese active la un
moment dat;
gestiunea structurii arborescente a fisierelor si manipularea
directoarelor ;
gestiunea retelelor de calculatoare;
modificari ale sistemului de întrerupere;
gestiunea ceasului intern si a calendarului.
d) Componenta COMMAND are ca sarcina principala preluarea
comenzilor formulate de utilizator de la tastatura si lansarea lor în
executie. Aceasta componenta este materializata prin fisierul disc
COMMAND.COM. Comenzile DOS sunt de doua tipuri:
comenzi interne, înglobate în COMMAND si încarcate
permanent în memorie. De regula, acestea sunt comenzi mai
simple si de prima utilitate: rezumate de disc, copieri de fisiere
etc
comenzi externe, rezidente pe disc sub forma unor programe
executabile sau sub forma unor fisiere de comenzi (fisiere text
în care sunt apelate alte comenzi DOS). De regula, comenzile
externe sunt mai complexe decât cele interne.
În timpul introducerii comenzilor, DOS recunoaste o serie de functii de
control, din care amintim câteva:
<CTRL/C> sau <CTRL/Break>: abandoneaza linia de comanda;
<F3>: copiaza pe ecran ultima linie introdusa;
<CTRL/P>: trimite în ecou iesirea pe ecran si imprimanta;
<CTRL/N>: anuleaza efectul lui <CTRL/P>;
<CTRL/S>: opreste temporar defilarea ecranului, repornirea se
realizeaza prin apasarea oricarei taste cu exceptia <CTRL/C>;
<F6> sau <CTRL/Z>: insereaza marcator de sfârsit fisier;
<F1>: copiaza un caracter din sablon si îl afiseaza;
<F2>: copiaza toate caracterele care preced un caracter specificat.
Generarea sistemului de operare DOS pe o discheta sau pe un harddisc
se realizeaza prin intermediul unor comenzi standard, stergând toate
informatiile vechi de pe discul respectiv. Etapele generarii unui disc DOS
sunt urmatoarele:
a) Partajarea hard-discului: împartirea în una pâna la patru zone
contigue numite partitii. În acest fel, în loc de un singur disc mare,
DOS "vede" mai multe discuri mici. Operatia de partajare se
realizeaza cu ajutorul programului FDISK, care printr-un dialog cu
utilizatorul realizeaza partitionarea la dimensiunile dorite;
b) Formatarea discului. Comanda DOS FORMAT realizeaza
formatarea discului (împartire în cilindri, piste, sectoare) si
verificarea sectoarelor sale. Tot prin aceasta comanda se creaza
discul sistem DOS (optiunea /S), iar ca efect, pe discul respectiv se
realizeaza urmatoarele:
în sectorul 0 se pune programul bootstrap de încarcare a
sistemului de operare;
se depun pe disc fisierele IBMBIO.COM, IBMDOS.COM si
COMMAND.COM;
în restul sectoarelor se pune valoarea 0.
Daca s-a procedat la partajarea hard-discului este necesara
formatarea tuturor unitatilor de disc logic care au ca suport fizic
discul partajat. Este suficienta formatarea cu optiunea "/S" numai a
uneia dintre partitii (cea care este declarata activa prin FDISK);
c) Crearea fisierului de configurare. La fiecare lansare a sistemului
se executa o operatie de configurare prin care se fixeaza valorile
unor parametri sistem, cum ar fi:
numarul fisierelor deschise simultan;
numarul zonelor tampon pentru operatiile de intrare/iesire;
numarul si dimensiunea stivelor;
conditia de sesizare a tastarii <CTRL/Break>;
conventiile de tara, timp, moneda;
precizarea unor noi drivere de intrare/iesire;
Acesti parametri sunt precizati prin intermediul unui fisier text
numit CONFIG.SYS. Daca fisierul nu este prezent pe disc, atunci
DOS atribuie acestor parametri niste valori implicite, care depind de
tipul sistemului de calcul. De obicei, continutul acestui fisier este
stabilit la generare în functie de configuratia hardware si de
aplicatiile care vor fi rulate pe sistemul respectiv. Fisierul se creaza
simplu, cu ajutorul unui editor de texte, eventual el poate fi pregatit
dinainte, urmând a fi copiat pe noul disc;
d) Crearea fisierului de comenzi initiale. În momentul lansarii
sistemului, dupa fixarea parametrilor de configurare si dupa
încarcarea interpretorului de comenzi, DOS cauta pe disc un fisier
cu numele AUTOEXEC.BAT. Acesta este un fisier text în care
utilzatorul trece toate comenzile DOS care se doresc a fi executate
la lansarea sistemului. De obicei, aceste comenzi se refera la:
fixarea de catre utilizator a datei si orei exacte de pornire;
fixarea modului de afisare a prompterului de invitare la
comenzi;
precizarea directoarelor de pe disc unde DOS cauta comenzile
externe.
La fel ca si CONFIG.SYS, fisierul AUTOEXEC.BAT poate fi
pregatit (eventual în avans) folosind un editor de texte.
e) Copierea fisierelor dorite pe discul sistem. Se realizeaza cu
comanda XCOPY.
Sistemul DOS dispune de comanda interna SELECT destinata realizarii
automate a ultimelor 3 etape.
Organizarea si specificarea fisierelor DOS
Sistemul de operare DOS, începând cu versiunea 2.0 adopta un sistem
de fisiere organizat arborescent. În forma cea mai simpla, un fisier obisnuit
se specifica astfel: nume. tip, unde nume are maximum 8 caractere, iar tip
are maximum 3 caractere.
Fisierele speciale DOS au nume predefinite, care nu pot fi utilizate ca
nume pentru fisierele obisnuite. Numele rezervate sunt:
CON desemneaza tastatura, daca este folosit ca fisier de intrare,
respectiv ecranul terminalului, daca este folosit ca fisier de iesire;
PRN (având ca sinonim LPT1), LPT2, LPT3 desemneaza una dintre
imprimantele paralele;
AUX (având ca sinonim COM1), COM2, COM3 si COM4
desemneaza unul dintre adaptoarele de comunicatii asincrone);
NUL este numele unui fisier (echipament) fictiv. Folosit ca fisier de
intrare genereaza imediat pentru sistemul de gestiune a fisierelor
marcatorul de sfârsit de fisier, iar folosit ca fisier de iesire,
informatiile "scrise" în el nu sunt de fapt depuse nicaieri.
În forma cea mai generala, un fisier pe suport disc se specifica prin cele
patru zone, adica: aperiferics acales nume a.tips, unde:
perferic se va specifica printr-o litera urmata obligatoriu de ":".
DOS poate avea maximum 26 de periferice de tip disc notate cu
literele alfabetului, începând cu A. În mod obligatoriu literele A: si
B: desemneaza dischete. Daca sistemul de calcul dispune de hard
disc el (primul dintre ele) va fi notat cu C:, apoi pot urma si alte
periferice de tip disc. Daca lipseste specificarea pentru periferic,
sistemul presupune ca este vorba despre perifericul implicit;
cale indica, dupa caz, succesiunea directoarelor de la radacina pâna
la fisier (primul simbol din cale este "t ) sau de la directorul curent
pâna la fisier (când cale nu începe cu "t ). Separarea directoarelor
DOS se face cu simbolul "t . Daca specificarea de cale lipseste,
atunci sistemul considera ca fisierul face parte din directorul
curent. Sistemul DOS retine câte un director curent pentru fiecare
periferic disc din sistem si de aceea, atunci când se trece de la un
periferic la altul fara sa i se indice acestuia calea, sistemul
considera ca este vorba despre directorul curent al perifericului
respectiv.
tip poate lipsi, dar în general se foloseste pentru a indica continutul
fisierului. Câteva tipuri sunt uzuale: BAS, FOR, PAS, C, ASM,
OBJ, EXE, COM, BAT, LST, DAT, DOC, TXT, MAP, LIB, TMP,
BAK.
Unele comenzi DOS accepta specificarea generica a unei familii de
fisiere. Aceasta presupune folosirea, numai în zona de nume sau tip
(eventual în ambele) a simbolurilor speciale: "*", care poate substitui un
grup de caractere, sau "?", care poate substitui un caracter pe pozitia pe care
se gaseste.
Iata câteva exemple de nume de fisiere:
PROG.PAS, PROG;
B: ALFA. UNU, B: ALBA. DOI, B: ALGA. COM;
C: t programet pascalt *. PAS
Primele doua fisiere se afla pe perifericul implicit si în directorul curent.
Urmatoarele trei fisiere sunt pe discul B: si în directorul implicit.
Specificarea generica PROG.* include primele doua fisiere. Specificarea
B: AL?A.* contine cele trei fisiere de pe discul B:.
Specificarea C: t programet pascalt *. PAS contine toate textele sursa
Pascal aflate în directorul numit pascal, care este subdirector al directorului
programe, care este subdirector al radacinii discului C:. Daca directorul
curent este t programe, atunci specificarea poate fi facuta si sub forma C:
t pascalt *. PAS.
Structura interna a unui disc DOS
Un sector al unui disc este fie liber, fie ocupat de un fisier anume, fie
contine informatii destinate special sistemului de operare.
În sistemul DOS, unitatea de alocare a spatiului pe disc este cluster-ul.
Un cluster este o succesiune de 1 pâna la 8 sectoare vecine, alocate
împreuna aceluiasi fisier. Dimensiunea unui cluster este o constanta care
depinde de tipul discului si de tipul sistemului de calcul. Valoarea acestei
constante este în cazurile urmatoare:
1 sector / cluster, pentru o discheta simpla fata;
2 sectoare / cluster, pentru o discheta dubla fata;
4 sectoare / cluster, pentru un hard disc al unui IBM PC / AT;
8 sectoare / cluster, pentru un hard disc al unui IBM PC / XT;
Pentru a vedea modul în care un anumit fisier utilizeaza clusterii unui
disc fizic, este necesar sa parcurgem mai multe etape, care în abordarea top -
down (de sus în jos) ar fi:
a) partitionarea unui hard disc în discuri logice;
b) structura si alocarea spatiului la un disc logic;
c) structura si reprezentarea unui director;
d) manipularea fisierelor si articolelor.
Structura si alocarea spatiului la un disc logic
Un disc logic este fie o discheta fizica, fie o partitie de hard disc, fie un
ramdrive (disc simulat în memoria RAM). Un disc logic este împartit în
patru zone si anume:
a) Zona de boot contine informatii care sunt utilizatecând se încarca
sistemul de operare. Aceste informatii sunt dependente de sistem,
dar în mod tipic contin un program de încarcare;
b) FAT - Tabela de alocare a fisierelor contine informatii cu ajutorul
carora se gestioneaza spatiul pe disc. În FAT este înregistrata starea
zonelor de pe disc divizate în entitati numite clustere. Pentru a
cunoaste lungimea unui cluster indiferent de disc se va specifica
comanda CHKDSK. Alocarea clusterelor se realizeaza prin
intermediul FAT care contine o lista de numere care reprezinta
fiecare cluster alocat pe disc:
daca intrarea în FAT este 0, atunci clusterul este liber;
daca intrarea în FAT este nenula, atunci este un cluster în
folosinta, iar numarul gasit este utilizat pentru a lega diferite
clustere care alcatuiesc împreuna fisierul;
c) ROOT directory - directorul radacina, simbolizat prin " t este
un director în care se memoreaza, pentru fiecare fisier urmatoarele
infirmatii:
numele si extensia sa;
data crearii sau a modificarii (vizibile cu comanda DIR);
numarul de început al clusterului (clusterul care contine
prima înregistrare a fisierului);
atributul fisierului;
d) File - Zona alocata fisierelor contine în prima parte fisierele
sistemului de operare IBMBIO. COM si IBMDOS. COM si în
continuare, fisierele divizate în clustere a caror ordine de legaturi
este pastrata în FAT. Subdirectorii sunt localizati în FAT ca orice
alt fisier, iar atunci când se utilizeaza continutul unui subdirector,
acesta actioneaza ca si directorul radacina.
Principalele comenzi DOS
Interpretorul de comenzi COMMAND. COM se încarca în memorie la
pornirea sistemului de operare. El tine evidenta discurilor implicite si a
directoarelor curente de pe fiecare disc si în plus, efectueaza un numar de
comenzi DOS prestabilite.
Comenzile DOS se împart în doua categorii:
a) comenzi rezidente (interne), sunt comenzile înglobate în
COMMAND. COM;
b) comenzi tranzitorii (externe), sunt cele care solicita existenta pe
disc a unui fisier de tip .COM sau .EXE având ca nume numele
comenzii.
O comanda rezidenta se lanseaza astfel: ... > comanda argumente, iar
o comanda rezidenta: ... > comanda ad:s acales argumente
Ca efect, COMMAND.COM cauta si repereaza pe disc un fisier având
unul din numele: comanda.COM, comanda.EXE, comanda.BAT
Daca se specifica "d:", atunci cautarea se face pe discul specificat, în
caz contrar se cauta pe discul implicit.
Daca se specifica "cale", atunci fisierul se cauta în directorul indicat de
cale
În situatia în care lipseste atât specificarea de disc cât si specificarea de
cale, cautarea se face în ordine:
în directorul curent;
în directoarele specificate prin comanda PATH.
În cazul în care, în acelasi director este reperat mai mult de un fisier din
cele trei, de exemplu, unul de tip COM si altul de tip BAT, prioritatea la
lansare o are COM, apoi EXE si la urma BAT.
O sinteza a formatului comenzilor DOS cu principalele optiuni este
prezentata în figura urmatoare. Comenzile interne sunt evidentiate prin
litera "I" plasata în dreapta comenzii.
CD d: cale sau CHDIR d: cale I
MD d: cale sau MKDIR d: cale I
RD d: cale sau RMDIR d: cale I
JOIN d1 d2 tdirector /D
FDISK d:
FORMAT d: /S /V
UNFORMAT d:
LABEL d: eticheta_volum
DISKCOMP d1: d2:
DISKCOPY d1: d2:
CHKDSK d: cale fisier tip]][/F /V
RECOVER d:
DIR d: cale fisier tip]][/P /W I
COPY /A /B d: cale fisier . tip
d: cale fisier .tip d: cale fisier .tip I
XCOPY d: cale fisier tip] [d: cale fisier . tip
/A /D: ll-zz-aa /E /M /P /S /V /W
REN sau RENAME d: cale fisier .tip d: cale fisier .tip I
DEL sau ERASE d: cale fisier .tip I
UNDELETE d: cale fisier .tip /LIST /ALL
COMP d: cale fisier .tip d: cale fisier .tip
TYPE d: cale fisier .tip I
PRINT d: cale fisier .tip /C /P /T
SORT /R /+n
FIND /V /C /N "sir" sau d: cale fisier .tip
MORE
EXE2BIN d: cale fisier. COM d: cale fisier. EXE
PATH d: cale d: cale I
APPEND d: cale d: cale
FASTOPEN d: = n
DATE ll-zz-aa I
TIME hh-mm :ss I
BREAK ON OFF I
PROMPT text I
SET nume = valoare I
CLS
MEM /P /C /D
VER I
VOL d: I
HELP comanda
Principalele comenzi DOS pot fi grupate astfel:
a) Comenzi de manipulare a directoarelor:
CD (CHDIR): schimba directorul curent în cel specificat;
MD (MKDIR): creaza un director nou, numai daca nu exista
deja un director cu numele specificat;
RD (RMDIR): sterge un director vid (nu contine nici-un fisier
sau subdirector specificat);
JOIN: realizeaza conectarea unei structuri de fisiere aflata pe
un disc "d1" la structura de fisiere a discului "d2". În urma
comenzii, cele doua sisteme de directoare sunt privite ca si unul
singur, directorul radacina al discului "d1" fiind conectat ca
subdirector cu numele "director" al radacinii lui "d2".
Optiunea "/D" realizeaza operatia inversa, adica deconectarea,
iar atunci se vor specifica numai "d1" si "/D";
b) Comenzi de manipulare a unui disc:
FDISK: realizeaza partajarea unui hard disc în partitii;
FORMAT: initializeaza discul specificat prin "d:" la un format
standard acceptat de catre DOS. Dupa ce se scrie pe tot discul,
se creaza directorul radacina si se initializeaza directorul
radacina precum si tabela FAT. Optiunea "/S" cere ca discul
respectiv sa fie facut disc sistem, optiunea "/V" specifica o
eticheta de volum pentru identificare;
UNFORMAT: permite refacerea unui disc formatat, indicat
prin "d:". Comanda este valabila la DOS 5.0, iar refacerea se
realizeaza prin formatarea doar a partii de început, pâna la
directorul radacina inclusiv. Înainte de scriere, aceasta portiune
se salveaza într-o zona rezervata a discului. Utilizatorul trebuie
sa lanseze comanda UNFORMAT înainte de a scrie ceva pe
discul formatat, iar daca nu se respecta aceasta conditie, sau se
lanseaza FORMAT cu "/U", atunci refacerea nu mai este
posibila;
LABEL: permite crearea sau stergerea unei etichete de volum.
Aceasta eticheta poate fi data si prin comanda FORMAT,
printr-un dialog între sistem si utilizator;
DISKCOMP: permite compararea dischetelor indicate prin
d1" si "d2". Comparatia se face pista cu pista, semnalându-se
diferentele. De regula, aceasta comanda se da pentru a se
verifica daca s-a facut corect o operatie de copiere cu comanda
DISKCOPY;
DISKCOPY: copiaza la nivel fizic, discheta "d1" pe discheta
d2" (daca e nevoie, discheta "d2" este formatata automat);
CHKDSK: analizeaza structura informatiei de pe un disc DOS
si afiseaza un raport asupra starii discului. Optiunea "/F" cere
corectarea (pe cât posibil a) structurii încât sa devina una
valida, iar optiunea "/V" afiseaza o serie de detalii în timpul
executiei comenzii. Daca se specifica un fisier (sau o familie),
atunci se indica numarul de zone necontigue ocupate de fisierul
(fisierele) în cauza.
RECOVER: recupereaza fisierele de pe disc care contin
sectoare defecte, si de asemenea, se marcheaza sectoarele
defecte. Fisierele recuperate primesc nume noi, sub forma:
FILEnnnn REC, unde "nnnn" este un numar de ordine. Toate
fisierele recuperate vor fi plasate în directorul radacina.
c) Comenzi referitoare la fisiere:
DIR: listeaza toate intrarile din fisierul director sau numai cele
specificate. Parametrul "/P" genereaza executia unei pauze ori
de câte ori ecranul este plin de informatii, iar parametrul "/W"
produce o afisare condensata a directorului, listând doar
numele fisierelor, câte cinci nume pe linie;
COPY: copiaza unul sau mai multe fisiere pe un alt disc si
optional, atribuie un nume diferit pentru copie. De asemenea,
COPY poate crea o copie pe acelasi disc. În timpul procesului
de copiere se poate realiza si o concatenare de fisiere, daca se
specifica operatorul "+". Parametrii "/A" si "/B" indica
volumul de date care se va copia si anume:
în intrare: "/A" exclude copierea marcatorului de sfârsit de
fisier, iar "/B" impune copierea întregului fisier;
în iesire: "/A" adauga marcatorul de sfârsit de fisier, iar
B" nu adauga marcatorul de sfârsit de fisier;
XCOPY: permite copierea selectiva de fisiere sau grupuri de
fisiere care pot sa includa si subdirectoare. Ca optiuni, pot fi:
A": copierea fisierelor marcate pentru arhivare;
M": identic cu "/A", dar schimba marcajul de
arhivare;
D": copierea fisierelor modificate dupa data specificata;
E": creaza la destinatie subdirectoarele din sursa;
P": copierea cu confirmare pentru fiecare fisier;
S": copierea din sursa a directoarelor si subdirectoarelor
V":verificare scriere la destinatie (recitire si comparare)
REN (RENAME): schimba numele fisierului specificat;
DEL (ERASE): sterge fisierul cu numele specificat, din
directorul si unitatea specificate sau implicite;
UNDELETE: permite refacerea fisierelor sterse (valabila la
DOS 5.0). În mod obisnuit se reface un singur fisier, dar
optiunea "/ALL" permite refacerea tuturor fisierelor posibile,
caz în care prima litera a numelor acestor fisiere este stabilita
automat. Optiunea "/LIST" permite afisarea fisierelor care pot fi
refacute;
COMP: compara doua fisiere de aceeasi lungime, prin citirea si
compararea continutului lor. Compararea se termina fie la
sfârsit, fie la depistarea a maximum 10 octeti diferiti ( primele
10 diferente sunt afisate);
TYPE: afiseaza continutul fisierului specificat pe dispozitivul
standard de iesire;
PRINT: tipareste o coada (lista) de fisiere de date la imprimanta
în timp ce pe sistem se pot executa alte lucrari;
d) Filtre DOS:
SORT: citeste date de la echipamentul standard de intrare,
sorteaza datele, apoi scrie datele sortate la echipamentul
standard de iesire. Sortarea se efectueaza crescator dupa
codurile ASCII ale caracterelor, sau descrescator ("/R");
FIND: trimite la echipamentul standard de iesire toate liniile
din fisierul specificat în comanda si care contin un sir de
caractere specificat. Parametrul "/V" determina afisarea tuturor
liniilor care nu contin sirul specificat, iar parametrul "/C"
permite afisarea unui contor cu numarul de aparitii a sirului
specificat;
MORE: este un filtru care citeste date de la intrarea standard si
le transpune pe ecran, iar când acesta este plin, se asteapta
apasarea unei taste pentru a se trece la ecranul urmator;
EXE2BIN: este un filtru special care transforma un program
executabil de tip EXE în unul de tip COM;
e) Comenzi de configurare dinamica DOS:
PATH: fixeaza caile de cautare a fisierelor executabile;
APPEND: fixeaza caile de cautare a fisierelor neexecutabile;
FASTOPEN: optimizeaza accesul la fisierele si directoarele
folosite mai des. În acest scop se gestioneaza o zona tampon cu
adresele disc recent utilizate, potrivit principiului memoriei
cache. Parametrul "n" indica numarul de adrese gestionate,
cuprins între 10 si 999, cu valoarea implicita 34;
DATE, TIME, BREAK, PROMPT: se refera la schimbarea
datei, a orei exacte, a sesizarii sau nu a lui <CTRL/Break>, sau
a formei prompterului de invitare la comenzi;
CLS: provoaca stergerea completa a ecranului terminalului
SET: fixeaza valori ale unor parametri aflati într-o zona de
memorie controlata de COMMAND. COM.
f) Comenzi de informare:
MEM: afiseaza continutul memoriei la un moment dat;
VER: afiseaza versiunea sistemului de operare DOS;
VOL: afiseaza eticheta de volum specificat sau a celui curent;
HELP: ofera detalii despre comenzile DOS în general, sau
despre o anumita comanda DOS specificata.
Fisiere de comenzi (BAT) sub DOS
Un fisier de comenzi (al carui tip este . BAT), este un fisier text care
contine una sau mai multe comenzi si/sau directive care se executa
succesiv, fara interventia directa a utilizatorului. Un prim exemplu de fisier
de comenzi DOS este fisierul AUTOEXEC. BAT. Daca acest fisier este
prezent în directorul radacina pe discul de pe care se face încarcarea, DOS
executa automat comenzile din el la fiecare încarcare a sistemului.
Un fisier de comenzi DOS contine mai multe tipuri de constructii:
comenzi DOS propriu-zise;
etichete;
caracterele speciale , <, > si %;
parametrii formali care vor fi înlocuiti la lansare cei actuali;
variabile globale rezidente în interpretorul de comenzi;
variabile locale utilizate în instructiuni repetitive;
directive adresate interpretorului fisierelor de comenzi.
Exemplu: TIPAR. DAT: DIR *. PAS
COPY *. PAS a:
DEL *. PAS
O eticheta se scrie sub forma: : nume, unde caracterul ":" este urmat de
maximum 8 litere sau cifre. O eticheta apare pe o singura linie, la început de
rînd
Caracterele speciale , < si > sunt interpretate în comenzi prin legare în
pipe a doua comenzi, respectiv redirectarea intrarii si/sau iesirii standard a
unei comenzi.
Caracterul % marcheaza parametrii formali, variabilele globale si
variabilele locale.
Într-un fisier de comenzi pot fi specificati pâna la 10 parametri formali,
notati %0, %1, ..., &9. Corespunzator acestora, în linia de comanda care
lanseaza în executie fisierul de comenzi argumentele sunt puse în
corespondenta cu acesti parametri.
Directivele interpretorului fisierelor de comenzi
FOR %% variabila IN (multime) DO comanda;
CALL fisier_comenzi;
IF NOT ERRORLEVEL n comanda, sau
IF NOT sir1 == sir2 comanda sau
IF NOT EXIST fisier
GOTO eticheta
SHIFT
ECHO ON OFF mesaj
PAUSE mesaj
Directiva FOR permite prelucrarea iterativa a unei comenzi dintr-un
fisier de comenzi. %%variabila este o variabila locala de ciclare care va fi
înlocuita secvential cu fiecare membru din multime, apoi comanda este
evaluata si executata. Daca un membru al multimii este o expresie
construita generic (cu * si/sau ?), atunci %%variabila va fi înlocuita pe
rând cu toate numele de fisiere care se potrivesc cu aceasta expresie.
De exemplu, comanda:
FOR %%f IN (*.PAS *.DOC) DO TYPE %%f
va tipari pe ecranul terminalului mai întâi toate fisierele de tip PAS, apoi
pe cele de tip DOC.
Directiva CALL permite apelul (lansarea în executie) a unui fisier de
comenzi din altul. La terminarea fisierului apelat, controlul revine fisierului
apelant. Este posibil ca ultima linie a unui fisier de comenzi sa ceara
lansarea altui fisier de comenzi (fara CALL), si în acest caz se realizeaza o
înlantuire fara revenire a celor doua fisiere.
Directiva GOTO transfera controlul în fisierul de comenzi, în linia de
comanda situata dupa eticheta specificata.
Directiva IF permite executia conditionata a unei comenzi DOS din
fisierul de comenzi, sau a unei alte directive.
Fiecare comanda DOS transmite, în momentul terminarii, un cod cu o
valoare între 0 si 255. De obicei, un cod cu o valoare nenula indica o
situatie neobisnuita, în anumite situatii de programare specificând ramura
pe care s-a terminat programul. Conditia "ERRORLEVEL numar" este
adevarata daca codul de retur al ultimei comenzi este mai mare sau egal cu
numarul scris dupa cuvântul ERRORLEVEL.
Conditia "sir1 == sir2" este adevarata daca valorile celor doua siruri de
caractere coincid, iar cel putin unul din siruri trebuie sa contina un
parametru formal sau o variabila globala.
Conditia "EXIST fisier" este adevarata daca fisierul specificat, simplu
sau generic exista.
Actiunea directivei IF fara NOT înseamna executia comenzii daca
conditia este adevarata, iar daca NOT este prezent, atunci comanda se
executa când conditia este falsa.
Comanda ASK face parte dintr-o familie de programe utilitare oferite
de firma NORTON. Prin intermediul acestei comenzi, utilizatorul poate
interactiona cu fisierul de comenzi.
ASK mesaj, aliteres are ca efect afisarea pe ecran a "mesaj", care nu
contine ",", dupa care asteapta ca utilizatorul sa apese una din literele dintre
paranteze . Daca utilizatorul a tastat a i-a litera din lista, atunci ASK se
termina cu ERRORLEVEL = i. Evident, o succesiune de directive IF
poate realiza o ramificare multipla a executiei.
Exemplu: ASK. BAT: ASK Doriti testare AV?, DdNn
IF ERRORLEVEL 3 GOTO :F{R{
SCAN c: d:
PAUSE
: F{R{
Directiva SHIFT permite folosirea a mai mult de 10 parametri formali.
Efectul ei este acela de a "decala" parametrii formali, facând sa se piarda
parametrul %0, parametrul care înainte era %1 sa devina %0, cel ce fusese
%2 sa devina %1 etc.
Exemplu: STERGE.BAT:
:IAR
SHIFT
IF "%0" == " " GOTO :STOP
DEL %0
GOTO :IAR
:STOP
Lansat cu ...> STERGE a b c d e f g h i j k l va sterge pe rând cele 12
fisiere citate în comanda.
Directiva ECHO permite sa se afiseze (ON) sau sa nu se afiseze (OFF)
comenzile care se executa, sau daca directiva contine un mesaj, se afiseaza
acest mesaj pe ecran.
Directiva PAUSE suspenda executia fisierului de comenzi pâna la
apasarea unei taste.
Întreruperea executiei unui fisier de comenzi se face cu <CTRL/C>.
Sistemul Windows
Windows poate fi considerat ca o extensie a sistemului de operare DOS,
menit pe de o parte sa puna în valoare calitatile DOS înca neexploatate, iar
pe de alta parte sa asigure utilizatorului o interfata grafica deosebit de
atractiva. Aceasta interfata este asigurata atât fata de DOS, cât si fata de
programele de aplicatii, indiferent daca acestea sunt produse de firma sau
sunt dezvoltate de catre utilizator.
Trebuie precizat ca Windows nu este numai o suprafata de operare, ci
o extensie efectiva a DOS. În sustinerea acestui fapt trebuie aratat ca
Windows ofera trei facilitati care direct sub DOS se pot realiza numai cu
mare efort din partea utilizatorului:
a) executia (aproximativ) "simultana" a mai multor aplicatii;
b) transmiterea sub controlul utilizatorului a unor date între aplicatii;
c) realizarea unui mecanism standard de interfata grafica utilizator, la
toate nivelele de aplicare.
Sub Windows pot fi lansate în lucru mai multe aplicatii. O aplicatie
lansata poate fi suspendata temporar. Dupa suspendare poate fi lansata o
alta aplicatie, sau poate fi relansata una dintre cele suspendate. Este deci
limpede ca nu este vorba de multitasking în sensul clasic. Daca un astfel de multitasking este necesar sau nu, aceasta depinde de aplicatii. În orice caz, desi în documentatii se vorbeste de multitasking sub Windows, acesta trebuie înteles în sensul de mai sus.
Singurele aplicatii efectiv executabile în paralel sunt cele oferite de
DOS:
a) listarea la imprimanta în paralel cu executia altor programe;
b) supravegherea ceasului sistem în vederea lansarii unui program la o
ora fixata.
Realizarea schimbului de date
Windows gestioneaza implicit o aplicatie numita ClipBoard. Prin
intermediul acesteia utilizatorul poate depozita temporar, din orice aplicatie, informatii din zona rezervata ClipBoard. Informatia poate fi de tip text sau grafica. Tot prin ClipBoard utilizatorul poate edita continutul informatiei depozitate. În sfârsit, din orice aplicatie se pot extrage informatii depozitate în zona ClipBoard. În acest mod se pot transmite informatii de la o aplicatie la alta.
Interfata grafica Windows (GUI - Graphics User Interface)
Elementul esential de intrare în aceasta interfata este tastatura. Pentru
simplificarea muncii, Windows "prefera" pentru cele mai multe raspunsuri
simple unul sau doua apasari ale unui buton de la mouse.
Elementul esential de afisare în aceasta interfata este fereastra. Aceasta
este o portiune dreptunghiulara afisata într-o zona a ecranului, destinata
comunicarii utilizator-Windows. Principalele componente ale unei ferestre
sunt:
a) Titlul ferestrei;
b) Butonul de închidere / deschidere a ferestrei (stânga sus);
c) Butonul de minimizare (triunghiul cu vârful în jos plasat în partea
dreapta sus);
d) linia pentru meniuri pull-down (File, Window, Help etc.);
e) scroll-bar pentru defilare verticala (plasat pe latura verticala din
dreapta si prevazut cu doua sageti pentru ridicare sau coborâre si un
buton nescris pentru a marca pozitia curenta);
f) scroll-bar pentru defilare orizontala (plasat pe latura orizontala de
jos, cu acelasi continut ca si scroll-bar pentru defilare verticala);
g) continutul propriu-zis al ferestrei care este de fapt partea cea mai
mare a ei, plasat între cele doua scroll-bar si linia de meniuri pulldown.
La un moment dat pe ecran pot sa existe mai multe ferestre, eventual
suprapuse total sau partial. Fiecare fereastra apartine unei aplicatii.
Fereastra care este deasupra si în care apare cursorul este cea activa, odata
cu aplicatia careia îi apartine. Activarea/dezactivarea unei ferestre se face
printr-o simpla apasare pe butonul din stânga sus de la mouse.
Cu ajutorul mouse-ului fereastra activa poate fi deplasata sau
redimensionata. Pentru aceasta se deplaseaza mouse-ul la una din margini,
se lasa pâna când cursorul îsi schimba forma, dupa care, cu butonul tinut
apasat se deplaseaza si se dimensioneaza dupa dorinta.
Scroll-bar-urile apar si se folosesc atunci când spatiul oferit de partea
principala a ferestrei este prea mic pentru a putea afisa toata informatia. Din
aceasta cauza, se afiseaza doar o parte din informatii, numai cât încape în
fereastra. Apasând butonul mouse-ului cu cursorul pe una dintre aceste bare
de defilare, informatia se va deplasa facând vizibile alte informatii în
fereastra.
O fereastra poate fi închisa (close), caz în care aplicatia proprietar se
termina. Suspendarea se realizeaza fie suprapunând peste ea o alta
fereastra, fie minimizând fereastra respectiva.
O fereastra minimizata apare pe ecran sub forma unui asa-zis icon
(pictograma). Aceasta este o imagine de dimensiuni mici care contine un
mic desen sugerând aplicatia.
Maximizarea unei ferestre plecând de la o pictograma înseamna
trezirea" aplicatiei respective, maximizarea înseamna dimensionarea ei
astfel încât sa ocupe tot ecranul.
Un meniu pull-down devine activ daca se apasa butonul din stânga de la
mouse atunci când cursorul se afla pe numele meniului. În acest moment
apare o fereastra care permite utilizatorului sa aleaga o actiune din mai
multe posibile. Utilizatorul poate tasta pentru alegere litera subliniata, sau
se poate deplasa cu sagetile sau cu mouse-ul pe titlul variantei alese, dupa
care poate tasta <ENTER> sau un "clic" (apasarea unuia dintre butoanele
de la mouse).
Resurse Windows
Continutul principal al ferestrei depinde de tipul acesteia. Fiecare tip de
fereastra constituie pentru Windows o resursa. O resursa Windows este o structura de date care defineste o portiune vizibila pe ecran a unui program.
O astfel de resursa este de regula materializata printr-un fisier de un anumit tip.
Esenta programarii sub Windows consta în urmatoarele: un program
simplu DOS de tip EXE, înainte de a putea fi executat sub Windows este
supus unei faze suplimentare numita adaugarea resurselor la fisierul
executabil
Fiecare dintre mediile de programare celebre ofera biblioteci de
interfata Windows. Aproape toate acestea adopta pentru programare
politica de programare orientata obiect OOP (Object Oriented
Programming). Spre exemplu, firma Borland a lansat o data cu Turbo
Pascal 6.0 pachetul Turbo Vision. Aceasta permite o interfata excelenta la
nivel text cu ecranul. Curând dupa aceasta, aceeasi firma lanseaza Object
Vision, care ofera o serie de unitati de lucru de interfata Windows în
aceleasi scopuri. Pachete similare au fost lansate pe piata pentru C, C++,
dBASE, Paradox etc.
Utilizatorii nu întâmpina greutati deosebite pentru programare sub
Windows. De exemplu, un program Pascal obisnuit se scrie la fel mediul
Turbo obisnuit ca si în mediul Turbo for Windows, singura modificare
este declararea uses de folosire a unitatii Wincrt, deci programul va avea
forma:
program nume;
uses Wincrt
end
Trebuie totusi precizat un lucru în legatura cu programarea sub
Windows. Nucleul acesteia pretinde un control total asupra resurselor hard
ale sistemului de calcul. Micile "smecherii" posibile sub DOS:
interceptarea tastaturii, definirea unor întreruperi ale utilizatorului,
deturnarea unor întreruperi care vizeaza ecranul si tastatura etc. nu mai sunt
posibile.
Principalele tipuri de resurse Widows sunt:
a) acceleratori;
b) bitmapuri (harti de biti);
c) cursoare;
d) ferestre de dialog (dialog boxes);
e) fonturi;
f) iconuri (pictograme);
g) meniuri;
h) tabele de stringuri;
i) resurse definite de utilizator;
Actiunile posibile cu resursele sunt:
a) adaugarea unei resurse la un proiect;
b) stergerea unei resurse;
c) redenumirea unei resurse;
d) editarea unei resurse;
e) salvarea unei resurse;
f) specificarea optiunilor de memorie ale unei resurse.
Sa vedem acum ce este de fapt fiecare tip de resursa Windows. Înainte
de a le defini, trebuie spus ca Windows ofera instrumente grafice de definire
a lor pe baza de dialog. Utilizatorul poate de asemenea sa le descrie prin
intermediul unui limbaj specializat. Experienta a demonstrat ca în marea
majoritate a cazurilor, resursele sunt definite nu prin descrieri anticipate în
limbajul specializat ci prin intermediul instrumentelor de dialog oferite de
Windows
Accelerator este o combinatie de chei pe care utilizatorul o defineste
pentru a comanda efectuarea unei sarcini dintr-o aplicatie.
De exemplu, daca într-o aplicatie are nevoie de stergerea frecventa a mai
multor fisiere, el poate sa-si defineasca combinatia <ALT/F8> pentru a
sterge fisierul punctat de cursor (este vorba aici de prescurtarea unor
comenzi, nu de marirea vitezei de executie).
Bitmap are rolul de a afisa imagini grafice în programul Windows.
Crearea unui bitmap se face cu ajutorul componentei Paint Editor care
creaza în acest sens un fisier. Bitmap-urile sunt folosite pentru a reprezenta:
sagetile scroll-bar, butoanele de minimizare si maximizare si orice alte
imagini create de utilizator.
Cursorul este un bitmap alb-negru de 32 32 biti prin care este indicata
pozitia curenta pe ecran. Proiectarea unui cursor se face cu Paint Editor.
Dialog-Boxes (ferestre de dialog) sunt resursele care ofera modalitatea
de interactiune cu o aplicatie. O astfel de fereastra ofera pentru interfata
meniuri pull-down, butoane pentru selectarea unei valori, butoane care
permit selectarea simultana a mai multor valori (radio-buttons), casute
pentru introducerea si editarea unui text etc. Pentru creare, Windows ofera
un editor special pentru dialoguri.
Fonturi. Un font este o colectie de date care descriu un caracter
individual, precum si modul în care acesta va fi afisat sau tiparit.
Pictograme. O pictograma icon este o imagine bitmap de 32 32 biti
(daca apare si numele iconului) sau 32 16 biti (daca apare doar imaginea).
Proiectarea unui icon se face cu Paint Editorul. Imaginea creata depinde de
fantezia utilizatorului, totul este sa sugereze, foarte sintetic, continutul
aplicatiei respective.
Meniuri. Un meniu cere utilizatorului sa aleaga una dintre optiunile
oferite. Pentru crearea de meniuri, Windows ofera editor special.
Tabele de stringuri. O astfel de tabela contine mesaje de eroare,
prototipuri sau orice colectie de mesaje text pe care o aplicatie le poate da.
Pentru creare, exista un editor special de stringuri.
Resurse definite de utilizator. Exista posibilitatea de a defini si alte
tipuri de resurse decât cele prezentate pâna acum. O resursa o data definita,
poate fi folosita ori de câte ori se doreste.
Operarea sub Windows
Lansarea în lucru se face cu comanda: ....> Win. Dupa lansare apare
fereastra principala. Iconul marcat este deja prezent în memorie si poate fi
facut activ prin meniul File. Dupa activare apar doua ferestre partial
suprapuse. De aici se poate face activ un alt icon sau alege o alta aplicatie.
Refacând activa una dintre ferestrele "de dedesubt", de acolo se poate
alege o alta aplicatie etc. Minimizând si eventual deplasând si
redimensionând, se pot crea mai multe aplicatii suspendate temporar si una
activa.
Meniul Window apare în foarte multe aplicatii. El permite o aranjare a
ferestrelor de pe ecran fara înterventia efectiva a utilizatorului. Exista în
principal doua moduri de aranjare:
a) cascada, partial suprapuse, cele mai mari dedesubt, iar cele mai
mici deasupra;
b) tile (piese de domino), când ferestrele sunt plasate alaturat, fara
suprapuneri.
|