+ All Categories
Home > Documents > G Albeanu Arhitectura Sist Calcul

G Albeanu Arhitectura Sist Calcul

Date post: 02-Aug-2015
Category:
Upload: mimiagnes014857
View: 239 times
Download: 37 times
Share this document with a friend
96
Grigore ALBEANU ARHITECTURA SISTEMELOR DE CALCUL
Transcript
Page 1: G Albeanu Arhitectura Sist Calcul

Grigore ALBEANU ARHITECTURA

SISTEMELOR DE CALCUL

Page 2: G Albeanu Arhitectura Sist Calcul

Descrierea CIP a Bibliotecii Naţionale a României ALBEANU, GRIGORE Arhitectura sistemelor de calcul / Grigore Albeanu

– Bucureşti, Editura Fundaţiei România de Mâine, 2007 96p.; 23,5 cm. Bibliogr. ISBN 978-973-725-756-7

004.2(075.8)

© Editura Fundaţiei România de Mâine, 2007

Page 3: G Albeanu Arhitectura Sist Calcul

UNIVERSITATEA SPIRU HARET FACULTATEA DE MATEMATICĂ-INFORMATICĂ

Grigore ALBEANU

ARHITECTURA SISTEMELOR DE CALCUL

EDITURA FUNDAŢIEI ROMÂNIA DE MÂINE Bucureşti, 2007

Page 4: G Albeanu Arhitectura Sist Calcul
Page 5: G Albeanu Arhitectura Sist Calcul

5

CUPRINS

Cuvânt înainte ………………………………………………………………. 7

1. Bazele aritmetice ale sistemelor de calcul ……………………………... 9 1.1. Sisteme de numeraţie ………………………………………………... 9 1.2. Coduri ……………………………………………………………….. 15 1.3. Reprezentarea numerelor întregi ……………………………………. 17 1.4. Reprezentarea IEEE 754 …………………………………………….. 19 1.5. Exerciţii ……………………………………………………………... 22

2. Bazele logice ale sistemelor de calcul ………………………………….. 25 2.1. Latici şi algebre Boole ………………………………………………. 25 2.2. Funcţii booleene. Forme normale …………………………………… 28 2.3. Aplicaţii ……………………………………………………………... 31 2.4. Exerciţii ……………………………………………………………... 33

3. Structura sistemelor de calcul …………………………………………. 35 3.1. Resursele fizice ale sistemelor de calcul ……………………………. 35

3.1.1. Generaţii de calculatoare ……………………………………... 35 3.1.2. Procesor. Caracteristici. Set de instrucţiuni …………………... 37 3.1.3. Memorii ………………………………………………………. 39 3.1.4. Dispozitive periferice ………………………………………… 41 3.1.5. Viteza de procesare …………………………………………… 48 3.1.6. Clasificarea sistemelor de calcul ……………………………... 50 3.1.7. Modelarea sistemelor digitale ………………………………… 54

3.2. Resursele logice ale sistemelor de calcul …………………………… 57 3.2.1. Introducere în sisteme de operare …………………………….. 57 3.2.2. Iniţiere în utilizarea sistemelor de calcul bazate pe UNIX …… 59 3.2.3.Iniţiere în utilizarea PC/Windows …………………………….. 65 3.2.4. Resurse logice privind programarea calculatoarelor …………. 68

3.3. Exerciţii ……………………………………………………………... 70

4. Calculatorul MMIX ……………………………………………………. 75 4.1. Instrucţiunile calculatorului MMIX …………………………………. 75 4.2. Programarea calculatorului MMIX …………………………………. 88 4.3. Exerciţii ……………………………………………………………... 93

Bibliografie …………………………………………………………………. 95

Page 6: G Albeanu Arhitectura Sist Calcul

6

Page 7: G Albeanu Arhitectura Sist Calcul

7

CUVANT ÎNAINTE

Sistemele de calcul au evoluat continuu, iar această evoluţie continuă să ne

uimească. Această lucrare încearcă să capteze atât bazele matematice ale sistemelor de calcul (utile oricărui programator), cât şi să prezinte o radiografie a prin-cipalelor concepte interesante atât pentru utilizatori cât şi pentru programatori.

Primele două capitole acordă o importanţă majoră bazelor de numeraţie şi funcţiilor booleene deoarece orice utilizator/programator, mai devreme sau mai târziu, are nevoie de acele concepte şi tehnici din largul evantai al bazelor aritmetice şi logice ale sistemelor de calcul.

Capitolul întâi se ocupă de modalităţi de reprezentare a datelor în sistemele de calcul. Atât pentru numere naturale, numere întregi cât şi pentru numere raţionale, sistemul binar se impune. Programatorii au nevoie, însă, şi de sistemele hexazecimal sau octal. Complementul faţă de doi, reprezentarea IEEE 754 nu trebuie să lipsească din pregătirea informaticienilor. Ele ne permit să înţelegem tipurile de date cu care operează limbajele de programare (inclusiv cele care manipulează obiecte) precum şi operaţiile cu aceste date.

Sistemele de calcul au fost proiectate, iniţial, pentru calcule ştiinţifice. Ori, reprezentarea IEEE 754 este doar unul dintre modelele de reprezentare a numerelor reale. Prin urmare familiarizarea cu avantajele şi dezavantajele acestei reprezentări, precum şi cunoaşterea implicaţiilor utilizării unei reprezentări discrete a numerelor reale în locul celei dense considerate de către matematicieni.

De asemenea (în momentul actual), stabilirea culorilor în realizarea paginilor HTML necesită cunoaşterea sistemului hexazecimal, iar căutarea de informaţie folosind motorul Google necesită utilizarea cuvintelor AND, OR etc. (deci a operaţiilor logice).

Capitolul al doilea, aparent teoretic, are aplicaţii majore în proiectarea sistemelor digitale şi a optimizării calculului. Dacă dorim să programăm eficient trebuie să simplificăm expresiile logice, să înţelegem modul de funcţionare a unui sistem de calcul particular.

Capitolul al treilea este doar pentru utilizatori, dar un programator are nevoie să cunoască mult mai mult decât oferă prezentul material. Unii cititori pot spune că nu este nevoie de UNIX/Linux pentru că Windows (de la Microsoft) este sistemul de operare la care au acces în acest moment. Nici o problemă! Mai devreme sau mai târziu vor avea ocazia să utilizeze şi alte sisteme de calcul decât calculatoarele personale.

Acest capitol poate fi oricând extins în funcţie de noile tehnologii informaţionale. Au fost introduse modurile de utilizare UNIX/Windows pentru

Page 8: G Albeanu Arhitectura Sist Calcul

8

că acestea domină piaţa actuală. Experienţa de utilizare / programare se poate îmbunătăţii numai prin exerciţiu, prin experiment. Comenzile externe Windows pot fi studiate folosind Windows NT/2000/XP în mod text, iar comenzile UNIX prezentate pot fi experimentate cu orice versiune de Linux. Aceasta nu face ca cel care parcurge materialul să nu se poată descurca şi cu alte sisteme de calcul. Calculatorul MMIX este, deocamdată, unul virtual. Dar câte experimente se pot face. Aici, cititorul va înţelege, că înainte de a avea un calculator pentru asamblat, acesta este proiectat (funcţionarea acestuia fiind simulată pe alte sisteme existente deja), simulat, fabricat, testat şi apoi multiplicat (eventual în clone precum calculatoarele IBM/PC). Experienţa cu MMIX permite cititorului să abordeze orice arhitectură de procesor, inclusiv arhitecturile MIPS/Intel/Motorola.

Ianuarie 2007 Autorul

Page 9: G Albeanu Arhitectura Sist Calcul

9

1. BAZELE ARITMETICE ALE SISTEMELOR DE CALCUL

1.1. Sisteme de numeraţie

Pentru prelucrarea datelor, omul lucrează în sistemul de numeraţie zecimal,

folosind cele 10 simboluri: 0, 1, 2, ..., 9, numite cifre (eng. digits). Pentru domeniul sistemelor de calcul digitale1, cele mai importante sisteme

de numeraţie sunt: binar, octal şi hexazecimal. Sistemul binar foloseşte baza de numeraţie 2:

0 + 1 = 1 + 0 = 1; 0 + 0 = 0; 1 + 1 = (10)2 = 2 (în baza 10); 0 x 0 = 1 x 0 = 0 x 1 = 0, 1 x 1 = 1).

Sistemul octal, cu baza opt, foloseşte simbolurile: 0, 1, ..., 7. Baza de numeraţie a sistemului hexazecimal este 16, iar simbolurile

folosite sunt: 0, 1, ..., 9, a, b, c, d, e, f. Se pot utiliza – prin corespondenţă biunivocă - şi simbolurile A, B, C, D, E, F cu semnificaţia simbolurilor a, b, c, d, e, f.

Datorită modului poziţional, de lucru, indiferent de sistemul de numeraţie utilizat, realizarea operaţiilor aritmetice urmează acelaşi algoritm2.

De exemplu, la adunare se face transport de la ordinul curent la ordinul imediat superior. Fie X = (xn-1 xn-2 … x1 x0)b şi Y = (yn-1 yn-2 … y1 y0)b, operaţia Z = X + Y produce n simboluri în baza b, Z = (zn-1 zn-2 … z1 z0)b şi un simbol T pentru transport (transportul iniţial este 0). Algoritmul de calcul este:

Algoritmul A1: T:= 0; Pentru k de la 0 la n-1 (crescător cu pasul 1)se execută : S = xk +yk+T; Zk := S mod b (Restul împărţirii lui S la b); T := S / b (Câtul împărţirii lui S la b);

1 Un sistem de calcul (calculator) este o structură destinată prelucrării datelor. El este alcătuit din resurse fizice (hardware), resurse logice (software) şi resurse informaţionale (fişiere de configurare, registre de profil etc.) care cooperează pentru satisfacerea cerinţelor utilizatorilor privind introducerea, memorarea (stocarea), prelucrarea, transmiterea (către un alt sistem de calcul), precum şi regăsirea (prin interogare) datelor. Se face distincţie între sistemele de calcul digitale (numerice) şi sistemele de calcul analogice. 2 Un algoritm este o reţetă care descrie un proces de calcul şi este asociat rezolvării problemelor decidabile.

Page 10: G Albeanu Arhitectura Sist Calcul

Procesul privind transformarea reprezentărilor exprimate în sisteme de

numeraţie se numeşte conversie. Referitor la sistemele de numeraţie, descriem câteva metode de conversie şi algoritmii de calcul corespunzători3.

Codificarea unui număr real într-o bază de numeraţie b (b ≥ 2), se bazează pe operaţiile de împărţire şi înmulţire aplicate numerelor întregi.

Pentru a converti un număr real format din parte întreagă şi parte fracţionară (x = [x]+{x}), din scrierea zecimală, în baza b (b ≥ 2), se procedează astfel:

1. se împarte (conform teoremei împărţirii cu rest4) la b, partea întreagă şi

câturile obţinute după fiecare împărţire, până se obţine câtul zero. Rezultatul conversiei este constituit din resturile obţinute, luate în ordine inversă apariţiei acestora. Algoritmul A2. Fie y un număr natural căruia îi corespunde, în baza b,

secvenţa (an-1,an, …,a1,a0)b, conform relaţiei y = , Algoritmul

A2 descrie etapele prin care pornind cu y şi b se obţine lungimea n şi simbolurile codului.

∑−

=

1

0

n

k

kkba

Date de intrare: y, b

Paşii: k := 0; ak := y mod b; y := y / b; Cât timp y ≠0 se execută i) k := k + 1; ii) ak := y mod b; iii) y := y/b; n:=k+1; Ieşire: n, (an-1,an, …,a1,a0)b.

3 Bazele de numeraţie îşi vor dovedi utilitatea atât în contextul programării calculatoarelor (limbaj de asamblare, limbajul C, limbajul C++ etc.), cât şi în contextul utilizării calculatoarelor (de exemplu, la specificarea culorii textului când se realizează pagini Web: pentru culoarea având structura 40% roşu, 20% verde şi 40% albastru, se obţine 40% din 255 = 102 = #66; 20% din 255 = 51 = #33, iar codul final al culorii se obţine prin concatenare: #663366).

10

4 Teorema împărţirii cu rest: dacă a (deîmpărţit) şi b (împărţitor) sunt numere întregi (b nenul), atunci există şi sunt unice numerele întregi q (câtul) şi r (restul), astfel încât a = b x q + r, 0 ≤ r < |b|, unde |b| reprezintă modulul (valoarea absolută) a numărului b.

Page 11: G Albeanu Arhitectura Sist Calcul

2. se înmulţeşte cu b, partea fracţionară5 şi toate părţile fracţionare

obţinute din produsul anterior, până când partea fracţionară este nulă sau a fost obţinut numărul de cifre dorit. Rezultatul conversiei părţii fracţionare este constituit din părţile întregi6 ale produselor, luate în ordinea apariţiei.

Fie y ∈ (0, 1) şi b (b ≥ 2) baza de numeraţie astfel încât y =

, unde m este numărul poziţiilor rezervate pentru

codificarea părţii fracţionare. Trebuie specificat că nu orice număr fracţionar y are reprezentare pe m poziţii.

∑=

−−

m

k

kk ba

1

Algoritmul A3. Se porneşte de la numărul fracţionar y, baza b şi un număr m_MAX care indică numărul maxim de poziţii rezervate pentru partea fracţionară. Numerele y care necesită mai mult de m_MAX poziţii vor fi aproximate prin numărul rezultat din considerarea celor m_MAX poziţii (folosind algoritmul A5).

Date de intrare: y, b, m_MAX

Paşii: m = 1; a-m = [y*b]; y = y*b-a-m; Cât timp (m < m_Max) şi (y ≠ 0) se execută: m := m+1; a-m := [y*b]; y = y*b - a-m; Ieşire: m şi reprezentarea 0,(a-1,a-2, …,a-m)b.

Exemple. Conversia binară a numărului zecimal 24,25 este 11000,01. Numărul zecimal 2002,2003 este reprezentat în sistem octal cu 10 poziţii în partea fracţionară (b = 8) prin şirul: 3722,1464011651. Numărul zecimal 1961,25 este reprezentat în format hexazecimal (b = 16) prin şirul: 7A9,4.

Pentru a transforma un şir de simboluri ale sistemului de numeraţie în baza b (b ≥ 2), în zecimal, se va calcula suma produselor dintre cifra corespunzătoare

5 Partea fracţionară a unui număr real a, notată {a}, este diferenţă dintre numărul a şi partea sa întreagă, notată [a], adică {a} = a – [a].

11

6 Conform principiului lui Arhimede, pentru orice număr real pozitiv x şi pentru orice număr real a, există un număr întreg n, unic, astfel încât (n-1)x ≤ a < nx. Pentru x = 1, numărul întreg n se numeşte partea întreagă a numărului a şi se notează cu [a]. Deci, [a] este cel mai mic număr întreg mai mic sau egal cu a: [a] ≤ a < [a]+1.

Page 12: G Albeanu Arhitectura Sist Calcul

(din şir) şi baza7 ridicată la puterea specificată de poziţia acesteia (algoritmii A4 şi A5).

Trebuie observat că poziţiile sunt indicate: 1. pentru partea întreagă, de la dreapta la stânga, prin numerele 0, 1, … ş.a.m.d. 2. pentru partea fracţionară, de la stânga la dreapta, prin numerele: -1, -2, … ş.a.m.d.

Algoritmul A4. Se porneşte cu n, b şi secvenţa (an-1,an, …,a1,a0)b pentru a

obţine valoarea y = ∑ . −

=

1

0

n

k

kk ba

Date de intrare: n, b şi (an-1,an, …,a1,a0)b

Paşii (conform schemei lui Horner): v := an-1; Pentru k de la n-2 până la 0, descrescător (cu pasul -1) se execută v := v * b + ak; y = v; Ieşire: y.

Algoritmul A5. Se porneşte cu m, b şi reprezentarea (0,a-1,a-2, …,a-m)b

pentru a obţine valoarea y = . ∑=

−−

m

k

kk ba

1

Date de intrare: m, b şi reprezentarea (0,a-1a-2 …a-m)b

Paşii: v : = a-m; Pentru k de la -m+1 crescător la -1 (cu pasul 1) se execută: v := v/b+ak; y := v/b; Ieşire: y.

Exemple. Şirul binar 01100110101,10101 corespunde numărului zecimal:

821,65625 (= 1x29 + 1x28 + 0x27 + 0x26 + 1x25 + 1x24 + 0x23 + 1x22 +0x21 +1x20 +1x2-1 +0x2-2 +1x2-3 +0x2-4 +1x2-5). Şirul octal 765,567 corespunde numărului zecimal: 501,732421875. Şirul hexazecimal 3A5,4 reprezintă numărul zecimal 933,25.

127 Aici este vorba de numărul b (baza de numeraţie considerată; b ≥ 2)

Page 13: G Albeanu Arhitectura Sist Calcul

Conversia din binar în octal, hexazecimal şi invers se bazează pe observaţia conform căreia 8 = 23 şi 16 = 24, Astfel, folosind proprietăţile de calcul, se obţine o strategie de conversie automată între aceste sisteme. Conversia binar → octal, respectiv octal → binar foloseşte corespondenţa: Octal: 0 1 2 3 4 5 6 7 Binar: 000 001 010 011 100 101 110 111 Conversia binar → hexazecimal, respectic hexazecimal → binar, foloseşte corespondenţa: Hexazecimal: 0 1 2 3 4 5 6 7 Binar: 0000 0001 0010 0011 0100 0101 0110 0111 Hexazecimal: 8 9 A B C D E F Binar: 1000 1001 1010 1011 1100 1101 1110 1111

Exemple. Şirul cu 64de poziţii binare: 0111.0110.1110.1101.1011.1011.1010.1010.1110.1011.0101.0101.0101.0101.0101.0111

se va “traduce” în şirul octal: 0733555672535325252527, respectiv în şirul hexazecimal: 76EDBBAAEB555557. Se observă rolul sistemului binar ca sistem intermediar de conversie pentru sistemele de numeraţie în care baza este o putere a numărului doi.

Operaţiile aritmetice cu numere binare, octale, respectiv hexazecimale se efectuează similar operaţiilor cu numere zecimale. La adunare va interveni transportul către ordinul superior, la scădere va interveni împrumutul de la ordinul superior, iar înmulţirea se va desfăşura prin totalizarea unor produse parţiale, analog modului de calcul zecimal. Există şi algoritmi rapizi de efectuare a acestor operaţii, dar nu fac obiectul acestui material.

Pentru numere octale şi hexazecimale, operaţiile aritmetice sunt efectuate conform următoarelor reguli:

Tabla adunării octale:

13

Page 14: G Albeanu Arhitectura Sist Calcul

Tabla înmulţirii octale:

Tabla adunării hexazecimale:

Tabla înmulţirii hexazecimale:

14

Page 15: G Albeanu Arhitectura Sist Calcul

15

Exemple: 10110011 + 111110 = 11110001 (baza 2); 34022,56-1234,11=32566,45 (baza 8); 5DA2 x B8 = 434C70 (baza 16). Efectuaţi operaţiile arătând modul de calcul (se va folosi algoritmul A1).

1.2. Coduri Fie A şi B două mulţimi nevide şi B

+ mulţimea (infinită a) şirurilor (numite

şi cuvinte nevide peste B) formate cu elemente din B (în calitate de alfabet). Practic, un cuvânt peste alfabetul B este o secvenţă finită de simboluri din B: w = a1a2...ak, k ≥ 1, ai ∈ B, 1 ≤ i ≤ k. Numărul k reprezintă lungimea cuvântului w, notată şi prin |w|. Mulţimea tuturor cuvintelor peste B, la care se adaugă cuvântul de lungime zero (cuvântul vid), identificat prin λ, se notează cu B*, adică B* = B+ ∪{λ}.

Prin codificare a elementelor mulţimii A cu ajutorul elementelor mulţimii B înţelegem determinarea unei funcţii injective, ϕ, numită cod, definită pe mulţimea A cu valori în mulţimea B

*. Uneori, se numeşte cod chiar imaginea

mulţimii A, notată ϕ(A), prin funcţia de codificare. Codurile în care sunt reprezentate numai numere se numesc coduri

numerice, iar cele care cuprind numere, literele şi celelalte semne se numesc coduri alfanumerice. Altfel spus, un cod este un set de simboluri elementare împreună cu o serie de reguli potrivit cărora se formează aceste simboluri. Codificarea reprezintă procesul de stabilire a unui cod.

Dacă mulţimea A are n elemente, ne interesează determinarea lungimii codului, adică lungimea maximă a secvenţei din B* pentru a se putea codifica toate cele n obiecte. Dacă toate cuvintele din B* au aceeaşi lungime codul se numeşte uniform.

O codificare ϕ : A → B* în care toate cuvintele-cod ϕ(x), x ∈ A, au lungimea constantă k se numeşte codificare – bloc de lungime k, iar ϕ(A) este un cod – bloc de lungime k.

Mulţimea codurilor – bloc conţine codul ASCII, codul Unicode, codul ISBN etc. ). Codul ASCII (eng. American Standard Code for Information Interchange) - în engleză pronunţat “as-key” - este cel mai popular cod utilizat în transmiterea datelor. Codul ISBN (eng. International Standard Book Number) este un cod folosit de toate editurile din lume, fiecare carte având codul său unic (compus dintr-un prefix, codul ţării, codul editurii, codul publicaţiei şi cifra de control8).

Pentru cazul sistemelor de calcul, mulţimea B este formată din simbolurile unui sistem de numeraţie, iar lungimea codului depinde de natura obiectelor mulţimii A. Dacă B are numai două simboluri se obţine codificarea binară.

Un mesaj m este un element (şir) din A*: m = m1m2...m|m|. Codificarea mesajului m se obţine prin concatearea şirurilor ϕ(m1), ϕ(m2), ..., ϕ(m|m|). Evident mesajul vid se codifică prin cuvântul vid. 8 Codul ISBN are lungimea 13: http://www.niso.org/standards/resources/ISBN.html

Page 16: G Albeanu Arhitectura Sist Calcul

Codurile pot fi alfanumerice şi grafice (folosind imagini). Un exemplu de cod nenumeric, foarte popular, este codul de bare (eng. bar code). Codurile de bare pot fi liniare, dar şi 2D (PDF417, DataMatrix, MaxiCode etc.). Există coduri de bare cu lungime fixă, dar şi cu lungime variabilă9.

În cazul transferului datelor între sisteme de calcul pot apărea erori. De

aceea se utilizează coduri de control cu posibilitatea detectării şi corectării erorilor. Mai precis, se ataşează cifre binare (de control) la emisia mesajului, recepţia fiind responsabilă de controlul modului de respectare a corectitudinii mesajului.

Cele mai utilizate procedee pentru detectarea erorilor sunt: codurile pentru controlul parităţii şi codurile polinomiale ciclice.

Din cele de mai sus rezultă că datele sunt reprezentarea fizică (prin intermediul codului) a entităţilor din care este compusă informaţia (cifre, litere, semne speciale, imagini, sunete etc.) pentru ca aceasta să poată fi stocată, prelucrată sau transmisă.

Din punct de vedere logic, unei date i se asociază un identificator (simbol sau nume pentru diferenţierea de alte date şi pentru referirea acesteia). În vederea prelucrării, datelor le sunt asociate atribute precum:

• tipul datei (numeric: întreg sau real; logic; şir de caractere; enumerare, adresă etc.),

• precizia reprezentării interne şi • modul de vizualizare (poziţie, aliniere, corpul simbolului, dimensiunea

etc). În timpul prelucrării unele date îşi păstrează valoarea iniţială (se numesc

constante), iar altele se modifică în timp (se numesc variabile). Constantele hexazecimale vor fi scrise cu ajutorul unuia dintre prefixele

0x, 0X, respectiv #, după care va urma secvenţa simbolurilor 0..9, a-f sau A-F. Constantele octale vor fi descrise prin utilizarea prefixului 0. În lipsa

acestor prefixe, constantele numerice vor fi considerate ca fiind de tip zecimal (în baza 10).

Prin caracter se înţelege un element al codului ASCII (sau Unicode), iar un şir de caractere, de obicei este încheiat cu un cod special.

Mai multe detalii vor fi prezentate, în capitolul 4, în conexiune directă cu programarea procesoarelor.

169 http://www.itsc.org.sg/synthesis/2001/itsc-synthesis2001-jinsoon-bar-coding.pdf

Page 17: G Albeanu Arhitectura Sist Calcul

17

1.3. Reprezentarea numerelor întregi

Primele maşini de calcul (în special mecanice) au folosit sistemul de

numeraţie zecimal. La baza tehnicii calculului electronic au stat rezultatele obţinute în cadrul teoriei informaţiei şi în domeniul circuitelor electronice active. Cercetările întreprinse, au arătat că sistemul de numeraţie potrivit calculatoarelor digitale este cel binar, adică orice informaţie, oricât de complexă este, poate fi exprimată prin informaţii elementare.

Informaţia elementară este numită bit (eng. binary digit). Un bit este descris prin una din cifrele binare: 0, 1. Biţii se pot grupa formând un nyp (2 biţi; denumire10 dată de Gregor N. Purdy, conform D. Knuth (2005) ), niblle (patru biţi), octet (opt biţi; eng. byte; denumire stabilită în 1956 de Dr. Werner Buchholz de la IBM) etc. Următoarele secvenţe de mai mulţi octeţi sunt foarte importante: wyde (doi octeţi), tetrabytes (patru octeţi), octabytes (opt octeţi). Intern, ceea ce prelucrează un calculator numeric este un şir de cifre binare. Aceste şiruri fără a avea vreo semnificaţie se numesc date. Într-un calculator, informaţia reprezentată codificat formează mulţimea datelor.

Pentru a modela sistemul de numeraţie binar, trebuie utilizat un mecanism cu două stări (un comutator). Prin urmare, calculatorul poate fi privit ca un ansamblu de circuite electrice, electronice şi părţi mecanice, ansamblu numit hardware11. Prelucrarea datelor este realizată de programe, compuse din comenzi numite instrucţiuni. Totalitatea programelor poartă numele de software12. Se pot efectua operaţii de evaluare sau de transfer (cazul reţelelor de calculatoare).

Sistemele de calcul utilizează cel mai frecvent coduri alfanumerice cu 7, 8 şi 16 cifre binare care permit reprezentarea a 128 (ASCII), 256 (Latin-1 sau ISO 8859-1), respectiv 65536 (Unicode sau ISO/IEC 10646 UCS-2) obiecte (cifre, litere, caractere speciale.

Valorile din domeniul 0..31 ale codului ASCII descriu elemente de control, valorile din domeniul 32..126 descriu simboluri imprimabile (semne speciale, litere, cifre), iar valoarea 127 reprezintă codul elementului de control DEL. În 10 Alte denumiri sunt: crumb, quad, quarter, tayste, tydbit, conform

http://www.fullbooks.com/The-New-Hacker-s-Dictionary-version-4-2.html, http://dictionary.reference.com/browse/crumb etc.

11 Cuvântul hardware descrie totalitatea resurselor fizice ale unui sistem de calcul. Conform dicţionarului de informatică [DINF1981], hardware (din limba engleză) reprezintă un "termen general desemnând circuitele, dispozitivele şi echipamentele componente ale unui sistem de calcul", adică "toate unităţile fizice existente, cu funcţii bine determinate, în cadrul unui sistem de calcul; funcţiile sale, specificate de către fabricant, sunt la dispoziţia utilizatorului care le poate exploata cum doreşte." 12 Cuvântul software descrie atât programele de bază cât şi pe cele aplicative. Conform [DINF1981], software (din limba engleză) reprezintă un "termen utilizat pentru a desemna: a) totalitatea programelor cu care este echipat un sistem de calcul; b) preocupările corespunzătoare realizării produselor program şi, în cel mai larg sens, analizei şi cercetărilor efectuate în raport cu activităţile conexe realizării programelor."

Page 18: G Albeanu Arhitectura Sist Calcul

tabelul de mai jos este prezentat codul ASCII în exprimarea hexazecimală (de exemplu, #41 = 65, reprezintă caracterul 'A', iar #20 = 32 = SP este caracterul 'spaţiu'.)

Codurile numerice oferă posibilitatea reprezentării numerelor folosind

sistemul binar. Reprezentarea numerelor în acest sistem se face în mai multe forme, în funcţie de mulţimea căreia îi aparţin numerele, operaţiile aritmetice fiind efectuate de către dispozitive aritmetice specializate (sumatoare, multiplicatoare etc.).

Reprezentarea numerelor naturale se realizează pe un număr fix de poziţii binare (de regulă 8, 16, 32, sau 64) prin conversia numărului zecimal în baza 2. Pentru numărul natural x, această reprezentare este numită reprezentare aritmetică şi furnizează aşa numitul cod direct cd(x).

Prin utilizarea a n poziţii binare (n ≥ 1) se pot reprezenta aritmetic toate numerele naturale din plaja: 0 .. 2n-1. Se spune că aceste date sunt fără semn (eng. unsigned). Domeniile de valori acoperite de reprezentarea aritmetică sunt:

unsigned byte 0 .. 255 unsigned wyde 0 .. 65.535 unsigned tetra 0 .. 4.294.967.295 unsigned octa 0 .. 18.446.744.073.709.551.615

Reprezentarea numerelor întregi (eng. signed)- numită şi reprezentare

algebrică - este asemănătoare reprezentării numerelor naturale, cu deosebirea că prima poziţie este ocupată de semnul numărului întreg, iar celelalte simboluri se obţin în urma unei transformări bit cu bit. De obicei, reprezentarea unui număr întreg negativ x utilizează codul complementar faţă de doi c2(x) = c1(cd(|x|))+1, unde c1 asociază oricărei secvenţe binare, şirul obţinut prin schimbarea lui 0 în 1 şi a lui 1 în 0 (aşa numitul cod invers sau complement faţă de unu). În plus13, c2(x) = 2n +x, dacă primul bit din c2(x) este 1 (x < 0).

Cunoscând numărul n (n ≥ 1) de poziţii binare pe care se reprezintă un număr întreg în forma algebrică, plaja numerelor care admit o reprezentare în cod complementar este -2n-1 .. 2n-1-1. Codul complementar este potrivit pentru aplicaţii

18

13 De asemenea, dacă b>1 este baza unui sistem de numeraţie, iar x<0 este un număr a cărui reprezentare în baza b are n simboluri pentru partea întregă a valorii absolute, atunci complementul faţă de b al numărului x, notat cb(x) este definit astfel încât cb(x) = bn + x.

Page 19: G Albeanu Arhitectura Sist Calcul

19

deoarece operaţia de scădere este transformată în operaţie de adunare conform formulei: a - b = a + (-b), iar scăzătorul este reprezentat în cod complementar. Dacă rezultatul scăderii este un număr negativ, acesta este reprezentat tot în cod complementar. Dacă apare transport de la poziţia alocată semnului, acesta se ignoră. Domeniile de valori14 acoperite de reprezentarea algebrică sunt:

signed byte -128 .. 127 signed wyde -32.768 .. 32.767 signed tetra -2.147.483.648 .. 2.147.483.647 signed octa -9.223.372.036.854.775.808 ..

9.223.372.036.854.775.807

1.4. Reprezentarea IEEE 754

Numerele reale (mai precis numerele raţionale) se reprezintă sub formă fracţionară prin intermediul codificării în virgulă mobilă. Operaţiile aritmetice cu numere în virgulă mobilă sunt, fie realizate software (biblioteca metodelor de calcul numită şi API (eng. Application Programmer Interface)), fie prin intermediul unor dispozitive electronice specializate (procesoare de calcul în virgulă mobilă; FPU – Floating Point Unit).

Fie q şi b numere naturale nenule, iar x ∈ R dat. Numim reprezentare cu virgulă mobilă a numărului x, cu excesul q, în baza b, perechea (e, f) cu semnificaţia: x = f⋅be-q şi ⏐f⏐<1. Componenta e se numeşte parte exponenţială, iar componenta f, parte fracţionară. Dacă reprezentarea impune utilizarea a p ≥ 1(p ∈ N*) cifre în baza b atunci -bp ≤ bpf < bp.

Notăm cu e(x) (respectiv f(x)) cantitatea e (respectiv f) pentru a specifica numărul x luat în considerare.

Fie x, y numere reale, q şi b ca mai sus, dar fixate. Relaţia de ordine ">" este definită astfel: x > y ⇔ e(x) > e(y) sau ( e(x) = e(y) şi f(x) > f(y) ).

Despre un număr cu virgulă mobilă (e, f) se spune că este reprezentat normalizat dacă cifra cea mai semnificativă a reprezentării componentei f este nenulă, adică

1/b ≤ ⏐f⏐<1 pentru f ≠ 0 sau componenta e are cea mai mică valoare posibilă pentru f = 0.

Fie emin, emax numere întregi fixate. Mulţimea numerelor reale cu virgulă mobilă reprezentabile exact, în baza b, cu excesul q, folosind exact p poziţii pentru partea fracţionară este Fp,q={x ∈Q⏐ x = f⋅be-q, emin ≤ e-q ≤ emax , f = ± (c1b-1 + c2b-

2+ ... + cpb-p), ci ∈{0, 1, ..., b-1}, i =1, 2, ...,p}. Fie x un număr real. Spunem că x este situat în domeniul de valori numai dacă x ∈ Fp,q.

14 Trebuie subliniat că aceste domenii împreună cu operaţiile de adunare şi înmulţire nu formează structurile algebrice cunoscute. De exemplu nu orice întreg cu semn reprezentabil pe 64 de biţi are un opus.

Page 20: G Albeanu Arhitectura Sist Calcul

Exponentul minim emin este un număr întreg negativ, iar exponentul maxim emax este un număr întreg pozitiv. De obicei se memorează btf folosind una dintre reprezentările cu semn pentru numere întregi (cod invers sau cod complementar).

Observaţii: 1. Numerele şi sunt: cel mai mic număr pozitiv reprezentabil, respectiv cel mai mare număr reprezentabil. -K este cel mai mic număr reprezentabil. Dacă în timpul operaţiilor aritmetice rezultă numere în valoare absolută mai mici decât k (resp. mai mari decât K) se spune că s-au produs depăşiri aritmetice inferioare (respectiv, superioare).

1min −= ebk )1(max pe bbK −−=

2. Nu orice număr raţional x (x∈Q) poate fi reprezentat, chiar dacă k ≤ ⏐x⏐≤ K. De exemplu, x = 0,1 număr reprezentabil exact în baza 10, nu se poate reprezenta exact în baza 2. Acesta face ca expresia: 3/5*5-3 să fie evaluată de către mediul de programare Turbo Pascal, la valoarea 2.1684043450E-19, adică

0,00000000000000000021684043450, un număr foarte mic, dar nenul. 3. Dacă x ∈ Fp,q atunci –x ∈ Fp,q. Totuşi, pentru x ∈ Fp,q se poate întâmpla ca 1/x să nu fie reprezentabil sau să nu fie în domeniul de valori. 4. Sistemele de calcul actuale utilizează reprezentarea normalizată. În acest caz pentru f ≠ 0 avem c1 ≠ 0. Numărul 0 are o reprezentare specială care depinde de tipul sistemului de calcul.

Fie x ∈ R, valoarea reprezentării lui x aparţinând mulţimii Fp,q , se notează prin fl(x) şi se defineşte astfel: numărul reprezentabil exact, cel mai apropiat de x (metoda rotunjirii) sau cel mai apropiat număr reprezentabil, cu modul mai mic decât ⏐x⏐ (metoda trunchierii). Rezultă:

Oricare x∈R, x≠0, pcbx

xflx −≤− 1)(

, unde c = 0.5 în cazul metodei

rotunjirii şi c =1 în cazul metodei

trunchierii. Membrul stâng al inegalităţii de mai sus se numeşte eroarea relativă a

reprezentării numărului x. Acest rezultat este foarte important pentru interpretarea rezultatelor obţinute prin prelucrarea numerică a datelor.

Observaţii: 1. Sistemele de calcul bazate pe reprezentarea cu rotunjire sunt de preferat celor bazate pe trunchiere, deoarece în cazul trunchierii, eroarea relativă poate fi de până la o cifră a bazei în ultima poziţie. 2. Cu cât lungimea reprezentării părţii fracţionare (p) este mai mare, cu atât eroarea relativă a reprezentării este mai mică, adică precizia reprezentării este mai mare. De aceea, de multe ori, numărul p se mai numeşte (prin abuz de limbaj) şi precizia reprezentării.

20

Page 21: G Albeanu Arhitectura Sist Calcul

21

Fie p, b, e şi q fixate. Distanţa absolută dintre două numere consecutive din Fp,q este constantă şi egală cu be-q-p. Această distanţă creşte însă cu e-q şi b pentru p fixat. Distanţa relativă definită ca b-p/|f| scade o dată cu creşterea părţii fracţionare. Astfel se poate afirma, din nou, că sistemele de calcul preferate sunt cele care utilizează baza 2.

Dacă f = 1/b atunci se obţine distanţa relativă maximă, εM = b1-p. În cazul multor sisteme de calcul εM = 2εu unde εu este cel mai mic număr pozitiv reprezentabil pentru care fl(1+εu)>1.

Pentru sistemele de calcul pentru care b = 2, în anul 1985, a fost elaborat standardul IEEE 754. Un număr în virgulă mobilă este reprezentat cu ajutorul a c+m+1 biţi (un bit pentru semn, m biţi pentru partea fracţionară şi c biţi pentru reprezentarea lui e-q (numit şi caracteristică)) astfel încât numărul c+m+1 să fie un multiplu al lungimii cuvântului sistemului de calcul.

Exemplificăm implementarea reprezentărilor în virgulă mobilă IEEE 754 pe 64 de biţi (tipul de date double al limbajului Java). NaN, respectiv Inf sunt coduri care descriu nederminarea, respectiv ∞ (infinit). Cei 64 de biţi sunt repartizaţi astfel: b63 - bit de semn, biţii b52-b62 - caracteristica, iar biţii b0-b51 pentru reprezentarea părţii fracţionare. Valoarea numărului reprezentat astfel, se obţine după cum urmează:

D1: Dacă 0 < c < 2047 atunci fl(x) = (-1)s.2(c-1023).(1.f). D2: Dacă c = 0 şi f ≠ 0 atunci fl(x) = (-1)s.2(c-1022). (0.f). D3: Dacă c = 0 şi f = 0 atunci fl(x) = (-1)s.0. D4: Dacă c = 2047 şi f = 0 atunci fl(x) = (-1)sInf. D5: Dacă c = 2047 şi f ≠ 0 atunci fl(x) =(-1)s NaN. Ilustrăm aplicarea regulilor de mai sus pentru numărul 3.14. Folosind

schema din §1.1.1 obţinem: 3 = (11)2; 0.14 = 0.0(01000111101011100001) adică un număr binar periodic mixt. Astfel şirul 11,0010001111010111000010100011110101110000101000111101011100001...

este transformat în 21 x

1,10010001111010111000010100011110101110000101000111101011100001 ... ceea ce duce la - bitul de semn: 0 - caracteristica: x-1023=1 ⇒ x = 1024 = (1000000000)2 - mantisa este:

10010001111010111000010100011110101110000101000111101011100001... cu păstrarea a exact 52 de poziţii în reprezentarea cu trunchiere, respectiv

1001000111101011100001010001111010111000010100011111, în reprezentarea cu rotunjire.

Prin asamblarea celor 64 de biţi, pentru modelul cu rotunjire, se obţine reprezentarea IEEE 754 a numărului 3.14, pe 64 de biţi, cu afişare în sistemul de numeraţie hexazecimal:

40091EB851EB851F. Totuşi, transformarea inversă a şirului

Page 22: G Albeanu Arhitectura Sist Calcul

22

11,00100011110101110000101000111101011100001010001111 din baza 2 în baza 10 nu va duce la obţinerea cu exactitate a numărului 3.14, în nici una din variantele posibile (cu rotunjire sau cu trunchiere), deoarece reprezentarea în baza doi a numărului 3.14 este infinită, iar şirul de mai sus este unul finit.

Alte exemple de aproximări IEEE 754 sunt date în tabelul următor:

Numărul zecimal Reprezentare hexazecimală (cu rotunjire)

-3.14 C0091EB851EB851F 0.6 3FE3333333333333 0.1 3FB999999999999A -0.1 BFB999999999999A

De reţinut că deşi adunarea/înmulţirea sunt operaţii interne şi este

satisfăcută proprietatea de comutativitate, acestea nu sunt asociative. Înmulţirea nu este distributivă faţă de adunare, sunt probleme cu existenţa opusului (pentru NaN) şi cu relaţia de monotonie.

1.5. Exerciţii

1. Numărul zecimal 0,6 se reprezintă cu exactitate în memoria sistemelor de calcul binare. Această afirmaţie este: a. adevărată întotdeauna c. adevărată pentru microprocesoare INTEL b. falsă întotdeauna d. adevărată pentru procesoarele supercalculatoarelor Răspuns: b) Numărul zecimal 0.6 are o reprezentare binară infintă. Lungimea reprezentării în sistemele de calcul este finită, deci se pierd o infinitate de poziţii nenule, astfel că diferenţa dintre 0.6 şi reprezentarea sa este nenulă. 2. Conversia binară a numãrului zecimal 24,25 este: a. 00100100,00100101 c. 00100101,00100100 b. 11000,01 d. 10,00011 Răspuns: b) Se aplică algoritmul de conversie a unui număr real, scris în baza 10, într-o bază de numeraţie b (b >1). 3. Numărul zecimal reprezentat binar prin 101011,101 este: a. 12,345 c. 43,625 b. 34,125 d. nici una dintre variantele anterioare Răspuns: c) Se aplică algoritmul de conversie în baza 10 a unui număr scris în baza b (b > 1). 4. În cazul reprezentării cu semn (complement faţă de doi) pe 16 biţi (signed wyde) , afirmaţia 32767 + 2 = -32767 este: a. adevărată b. falsă

Page 23: G Albeanu Arhitectura Sist Calcul

23

Răspuns: a) Complementul faţă de doi al unui număr negativ este succesorul complementului faţă de unu al valorii absolute a numărului. Pentru lungimea şi tipul de reprezentare menţionate, 32767+1 = -32768, iar 32767 + 2 = -32767. 5. Rezultatul operaţiei 32 - 41 cu reprezentare în cod complementar (faţă de doi) pe 8 cifre binare a scăzătorului este: a. 11110111 c. 10001001 b. 00001001 d. 10010000 Răspuns: a) Se efectuează operaţiile considerând lungima şi tipul reprezentării menţionate. 6. Şirul binar 11000000110011110000111100100001 reprezintă un număr real în simplă precizie (32 biţi: IEEE 754 - single, float). Numărul este: a. pozitiv b. negativ Răspuns: b) Primul bit al secvenţei este alocat semnului. Cum 1 este pentru număr negativ rezultă că răspunsul corect este b). 7. Care sunt principalele atribute ale datelor? Răspuns: Datelor le sunt asociate atribute precum: tipul datei (numeric: întreg sau real; logic; sir de caractere; enumerare, adresă etc.), precizia reprezentării interne şi modul de vizualizare (pozitie, aliniere, corpul simbolului, dimensiunea etc). 8. Repartizarea biţilor în reprezentarea IEEE 754 pe 32 de biţi (single, float) este: _________ ___________________________________________________________________________ Răspuns: Reprezentarea IEEE 754 pentru single, respectiv float, utilizează 32 de biţi repartizaţi astfel: b[31] - bit de semn (notat în continuare cu s), biţii b[23]-b[30] pentru memorarea caracteristicii (c), iar biţii b[0]-b[22] pentru reprezentarea părţii fracţionare (f). Valoarea fl(x), se obţine conform regulilor (prin * este redată operaţia de înmulţire): S1: Dacă 0 < c < 255 atunci fl(x) = (-1)s*2(c-127)*(1,f). S2: Dacã c = 0 şi f ≠ 0 atunci fl(x) = (-1)s*2(c-126)*(0,f). S3: Dacã c = 0 şi f = 0 atunci fl(x) = (-1)s*0. S4: Dacã c = 255 şi f = 0 atunci fl(x) = (-1)sInf (∞). S5: Dacă c = 255 şi f ≠ 0 atunci fl(x) = NaN. (Not a Number - nedeterminare) 9. [Controlul parităţii] La transmiterea unei succesiuni binare x1, x2, …, xn se ataşează o cifră binară de control an+1, aleasă astfel încât numărul total de cifre binare 1 să fie par sau impar, în funcţie de convenţia stabilită. Să presupunem că se utilizează paritatea impară şi trebuie transmis, serial, şirul de opt biţi: 10100111. Care va fi al 9-lea bit ce trebuie transmis? Răspuns: Deoarece numărul biţilor 1 din şirul de transmis este 5, care este număr impar (fără soţ) şi se utilizează paritatea impară, bitul de control trebuie să fie 0 (zero).

Page 24: G Albeanu Arhitectura Sist Calcul

24

10. Să se specifice şirul binar final care rezultă la transmiterea cu paritate pară a secvenţelor:

a) 10011100; b) 11001101; c) 00111010.

Răspuns: a) 100111000; b) 110011011; c) 001110100. 11. Presupunem că s-a utilizat procedeul parităţii impare. Stabiliţi mesajele transmise corect.

a) 100111001; b) 110011011; c) 001110100.

Răspuns: Este potenţial corectă transmisia secvenţei a). 12. [Codul Gray] Se consideră cifrele zecimale de la 0 la 9 şi secvenţele de patru cifre binare pornind de la 0000 care se obţin prin modificarea unei singure cifre binare din secvenţa anterioară. Se obţine, astfel, codul Gray: (0, 0000), (1, 0001), (2, 0011), (3, 0010), (4, 0110), (5, 0111), (6, 0101), (7, 0100), (8, 1100), (9, 1101). Trebuie observat că acest cod nu se obţine prin algoritmi de conversie a bazelor de numeraţie. Reprezentaţi în codul Gray numerele:

a) 7; b) 14; c) 169; d) 4096. Răspuns: a) 0100; b) 00010110; c) 000101011101; d) 0110000011010101.

Page 25: G Albeanu Arhitectura Sist Calcul

25

2. BAZELE LOGICE ALE SISTEMELOR DE CALCUL

2.1. Latici şi algebre Boole

Definiţia 2.1.1. Se numeşte latice Dedekind o mulţime nevidă L înzestrată cu două operaţii binare notate “+” şi “•” astfel încât pentru oricare elemente x, y, z ∈ L să fie valabile următoarele proprietăţi:

comutativitate: (1) x + y = y + x; (2) x • y = y • x; asociativitate: (3) (x + y) + z = x + (y + z); (4) (x • y) • z = x • (y • z); absorbţie: (5) x • (x + y) = x; (6) x + (x • y) = x.

Exemple

1) Mulţimea părţilor (submulţimilor) unei mulţimi M notată P(M) (sau 2M) înzestrată cu operaţiile “∪“ şi “∩“ formează o latice Dedekind. 2) Mulţimea valorilor de adevăr {0, 1} înzestrată cu operaţiile “∨“ (disjuncţia logică) şi “∧“ (conjuncţia logică) formează de asemenea o latice Dedekind care, în plus, are şi alte proprietăţi.

Principiul dualităţii pentru latici: Dacă într-o propoziţie adevărată din teoria laticilor Dedekind se înlocuieşte o operaţie prin cealaltă (şi invers) se obţine, de asemenea, o propoziţie adevărată.

Propoziţia 2.1.1. În orice latice Dedekind (L, +, •), pentru orice element x

∈ L sunt adevărate relaţiile: (7) x + x = x; (8) x • x = x.

Demonstraţie. x + x [rel (5)] = x + (x • (x + y)) [rel (6)] = x. De asemenea, x • x [rel (6)] = x • (x + (x • y)) [rel (5)] = x.

Propoziţia 2.1.2. În orice latice (L, +, •) avem x + y = y dacă şi numai

dacă x • y = x, oricare ar fi elementele x şi y aparţinând mulţimii L.

Page 26: G Albeanu Arhitectura Sist Calcul

26

Demontraţie. Presupunem că x + y = y. Atunci x • y = x • (x+y) = x (folosind (5)). Reciproc, presupunem că x • y = x. Atunci x + y = x • y + y = y + y • x = y, după aplicarea comutativităţii şi a relaţiei (6).

Definiţia 2.1.2. Fie x, y ∈ L, notăm “x ≤ y” dacă şi numai dacă x + y = y

(echivalent cu x • y = x). Propoziţia 2.1.3. Relaţia “≤“ este o relaţie de ordine parţială. Demonstraţie. Reflexivitatea rezultă din relaţiiele (7) ş (8). Din x ≤ y şi y ≤

x rezultă x + y = y şi y + x = x, dar x + y = y + x (relaţia (1)), deci x = y. Dacă x ≤ y şi y ≤ z rezultă x + z = x + (y+z) = (x+y) + z = y + z = z, folosind definiţia 2.1.2 şi relaţia (3). Prin urmare x ≤ z.

Observaţie: În cazul laticei (P(M),∪, ∩), ordinea corespunde relaţiei de

incluziune definită pentru două mulţimi. Definiţia 2.1.3. Fie (L, +, •) latice. Elementul π ∈ L se numeşte prim

element în L dacă pentru oricare (ar fi) x ∈ L are loc relaţia: π ≤ x. Similar, elementul σ ∈ L se numeşte ultim element în L dacă pentru oricare (ar fi) x ∈ L are loc relaţia: x ≤ σ..

Propoziţia 2.1.4. Fie laticea (L, +, •) cu L = {a1, a2, ..., an} formată cu n

elemente (distincte), atunci L are atât prim element cât şi ultim element în raport cu relaţia de ordine definită mai sus, iar: π = a1 • a2 • ... • an şi σ = a1 + a2 + ... + an.

Demonstraţie. Arătăm că pentru n = 2, x • y = inf{x, y} şi x+y = sup {x, y}.

Este evident că x • y este minoran15t pentru {x, y}, iar x + y este majoran16t pentru aceeaşi mulţime {x, y}.

Fie t ≤ x şi t ≤ y, arătăm că t ≤ x • y. Într-adevăr, egalităţile t • x = t şi t • y = t conduc la t • (x • y) = (t • x) • y = t • y = t, adică t ≤ x • y. Deci x • y este cel mai mare minorant, adică infimum17.

De asemenea, dacă x ≤ t şi y ≤ t, arătăm că x+y ≤ t. Într-adevăr, egalităţile x + t = t şi y + t = t conduc la (x + y) + t = x + (y + t) = x + t = t, adică x + y este cel mai mic majorant, deci supremum18.

15 Pentru (P, ≤) o mulţime parţial ordonată şi A o submulţime, un element a ∈ A se numeşte minorant al mulţimii A dacă a ≤ x, oricare x ∈ A. 16 Pentru (P, ≤) o mulţime parţial ordonată şi A o submulţime, un element a ∈ A se numeşte majorant al mulţimii A dacă x ≤ a, oricare x ∈ A. 17 Pentru (P, ≤) o mulţime parţial ordonată şi A o submulţime, un element a ∈ A se numeşte infimum al mulţimii A dacă este el mai mare dintre toţi minoranţii lui A.

Page 27: G Albeanu Arhitectura Sist Calcul

27

Definiţia 2.1.4. Laticea (L, +, •) se numeşte latice distributivă dacă

oricare ar fi elementele x, y, z din L sunt satisfăcute relaţiile: ( 9) x + (y • z) = (x + y) • (x + z); (10) x • (y + z) = (x • y) + (x • z).

Definiţia 2.1.5. Latice (L, +, •) se numeşte latice complementată dacă sunt

îndeplinite condiţiile: (11) Există elementul neutru pentru operaţia + (numit element nul), notat cu 0, astfel încât x + 0 = x, oricare ar fi x ∈ L. (12) Există elementul neutru pentru operaţia • (numit element universal), notat cu 1, astfel încât x • 1 = x, oricare ar fi x ∈ L.

Pentru oricare x ∈ L există yx ∈ L, numit complementul lui x, care satisface relaţiile:

(13) x + yx = 1; (14) x • yx = 0.

În cele ce urmează elementul yx va fi notat prin x’.

Propoziţia 2.1.4. Într-o latice distributivă şi complementată, complementul unui element este unic.

Demonstraţie. Fie x1 şi x2 complemente ale lui x (element arbitrar al laticei). Atunci x1 = x1 • 1 = x1 • (x +x2) = (x1 • x) + (x1 • x2) = 0 + (x1 • x2) = (x • x2) + (x1 • x2) = (x + x1) • x2 = 1 • x2 = x2.

Definiţia 2.1.6. O latice distributivă şi complementată se numeşte algebră

booleană sau algebră Boole19. Exemple

1. Structura (P(M), ∪, ∩) este latice distributivă şi complementată, elementul nul este ∅, elementul universal este M, iar dacă A ∈ P(M), atunci A’ = M-A (complementara mulţimii A). 2. Structura ({0, 1}, ∨, ∧) este latice distributivă şi complementată cu 0’=1 şi 1’=0.

În continuare vom considera că o algebră booleană sau, mai simplu, o algebră Boole este dată prin ansamblul (B, +, •, ’, 0, 1), evidenţiind mulţimea

18 Pentru (P, ≤) o mulţime parţial ordonată şi A o submulţime, un element a ∈ A se numeşte supremum al mulţimii A dacă este el mai mic dintre toţi majoranţii lui A. 19 George Boole (1815-1864), matematician englez care a propus o nouă abordare a logicii (prin introducerea algebrelor ce astăzi îi poartă numele). S-a mai ocupat de calculul cu diferenţe finite, ecuaţii diferenţiale şi metode specifice teoriei probabilităţilor.

Page 28: G Albeanu Arhitectura Sist Calcul

nevidă B, operaţiile binare, operaţia unară (pentru obţinerea complementului) şi elementele neutre. De asemenea pentru x•y vom scrie, simplu, xy.

Se poate arăta că pentru a defini o algebră Boole este suficient ca, pentru oricare x, y, z elemente ale mulţimii B, să fie satisfăcute relaţiile:

(15) x + y = y + x; (16) xy = yx; (17) x+yz = (x+y)(x+z); (18) x(y+z) = xy + xz; (19) x + yy’ = x; (20) x(y+y’) = x;

Atunci, pentru oricare x şi y din B, avem xx’ = yy’ (rezultat notat cu 0) şi x + x’ = y + y’ (rezultat notat cu 1).

2.2. Funcţii booleene. Forme normale

Fie (B, +, •, ’, 0, 1) o algebră Boole şi n ( ≥ 1) număr natural. Notăm cu Fn(B) mulţimea funcţiilor de n variabile definite pe Bn cu valori în B. Este evidentă relaţia:

card(Fn(B)) = . ncard(B)card(B)

Pentru n = 2 şi B = {0, 1}, se obţin 16 funcţii de 2 variabile, date prin tabelul:

x1 X2 f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

sau prin formule (între ghilimele trecem denumirea funcţiei conform logicii propoziţiilor): f0(x1, x2) = 0; “contradicţia - funcţia identic falsă“ f1(x1, x2) = x1x2; “conjuncţia” f2(x1, x2) = x1x2’; “negaţia implicaţiei” f3(x1, x2) = x1; “prima proiecţie” f4(x1, x2) = x1’x2; “negaţia implicaţiei inverse” f5(x1, x2) = x2; “a doua proiecţie” f6(x1, x2) = f2(x1, x2) + f4(x1, x2) ; “sau exclusiv” f7(x1, x2) = x1 + x2; “disjuncţia, sau inclusiv” f8(x1, x2) = x1’x2’; “↓, nici x1 nici x2” f9(x1, x2) = x1x2 + x’1x’2; “echivalenţa” f10(x1, x2) = x2’; “negaţia”variabilei x2 f11(x1, x2) = x1+x2’; “implicaţia inversă, x2→ x1” f12(x1, x2) = x1’; “negaţia” variabilei x1

28

Page 29: G Albeanu Arhitectura Sist Calcul

f13(x1, x2) = x1’+x2; “implicaţia, x1→ x2” f14(x1, x2) = x1’+x2’; “/, x1 este incompatibil cu x2” f15(x1, x2) = 1; “lege logică sau tautologie“

Definiţia 2.2.1. Numim termen prim atât o variabilă cât şi complementul său. Numim conjuncţie primă orice termen prim şi orice conjuncţie de termeni primi. Numim disjuncţie primă orice termen prim şi orice disjuncţie de termeni primi. Conjuncţiile de termeni primi se mai numesc şi monoame prime. Monoamele prime (respectiv, disjuncţiile prime) în care apar toate variabilele sau complementul acestora, o singură dată, dar nu simultan variabila şi complementul său, se numesc monoame (respectiv, disjuncţii) perfecte.

Pentru n variabile, un monom perfect este de forma , unde ik = 0, 1 ( k = 1, 2, ..., n) cu convenţia de notaţie:

x x xi inin

1 21 2 ...

x x x xk k k k1 0= =, ' . În general, notăm,

x1 = x şi x0 = x’ pentru oricare x ∈ B. Pentru n = 3, monoamele perfecte sunt: xyz, x’yz, xy’z, xyz’, x’y’z, x’yz’, xy’z’, x’y’z’. Analog se pot descrie disjuncţiile perfecte.

Definiţia 2.2.2. Se numeşte formă normală disjunctivă (ND), disjuncţia

oricărei mulţimi de conjuncţii prime. Se numeşte formă normală conjunctivă (NC), conjuncţia oricărei mulţimi de disjuncţii prime. Se numeşte formă normală perfectă acea formă normală formată numai cu monoame perfecte (în cazul ND) respectiv sume perfecte (în cazul NC).

Propoziţia 2.2.1. Fie B algebra booleană de mai sus, ( ) ,

elemente din B şi x1, x2, ..., xn ∈ B. Următoarele proprietăţi sunt adevărate:

, ,..., , ,..., {0, }ci i i i i in n1 2 1 2 1∈

( ), ,..., , ,..., {0, }di i i i i in n1 2 1 2 1∈

(21) (i1, i2, ..., in) ≠ (j1, j2, ..., jn) ⇒ x x x x x xi ini j j

njn n

1 2 1 21 2 1 2 0... ... ,• =

(i1, i2, ..., in, j1, j2, ..., jn ∈ {0, 1}), (22) x x xi i

ni

i i i

n

n

1 21

1 2

1 2

1... ,, ,..., {0, }

=∈

(23) c x x x d x x x

c d x x x

i i ii i

ni

i i ii i i

i in

i

i i i

i i i i i ii i

ni

i i i

n

n

nn

n

n

n n

n

n

1 2

1 2

1 21 2

1 2

1 2

1 2 1 2

1 2

1 2

1 21

1 21

1 21

..., ,..., {0, }

..., ,..., {0, }

... ..., ,..., {0, }

... ...

( ) ...∈ ∈

∑ ∑

+ =

= +

(24) c x x x d x x x

c d x x x

i i ii i

ni

i i ii i i

i in

i

i i i

i i i i i ii i

ni

i i i

n

n

nn

n

n

n n

n

n

1 2

1 2

1 21 2

1 2

1 2

1 2 1 2

1 2

1 2

1 21

1 21

1 21

..., ,..., {0, }

..., ,..., {0, }

... ..., ,..., {0, }

... ...

( ) ...∈ ∈

∑ ∑

• =

= •

(25) c x x x c x x xi i ii i

ni

i i ii i i

i in

i

i i in

n

nn

n

n1 2

1 2

1 21 2

1 2

1 2

1 21

1 21

..., ,..., {0, }

'

...'

, ,..., {0, }... ( ) ...

∈ ∈∑ ∑

⎝⎜

⎠⎟ =

29

Page 30: G Albeanu Arhitectura Sist Calcul

Demonstraţie. Dacă (i1, i2, ..., in) ≠ (j1, j2, ..., jn) atunci există, cel puţin, un indice k astfel încât ik ≠ jk.Deci = 0, adică relaţia (21). Pentru n = 1, relaţia (22) se reduce la x + x’= 1 (definiţia 2.1.5). Pasul inductiv necesită următoarea schemă de calcul şi aplicarea ipotezei inductive.

'kkj

kik xxxx kk •=•

.1'11

}1,0{,,, }1,0{,,,2

'121

}1,0{,,, }1,0{,,,2121

}1,0{,,,21

21 21

22

21 21

22

21

21

=+=

+=

+=

=

∑ ∑∑ ∑

∈ ∈

∈ ∈

xx

xxxxxx

xxxxxx

xxx

n n

nn

n n

nn

n

n

iii iii

in

iin

iiii iii

in

iin

iiii

in

ii

L L

L L

L

LL

LL

L

Relaţia (23) se obţine prin aplicarea proprietăţilor de asociativitate, comutativitate şi distributivitate. Pentru a obţine (24) trebuie să folosim relaţia (21) şi propoziţia 2.1.1. Relaţia (25) se obţine din faptul că x = a’este unica soluţie a sistemului {x+a=1, x•a = 0} (unicitatea complementului).

Definiţia 2.2.3. Funcţiile booleene simple ale algebrei B sunt acele funcţii booleene a căror expresie se obţine plecând de la proiecţii şi aplicând operaţiile algebrei booleene asupra unor elemente constituite anterior. Funcţiile booleene (la modul general) ale algebrei booleene se obţin ca şi cele simple, dar luând elemente de plecare atât proiecţiile cât şi constantele algebrei Boole B.

Teorema 2.2.1.[10]. O funcţie f: Bn → B este booleană dacă şi numai

dacă există constantele c i i ii i i nn1 2 1 2 0 1... ( , ,..., { , })∈ ∈ B, astfel încât

(26) f x x c x x x x x Bn i i ii i

ni

i i inn

n

n

( ,..., ) ... , ,..., ...., ,..., {0, }

1 1 21

11 2

1 2

1 2

= ∀∈

∈∑

Când (26) are loc, constantele c sunt unic determinate de i i in1 2 ...

(27) c i i i i i ii i i n nn1 2 1 2 1 2 0 1... ( , ,..., ),( , ,..., { , }).= f ∀ ∈

Propoziţia 2.2.2.[10] O funcţie booleană de n variabile este simplă dacă şi numai dacă

(28) f(i1, i2, ..., in) ∈ {0, 1}, pentru oricare i1, i2, ..., in ∈ {0,1}. Evident că o expresie de forma (26) transfomată astfel încât suma booleană se realizează numai pentru constantele egale cu 1 este o funcţie booleană simplă.

Propoziţia 2.2.3.[10] O funcţie booleană este funcţie booleană simplă dacă şi numai dacă satisface:

(29) f x x x x x x x Bni i

ni

i i if i i i

nn

n

n

( ,..., ) ... , ,..., ., ,..., {0, }( , ,..., )

1 1 211

11 2

1 2

1 2

= ∀∈

=

∈∑

30

Page 31: G Albeanu Arhitectura Sist Calcul

Comentariu: Din cele de mai sus rezultă că mulţimea funcţiilor booleene pe B coincide cu mulţimea funcţiilor booleene simple (cu acelaşi număr de variabile) dacă şi numai dacă B = {0, 1}.

Exemplu: Pentru n=3, funcţia f73 (definită în tabelul de mai jos, unde

numărul 73 este convertit în baza doi) se poate scrie sub formă ND perfectă astfel: f73(x, y, z) = x’y’z + xy’z’ + xyz.

Teorema 2.2.2. O funcţie booleană f este booleană simplă dacă şi numai dacă se scrie astfel:

f x x x f i i i x x xn ni i

nin( , ,. . . , ) ( , , . . . , ) .. .

'

1 2 1 2 1 210

20 0

= + + +∏ , luând în considerare notaţiile şi convenţia de mai sus. Demonstraţie. Se aplică propoziţia 2.2.3 pentru funcţia f ’, iar apoi se utilizează regulile de calcul (x+y)’= x’• y’ şi (x•y)’= x’+ y’.

Exemplu: Funcţia f73 poate fi exprimată în formă NC perfectă astfel: f73(x, y, z) = (x + y + z) (x + y’ + z) (x + y’ + z’) (x’ + y + z’) (x’ + y’ + z).

2.3. Aplicaţii

O problemă importantă legată de reprezentarea20 funcţiilor booleene o constituie reducerea la minimum a expresiei analitice a funcţiei booleene (mai puţini termeni şi cât mai puţini factori). O funcţie booleană poate avea mai multe forme disjunctive nesimplificabile. O metodă pentru aflarea unei forme normale disjunctive minime constă în construirea tuturor formelor normale disjunctive ale funcţiei şi alegerea uneia dintre cele mai scurte. Pentru un număr mare de variabile această metodă este ineficientă.

Din punct de vedere algoritmic, problema găsirii unei forme minimale a unei funcţii booleene este decidabilă. Algoritmul Quine-McCluskey este destinat

31

20 Principalele aplicaţii ale funcţiilor booleene sunt în analiza şi sinteza sistemelor de calcul (de tip numeric). De asemenea, reducerea complexităţii expresiilor booleene influenţează timpul de evaluare a condiţiilor precizate în cadrul instrucţiunilor if, while..do, for, cond, do...while, repeat...until, etc. şi deci viteza de executare a programelor.

Page 32: G Albeanu Arhitectura Sist Calcul

obţinerii formei ND a unei funcţii booleene prin utilizarea sistematică a regulilor de calcul într-o algebră Boole. Pentru expresii booleene cu până la 6 variabile se pot utiliza cu succes diagramele Karnaugh21.

Tabelul 2.3.1. Tabelul 2.3.2.

Aplicaţia 2.3.1. Fie B algebra Boole de mai sus şi funcţia f dată prin legea:

f(x1, x2, x3) = x1x2+x1x2’x3+x1’x2’+x1’x2x3’. Forma ND perfectă este: f(x1, x2, x3) = x1x2x3+x1x2x3’+x1x2’x3+x1’x2’x3+x1’x2’x3’+x1’x2x3’ şi corespunde tabelului 2.3.1. Forma NC perfectă este f(x1, x2, x3) = (x1+x2’+x3’) (x1’+x2+x3) a cărei evaluare necesită 3 operaţii de negare (NOT), 4 disjuncţii (OR) şi o conjuncţie (AND). După aplicarea regulilor de calcul asupra formei ND perfecte se pot obţine următoarele exprimări posibile: ( *) f(x1, x2, x3) = x1x2+x2’x3+x1’x3’ şi (**) f(x1, x2, x3) = x1x3+x2x3’+x1’x3’ ambele necesitând 3 operaţii NOT, 2 operaţii OR şi 3 operaţii AND.

Aplicaţia 2.3.2. Operaţia de adunare a doi biţi se realizează conform tabelului 2.3.2. Cum z şi tout sunt funcţii booleene (folosind t în loc de tin), obţinem:

z = xy’t’+x’yt’+x’y’t+xyt; şi tout = xyz’+xy’t+x’yt+xyt = xy + xt + yt (după simplificare).

Circuitul sumator are trei intrări (cei doi biţi x şi y şi bitul de transport anterior tin) şi două ieşiri (bitul rezultat z şi bitul de transport următor tout). Pentru adunarea a două cuvinte a n biţi fiecare este necesar să se înserieze n astfel de sumatoare. Dacă considerăm că cele două cuvinte care se adună sunt situate iniţial în două registre (registrul X şi Y), iar rezultatul se va obţine în registrul Z (registrele X, Y şi Z de aceeaşi capacitate) şi are loc transport la sumatorul asociat cifrei cu rangul maxim

32

21 Diagrama Karnaugh se construieşte cu ajutorul codului Gray, codul în care doi termeni succesivi diferă printr-un singur bit, astfel că doi termeni vecini sunt cei între care există o diferenţă de un bit, putându-se astfel extinde diagramele Karnaugh pentru oricât de multe variabile. Simplificarea expresiilor booleene folosind diagramele Karnaugh se bazează pe gruparea termenilor şi utilizarea identităţii x+x’ = 1 (care conduce la unificarea mintermenilor şi generarea unor termeni cu mai puţine variabile).

Page 33: G Albeanu Arhitectura Sist Calcul

atunci se va activa (trece în poziţia on) bitul de transport din registrul de stare al procesorului. Acest bit se numeşte Carry.

Aplicaţia 2.3.3. Considerăm două numere binare a câte doi biţi fiecare (x1, x2 biţii primului număr; x3, x4 biţii numărului al doilea). Funcţia booleană va fi evaluată la 1 dacă primul număr este cel mai mare şi va avea valoarea 0, în caz contrar. Tabelul asociat funcţiei booleene de comparare este:

x1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 x2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 x3 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 x4 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 fc 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0

Cea mai simplă formă ND este: fc (x1, x2, x3, x4) = x1x3’+x1x2x4’+x2x3’x4’, iar circuitul poate fi reprezentat grafic ca mai jos.

2.4. Exerciţii 1. Să se simplifice expresiile booleene: a) x’ y’ z’ + x’ y’ z + x’ y z b) (x’+ y + z’) (x + y’+ z) (x’+ y’+ z’) c) x y + x’z + xy z. Răspuns: Folosind regulile de calcul specifice unei algebre Boole, se obţin următoarele rezultate: a) x’(y’+ yz), b) x z’ + x’y’+ x’z, c) xy + x’z. 2. Să se determine forma normală disjunctivă a funcţiei f83 (x, y, z). Răspuns: Tabelul funcţiei f83 este:

x Y z f83(x, y,z) 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1

33

Page 34: G Albeanu Arhitectura Sist Calcul

Conform teoremei de reprezentare sub forma normală disjunctivă rezultă că f83(x,y,z) = x’ y’z + x’ y z + x y z’ + x y z (= x y + x’ z + y z). 3. Să se determine forma normală conjunctivă a funcţiei f(x, y, z, w) = x’ y’ + y z w + x w. Răspuns: Tabelul valorilor funcţiei f este: x 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 y 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 z 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 w 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 f(x,y,z,w) 1 1 1 1 0 0 0 1 0 1 0 1 0 1 0 1 Rezultă că f(x, y, z, w) = (x + y’ + z + w) (x + y’ + z + w’)(x + y’ + z’ +w) (x’ + y + z + w) (x’ + y + z’ +w) (x’ + y’ + z + w) (x’ + y’ +z’ +w). 4. Să se simplifice funcţia de 4 variabile f(x, y, z, w) = x’ y’ z’ w’ + x’ y’ z’ w + x’ y’ z w’ + x’ y’ z w + x’ y z’ w’ + x y’ z w. Răspuns: f(x, y, z, w ) = x’ y’ + x’ z’ w’ + y’ z w. 5. Să se reprezinte grafic circuitul combinaţional descris de funcţia f care apare în exerciţiul 4. Răspuns: Folosind notaţiile grafice de mai sus, rezultă:

6. Să se demonstreze că în orice algebră Boole (B, +, •, ', 0, 1) au loc regulile de calcul: a) Din x+y = 1 şi x•y = 0 rezultă y = x’. b) x + 0 = x, x•1 = x. c) x + 1 = 1, x•0 = 0. d) x + y = 0 dacă şi numai dacă x = y = 0; x•y = 1 dacă şi numai dacă x = y = 1. e) (x + y)’=x’•y’şi (x•y)’=x’ + y’(legile lui De Morgan.) 34

Page 35: G Albeanu Arhitectura Sist Calcul

35

3. STRUCTURA SISTEMELOR DE CALCUL

3.1. Resursele fizice ale sistemelor de calcul

3.1.1. Generaţii de calculatoare

Tehnica de calcul a evoluat de la abac până la supercalculatoarele actuale (sisteme hipercub ş.a.). În această evoluţie se disting următoarele etape22: etapa dispozitivelor mecanice şi electromecanice şi etapa calculatoarelor electronice. Primul calculator electronic comercial a fost sistemul ENIAC (1942-1945). Aproximativ în acea perioadă, John von Neumann (1944) a stabilit că un sistem de calcul trebuie să asigure următoarele funcţii: memorare, comandă si control, prelucrare, intrare-iesire.

Primul calculator românesc a fost CIFA-1 (1957) realizat la Institutul de Fizică Atomică de către un colectiv condus de inginerul Victor Toma23. Un sistem de calcul MECIPT24-1, din prim generaţie, a fost realizat şi la Timişoara în anul 196125. Trebuie remarcate şi sistemele de tip DACICC realizate la Cluj sub conducerea savantului român T. Popoviciu26. Nu trebuie uitat faptul că au fost dezvoltate şi alte sisteme de calcul în perioada 1960-198927.

Etapele de dezvoltare a calculatoarelor electronice sunt cunoscute sub numele de generaţii de calculatoare. Până în prezent au fost parcurse cinci generaţii: generaţia tuburilor electronice (programe binare sau cablate, suport informaţional: cartela perforată sau banda de hârtie perforată), generaţia tranzistorilor şi diodelor (apar suporturile magnetice, apar limbajele de programare: FORTRAN: eng. FORmula TRANslation, COBOL: eng. COmmon Business-Oriented Language, ALGOL: eng. ALGOrithmic Language ş.a., apar 22 Pentru detalii istorice şi vizite virtuale puteţi accesa:

http://archive.computerhistory.org/search/ 23 Alte sisteme de calcul românesti au fost CET (IFA Bucureşti), DACICC (Cluj), MECIPT (Timişoara) etc. pentru a menţiona numai sistemele proiectate şi instalate înainte de 1970. Pentru mai multe detalii se poate consulta: Mihai Drăgănescu, Realizarea de calculatoare şi retele de calculatoare în România, http://www.atic.org.ro/anexe/MD.htm, ATIC, 2001. 24 http://ro.wikipedia.org/wiki/MECIPT. 25 MECIPT-1, http://www.infotim.ro/mbt/tic/mecipt1.htm, Maşină Electronică de Calcul a Institutului Politehnic din Timişoara. 26 http://www.cs.ubbcluj.ro/www/index.php?module=pagemaster&PAGE_user_op = view_page & PAGE_id=107 27 http://www.racai.ro/MD75/CarteMD75/art09Guran.pdf

Page 36: G Albeanu Arhitectura Sist Calcul

36

primele sisteme de operare), generaţia circuitelor integrate (apare conceptul de firmware, apar sisteme de operare evoluate rezidente pe disc (DOS: eng. Disk Operating System), apar noi limbaje de programare: PL/1, Pascal, LISP: eng. LISt Processing, BASIC), generaţia VLSI: eng. Very Large Scale Integration (apar microprocesoarele, noi tipuri de arhitecturi: microcalculatoarele (de exemplu cele compatible IBM PC – eng. Personal Computer, staţiile MAC etc.), sisteme de operare precum CP/M, DOS (de la IBM sau Microsoft); se dezvoltă reţelele de calculatoare; apar limbajele de programare orientată spre obiecte) şi generaţia inteligenţei artificiale (în continuă dezvoltare) cu trimitere către viitoarele sisteme neurale, sisteme cuantice, calcul ADN etc.

Cele mai populare sisteme de calcul ale momentului sunt cele dezvoltate în jurul proiectului IBM PC (aşa numitul personal computer). Un microcalculator IBM sau o clonă PC este formată din trei părţi: unitatea sistem (eng. system unit), tastatura (eng. keyboard) şi ecranul (eng. display screen).

Unitatea sistem este construită modular. Partea cea mai importantă este placa de bază (eng. mother board sau main board). Ea conţine circuitele electronice cele mai importante: microprocesorul, ceasul (eng. clock), coprocesorul matematic (la generaţiile mai vechi), memoria RAM (eng. Random Access Memory) şi memoria ROM (eng. Read Only Memory). În plus, unitatea sistem mai conţine: sursa de alimentare, ventilatoare şi unităţile de discuri. Diferitele plachete pentru cuplarea unor dispozitive de intrare-ieşire (imprimantă, disc, modem etc.) se cuplează la placa de bază folosind conectorii la magistrală. Magistrala (eng. bus) este un canal comun de comunicaţie între plachetele calculatorului prin care circulă semnalele de dialog între componente. Plachetele pot fi introduse opţional în sloturi (conectori), în funcţie de dorinţa utilizatorului. Cele mai importante plachete sunt: adaptorul video (eng. display screen adapter), adaptorul sau cuplorul de disc, plachetele de memorie, plachetele de comunicaţie (pentru imprimantă, modem etc.).

Pentru microcalculatoare compatibile IBM-PC se utilizează mai multe tronsoane de magistrală: ISA (eng. Industry Standard Architecture) , MCA (eng. Micro Channel Architecture), EISA (eng. Extended Industry Standard Architecture), PCI (eng. Peripheral Component Interconnect), etc.

Prin intermediul magistralei se asigură o arhitectură deschisă, astfel că utilizatorii pot extinde sistemul prin inserarea de plachete, cum a fost precizat mai sus. Totuşi numărul sloturilor este limitat. Conectarea unui număr suplimentar de dispozitive se poate realiza prin intermediul unui adaptor SCSI (eng. Small Computer System Interface – se pronunţă “scazzy”). Se pot conecta până la 7 dispozitive: imprimante, discuri rigide, unităţi CD-ROM / CD-RW, etc.

Minicalculatoarele sunt sisteme de calcul cu dimensiune şi performanţe de prelucrare situate între cele ale microcalculatoarelor şi sistemelor mainframe28. Ele sunt utilizate de companiile medii sau departamentele companiilor mari pentru monitorizarea proceselor de fabricaţie, gestiunea economică sau cercetare.

28 Wiki, Mainframe computer, http://en.wikipedia.org/wiki/Mainframe_computer .

Page 37: G Albeanu Arhitectura Sist Calcul

37

Sistemele mainframe sunt calculatoare de dimensiune mare care necesită condiţii speciale de funcţionare (de exemplu, aer condiţionat), dar au putere mare de calcul şi pot stoca cantităţi “uriaşe” de date. Sunt utilizate de organizaţiile mari – companii multinaţionale, agenţii guvernamentale, bănci, universităţi etc. – pentru a prelucra un număr foarte mare de tranzacţii pe unitatea de timp.

Supercalculatoarele (eng. supercomputers) sunt cele mai puternice sisteme de calcul29. Ele sunt utilizate în cercetare de organizaţii puternice pentru explorarea resurselor, simulări, predicţii etc.

3.1.2. Procesor. Caracteristici. Set de instrucţiuni

Una dintre componentele principale ale oricărui sistem de calcul o reprezintă procesorul. Procesorul actualelor sisteme poate fi de tip special, un microprocesor sau un ansamblu integrat de (micro)procesoare.

Orice procesor conţine patru blocuri funcţionale de bază: unitatea de comandă şi control (UCC), unitatea aritmetico-logică (UAL), registrele procesorului30, unitatea de interfaţă cu celelalte componente (UI). Procesoarele performante utilizează structuri de date avansate precum stivele. Acestea sunt utile pentru salvarea contextului unei activităţi înainte de întreruperea acesteia.

Primele trei componente formează unitatea de executare. UCC comandă, coordonează şi controlează întreaga activitate de prelucrare la nivelul componentelor calculatorului. Ea va executa instrucţiunile unui program. UAL realizează prelucrarea datelor cerută prin instrucţiuni: operaţii aritmetice, logice, de comparare etc.

Registrele reprezintă o memorie foarte rapidă a procesorului în care se păstrează codul instrucţiunilor, datele de prelucrat, rezultatele prelucrărilor etc.

Cele mai importante registre ale unui procesor sunt: registrul acumulator, registrul numărător de adrese al programului, registrul indicatorilor de condiţii (valoare negativă, pozitivă sau nulă, transport în urma executării operaţiilor de calcul etc.), registrul de instrucţiuni şi registrul de adresare a memoriei.

În general, registrul acumulator păstrează unul dintre operanzii unei instrucţiuni de calcul, fiind totodată şi destinaţia rezultatului operaţiei.

Registrul numărător de adrese al programului sau registrul contor-program, arată adresa, în memoria internă, unde se află stocată următoarea instrucţiune de executat. Indicatorii de condiţie sunt poziţionaţi automat în urma efectuări anumitor operaţii.

Registrul de instrucţiuni memorează instrucţiunea ce se execută. Conţinutul acestui registru este analizat pentru a se determina operaţia de executat, locul unde se află stocaţi operanzii precum şi locul unde va fi stocat rezultatul, dacă instrucţiunea este una de calcul, respectiv adresa unde se va face un salt în program sau adresa unei zone de memorie unde/de unde se va stoca/citi o anumită dată, în alte situaţii. 29 Wiki, Supercomputer, http://en.wikipedia.org/wiki/Supercomputer . 30 Wiki, Processor register, http://en.wikipedia.org/wiki/Processor_register .

Page 38: G Albeanu Arhitectura Sist Calcul

38

Registrul de adresare a memoriei păstrează adresa curentă folosită pentru efectuarea accesului la memorie. De obicei, adresa efectivă se obţine în urma unui calcul de adresă.

UI asigură legătura dintre procesor şi celelalte componente ale calculatorului îndeplinind funcţia de transfer de date de la/spre procesor. Comunicarea procesorului cu celelalte componente: adaptorul video, adaptorul de disc etc. se face prin intermediul porturilor (puncte de intrare în procesor). Acestea pot fi porturi de intrare (vin date de la componente) respectiv porturi de ieşire (pornesc date spre componente). În practică, un port este identificat printr-un număr (unic).

Deoarece un sistem de calcul execută mai multe activităţi, acestea pot avea nevoie de controlul procesorului. Rezultă necesitatea întreruperii unei activităţi pentru a trece la o altă activitate. Aceste comutări sunt determinate fie prin hardware, fie prin software. Întreruperea hardware este declanşată la apariţia unui semnal de întrerupere prin care procesorului i se cere să analizeze un anumit eveniment. După ce au fost iniţiate de către procesor, unele activităţi se pot desfăşura fără controlul procesorului, de exemplu modul de prelucrare DMA31 (eng. Direct Memory Accesss.)

Performanţele procesorului pot fi exprimate prin: durata ciclului procesorului, lungimea cuvântului, repertoriul de instrucţiuni, numărul adreselor dintr-o instrucţiune, durata executării instrucţiunilor etc.

Durata ciclului procesorului reprezintă intervalul de timp în care se efectuează un transfer între două registre ale procesorului.

Lungimea cuvântului poate fi de 8 biţi, 16 biţi, 32 biţi, 64 biţi etc. în funcţie de tipul procesorului.

Repertoriul de instrucţiuni conţine cel puţin următoarele grupe de operaţii (mnemonicele instrucţiunilor au caracter orientativ):

- instrucţiuni generale (MOV - mutare de informaţie (încărcare în registre – LD; stocare în memorie – ST, atribuire condiţionată (CS, ZS)), PUSH - punere de informaţii în memoria organizată ca o stivă, POP - aducerea informaţiei din memoria stivă etc.);

- instrucţiuni de intrare/ieşire (IN - depunerea în registrul acumulator a informaţiei stocate în registrul de intrare/ieşire (portul de date), OUT - scrierea în portul de date a informaţiei aflate în registrul acumulator);

- instrucţiuni aritmetice: adunare (ADD, ADC, INC etc.), scădere (SUB, DEC, NEG, CMP etc.), înmulţire (MUL, IMUL etc.), împărţire (DIV, IDIV etc.);

- instrucţiuni de calcul în virgulă mobilă (FADD, FSUB, FMUL, FDIV, FSQRT, FEQLE, FEQL etc.);

- instrucţiuni de manipulare a şirurilor de biţi: operaţii logice (NOT, AND, OR, XOR, TEST), deplasare (SHL, SAL, SHR, SAR), rotire (ROL, ROR, RCL, RCR);

- operaţii la nivel de octet (DIF, MOR, MXOR)

31 Wiki, Direct memory access, http://en.wikipedia.org/wiki/Direct_memory_access .

Page 39: G Albeanu Arhitectura Sist Calcul

39

- instrucţiuni de transfer în regim de anticipare a salturilor (PBN, PBZ, PBP etc ) sau de transfer fără anticipare : salt necondiţionat (CALL, RET, JMP, GO), salt condiţionat - prin testarea indicatorilor de condiţii (JC, JNC, JE, JG, JL, BN, BZ, BP etc.), cicluri (LOOP etc.), întreruperi (INT, IRET, TRIP/TRAP etc.);

- instrucţiuni de sincronizare externă (HLT, WAIT, NOP etc.) Durata executării unei instrucţiuni reprezintă timpul necesar desfăşurării fazei de citire-interpretare şi a fazei de execuţie a acelei instrucţiuni.

Pentru microcalculatoare, procesorul este reprezentat de un singur circuit integrat (eng. silicon chip), numit microprocesor (eng. microprocessor -“microscopic processor”). Microcalculatoarele prelucrează (procesează) date şi instrucţiuni în milionimi de secundă, sau microsecunde, supercalculatoarele realizează prelucrări în nanosecunde şi chiar picosecunde, ele fiind de peste un milion de ori mai rapide decât microcalculatoarele.

În acest moment, există două categorii de microprocesoare: CISC32 (eng. Complex Instruction Set Computer) şi RISC33 (eng. Reduced Instruction Set Computer). Cele mai răspândite microprocesoare sunt cele CISC (având ca reprezentaţi microprocesoarele INTEL : X86, Pentium). Microprocesoarele RISC implementează mai puţine instrucţiuni, sunt mai simplu de proiectat şi mai ieftine. Câteva exemple de microprocesoare RISC sunt: PowerPC – dezvoltat de Motorola, IBM şi Apple; Alpha şi MIPS R400 – dezvoltate de Digital Equipment Corporation. O abordare specială o reprezintă arhitectura CISC bazată pe tehnici de tip RISC care duce la o viteză de executare a aplicaţiilor CISC comparabilă cu cea a sistemelor RISC.

Un exemplu interesant de procesor a fost propus de D. Knuth pentru implementarea calculatorului MMIX. Caracteristicile acestuia vor fi descrise în capitolul 4. Unelte software pentru experimentare pot fi obţinute de la: http://www.cs.fhm.edu/~mmix/tools/tools.html (de exemplu).

3.1.3. Memorii

Stocarea informaţiilor în sistemul de calcul se realizează prin intermediul memoriei. Memoria este spaţiul de lucru primar al oricărui sistem de calcul. În funcţie de locul ocupat, distingem: memoria centrală (numită şi memoria principală sau internă) şi memoria secundară (numită şi auxiliară sau secundară). În memoria centrală sunt stocate programele şi informaţiile utilizate de ele în timpul execuţiei lor de către procesor. Memoria secundară păstrează cantităţi mari de date şi programe folosite frecvent şi încărcabile rapid în memoria centrală. Memoria unui sistem de calcul este caracterizată prin: capacitate, timp de acces, viteză de transfer, cost, mod de accesare a informaţiei stocate etc.

32 Wiki, Complex instruction set computer, http://en.wikipedia.org/wiki/CISC . 33 Wiki, Reduced instruction set computer, http://en.wikipedia.org/wiki/RISC .

Page 40: G Albeanu Arhitectura Sist Calcul

40

Capacitatea memoriei este definită prin numărul de unităţi de informaţie (caractere, cuvinte) disponibile pentru stocarea informaţiei. În general34, capacitatea memoriei se exprimă în sistemul binar prin MB (mega octeţi, eng. mega bytes): 1 MB = 1024 KB = 1024*1024*8 biţi). Localizarea zonelor de memorie (internă sau externă) se realizează prin intermediul adresei. Prima locaţie a memoriei centrale are adresa 0 (zero). Dacă unitatea de stocare este octetul, atunci adresa 10 (scrisă zecimal) reprezintă locaţia a unsprezecea.

Timpul de acces exprimă durata intervalului în care poate fi obţinută informaţia stocată în memorie. Viteza de transfer se exprimă prin numărul de unităţi de informaţie transferate de memorie în unitatea de timp.

În funcţie de natura accesului la informaţia ce o înmagazinează, memoria centrală a unui calculator poate fi cu acces numai în citire şi respectiv, cu acces în scriere şi citire. Memoria de tip "numai citirea este permisă" (ROM- eng. "Read Only Memory") se mai numeşte şi memorie permanentă sau nevolatilă, deoarece programele şi datele ce au fost înscrise în ea sunt fixate o dată pentru totdeauna. În general, în această memorie este depozitat firmware-ul35 (secvenţă de instrucţiuni cu destinaţie specială). Memoria ce permite acces de tip "citire-scriere" se mai numeşte memorie cu acces aleator (RAM- eng. Random Access Memory) - deşi, tot cu acces aleator este şi memoria ROM - şi este de tip volatil (trebuie să fie alimentată electric pentru a reţine date). Din punct de vedere tehnologic au fost realizate două clase de memorii RAM (SRAM: Static RAM şi DRAM: Dynamic RAM). Atributul dinamic specifică necesitatea unui interval de timp foarte mic între momentele de reîmprospătare (eng. refresh), reîmprospătarea realizându-se de sute de ori pe secundă pentru a se reţine datele stocate în celulele de memorie. DRAM- 34 De fapt, trebuie să facem diferenţă între denumirile adoptate în sistem decimal (folosit în afaceri) şi cele caracteristice sistemului binar (folosit în programare). Astfel, sunt în uz următoarele prefixe:

prefix zecimal binar kilo (K) 1000 = 103 1024 = 210 = 1.024 mega (M) 10002 = 106 10242 = 220 = 1.048.576 giga (G) 10003 = 109 10243 = 230 = 1.073.741.824 tera (T) 10004 = 1012 10244 = 240 = 1.099.511.627.776 peta (P) 10005 = 1015 10245 = 250 = 1.125.899.906.842.624 exa (E) 10006 = 1018 10246 = 260 = 1.152.921.504.606.846.976 zetta (Z) 10007 = 1021 10247 = 270 = 1.180.591.620.717.411.303.424 yotta (Y) 10008 = 1024 10248 = 280 = 1.208.925.819.614.629.174.706.176

Ultima actualizare a acestui sistem a fost realizată în 1991. A se vedea http://www.bipm.fr/fr/CGPM/db/19/4/ şi http://www.techno-science.net/?onglet=glossaire&definition=1653. 35 Firmware este un cuvânt care iniţial a fost folosit pentru a desemna microprogramele cu ajutorul cărora se realiza unitatea de comandă şi control a unui procesor. Astăzi desemnează şi secvenţele de cod (în limbajul procesorului) ce implementează interpretoare, nuclee de intrare-ieşire etc. De asemenea, această componentă este utilă în implementarea stardardului PnP (eng. Plug and Play) util în reconfigurarea automată a sistemelor de calcul.

Page 41: G Albeanu Arhitectura Sist Calcul

41

ul este preferat pentru memoria principală a sistemelor, în timp ce SRAM-ul, care nu necesită reîmprospătare este utilizat în primul rând la implementarea memoriei cache36. Rolul memoriei cache constă în memorarea datelor şi instrucţiunilor solicitate frecvent de către procesor. Memoria cache este primul loc unde procesorul caută datele de care are nevoie. Numai dacă acestea nu se află în memoria cache ele vor fi căutate în memoria principală (fiind transferate blocuri de date/instrucţiuni în memoria cache).

Există mai multe tipuri de module DRAM utilizate în sistemele de calcul moderne: SDRAM (eng. Synchronous DRAM), RDRAM (eng. Rambus DRAM), DDR şi DDR2 (Double-Data-Rate Synchronous DRAM) ş.a.

Circuitele de stocare nevolatile se încadrează în următoarele clase: - PROM (eng. Programmable Read-Only Memory) – pentru

înregistrarea codului cu ajutorul unui echipament special, odată ce este scris nu se mai poate schimba;

- EPROM (eng. Erasable Programmable Read-Only Memory) – circuit de stocare de tip ROM care poate fi şters cu ajutorul unui mediu în ultraviolet, iar apoi poate fi rescris,

- Flash (un tip de memorie înrudit cu EPROM).

3.1.4. Dispozitive periferice Totalitatea echipamentelor unui sistem de calcul diferite de unitatea centrală şi memoria internă formează mulţimea echipamentelor periferice. Din această categorie fac parte unităţile de memorie externă, echipamentele de intrare, echipamentele de ieşire şi echipamentele de intrare/ieşire.

Discurile magnetice: Una dintre cele mai importante unităţi de memorare externă este unitatea de disc magnetic. Memorarea informaţiei pe discul magnetic urmează acelaşi principiu fizic cu cel utilizat în înregistrarea casetelor şi benzilor audio-video. Deosebirea principală între cele două sisteme de memorare este datorată naturii semnalului de înregistrare folosit: analogic, în cazul audio-video şi numeric (eng. digital), în cazul discurilor sistemelor de calcul. Diferenţa faţă de benzile magnetice (înregistrate totr numeric) constă în modul de acces. Pe bandă accesul este secvenţială, pe disc accesul este direct, după cum se va vedea mai jos.

Din punct de vedere fizic, o unitate de disc magnetic are în compunere unul sau mai multe platane, fiecare platan cu una sau două suprafeţe de înregistrare, atâtea capete de citire/scriere câte suprafeţe de înregistrare există, un braţ ce permite accesul de la exterior spre centrul platanului al capetelor de citire/scriere, motoare pentru rotirea platanelor şi deplasarea braţului, precum şi un set de circuite specializate (numit controler, cuplor sau adaptor) pentru comanda întregului mecanism.

36 Memoria de tip cache poate aparţine atât procesorului (fiind integrată acestuia), dar şi spaţiului RAM. De aceea, recent, se utilizează organizarea stratificată – pe niveluri - a memoriei cache.

Page 42: G Albeanu Arhitectura Sist Calcul

42

Discurile magnetice care conţin un singur platan se numesc discuri floppy, iar platanul propriu-zis se numeşte dischetă sau disc flexibil. Discurile conţinând mai multe platane se numesc discuri rigide sau discuri dure (eng. harddisk). Atât pentru dischete, cât şi pentru discul rigid, întreaga colecţie de date formează aşa-numitul volum. Suprafeţele de înregistrare ale unui disc magnetic sunt împărţite într-un număr fix de cercuri concentrice, fiecare cerc numindu-se pistă. Adresa unei piste este definită de o pereche de numere întregi reprezentând numărul curent al suprafeţei de înregistrare, respectiv numărul curent al pistei. Suprafeţele de înregistrare se numerotează începând de la zero, de sus în jos. Pistele se numerotează crescător de la pista de rază maximă (indice 0) spre pista de rază minimă. Această numerotare se reia pentru fiecare suprafaţă de înregistrare.

Mulţimea pistelor de pe toate suprafeţele de înregistrare identificate prin acelaşi număr formează un cilindru. Cilindrii se numerotează de la zero, crescător, începând cu cel cu diametrul maxim spre cel cu diametrul minim. Fiecare pistă este împărţită în sectoare, de lungime fixă, de regulă 512 octeţi. Fiecare sector este adresat fizic de un triplet de numere întregi reprezentând numărul cilindrului, numărul suprafeţei şi numărul sectorului. Numerotarea sectoarelor pe cilindru începe de la unu. Pe fiecare cilindru, numărul de sectoare este acelaşi.

Din punct de vedere logic, pistele sunt numerotate începând de la zero pe suprafaţa de înregistrare zero şi continuând crescător până la epuizarea suprafeţelor şi pistelor. De asemenea, sectoarele sunt numerotate începând de la zero (cilindrul zero, suprafaţa zero), crescător până la epuizarea sectoarelor suprafeţelor cilindrilor. Adresa fiecărui sector este înscrisă la începutul acestuia într-un antet ce mai conţine şi o secvenţă de octeţi de sincronizare utilizaţi de adaptor (cuplor) pentru identificarea unei adrese disc. Operaţia de scriere a adresei şi a celorlalte elemente ale antetului sectoarelor se numeşte formatare fizică a discului. Pentru sisteme de calcul care folosesc sisteme de operare de la Microsoft, in cazul modului de operare text (comanda cmd), formatarea fizică a dischetelor este realizată de comanda FORMAT. Pentru discul rigid, formatarea fizică este realizată, în majoritatea cazurilor, de către fabricantul acestuia.

Cele de mai sus arată că discul magnetic este o memorie accesabilă prin adresă, deci datele se obţin prin acces direct. Performanţele unui disc magnetic depind de următorii factori: timpul de poziţionare, numărul de rotaţii pe minut, rata de transfer a discului etc.

Discurile flexibile au două suprafeţe pe care se poate scrie informaţia şi pot fi protejate la scriere prin fanta de protecţie (în poziţia liber). Cuplarea unităţilor de disc se poate realiza intern (prin intermediul unei interfeţe standard: IDE, SCSI etc.) sau extern (prin intermediul interfeţei paralele).

Din punct de vedere constructiv, discurile rigide sunt de tip intern (capacitate fixă, suportul de memorare nu poate fi demontat din unitatea de disc), cartridge (capacitate variabilă – suportul poate fi evacuat precum o casetă din cititorul/înregistratorul de casete (casetofon sau videocasetofon), respectiv pachet de discuri (care se montează în unităţile speciale de citire-scriere ale mini şi supercalculatoarelor).

Page 43: G Albeanu Arhitectura Sist Calcul

43

Discurile optice: Cele mai recente unităţi de memorie externă sunt unităţile de disc optic sau magneto-optic. Înscrierea optică a informaţiei este un proces care foloseşte un fascicul de lumină (o rază laser) fie pentru citirea şi/sau înregistrarea datelor, fie pentru a ajuta la realizarea acestor operaţii pe un suport sensibil optic. Citirea datelor se bazează pe evidenţierea unor modificări survenite în fasciculul de lumină reflectată de suport. Operaţia de scriere foloseşte un fascicul laser pentru modificarea (sau pentru a facilita modificarea) unui material sensibil la lumină amplasat pe suport. Din punct de vedere tehnologic distingem următoarele tipuri de discuri optice:

- discurile CD-ROM (eng. Compact Disc – Read-Only Memory): Sunt discuri compacte preînregistrate pe care informaţia nu poate fi actualizată. Conţinutul unui astfel de disc este înscris de către producătorul său şi poate fi doar citit de către utilizator.

- discurile CD-R (eng. C D-Recordable): Sunt discuri compacte ce pot fi înregistrate de către posesor, dacă acesta dispune de un dispozitiv periferic special şi programele de bază aferente. După înregistrare, fostul CD-R devine un CD-ROM pe care îl poate citi orice unitate de citire CD-ROM. Discurile CD-R se mai numesc discuri WORM (eng. Write Once, Read Many).

- discurile CD-E: sunt discuri compacte de pe care informaţia poate fi ştearsă. Aceste discuri suportă un număr limitat de cicluri de citire/scriere.

- discuri MO (magneto-optice): Sunt discuri la care scrierea se realizează magnetic, iar citirea optic. Aceste discuri pot fi scrise de câte ori este necesar, atâta vreme cât suportul nu este deteriorat. Ele fac parte din clasa, mai largă, a discurilor RW (eng. ReWriteable optical discs).

Caracteristicile principale ale unui disc optic sunt: dimensiunea (5,25" sau 3,5"), capacitatea de stocare, numărul de cicluri de citire/scriere (pentru CD-E) etc.

Discurile compacte înregistrabile tind să devină cel mai convenabil suport pentru salvarea şi transportul datelor. Ele pot stoca un volum mare de date (sute de MB), iar costul este din ce în ce mai mic. Astfel, ele tind să înlocuiască dischetele, benzile şi casetele magnetice în multe aplicaţii de transport şi arhivare a datelor.

Noua generaţie a discurilor optice o reprezintă suportul DVD (eng. Digital Video/Versatile Disc.) cu caractersitici superioare suportului CD. Componentele principale al unei unităţi DVD sunt următoarele: a) mecanismul pentru citirea discului; b) procesorul de semnal DVD-DSP (eng. Digital Signal Processing); c) decodorul digital audio/video şi d) modulul de control. Există mai multe tipuri de suporturi (deci şi de unităţi de citire/scriere) DVD: a) DVD-R (DVD Recordable) înregistrabile o singură dată; b) DVD RW (Read/Write), DVD RAM (Random Access Memory) şi DVD+RW (bazate pe o tehnologie cu schimbare de fază: Phase-Change Rewritable).

Terminalul: Deoarece unităţile de memorare externă, de obicei, permit atât scrierea cât şi citirea informaţiei, aceste dispozitive periferice pot fi considerate şi ca dispozitive de intrare-ieşire. Un alt dispozitiv periferic de intrare-ieşire este

Page 44: G Albeanu Arhitectura Sist Calcul

44

terminalul. Prin intermediul acestuia se asigură comunicaţia utilizator - sistem de calcul. Prin intermediul acestuia utilizatorul poate conversa cu calculatorul.

La un sistem de calcul pot fi cuplate unul sau mai multe terminale. Din punct de vedere al modului de cuplare la sistemul de calcul distingem două tipuri de terminale: terminale seriale, terminale "memorie". Din punct de vedere software un rol important îl are terminalul virtual37.

Terminalul serial este cuplat la calculator prin intermediul interfeţei de comunicaţie standard RS-232 (conector RS-232C). El este compus din tastatură (ca dispozitiv de intrare) şi un monitor (ca dispozitiv de ieşire). Pentru a transmite un caracter unui astfel de terminal, calculatorul (prin circuitele sale de interfaţă) transmite: un bit de start, biţii ce compun caracterul şi unul sau doi biţi de stop. Atât terminalul cât şi calculatorul dispun de circuite hardware specializate în conversia şir de caractere - şir de biţi şi invers.

Interfaţa unui terminal "memorie" cu calculatorul este asigurată prin intermediul unei memorii RAM cu destinaţie specială numită memorie video. Această memorie este adresabilă ca şi memoria principală. Controlul memoriei video şi generarea semnalului video pentru monitor sunt realizate de un set de circuite care formează adaptorul video. La aceste terminale, tastatura este separată de monitor. Ea este cuplată printr-o interfaţă paralelă (mai mulţi biţi simultan), dar există şi tastaturi cuplate serial. Pentru sistemele de calcul ce utilizează terminale "memorie", tastatura este considerată un dispozitiv periferic separat, din clasa dispozitivelor periferice de intrare.

Tastatura/Claviatura: Prin intermediul tastaturii utilizatorul poate transmite comenzi calculatorului. Comenzile se introduc sub forma unui şir de caractere (litere, cifre, semne speciale, caractere de control). Fiecare caracter se generează prin acţionarea uneia sau mai multor taste (butoane; eng. keys). Acţionarea unei taste sau combinaţii de taste are ca efect închiderea unui circuit electronic prin care se generează un cod unic, care este codul ASCII (sau Unicode) al caracterului respectiv. Orice tastatură modernă are patru blocuri de taste:

1. Tastatura maşinii de scris. Sunt disponibile butoane pentru introducerea următoarelor date simple: cifre, literele mari şi mici, semne speciale, bara de spaţiu, retur de car (CR - Carriage Return), salt la linie nouă (LF - Line Feed), saltul cursorului cu un număr de coloane (Tab), întreruperea unei activităţi (Esc- Escape), tipărirea imaginii ecranului sau memorarea acesteia (Print Screen), suspendarea temporară a executării unui program (Pause/Break). 2. Tastatura de editare. Editarea unui text constă în scrierea textului şi corectarea acestuia. Textul este afişat pe ecran. Acolo apare şi o bară luminoasă sau un indicator special (cursor38) care arată poziţia în care va fi

37 Terminalul (Consola) virtual(ă) poate fi vazut(ă) ca o aplicaţie de serviciu care permite a) terminalelor unei reţele multiuser să interacţioneze cu alte sisteme pe baza tipului şi caracteristicilor terminalului; b) accesul la distanţă pentru managementul resurselor logice ale unui sistem de calcul; c) crearea mai multor instanţe terminal etc. 38 A nu se confunda cu sensul precizat în DEX’1996.

Page 45: G Albeanu Arhitectura Sist Calcul

45

inserat următorul caracter. Sunt disponibile următoarele butoane: tastele săgeţi (pentru deplasarea cursorului), tastele Page Up şi Page Down care comandă deplasarea cursorului în sus / jos cu un anumit număr de rânduri, tastele Home şi End care comandă deplasarea cursorului la începutul / sfârşitul textului, tasta Insert pentru alegerea tipului de corectură (cu suprascriere sau cu inserare), tastele pentru ştergere (Delete şterge caracterul din poziţia cursorului, Backspace şterge caracterul de la stânga cursorului). 3. Tastatura numerică conţine tastele pentru cifre şi operaţiile aritmetice: + (adunare), - (scădere), * (înmulţire) , / (împărţire) şi . (punct) ca separator între partea întreagă şi partea zecimală a unui număr (conform sistemului englezesc de scriere). 4. Tastele funcţionale: cele 12 butoane F1, F2, …, F12 cărora li se pot asocia diferite acţiuni de către programatorul de aplicaţii. Un utilizator, înainte de utilizarea tastelor funcţionale, în cadrul unei noi aplicaţii, trebuie să inventarieze lista asocierilor. Aplicaţii diferite fac asocieri diferite, pentru aceeaşi tastă. Chiar, în cadrul aceleiaşi aplicaţii, asocierea se poate schimba de la un nivel funcţional la altul.

Unele taste sunt de tip "cald" (eng. hotkeys), iar altele de tip "rece" (eng. coldkeys). Tastele reci nu generează cod către calculator ci se folosesc împreună cu tastele calde pentru a realiza combinaţii. Tastele reci sunt: Shift, Ctrl, Alt. De exemplu, majoritatea programelor aplicative folosesc combinaţiile: Ctrl+N (pentru lansarea unui nou proiect: program, document, imagine, desen tehnic etc;eng. New), Ctrl+O (încarcă un proiect existent pentru actualizare, tipărire etc; eng. Open), Ctrl+S (înregistrează pe un suport de memorare externă proiectul curent; eng. Save), Ctrl+P (imprimă “imaginea” proiectului curent folosind o imprimantă sau trimite proiectul prin intermediul unui adaptor de tip fax; eng. Print), Ctrl+X (mută o parte a unui proiect într-o zonă a memoriei RAM, numită clipboard; eng. Cut), Ctrl+C (copiază o parte a unui proiect în clipboard; eng. Copy), Ctrl+V (copiază conţinutul zonei clipboard în proiectul curent, în locul specificat de utilizator; eng. Paste) etc.

O tastatură are şi taste comutator (cu două stări): CapsLock (asigură comutarea între starea care generează litere mici şi starea care generează litere mari), NumLock (comută între starea numerică şi starea de editare pentru blocul tastelor numerice), Insert (comută între corectura prin inserare şi corectura cu suprascriere).

Monitorul: Monitorul oricărui terminal (compus din ecran şi circuite de generarea imaginii) poate lucra în două moduri: modul text şi modul grafic.

În modul text ecranul este împărţit în rânduri (eng. rows) şi coloane (eng. columns). Numărul de rânduri şi numărul de coloane este dat de modul de lucru permis de monitor. De obicei sunt 25 de rânduri şi 80 de coloane. La intersecţia unei linii cu o coloană se generează un caracter printr-o matrice de puncte luminoase. Pentru fiecare poziţie de afişare, se vor păstra (din motive de reîmprospătare a imaginii) codul ASCII (Unicode) al caracterului şi atributul caracterului (cel care controlează aspectul caracterului afişat şi depinde de adaptorul folosit). De exemplu, pentru calculatoare personale, codul caracterului

Page 46: G Albeanu Arhitectura Sist Calcul

46

este stocat folosind 8 biţi, iar atributul folosind alţi 8 biţi. Atributul pentru afişarea color este format din trei elemente: culoarea peniţei (eng. foreground), culoare hârtiei (eng. background) şi elementul de control al clipirii (eng. blink). Culoarea este specificată cu ajutorul a trei componente fundamentale: R-roşu (eng. Red), G-verde (eng. Green) şi B-albastru (eng. Blue).

În modul grafic ecranul este o suprafaţă de puncte luminoase numite pixeli (elemente de imagine; eng. picture element). Fiecare pixel este caracterizat prin codul culorii. Următoarele elemente caracterizează un anumit mod grafic:

• Rezoluţia - numărul de puncte de pe ecran; • Definiţia - distanţa dintre două puncte pe ecran; • Numărul de culori.

Toate aceste elemente depind de modul grafic suportat de monitor. De exemplu modul VGA (eng. Video Graphics Array) asigură o rezoluţie de 640 x 480 puncte şi 16 culori, iar modul SVGA (eng. Super VGA) standard asigură rezoluţia de 800 x 600 pixeli în 256 culori. Modul XGA (eng. eXtended Graphic Array) afişează mai mult de 18 milioane de culori pentru o rezoluţie de până la 1024 x 768 de pixeli. Rezoluţia sistemelor de afişare este în continuă îmbunătăţire.

Generarea unor imagini complexe, la o viteză de prelucrare mare, fără aportul procesorului sistemului de calcul, este asigurată astăzi de coprocesoarele grafice (numite şi acceleratoare) care realizează în mod independent: trasarea liniilor, generarea suprafeţelor definite prin contur, desenarea umbrelor, deplasarea textului, deplasarea blocurilor de imagine etc.

Monitoarele sunt de tip desktop (la locul de muncă sau acasă) şi portabile. Monitoarele desktop, numite şi sisteme CRT (eng. Cathode-Ray Tubes) sunt similare ca dimensiune şi tehnologie cu receptoarele emisiunilor de televiziune. Sunt de tip întreţesut (eng. interlaced) – cu realizarea imaginii pe rândurile impare şi apoi pe cele pare şi, de tip neîntreţesut (eng. noninterlaced). Întreţeserea provoacă pâlpâirea, şi deci oboseala ochilor. Monitoarele portabile echipează sistemele de tip laptop, notebook, subnotebook şi PDA. În ultimul timp acestea echipează şi sisteme desktop.

Dispozitive pentru introducerea informaţiei grafice: În categoria dispozitivelor periferice de intrare sunt incluse şi echipamentele: mouse39, joystick, trackball, tabletă grafică sau digitizor (eng. digitizer), creion optic (eng. light pen) etc. Primele trei dispozitive de interacţiune controlează deplasarea unui cursor pe ecranul unui sistem de calcul. Ele diferă numai constructiv. Mausul dispune de butoane a căror apăsare este interpretată de programele sistemului de calcul care generează o secvenţă de operaţii specifică locului cursorului, butonului apăsat şi funcţiilor programului în executare. Creionul optic este un dispozitiv de selecţie şi se utilizează numai în combinaţie cu terminale speciale, pentru aplicaţii speciale (ex. proiectare grafică, pictură asistată de calculator etc.). Tableta grafică este un digitizor ce poate fi folosit fie pentru selecţie, fie pentru introducere de date în 39 Acest dispozitiv este denumit maus (plural: mausuri) în DEX’1996: "dispozitiv acţionat manual, conectat la un computer, a cărui deplasare pe o suprafaţă antrenează deplasarea cursorului pe ecran."

Page 47: G Albeanu Arhitectura Sist Calcul

47

aplicaţii de proiectare înclusiv pentru arhitectură, sisteme informatice geografice etc.

Mausul se poate deplasa pe o masă reală (eng. pad) şi va antrena deplasarea unui cursor pe ecran. Mausul are mai multe butoane utile în efectuarea următoarelor operaţii:

1. indicare (eng. point) - cursorul mausului este deplasat pentru a indica un anumit punct de pe ecran (deci reprezentarea unui anumit obiect); 2. clic (eng. click) - se acţionează, foarte scurt, un buton al mausului. Codul ce controlează funcţionarea mausului va trata evenimentul apărut; 3. clic dublu (eng. double click) - se acţionează, foarte scurt, de două ori, un buton al mausului; 4. tragere (eng. drag) - se asigură deplasarea mausului pe masa reală, acesta având un buton apăsat continuu. Tabletele grafice se pot clasifica pe baza a două criterii: a) după

dimensiunea suprafeţei active: A4, A3, A0; b) după precizie şi acurateţe: pentru digitizare de planuri şi pentru meniuri. Ele pot fi echipate cu un stylus sau un puck cu 4-16 butoane programabile.

Un alt periferic de intrare, cu aplicaţii în introducerea imaginilor, este scanerul (eng. scanner). După citirea imaginii, aceasta poate fi prelucrată: mărită, micşorată, rotită, colorată, suprapusă cu alte imagini şi analizată folosind diferite metode. Principiul fundamental al funcţionării scanerului îl reprezintă modificarea intensităţii unui fascicul luminos la întâlnirea unei suprafeţe de o culare oarecare. Scanarea unui document se desfăşoară în două faze. Un fascicul luminos, în prima fază, baleiază (scanează) documentul linie cu linie, iar fascicolul luminos care se reflectă este direcţionat (cu ajutorul unui sistem de oglinzi şi lentile) spre o mulţime de celule fotosensibile CCD (eng. Charge-Coupled Device). În etapa următoare, CCD-ul transformă semnalele luminoase recepţionate în semnale electrice care după o conversie analog-digital sunt trimise programului care va salva imaginea. Scanerele color obţin trei versiuni ale documentului de scanat: una de culoare roşie (eng. red), una de culoare verde (eng. green) şi una de culoare albastră (eng. blue) care contribuie la imaginea finală. Observăm că ceea ce se introduce nu este un punct ci o suprafaţă de puncte. Caracteristicile unui scaner sunt: a) rezoluţia optică- numărul de puncte pe unitatea de suprafaţă pe care le poate citi (eng. dots per inch); b) numărul de culori şi c) viteza de scanare (explorare).

Alte scanere sunt specializate: cititorul de bare (eng. Bar Code Reader), cititorul de taloane (eng. Badge Reader), cititorul de text (eng. Document Scanner sau OCR Scanner), cititoare cu cerneală magnetică a înscrisurilor bancare (eng. Magnetic Character Ink Reader) etc.

Transmiterea/Recepţionarea documentelor la/de la distanţă se poate realiza, pe linie telefonică, folosind un adaptor special (modem) şi un fax (eng. facsimile transmission machines). În prezent cele două componente sunt integrate pe o plachetă numită internal fax-modem sau într-un dispozitiv extern care se cuplează la un sistem de calcul prin portul serial.

Page 48: G Albeanu Arhitectura Sist Calcul

48

Echipamente de ieşire: Din categoria echipamentelor de ieşire ne vom referi la următoarele: imprimanta, plotterul şi fotoplotterul. Plotterele au fost primele dispozitive periferice care au oferit sistemelor de calcul posibilitatea de a produce ieşiri în formă grafică. Plotterele pot fi cu peniţă, cu jet de cerneală, de tip termic şi de tip electrostatic.

Plotterele au în componenţă procesoare grafice proprii. De exemplu, plotterele cu peniţă recunosc primitive grafice precum: linie, poligon, arc de cerc, text etc. Dacă suportul de informaţie este filmul fotografic atunci dispozitivul asemănător plotterului, dar instalat în codiţii specifice se numeşte fotoplotter.

Imprimantele sunt dispozitive de afişare alfanumerică sau grafică. Ele pot fi: cu ace, cu jet de cerneală, cu transfer termic sau pe bază de laser.

Sistemele multimedia acceptă şi intrare/ieşire sonoră dispunând de dispozitive specializate pentru analiza/sinteza vocii. Conversia vocii unei persoane în code numeric se realizează în scopul recunoaşterii vorbirii. Sunt disponibile sisteme integrate pentru recunoaşterea vorbirii (la nivel discret şi la nivel continuu). Acestea sunt sisteme speciale care realizează şi traducerea dintr-o limbă în alta, a mesajului vorbit.

Alte echipamente, a căror prezentare nu este realizată aici, sunt destinate redării unor aspecte ale realităţii virtuale: mănuşa de date (eng: data glove), casca VR (HMD: Head Mounted Display), camera VR (CAVE: Cave Automatic Virtual Environment) etc.

3.1.5. Viteza de procesare

Un sistem de calcul este un dispozitiv automat în care datele reprezentate în binar sunt prelucrate pe baza unui program ce indică o succesiune determinată de operaţii. Datele iniţiale de prelucrat şi programul constituit din instrucţiuni se introduc în sistemul de calcul prin intermediul unor dispozitive periferice de intrare. Prin intermediul unor canale de comunicaţie, datele şi instrucţiunile sunt transferate în memoria internă sub formă binară, în locaţii identificabile prin adresele la care au fost memorate (şi nu prin conţinutul acestora). Apoi fiecare instrucţiune este trimisă la UCC care interpretează conţinutul acesteia şi trimite comenzi către:

1. memorie - prin care se solicită ca anumite date, localizate prin adresele la care sunt memorate, să fie transferate către UAL pentru execuţia anumitor operaţii; după realizarea operaţiei se va indica adresa din memorie unde se va depune rezultatul operaţiei efectuate de UAL; 2. UAL - i se va solicita execuţia operaţiei indicate de instrucţiune; 3. canalele de intrare-ieşire - pentru preluarea altor date şi instrucţiuni de la dispozitivele de intrare-ieşire, respectiv pentru începerea transferului rezultatelor din memorie către dispozitivele periferice de ieşire.

După terminarea execuţiei operaţiilor solicitate, rezultatele memorate la anumite adrese din memorie sunt transferate către dispozitivele de ieşire pentru vizualizarea acestora.

Page 49: G Albeanu Arhitectura Sist Calcul

Creşterea vitezei de procesare a fost posibilă prin accelerarea executării instrucţiunilor (de exemplu prin tehnica pipeline – bandă de asamblare), dar şi prin utilizarea unor tehnici de organizare a memoriei (de exemplu prin utilizarea memoriei cache). Memoria cache este reprezentată de un bloc de memorie de dimensiune mai mică, dar cu timp de răspuns forte scurt, care funcţionează ca un tampon (eng. buffer) între procesor (sau diferite componente ale procesorului) şi memoria principală. Ideea principală care stă la baza tehnicii bazate pe memorie cache este: Dacă o instrucţiune accesează o anumită locaţie de memorie atunci probabilitatea ca instrucţiunile următoare să acceseze locaţii vecine este foarte mare. Această idee induce şi o disciplină de programare bazată pe evitarea salturilor la distanţă (eng. jump) realizată în manieră înlănţuită şi utilizarea instrucţiunilor în secvenţă, eventual doar cu salturi locale (eng. branch). Tehnica pipeline constă în divizarea fiecărei instrucţiuni într-un număr de etape. fiecare etapă fiind executată de o unitate funcţională a procesorului. De obicei, etapele de executare a unei instrucţiuni (în 4 paşi) sunt: extragerea (F – fetch), decodificarea (D – decode), executarea (E – execute) şi scrierea rezultatului (W – write). În figura 3.1 se ilustrează diferenţa (ca timp de procesare) a instrucţiunilor cu şi fără pipeline.

Fig. 3.1. Procesarea instrucţiunilor fără pipeline (sus) / cu pipeline (jos)

Observaţii - Prelucrarea instrucţiunilor fără pipeline: Dacă fiecare etapă consumă

o unitate de timp, de-a lungul a patru unităţi de timp se procesează o singură instrucţiune.

- Prelucrarea instrucţiunilor în regim pipeline: Începând cu unitatea de timp 4, în fiecare unitate de timp se lucrează simultan asupra a patru instrucţiuni. La fiecare nouă unitate de timp se va încheia procesarea completă a unei instrucţiuni. Acesta este motivul pentru care prelucrarea pipeline este numită prelucrare în regim bandă de asamblare.

49

Page 50: G Albeanu Arhitectura Sist Calcul

50

O altă modalitate de creştere a vitezei de procesare o constituie utilizarea arhitecturilor paralele, a arhitecturilor distribuite precum şi a unor arhitecturi neconvenţionale (de exemplu a sistemelor de tip cuantic).

3.1.6. Clasificarea sistemelor de calcul

Sistemele de calcul pot fi de tip numeric (digitale), analogic şi de tip hibrid. Calculatoarele numerice, sunt cele care primesc, prelucrează şi transmit date/informaţii codificate binar. Ele fac obiectul acestei lucrări. Sistemele de calcul analogice sunt echipamente alcătuite din amplificatoare operaţionale şi circuite numerice independente, interconectate în vederea realizării unor operaţii de tip continuu: integratoare, multiplicatoare etc. Mărimile corespunzătoare condiţiilor iniţiale se introduc sub forma unor tensiuni electrice. Acestea sunt prelucrate şi se obţin noi tensiuni electrice ce vor fi vizualizate cu ajutorul unor dispozitive speciale. Sistemele hibride sunt rezultatul cuplării unor sisteme numerice cu sisteme analogice. Comunicarea între cele două tipuri de sisteme se realizează prin intermediul unor dispozitive de conversie: analogic-digital; digital-analogic. Sistemele analogice nu fac obiectul acestei lucrări.

O clasificare interesantă a sistemelor digitale a fost propusă de Flynn (1972) şi cuprinde atât sistemele de calcul cu o singură unitate centrală, cât şi pe cele cu mai multe unităţi centrale (figura 3.2). Clasificarea lui Flynn consideră ca esenţiale două caracteristici: mărimea fluxului instrucţiunilor şi mărimea fluxului datelor.

Un sistem de calcul cu flux unic de instrucţiuni şi flux unic de date este numit sistem de calcul SISD (eng. Single Instruction Single Data Stream). Toate sistemele de calcul tradiţionale (cu o singură unitate centrală) sunt maşini SISD. Această categorie include sisteme de calcul, de la microcalculatoarele personale până la calculatoarele multiutilizator de mare putere (eng. mainframe): IBM/704, IBM/7040, IBM 360/40, IBM 370/135, PDP, FELIX C, microcalculatoarele IBM PC etc. Următoarea categorie o reprezintă sistemele de calcul cu flux simplu de instrucţiuni, dar cu flux multiplu de date, numite sisteme SIMD (eng. Single Instruction Multiple Data Stream). Aceste sisteme se bazează tot pe o singură unitate centrală cu o singură unitate de comandă, dar cu N elemente de prelucrare (UAL) şi N module de memorie ataşate acestora, toate interconectate (N≥2). Unitatea de comandă emite instrucţiuni sub formă de flux unic spre toate elementele de prelucrare, în mod simultan. La un moment dat, toate elementele de prelucrare active execută aceeaşi instrucţiune, numai asupra datelor situate în propriul modul de memorie, deci flux multiplu de date. Din această clasă fac parte unele supercalculatoare (de exemplu, ILLIAC-IV cu 64 UAL şi pentru fiecare UAL fiind disponibili 8KB de memorie).

Page 51: G Albeanu Arhitectura Sist Calcul

Fig. 3.2. Tipuri de sisteme de calcul (Flynn)

Sistemele SIMD sunt, la rândul lor, de mai multe categorii: a) matriceale -

prelucrează datele în mod paralel şi le accesează prin adrese în loc de index şi valoare; b) cu memorie asociativă - operează asupra datelor accesate asociativ (prin conţinut). În loc de adresă, specificarea datelor se face prin valoare, cum ar fi: "mai mare decât", "mai mic decât", "între limitele", "egal cu" etc.; c) matriceal-asociative - sunt sisteme de tip asociativ ce operează asupra tablourilor multidimensionale (matrice şi masive de date); d) ortogonale - fiecare element procesor corespunde la un cuvânt (32 biţi) de memorie şi, astfel, biţii de acelaşi rang ai tuturor cuvintelor pot fi prelucraţi în paralel. Acest procedeu mai este numit procesare serială pe bit şi paralelă pe cuvânt.

Clasa sistemelor cu flux multiplu de instrucţiuni şi flux unic de date MISD (eng. Multiple Instructions Single Data Stream) include acele structuri specializate ce folosesc mai multe fluxuri de instrucţiuni executate pe acelaşi flux de date. Ultima categorie o reprezintă sistemele MIMD (eng. Multiple Instructions, Multiple Data Stream), ce reprezintă un grup de calculatoare independente, fiecare cu propriul context (program, date etc.). Multe dintre supercalculatoare şi toate sistemele distribuite intră în această clasă. Sistemele MIMD pot fi divizate în două categorii: sistemele multiprocesor (cu memorie comună) şi sisteme multicalculator. Pe de altă parte, fiecare din aceste clase se poate împărţi în funcţie de modul de interconectare. Există două posibilităţi de interconectare: magistrală (similar televiziunii prin cablu) şi comutaţie (similar reţelei telefonice). Se obţin astfel patru clase de sisteme MIMD (figura 3.3): sisteme multiprocesor cu magistrală, sisteme multiprocesor comutate, sisteme multicalculator cu magistrală (reţele de calculatoare) şi sisteme multicalculator comutate (sisteme distribuite generale).

Fig. 3.3. Tipuri de sisteme MIMD

51

Page 52: G Albeanu Arhitectura Sist Calcul

52

Calculatoarele dintr-o reţea pot fi de acelaşi tip (reţele omogene) sau de tipuri diferite (reţele eterogene). Reţelele de calculatoare permit folosirea în comun a unor resurse fizice scumpe (imprimante, discuri fixe de mare capacitate etc.) şi folosirea în comun a unor date. Datele care se schimbă între sisteme de calcul se numesc documente electronice.

În funcţie de aria de răspândire a calculatoarelor dintr-o reţea, se disting următoarele tipuri de reţele:

1. Reţele locale - LAN (eng. Local Area Network): În aceste reţele, aria de răspândire nu depăşeşte 2 km şi deservesc o societate comercială. Reţelele locale sunt formate de regulă din calculatoarele aflate într-o clădire sau un grup de clădiri.

2. Reţele metropolitane - MAN (eng. Metropolitan Area Network): Aceste reţele acoperă suprafaţa unui oraş.

3. Reţele globale - WAN (eng. Wide Area Network): Calculatoarele acestor reţele au o arie geografică de răspândire foarte mare (reţele internaţionale, "Internet" etc.)

În această lucrarene vom referi numai la reţelele locale. Reţelele locale, în special bazate pe staţii de lucru sau calculatoare personale (PC) prezintă avantaje ce pot fi grupate în trei categorii: a) avantaje strategice în mediul de afaceri/educaţional; b) avantaje operaţionale şi/sau tactice; c) avantaje ale utilizatorului.

Avantajele strategice în mediul de afaceri/educaţional includ: facilitarea comunicaţiilor în cadrul unei firme/şcoli, creşterea competitivităţii firmei/instituţiei, posibilitatea organizării resurselor în grupuri de lucru cu efect asupra reducerii bugetelor afectate prelucrării datelor. Din punct de vedere operaţional şi/sau tactic se remarcă: reducerea costurilor per utilizator, creşterea siguranţei serviciilor de calcul (prin posibilitatea includerii serverelor “în oglindă“ (eng. mirror)), îmbunătăţirea administrării software-ului, îmbunătăţirea integrităţii datelor (datele de pe server vor fi salvate în mod regulat), îmbunătăţirea timpului de răspuns (într-o reţea necongestionată). Un utilizator al unei reţele locale poate avea următoarele avantaje: mediul de calcul poate fi ales de către utilizator, creşte repertoriul de aplicaţii, creşte securitatea informaţiei (sistemul de operare în reţea fiind cel care restricţionează/permite accesul la datele reţelei), există posibilitatea instruirii on-line (prin intermediul bazelor de date pentru instruire) etc.

Componentele hardware specifice unei reţele locale (în afara staţiilor sau PC-urilor) sunt: 1. Cabluri - pot fi coaxiale, fire torsadate (10Base-T), fibre optice etc. Acestea

sunt utile pentru realizarea legăturii fizice. Caracteristicile principale ale unui cablu sunt: impedanţa, capacitatea, factorul de atenuare, viteza semnalului, caracteristicile de zgomot. Spre deosebire de mediile prin cablu, mediile oferite de telefonia celulară, undele radio terestre, undele radio prin satelit, undele laser, microundele şi undele meteorice permit transmiterea informaţiilor fără cablu.

2. Module de interfaţă cu reţeaua - accesul fizic al unei staţii (sau PC) la LAN se face cu ajutorul unui modul de interfaţă (NIC - eng. Network Interface Card),

Page 53: G Albeanu Arhitectura Sist Calcul

53

mai precis o plachetă instalată în PC ce suportă atât funcţii de partajare a spaţiului fizic cât şi funcţii de sincronizare.

3. Tranceivere - Acestea sunt receptoare-transmiţătoare pentru conectare la LAN. Tranceiverul este un echipament ce transmite şi recepţionează semnal între NIC-ul din PC şi mediul fizic utilizat. Dacă sunt utilizate conectoare Ethernet în T ataşate direct la conectorul BNC al unui NIC, atunci nu este necesar un astfel de echipament.

4. Huburi pentru cablaje - Sunt echipamente utilizate pentru extinderea zonei de acoperire a reţelei. De exemplu, într-un LAN pe fire torsadate, toate echipamentele sunt conectate într-o configuraţie de tip stea într-un hub, care este de obicei localizat într-un dulap închis. Un hub suportă de la 8 la câteva sute de staţii. Deoarece distanţa limită între huburi este de approximativ 100 de metri, proiectanţii utilizează deseori cabluri de interconectare de tip superior (celor 10Base-T) pentru a mări distanţa între huburi.

5. Repetitoare - Acestea sunt echipamente ce amplifică semnalele pentru a mări distanţa fizică pe care poate acţiona un LAN.

6. Punţi (eng. bridge) - conectează 2 sau mai multe LAN-uri la nivelul transmiterii pachetelor de date. Ele prelucrează datele în funcţie de adresa destinatarului şi adresa expeditorului.

7. Rutere (eng. router) - sunt echipamente de dirijare a traficului de date. Ele înţeleg protocolul folosit în transmisia datelor şi pot traduce protocoale, putând fi folosite la conectarea a două reţele de calculatoare.

8. Porţi (eng. gateway) - sunt echipamente utilizate pentru conectarea unor reţele de calculatoare care folosesc protocoale diferite.

Din punct de vedere software, accesul la blocurile de instrucţiuni

specializate în comanda şi controlul unităţilor de disc, imprimantelor şi a altor periferice este asigurat de către sistemul de operare al reţelei (NOS- eng. Network Operating System). Un NOS este un software de reţea ce permite reţelei să suporte capabilităţi multiproces (eng. multitasking) şi multiutilizator (vezi capitolul 2). De asemenea un NOS oferă posibilităţi deosebite pentru partajarea resurselor şi pentru comunicare. Cele mai cunoscute NOS-uri sunt: Microsoft LAN Manager, Novell Netware, IBM LAN Server etc.

În afară de NOS-urile tradiţionale, recent s-au evidenţiat modelul "client-server" şi modelul "de la egal la egal" (eng. peer - to - peer). Aceste soluţii utilizează atât sistemul de operare local al staţiei cât şi NOS-ul.

O arhitectură client-server este un model de calcul în care aplicaţiile software sunt distribuite între entităţile din LAN. Clienţii solicită informaţia de la serverul (serverele) din reţea ce stochează datele şi/sau programele, partajarea acestora fiind asigurată de NOS. În acest model, un sistem de calcul din reţea este fie server, fie client. Realizarea unor prelucrări cu ajutorul serverului (de la distanţă) este realizată prin utilizarea apelurilor RPC (eng. Remote Procedure Call). Alte metode pentru realizarea aplicaţiilor client-server sunt: interfaţa de programare a aplicaţiilor: API (eng. Application Programming Interface), serverul de baze de date (eng. data base), utilizarea ferestrelor la distanţă.

Page 54: G Albeanu Arhitectura Sist Calcul

54

Reţelele bazate pe modelul "de la egal la egal" suportă comunicaţiile directe între utilizatori şi sunt de dimensiune mică. Fiecare calculator din reţea poate fi, în acelaşi timp, şi client şi server. Cele mai cunoscute sisteme de operare în reţele "de la egal la egal" sunt: Microsoft Windows, Lantastic etc.

3.1.7. Modelarea sistemelor digitale

Aplicaţiile 2.3.2 şi 2.3.3 au considerat adunarea bit cu bit, respectiv compararea numerelor binare de câte două cifre. Circuitul care implementează evaluarea unei funcţii booleene (în formă simplificată; a se vedea aplicaţia 2.3.1) este unul de tip combinaţional: ieşirea la momentul t depinde numai de intrările la momentul t. Această secţiune va prezenta mai multe modele, in general de tip boolean, pentru unele componente hardware ale sistemelor de calcul numeric. Se consideră a fi circuite combinaţionale primare – numite şi porţi, următoarele circuite: AND (⊗), OR (⊕), NOT (∇), NAND = NOT AND şi XOR (Ξ). Circuitele AND, OR, NAND pot avea două sau mai multe intrări, circuitul NOT are o singură intrare, iar circuitul XOR are două intrări. Pentru aplicaţii sunt utile şi circuitele care reprezintă constantele 0 (circuit inactiv) şi 1 (circuit activ). Practic, un circuit combinaţional este reprezentat de o structură arborescentă de porţi (ieşirile unei porţi la momentul t+k, k≥1 nu pot fi intrări pentru o poartă la momentul t). Intrările unei porţi, in general, îşi schimbă valoarea de-a lungul timpului de funcţionare a circuitului, în funcţie de semnalul de intrare. Totuşi unele intrări pot fi constante. Complexitatea unui circuit este dată de numărul de porţi (a se revedea aplicaţia 2.3.1). Funcţia booleană care implementează funcţionarea circuitului combinaţional o vom numi funcţie de transfer. Considerăm că un circuit cu mulţimea intrărilor X, mulţimea ieşirilor Y şi funcţia de transfer f, f: X → Y, este un sistem digital. Evident, pentru sistemele de calcul, X, respectiv Y sunt mulţimi de secvenţe binare.

Cu notaţiile din secţiunea 2.3, dacă a şi b sunt variabile booleene atunci funcţiile de transfer ale circuitelor AND, OR, NAND, XOR şi NOT acţionează astfel: AND(a,b)= ab, OR(a,b) = a+b, NAND (a,b) = (ab)', XOR(a,b)= a'b+ab'; NOT(a)=a', NOT(b)=b'.

Sistemele digitale complexe sunt fie circuite combinaţionale, fie ansambluri de sisteme digitale conectate în serie sau paralel. Fie S1 = (X1, Y, f), Y ⊆ Y1 şi S2 = (Y1, Z, g) două sisteme digitale conectate în serie. Rezultatul obţinut este sistemul digital S = (X1, Z, h = g ° f) unde prin ° am notat compunerea funcţiilor. Fie S1 = (X1, Y1, f1) şi S2 = (X2, Y2, f2) sisteme digitale. Prin conectarea în paralel a sistemelor S1 şi S2 obţinem sistemul S = (X1xX2, Y1xY2, f), unde x desemnează produsul cartezian, iar f(x,y)=(f1(x), f2(y)) este funcţia de transfer a sistemului digital S. În general, complexitatea sistemelor digitale creşte prin utilizarea operaţiior conectare în serie, respectiv paralel. De exemplu o arhitectură serie-paralel a patru sisteme Si = (Xi, Yi, fi), i = 1,...,4, o constituie sistemul S = (X1xX2, Y3xY4 f) unde f = h2 ° h1, unde h1 este funcţia de transfer a sistemului paralel (S1, S2), iar h2 este funcţia de transfer a sistemului paralel (S3, S4). Se presupune că mulţimile care intervin în construcţiile de mai sus sunt bine formate.

Page 55: G Albeanu Arhitectura Sist Calcul

σ

Fig. 3.4. Recursia

Sistemele digitale devin şi mai complexe ca funcţionalitate, dacă adăugăm o nouă operaţie, numită recursie: Fie circuitul S = (XxZ, YxZ, (f1, f2)), cu f1 : X x Z → Y, f2 : X x Z → Z. Prin recursie se obţine sistemul R = (X, Y, h), unde h(x) = f1 (x, f2(x, z)), iar f2 verifică condiţia z = f2(x, f2(x, z)). Trebuie observat că pentru o intrare x constantă, circuitul poate produce mai multe ieşiri, în funcţie de starea internă (modelată prin elementele mulţimii Z) şi funcţia f2. Se spune că autonomia unui sistem S creşte prin includerea acestuia într-o recursie R.

55

Fig. 3.5. Subciclu

Într-o reprezentare grafică, se remarcă prezenţa unui ciclu σ (figura 3.4). O recursie A (deci un ciclu σ1) poate fi sub-recursie a recursiei B (cu ciclul σ2). Se spune că ciclul σ1 este subciclu al ciclului σ2. Figura 3.5 ilustrează o astfel de situaţie.

Cadrul cel mai general este cel al

sistemelor digitale de ordinul n, definite cu ajutorul următoarelor reguli:

(R1) Orice circuit combinaţional (fără cicluri) este este un sistem digital de ordinul 0;

(R2) Un sistem digital A de ordinul n+1 se obţine dintr-un sistem digital B de ordinul n prin adăugarea unui ciclu care include toate cele n cicluri ale sistemului B.

(R3) Orice sistem digital de ordinul n (n ≥ 0) se obţine numai prin aplicarea regulilor R1 şi R2.

Există o puternică corespondenţă între componentele unui sistem de calcul

şi sistemele digitale de ordinul n: Circuitele combinaţionale (fără autonomie) sunt sisteme digitale de ordin 0 [decodoare, codificatoare simple/cu prioritate, multiplexoare şi demultiplexoare, sumatoare, circuite de deplasare, multiplicatoare, UAL, etc.]; circuitele de memorie (cu autonomie pe stări) sunt sisteme digitale de ordinul 1 [registre, RAM etc.]; automatele finite (cu autonomie comportamentală) sunt sisteme digitale de tipul 2; procesoarele (cu autonomie pe interpretarea stărilor interne) sunt sisteme digitale de ordinul 3, iar un calculator (ca ansamblu) este un sistem digital de ordinul 4.

Page 56: G Albeanu Arhitectura Sist Calcul

56

Alte modele teoretice ale sistemelor de calcul sunt: RAM (eng. Random Access Machine) pentru sisteme de calcul secvenţiale şi PRAM (eng. Parallel Random Access Machine).

Modelul RAM constă dintr-o unitate de memorie, o unitate de bandă de intrare cu tipul de acces numai citire (eng. read only), o bandă de ieşire cu acces numai în scriere (eng. write only) şi un program care nu poate fi modificat. La fiecare citire/scriere se avansează cu o singură poziţie.

Modelul PRAM este utilizat pentru a descrie sistemele de calcul paralele. Presupunem că se utilizează p procesoare care partajează o memorie ce poate fi centalizată sau distribuită. Procesoarele lucrează sincron pe baza ciclurilor IPO (eng. input-processing-output), dar pe baza unei opţiuni de acces dintre: ER (eng. exclusive read) - cel mult un processor poate citi de la o anumită adresă de memorie. EW (eng. exclusive write) - cel mult un processor poate scrie la o adresă de memorie, CR (eng. concurrent read) - mai multe procesoare pot citi simultan de la aceeaşi adresă în acelaşi ciclu IPO şi CW (eng. concurrent write) care permite ca mai multe procesoare să scrie la aceeaşi locaţie de memorie, în acelaşi ciclu IPO. Se obţin, astfel, mai multe variante de modele: EREW-PRAM (cutire şi scriere exclusivă), CREW-PRAM (citire concurentă şi scriere exclusivă), ERCW-PRAM (citire exclusivă şi scriere concurentă) şi CRCW-PRAM (citire şi scriere concurentă). Conflictele generate de scrierea concurentă se pot rezolva prin reguli de tipul: comun (eng. common) - se memorează acceaşi valoare la locaţia accesată simultan; arbitrar (eng. arbitrary) - se memorează una dintre valori, iar celelalte sunt ignorate; minimal (eng. minimum) - se stochează valoarea scrisă de procesorul cu cel mai mic indice, şi prioritar (eng. priority) - se memorează o valoare obţinută prin aplicarea unei funcţii associative de prelucrare a tuturor valorilor produse de procesoarele ce funcţionează concurrent.

Din punct de vedere software se remarcă paralelismul de date (în cazul structurilor de date degulate) şi paralelismul de control (baza pe taskuri în cazul structurilor de date neregulate, de exemplu: procesarea pipeline).

În general, proiectarea calculatoarelor paralele porneşte de la problema particulară care trebuie rezolvată şi de limitarea numărului de conexiuni posibile ale elementelor de procesare. Sunt trei categorii de reţele de conectare: fiecare element este conectat direct cu oricare altul; fiecare element este conectat printr-o punte de legătură (eng. switchboard) cu oricare altul şi, fiecare element este conectat doar cu anumite unităţi de procesare în funcţie de algoritmul de rezolvare a problemei.

Un model cu totul spectaculos este cel bazat pe reţele neurale artificiale (eng. artificial neural networks) care învaţă să resolve anumite probleme în urma unui process de instruire de tip supervizat sau nesupervizat. Astfel de sisteme sunt simulate folosind calculatoare paralele de uz general pentru a rezolva probleme din cele mai diferite domenii: recunoaşterea şi clasificarea formelor (eng. pattern recognition and classifcation), recunoaşterea şi sinteza vorbirii (eng. speech processing), analiza imaginilor medicale (eng. medical image processing) etc.

Page 57: G Albeanu Arhitectura Sist Calcul

57

3.2. Resursele logice ale sistemelor de calcul

3.2.1 Introducere în sisteme de operare

Un sistem de operare este "o colecţie organizată de programe de control şi

serviciu, stocate permanent într-o memorie principală sau auxiliară, specifice tipurilor de echipamente din componenţa unui sistem de calcul, având ca sarcini: optimizarea utilizării resurselor, minimizarea efortului uman de programare şi automatizarea operaţiilor manuale în cât mai mare măsură, în toate fazele de pregătire şi execuţie a programelor".

Sistemul de operare pune la dispoziţia utilizatorilor (operatori, programatori etc.) şi o interfaţă concretizată într-un interpretor al comenzilor utilizatorului exprimate cu ajutorul unui limbaj de comandă. Toate sistemele de operare moderne (UNIX, System, Windows etc.) oferă şi o interfaţă grafică, comenzile fiind selectate din meniuri ierarhice folosind dispozitive de interacţiune grafică sau tastatura. Totuşi, puterea limbajului de comandă nu poate fi atinsă numai cu ajutorul elementelor grafice.

Interfaţa dintre sistemul de operare şi programele utilizatorului (numite şi lucrări - eng. jobs) este asigurată de o colecţie de "instrucţiuni extinse" ale sistemului de operare numite apeluri sistem. Folosind apeluri sistem (organizate în biblioteci statice (.lib) sau dinamice (.dll)), un program utilizator poate crea, utiliza şi şterge diverse obiecte gestionate de către sistemul de operare. Cele mai importante obiecte gestionate de un sistem de operare modern sunt procesele şi fişierele. De asemenea, firele de executare (eng. threads) sunt obiecte specifice programării concurente (de exemplu folosind limbajul Java), dar şi ca modalitate de implementare a proceselor Windows prin programare multi-fir (eng. multi-thread programming).

Procesul (eng. task) reprezintă conceptul cheie al oricărui sistem de operare. Un proces este o entitate dinamică care corespunde unui program în execuţie. Procesele sunt fie procese sistem, fie procese utilizator. Procesele sistem sunt asociate unor module ale sistemului de operare, iar procesele utilizator sunt asociate unor programe utilizator care pot să creeze alte procese utilizator sau să lanseze pentru executare procese sistem. Un proces (numit proces tată) poate creea unul sau mai multe procese (numite procese fiu sau descendenţi). În sistemele multiutilizator fiecare proces este caracterizat de identificatorul proprietarului (utilizatorului).

Un fişier (eng. file) este un şir de caractere terminat printr-o marcă de sfârşit de fişier (EOF - eng. End Of File). Fişierul poate fi stocat pe disc, în memorie etc. Una din funcţiile importante ale unui sistem de operare este aceea de a “ascunde” dificultatea lucrului cu echipamentele periferice. Astfel, sistemul de operare oferă apeluri sistem pentru lucrul cu fişiere: creare, ştergere, citire, scriere etc. Fişierele pot fi grupate într-un catalog (eng. directory, folder) şi pot fi

Page 58: G Albeanu Arhitectura Sist Calcul

58

caracterizate de anumite atribute (proprietar, dimensiune, data ultimului acces în scriere, coduri de protecţie etc.).

Modulele software pentru tratarea cererilor de intrare/ieşire de către sistemul de operare se numesc drivere. Fiecare dispozitiv periferic are asociat un driver. În general, orice driver menţine o coadă a cererilor de intrare/ieşire lansate de unul sau mai multe procese şi pe care le prelucrează într-o anumită ordine (în funcţie de momentul lansării cererii sau conform unei liste a priorităţilor). Un driver este răspunzător de satisfacerea cererilor de transfer de informaţie, de tratarea erorilor ce pot apărea la realizarea unei operaţii fizice, ş.a. Un program utilizator poate efectua operaţii de intrare/ieşire la nivelul unui driver, totuşi programul său nu mai este independent de dispozitiv. De aceea, pentru operaţiile de intrare-ieşire se utilizează apelurile sistem sau diferitele proceduri specializate puse la dispoziţie de mediile de programare.

Primele sisteme de operare realizau prelucrarea pe loturi de programe (eng. batch mode). Utilizatorul nu comunica direct cu sistemul de calcul; acesta funcţiona sub controlul unui operator uman specializat. Operatorul avea sarcina de a asigura resursele externe necesare unei lucrări (montarea benzilor magnetice, pornirea şi oprirea diverselor echipamente periferice). De asemenea, operatorul asigura şi introducerea lucrărilor în sistem. Comunicarea operaţiilor de executat, se realiza prin intermediul unei interfeţe de tip alfanumeric ce utiliza un limbaj de comandă pentru descrierea ordinelor adresate sistemului, precum şi pentru specificarea acţiunilor necesare tratării erorilor.

Primele sisteme de acest tip funcţionau în regim de monoprogramare, un singur program fiind încărcat în memorie la un moment dat. Caracteristica de bază a acestui mod de prelucrare o reprezintă imposibilitatea intervenţiei utilizatorului pentru a interacţiona cu programul său.

Dintre conceptele implementate pentru creşterea performanţelor şi mărirea eficienţei utilizării resurselor sistemelor de calcul, un rol important l-a avut multiprogramarea. În sistemele cu multiprogramare, la un moment dat, în memorie se află încărcate, pentru executare, mai multe procese (programe în executare), ce concurează, pe baza unei scheme de priorităţi, pentru accesul la anumite resurse ale sistemului. Când o resursă este retrasă unui proces (la încheierea acestuia sau la apariţia unui proces cu prioritate mai mare), aceasta poate fi imediat alocată unui proces solicitant.

Sistemele cu multiprogramare sunt din ce în ce mai complexe. Ele au de rezolvat probleme dificile privind: alocarea optimă a resurselor, evitarea interblocărilor, protecţia utilizatorilor (între ei) şi protecţia sistemului (în raport cu utilizatorii).

În sistemele uniprocesor, execuţia mai multor programe în regim de multiprogramare pare simultană din punctul de vedere al utilizatorului, dar la un moment dat, există doar un singur proces activ în sistem. Totuşi, în sistemele multiprocesor sau multicalculator, două sau mai multe procese pot fi active simultan, ele fiind prelucrate de procesoare diferite.

Un alt mecanism important este multiprocesarea. Acesta constă în multiprogramarea a două sau mai multe procese având un obiectiv comun. Într-un

Page 59: G Albeanu Arhitectura Sist Calcul

59

sistem de operare multiproces (eng. multitasking) procesele pot comunica între ele şi îşi pot sincroniza activităţile. Sistemele Microsoft bazate pe tehnologia NT, sistemele UNIX şi Linux sunt sisteme de operare multiproces. Conceptul de memorie virtuală este, de asemenea, foarte important în contextul sistemelor de operare moderne.

Mulţimea funcţiilor şi modul de realizare a acestora definesc caracteristicile unui sistem de operare. Aceste caracteristici pot fi utilizate pentru a clasifica şi compara sistemele de operare. Cele mai importante caracteristici sunt: i) modul de introducere a programelor în sistem [introducere serială, paralelă, respectiv la distanţă]; ii) modul de planificare a proceselor [orientare pe lucrări; orientare pe proces]; iii) numărul de programe prezente simultan în memorie [monoprogramare; multiprogramare]; iv) modul de utilizare a resurselor [alocare completă; timp real; partajare]; v) numărul de utilizatori ce pot folosi sistemul în acelaşi timp [monoutilizator; multiutilizator].

Referitor la modul de utilizae a resurselor, când resursa partajată este timpul unităţii centrale, sistemul de operare devine cu timp partajat (eng. time sharing). În general, sistemele de operare din această clasă asigură utilizarea eficientă a resurselor sistemelor de calcul conversaţionale în care accesul la resursele sistemului poate fi:

a) direct - pentru asigurarea unui control direct şi permanent asupra unui set de terminale pe baza unui program utilizator; un caz particular al acestor sisteme îl reprezintă sistemele interactive în timp real, în cadrul cărora se cere o valoare maximă prestabilită a timpului de răspuns;

b) multiplu - pentru accesul simultan, al unui număr mare de utilizatori, la resursele hardware şi software ale sistemului; acest tip de acces apare când sunt cel puţin două terminale în sistem, iar fiecare utilizator lucrează cu programul său într-o regiune de memorie (partiţie) diferită de regiunile celorlalţi utilizatori, protejată printr-un mecanism software sau hardware;

c) în timp partajat (time-sharing) - în care alocarea timpului de acces se realizează pe baza unor cuante de timp fixe sau variabile, de ordinul milisecundelor, utilizatorii având impresia că lucrează simultan cu sistemul;

d) la distanţă - în care prelucrarea se produce de către mai multe calculatoare asupra datelor care sunt distribuite în mai multe colecţii de date dispersate geografic (eng. distributed data bases).

3.2.2. Iniţiere în utilizarea sistemelor de calcul bazate pe UNIX

Un sistem de operare, în forma cea mai simplă, apare ca o colecţie de proceduri cu funcţii precise şi cu o interfaţă bine precizată între acestea. Serviciile (apelurile sistem) furnizate de sistemul de operare, sunt solicitate prin încărcarea anumitor registre (ale UCC) cu informaţia necesară sau depunerea acestei informaţii în memoria stivă şi apoi “provocarea” unei întreruperi cunoscută sub numele apel supervizor sau apel nucleu. Acest apel determină trecerea sistemului de calcul din mod utilizator în mod nucleu (supervizor) şi transferă controlul sistemului de operare. Sistemul de operare analizează parametrii apelului pentru a-l

Page 60: G Albeanu Arhitectura Sist Calcul

60

identifica, iar apoi apelează procedura de serviciu necesară. Această descriere sugerează scheletul unui sistem de operare: i) un program ce invocă o procedură de serviciu; ii) o bibliotecă de proceduri de serviciu ce corespund apelurilor sistem şi iii) o bibliotecă de proceduri utilitare pentru procedurile de serviciu.

Tendinţa în realizarea sistemelor de operare moderne este de a implementa cea mai mare parte a funcţiilor sistemului de operare sub formă de procese utilizator. Pentru a solicita un serviciu, un proces utilizator (numit şi proces client) emite o cerere unui proces de serviciu, care rezolvă solicitarea şi transmite clientului răspunsul. Această comunicaţie între clienţi şi procesele de serviciu este asigurată de nucleul sistemului de operare.

Sistemul de operare UNIX a fost elaborat în anul 1969 (autori: Ken Thompson şi Dennis Ritchie - Laboratoarele Bell din New Jersey, SUA) şi până în prezent a cunoscut mai multe extensii. Pentru microcalculatoare personale, cea mai cunoscută implementare este cunoscută sub numele de Linux. Cele mai importante caracteristici ale sistemului de operare UNIX sunt:

• este un sistem de operare cu divizarea timpului, multiproces şi multiutilizator;

• asigură protecţia fişierelor şi a modului de executare a programelor prin existenţa unor parole şi drepturi (coduri) de acces;

• promovează modularitatea aplicaţiilor; • operaţiile de intrare/ieşire sunt integrate în sistemul de fişiere, prin

realizarea aşa-numitelor intrări/ieşiri generalizate; • unitatea de planificare este procesul; • gestiunea memoriei se face printr-un mecanism care permite schimbul

de pagini (migraţia sau eng. swapping) între memoria RAM şi cea externă, gestionându-se spaţiul afectat executării proceselor şi controlându-se timpul de acces al proceselor în aşteptare;

• prin intermediul componentei SHELL, asigură o interfată simplă şi interactivă. Componenta SHELL nu este integrată în nucleul sistemului de operare;

• este un sistem de operare portabil (fiind scris în limbajul C) activ pe foarte multe tipuri de sisteme de calcul, de la calculatoare personale până la calculatoare MIMD.

Sistemul de operare UNIX este alcătuit din trei părţi majore: nucleul, sistemul de fişiere (ce cuprinde programele utilitare, programele aplicative şi programele de gestiune a intrărilor şi ieşirilor) şi interfaţa cu utilizatorul (componenta SHELL). Relaţiile între cele trei componente ale sistemului se realizează prin:

• apeluri sistem; • programe utilitare; • funcţii standard folosite de limbajul C; • subprograme de gestiune a intrărilor/ieşirilor, furnizate odată cu

sistemul şi diferite de la un sistem de calcul la altul.

Page 61: G Albeanu Arhitectura Sist Calcul

61

Sistemul de operare UNIX oferă utilizatorului interfeţe organizate pe trei nivele: nivelul exterior nucleului (prin programe utilitare); nivelul intermediar oferit de funcţiile din biblioteca standard C şi nivelul interior oferit de apelurile sistem.

Sistemul de operare UNIX fiind un sistem multiutilizator şi cu divizarea timpului, impune existenţa unui utilizator special numit administrator de sistem, care ţine evidenţa utilizatorilor, stabileşte parolele şi drepturile de acces şi creează cataloagele asociate utilizatorilor.

Pentru fiecare utilizator, administratorul de sistem creează câte un catalog propriu (eng. directory), care poate conţine atât fişiere ordinare (programe sau date), cât şi subcataloage.

Sistemul UNIX face deosebire între litere mari şi litere mici. Toate fişierele sunt structurate în cataloage, organizate arborescent, în vârful ierarhiei (la rădăcina arborelui) aflându-se catalogul rădăcină (eng. root) notat prin ‘/’.

Specificarea numelui fişierului se poate face în două moduri: absolut - pornind de la rădăcină sau relativ - pornind de la poziţia curentă. Numele complet al fişierului conţine şi calea de acces (catalogul din care face parte acesta).

Deschiderea unei sesiuni de lucru se realizează folosind comanda login. Sistemul va solicita numele utilizatorului (eng. username) precum şi parola sa (eng. password). Un utilizator poate să-şi schimbe parola folosind comanda passwd. Pentru terminarea sesiunii de lucru se utilizează combinaţia de taste CTRL+d. Pentru documentare se poate utiliza comanda man care prezintă informaţii despre anumite entităţi ale sistemului de operare. De exemplu, comanda $man man, descrie structura manualelor UNIX precum şi modul lor de consultare.

După deschiderea sesiunii de lucru, utilizatorul are acces la două grupe de fişiere: fişierele create de el însuşi şi fişierele furnizate de sistem drept comenzi sistem.

Executarea unei comenzi

În general, o comandă UNIX poate fi privită ca o succesiune de zone separate prin spaţii, de forma

comandă opţiuni expresii fişiere unde: "comandă" este numele propriu-zis al comenzii, "opţiuni" reprezintă o secventă de opţiuni (o opţiune UNIX este reprezentată printr-o literă precedată sau nu de semnele "+" sau "-"), "expresii" reprezintă unul sau mai multe şiruri de caractere cerute ca argumente pentru comanda respectivă, iar "fişiere" specifică unul sau mai multe fişiere.

Delimitarea anumitor argumente se poate face prin apostrofuri şi ghilimele. În acest sens, trebuie să se respecte următoarele patru reguli de delimitare:

1. dacă în şirul de caractere nu apare nici unul din caracterele ' sau ", atunci se poate delimita fie prin ', fie prin ";

2. dacă în şirul de caractere apare apostroful, dar nu apare caracterul " , atunci delimitarea se poate realiza folosind caracterul ";

3. dacă în şirul de caractere apare caracterul ", dar nu apare apostroful, atunci delimitarea se realizează folosind apostrofuri;

Page 62: G Albeanu Arhitectura Sist Calcul

62

4. dacă în şirul de caractere apar ambele caractere (' şi ") atunci se va utiliza caracterul de evitare “\”. Pentru prezenţa caracterului “\“ în şir, acesta se dublează.

Interpretorul de comenzi UNIX acceptă cel puţin o comandă pe linie. Dacă se doreşte specificarea mai multor comenzi pe acelaşi rând, acestea trebuiesc separate prin caracterul ";".

Comenzi pentru lucrul cu procese Sistemul UNIX permite lansarea spre executare a unei comenzi (program)

la un anumit moment de timp. Comanda UNIX ce face posibil acest lucru este disponibilă numai administratorului de sistem. Numele comenzii este at şi primeşte ca argumente timpul, data, factorul de repetare a lansării, precum şi numele unui fişier care conţine comanda sau comenzile ce se vor executa. De asemenea, folosind comenzile nice, kill şi sleep, utilizatorul poate interveni asupra proceselor din sistem pentru a le modifica starea.

Comanda UNIX ce permite afişarea stărilor unor procese este ps. Cele mai uzuale opţiuni ale acestei comenzi sunt: -e : listează toate procesele; -f : produce o listare completă; -l : produce o listare în format lung; -p lista : afişează date doar despre procesele specificate în listă; -t lista : afişează date doar despre procesele terminalelor din listă; -u listă : afişează date doar despre procesele utilizatorilor din listă. Informaţiile despre fiecare proces, în formatul lung, sunt prezentate pe o linie sub forma unui tabel cu următoarele coloane: F : tipul procesului (00 - proces terminat, 01 - proces sistem, 04 - proces suspendat de părintele său, 10 - proces încărcat în memorie, dar blocat); S : starea procesului (R - proces în coada de aşteptare (ÎNTRERUPT), S - proces inactiv (sleep - mai puţin de 20 de secunde), I - proces inactiv (idle - peste 20 de secunde), T - proces terminat, D - proces evacuat temporar pe disc, O - proces ACTIV). UID : proprietarul procesului; PID : identificatorul procesului; PPID : identificatorul procesului părinte al acestui proces; PRI : prioritatea procesului (valoare mică înseamnă prioritate mare); TTY : terminalul de la care a fost lansat procesul (chiar dacă este lansat de la distanţă, în urma unei sesiuni de tip telnet sau ssh.); TIME : timpul total cât a fost ACTIV; NICE : dacă prioritatea a fost stabilită folosind comanda nice; ADDR : adresa din memorie la care se află încărcat procesul; SZ : dimensiunea procesului; STIME : momentul de start al procesului; CMD : comanda care a lansat procesul.

Page 63: G Albeanu Arhitectura Sist Calcul

63

Comanda kill emite un semnal de tip întrerupere către un proces. De obicei, acest semnal solicită terminarea procesului. Comanda are ca argumente un număr de semnal (precedat de -) şi identificatorul procesului căruia i se adresează semnalul. Semnalul este un număr între 1 şi 31 prin care este codificat tipul semnalului de întrerupere. Cele mai importante semnale sunt: -2 : întrerupere la apăsarea tastei DEL; -9 : oprire necondiţionată; -15 : semnal software de oprire; -16-31 : semnale definite de utilizator. În absenţa specificării unui semnal (ci numai a identificatorului procesului), implicit este considerat semnalul 15.

O altă facilitate a sistemului de operare UNIX privind execuţia comenzilor o constituie lansarea în fundal (eng. background) a proceselor care nu sunt conversaţionale. Pentru a lansa un astfel de proces, linia de comandă trebuie să se încheie cu simbolul "&".

Comanda sleep aşteaptă un număr de secunde înainte de a executa o altă comandă. De exemplu comanda ls poate fi lansată peste 40 de secunde folosind apelul: $ sleep 40; ls & Comenzi informaţionale

O mare parte din comenzile sistemului UNIX afişează şi modifică anumite entităţi. Unele comenzi sunt numai informaţionale. Printre acestea se pot enumera: I.1. ps afişează starea proceselor (descrisă mai sus); I.2. who afişează utilizatorii din sistem; I.3. logname afişează utilizatorul curent; I.4. whodo afişează informaţile despre utilizatori şi procese; I.5. pwd afişează numele catalogului curent; I.6. ls afişează conţinutul unui catalog; I.7. cal tipăreşte calendarul pentru anul specificat; I.8. du afişează numărul de blocuri conţinute în fiecare fişier

şi catalog specificat ca argument; I.9. ipcs tipăreşte informaţii despre structurile active de

comunicare evoluată între procese (cozi de mesaje, semafoare, zone de memorie partajată);

I.10. df afişează numărul de blocuri disc libere şi numărul I-nodurilor libere pentru un anumit sistem de fişiere, sau pentru toate sistemele de fişiere montate;

I.11. file afişează tipul unui fişier specificat (text, executabil, catalog).

Page 64: G Albeanu Arhitectura Sist Calcul

64

Comenzi relative la fişiere şi cataloage

Comenzile UNIX ce acţionează asupra fişierelor şi cataloagelor permit navigarea în sistemul de fişiere (explorarea), copierea, ştergerea, fixarea atributelor, afişarea şi tipărirea fişierelor precum şi o serie de operaţii de căutare, comparare etc. Cele mai importante comenzi din această categorie sunt:

F.1. cat afişează un fişier la ieşirea standard. Dacă sunt

specificate mai multe fişiere, acestea vor fi afişate unul după altul.

F.2. pg afişează paginat un fişier. Afişarea este întreruptă la apăsarea tastei "q".

F.3. more afişează ecran cu ecran fişierele specificate (vezi şi pg);

F.4. cd schimbă catalogul curent; F.5. mkdir creează un nou catalog; F.6. rmdir şterge cataloagele specificate. Acestea trebuie să fie

vide. F.7. rm şterge unul sau mai multe fişiere. Folosind opţiunea -

r se pot şterge şi cataloage ce nu sunt vide. F.8. mv mută sau redenumeşte fişierele şi cataloagele.

Comanda mv acţionează conform următoarelor reguli:

- Dacă sursa este un fişier existent, iar destinaţia este nume de fişier, atunci are loc operaţia de redenumire.

- Dacă sursa este un fişier, iar destinaţia este tot un fişier (existent), atunci fişierul existent este înlocuit cu fişierul sursă.

- Dacă sursa este un catalog, iar destinaţia este un nume, atunci catalogul este redenumit.

- Dacă sursa este un catalog, iar destinaţia este un catalog existent, atunci mută catalogul sursă astfel încât să devină un subcatalog al catalogului existent.

- Dacă sunt specificate unul sau mai multe fişiere în sursă, iar destinaţia este un catalog existent, atunci fişierele sunt mutate în acest catalog.

F.9. cp copiază unul sau mai multe fişiere sursă într-un fişier destinaţie. Dacă destinaţia este numele unui catalog, atunci fişierele sunt copiate în catalogul specificat.

F.10. mount/umount creează o intrare în tabela dispozitivelor (operaţia de montare) sau şterge intrarea din această tabelă

Page 65: G Albeanu Arhitectura Sist Calcul

65

(demontare). Montarea unui dispozitiv într-un catalog nevid, face inaccesibil (pe durata montării) conţinutul acestuia.

F.11. chmod schimbă modul de acces al unuia sau mai multor fişiere. Numai proprietarul unui fişier sau un utilizator privilegiat poate schimba modul de acces.

F.12. chown schimbă proprietarul unuia sau mai multor fişiere. Numai proprietarul curent sau un utilizator privilegiat poate modifica proprietarul unui fişier.

F.13. cmp compară două fişiere; F.14. diff compară două fişiere şi arată modificările care trebuie

efectuate pentru a avea aceeaşi formă; F.15. diffdir afişează diferenţele dintre două cataloage; F.16. find caută unul sau mai multe fişiere care satisfac anumite

criterii Comenzi relative la volume V.1. diskformat iniţializează un disc (disc rigid sau dischetă) şi îl

formatează conform specificaţiilor precizate în linia de comandă;

V.2. badtrk cercetează suprafaţa discului pentru depistarea pistelor defecte;

V.3. divvy divizează o partiţie a discului în mai multe diviziuni;

Alte comenzi C.1. clear şterge ecranul (fereastra terminal); C.2. date tipăreşte şi modifică data curentă; C.3. stty fixează/afişează anumiţi parametri pentru terminalul

curent; C.4. fsck verifică şi repară sistemul de fişiere (catalog /etc).

3.2.3. Iniţiere în utilizarea PC/Windows

În ultimii ani, firma Microsoft a dezvoltat pentru calculatoare personale interfeţe grafice similare sistemului de operare System - MacOS (sisteme de calcul Apple-Macintosh) respectiv interfeţei grafice X-Window System a sistemele de operare UNIX. Spre deosebire de interfeţele: Windows 3.1 şi Windows for Workgroups care asigură funcţii superioare sistemului de operare MSDOS, dar se execută sub sistemul MSDOS, interfeţele Windows dezvoltate după 1995, pot fi considerate sisteme de operare pentru calculatoare personale care oferă însă şi posibiltatea conectării în reţea a acestor calculatoare. WINDOWS NT/2000/XP

Page 66: G Albeanu Arhitectura Sist Calcul

66

sunt sisteme de operare adecvate atât serverelor cât şi staţiilor de lucru dintr-o reţea.

Următoarele noţiuni sunt importante pentru operarea unui software cu interfaţă grafică:

• Pictogramă (eng. icon) - un simbol utilizat pentru a reprezenta grafic scopul şi/sau funcţia unei aplicaţii, catalog sau fişier.

• Fereastră (eng. window)- zonă dreptunghiulară distinctă pe ecran, delimitată de un chenar. O fereastră reprezintă un obiect deschis şi este folosită pentru a afişa informaţii (text, grafică, meniuri etc.). Pot fi deschise mai multe ferestre simultan. O fereastră poate fi închisă (corespunde terminării aplicaţiei care a deschis fereastra), redimensionată sau mutată pe suprafaţa de lucru.

• Suprafaţă de lucru (eng. desktop) - întregul ecran reprezentând zona de lucru. Pictogramele, ferestrele şi bara de operaţii sunt afişate pe suprafaţa de lucru. A se observa că există şi un subcatalog DESKTOP al catalogului WINDOWS.

• Bara de meniuri (eng. menu bar) – bara orizontală conţinând numele meniurilor disponibile.

• Bara de operaţii – bara situată la baza suprafeţei de lucru prestabilite a mediilor de tip Windows. Conţine butonul Start precum şi butoane pentru toate programele şi documentele deschise.

• Bara cu instrumente (eng. toolbar) – bara situată sub bara de meniuri a programelor din Windows, care afişează un set de butoane pentru executarea celor mai uzuale comenzi de meniu. Barele cu instrumente pot fi mutate sau ancorate pe orice latură a ferestrei program.

• Dosar (eng. folder) – container în care sunt stocate pe disc documente, fişiere program şi alte dosare. Sinonim pentru catalog (eng. directory).

• Subdosar – Dosar inclus într-un alt dosar; sinonim pentru subcatalog. Toate dosarele sunt subdosare ale dosarului rădăcină.

• Scurtătură (eng. shortcut) - legătură rapidă către un obiect (fişier, disc etc.). Are asociată o pictogramă specială (o mică săgeată în colţul din stânga-jos).

• Calculatorul meu (eng. My Computer) - program de navigare prin resursele locale ale sistemului de calcul (discuri, imprimante, programe de configurare şi de programare a lansării proceselor).

• Coşul de gunoi (eng. Recycle Bin) - un dosar special care stochează temporar obiectele şterse de utilizator. Dacă obiectele nu au fost şterse permanent atunci se pot reface (eng. restore).

• Reţeaua locală (eng. Network neighborhood sau My Network places) - program ce permite explorarea nodurilor reţelei locale (LAN) din care face parte sistemul.

• Memoria Clipboard - Folosind o parte din memoria RAM, obiectele (fişiere, dosare, text, desene etc.) pot fi mutate dintr-o structură în alta, pot fi multiplicate în cadrul sistemului sau pot fi înlăturate prin

Page 67: G Albeanu Arhitectura Sist Calcul

67

suprascrierea memoriei RAM. Mecanismul este disponibil în oricare program pentru care meniul de editare oferă funcţiile cut (mută conţinutul în memoria clipboard), copy (copiază conţinutul în memoria clipboard) şi paste (copiază conţinutul memoriei clipboard în locul specificat).

Lansarea spre executare a programelor este posibilă prin intermediul comenzii RUN din meniul START, prin activarea aplicaţiei înregistrate în oricare submeniu al meniului START sau prin activarea pictogramei corespunzătoare.

Sistemul de operare Windows 2000/XP dispune de o colecţie bogată de comenzi executabile în mod text. Comenzile interne MS-DOS sunt, în continuare, utilizabile. În plus sunt prezente comenzi precum cele din tabelul următor.

ASSOC afişează / modifică asocierea extensiilor fişierelor AT planifică comenzi şi programe pentru a fi executate mai

târziu CACLS afişează / modifică listele de control privind accesul la

fişiere CHKNTFS afişează / modifică verificarea discului în momentul

încărcării sistemului de operare CMD lansează o nouă instanţă a interpretorului de comenzi COLOR stabileşte culorile implicite ale consolei COMPACT afişează / modifică compresia fişierelor din partiţiile NTFS CONVERT converteşte volume FAT în NTFS. Nu se poate converti

discul curent. SETLOCAL iniţiază localizarea variabilelor de mediu într-un fişier batch ENDLOCAL încheie localizarea variabilelor de mediu dint-un fişier

batch FIND caută un şir de caractere într-un fişier sau o listă de fişiere FINDSTR caută şiruri în fişiere FTYPE afişează / modifică tipurile de fişiere utilizate în lista de

asociere. GRAFTABL permite sistemului de operare să afişeze setul de caractere

extins în mod grafic. PUSHD salvează dosarul curent şi apoi îl modifică POPD reface valoarea anterioară acţiunii PUSHD RECOVER recuperează informaţia text de pe discuri cu defecte REPLACE înlocuieşte fişiere START deschide o nouă fereastră pentru executarea unui program

sau a unei comenzi TITLE stabileşte titlul ferestrei unei sesiuni cmd.exe VERIFY solicită verificarea scrierii corecte a datelor pe disc

Page 68: G Albeanu Arhitectura Sist Calcul

68

3.2.4. Resurse logice privind programarea calculatoarelor

Pentru activitatea de programare sunt utile generatoarele de programe. Acestea transformă programul sursă într-un nou format. Din această categorie fac parte: macrogeneratorul, asamblorul (relocabil, absolut), compilatoarele, interpretoarele, editorul de legături, bibliotecarul, editoarele de texte etc. Macrogeneratorul analizează un text sursă conţinând descrieri într-un limbaj special şi prezintă la ieşire un fişier cu text scris în limbaj de asamblare, care poate fi prelucrat ulterior de asamblorul relocabil sau cel absolut.

De exemplu, folosind TASM (al firmei Borland) se pot asambla programe în format (cod) Intel. Pentru a putea avea portabilitate între sistemele de tip Microsoft şi Linux, pentru procesoare Intel şi compatibile se poate utiliza NASM. Pentru testarea programelor scrise în limbajul MMIXAL, pentru procesorul MMIX, se poate utiliza un simulator40 MMIX. Programul sursă, scris de utilizator în limbaj de (macro)asamblare, este constituit dintr-un număr de linii. Fiecare linie conţine o instrucţiune a limbajului de asamblare sau o directivă de macrogenerare. Rolul macrogeneratorului este de a expanda macroinstrucţiunile existente şi a rezolva, pe cât posibil, blocurile condiţionale. Macrogeneratorul recunoaşte şi analizează:

• directivele de control numeric (tipul bazei de numeraţie), • directivele de terminare (.END), • directivele de asamblare condiţională (.IF, .IFF, .IFT etc.), • directivele de definire a macroinstrucţiunilor (.MACRO, .ENDM), • directivele de control (mesaje de eroare), • directivele de generare şi substituire, • directivele de apelare a macrodefiniţiilor dintr-o bibliotecă etc.

Asamblorul relocabil transformă modulele sursă scrise în limbaj de asamblare într-un modul obiect relocabil, o tabelă de simboluri şi un listing de asamblare. Asamblorul relocabil acceptă la intrare unul sau mai multe fişiere sursă în limbaj de asamblare obţinute folosind macrogeneratorul sau scrise de utilizator. Ieşirile asamblorului constau dintr-un fişier obiect (.obj, .o, .mmo etc.), un fişier de listare (.lst) şi o tabelă de simboluri (.map). Asamblorul absolut transformă modulele scrise în limbaj de asamblare (ieşire a macrogeneratorului sau scrise de utilizatori) într-un program executabil (.tsk, .cmd, .out, etc.)

Compilatoarele efectuează translatarea programului sursă în program obiect relocabil.

Pentru ca un astfel de modul să devină program executabil este necesară editarea legăturilor. Funcţia principală a editorului de legături (eng. Link) este de a

40 Pentru testarea programelor se pot folosi uneltele puse la dispozitie pe pagina grupului de lucru de la FHM: http://www.cs.fhm.edu/~mmix/tools/tools.html

Page 69: G Albeanu Arhitectura Sist Calcul

69

transforma şi înlănţui modulele obiect relocabile rezultate în procesul de asamblare şi/sau compilare pentru a obţine un program executabil acceptabil de programul încărcător al sistemului de operare. În faza de editare a legăturilor pot fi incorporate şi module obiect situate în biblioteci relocabile. Un compilator este structurat în patru componente principale: analizor lexical, analizor sintactic şi semantic, generator de cod şi optimizator. Toate aceste componente gestionează un tabel de simboluri. Analizorul lexical realizează o primă translatare a textului programului sursă într-un şir de entităţi lexicale ce constituie reprezentări interne ale unor categorii sintactice precum: cuvinte cheie, identificatori, constante, delimitatori, operatori etc. Astfel, în fazele următoare se poate lucra cu simboluri de lungime fixă şi cu un număr mai mic de categorii sintactice. Analizorul lexical va completa tabelul de simboluri. Analizorul sintactic şi semantic verifică corectitudinea sintactică a instrucţiunilor şi colectează atributele semantice ale categoriilor sintactice din program. Ieşirea analizorului sintactic şi semantic o constituie o reprezentare codificată a structurii sintactice şi un set de tabele ce conţin atributele semantice ale diferitelor categorii sintactice (simboluri, constante etc.) Generatorul de cod va traduce ieşirea analizorului sintactic şi semantic în format binar relocabil sau în limbaj de asamblare. Optimizatorul are rolul de a prelucra ieşirea generatorului de cod cu scopul de a minimiza memoria necesară la execuţie şi a elimina redundanţele din corpul programului. Unele compilatoare efectuează anumite optimizări înainte de generarea codului. O funcţie importantă a compilatorului constă în detectarea erorilor din programul sursă şi corectarea sau acoperirea lor.

Spre deosebire de compilatoare, interpretoarele şi execută programul odată cu traducerea programului sursă, furnizând la ieşire rezultatele programului. Mai precis, diferenţa faţă de un compilator este aceea că interpretorul nu produce un program obiect ce urmează a fi executat după interpreatare, ci chiar execută acest program. Din punct de vedere structural, un interpretor se aseamănă cu un compilator, dar forma intermediară obţinută nu e folosită la generarea de cod, ci pentru a uşura decodificarea instrucţiunii sursă în vederea executării ei. Este cazul interpretorului sistemului AUTOCAD care analizează linia de comandă şi, dacă comanda este corectă, realizează funcţia solicitată. Un editor de texte este un program on-line (răspunsul imediat la comenzi), ce acceptă comenzi introduse de la terminal pentru a scrie şi/sau şterge caractere, linii sau grupuri de linii din programul sursă sau din orice fişier text. Editoarele de texte pot lucra în mod linie şi/sau mod ecran. Ele pun la dispoziţie comenzi privind deplasarea cursorului în text (pe linie, în cadrul unui bloc sau în cadrul întregului fişier), manipularea blocurilor de text (marcare, deplasare, copiere, ştergere), comenzi de formatare a ieşirii etc. Exemplificăm prin Edit (Ms-DOS, Windows 2000), Notepad (Windows), vi sau emacs (UNIX) etc.

Page 70: G Albeanu Arhitectura Sist Calcul

70

3.3. Exerciţii

1. Se consideră comenzile UNIX (Linux): a. ps e. df b. who f. file c. pwd g. du d. ls h. cal Alegeţi comanda UNIX (LINUX) potrivită pentru: 1. afişarea numărului de blocuri conţinute în fiecare fişier / director specificat ca argument. 2. afişarea informaţiei despre spaţiul liber de pe disc 3. afişarea directorului (folderului, catalogului) curent 4. afişarea stărilor proceselor 5. afişarea utilizatorilor din sistem 6. afişarea conţinutului unui director (folder, catalog) 7. afişarea tipului de fişier specificat (text, aplicaţie, director) 8. afişarea calendarului pentru anul curent. Răspuns: (1, g), (2, e), (3, c), (4, a), (5, b), (6, d), (7, f), (8, h). 2.: Fie comenzile UNIX (Linux): a. cat i. mv b. pg j. mount/unmount c. more k. chmod d. cd l. chown e. mkdir m. cmp f. rmdir n. diff g. rm o. diffdir h. cp p. find Alegeţi comanda UNIX (Linux) potrivită pentru a realiza următoarea acţiune: 9. Caută unul sau mai multe fişiere care satisfac anumite criterii 10. Compară două fişiere 11. Afişează unul sau mai multe fisiere la iesirea standard 12. Copiaza unul sau mai multe fişiere sursă într-un fişier destinaţie 13. Mută sau redenumeşte fişierele şi directoarele (folderele, cataloagele) 14. Şterge unul sau mai multe fişiere 15. Creează un nou director (folder, catalog) 16. Afişează un fişier pagină cu pagină 17. Afişează un fişier ecran cu ecran 18. Schimbă modul de acces al unuia sau mai multor fişiere 19. Creează / Eliberează o intrare în/din tabela dispozitivelor. 20. Şterge directoarele specificate 21. Schimbaă directorul (folderul, catalogul) curent 22. Afişează diferenţele dintre două cataloage 23. Schimbă proprietarul unuia sau mai multor fişiere

Page 71: G Albeanu Arhitectura Sist Calcul

71

24. Compară două fişiere şi arată modificările care trebuie efectuate pentru a avea aceeaşi formă. Răspuns: (9, p), (10, m), (11, a), (12, h), (13, I), (14, g), (15, e), (16, b), (17, c), (18, k), (19, j), (20, f), (21, d), (22, o), (23, l), (24, n). 3. Fie comenzile: a. ASSOC k. FIND b. AT l. FINDSTR c. CACLS m. FTYPE d. CHKNTFS n. GRAFTABL e. CMD o. PUSHD f. COLOR p. POPD g. COMPACT q. RECOVER h. CONVERT r. REPLACE i. SETLOCAL s. START j. ENDLOCAL t. VERIFY Alegeţi comanda Microsoft Windows 2000/XP potrivita care: 25. Solicită verificarea scrierii corecte a datelor pe disc 26. Deschide o fereastră pentru executarea unui program sau a unei comenzi 27. Afişează / Modifică asocierea extensiilor fişierelor 28. Lansează o noua instanţă a interpretorului de comenzi 29. Initiază localizarea variabilelor de mediu într-un fişier batch 30. Recuperează informaţia de pe discuri cu defecte 31. Planifică comenzi şi programe pentru a fi executate mai tarziu 32. Afişează / Modifică verificarea discului în momentul incărcării sistemului de operare 33. Afişează / Modifică compresia fişierelor din partiţiile NTFS 34. Salvează dosarul curent şi apoi îl modifică 35. Afişează / Modifică listele de control privind accesul la fişiere 36. Stabileşte culorile implicite ale consolei 37. Încheie localizarea variabilelor de mediu dintr-un fişier batch 38. Caută şiruri de caractere (ASCII / UNICODE) în fişiere 39. Reface valoarea anterioara acţiunii PUSHD 40. Înlocuieşte fişiere 41. Afişează / Modifică tipurile de fişiere utilizate în lista de asociere 42. Caută un şir de caractere într-un fişier sau o listă de fişiere 43. Permite sistemului de operare să afişeze setul de caractere extins în mod grafic 44. Converteşte volumele FAT în NTFS. Răspuns: (25, t), (26, s), (27, a), (28, e), (29, i), (30, q), (31, b), (32, d), (33, g), (34, o), (35, c), (36, f), (37, j), (38, l), (39, p), (40, r), (41, m), (42, k), (43, n), (44, h). 4. Calitatea imaginii unui display este dată de: a) memorie, b) rezoluţie, c) firma producătoare.

Page 72: G Albeanu Arhitectura Sist Calcul

72

5. Ce reprezintă rezoluţia display-ului? A) numărul de pixeli pe orizontală x numărul de pixeli pe verticală, b) numărul de culori. 6. Unitatea de măsură a ecranului este:

a) MB, b) inch, c) Hz

7. Asociaţi tatele speciale cu funcţia pe care o îndeplinesc: a) ESC (Escape) g) Print screen (PrtSc) m) Internet b) Tab h) Scroll Lock (ScrLk) n)E-mail c) Ctrl (Control), Alt i) Pause d) Caps Lock j) Num Lock (NumLk) e) Backspace k) Win f) Enter l) Application Lista funcţiilor este: 45. Salt la următoarea zonă de tabulare 46. Foloseşte / Comută spre tastaura numerică sau specială 47. Oprirea execuţiei unui program 48. Oprirea defilării ecranului 49. Execută o operaţie 50. Întrerupe acţiunea 51. Sterge caracterul aflat înaintea poziţiei curente 52. Preluarea imaginii ecranului 53. Se folosesc în combinaţie cu alte taste 54. Blocarea tastaturii pe litere mari 55. Simulează butonul drept al mausului 56. Deschide meniul Start 57. Accesează rapid E-mail 58. Accesează rapid Internetul. Răspuns: A se vedea textul. 8. Procesorul are rolul de a: a) stoca informaţiile pe termen lung, b) controla activitatea altor echipamente şi de a prelucra informaţiile, c) executa programele. 9. Memoria ROM este folosită pentru: a) citire, b) scriere, c) citire-scriere. 10. Memoria RAM este folosită pentru: a) citire, b) scriere, c) citire-scriere. 11. Care memorie este mai rapidă: RAM sau ROM? 12. Determinaţi capacitatea de memorie internă a sistemului de calcul pe care lucraţi. 13. La ce se referă termenul de partajare cănd ne creferim la discuri şi imprimante?

Page 73: G Albeanu Arhitectura Sist Calcul

73

14. Cum creaţi o dichetă sistem? În ce cazuri este aceasta utilă? 15.Enumeraţi avantajele şi dezavantajele utilizării CD/DVD-ROM-urilor. 16. Enumeraţi şi descrieţi principalele tipuri de imprimante. Evidenţiaţi principalele avantaje şi dezavantaje ale fiecărui tip. 17. Ce este un modem? Tipuri de modemuri, avantaje şi dezavantaje. 18. Ce principiu are la bază funcţionarea unui scanner? Tipuri de scanner-e, avantaje şi dezavantaje. 19. Deschideţi o fereastră şi identificaţi butoanele pentru: a) închiderea unei ferestre, b) redimensionarea unei ferestre, c) minimizarea unei ferestre. 20. Aflaţi răspunsul la următoarele întrebări: a) Ce este o fereastră grup de aplicaţii? b) Ce sunt ferestrele de dialog? c) Cum se activează o fereastră de dialog? d) Cum se poate activa meniul Start? e) Ce opţiuni avem pentru crearea unui director (folder, catalog)? f) Ce opţiuni avem pentru copierea unui folder sau fişier? g) Ce opţiuni avem pentru mutarea unui folder sau fişier? h) Ce opţiuni avem pentru redenumirea unui folder sau fişier? i) Ce opţiuni avem pentru ştergerea unui folder sau fişier? j) La ce foloseşte o aplicaţie Explorer? 21. Se consideră lista extensiilor: a) EXE b) TXT c) COM d) WAV e) MP3 f) MID g) BMP h) AVI i) XLS j) DBF k) PAS l) CPP m) SYS n) HLP o) GIF p) PPT Alegeţi tipul de fişier corespunzător: 59. fişier text 60. fişier aplicaţie (executabil) 61. fişieri magine bitmap (hartă de pixeli) 62. fişier audio 63. fişier video 64. fişier prezentare realizat folosind Microsoft PowerPoint 65. Fişier sursă C++ 66. Fişier imagine, posibil animată. 67. fişier bază de date 68. fişier registru realizat folosind Microsoft EXCEL 69. fişier sursă Pascal 70. fişier Help

Page 74: G Albeanu Arhitectura Sist Calcul

74

71. fişier cu informaţii pentru sistemul de operare. Răspuns: Consultaţi lista de asocieri implicite: Tools/Folder Options/ File types 22. Care este diferenţa dintre formatarea fizică şi cea logică a discutrilor? 23. Explicaţi necesitata existenţei registrelor procesorului? 24. Asemănări şi diferenţe între componentele unui procesor SISD. 25. Care este legătura între instrucţiunile aritmetice ale unui procesor şi noţiunile teoretice prezentate în primul capitol? 26. Care este diferenţă dintre un terminal serial şi un terminal memorie? 27. Prin ce diferă arhitecturile SISD şi SIMD? 28. Care sunt principalele tipuri de reţele? Explicaţi difereţele dintre acestea. 29. Ce asemănări şi deosebiri există între componentele hardware ale reţelelor locale? 30. Care este diferenţă dintre multiprogramare şi multitasking? 31. Care este diferenţa dintre un driver şi un controler (card sau cuplor)? 32. Asemănări şi diferenţe între sistemele de operare Windows de la Microsoft şi distribuţiile de Linux? 33. Asemănări şi deosebiri relative la arhitecturile MIMD. 34. Asemănări şi deosebiri între arhitecturile RISC şi CISC. 35. Asemănări şi deosebiri între un interpretor şi un compilator. 36. Comparaţie între analizorul lexical şi analizorul sintactic. 37. Descrieţi principalele funcţii ale unui editor de text pentru programatori. 38. Asociaţi tastele speciale de deplasare şi prelucrare a unui text conform funcţiei îndeplinite: a) Insert b) Delete c) Home d) End e) PageUp f) Page Down g) Left Arrow h) Right Arrow i) Up Arrow j) Down Arrow Lista funcţiilor îndeplinite este: 72. deplasare în sus cu un rând 73. deplasare în jos cu un rând 74. deplasare spre stânga cu un caracter 75. deplasare spre dreapta cu un caracter 76. mută cursorul la începutul paginii anterioare 77. mută cursorul la începutul paginii următoare 78. şterge caracterul indicat de către cursor 79. trece în modul de suprascriere şi invers 80. mută cursorul la sfârşitul rândului 81. mută cursorul la inceputul rândului 39. Care este rolul preprocesorului mediilor de programare bazate pe C? 40. Care este diferenţa dintre un limbaj de asamblare şi un limbaj de nivel mediu sau înalt?

Page 75: G Albeanu Arhitectura Sist Calcul

75

4. Calculatorul MMIX41

4.1. Instrucţiunile calculatorului MMIX Procesorul MMIX (arhitecură RISC) a fost propus de D. Knuth42 (1999). Are 264 celule de memorie (a câte un octet), 28 (= 256) registre cu rol general şi 25 (= 32) registre speciale. Fiecare registru stochează 64 de biţi de date.

Celule de memorie sunt notate cu M[0], M[1], ..., M[264-1], registrele generale sunt notate $0, $1, ..., $255, iar registrele speciale (tabelul 4.1) se numesc rA, rB, ..., rZ, rBB, rTT, rWW, rXX, rYY şi rZZ.

Accesul la memorie poate fi realizat la nivel de byte, wyde, tetrabyte şi octabyte (a se revedea secţiunea 1.3), folosind notaţiile M, M2, M4 şi M8: M2[2k] = M2[2k+1] = M[2k]M[2k+1]; M4[4k] = M4[4k+1] = M4[4k+2] =M4[4k+3] = M[4k]M[4k+1]M[4k+2]M[4k+3], respectiv M8[8k] = M8[8k+1] = ... M8[8k+7] = M[8k]M[8k+1] ... M[8k+7], unde k parcurge intervalul discret de la 0 la cea mai mare valoare admisă impusă de indicele folosit (exerciţiu).

Pentru uniformitate convenim să notăm M1[k] = M[k], oricare k în domeniul permis. Dacă k ≥ 264 atunci considerăm M[k] ≡ M[k mod 264]. Fie x o secvenţă de biţi. Notăm prin s(x) întregul cu semn corespunzător secvenţei x, în reprezentarea cu complement faţă de doi. Pentru întregi fără semn, se notează cu u(x) numărul natural corespunzător secvenţei x. Considerăm ca o adresă de memorie A este un întreg fără semn şi se evaluează întotdeauna modula 264. Vom face distincţie între notaţia $k (registrul general cu indexul k) şi numărul natural k. O instrucţiune MMIX este stocată pe 32 de biţi interpretaţi (un tetrabyte), fiecare dintre cei patru bytes având semnificaţie separat sau pe baza unei transformări, în funcţie de operaţia la care se referă. Cei patru bytes sunt denumiţi convenţional: OP (codul operaţiei sau opcode), X, Y, Z (operanzi consideraţi întregi fără semn). Când instrucţiunea are numai doi operanzi, unul este X, iar celălalt este valoarea desemnată de YZ. Când este un singur operand atunci acesta este valoarea desemnată de XYZ. Calculatorul MMIX dispune de următoarele seturi de instrucţiuni:

41 Pentru resurse şi informaţii actualizate verificaţi în mod regulat pagina web a autorului acestui proiect deosebit: http://www-cs-faculty.stanford.edu/~knuth/mmix.html 42 D. Knuth (1999), MMIXware. Lecture Notes in Computer Science, 1750, Springer Verlag.

Page 76: G Albeanu Arhitectura Sist Calcul

76

încărcare şi stocare (tabelul 4.2) operaţii aritmetice (tabelul 4.3) instrucţiuni condiţionale (tabelul 4.4) operaţii la nivel de bit/octet (tabelul

4.5) instrucţiuni imediate (tabelul 4.6) instrucţiuni de salt (tabelul 4.7) operaţii în virgulă mobilă/fixă (tabelul 4.8)

instrucţiuni avansate (tabelul 4.9)

Instrucţiunile de încărcare folosesc mnemonice LoaD cu sau fără semn

pentru bytes, wydes, tetrabytes and octabytes. Când un byte, wyde sau tetrabyte cu semn este convertit într-un octabyte cu semn atunci bitul de semn este extins la toate poziţiile din stânga. Similar, instrucţiunile de stocare folosesc mnemonice Store (tabelul 4.2). Dacă $Y şi $Z sunt utilizaţi în formarea adresei atunci A ← (u($Y) + u($Z)) mod 264. Tabelul 4.1. Registre MMIX speciale

Cod

Nume Descriere Salvabil? Permite scriere?

0 rB Registru Bootstrap pentru devieri (trip: deviere - redirectare către codul utilizatorului)

Da Da

1 rD Registrul de deîmpărţit (folosit de instrucţiunea DIVU, pentru ca deîmpărţitul să fie pe 16 bytes şi împărţitorul pe 8 bytes.)

Da Da

2 rE Registrul epsilon folosit în legătură cu anumite operaţii în virgulă mobilă.

Da Da

3 rH Registrul pentru instrucţiunea MULU: jumătatea superioară a produsului a două valori pe câte 8 bytes este stocată în rH (himult).

Da Da

4 rJ Registrul de revenire (return-jump) utilizat în programarea procedurală.

Da Da

5 rM Registrul Multiplex Mask Da Da 6 rR Registrul Rest (pentru instrucţiunea DIV

care formează atât câtul cât şi restul) Da Da

7 rBB Registrul Bootstrap pentru întreruperi (trap: întrerupere – controlul redirectat către codul sistemului de operare)

Da

8 rC Contor de cicluri (registru ceas) : se incrementează continuu.

9 rN Număr serial (fiecare calculator MMIX are un număr unic)

10 rO Deplasamentul stivei de registre (stack

Page 77: G Albeanu Arhitectura Sist Calcul

77

offset) 11 rS Indicatorul stivei de registre (stack pointer) 12 rI Contor de interval (descreşte şi provoacă

întrerupere când ajunge la zero)

13 rT Registrul de adresă Trap: Trap Address 14 rTT Registrul Dynamic Trap Address 15 rK Registrul Interrupt Mask 16 rQ Registrul Interrupt Request 17 rU Contor de utilizare (se incrementează la

întâlnirea unor coduri specificate)

18 rV Registru de translatare virtuală (utilizat pentru conversia celor 264 adrese virtuale, la adresele locaţiilor fizice ale memoriei instalate).

19 rG Registrul de prag global: Registrul $k este global dacă k ≥ rG. Valoara lui rG este întotdeauna între 32 şi 255 (inclusiv).

Da

20 rL Registrul de prag local (precizează câte registre locale sunt active la un moment dat): Registrul $k este local dacă k < rG. Dacă rL ≤ k < rG atunci registrul $k se numeşte marginal.

Da

21 rA Registrul de stare aritmetică ce evidenţiază următoarele condiţii excepţionale: integer divide check (D), integer overflow (V), float to fix overflow (W), invalid floating operation (I), floating overflow (O), floating underflow (U), floating division by zero (Z) şi floating inexact (X). rA este compus din biţi de eveniment şi biţi de activare.

Da Da

22 rF Registrul Failure Location Da 23 rP Registrul de predicţie Da Da 24 rW registrul Where-Interrupted(trip) Da Da 25 rX Registrul de executare (trip) Da Da 26 rY Registrul operandului Y (trip) Da Da 27 rZ Registrul operandului Z (trip) Da Da 28 rWW Registrul Where Interrupted (trap) Da 29 rXX Registrul de executare (trap) Da 30 rYY Registrul operandului Y (trap) Da 31 rZZ Registrul operandului Z (trap) Da

Page 78: G Albeanu Arhitectura Sist Calcul

78

Tabelul 4.2. Instrucţiuni de încărcare şi stocare

Cod Sintaxa Descriere Registre

speciale utilizate

#80 LDB $X, $Y, $Z

s($X) ← s(M1[A]); cu conversie de la byte la octabyte şi păstrarea valorii.

NU

#84 LDW $X, $Y, $Z

s($X) ← s(M2[A]); cu conversie de la wyde la octabyte şi păstrarea valorii.

NU

#88 LDT $X, $Y, $Z s($X) ← s(M4[A]); cu conversie de la tetra la octabyte şi păstrarea valorii.

NU

#8C LDO $X, $Y, $Z

s($X) ← s(M8[A]); transfer de octabyte. NU

#82 LDBU $X, $Y, $Z

u($X) ← u(M1[A]); cu conversie de la unsigned byte la unsigned octabyte şi păstrarea valorii.

NU

#86 LDWU $X, $Y, $Z

u($X) ← u(M2[A]); cu conversie de la unsigned wyde la unsigned octabyte şi păstrarea valorii.

NU

#8A LDTU $X, $Y, $Z

u($X) ← u(M4[A]); cu conversie de la unsigned tetrabyte la unsigned octabyte şi păstrarea valorii.

NU

#8E LDOU $X, $Y, $Z

u($X) ← u(M8[A]); transfer de unsigned octabyte.

NU

#92 LDHT $X, $Y, $Z

u($X) ← u(M4[A])x232; încarcă tetrabyte-ul superior în jumătatea stângă a lui $X, iar jumătatea dreaptă este ocupată cu zerouri.

NU

#22 LDA $X, $Y, $Z

u($X) ← A; încarcă adresa specificată (a se vedea şi ADDU)

NU

#A0 STB $X, $Y, $Z s(M1[A]) ← s($X); memorează byte. #A4 STW $X, $Y,

$Z s(M2[A]) ← s($X); memorează wyde.

#A8 STT $X, $Y, $Z s(M4[A]) ← s($X); memorează tetrabyte.

#AC STO $X, $Y, $Z s(M8[A]) ← s($X); memorează octabyte.

NU, Posibil depăşire superioară

#A2 STBU $X, $Y, $Z

u(M1[A]) ← u($X) mod 28; memorează unsigned byte.

NU

#A6 STWU $X, $Y, $Z

u(M2[A]) ← u($X) mod 216; memorează unsigned wyde.

NU

#AA STTU $X, $Y, $Z

u(M4[A]) ← u($X) mod 232; memorează unsigned tetrabyte.

NU

Page 79: G Albeanu Arhitectura Sist Calcul

79

#AE STOU $X, $Y, $Z

u(M8[A]) ← u($X); memorează unsigned octabyte.

NU

#B2 STHT $X, $Y, $Z

u(M4[A]) ← [u($X) / 232]; stochează tetrabyte-ul superior.

NU

#B4 STCO X, $Y, $Z

u(M8[A]) ← X; stochează o constantă unsigned byte ca octabyte.

NU

Pentru fiecare instrucţiune din tabelele 4.2, 4.3, 4.4 şi 4.5 există şi varianta

imediat. Dacă sintaxa instrucţiuni, utilizează Z în loc de $Z (adică se specifică

valoare constantă şi nu un registru) atunci se generează instrucţiunea cu codul incrementat (de exemplu: STBI/STTI $X, $Y, Z are asociat codul #A1, respectiv #A9). Instrucţiunea cu codul #22 poate fi decodificată fie ca LDA, fie ca ADDU.

Tabelul 4.3. Operaţii aritmetice Cod Sintaxa Descriere Registre

speciale utilizate43

#20 ADD $X, $Y, $Z s($X) ← s($Y) + s($Z); adunare cu semn

NU

#24 SUB $X, $Y, $Z s($X) ← s($Y) - s($Z); scădere cu semn

NU

#18 MUL $X, $Y, $Z s($X) ← s($Y) * s($Z); înmulţire cu semn

NU

#1C DIV $X, $Y, $Z [s($Z) ≠ 0] - Efectul este: s($X) ← [s($Y) / s($Z)], s(rR) ← s($Y) mod s($Z). [s($Z) = 0] - Efectul este: s($X) ← 0; s(rR) ← s($Y).

rR; rA: poziţionare indicator D, dacă este cazul.

#22 ADDU $X, $Y, $Z u($X) ← (u($Y) + u($Z)) mod 264; adunare fără semn

NU

#26 SUBU $X, $Y, $Z u($X) ← (u($Y) - u($Z)) mod 264; scădere fără semn

NU

#1A MULU $X, $Y, $Z u(rH$X) ← (u($Y) * u($Z)); înmulţire fără semn

rH

#1E DIVU $X, $Y, $Z [u($Z) > u(rD)] – Efectul este: u($X) ← [u(rD$Y) / u($Z)], u(rR) ← u(rD$Y) mod u($Z).

rD, rR

43 Conţinutul registrelor speciale poate fi examinat folosind instrucţiunea GET. Iniţializarea unor registre speciale (cele care permit scrierea) se poate realiza folosind instrucţiunea PUT.

Page 80: G Albeanu Arhitectura Sist Calcul

80

[u($Z) ≤ u(rD)] – Efectul este: u($X) ← u(rD), u(rR) ← u($Y). La începutul oricărui program u(rD) ≡ 0.

#28 2ADDU $X, $Y, $Z u($X) ← (u($Y) x 2 + u($Z)) mod 264; înmulţeşte cu 2 şi adună, fără semn

NU

#2A 4ADDU $X, $Y, $Z u($X) ← (u($Y) x 4 + u($Z)) mod 264; înmulţeşte cu 4 şi adună, fără semn

NU

#2C 8ADDU $X, $Y, $Z u($X) ← (u($Y) x 8 + u($Z)) mod 264; înmulţeşte cu 8 şi adună, fără semn

NU

#2E 16ADDU $X, $Y, $Z

u($X) ← (u($Y) x 16 + u($Z)) mod 264; înmulţeşte cu 16 şi adună, fără semn

NU

#34 NEG $X, Y, $Z s($X) ← Y – s($Z); complementare cu semn

NU

#36 NEGU $X, $Y, $Z u($X) ← (Y – u($Z)) mod 264; complementare fără semn. Dacă Y este zero atunci se scrie prescurtat NEG $X, $Z (respectiv NEGU $X, $Z)

NU

#38 SL $X, $Y, $Z s($X) ← s($Y) x 2u($Z); deplasare la stânga44

NU

#3A SLU $X, $Y, $Z u($X) ← (u($Y) x 2u($Z)) mod 264; deplasare la stânga, fără semn

NU

#3C SR $X, $Y, $Z s($X) ← [s($Y) / 2u($Z)]; deplasare la dreapta45

NU

#3E SRU $X, $Y, $Z u($X) ← [u($Y) / 2u($Z)]; deplasare la dreapta, fără semn.

NU

#30 CMP $X, $Y, $Z s($X) ← [s($Y) > s($Z)] – [s($Y) < s($Z)]; comparare

NU

#32 CMPU $X, $Y, $Z s($X) ← [u($Y) > u($Z)] – [u($Y) < u($Z)]; comparare, fără semn.

NU

44 Notaţia x << n (în limbajele C, C++, Java, etc.) descrie deplasarea valori binare x cu n poziţii la stânga. 45 Notaţia x >> n (în limbajele C, C++, Java, etc.) descrie deplasarea valori binare x cu n poziţii la dreapta.

Page 81: G Albeanu Arhitectura Sist Calcul

81

Tabelul 4.4. Instrucţiuni condiţionale

Cod Sintaxa Descriere Registre speciale utilizate

#60 CSN $X, $Y, $Z Dacă s($Y) < 0 atunci $X ← $Z (copiere condiţionată – strict negativ); altfel efect nul.

NU

#62 CSZ $X, $Y, $Z Dacă s($Y) = 0 atunci $X ← $Z (copiere condiţionată – conţinut nul); altfel efect nul.

NU

#64 CSP $X, $Y, $Z Dacă s($Y) > 0 atunci $X ← $Z (copiere condiţionată – strict pozitiv); altfel efect nul.

NU

#66 CSOD $X, $Y, $Z Dacă s($Y) mod 2 = 1 atunci $X ← $Z (copiere condiţionată – număr impar); altfel efect nul.

NU

#68 CSNN $X, $Y, $Z Dacă s($Y) ≥ 0 atunci $X ← $Z (copiere condiţionată – nenegativ); altfel efect nul.

NU

#6A CSNZ $X, $Y, $Z Dacă s($Y) ≠ 0 atunci $X ← $Z (copiere condiţionată – conţinut nenul); altfel efect nul.

NU

#6C CSNP $X, $Y, $Z Dacă s($Y) ≤ 0 atunci $X ← $Z (copiere condiţionată – negativ sau zero); altfel efect nul.

NU

#6E CSEV $X, $Y, $Z Dacă s($Y) mod 2 = 0 atunci $X ← $Z (copiere condiţionată – număr par); altfel efect nul.

Nu

#70 ZSN $X, $Y, $Z Dacă s($Y) < 0 atunci $X ← $Z (copiere condiţionată – strict negativ); altfel $X ← 0.

NU

#72 ZSZ $X, $Y, $Z Dacă s($Y) = 0 atunci $X ← $Z (copiere condiţionată – conţinut nul); altfel $X ← 0.

NU

#74 ZSP $X, $Y, $Z Dacă s($Y) > 0 atunci $X ← $Z (copiere condiţionată – strict pozitiv); altfel $X ← 0.

NU

#76 ZSOD $X, $Y, $Z Dacă s($Y) mod 2 = 1 atunci $X ← $Z (copiere condiţionată – număr impar); altfel $X ← 0.

NU

#78 ZSNN $X, $Y, $Z Dacă s($Y) ≥ 0 atunci $X ← $Z (copiere condiţionată – nenegativ);

NU

Page 82: G Albeanu Arhitectura Sist Calcul

82

#7A ZSNZ $X, $Y, $Z Dacă s($Y) ≠ 0 atunci $X ← $Z (copiere condiţionată – conţinut nenul); altfel $X ← 0.

NU

#7C ZSNP $X, $Y, $Z Dacă s($Y) ≤ 0 atunci $X ← $Z (copiere condiţionată – negativ sau zero);

NU

#7E ZSEV $X, $Y, $Z Dacă s($Y) mod 2 = 0 atunci $X ← $Z (copiere condiţionată – număr par); altfel $X ← 0.

NU

Conţinutul unui registru este negativ dacă bitul său cel mai din stânga este

1 (bitul de semn) şi este impar dacă bitul său cel mai din dreapta este 1. Mnemonicele care au C ca prim caracter modifică conţinutul registrului $X

prin copiere numai dacă este îndeplinită condiţia, iar cel care au Z ca prefix modifică întotdeauna conţinutul (fie prin copiere, fie prin iniţializare cu zero).

Operaţiile la nivel de bit/octet au numeroase aplicaţii şi presupun organizarea şirului de biţi ca un tablou liniar/bidimensional a câte 64 de componente. În cazul bidimensional este vorba de o matrice booleana 8x8, cu liniile de sus în jos reprezentând octeţii şirului de biţi de la stânga la dreapta.

Dacă operaţiile la nivel de bit sunt utile în analiza semnalelor, realizarea sistemelor de operare etc., operaţiile la nivel de octet pot fi întâlnite în procesarea textelor şi grafica pe calculator, pentru a menţiona doar câteva domenii.

Dacă x şi y sunt valori de tip byte/wyde/tetrabyte sau octabyte, notăm prin xTy = max(0, x-y)

diferenţa saturată dintre x şi y. La nivel de bit vor fi folosite notaţiile and, or, xor şi not utilizate asupra algebrei Boole B = ({0, 1}, or, and, not).

Dacă x este un octabyte atunci v(x) reprezintă tabloul unidimensional cu biţii lui x, b(x) tabloul unidimensional cu datele de tip byte, w(x) tabloul unidimensional cu datele de tip wyde, t(x) tabloul unidimensional cu datele de tip tetrabyte, o(x) valoarea de tip octabyte, m(x) reprezintă matricea formată cu biţii lui x, iar mT(x) este transpusa matricei m(x).

Operaţiile mor şi mxor între matricele booleene A = (aij)1≤i≤m,1≤j≤n şi B = (bjk)1≤j≤n,1≤k≤p conduc la matricele C = A mor B şi D = A mxor B, cu elemente

cik = (ai1 and b1k) or (ai2 and b2k) or ... or ( ain and bnk), respectiv

dik = (ai1 and b1k) xor (ai2 and b2k) xor ... xor ( ain and bnk), unde 1 ≤ i ≤ m şi 1 ≤ k ≤ p.

Toate instrucţiunile descrise mai jos admit şi forma simplificată în care în loc de $Z se foloseşte Z.

Tabelul 4.6 prezintă instrucţiunile ce utilizează constante imediate, dar pentru care unul dintre operanzi este de forma YZ.

Page 83: G Albeanu Arhitectura Sist Calcul

83

Tabelul 4.5. Operaţii la nivel de bit/octet/wyde/tetrabyte/octabyte/matrice

Cod Sintaxa Descriere Registre speciale utilizate

#C8 AND $X, $Y, $Z v($X) ← v($Y) and v($Z); ŞI bit cu bit

NU

#C0 OR $X, $Y, $Z v($X) ← v($Y) or v($Z); SAU bit cu bit

NU

#C6 XOR $X, $Y, $Z v($X) ← v($Y) xor v($Z); SAU exclusiv bit cu bit

NU

#CA ANDN $X, $Y, $Z v($X) ← v($Y) and not v($Z); ŞI cu negaţie bit cu bit

NU

#C2 ORN $X, $Y, $Z v($X) ← v($Y) or not v($Z); SAU cu negaţie bit cu bit

NU

#CC NAND $X, $Y, $Z v($X) ← not (v($Y) and v($Z)); Negaţie - ŞI bit cu bit

NU

#C4 NOR $X, $Y, $Z v($X) ← not (v($Y) or v($Z)); Negaţie -SAU bit cu bit

NU

#CE NXOR $X, $Y, $Z v($X) ← not (v($Y) xor v($Z)); Negaţie – SAU exclusiv bit cu bit

NU

#D8 MUX $X, $Y, $Z v($X) ← (v($Y) and v(rM)) or (v($Z) and not v(rM)); multiplexare – se aleg biţii din $Y sau din $Z în funcţie de valoarea 1 sau 0 a bitului corespunzător din rM.

rM

#DA SADD $X, $Y, $Z s($X) ← s(Σ(v($Y) and not v($Z))); numărul de poziţii pe care $Y are valoarea 1 în timp ce $Z are valoarea 0.

NU

#D0 BDIF $X, $Y, $Z b($X) ← b($Y) T b($Z); diferenţa saturată la nivel de byte

NU

#D2 WDIF $X, $Y, $Z w($X) ← w($Y) T w($Z); diferenţa saturată la nivel de wyde

NU

#D4 TDIF $X, $Y, $Z t($X) ← t($Y) T t($Z); diferenţa saturată la nivel de tetrabyte

NU

#D6 ODIF $X, $Y, $Z o($X) ← o($Y) T o($Z); diferenţa saturată la nivel de octabyte

NU

#DC MOR $X, $Y, $Z m($X) ← m($Y) mor m($Z) NU #DE MXOR $X, $Y, $Z m($X) ← m($Y) mxor m($Z) NU

Page 84: G Albeanu Arhitectura Sist Calcul

84

Tabelul 4.6. Instrucţiuni imediate YZ Cod Sintaxa Descriere Registre

speciale utilizate

#E0 SETH $X, YZ u($X) ← YZ x 248 NU #E1 SETMH $X, YZ u($X) ← YZ x 232 NU #E2 SETML $X, YZ u($X) ← YZ x 216 NU #E3 SETL $X, YZ u($X) ← YZ NU #E4 INCH $X, YZ u($X) ← (u($X) + YZ x 248) mod 264 NU #E5 INCMH $X, YZ u($X) ← (u($X) + YZ x 232) mod 264 NU #E6 INCML $X, YZ u($X) ← (u($X) + YZ x 216) mod 264 NU #E7 INCL $X, YZ u($X) ← (u($X) + YZ) mod 264 NU #E9 ORH $X, YZ v($X) ← v($X) or v(YZ << 48) NU #E9 ORMH $X, YZ v($X) ← v($X) or v(YZ << 32) NU #EA ORML $X, YZ v($X) ← v($X) or v(YZ << 16) NU #EB ORL $X, YZ v($X) ← v($X) or v(YZ) NU #EC ANDNH $X, YZ v($X) ← v($X) and not v(YZ <<

48) NU

#ED ANDNMH $X, YZ v($X) ← v($X) and not v(YZ << 32)

NU

#EE ANDNML $X, YZ v($X) ← v($X) and not v(YZ << 16)

NU

#EF ANDNL $X, YZ v($X) ← v($X) and not v(YZ ) NU

Tabelul 4.7. Instrucţiuni de salt / ramificare Cod Sintaxa Descriere Registre

speciale utilizate

#F0 JMP AR Salt la adresa @ + 4XYZ; aici adresa relativă se formează cu 3 octeţi: @ ← AR

NU

#9E GO $X, $Y, $Z A = (u($Y) + u($Z)) mod 264; u($X) ← @ + 4; @ ← A

NU

#40 BN $X, AR Dacă s($X) < 0 atunci @ ← AR NU #42 BZ $X, AR Dacă s($X) = 0 atunci @ ← AR NU #44 BP $X, AR Dacă s($X) > 0 atunci @ ← AR NU #46 BOD $X, AR Dacă s($X) mod 2 = 1 atunci @ ←

AR NU

#48 BNN $X, AR Dacă s($X) ≥ 0 atunci @ ← AR NU #4A BNZ $X, AR Dacă s($X) ≠ 0 atunci @ ← AR NU

Page 85: G Albeanu Arhitectura Sist Calcul

85

#4C BNP $X, AR Dacă s($X) ≤ 0 atunci @ ← AR NU #4E BEV $X, AR Dacă s($X) mod 2 = 0 atunci @ ←

AR NU

#50 PBN $X, AR Dacă s($X) < 0 atunci @ ← AR NU #52 PBZ $X, AR Dacă s($X) = 0 atunci @ ← AR NU #54 PBP $X, AR Dacă s($X) > 0 atunci @ ← AR NU #56 PBOD $X, AR Dacă s($X) mod 2 = 1 atunci @ ←

AR NU

#58 PBNN $X, AR Dacă s($X) ≥ 0 atunci @ ← AR NU #5A PBNZ $X, AR Dacă s($X) ≠ 0 atunci @ ← AR NU #5C PBNP $X, AR Dacă s($X) ≤ 0 atunci @ ← AR NU #5E PBEV $X, AR Dacă s($X) mod 2 = 0 atunci @ ←

AR NU

Deoarece pentru a rezolva probleme cu ajutorul calculatorului este nevoie

de înlănţuirea etapelor de rezolvare, de ramificarea fluxului în funcţie de anumite evenimente şi de repetarea unor secvenţe de operaţii, orice procesor trebuie să dispună de mecanisme de direcţionare a controlului.

Tabelul 4.7 descrie instrucţiunile de salt şi ramificare puse la dispoziţie de procesorul MMIX. Acestea constituie baza oricărei structuri de nivel înalt de tip if, while, etc.

Pentru instrucţiunile BN, BZ, BP, BOD, BNN, BNZ, BNP, BEV şi variantele de tip probabilist (prefixate prin P), adresa relativă AR se formează numai cu doi octeţi. Spunem că astfel de salturi sunt la mică distanţă de punctul curent, spre deoebire de JMP a cărui adresă relativă de salt este formată cu ajutorul a trei octeţi.

Se recomandă utilizarea ramificărilor de tip probabilist ori de câte ori programatorul ştie că probabilitatea apariţiei unei ramificări depăşeste 0.5. Aceasta corespunde tendinţei actuale de proiectare a procesoarelor care pot anticipa salturile. Instrucţiunea GO are şi varianta de tip imediat, iar celelalte instrucţiuni pot executa saltul şi înapoi (având sufixul B şi codul incrementat).

Operaţiile în virgulă mobilă se bazează pe principiile prezentate în secţiunea 1.4.

MMIX permite şi reprezentarea în virgulă mobilă, în format scurt, cu 32 de biţi, dintre care 8 pentru obţinerea exponentului şi 23 de biţi pentru mantisă. Reprezentarea numerelor cu virgulă fixă presupune o poziţie fixă a virgulei. MMIX dispune de instrucţiuni de conversie între reprezentările "virgulă fixă" şi "virgulă mobilă scurtă."

Page 86: G Albeanu Arhitectura Sist Calcul

86

Tabelul 4.8. Instrucţiuni MMIX folosind reprezentarea IEEE 754 Cod Sintaxa Descriere Registre

speciale utilizate

#04 FADD $X, $Y, $Z f($X) ← f($Y) + f($Z) NU #06 FSUB $X, $Y, $Z f($X) ← f($Y) - f($Z) NU #10 FMUL $X, $Y, $Z f($X) ← f($Y) * f($Z) NU #14 FDIV $X, $Y, $Z f($X) ← f($Y) / f($Z) NU #16 FREM $X, $Y, $Z f($X) ← f($Y) rem f($Z); y rem z = y-nz,

n fiind cel mai apropiat întreg de y/z. NU

#01 FCMP $X, $Y, $Z s($X) ← [f($Y)>f($Z)] – [f($Y)<f($Z)]; comparare în virgulă mobilă

NU

#11 FCMPE $X, $Y, $Z s($X)←[f($Y)>f($Z)(f(rE))]–[f($Y)<f($Z)(f(rE))]; comparare în virgulă mobilă în raport cu epsilon

rE

#03 FEQL $X, $Y, $Z s($X) ← [f($Y) = f($Z)] NU #13 FEQLE $X, $Y, $Z s($X) ← [f($Y) = f($Z)(f(rE))];

egalitate în virgulă mobilă în raport cu epsilon

rE

#02 FUN $X, $Y, $Z s($X) ← [f($Y) || f($Z)]; neordonare în virgulă mobilă; este adevărat când unul dintre operanzi este NaN.

NU

#12 FUNE $X, $Y, $Z s($X) ← [f($Y) || f($Z)(f(rE))]; neordonare în virgulă mobilă în raport cu epsilon

rE

#15 FSQRT $X, Y, $Z f($X) ← f($Z)1/2 NU #17 FINT $X, Y, $Z f($X) ← int(f($Z)) NU #05 FIX $X, Y, $Z s($X) ← int(f($Z)); NU #07 FIXU $X, Y, $Z u($X) ← (int(f($Z))) mod 264; NU #08 FLOT [I]$X, Y, $Z f($X) ← s($Z); NU #0A FLOTU[I] $X, Y,

$Z f($X) ← u($Z); NU

#0C SFLOT[I] $X, Y, $Z

f($X) ← f(T) ← s($Z); T este un tetrabyte extra

NU

#0E SFLOTU[I] $X, Y, $Z

f($X) ← f(T) ← u($Z); NU

#90 LDSF[I] $X, $Y, $Z

f($X) ← f(M4[A]); încarcă virgulă mobilă scurtă

NU

#B0 STSF[I] $X, $Y, $Z f(M4[A]) ← f($X); memorează virgulă mobilă scurtă

NU

Page 87: G Albeanu Arhitectura Sist Calcul

87

Tabelul 4.9. Instrucţiuni avansate Cod Sintaxa Descriere Registre

speciale utilizate

#F2 PUSHJ[B] $X, AR push(X); rJ ← @ +4; @ ← AR rJ, rO, rS #BE PUSHGO[I] $X, $Y,

$Z push(X); rJ ← @ +4; @ ← A rJ, rO, rS

#F8 POP X, YZ pop(X); @ ← rJ + 4*YZ rJ, rO, rS #FB SAVE $X, 0 u($X) ← context (salvarea

registrelor curente în stiva de registre) Contextul este compus din registrele locale, registrele globale şi registrele speciale. $X este un registru global.

Sunt salvate; rL ← 0.

#FA UNSAVE $Z context ← u($Z); refacere contex Sunt citite

#FF TRIP X, Y, Z TRIP X, YZ TRIP XYZ

Conform algoritmului de tratare a devierilor

rB, rW, rX, rY, rZ, rJ

#00 TRAP X, Y, Z TRAP X, YZ TRAP XYZ

Conform algoritmului de tratare a întreruperilor

rBB, rWW, rXX, rYY, rZZ, rT, rK, rQ

#F9 RESUME 0 Reluare după întrerupere rW, rX #FE GET $X, Z u($X) ← u(g[Z]); 0 ≤ Z < 32 (codul

registrului special); g[Z] este registrul având codul Z

g[Z]

#F6 PUT[I] X, $Z u(g[X]) ← u($Z); depunere în registrul special g[X]

g[X]

#F4 GETA[B] $X, AR u($X) ← AR; încarcă adresă relativă NU #96 LDUNC[I] $X, $Y,

$Z s($X) ← s(M8[A]); încarcă octabyte fără depunere în memoria cache

NU

#B6 STUNC[I] $X, $Y, $Z

s(M8[A]) ← s($X); stocare octabyte fără depunere în memoria cache

NU

#9A PRELD[I] X, $Y, $Z Probabil, octeţii de la M[A] la M[A+X] vor fi încărcaţi sau stocaţi în viitorul apropiat

NU

#BA PREST[I] X, $Y, $Z Sigur, octeţii de la M[A] la M[A+X] vor fi încărcaţi (scrişi) înainte de citirea următoare

NU

#9C PREGO[I] X, $Y, $Z Probabil, octeţii de la M[A] la NU

Page 88: G Albeanu Arhitectura Sist Calcul

88

M[A+X] vor fi utilizaţi ca instrucţiuni în viitorul apropiat

#BC SYNCID[I] X, $Y, $Z

Octeţii de la M[A] la M[A+X] trebuie regăsiţi înainte de a fi interpretaţi ca instrucţiuni

NU

#B8 SYNCD[I] X, $Y, $Z Octeţii de la M[A] la M[A+X] trebuie să fie actualizaţi în RAM înainte de a fi citiţi de alte calculatoare sau dispozitive periferice

NU

#FC SYNC XYZ Sincronizare în vederea cooperării fiabile în procesarea paralelă

NU

#94 CSWAP[I] $X, $Y, $Z

Dacă u(M8[A]) = u(rP) atunci u(M8[A]) ← u($X) şi u($X) ← 1, altfel u(M8[A]) ← u(rP) şi u($X) ← 0; operaţie indivizibilă

rP

#98 LDVTS[I] $X, $Y, $Z

încarcă starea translatării virtuale (se aplică doar sistemului de operare)

rV

#FD SWYM X, Y, Z SWYM X, YZ SWYM XYZ

Nu efectuează nici o operaţie (NOP); octeţii X, Y, Z sunt ignoraţi

NU

În categoria instrucţiunilor avansate includem instrucţiunile pentru apel de

subrutine (proceduri / funcţii), instrucţiunile pentru tratarea întreruperilor (eng. traps) şi devierilor (eng. trips), instrucţiunile relative la registrele speciale precum şi instrucţiunile pentru procesare ultrarapidă. Instrucţiunile din tabelele de mai sus având sufixul [I] admit şi modul imediat, iar cele cu sufixul [B] specifică modul de operare back.

4.2. Programarea calculatorului MMIX Programele sursă MMIX (fişier text cu extensia .mms) constituite din declaraţii şi instrucţiuni, trebuie asamblate folosind programul mmixal care produce un fişier obiect (cu extensia .mmo). Interpretarea codului obiect se va realiza folosind simulatorul MMIX.

Programul poate admite argumente în linia de comandă (similar limbajelor C, C++, Java), numărul argumentelor se va stoca în $0, iar adresa de început a şirului de argumente (primul fiind numele programlui) este plasată în $1. Instrucţiunile unui program MMIX încep întotdeauna de la locaţia simbolică Main.

Programele MMIX conţin simboluri (secvenţe de litere şi cifre care încep obligatoriu cu literă), constante (zecimale – baza 10, hexazecimale – baza 16 – încep cu #), caracter (între apostrofuri), şiruri de caractere încadrate de ghilimele), expresii şi instrucţiuni. Unele simboluri sunt predefinite. Există elemente primare

Page 89: G Albeanu Arhitectura Sist Calcul

89

(simboluri, constante, @, expresie încadrată de paranteze, operator unar urmat de element primar) şi termeni (unul sau mai multe elemente primare separate prin operatori binari puternici: *, /, //, %, <<m >>, &).

Expresiile sunt formate cu operatori binari slabi: +, -, |, ^. O instrucţiune are trei câmpuri: zona etichetei (spaţiu sau simbol), zona

operaţiei OP (conform tabelelor de mai sus, sau o pseudo-operaţie MMIXAL), zona expresilor (separate prin virgulă) şi eventual zona comentariu. Comentariile de tip linie încep cu %, ; sau //, iar cele de tip bloc sunt delimitate de /* şi */.

Exemplul 4.1. Programul de mai jos afişează la mediul de ieşire (StdOut) mesajul compus dintr-un şir introdus în linia de comandă, spaţiu, şi BRAVO. Observaţi că #a este caracterul ASCII de trecere la linie nouă, iar #0 este terminatorul de şir.

argv IS $1 LOC #100

Main LDOU $255,argv, 0 //Incarcă octa TRAP 0, Fputs, StdOut //fara semn si TRAP GETA $255, String TRAP 0, Fputs, StdOut TRAP 0, Halt,0

String BYTE " BRAVO", #a, 0

Procesul de asamblare decurge în trei paşi astfel: locaţia curentă este aliniată la multiplu de 8 (OP = OCTA), 4 (OP = TETRA sau operaţie MMIX), 2 (OP =WYDE); se defineşte simbolul @ ca fiind eticheta, în afara cazului în care OP = IS sau OP = GREG. Dacă OP este o operaţie MMIX atunci zona operaţie şi zona expresie definesc un tetrabyte, iar @ este incrementat cu 4. Daca OP este o pseudo-operaţie MMIXAL atunci se analizează operaţia şi se realizează următoarele acţiuni: a) Dacă OP = IS atunci simbolul din zona etichetei devine echivalent cu valoarea unicei expresii prezente în zona expresiilor. b) Daca OP = LOC atunci locaţia curentă @ devine valoarea unicei expresii, care trebuie să aibă o valoare pură. c) Dacă OP = BYTE, WYDE, TETRA sau OCTA, atunci în zona expresiilor sunt prezente mai multe expresii stocabile pe 1, 2, 4 sau 8 octeţi începând cu adresa indicată simbolic în zona etichetei. d) Daca OP = GREG, atunci unica expresie evaluată la o valoare pură x se atribuie acelui registru global (în mod read only) al cărui cel mai mare număr nealocat încă este asociat simbolului din zona etichetă. Un comportament important al oricărui asamblor este cel relativ la operaţiile de intrare-ieşire. Dacă considerăm stilul limbajului C pentru operaţiile Fopen, Fclose, Fread, Fgets (extins şi la Fgetws), Fwrite, Fputs (extins şi la Fputws), Fseek, şi Ftell, aceste pot fi simulate conform tabelului 4.10. Relativ la operaţiile de intrare-ieşire, următoarele simboluri sunt predefinite în MMIXAL: Fopen = 1, Fclose = 2, Fread = 3, Fgets = 4, Fgetws = 5, Fwrite = 6, Fputs = 7, Fputws = 8, Fseek = 9, Ftell = 10, TextRead = 0, TextWrite = 1, BinaryRead = 2, BinaryWrite = 3, BinaryReadWrite = 4.

Page 90: G Albeanu Arhitectura Sist Calcul

90

Tabelul 4.10. Operaţii de intrare-ieşire Funcţia Mod de simulare (efect) Fopen (pointer, nume, mod) LDA $255, Arg; Trap 0, Fopen,

<pointer>, unde ARG este o secvenţă de doi octabytes: Arg OCTA <nume>, <mod>

Fclose (pointer) TRAP 0, Fclose, <pointer> Fread (pointer, buffer, dimensiune) LDA $255, Arg; TRAP 0, Fread,

<pointer> cu doi octabytes pentru celelalte argumente: Arg OCTA <buffer>, <dimensiune>

Fgets (pointer, buffer, dimensiune) Pointer-ul de fişier trebuie deschis cu unul din modurile TextRead, BinaryRead, BinaryReadWrite. LDA $255, Arg; TRAP 0, Fgets, <pointer> cu doi octabytes pentru celelalte argumente: Arg OCTA <buffer>, <dimensiune>

Fgetws (pointer, buffer, dimensiune) Se aplică pentru tipul wyde: LDA $255, Arg; TRAP 0, Fgetws, <pointer> cu doi octabytes pentru celelalte argumente: Arg OCTA <buffer>, <dimensiune>

Fwrite (pointer, buffer, dimensiune) Pointer-ul de fişier trebuie deschis cu unul din modurile TextWrite, BinaryWrite, BinaryReadWrite. LDA $255, Arg; TRAP 0, Fwrite, <pointer> cu doi octabytes pentru celelalte argumente: Arg OCTA <buffer>, <dimensiune>

Fputs (pointer, şir) LDA $255, şir; TRAP 0, Fputs, <pointer>

Fputws (pointer, şir) LDA $255, şir; TRAP 0, Fputws, <pointer> (se aplică pentru tipul wyde)

Fseek (pointer, deplasament) Pointer-ul de fişier trebuie deschis cu unul din modurile BinaryRead, BinaryWrite, BinaryReadWrite. Are loc poziţionarea indicatorului de articol. LDA $255, <deplasament>; TRAP 0, Fseek, <pointer>

Ftell (pointer) Returnează poziţia curentă în fişier. TRAP 0, Ftell, <pointer>

Page 91: G Albeanu Arhitectura Sist Calcul

Exemplul 4.2. Un experiment asupra şirului Fibonacci poate fi realizat folosind programul:

Termenii şirului Fibonacci sunt:

sp GREG fp GREG n GREG 0, 1, 1, 2, 3, 5, 8, 13, 21,

34, 55, 89 etc. fn IS n

LOC #100 GREG @

Fib CMP $1,n,2 Termenul de rang n este suma termenilor de rang n-1 şi n-2.

PBN $1,1F STO fp,sp,0 SET fp,sp

INCL sp,8*4 STO $0,fp,8 f0 = 0; f1 = 1; STO n,fp,16 fn = fn-1 + fn-2.SUB n,n,1 GO $0,Fib STO fn,fp,24 // F[n-1] LDO n,fp,16 SUB n,n,2 GO $0,Fib LDO $0,fp,24 ADDU fn,fn,$0 LDO $0,fp,8 SET sp,fp LDO fp,sp,0

1H GO $0,$0,0 Main SETH sp,Data_Segment>>48

SET n,5 GO $0,Fib

Presupunem că textul de mai sus este introdus folosind un editor de texte

(de exemplu Edit sau NotePad) şi este salvat sub forma fibo.mms. Prin comanda: mmixal -l fibo.lst -o fibo.mmo fibo.mms

se vor crea fişierele: fibo.lst (list-ing) şi fibo.mmo (fişierul obiect). Fişierul fibo.lst are următorul conţinut (cititorul este invitat să observe

codurile instrucţiunilor şi modul cum este asamblat programul): ($254) sp GREG ($253) fp GREG ($252) n GREG ($252) fn IS n LOC #100 ($251=#00000000 GREG @ 00000100) ...100: 3101fc02 Fib CMP $1,n,2 ...104: 5001xxxx PBN $1,1F ...108: adfdfe00 STO fp,sp,0 ...10c: c1fdfe00 SET fp,sp ...110: e7fe0020 INCL sp,8*4 ...114: ad00fd08 STO $0,fp,8 ...118: adfcfd10 STO n,fp,16 ...11c: 25fcfc01 SUB n,n,1

91

Page 92: G Albeanu Arhitectura Sist Calcul

92

...120: 9f00fb00 GO $0,Fib ...124: adfcfd18 STO fn,fp,24 // F[n-1] ...128: 8dfcfd10 LDO n,fp,16 ...12c: 25fcfc02 SUB n,n,2 ...130: 9f00fb00 GO $0,Fib ...134: 8d00fd18 LDO $0,fp,24 ...138: 22fcfc00 ADDU fn,fn,$0 ...13c: 8d00fd08 LDO $0,fp,8 ...140: c1fefd00 SET sp,fp ...144: 8dfdfe00 LDO fp,sp,0 ...148: 9f000000 1H GO $0,$0,0 ...14c: e0fe2000 Main SETH sp,Data_Segment>>48 ...150: e3fc0005 SET n,5 ...154: 9f00fb00 GO $0,Fib Symbol table: Fib = #0000000000000100 (6) Main = #000000000000014c (1) fn = $252 (5) fp = $253 (3) n = $252 (4) sp = $254 (2)

Fişierul fibo.mmo va fi transmis simulatorului mmix prin comanda: mmix <opţiuni> fibo

unde opţiunile descriu modul delucru permis. Câteva opţiuni sunt: -t, respective -e pentru executarea instrucţiunii de un număr de ori sau întâlnirea unei excepţii, -l pentru listarea liniilor sursă în timpul executării instrucţiunilor, -s pentru furnizarea de statistici, -q pentru oprire, -i pentru a intra în mod interactiv, -f pentru a specifica fişierul utilizat pentru a simula introducerea datelor şi -D pentru a produce un fişier utilizabil de către alte simulatoare. Lansarea în mod interactiv a simulatorului asupra fişierului fibo.mmo (extensia nu este obligatorie) şi executarea pas cu pas a câtorva instrucţiuni produce ieşirea: >mmix -i fibo mmix> (0000000000000148: fb0000ff (UNSAVE)) #60000000000000a0: rG=251, ..., rL=2 0 instructions, 0 mems, 0 oops; 0 good guesses, 0 bad (now at location #000000000000014c) mmix> 1. 000000000000014c: e0fe2000 (SETH) $254=g[254] = #2000000000000000 1 instruction, 0 mems, 1 oop; 0 good guesses, 0 bad (now at location #0000000000000150) mmix> 1. 0000000000000150: e3fc0005 (SETL) $252=g[252] = #5 2 instructions, 0 mems, 2 oops; 0 good guesses, 0 bad (now at location #0000000000000154) mmix> 1. 0000000000000154: 9f00fb00 (GOI) $0=l[0] = #158, -> #100 3 instructions, 0 mems, 5 oops; 0 good guesses, 0 bad (now at location #0000000000000100)

Page 93: G Albeanu Arhitectura Sist Calcul

93

4.3. Exerciţii

1. Scrieţi programe MMIX pentru:

• Calculul sumei primelor 100 de numere naturale. • Calculul sumei a n numere întregi, stocate începând cu adresa ST. • Ordonarea crescătoare a unui şir de numere întregi stocate începând cu

adresa ST.. • Stabilirea celui mai mare element dintr-un şir de numere întregi stocat

începând cu adresa ST. • Calculul produsului primelor N numere naturale nenule, N fiind dat. • Cautarea unui număr întreg într-un şir ordonat/neordonat folosind

algoritmul căutării binare/liniare. 2. Folosind descrierile de mai sus, prin analiza pas cu pas, stabiliţi ce realizează următorul program MMIX46?

A IS $0 B IS $1 n IS $2 C IS $3 i IS $4 tt IS $5 j IS $6 ax IS $7 bx IS $8 cx IS $9 t IS $255 LOC #200 Main SRU n,n,6 SET tt,n SLU tt,tt,3 ADDU tt,C,tt SET t,1 SET i,0 S CMP t,i,n BZ t,1F SLU j,i,3 LDO ax,A,j LDO bx,B,j AND cx,ax,bx STO cx,C,j XOR cx,ax,bx STO cx,tt,j INCL i,1 JMP S 1H TRAP 0,Halt,0

46 Ivonne Mehlfeld, S. Mehlfeld, FAUXPAS 3000, http://www.fauxpas3000.de/Kontakt.html

Page 94: G Albeanu Arhitectura Sist Calcul

94

3. Să se verifice dacă un şir de caractere este palindrom (se citeşte la fel prin parcurgerea de la stânga spre dreapta şi retur.) Răspuns: Programul de mai jos verifică dacă la adresa String se află, sau nu, stocat un palindrom.

s IS $0 t IS $255 poz IS $2 test IS $5 R IS $3 Q IS $4 LOC Data_Segment GREG @ String BYTE "COJOC",0 %String BYTE "ELENESEDUCCUDESENELE", 0 %String BYTE "ROTITOR", 0 %String BYTE "AUONAVANOUA", 0 %String BYTE "PUPUPUP", 0 %String BYTE "ETALATE", 0 %String BYTE "ENEPURTAPATRUPENE", 0 LOC #200 LDA s,String Main LDBU t,s BZ t,sf2 SET poz,s 1H LDBU t,poz BZ t,2F INCL poz,1 JMP 1B 2H SUB poz,poz,1 3H CMP t,s,poz BNN t,sf2 LDBU R,s LDBU Q,poz CMP test,Q,R BNZ test,sf ADD s,s,1 SUB poz,poz,1 JMP 3B sf SET $0,0 JMP fin sf2 SET $0,1 JMP fin Fin TRAP 0,Halt,0

Page 95: G Albeanu Arhitectura Sist Calcul

95

Bibliografie

1. G. Albeanu, Sisteme de operare, Editura Petrion, Bucureşti, 1996. 2. G. Albeanu, Algoritmi şi limbaje de programare, Editura Fundaţiei România

de Mâine, Bucureşti, 2000 (capitolul 2). 3. G. Albeanu, Programarea şi utilizarea calculatoarelor, Editura Universităţii

din Oradea, Oradea, 2003 (capitolul 1). 4. DEX’1996, Dicţionarul explicativ al limbii române, Editura Univers

Enciclopedic, Bucureşti, 1996. 5. DINF’1981, Dicţionar de informatică, Editura Ştiinţifică şi Enciclopedică,

Bucureşti, 1981. 6. J. Henessy & D. Patterson, Computer Architecture: A Quantative Approach,

Morgan Kaufman, 2002. 7. D. Knuth, Arta programării calculatoarelor, Vol. I, Editura Teora, 1999. 8. D. Knuth, Arta programării calculatoarelor: MMIX – un calculator RISC

pentru noul mileniu, Editura Teora, 2005. Se recomandă versiunea în limba engleză: D. E. Knuth: The art of Computer programming. Fascicle 1: MMIX, Addison-Wesley, Zeroth printing (revision 15), 2004.

9. D. Knuth, MMIXware. Lecture Notes in Computer Science, Vol. 1750, Springer Verlag, 1999.

10. C.P. Popovici, S. Rudeanu, H. Georgescu, Bazele informaticii, Vol. II, Bucureşti, 1991.

11. A.S.Tanenbaum, Organizarea structurală a calculatoarelor, Computer Press Agora, 1999.

12. Web1, ISBN, http://www.niso.org/standards/resources/ISBN.html 13. Web2, Ivonne Mehlfeld, S. Mehlfeld, http://www.fauxpas3000.de/Kontakt.html. 14. Web3, Bar Code, http://www.itsc.org.sg/synthesis/2001/itsc-synthesis2001-jinsoon-

bar-coding.pdf 15. Web4, Wiki, http://en.wikipedia.org/wiki/.

Page 96: G Albeanu Arhitectura Sist Calcul

Tehnoredactor: Grigore ALBEANU Coperta: Cornelia PRODAN

Bun de tipar: 05.02.2007; Coli tipar: 6 Format: 16/70×100

Editura Fundaţiei România de Mâine Bulevardul Timişoara nr. 58, Bucureşti, Sector 6

Tel./Fax 021/444.20.91; www.spiruharet.ro e-mail: [email protected]

96


Recommended