Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

CATEGORII DOCUMENTE




loading...



AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Calculator Numeric - Sistem de prelucrare a informatiilor

calculatoare

+ Font mai mare | - Font mai mic




CUPRINS:




INTRODUCERE

Calculator Numeric - Sistem de prelucrare a informatiilor

Modelul structural al unui calculator numeric

Calculator numeric cu sistem de I/E cu transfer programat

Calculator numeric cu sistem de I/E cu transfer prin acces direct la memorie

Calculator numeric cu sistem de I/E cu transfer prin canal de I/E

Modelul functional al unui calculator numeric

Unitati functionale ale unui Calculator Numeric

Memoria

Unitatea centrala de prelucrare

Unitatea de comanda

Subsistemul de intrare iesire

Limbaje de programare

Elemente de arhitectura si structura ale unui calculator numeric

Concepte de baza

Moduri de adresare

INTRODUCERE

OBIECTIVE

Principalele obiective ale acestui capitol introductiv sunt urmatoarele:

caracterizarea notiunii de informatie, reprezentarea si prelucrarea acesteia in sistemele tehnice;

obtinerea prin rafinari succesive a unui model structural al unui Calculator Numeric;

prezentarea unui model functional al unui Calculator Numeric, ca o ierarhie de masini virtuale;

analiza din punct de vedere istoric a evolutiei echipamentelor de prelucrare numerica a datelor;

prezentarea functiilor primitive si unitatilor functionale ale Calculatorului Numeric, posibilitati de realizare a acestora.

Calculator Numeric - Sistem de prelucrare a informatiilor

Vom considera informatia o notiune primara, profunda, similara notiunii de materie. Informatia poate fi regasita in intregul ciclu material, incepand cu lumea cuantica si microscopica si continuand cu lumea vie si sistemele tehnice. In legatura cu informatia, vom considera urmatoarele probleme: structurarea si reprezentarea; stocarea pe diferite suporturi de informatie; prelucrarea; transmiterea.

In sistemele tehnice, informatia este reprezentata in principal sub forma analogica si sub forma discreta (numerica). In mod corespunzator s‑au dezvoltat sisteme tehnice de prelucrare a informatiilor, printre care calculatoarele analogice si calculatoarele numerice au un rol important. Desi calculatoarele analogice universale prezentau o serie de avantaje privind viteza de lucru, lucrul in timp real, supletea solutiilor unor probleme prin analogii, calculatoarele numerice au cunoscut o dezvoltare mult mai rapida in ultimii ani inlocuindu-le aproape in totalitate pe cele analogice. Datorita inovatiilor tehnologice si dezvoltarii circuitelor integrate pe scara larga si foarte larga s‑a eliminat treptat handicapul privind viteza de lucru, precizia de reprezentare si prelucrare poate fi facuta oricat de mare, iar posibilitatile de structurare, reprezentare, si stocare a informatiilor sunt nelimitate. Desigur ca informatiile sub forma analogica pot fi in continuare prelucrate dupa ce au fost in prealabil convertite in forma numerica, rezultatele fiind supuse unei conversii inverse.

Calculatoarele numerice se caracterizeaza prin faptul ca asigura reprezentarea, stocarea, prelucrarea si transmiterea informatiilor sub forma discreta, numerica. Astfel, marimi electrice continue, cum ar fi tensiunea sau curentul electric pot fi memorate prin distingerea diferitelor valori ale acestor marimi. Cu cat trebuie sa se distinga mai multe valori, cu atat separarea dintre doua valori adiacente va fi mai mica si deci memoria va fi mai putin sigura in functionare. Sistemul binar trebuie sa distinga doar doua valori, deci constituie metoda cea mai sigura de codificare numerica a informatiilor. Unitatea de informatie elementara este in acest caz cifra binara denumita 'BIT'. Un bit poate contine un '0' sau un '1'. Exista unele calculatoare despre care se spune ca folosesc sistemul zecimal, nu binar. De fapt se utilizeaza sistemul BCD - Binar Codificat Zecimal care consta in reprezentarea cifrelor zecimale intre 0 ‑ 9 prin patru cifre binare, adica patru biti. Utilizand 16 biti, pentru reprezentarea numarului 1992 vom obtine, 0001 1001 1001 0010 in zecimal si 0111 1100 1000 in binar.

Sistemul zecimal se utilizeaza doar la calculatoare cu aplicatii strict economice, financiare.

Se observa ca 16 biti pot reprezenta in zecimal numere cuprinse intre 0 ‑ 9999, deci 10000 de combinatii, pe cand in binar se pot reprezenta 65536 combinatii diferite. Se poate spune deci ca sistemul binar este mai eficient. Dar sa analizam ce s‑ar intampla daca cineva ar inventa un dispozitiv electronic, foarte sigur in functionare, capabil sa memoreze cifrele de la 0 ‑ 9 prin impartirea domeniului de la 0V la 10V, in 10 intervale, de exemplu. Patru asemenea dispozitive ar putea memora 10000 de combinatii, adica valori intre 0 ‑ 9999. Utilizand sistemul binar, aceleasi 4 elemente ar putea memora 16 combinatii. Este evident ca in acest caz sistemul zecimal ar fi mult mai eficient.

O alta problema apare datorita faptului ca informatia prezinta doua aspecte: sintactic si semantic. Prin aspectul semantic al informatiei se inteleg ideile incapsulate, mesajele pe care le transmite, etc.

Calculatoarele numerice in acceptiunea clasica, sunt considerate principalele unelte pentru prelucrarea automata a informatiilor, ele fiind capabile sa trateze informatiile numai sub aspect sintactic. Fara sa cunoasca aspectul semantic al informatiilor pe care le prelucreaza, calculatoarele nu pot sa ia decizii proprii, ele fiind condamnate sa faca doar ceea ce a fost specificat in prealabil, precis si fara echivoc printr‑o descriere care poarta numele de algoritm. Prin algoritm se asigura si respectarea unui principiu de baza in prelucrarea automata a informatiilor, concordanta aspectului sintactic cu cel semantic. Dificultatile care apar in acest sens i‑au determinat pe utilizatorii lui sa afirme ca, de multe ori, calculatoarele creaza mai multe probleme decat rezolva. Ideea ca un calculator nu poate face decat ceea ce i se spune este deja depasita. La ora actuala se fac eforturi din ce in ce mai mari pentru a reprezenta si prelucra cu ajutorul calculatoarelor informatii cu aspect semantic. Realizarea acestui deziderat in conditii de eficienta acceptabile permite utilizarea calculatorului intr‑o maniera cu totul noua. El este capabil sa reprezinte si sa prelucreze cunostinte, sa invete din experienta anterioara, sa imbunatateasca sau sa dezvolte noi metode de rezolvare a unor probleme.Oricum, multe probleme care implica prelucrarea unui volum mare de date, eventual cu limitari stricte de timp, pot sa fie rezolvate numai cu ajutorul calculatorului. In mod 'clasic', aplicatiile calculatorului pot sa fie grupate in aplicatii cu caracter stiintific care necesita precizie si viteza mare de efectuare a calculelor matematice si aplicatii cu caracter de gestiune care necesita pastrarea si regasirea rapida a informatiilor. Pe de alta parte, aplicatii de tipul prevederii timpului probabil sau proiectarii unui avion necesita atat numeroase calcule stiintifice, cat si manipularea unui volum foarte mare de informatii. sa consideram de exemplu cateva tipuri de aplicatii specifice calculatoarelor:

Calcule stiintifice: In experimentele stiintifice si de laborator calculatoarele pot sa fie utilizate pentru culegerea, validarea si prelucrarea datelor preluate de la diferiti senzori sau aparate. Domenii tipice: telemetrie, radiolocatie, spectrografie, etc.

Proiectare asistata: Calculatorul este deosebit de util in multe domenii de proiectare ca de exemplu: proiectarea mastilor pentru VLSI, proiectarea circuitelor imprimate, proiectarea fuzelajelor si aripilor de avion, a caroseriilor de automobil, etc.

Conducerea proceselor: Calculatorul este o unealta foarte utila in fabricarea si controlul automat al produselor, de exemplu: comanda masinilor unelte, controlul proceselor de difuzie si incapsulare intr‑o fabrica de circuite integrate, conducerea robotilor din celulele flexibile de fabricatie, etc.

Simulare: Datorita utilizarii calculatoarelor a aparut intre cercetarea fundamentala si cea aplicativa un nou nivel de cercetare, prin simulare. Acest tip de abordare este foarte util pentru situatiile in care experimentele pot sa fie prea costisitoare in conditii reale, periculoase sau chiar imposibil de realizat. Sa consideram de exemplu cazul in care se doreste studiul efectului eruptiei unui vulcan. Evident, vulcanul nu poate sa fie convins sa erupa, dar se poate realiza o simulare in care sa se tina seama de cat mai multi factori care caracterizeaza fenomenul natural.

Instruire asistata: Calculatorul poate sa constituie un instrument foarte util in cresterea eficientei procesului de predare ‑ invatare ‑ verificare, pentru stimularea gandirii creative, logice.

Modelul structural al unui calculator numeric

Atat functional, cat si prin constructie, calculatorul este un sistem logic. O caracteristica esentiala a unui astfel de sistem este posibilitatea de a-i descrie functionarea independent de detaliile concrete de realizare fizica. Astfel, indiferent de domeniul de aplicatii, calculatorul poate sa fie privit intr‑o prima aproximatie ca o cutie neagra avand o comportare determinista, predictibila, primind la intrare date pe care le prelucreaza si generand la iesire rezultate.

Sistemul din Fig. 1.1 poate sa fie interpretat ca realizand o aplicatie (transformare) din domeniul de intrare in domeniul de iesire, comportarea sa fiind materializata in relatiile dintre intrari, iesiri si timp.

Prin rafinari succesive ale acestui model foarte general se pot obtine modele functionale sau constructive cu diferite grade de detaliere. Sistemul are un set de terminale de intrare 'I' si un set de terminale de iesire 'E'.

Fig. 1.1 Modelul general al unui calculator numeric

Fiecare terminal poate sa fie considerat in una din cele doua stari: activ sau inactiv, respectiv ca avand valoarea 1 sau 0. O combinatie de unitati si zerouri formeaza un vector binar. Cutia neagra poate fi instruita ce sa faca aratand care este vectorul de iesire pentru un vector de intrare fixat. Dupa ce se repeta acest experiment pentru mai multi vectori I/E (perechi de vectori de intrare ‑ iesire) ar fi de dorit ca automat cutia neagra sa arate vectorul corect la iesire cand se fixeaza un vector dat la intrare. Ideal ar fi ca daca exista o regula clara de corespondenta intre vectorii de intrare si cei de iesire, calculatorul numeric sa extraga aceasta regula si s‑o pastreze in conexiunile interne astfel incat sa genereze vectorul de iesire corect pentru un vector pe care nu l‑a mai avut la intrare inainte. In acest model calculatorul numeric apare ca un sistem definit prin multimea perechilor de intrari‑iesiri care se afla permanent intr‑o anumita stare, definita ca un marcaj (sau conexiuni) atasat unei submultimi de perechi de intrari‑iesiri care satisfac anumite conditii de consistenta. Aceasta submultime va fi considerata un subsistem.

In general nu este practic sa se enumere toate perechile de I/E care definesc un astfel de sistem preferandu‑se caracterizarea acestuia printr‑o relatie de intrare‑iesire, adica printr‑un algoritm sau o ecuatie care se poate utiliza pentru generarea tuturor perechilor de I/E, care‑i apartin.

Pe de alta parte, un astfel de sistem nu implica intotdeauna un vector unic de iesire. Dimpotriva, unui vector de intrare ii va corespunde un numar de vectori de iesire posibili, fiecare continand un raspuns posibil al vectorului de intrare dat. Aceasta neunicitate a raspunsului la o intrare data reflecta dependenta iesirii atat de intrare cat si de starea initiala (sau starea precedenta). Aceasta neunicitate a dependentei iesirii de intrare arata ca un astfel de sistem este mai degraba o relatie decat o functie sau un operator.

Reluand modelul din Fig. 1.1, se poate constata ca relatia dintre vectorii de intrare si iesire este prea complicata pentru a fi incapsulata intr‑un sistem cu conexiuni directe intre intrari si iesiri. Astfel este necesara introducerea unor nivele intermediare in cutia neagra formate din unitati functionale capabile sa extraga diferite caracteristici ale vectorilor de intrare, care, eventual, sa genereze iesirea corecta. O prima observatie trebuie facuta in legatura cu multimile de intrari si iesiri. Acestea nu sunt intotdeauna sub forma de vectori formati din 1 si 0 si nu au structura adecvata unui anumit tip de prelucrare. Este astfel necesara prevederea unui subsistem de intrare care asigura preluarea datelor din mediul extern si aducerea lor la o forma standard de intrare in vederea prelucrarii. Dupa prelucrare, datele trebuie transmise spre mediul extern in forma ceruta, ceea ce implica necesitatea unui subsistem de iesire. Se obtine, in acest mod, un model structural al unui calculator numeric, prezentat in Fig. 1.2.

Fig. 1.2 Modelul structural al unui calculator numeric

Subsistemul de intrare trebuie sa asigure atat conversia in semnale electrice a datelor reprezentate pe diferite suporturi in mediul extern cat si transformarea acestor semnale in vectori binari cu structura ceruta de subsistemul de prelucrare. In mod similar subsistemul de iesire trebuie sa asigure operatii similare, in ordine interna, pentru rezultatele trimise spre mediul extern.

Subsistemul de prelucrare trebuie sa asigure reprezentarea interna, stocarea si prelucrarea datelor si schimbul de informatii cu subsistemul de I/E. Se obtine astfel structura unui calculator numeric cum este cea reprezentata in Fig. 1.3.

Fig. 1.3 Structura unui calculator numeric

Subsistemul de prelucrare, impreuna cu interfata de I/E formeaza calculatorul propriu-zis. Subsistemul de prelucrare constituie nucleul central al calculatorului numeric, motiv pentru care va fi denumit unitatea centrala (UC). Unitatea centrala este formata dintr‑un subsistem de memorie interna si o unitate centrala de prelucrare(UCP). Din considerente de eficienta si cost, memoria este in general organizata pe doua nivele. O memorie de capacitate mica si viteza mare, asociata direct unitatii centrale de prelucrare, sau chiar facand parte din aceasta, formata din registre rapide, si o memorie mai lenta, de capacitate mare. Unitatea centrala de prelucrare are atat rolul de a asigura functiile pentru prelucrari aritmetice si logice de baza cat si de a coordona transferul informatiilor intre elementele componente. Se obtine astfel, in Fig. 1.4, schema bloc a unui sistem de calcul care include calculatorul numeric propriu-zis, echipamentele periferice de I/E si sistemul de programe care asigura o utilizare eficienta a intregului sistem.

unitatea centrala     + interfata de intrare si de iesire = calculator numeric

calculator numeic     + echipament periferic + programe de baza = sistem de calcul

Fig. 1.4 Schema bloc a unui sstem de calcul

Conexiunile efective intre diferite elemente functionale ale unitatii centrale de prelucrare, intre unitatea centrala de prelucrare si memorie, intre unitatea centrala si interfetele de I/E se pot face in diferite moduri, obtinandu‑se in mod corespunzator diferite structuri de calculator numeric.

Astfel daca se considera fluxul informatiilor intre unitatea centrala si interfetele de I/E se obtin trei tipuri de transferuri de I/E :

Subsistem de I/E cu transfer programat;

Subsistem de I/E cu transfer prin acces direct la memorie;

Subsistem de I/E cu transfer prin canal de I/E.

Calculator numeric cu sistem de I/E cu transfer programat

Schema bloc este aratata in Fig. 1.5

Fig. 1.5. Calculator numeric cu transfer programat

In aceasta schema de organizare datele de I/E circula direct prin registrele unitatii centrale de prelucrare sub controlul unitatii centrale din unitatea centrala de prelucrare. Transferul se efectueaza cuvant cu cuvant si pentru fiecare cuvant transferat unitatea centrala de prelucrare executa o secventa de instructiuni, numita program de I/E. Solutia este in general simplu de implementat, si ca resurse hardware, si ca efort de programare, dar se preteaza numai la echipamente cu volum de date si rata de transfer scazute.

Calculator numeric cu sistem de I/E cu transfer prin acces direct la memorie

In cazul unor echipamente periferice cu viteza de transfer ridicata, discuri si benzi magnetice de exemplu, programul care se executa pentru fiecare cuvant transferat poate sa fie prea lung, ceea ce ar duce la pierderea unor cuvinte. Pe de alta parte, volumul de date fiind ridicat, unitatea centrala de prelucrare ar fi mult ocupata numai cu transferul datelor de I/E. In astfel de situatii se utilizeaza transferul prin acces direct la memorie (DMA - Direct Memory Access). Fluxul informatiilor in acest caz este aratat in Fig. 1.6.

Fig. 1.6 Calculator numeric cu transfer prin acces direct la memorie

Dupa initierea unui transfer, untatea centrala de prelucrare poate continua cu alte activitati. Transferul intregului bloc se executa sub controlul modulului de acces direct la memorie. La sfarsitul transferului sau la aparitia unor evenimente, de exemplu erori de transfer, se cere din nou interventia unitatii centrale de prelucrare.

Calculator numeric cu sistem de I/E cu transfer prin canal de I/E

Un grad si mai mare de independenta intre unitatea centrala de prelucrare si subsistemul de I/E se obtine prin prevederea unui procesor specializat, numit canal de I/E, capabil sa execute transferul a unei inlantuiri de blocuri prin acces direct la memorie, si sa rezolve unele situatii de eroare aparute in cadrul transferului, fara interventia unitatii centrale de prelucrare. Schema bloc este aratata in Fig. 1.7.

Fig. 1.7 Calculator numeric cu transfer prin canal de I/E

Procesorul de canal executa programe de canal pregatite in memorie de catre unitatea centrala de prelucrare. Programele de canal specifica toti parametrii transferului si pot exista mai multe programe de canal inlantuite. Productivitatea sistemului este mult mai mare in acest caz.

Modelul functional al unui calculator numeric

In paragraful precedent s‑a introdus modelul structural al unui calculator numeric prin rafinarea succesiva a unui model foarte general de sistem dinamic specificat ca o relatie intre multimea intrarilor si iesirilor. In final s‑a aratat ca sistemul de calcul este format din resursele fizice care alcatuiesc partea hardware si un sistem de programe de baza si aplicatii care alcatuiesc partea de software a sistemului de calcul. Exista si un nivel intermediar intre hardware si software, denumit firmware, care consta din software incorporat in hardware in momentul fabricatiei calculatorului. Programele care controleaza direct resursele hardware, care nu se schimba atata timp cat structura hardware nu se schimba si programele care trebuie sa fie prezente in calculator imediat dupa alimentarea cu energie a calculatorului constituie partea de firmware.

Fig.1.8. Modelul functional al unui calculator numeric

De fapt partea de hardware si cea de software sunt echivalente. Orice operatie efectuata prin software poate fi implementata direct in hardware si orice instructiune efectuata prin hardware poate fi simulata prin software. Decizia de a implementa anumite functii in hardware si altele in software este luata avand in vedere anumiti factori cum ar fi: costul, viteza de prelucrare, raportul performante/cost, siguranta in functionare si frecventa unor modificari posibile. La primele calculatoare aceasta decizie era simplu de luat. In hardware erau implementate cateva functii foarte simple de tipul: aduna doua numere intregi, salt la o alta instructiune. Toate celelalte operatii erau realizate explicit prin software, aceasta din cauza constringerilor tehnologice existente. Pe masura evolutiei tehnologiei a avut loc o tendinta inversa.

Proiectantii de hardware au selectat din ce in ce mai multe functii ce erau executate suficient de frecvent motivand implementarea lor in hardware pentru a fi executate mult mai repede. Astfel la ora actuala exista circuite specializate care efectueaza calcule cu numere reale cu precizie foarte mare, procesoare grafice care printr‑o simpla comanda executa o transformare a unei figuri complexe etc. Oricat de complexe ar fi functiile realizate in hardware, utilizatorul va dori sa promoveze operatii si mai complexe prin software. Astfel, din punctul de vedere al utilizatorului sistemul de calcul este privit ca o ierarhie de uniuni virtuale, fiecare oferindu‑i facilitati diferite de programare. Modelul functional prezentat in Fig.1.8 reflecta atat organizarea sistemului de calcul cat si functionarea acestuia din punctul de vedere al fluxului informatiilor urmarit de la programul utilizatorului pina la obtinerea informatiilor dorite.



In literatura de specialitate exista si modele similare cu acesta si altele destul de diferite. In acest model s‑a urmarit pe de o parte aspectul functional, nivelele ierarhice fiind alese incat sa reflecte cat mai bine fluxul datelor si actiunilor in sistemele moderne de calcul, iar pe de alta parte aspectul didactic, fiecare nivel ierarhic fiind obiectul unor cercuri clar delimitate, prin continut si planificare in timp.

NIVELUL 1. ‑ Dispozitivele si circuitele electronice reflecta atat gradul de integrare tehnologica cat si clasa de performante in care se incadreaza calculatorul. Astfel, un calculator bazat pe circuite ECL (circuite logice cu cuplaj prin emitor) va avea o viteza de prelucrare ridicata, fiind destinat unor aplicatii complexe, cu multe calcule. Un calculator bazat pe microprocesoare 80386 si 80387 si memorii de 1‑2 biti pe pastila va fi un calculator performant realizat intr‑o tehnologie avansata.

NIVELUL 2. ‑ Unitatile functionale reflecta intr‑o buna masura modularitatea sistemului, pozitionarea si implementarea functiilor primitive in unitati functionale avind in vedere criterii functionale, constructive, si aspecte privind testabilitatea. La acest nivel inca nu este posibila programarea calculatorului. Este posibila insa microprogramarea. Diferite unitati functionale contin programe implementate sub forma de firmware. Astfel unitatea centrala de prelucrare poate contine programe firmware pentru controlul componentelor din care este alcatuita, programe pentru mentinerea configuratiei de baza, pentru cazul de timp real al calculatorului, programe de depanare, etc. Un canal de I/E pentru disc include programe de testare a subsistemului de discuri magnetice, programele de I/E de nivel scazut, programarea circuitelor integrate pe scara larga care intra in componenta sa.

NIVELUL 3. ‑ Masina fizica reprezinta, impreuna cu echipamentele de I/E, partea de hardware propriu‑zisa a calculatorului. Acest nivel reflecta structura si organizarea interna a calculatorului, modul de interconectare si interactiunile dintre unitatile functionale, fluxul datelor de I/E. De asemenea acest nivel reflecta si arhitectura calculatorului asa cum este el vazut de un programator la nivelul functiilor primitive .

NIVELUL 4. ‑ Masina de baza reprezinta calculatorul propriu-zis. Nucleul sistemului de operare trebuie vazut mai mult ca firmware decat ca software si este format dintr‑o colectie de programe orientate pe masina fizica si care ofera programatorului de sistem o masina de baza mai evoluata, uniforma si stabila in timp, primind modelul de acces la functiile primitive. Astfel modificarile din nivelele 1, 2 si 3 vor fi preluate de acest nivel fara a fi simtite de nivelele ierarhice superioare. Acest nivel asigura in principal functiile de I/E de baza (BIOS la PC) si functii de acces direct la resursele fizice pentru testarea si punerea la punct a programelor.

NIVELUL 5. ‑ Executivul sistemului de operare reprezinta o colectie de programe de baza care asigura pe de o parte o masina cat mai eficienta si comoda de utilizat pentru programator si o utilizare cat mai eficienta a resurselor hardware si software, pe de alta parte. Principalele functii ale unui sistem de operare sunt:

controlul incarcarii si executiei programelor, care asigura incarcarea in memoria interna a programelor preluate din memoria externa, lansarea in executie si supravegherea executiei acestora;

operatii de I/E mai evoluate, bazate pe functiile oferite de masina de baza;

gestiunea fisierelor, care asigura crearea, intretinerea si utilizarea fitierelor de date pe suporturile externe (magnetice, optice, etc);

gestiunea memoriei care asigura utilizarea si protectia memoriei interne in conditiile in care mai multe procese pot fi active la un moment dat in memorie;

facilitati de dezvoltare a programelor privind programarea modulara, deformarea;

crearea, intretinerea si utilizarea bibliotecilor de programe de baza si aplicatii.

NIVELUL 6. Limbaje de programare. La acest nivel am situat limbajele de programare indiferent ca sunt de nivel ridicat sau scazut, deoarece prin intermediul acestora programatorul are la dispozitie un mod esential de comunicare cu calculatorul. Fiecare limbaj are un vocabular de aproximativ 100 de cuvinte si simboluri si este bazat pe o gramatica strict definita, fara exceptii. Propozitiile dintr‑un limbaj pot fi usor traduse in propozitii dintr‑un alt limbaj. Operatia de conversie a unui program dintr‑un limbaj in altul se numeste translatare. Programul original se numeste program sursa si este scris in limbajul sursa. Atat limbajul sursa cat si limbajul destinatie, in care este translatat programul, definesc nivelele masinii virtuale intr‑o schema similara celei din Fig.1.8 dar mai detaliata. Daca ar exista un procesor care sa interpreteze direct limbajul sursa nu ar mai fi nevoie de translatare. In prezent exista peste 100 de limbaje de programare clasificate dupa diferite criterii:

Limbaje orientate masina sau limbaje de nivel scazut, care necesita din partea programatorului o cunoastere buna a arhitecturii calculatorului. Limbajul ofera facilitati de acces direct la aceste resurse, permitand dezvoltarea unor programe foarte eficiente din punct de vedere al utilizarii resurselor pe seama unui efort mai mare din partea programatorului. Limbajele orientate masina pot la randul lor sa fie clasificate in:

limbaje masina sau limbaje obiect care implica specificarea direct in binar, octet, sau hexazecimal a instructiunilor ce se vor executa direct de catre masina fizica. Programarea in limbaj masina este rareori utilizata, doar eventual pentru cateva instructiuni, in procesul de depanare a programelor;

limbaje de asamblare care pot fi privite ca o reprezentare simbolica pentru limbajele masina. Instructiunile din programul sursa in limbaj de asamblare au corespondent direct in limbaj masina. Utilizarea unor nume simbolice pentru instructiuni si posibilitatea definirii unor adrese simbolice usureaza mult programarea fata de programarea in limbaj masina. Translatarea programelor din limbaj de asamblare in limbaj masina se face de catre asamblor.

limbaje orientate pe probleme sau limbaje de nivel inalt in care utilizatorul isi scrie programele intr‑o maniera mai apropiata de modul de comunicare uzual. Detaliile interne ale arhitecturii si structurii masinii de baza sunt mult mai putin vizibile decat in corpul limbajelor de asamblare. Limbajele de nivel inalt sunt mai eficiente pentru programator, dar, in general, mai ineficiente pentru masina. Pentru a fi excutate de catre masina de baza programele scrise in limbajele de nivel inalt sunt in general compilate, (translatate de catre compilatoare), direct in limbaje obiect. La randul lor limbajele de nivel inalt pot fi clasificate dupa diferite criterii, cum ar fi: limbaje orientate pe calcule stiintifice, sau limbaje pentru calcule economice.

Un alt model de clasificare ar fi dupa modul in care programatorul verifica actiunile ce trebuie efectuate in cursul executarii programului. Acestea pot fi: limbaje imperative, in care programatorul verifica, pas cu pas, ce trebuie facut pentru rezolvarea problemei respective sau limbaje declarative in care programatorul face doar o descriere, intr‑o forma data a solutiei la problema, de exemplu.

Efectuarea unor studii statistice privind timpul de executie al programului, a sugerat ideea utilizarii unor solutii mixte de dezvoltare a programelor. Mai intai programul este scris total in limbaj de nivel inalt, apoi este evaluat si masurat si anumite portiuni rescrise in limbaj de asamblare. Unele compilatoare chiar translateaza programul sursa in limbaj de asamblare pentru a fi optimizat si apoi translatat in cod masina.

NIVELUL 7 ‑ nivelul aplicatiilor reprezinta nivelul cel mai important pentru utilizator. Bibliotecile de programe de la acest nivel reflecta modul in care poate sa utilizeze direct calculatorul in diferite aplicatii si usurinta cu care pot fi create noi programe de aplicatii in domenii conexe sau total noi.

NIVELUL 8 ‑ nivelul interpretorului limbajului de comanda reprezinta interfata si modul de interactiune dintre utilizatori si sistemul de calcul. Selectarea unei actiuni poate fi greoaie, prin introducerea unei serii de texte de la consola operatorului, sau din contra, foarte eficienta, prin simpla indicare a unei optiuni afisate pe ecranul consolei. Se observa din aceasta analiza a modelului din Fig. 1.8 ca un programator de un anumit nivel necesita o cunoastere detaliata a nivelelor inferioare doar daca pentru cresterea eficientei se doreste elaborarea directa a unor functii sau controlul direct al unor resurse de pe nivele inferioare.

Unitati functionale ale unui Calculator Numeric

In paragrafele anterioare s‑au considerat un model structural si unul functional al unui calculator numeric din punctul de vedere al utilizatorului. Asa cum am mai afirmat, din punct de vedere logic partea de hardware si cea de software ale unui calculator numeric sunt echivalente, in sensul ca orice functie implementata in software poate sa fie implementata in hardware si orice instructiune hardware poate sa fie simulata prin software. De exemplu, daca pentru structurile cele mai simple de calculatoare singura instructiune aritmetica disponibila era instructiunea de adu­nare pentru numere intregi fara semn, celelate operatii aritmetice realizandu‑se prin programare pe baza operatiei de adunare, in prezent coprocesoarele aritmetice sunt capabile sa realizeze chiar si calculul unor functii transcendentale. Din punct de vedere metodologic este insa de preferat sa analizam structura hardware separat de sistemul de programe de baza si aplicatii.

In continuare vor fi trecute in revista unitatile functionale de baza ale unui calculator numeric.

Memoria

Pentru realizarea functiei de memorare se utilizeaza o mare varietate de dispozitive si echipamente mergand de la dispozitive rapide, de mica capacitate si cu un cost ridicat, pana la echipamente lente, de mare capacitate si cu un cost scazut. Un calculator poate utiliza o ierarhie de astfel de dispozitive, avand rapoarte foarte diferite intre performante.

In general se pot identifica intr‑un sistem de calcul trei tipuri de memorii:

Memorii tampon foarte rapide formate din registrele interne ale unitatii centrale de prelucrare si eventual din memorii 'cache' de asemenea continute in unitatea centrala de prelucrare, utilizate pentru a memora instructiunile sau datele care urmeaza sa fie utilizate imediat. Memorarea informatiilor in acest tip de memorii se realizeaza in avans. Aceste memorii sunt de mica capacitate, dar au un timp de acces foarte mic.

Memoria principala a calculatorului este in legatura directa cu unitatea centrala de prelucrare si este o memorie cu acces rapid avand in general o capacitate cu aproximativ un ordin de marime mai mare dacat memoria tampon.

Memoria auxiliara (externa) este realizata pe baza unor echipamente periferice de tip disc sau banda magnetica, cu capacitate mare de memorare. Se considera ca memoria auxiliara face parte din subsistemul de intrare / iesire.

In continuare prin termenul de memorie ne vom referi la memoria principala.

Memoria contine atat instructiuni cat si date si este formata, la nivelul cel mai de jos, din elemente cu doua stari stabile, deci elemente care pot sa memoreze un bit de informatie. Organizarea bitilor in memoria principala se face sub forma unor vectori formati din unitati elementare de memorie fiecare continand un numar fix de biti. Operatiile care se executa in legatura cu memoria sunt operatii de citire si scriere. La executia unei astfel de operatii UCP are acces la continutul unei locatii de memorie (cea mai mica unitate de memorie la care se poate face acces). Orice memorie are urmatoarele caracteristici principale:

Fiecare locatie de memorie are acelasi numar de biti;

Fiecare locatie de memorie are asociat un numar care reprezinta adresa prin care locatia respectiva poate sa fie referita in mod unic;

Spatiul de adrese este omogen si toate locatiile de memorie sunt echivalente din punctul de vedere al accesului.

Rezulta deci ca o locatie de memorie este caracterizata de doua elemente: adresa care reprezinta pozitia relativa in cadrul memoriei (informatie fixa) si continutul, care este dat de valoarea numerica memorata in locatia respectiva la un moment dat.

Continutul unei locatii de memorie reprezinta un cuvant de memorie, numarul de biti din cuvant reprezentand lungimea cuvantului.

Pentru fiecare calculator lungimea cuvantului este stabilita corespunzator tipului de aplicatii in care calculatorul din care face parte prin proiectare urmeaza sa fie utilizat. De exemplu primul microprocesor 4004 care a fost proiectat pentru a realiza prelucrari in BCD (codul de reprezentare a numerelor Binar Codificat Zecimal) a fost proiectat pentru a lucra cu memorii avand lungimea cuvantului de 4 biti. Succesorul sau, 8008 care a fost proiectat pentru a lucra cu caractere reprezentate conform standardului ASCII (cod de 8 biti) a fost proiectat pentru a lucra cu memorii avand lungimea cuvantului de 8 biti. Deoarece in prezent majoritatea calculatoarelor au lungimea cuvantului un multiplu de 8, se obisnuieste specificarea acestei lungimi in numar de octeti (un octet = 8 biti).

Capacitatea memoriei unui calculator este data de numarul de octeti sau de cuvinte din care este formata aceasta. De obicei aceasta capacitate se exprima in K octeti ( 1K = 1024 octeti) sau in M octeti ( 1M = 1024 K), in gigaocteti ( 1G = 1024 M) s.a.m.d. Capacitatea maxima a memoriei adresate la un moment dat de catre un calculator este data de numarul maxim de adrese distincte care pot sa fie generate de unitatea centrala de prelucrare. De exemplu daca un calculator poate sa genereze adrese utilizand 16 biti atunci el va putea sa adreseze 216 adrese distincte. Structura bloc a unui subsistem de memorie este prezentata in Fig. 1.9.

Fig. 1.9 Structura bloc a unui subsistem de memorie

Fig. 1.10. Diagrame de timp

Registrele de adrese AM (Adrese Memorie) si de date DM (Date Memorie) pot sa fie continute in subsistemul de memorie sau fac parte din alte subsisteme care fac acces la memorie.

Registrul AM contine adresa de memorie implicata in accesul la memorie. Registrul DM contine datele care trebuie sa fie inscrise in memorie, respectiv datele care se citesc din memorie.

Semnalul SM (Selectie Memorie) este un semnal de selectie a subsistemului de memorie (intr‑un calculator pot sa existe mai multe astfel de subsisteme, eventual fiecare avand spatiul propriu de adrese) iar S/C (Scriere / Citire) este un semnal care comanda tipul operatiei (de scriere sau de citire).

Descrierea functionarii subsistemului de memorie este prezentata in diagramele de timp din Fig. 1.10.

In figura, cu tac s‑a notat timpul de acces citire ca fiind durata dintre momentul activarii adreselor si momentul in care datele sunt disponibile. Cu tcc s‑a notat durata ciclului de citire ca fiind intervalul de timp dintre momentul in care adresele sunt activate pentru citire si momentul de timp la care se poate face o noua activare a adreselor. Cu tcs s‑a notat durata ciclului de scriere ca fiind intervalul de timp dintre momentul in care adresele sunt activate pentru scriere si momentul de timp la care se poate face o noua activare a adreselor.

Se observa ca succesiunea de evenimente corespunzatoare efectuarii unei operatii de citire sau de scriere este: stabilirea adresei implicate, generarea semnalului de selectie, stabilirea semnalului S/C, localizarea adresei in memorie, realizarea transferului de date dupa care urmeaza un interval de timp corespunzator refacerii starii circuitelor integrate de memorie pentru a fi capabile sa execute un nou acces. Se observa ca ciclul memoriei (intervalul de timp dintre doua accese la memorie) este format din doua intervale de timp: timpul de acces efectiv si timpul de refacere.

Unitatea centrala de prelucrare

Unitatea centrala de prelucrare reprezinta nucleul calculatorului. Realizeaza executia instructiunilor aduse din memorie asupra unor date aduse din memorie sau obtinute de la subsistemul de intrare. Prelucrarile efectuate pot sa fie de tip aritmetic sau logic, rezultatele obtinute pot sa fie transmise la memorie sau subsistemului de iesire.

Unitatea centrala de prelucrare contine registre care formeaza o memorie foarte rapida. Aceste registre pot sa contina date sau componente ale adreselor de memorie. Exista calculatoare pentru care unele registre au functii dedicate, adica anumite operatii se pot executa numai asupra valorilor continute in anumite registre, in timp ce la alte calculatoare orice registru poate sa fie utilizat pentru orice fel de operatie. De asemenea unitatea centrala de prelucrare contine un registru, denumit de obicei, registru stare program care memoreaza informatii referitoare la starea unitatii centrale de prelucrare, la rezultatul executiei ultimei instructiuni aritmetice sau logice, conditii de eroare, conditii care descriu modul in care urmeaza sa se execute urmatoarele instructiuni, etc.

Executia operatiilor aritmetice si logice se realizeaza in cadrul unitatii aritmetice si logice (UAL). Elementul da baza al unei UAL este un sumator paralel. Viteza de operare a unitatii aritmetice si logice este practic data de performantele acestuia. In afara de sumator, unitatea aritmetica si logica contine si circuitele combinationale care permit selectia operatiei aritmetice sau logice executate.

In cazul cel mai general o operatie aritmetica sau logica are doi operanzi si produce un rezultat. Schema bloc a unei unitati aritmetice si logice este prezentata in Fig. 1.11.

Fig. 1.11 Schema bloc a unei unitati aritmetice si logice(UAL)

Din punctul de vedere al interconectarii unitatii aritmetice si logice cu celelalte subansamble, de fapt din punctul de vedere al mecanismului de obtinere a operanzilor si al furnizarii rezultatului, exista mai multe solutii posibile:

1°. Utilizarea unei magistrale unice. Schema bloc de interconectare este prezentata in Fig. 1.12

Fig. 1.12 Interconectarea unitatii aritmetice si logice cu o singura magistrala

In acest caz operanzii sunt preluati de catre unitatea aritmetica si logica din doua registre temporare T1 si T2. Se observa ca incarcarea datelor in registrele T1 si T2 si transmiterea rezultatului se face prin intermediul unei magistrale locale a unitatii centrale de prelucrare. Sursele pentru operanzi si destinatia pentru rezultat pot sa fie reprezentate de orice registru sau locatie de memorie. Inainte de efectuarea operatiei valorile operanzilor trebuie sa fie incarcate in registrele temporare T1 si T2. Se observa ca aceasta incarcare nu se poate realiza decat secvential.

Daca sursele celor doi operanzi sunt reprezentate de locatii de memorie iar rezultatul trebuie sa se depuna de asemenea in memorie, avand in vedere ca accesul la memorie nu se poate face decat pentru citirea / scrierea unei singure date la un moment dat, timpul necesar pentru efectuarea operatiei aritmetice sau logice este dat practic de timpul necesar pentru cele 3 accese la memorie. Daca operanzii sunt disponibili in registrele unitatii aritmetice si logice atunci din cauza transferului secvential al operanzilor in registrele temporare, executia instructiunii va dura mai mult decat in cazul in care exista o legatura directa intre registrele care contin operanzii si unitatea aritmetica si logica.

2°. Utilizarea unui registru acumulator. Schema bloc de interconectare este prezentata in Fig.1.13. In acest caz unul dintre opereranzi este preluat intodeauna dintr‑un registru special numit registru acumulator. De asemenea rezultatul operatiei este memorat in registrul acumulator inlocuind vechiul continut. Se observa ca in acest caz numai sursa unuia dintre operanzi poate sa fie constituita de catre un registru din unitatea centrtala de prelucrare sau de catre o locatie de memorie. Deoarece al doilea operand este preluat dintr‑un registru al unitatii centrale de prelucrare sau din registrul de date al memoriei, structura nu mai necesita utilizarea unui registru temporar. Viteza executiei instructiunilor aritmetice si logice este mai mare in acest caz deoarece la timpul necesar pentru executia efectiva a operatiei nu se mai adauga decat timpul necesar pentru pregatirea unui singur operand.

Fig. 1.13. Interconectarea unitatii aritmetice si logice cu registru acumulator

De fapt aceasta structura se poate generaliza si se pot considera structuri care utilizeaza mai multe registre ca registre acumulator.

3°. Interconectarea unitatii aritmetice si logice cu trei magistrale. Schema bloc de interconectare este prezentata in Fig. 1.14.

Fig. 1.14 Interconectarea unitatii aritmetice si logice cu 3 magistrale

In acest caz fiecare operand si rezultatul circula pe alta magistrala de date. Operanzii sunt preluati direct de pe cele doua magistrale de date. Rezultatul este transmis pe cea de a 3-a magistrala. Ca si in prima solutie atat sursele operanzilor cat si destinatia rezultatului operatiei pot sa fie registre ale unitatii centrale de prelucrare sau locatii de memorie. Deoarece obtinerea operanzilor se poate face independent pentru fiecare in parte, in cazul in care nu amandoi operanzii provin din memorie se observa ca cei doi operanzi se pot obtine in paralel. Deci pentru astfel de situatii durata executiei instructiunilor poate sa fie mai mica. In cazul in care amandoi operanzii sunt preluati din memorie durata aducerii operanzilor este similara cu aceea obtinuta pentru prima structura. O varianta a acestei solutii se obtine daca se considera ca intodeauna rezultatul va inlocui unul dintre operanzi. In acest caz rezulta o structura cu doua magistrale.

Unitatea de comanda

Executia unui program rezulta prin realizarea unei secvente de aduceri si executii de instructiuni din memorie. Adresa de memorie a urmatoarei instructiuni care urmeaza sa se execute este memorata intr‑un registru special din untatea centrala dc prelucrare, registru numit contor program (CP). Cand se initiaza executia unui program, in contorul program se incarca adresa primei instructiuni. In continuare se va executa un ciclu de operatii care poate sa fie descris de organigrama din Fig. 1.15.

Fig 1.15 Fazele executiei unei instructiuni

Se observa ca in timpul ciclului de aducere si executie a instructiunii contorul program este actualizat astfel incat ori de cate ori se incepe ciclul unei noi instructiuni continutul acestui registru sa reprezinte adresa primului cuvant din instructiune. Evident instructiunile de control al executiei programului pot sa aiba ca efect actualizarea continutului registrului contor program conform adresei la care se face saltul.

Se observa ca din punctul de vedere al interpretarii realizate prin executia programului de catre calculator, un program consta din date si instructiuni, identificarea instructiunilor se poate face numai daca se cunoaste o adresa de instructiune incepand de la care se poate face o identificare semnificativa a instructiunilor.

Unitatea de comanda (UCd) are rolul de a decodifica si interpreta instructiunile generand semnale de comanda care asigura fluxul de date corespunzator executiei instructiunii respective. Rezulta deci, ca structura unitatii de comanda este realizata pe baza unitatilor functionale pe care aceasta trebuie sa le comande si pe baza setului de instructiuni pe care unitatea centrala de prelucrare trebuie sa‑l execute.

In general o unitate de comanda este un automat complex. Exista doua solutii de implementare a UCd si anume sub forma de unitati de comanda conventionale si unitati de comanda microprogramate. Unitatile de comanda conventionale sunt realizate de obicei sub forma unei retele de automate codificate sau complet decodificate.

Setul de instructiuni

Orice calculator este controlat de un program, care este format dintr‑o secventa de instructiuni. Fiecare instructiune specifica o operatie care urmeaza sa fie executata de catre unitatea centrala de prelucrare. In general instructiunile unui calculator pot sa fie clasificate in cateva clase de baza :

1°. Instructiuni pentru transferul datelor. Sursa si respectiv destinatia unui astfel de transfer pot sa fie constituite de o locatie de memorie, un registru, sau elemente ale subsistemului de intrare/iesire.

2°. Instructiuni aritmetice. Aceste instructiuni executa operatii aritmetice asupra unor date. In acest caz sursa operanzilor si destinatia rezultatului pot sa fie memoria sau registrele din unitatea centrala de prelucrare. Complexitatea operatiilor care formeaza setul instructiu­nilor aritmetice difera mult pentru diferite calculatoare. Astfel, cel mai simplu set posibil de instructiuni aritmetice ar putea sa contina numai o instructiune de incrementare a continutului unui registru sau a continutului unui cuvant din memorie. Pe baza unei astfel de operatii se poate construi o aritmetica utilizand numere fara semn. In realitate chiar si cele mai elementare calculatoare 'stiu' sa execute operatia de adunare intre doua numere (eventual fara semn). La capatul celalalt al scarii complexitatii operatiilor aritmetice se gasesc calculatoarele in al caror set se gasesc cele patru operatii aritmetice care se pot efectua asupra numerelor cu sau fara semn reprezentate in virgula fixa (numere intregi) sau in virgula mobila (numere reale).



3°. Instructiuni logice si de deplasare. Aceste instructiuni exe­cuta operatii logice (de tip SI, SAU, NU, SAU EXCLUSIV) asupra unor date. Ca si la instructiunile aritmetice sursa operanzi­lor si destinatia rezultatului pot sa fie memoria sau regis­trele din unitatea centrala de prelucrare. Toate calculatoarele care contin in setul lor de instructiuni instructiuni logice contin cel putin instructiuniile SI, SAU si NU cu toate ca dupa cum se stie disponi­bilitatea unei operatii SI‑NU sau SAU‑NU ar fi suficienta pentru realizarea oricarei prelucrari de tip logic.

4°. Instructiuni de comparatie. Aceste instructiuni pot fi considerate drept instructiuni aritmetice (ca efect al executiei unei astfel de instructiuni starea unitatii centrale de prelucrare este actualizata conform diferentei dintre cei doi operanzi referiti in instructiune si acesta este singurul efect al executiei instructiunii), sau ca instructiuni logice (avand in vedere semnificatia operatiei de comparatie).

5°. Instructiuni pentru controlul executiei programelor. Aceste instructiuni permit schimbarea dinamica a secventei in care se executa instructiunile din program producand un salt neconditionat sau conditionat la o adresa din program specificata in instructiune.

Instructiunile sunt memorate in memorie impreuna cu datele asupra carora opereaza. Unitatea centrala de prelucrare aduce o instructiune, determina ce prelucrari trebuie sa se efectueze si le executa. Fiecare calculator are forma sa proprie de reprezentare a instructiunilor, dar orice instructiune contine doua informatii:

codul operatiei care specifica operatia care urmeaza sa se execute: adunare, comparatie, salt, etc;

unul sau mai multi specificatori de operanzi care descriu modul in care se obtin operanzii instructiunii si eventual unde se memoreaza rezultatul acesteia.

In memorie o instructiune poate sa ocupe unul sau mai multe cuvinte. Exista calculatoare la care numarul de cuvinte utilizat pentru reprezentarea instructiunilor este fix, in timp ce la alte calculatoare numarul de cuvinte utilizat pentru reprezentarea unei instructiuni depinde de tipul acesteia. De exemplu o instructiune a unui calculator ipotetic care trebuie sa adune continutul cuvantului de memorie aflat la adresa 100 cu cel care se gaseste la adresa 200, memorind rezultatul la adresa 250 ar putea sa fie descrisa in memorie cu ajutorul a 4 octeti dispusi la adrese consecutive, dupa cum se arata in Fig.1.16.

ADD

Fig. 1.16 Structura unei instructiuni in memorie

In memorie codul operatiei si adresele operanzilor, ca de altfel si datele, 'arata la fel' si numai modul in care unitatea centrala de prelucrare interpreteaza un numar il face pe acesta sa reprezinte codul unei operatii, adresa unui operand sau o data.

Subsistemul de intrare iesire

Rolul subsistemului de intrare / iesire este de a conecta echipamentele periferice la calculator. Prin intermediul acestor echipamente periferice se realizeaza de fapt schimbul de informatii cu lumea externa care poate sa fie reprezentata de operatori umani, alte procesoare, memorii externe, etc.

Cele mai obisnuite echipamente periferice de intrare / iesire sunt: terminalele de introducere / afisare date, unitatile pentru discuri magnetice, unitatile pentru benzi magnetice, plotere, imprimante, etc.

Se observa ca aceste echipamente sunt caracterizate de forme foarte diferite de reprezentare a informatiei si de viteze diferite de transfer a informatiei. De asemenea echipamentele periferice de tip disc sau banda magnetica pot sa transfere la un moment dat blocuri mari de date, in timp ce echipamentele de tip terminal pot sa transfere la un moment dat un singur caracter. Corespunzator in subsistemele de intrare / iesire sunt continute interfete pentru cuplarea echipamentelor periferice. Rolul acestor interfete este de a realiza conversia de format si de viteza intre unitatea centrala de prelucrare si echipamentele periferice.

Limbaje de programare

Un calculator poate sa fie utilizat pentru a rezolva orice problema pentru care se poate defini precis o rezolvare. Prin definire se intelege in acest caz posibilitatea descompunerii problemei (si deci a rezolvarii) in subprobleme a caror rezolvare presupune executia unor comenzi specifice calculatorului. Cu alte cuvinte calculatorul poate sa fie utilizat pentru orice problema pentru care rezolvarea poate sa fie descrisa sub forma unui algoritm in termenii operatiilor specifice calculatorului.

Sa consideram de exemplu problema realizarii unui dictionar roman ‑ englez. Problema se rezolva foarte simplu, pentru ca ceea ce se cere este de fapt cautarea unei perechi de cuvinte intr‑o lista de echivalente. Dificultatile reale legate de rezolvarea acestei probleme sunt cele referitoare la construirea dictionarului (formarea bazei de date) si cele referitoare la regasirea rapida a cuvantului cautat pentru cazul in care dictionarul considerat este mare. Pe de alta parte, problema traducerii din limba romana in limba engleza, bineinteles cu pastrarea semnificatiei textului, este o problema foarte dificila din cauza intelesului ascuns al unor combinatii de cuvinte in functie de context. Din acest motiv algoritmizarea acestei probleme este inca un subiect de cercetare. De altfel, acesta este si motivul pentru care atat in fazele de specificare a rezolvarii unor probleme cu ajutorul calculatorului, cat si pentru specificarea algoritmilor chiar si pentru cazuri in care interlocutorul este omul, se prefera utilizarea, in locul limbajului natural, a unor limbaje artificiale pentru care intelesul fiecarei constructii este precis (vezi pseudocodul, organigramele, si alte forme de specificare a algoritmilor). Desigur, ideea creerii unor limbaje artificiale nu este noua, in sensul ca aparitia ei nu este legata de aparitia calculatoarelor. Limbajul matematic, formulele chimice nu reprezinta altceva decat limbaje artificiale create in scopul comunicarii in conditiile anularii oricaror posibilitati de aparitie a unor formulari ambigue. Aparitia calculatoarelor a dus insa la aparitia unei clase speciale de limbaje artificiale si anume limbajele de programare. Un limbaj de programare este un limbaj artificial utilizat pentru comunicarea cu calculatorul.

Un limbaj de programare, ca de altfel orice limbaj, este definit prin: vocabular, sintaxa si semantica. Vocabularul unui limbaj este format din semnele si cuvintele din care se pot forma propozitii. Sintaxa unui limbaj este formata din totalitatea regulilor de buna formare a propozitiilor, iar semantica unui limbaj este data de totalitatea regulilor prin care se asociaza semnificatii propozitiilor.

In general un calculator este o masina care 'stie' sa execute un set de operatii simple numite instructiuni. Un program nu este altceva decat o secventa de instructiuni, efectul executiei acestei secvente de instructiuni fiind o anumita prelucrare de informatie. Instructiuniile 'elementare' pe care un calculator poate sa le 'inteleaga' si deci sa le execute sunt in general instructiuni foarte simple ca de exemplu: aduna doua numere, compara un numar cu altul, muta o informatie dintr‑o parte a memoriei calculatorului in alta, etc. Setul instructiunilor elementare pe care calculatorul le 'intelege' direct impreuna cu regulile de scriere a unor secvente de astfel de instructiuni formeaza un limbaj de programare. Acest limbaj este denumit de obicei limbaj masina, fiind specific masinii respective.

Exista peste o suta de limbaje de programare iar procesul de creare a noi limbaje de programare continua. In diferite perioade ale istoriei calculatoarelor diferite limbaje de programare au fost considerate ca fiind 'cele mai bune'. De fapt daca facem abstractie de criteriul: ' cel mai bun limbaj este cel pe care il stiu', criteriul conform caruia tipul problemei determina tipul limbajului in care se descrie rezolvarea problemei, pare cel mai corect.

O cerinta fundamentala a oricarui limbaj de programare este asigurarea unei comunicatii eficiente si comode intre om si calculator. Problema este insa ca ceea ce este comod pentru calculator este foarte nepotrivit pentru utilizator si invers. Pe de alta parte, daca la inceput elementul cel mai 'pretentios' dintre cei doi parteneri era calculatorul si utilizatorul a trebuit sa se adapteze, folosind limbaje de programare foarte apropiate de nivelul operatiilor pe care le poate executa calculatorul, pe masura ce progresele tehnologice au permis, au inceput sa se dezvolte limbaje de programare concepute in ideea avantajarii utilizatorului. De fapt orice calculator 'stie' sa execute un set de operatii, sa le zicem elementare. Daca descrierea algoritmului de rezolvare a problemei se face chiar in termenii acestor operatii elementare folosind coduri numerice, se spune ca se face programarea in cod masina. Desigur programarea unui calculator la acest nivel este foarte dificila si oamenii au scapat relativ repede de acest nivel. Se considera de fapt ca exista doua nivele de limbaje de programare: limbaje de programare de nivel scazut si limbaje de programare de nivel inalt. Limbajele de programare de nivel scazut se numesc si limbaje de asamblare. Fiecare tip de calculator are propriul sau limbaj de asamblare. O operatie in limbaj de asamblare corespunde unei operatii in limbaj masina, deosebirea fiind ca la nivelul limbajului de asamblare specificarea operatiilor se face utilizand nume simbolice (ADD, MOV, JMP, JNZ, etc) in timp ce la nivelul limbajului masina specificarea operatiilor se face utilizand coduri numerice. Suplimentar fata de limbajul masina un limbaj de asamblare dispune si de alte facilitati specifice (pseudoinstructiuni, macroinstructiuni, etc). In cazul limbajelor de nivel superior o operatie corespunde de obicei cu o secventa de operatii in limbaj masina, cu alte cuvinte puterea (complexitatea) operatiilor puse la dispozitia programatorilor este mult mai mare. Avand in vedere observatia ca numarul de linii de program scrise si verificate pe calculator intr‑un interval de timp dat de catre un programator nu depinde de limbajul de programare utilizat, este evident ca cu cat puterea operatiilor puse la dispozitie de catre limbajul de programare este mai mare, complexitatea problemelor rezolvate cu acelasi efort de catre un acelasi programator este mai mare. Un alt avantaj al limbajelor de programare de nivel inalt este ca in majoritatea cazurilor programele scrise in astfel de limbaje sunt independente de particularitatile calculatoarelor pe care sunt utilizate.

Asa cum s‑a mai aratat, fiecare limbaj de programare a fost inventat pentru a facilita realizarea unui anumit tip de aplicatii si nu exista si probabil ca nu poate sa existe un limbaj de programare bun pentru orice tip de aplicatii.

Se pune problema insa cum se realizeaza implementarea unui limbaj de programare pe un calculator. Exista doua cai de abordare posibile si amandoua au fost considerate importante la un moment dat. Prima cale este de a realiza calculatoare care sa 'stie' limbaje cat mai evoluate si in istorie au existat numeroase astfel de incercari mai mult sau mai putin incununate de succes (ca de exemplu calculatorul Burroughs 7400 programabil direct in ALGOL, microprocesorul iAPX 432 programabil in ADA sau mai nou masinile LISP, MODULA, PROLOG, etc).

A doua cale presupune utilizarea chiar a calculatorului care stie numai limbajul masina (il vom numi LM) pentru a permite programatorului sa se exprime intr‑un limbaj de nivel inalt (pe care il vom numi LI). Avand in vedere ca si LI este destinat efectuarii unor prelucrari de date inseamna ca fiecare instructiune din acesta poate sa fie exprimata cu ajutorul unei secvente finite de instructiuni din LM. In acest caz procesul de trecere de la o instructiune din LI la instructiuni din LM poate sa fie automatizat, cu alte cuvinte se poate scrie un program care sa realizeze traducerea instructiunilor din LI in instructiuni din LM. Evident acest program va fi scris (cel putin prima data) utilizand instructiuni din LM. Un astfel de program se numeste translator. Exista doua tipuri de translatoare: compilatoare si interpretoare. Daca translatorul traduce intreg programul scris in LI in instructiuni LM, obtinand un program scris in LM care va putea fi utilizat ca atare ori de cate ori este nevoie, spunem ca translatorul este de tip compilator. Daca translatorul realizeaza recunoasterea unei instructiuni din LI, executa secventa de instructiuni LM corespunzatoare si apoi trece la urmatoarea instructiune din LI, spunem ca translatorul este de tip interpretor. Amandoua tipurile de translator permit unui programator in limbajul LI sa ignore faptul ca calculatorul pentru care scrie programul in LI nu 'intelege' direct acest limbaj. Este ca si cum la dispozitia acestui programator se gaseste un alt calculator, un calculator virtual avand o arhitectura diferita de a celui real.

Pentru ca operatia de traducere sa fie simpla este bine ca raportul intre complexitatea instructiunilor disponibile in LI si in LM sa nu fie foarte mare. Corespunzator, limbajul LI poate sa fie inca prea simplu pentru descrierea unor aplicatii semnificative. In acest caz se poate considera un nou limbaj LI' avind instructiunile mai aproape de situatia ideala si se poate utiliza limbajul LI pentru a construi calculatorul virtual care 'stie' limbajul LI', asa cum rezulta din Fig. 1.17.

Desigur trei nu este in acest caz un numar fatidic, deci ierarhia de calculatoare si respectiv de limbaje poate sa aiba mai multe nivele. Semnificativa este relatia dintre un limbaj si un calculator virtual, si anume orice limbaj defineste arhitectura unui calculator virtual care 'stie' sa execute programe scrise in acest limbaj. In acelasi timp orice calculator defineste un limbaj de programare.

Fig 1.17 Structura ierarhica de limbaje

Elemente de arhitectura si structura ale unui calculator numeric

Concepte de baza

Un sistem de prelucrare numerica a datelor este format dintr‑o colectie de module (unitati functionale) interconectate intre ele. Caracteristicile constructive ale acestor unitati, modul de interconectare a acestora, caile de comunicatie a datelor formeaza structura sistemului de prelucrare numerica a datelor.

Fiecare modul la randul lui poate sa fie privit ca fiind format dintr‑o unitate de comanda mai mult sau mai putin complexa si resursele care asigura suportul prelucrarilor controlate de unitatea de comanda, reunite sub numele de unitate de executie. Resursele accesibile programatorului si modalitatile de control a acestora prin interpretari concrete la nivelul setului de instructiuni formeaza arhitectura sistemului de prelucrare numerica a datelor.

Un repertoriu de instructiuni este specificat prin :

formatul instructiunilor;

semantica instructiunilor.

Prin formatul instructiunilor se specifica numarul de cuvinte de memorie utilizat pentru memorarea fiecarui tip de instructiune si semnificatia campurilor care formeaza instructiunea. In general o instructiune este compusa din doua componente :

codul operatiei indica operatia efectuata de catre instructiune;

campul de adrese (prezenta acestui camp depinde de tipul operatiei) specifica modul de obtinere a operanzilor si eventual de memorare a rezultatului operatiei.

In proiectarea unui set de instructiuni trebuie sa se considere o serie de factori ca de exemplu:

alegerea lungimii instructiunii influenteaza performantele unitatii centrale de prelucrare. Daca viteza de transfer a memoriei este de t cuvinte pe secunda si numarul mediu de cuvinte utilizate pentru o instructiune este r, atunci memoria poate sa asigure un flux de maximum t/r instructiuni pe secunda. Se observa deci ca cu cat instructiunile sunt mai scurte cu atat numarul de instructiuni executate in unitatea de timp poate sa fie mai mare deoarece faza de aducere a unei instructiuni dureaza de regula mai mult decat timpul de executie al unei instructiuni;

alegerea lungimii campului cod operatie din instructiuni determina numarul de instructiuni diferite ce pot fi codificate in cadrul acestui camp;

lungimea cuvintelor de memorie si deci a instructiunilor este de obicei un multiplu al numarului de biti necesari pentru reprezentarea caracterelor pentru a permite utilizarea eficienta a memoriei pentru memorarea sirurilor de caractere;

alegerea lungimii campului utilizat pentru specificarea adresei unui operand determina capacitatea memoriei ce poate fi adresata. Evident unitatea de adresare a memoriei (cuvantul) poate avea la randul ei diferite lungimi. Daca de exemplu unitatea de adresare a memoriei este un cuvant de 32 de biti atunci capacitatea memoriei adresabile va fi de patru ori mai mare decat in cazul in care unitatea de adresare a memoriei este un cuvant de 8 biti, pentru aceeasi lungime a adresei.

Sa consideram un format de instructiune compusa din codul operatiei si o adresa. Sa presupunem ca primul cimp ocupa k biti iar al doilea n biti. Rezulta deci ca este posibila codificarea a 2k operatii diferite iar spatiul de memorie adresabil este de 2n adrese diferite. Daca acelasi numar n + k de biti se imparte in k‑1 pentru campul codului si n+1 pentru adresa se pot codifica de doua ori mai putine instructiuni dar in schimb se va putea adresa o memorie cu o capacitate dubla. Se observa deci ca in alegerea dimensiunii campurilor trebuie acceptat un compromis intre posibilitatea de a codifica cat mai multe tipuri de instructiuni si posibilitatea de a adresa un spatiu de memorie cat mai mare.

Sa consideram o UCP avand instructiuni de 16 biti pentru care adresele se pot specifica pe 4 biti. O solutie de proiectare consta din realizarea unor instructiuni avand codul operatiei de 4 biti si trei campuri de adresa pentru doi operanzi si un rezultat. In acest caz rezulta ca sunt posibile numai 16 tipuri de instructiuni. O solutie care permite codificarea unui numar mai mare de instructiuni consta din utilizarea mai multor formate de instructiuni cu aceasi lungime, asa cum se vede in tabelul urmator.

Cod operatie

rezultat

operand1

operand2

Observatii

xxxx

xxxx

xxxx

15 instructiuni

xxxx

xxxx

xxxx

cu 3 adrese

xxxx

xxxx

xxxx

Cod operatie

operand1

operand2

xxxx

xxxx

14 instructiuni



xxxx

xxxx

cu 2 adrese

xxxx

xxxx

Cod operatie

operand

xxxx

31 instructiuni

xxxx

cu o adresa

xxxx

Cod operatie

16 instructiuni

Se observa ca in acest mod cu 16 biti se pot specifica 76 de instructiuni diferite.

O alta solutie consta din utilizarea unui format de instructiuni care sa admita instructiuni de lungimi diferite. In acest caz se obtine o utilizare mai buna a memoriei in sensul ca o instructiune pentru care trebuie sa se specifice mai putine informatii poate sa ocupe un spatiu de memorie mai mic. In acest caz insa structura Unitatii de Comanda este mai complexa.

Moduri de adresare

Instructiunile pot sa fie clasificate in functie de numarul de adrese pe care il specifica. Numarul de adrese dintr‑o instructiune depinde de semantica instructiunii. Astfel pentru o instructiune care realizeaza de exemplu operatia de adunare se pot specifica :

adresele operanzilor si ale rezultatului, rezultand o instructiune cu trei adrese;

adresele a doi operanzi daca rezultatul inlocuieste unul dintre operanzi, rezultand o instructiune cu doua adrese;

adresa unui operand daca celalalt operand si rezultatul sunt memorate in mod implicit intr‑un registru de tip acumulator, rezultand o instructiune cu o adresa;

nici o adresa daca adunarea se face intre doi operanzi situati in varful stivei, rezultatul fiind plasat in varful stivei, rezultand astfel o instructiune cu zero adrese.

Considerand ca registrele reprezinta si ele un spatiu adresabil se poate considera ca o instructiune care aduna continutul a doua registre, memorand rezultatul in unul dintre acestea, este o instructiune cu doua adrese ca si instructiunile care realizeaza aceleasi operatii asupra unor locatii de memorie.

Pentru instructiunile de salt adresa la care se face saltul reprezinta operandul instructiunii. Rezulta corespunzator ca o instructiune de salt este o instructiune cu o adresa.

Ceea ce se memoreaza intr‑o instructiune pentru un operand sau pentru un rezultat este de fapt informatia necesara pentru determinarea valorii operandului, respectiv adresa rezultatului. Mecanismul prin care pornind de la informatia continuta in instructiune se ajunge la valoarea operandului respectiv la adresa rezultatului poarta numele de mod de adresare. Numarul mare de moduri de adresare disponibile in calculatoarele moderne a rezultat din necesitatea de a asigura o implementare cat mai simpla si eficienta a unor structuri de date complexe.

In cele ce urmeaza utilizam urmatoarele notatii:

r ‑ registru accesibil programatorilor;

(r) ‑ continutul registrului r;

M[x] ‑ continutul locatiei de memorie aflata la adresa x;

d ‑ valoarea unui deplasament continut in instructiune;

Prezentam in continuare cele mai uzuale moduri de adresare caracteristice calculatoarelor moderne.

1°. Adresare la registre

In acest caz operandul este continut intr‑un registru specificat in instructiune. Obtinerea valorii operandului nu necesita accese la memorie.

2°. Adresare prin registre

Pentru acest mod de adresare instructiunea contine specificarea unui registru r al carui continut reprezinta adresa operandului. Rezulta deci ca valoarea operandului este M[(r)]

3°. Adresare prin registre cu incrementare sau decrementare

Functionarea acestui mod de adresare este similara cu a modului anterior din punctul de vedere al mecanismului de obtinere a valorii operandului. In mod suplimentar, continutul registrului utilizat este actualizat prin incrementare sau decrementare inainte sau dupa obtinerea valorii operandului. Valoarea cu care se face incrementarea sau decrementarea este egala cu lungimea ocupata in memorie de operand. Deci valoarea operandului este M[(r)+N] sau M[(r)‑N] iar continutul registrului r devine (r)+N sau (r)–N, unde N este lungimea operandului.

In cazul in care acest tip de adresare se utilizeaza in legatura cu registrul CP se obtine modul de adresare imediat pentru care valoarea operandului este continuta in instructiune. Evident actualizarea registrului utilizat (CP) se face dupa obtinerea valorii operandului.

In cazul in care registrul utilizat este registrul SP acest mod de adresare realizeaza implementarea unei memorii de tip stiva pentru care accesul este permis prin intermediul registrului SP numai la ultima informatie memorata. Pentru adresarea in stiva exista de obicei doua tipuri de adresare: adresare pentru memorare (PUSH). pentru care actualizarea continutului registrului SP se face inainte de accesul la memorie si adresare pentru extragere din stiva (POP) pentru care actualizarea continutului registrului SP se face dupa accesul la memorie.

In general pentru un repertoriu de instructiuni se prevede un mod de adresare cu decrementarea registrului inainte de referirea operandului (predecrementare) si un mod de adresare cu incrementarea registrului dupa referirea operandului (postincrementare). In acest mod se poate realiza implementarea unei stive care creste de la adrese mari spre adrese mici. Daca se alege cealalta pereche posibila: incrementare inainte de referirea operandului si decrementare dupa referirea operandului se poate implementa o stiva care creste de la adrese mici spre adrese mari.

4°. Adresare prin registre indirecta cu incrementare sau decrementare

Acest mod de adresare se obtine adaugind un nivel de indirectare la modul de adresare anterior. In cazul in care operatia de actualizare a continutului registrului r implicat in acest mod de adresare se face inainte de obtinerea operandului atunci valoarea operandului este M[M[(r)+N]] sau M[M[(r)‑N]] iar continutul registrului r devine (r)+N sau (r)–N, unde N este lungimea operandului. In cazul in care operatia de actualizare a continutului registrului r implicat in acest mod de adresare se face dupa obtinerea operandului atunci valoarea operandului este M[M[(r)]] cu acelasi tip de actualizare al continutului registrului r. In cazul in care registrul utilizat este CP si incrementarea se face dupa obtinerea operandului se obtine modul de adresare directa. Pentru acest tip de adresare, adresa operandului este continuta in instructiune. Daca se mai adauga un nivel de indirectare, adica adresa continuta in instructiune este adresa la care se gaseste in memorie adresa operandului atunci se obtine modul de adresare indirecta.

5°. Adresare bazata

Se numeste registru de baza un registru al carui continut este utilizat pentru un calcul de adresa. Daca r este un registru de baza atunci valoarea operandului este M[(r)+d]. Se observa ca adresarea prin registru este o adresare bazata pentru care valoarea deplasamentului este zero. Deoarece valoarea deplasamentului este continuta in instructiune, obtinerea sa poate presupune o citire din memorie. In general adresarea bazata este utilizata pentru extinderea spatiului adresabil. Sa consideram de exemplu un format de instructiune pentru care se utilizeaza k biti pentru un camp de adresa. In acest caz spatiul adresabil are capacitatea de 2k. Daca se utilizeaza insa un registru de baza format din m biti, se observa ca spatiul de 2k biti poate sa fie dispus oriunde intr‑un spatiu de memorie cu capacitatea de 2m + 2k. De regula m > k. De exemplu daca k = 10 si m = 16 se obtine accesul la zone de memorie de 1K in cadrul unei memorii cu o capacitate de 64K.

In situatia in care numarul de biti afectati pentru d este suficient pentru a permite accesul la intreaga memorie se obtine modul de adresare indexata in acest caz registrul r se numeste registru index. Modurile de adresare bazata sau indexata pot sa fie utilizate pentru implementarea accesului la un vector de date aflate in memorie la adrese succesive. Actualizarea registrului de baza (index), necesara pentru trecerea de la un element al vectorului la altul, presupune adunarea (scaderea) la continutul curent al registrului a lungimii unui element al vectorului. Se observa ca din cele doua componente care participa la calculul adresei operandului una este fixa si anume valoarea d continuta in instructiune. Evident aceasta valoare poate sa fie interpretata ca adresa de inceput a vectorului sau ca indice in vector.

Daca registrul CP este utilizat ca registru de baza se obtine modul de adresare autorelativa. Acest tip de adresare se utilizeaza in general numai pentru instructiunile de salt. Ceea ce se specifica in instructiune este distanta intre adresa instructiunii curente si a operandului referit de catre instructiune. In acest ultim caz deplasarea trebuie sa fie un numar intreg cu semn pentru a permite referiri inainte si inapoi.

6°. Adresare bazata si indexata

In cazul acestui tip de adresare se utilizeaza pentru calculul adresei continutul a doua registre r1 si r2. Valoarea operandului este in acest caz M[(r1)+(r2)]. Acest tip de adresare este util pentru implementarea accesului la elementele unui vector; pentru care r1 contine adresa de inceput a vectorului iar r2 contine valoarea indexului in acest vector pentru elementul referit, inmultita cu lungimea unui element. Se observa ca in acest caz cei doi termeni care participa la calculul adresei pot sa fie modificati, cu alte cuvinte atat adresa de inceput cat si indicele elementului referit pot sa varieze spre deosebire de cazul adresarii indexate.

Pe baza modurilor de adresare considerate anterior se pot construi si alte moduri de adresare prin adaugarea unor noi nivele de indirectare si prin adaugarea unor operatii de actualizare a continutului registrelor continute in instructiune inainte sau dupa efectuarea referirii la operand.



loading...






Politica de confidentialitate

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2346
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2020 . All rights reserved

Distribuie URL

Adauga cod HTML in site