Sunteți pe pagina 1din 5

PC

Laborator 1

Obiectivele laboratorului:

1. Prezentarea notiunilor de baza despre arhitectura si functionarea unui sistem de calcul


2. Prezentarea notiunilor de baza despre limbajele de programare si clasificari ale acestora

1. Arhitectura unui sistem de calcul

In contextul acestei lucrari, termenul de arhitectura se va folosi pentru a face referire la


alcatuirea interna a unui sistem (componentele acestuia, rolul fiecareia, conexiunile si
interactiunile dintre componente).

Componentele unui sistem de calcul (calculator) compatibil IBM-PC pot fi clasificate in


doua categorii:
- componente hardware (elementele fizice, mecanice, electronice care se regasesc
in structura unui sistem de calcul)
- componente software (elementele logice, programele care se executa pe un sistem
de calcul)

1.1 Arhitectura hardware a unui sistem de calcul

Arhitectura hardware a unui sistem de calcul este prezentata in figura 1:

Dispozitive
de iesire

Memorie Memorie
externa Procesor interna
(harddisk) RAM
ROM
Dispozitive
de intrare

Dispozitive
periferice

Figura 1: Arhitectura hardware a unui sistem de calcul

Evident, aceasta imagine este extrem de simplificata. In realitate, arhitectura unui sistem
de calcul modern, cu tehnologii de ultima generatie la momentul scrierii acestei lucrari arata in
felul urmator:
Figura 2: Arhitectura hardware a unui sistem de calcul cu chipsetul Intel 955X

Procesorul reprezinta componenta centrala a oricarui sistem de calcul. Rolul acestuia


este de a executa programe din memoria interna a calculatorului si de a interactiona cu
dispozitivele periferice, sub controlul acestor programe. Intr-o forma mult simplificata,
procesorul suporta un set de operatii aritmetico-logice pe care le poate aplica asupra unor date
din memoria interna. Aceste operatii, numite si instructiuni, sunt codificate sub forma unor valori
numerice. O succesiune de astfel de instructiuni alcatuiesc un program. Spre exemplu,
instructiunea codificata prin valoarea 3 are ca efect adunarea a doua valori intregi, iar
instructiunea cu codul 43 are ca efect scaderea a doua valori intregi. Semnificatia atribuita
fiecarei instructiuni si operatiile pe care procesorul le efectueaza la intalnirea ei in cadrul unui
program sunt stabilite si documentate de catre producatorul procesorului. Setul de instructiuni
acceptat de procesor formeaza limbajul masina al respectivului procesor.

Procesorul poate executa programe numai din memoria interna. Aceasta este vazuta ca
un set de locatii care permit stocarea si regasirea unei valori numerice intregi. Fiecare locatie are
asociata o anumita adresa, care permite identificarea acesteia. Un calculator are doua tipuri de
memorie interna:
- memorie RAM (Random Access Memory), caracterizata prin faptul ca permite atat
scrierea cat si citirea continutului unei locatii in mod direct. Continutul memoriei se pierde insa
la intreruperea alimentarii cu energie electrica, de aceea se mai numesc si memorii volatile.
- memorie ROM (Read Only Memory), caracterizata prin faptul ca in functionarea
normala, aceasta permite doar citirea valorilor din locatiile de memorie componente. Nu isi
pierde continutul la intreruperea alimentarii cu energie electrica, de aceea se mai numeste
memorie nevolatila.

Pentru a extinde posibilitatile de utilizare ale unui calculator, acesta contine si o serie de
dispozitive periferice. Dispozitivele periferice pot fi clasificate dupa mai multe criterii, unul
dintre acestea fiind sensul traficului de date intre dispozitiv si procesor. In acest context, exista
doua categorii de periferice:
- periferice de intrare (introducerea datelor in calculator), cum ar fi mouse-ul, tastatura,
scanner-ul etc.
- periferice de iesire (extragerea datelor din calculator), ca de exemplu monitorul,
imprimanta, interfata audio etc.
Evident, exista si dispozitive periferice care permit comunicarea cu sistemul de calcul in
ambele directii, indeplinind atat functii de intrare cat si de iesire. Ca exemplu, o interfata audio
permite atat generarea de sunete din calculator cat si inregistrarea in calculator a sunetelor din
mediul extern printr-un microfon.
In domeniul dispozitivelor periferice, un loc important il ocupa memoriile externe.
Acestea ofera posibilitati de stocare / regasire de informatii si sunt caracterizate in general prin
capacitati mult mai mari decat memoriile interne, dar viteze de acces la date mult mai mici. In
general, memoriile externe sunt nevolatile.
Un exemplu tipic de memorie externa il reprezinta harddisk-ul, care utilizeaza tehnologii
bazate pe fenomene magnetice pentru a stoca date, permitand in utilizarea normala atat scrierea
cat si citirea informatiilor. Un alt exemplu il reprezinta CDROM-ul sau DVD-ul care utilizeaza
tehnologii bazate pe fenomene optice pentru stocarea si regasirea informatiilor. In utilizarea
normala, acestea sunt medii de stocare de tip read-only.

1.2 Arhitectura software a unui sistem de calcul

Termenul software se refera la programele care se executa pe un sistem de calcul (de


catre procesor). Din punct de vedere software, un sistem de calcul contine urmatoarele elemente:

Aplicatia 1 Aplicatia 2 Aplicatia 3

Sistemul de operare

BIOS

Figura 3: Arhitectura software a unui sistem de calcul

Pe nivelul cel mai de jos se afla un set de programe si secvente de program cunoscute sub
denumirea de BIOS (Basic Input/Output System). Aceasta componenta software a unui sistem
de calcul are urmatoarele responsabilitati:
- detectia, testarea sumara a bunei functionari si initializarea componentelor hardware ale
sistemului la pornirea acestuia
- gestiunea diversilor parametri de configuratie ai dispozitivelor hardware si
implementarea unei interfete cu utilizatorul pentru modificarea acestor parametri (Setup)
- implementarea unor secvente de program (subrutine) care permit nivelelor software
superioare sa acceseze dispozitivele periferice (discheta, harddisk, interfata grafica, tastatura,
etc.) printr-o interfata standardizata.
- lansarea in executie a unui sistem de operare de pe un mediu de stocare extern (proces
cunoscut sub numele de boot-are)
In general, componenta BIOS a unui sistem de calcul se afla implementata sub forma
unui program stocat in memorie ROM, care preia controlul sistemului la pornirea calculatorului.
Sistemul de operare este componenta software a unui sistem de calcul care este
responsabila cu gestionarea resurselor fizice si logice ale acestuia si partajarea acestora intre
aplicatiile utilizatorului. Prin resurse ale calculatorului intelegem: procesorul, memoria interna,
memoriile externe (fisierele de pe un disc sunt gestionate de catre sistemul de operare),
dispozitivele periferice de intrare – iesire, etc. Un alt rol al sistemului de operare este acela de a
pune la dispozitia aplicatiilor utilizatorului (intr-o forma reutilizabila) anumite servicii de baza
comune majoritatii aplicatiilor. Spre exemplu, sistemele de operare din familia Microsoft
Windows pun la dispozitia celor care realizeaza aplicatii toate elementele necesare pentru
implementarea unei interfetei grafice, astfel incat aspectul vizual al aplicatiilor sa fie familiar si
accesibil utilizatorului.
Aplicatiile utilizatorului sunt instrumente pe care acesta le foloseste pentru a a efectua
diverse prelucrari asupra unor date de intrare pentru a obtine niste date de iesire. Domeniile de
utilizare ale sistemelor de calcul si aplicatiilor sunt extrem de vaste si includ aplicatii pentru
prelucrare de sunete, imagini statice si in miscare, tehnoredactare, foi de calcul, baze de date,
comunicatii, aplicatii multimedia, tehnoredactare de texte etc.

2. Notiuni de baza despre limbajele de programare

Dupa cum s-a vazut, limbajul nativ al unui procesor este limbajul masina, care consta
dintr-o serie de instructiuni reprezentate prin coduri numerice pe acesta le executa secvential din
memoria interna. Insa scrierea aplicatiilor utilizand limbajul masina este o operatiune extrem de
dificila, predispusa la erori de programare si total neadecvata pentru aplicatiile de complexitate
medie – mare. De aceea, odata cu evolutia puterii de calcul a procesoarelor, au fost create si
utilizate noi limbaje de programare cu o sintaxa mai apropiata de limbajul natural. Limbajele au
fost numite "de nivel inalt", in contrast cu limbajul masina, de nivel scazut. Trebuie subliniat insa
faptul ca procesorul nu poate executa in mod direct aceste instructiuni. De aceea, intotdeauna
este necesar un translator pentru traducerea instructiunilor limbajului de nivel inalt in limbaj
masina. Programul scris in limbajul de nivel inalt, inainte de a fi trecut prin translator se mai
numeste program sursa sau cod sursa.
Exista mai multe criterii dupa care se pot clasifica limbajele de programare. Primul
criteriu se refera la nivelul de apropiere al acestora de limbajul natural al omului. In acest
sens, exista urmatoarele categorii:
- limbaje de nivel inalt: Pascal, Java, PHP, Prolog, Matlab, SQL, Lisp, Python, etc
- limbaje de nivel mediu: C, C++
- limbaje de nivel scazut: limbajul de asamblare

Limbajul de asamblare este cel mai apropiat de limbajul masina al procesorului. Ca


simplificare insa fata de limbajul masina, codurile numerice ale instructiunilor sunt inlocuite cu
niste mnemonice (prescurtari de 3-4 litere ale cuvintelor care indica operatia aferenta respectivei
instructiuni). Astfel, mnemonica ADD desemneaza operatia de adunare (corespunzator codului 3
din limabjul masina), mnemonica SUB desemneaza operatia de scadere (corespunzator codului
43 din limabjul masina) samd. Translatorul utilizat pentru traducerea mnemonicilor din limbaj de
asamblare in limbajul masina se numeste asamblor. In cazul celorlalte limbaje de nivel superior,
translatorul poarta denumirea de compilator sau interpretor, dupa cum se va vedea in cele ce
urmeaza.

O alta clasificare a limbajelor de programare se poate face dupa momentul in care


programul este tradus in limbajul masina al procesorului. Exista astfel doua categorii:
- limbaje compilate: programul sursa este tradus integral din limbajul de nivel inalt in
limbajul masina, iar rezultatul este un fisier executabil care se poate copia si distribui pe oricate
calculatoare, fara a avea nevoie de codul sursa pentru a-l putea executa. Translatorul utilizat se
numeste compilator. Avantajele compilarii sunt: viteza de executie ridicata, intrucat programul
este deja transpus in intregime in cod masina in momentul executiei; protejarea drepturilor
intelectuale ale autorilor prin faptul ca programul sursa nu trebuie distribuit odata cu cel
executabil. Dezavantajul consta in faptul ca in general, pentru a putea fi compilat, un limbaj de
programare trebuie sa fie destul de rigid si restrictiv. Ca exemple de limbaje compilate
mentionam: C, C++, Pascal, Java.

- limbaje interpretate: in cazul acestor limbaje, programul se distribuie sub forma de


cod sursa. Odata cu programul trebuie distribuit si un translator pentru acest limbaj, care sa
asigure traducerea programului in limbaj masina. Translatorul poarta denumirea de interpretor.
In cazul acestor limbaje insa, interpretorul functioneaza in felul urmator: preia prima comanda
din codul sursa, o traduce in limbaj masina si o executa, dupa care preia urmatoarea comanda din
codul sursa, o traduce si o executa samd. Procesul se repeta pentru fiecare comanda. Principalul
avantaj al limbajelor interpretate il reprezinta flexibilitatea sporita care se obtine din acest mod
de executie (spre exemplu, in majoritatea limbajelor interpretate, variabilele intermediare folosite
in program nu mai trebuie declarate si rezervate explicit). Totodata, intretinerea programelor este
simplificata, deoarece orice modificare la nivelul codului sursa se reflecta imediat in program,
nemaifiind necesara etapa explicita de compilare. Principalul dezavantaj al limbajelor
interpretate este insa viteza de executie mai scazuta, datorita interpretarii pas cu pas a
programului. Ca exemple de limbaje interpretate mentionam: PHP, JavaScript, VBScript, Prolog,
Matlab.

In functie de scopul pentru care au fost proiectate, limbajele de programare se clasifica


in urmatoarele categorii:
- limbaje de uz general: se preteaza la rezolvarea majoritatii problemelor de programare
intalnite in practica, dar pentru unele domenii de probleme necesita un effort deosebit. Ca
exemple, mentionam limbajele C, C++, Pascal. In general, desi nu este o regula, acestea sunt
limbaje compilate
- limbaje specializate: orientate exclusiv pentru rezolvarea problemelor dintr-un anumit
domeniu restrans. Ca exemplu se poate considera limbajul Prolog, specializat pentru rezolvarea
problemelor ce apar in aplicatiile de inteligenta artificiala, limbajul SQL pentru interogarea
bazelor de date, Matlab pentru calcule matematice (in special operatii cu matrici). Majoritatea
limbajelor specializate sunt interpretate

O alta clasificare introduce urmatoarele categorii de limbaje de programare:


- limbaje tipizate: acestea sunt limbaje care impun anumite restrictii asupra operatiilor
care se pot aplica anumitor date, in functie de tipul datelor (numerice, siruri de caractere, etc).
Tipul datelor trebuie declarat inainte de introducerea acestora in program si respectat pe tot
parcursul programului. Majoritatea limbajelor compilate sunt si tipizate: C, C++, Pascal, Java.
Limbajele tipizate sunt mai usor de compilat.
- limbaje netipizate, care nu impun nici un fel de restrictii (spre exemplu, variabilele nu
sunt restrictionate la un anumit tip de data si nu trebuie declarate inainte de a fi folosite). Aceste
limbaje ofera o flexibilitate mai sporita, sunt mai putin restrictive. Majoritatea limbajelor
specializate sunt netipizate, iar majoritatea limbajelor netipizate sunt interpretate.

Intrebari recapitulative:
1. Care sunt functiile procesorului ?
2. Cate tipuri de memorie interna exista ?
3. Care sunt cele mai raspandite tipuri de memorii externe ?
4. Care sunt caracteristicile limbajelor compilate ? Dar cele interpretate ?
5. Care sunt caracteristicile limbajelor tipizate ? Dar cele netipizate ?
6. In cazul fiecarui criteriu de clasificare prezentat mai sus, in ce categorii se incadreaza
limbajul C ?

S-ar putea să vă placă și