Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




ELEMENTE DE TELEINFORMATICA

Informatica


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.


Document Info


Accesari: 3431
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )