procesorul (unitatea de...calcul, registri pt operanzi/instructiuni, etc)
memoria, pt stocarea datelor( operanzi ) si codului (instructiuni)
dispozitive de I/O (pt "introducerea" si "extragerea programului/datelor) 212g64c
|
Procesorul este locul/dispozitivul in care se efectueaza "calculele". Operanzii, pastrati in registrii de date sunt prelucrati conform instructiunii din registrul de instructiuni, rezultatul prelucrarii fiind depus intr-unul din registrii de date.
Problema: numarul registrilor de date este limitat, de regula la cateva zeci, ori, cel mai adesea, rezolvarea unei probleme implica mai multe date si rezultate partiale. In plus instructiunile/comenzile care descriu modul de rezolvare pot fi la randul lor de ordinul miilor. Este evident necesara existenta unui spatiu pentru "depozitarea" datelor si a instructiunilor pana in momentul cand sunt necesare in registri.
Memoria este locul dispzitivul in care se pastreaza datele si instructiunile unui program care se "rezolva"(executa). Memoria este organizata in locatii capabile sa stocheze unitati de informatie (date sau instructiuni). O data sau instructiune poate sa constea din una sau mai multe astfel de unitati de informatie, stocate in locatii consecutive. Fiecare locatie de memorie are o adresa ( numarul de ordine fata de inceputul memoriei). Regasirea unei date sau cod de instructiune in memorie se face pe baza adresei sale. Registrul de adrese (din processor) este cel in care se incarca adresa datei sau a instructiunii care urmeaza sa fie aduse din memorie intr-unul din registrii de date sau in registrul de instructiuni.
Problema: cum ajung in memorie datele si codurile de instructiuni care descriu un algoritm? Si cum se pot "vedea" rezultatele programului? Penru aceasta sunt necesare dispozitivele de Intrare/Iesire (Input/Output - I/O).
Dispozitivele de I/O. Dispozitivele de intrare permit introducerea atat a succesiunii de coduri de instructiuni care descriu algoritmul cat si a datelor problemei ce urmeaza a fi rezolvate conform acelui algoritm. Dispozitivele de iesire au in principal rolul de a permite vizualizarea rezultatelor programului.
alegere model/algoritm pentru precizarea solutiei
editarea fisierului sursa (in limbaj sursa!)
compilarea sursei si obtinerea fisierului cu codul obiect
o corectii (daca au fost erori de compilare)
linkeditare (legarea cu alte module obiect)
o
corectii (daca au fost erori de linkeditare)...
testarea programului
Limbajele de programare (si modelul simplu de calculator):
Descrierea si manipularea datelor, respectiv a codului.
Date: constante si variabile (reprezentare si utilizare)...
C-ul a aparut cu ocazia dezvoltarii noului sistem de operare UNIX pentru calculatorul PDP-11. Dennis Ritchie si ulterior Brian Kernigham, in cautarea celui mai potrivit limbaj pentru scrierea sistemului de operare au conceput in cele din urma (la inceputul anilor '70) un limbaj nou: C. Filiatia: CPL, B, BCPL, C.
Peste 90% din sistemul de operare UNIX a fost scris in acest limbaj nou, restul (in general driverele de dispozitive) fiind scris in limbaj de asamblare.
limbaje de nivel inalt (ALGOL, FORTRAN, Pascal, Lisp, etc)
C
Limbaje de asamblare
cod masina
dimensiunea redusa:
27 cuvinte cheie
inexistenta instructiunilor de I/O sau a celor pentru operatii matematice mai complicate
structura lejera: orice functie de biblioteca poate fi rescrisa
viteza: codul este foarte eficient
slab tipizat: programatorul are libertate maxima pentru tratarea datelor in functie de necesitati
limbaj structurat (chiar inainte de aparitia programarii structurate ca moda)
permite (incurajeaza) programarea modulara
interfata simpla cu limbjele de asamblare
operatori pe biti
variabile pointer
structuri flexibile: tablourile sunt unidimensionale (dar pot consta din elemente de orice tip, inclusiv .tablouri)
utilizarea eficienta a memoriei
portabilitate sporita
biblioteci de functii speciale
faptul ca este slab tipizat => posibilitate sporita de erori datorita conversiilor necontrolate (trunchieri)
controlul in timpul executiei este foarte sumar (de ex. nu se verifica depasirea limitelor unui tablou)
Aspectele esentiale in aprecierea unui limbaj de programare:
calitatea compilarii si in general a procesului de dezvoltare a unui program
calitatea codului rezultat (viteza de executie, fiabilitatea,
Adoptat in 1989 (pornind de la editia a doua a cartii lui B. Kernigham si D. Ritchie: The C Programming Language) standardul ANSI C se conformeaza spiritului:
ai incredere in programator
nu-l impiedica pe programator sa faca ceea ce trebuie facut
pastreaza limbajul "mic si simplu"
Program (dupa Wirth):
Structuri de date
+
algoritm
Un program C este alcatuit din urmatoarele elemente constitutive:
directive de preprocesare (precompilare)
declaratii:
de variabile
de functii
definitii de functii
comentarii
Specificarea unui program sursa (succesiune de secvente de caractere - litere, cifre, semne speciale - care identifica datele si instructiunile) se face prin intermediul atomilor lexicali (tokens).
Reprezentarea unui algoritm intr-un limbaj de programare se face cu ajutorul elementelor recunoscute de analizorul lexical - parte a compilatorului - specific pentru acel limbaj de programare.
Pornind de la definitia data de N.Wirth unui program:
Program = Structuri de date + Algoritm
urmatoarele elemente (atomi lexicali sau tokeni) trebuie recunoscute de catre analizorul lexical:
cuvintele cheie, care descriu de regula instructiunile limbajului, dar si alte elemente, ca de exemplu denumirile tipurilor de date. Se pot include in aceasta categorie si operatorii, chiar daca nu sunt propriu-zis cuvinte cheie, pentru ca descriu operatii
constantele
identificatorii, utilizati pentru denumirea variabilelor, functiilor, etichetelor
separatori
.
Ultimele doua clase de atomi lexicali din enumerarea de mai sus sunt cei cu ajutorul carora se descrie partea de "date" (in sensul de materie prima asupra careia se actioneaza sau care rezulta) a unui program.
|