Subiectul 1. Modelul de procesare secvential si taxonomia lui Flynn
Taxonomia lui Flynn este o clasificare a arhitecturilor sistemelor de calcul, propusă de Michael Michael J. Flynn în 1966. 1966. Cele patru clasificări clasificări definite definite de Flynn Flynn au la bază numărul de fluxuri fluxuri de instrucţiuni şi de date concurente disponibile în arhit ectură. 1.SISD: Flux Flux de de inst instruc rucţiu ţiuni ni singu singular lar,, flux flux de date date sing singular ular (SISD) (SISD) - un comput computer er secvenţial care nu foloseşte paralelismul nici în fluxul de date, nici în fluxul de instrucţiuni. Aici se încadrează încadrează microprocesoa microprocesoarele rele clasice cu arhitectură arhitectură von Neumann Neumann pe 8, 16, 32 şi 64 de biţi cu funcţionar funcţionaree ciclică ciclică - preluare preluare instrucţiu instrucţiune, ne, execuţie execuţie instrucţiun instrucţiunee (rezultă (rezultă prelucra prelucrarea rea datelor) datelor) ş.a.m.d. Ex. IBM 370, DEC VAX, SUN, IBM PC, MacIntosh. 2. MISD: Multiple Multiple Instruct Instruction ion (Stream), (Stream), Single Single Data (Stream): (Stream): Fluxuri Fluxuri de instrucţi instrucţiuni uni multiple, flux de date singular singular (MISD)- neobişnuit datorită faptului faptului că fluxurile de instrucţiuni multiple au nevoie, nevoie, de obicei, de fluxuri fluxuri multiple de de date pentru pentru a fi eficient. Acestea sunt sistemele care folosesc microprocesoare pipeline (conductă), metodă folosită de către procesoarele recente. La un astfel de microprocesor, de exemplu, în paralel se execută instrucţiun instrucţiunea ea n, se decodifică decodifică instrucţiune instrucţiuneaa n+1 şi se aduce aduce în memorie memorie instrucţiune instrucţiuneaa n+2. 3. SIMD: Single Single Instruc Instruction tion (Stream), (Stream), Multiple Multiple Data (Stream): (Stream): Flux de instrucţiuni instrucţiuni singular, fluxuri de date multiple (SIMD)- un sistem de de calcul care foloseşte foloseşte fluxuri de de date multiple împreună cu un singur flux de instrucţiuni pentru a face operaţii care pot fi paralelizate. Acestea sunt sisteme cu microprocesoare matriceale, la care operaţiile aritmetice se execută în paralel pentru fiecare element al matricei, operaţia necesitând o sngură instrucţiune (se mai numesc numesc şi sisteme de de procesare procesare vectorială). vectorială). Ex. CRAY-1, CRAY-1, DAP DAP CM-1, WARP, WARP, CM-2, CM-2, ILLIAC ILLIAC IV. 4. MIMD: Multiple Multiple Instructio Instruction n (Stream), (Stream), Multiple Multiple Data Data (Stream): (Stream): Fluxuri Fluxuri multiple multiple de de instrucţiun instrucţiuni, i, fluxuri multiple multiple de date (MIMD)(MIMD)- multiple multiple procesoare procesoare autonome autonome care execută diferite instrucţiuni asupra unor date diferite. Sistemele de calcul distribuite folosesc, de obicei, arhitecturi MIMD exploatând fie un spaţiu de memorie partajat, fie un spaţiu de memorie distribuit. distribuit. Ex. Transputere Transputere,, Supernode, Supernode, DADO, N-cube, N-cube, Ultracomputer, Ultracomputer, Butterfly, Butterfly, Alliant, Alliant, Sequent Balance, CRAY X-MP.
Subiectul 2: Entropia. Formula lui Shannon. Exemplu de codificare.
Informaţia este un mesaj mesaj ce aduce aduce o precizare într-o problemă ce comportă comportă un anumit anumit grad de incertitudine. Deşi există o mare diversitate de informaţie, atât din punctul de vedere a formei de prezentare, a conţinutului, a sursei care o generează cât şi a modului de recepţionare, oamenii de ştiinţă şi-au pus problema măsurării ei cantitative. S-a constatat că informaţia şi nedeterminarea sunt mărimi direct proporţionale. Se consideră un experiment X în cadrul căruia se pot realiza un număr finit de n evenimente elementare: x1, x2, x3, ..,xn. Probabilităţile de apariţie ale acestor evenimente le vom nota cu p1, p2, p3, .., pn (pi = numărul cazurilor favorabile evenimentului x i/numărul cazurilor egal posibile ale experimentului). Se presupune că sistemul de evenimente este un sistem complet: pi ≥ 0, i = 1,n pi = 1
Experimentul pune în evidenţă un anumit câmp de probabilitate {X, x, p(x)} şi o anumită repartiţie: X = x1 x2 . . . xn p1 p2 . . . pn
Deoarece nu se cunoaşte apriori rezultatul experimentului X, înseamnă că acesta conţine un anumit grad de nedeterminare. Putem afirma că: - în urma realizării unui unui experiment se obţine informaţie informaţie dacă şi numai dacă dacă rezultatul experimentului înlătură o anumită nedeterminare; - informaţia şi nedeterminarea nedeterminarea sunt mărimi direct direct proporţionale; - informaţia înlocuieşte nedeterminare. Aceste particularităţi au condus la utilizarea aceleiaşi unităţi de măsură atât pentru cantitatea de informaţie cât şi pentru nedeterminare. Nedeterminarea unui experiment depinde de probabilităţile de realizare a evenimentelor. Dacă se notează cu H măsura gradului de nedeterminare, pentru experimentul experimentul X, aceasta va fi o funcţie de probabilităţile evenimentelor: H(X) = H(p1, p2, .…, pn).
În anul 1948, Claude E. Shannon a folosit pentru prima dată formula: H(p1, p2, .…, pn) = -
pi*log2pi
Măsura Măsura nedetermin nedeterminării, ării, dată de această această formulă, formulă, se numeşte, numeşte, conform conform lui Claude Claude Shan Shanno non, n, entr entrop opia ia expe experim rimen entu tulu luii X sau entr entrop opia ia info inform rmaţ aţio iona nală lă.. În ace acest st sens sens,, unita unitatea tea de de măsură a informaţiei definită ca fiind cantitatea de informaţie obţinută prin precizarea precizarea unei variante din două două egal probabile probabile se numeşte bit (binary digit).
Subiectul 3. Proprietăţile entropiei informaţionale
Principalele proprietăţi ale entropiei informaţionale sunt: P1. Entropia informaţională, fiind măsura informaţiei, este o entitate nenegativă: H(p1, p2, .…,pn)≥0. P2. Dacă pentru un indice i ∈{1, 2, .., n} avem pi =1, atunci entropia informaţională este nulă: H(p1,p2, .…,pn) = 0. P3. Entropia unui sistem de evenimente este maximă când evenimentele au aceeaşi probabilitate de apariţie: H(p1,p2, .…,pn) ≤ H(1/n,1/n,…,1/n). P4. Evenimentele imposibile nu modifică valoarea entropiei informaţionale a unui sistem: H(p1,p2, .…,pn,0) = H(p1,p2, .…,pn). P5. Entropia produsului mai multor surse independente de informaţie este egală cu suma entropiilor fiecărei surse luate separat: H(X1*X2*…Xn) = H(X1)+H(X2)+...+H(Xn). Produsul mai multor surse de informaţie reprezintă un experiment compus care constă din realizarea simultană a câte unui eveniment corespunzător fiecărei surse. P6. Entropia produsului a două surse oarecare X şi Y de informaţie este: H(X*Y) = H(X) +H(Y/X). H(Y/X) reprezintă cantitatea medie de informaţie ce se obţine în urma realizării p(xk )*H(Y/xk ), unde p(xk ) = experimentului Y, condiţionat de experimentul X: H(Y/X) = probabilitatea realizării evenimentului xk ∈ X; H(Y/xk ) = entropia experimentului Y, condiţionată de evenimentul xk ∈ X. H(Y/xk ) = - p(yi/xk )*log2 p(yi/xk ) iar p(yi/xk ) este probabilitatea realizării evenimentului elementar yi ∈ Y ( i = 1,m) când s-a realizat evenimentul xk ∈ X (k = 1,n). Dacă X şi Y sunt experimente oarecare sunt respectate proprietăţile: P7. H(Y/X)≤H(Y) P8. H(X*Y)≤H(X)+H(Y) P9. H(X/Y)=H(Y/X)+H(X)-H(Y).
Subiectul 4. Sisteme de numeraţie. Reprezentarea numerelor întregi şi fracţionare într-o bază oarecare.
Un număr reprezintă informaţia a cărei semnificaţie este universal stabilită şi ale cărei prelucrări au la bază aritmetica. Numerele sunt incluse într-o clasă de codificare particulară, în care proprietăţile abstracte ale aritmeticii sunt translatate în mecanismele concrete de calcul asupra codurilor. Sistemul de numeraţie este format din totalitatea regulilor de reprezentare a numerelor cu ajutorul unor simboluri numite cifre. Numărul de simboluri permise pentru reprezentarea cifrei este numit baza sau rădăcina sistemului de numeraţie. Sistemele de numeraţie pot fi: - poziţionale (sistemele: zecimal, binar, octal); - nepoziţional (sistemul roman). Simbolurile folosite în cadrul sistemului de numeraţie roman şi valorile zecimale corespunzătoare acestor simboluri: IXCMVLD 1 10 100 1000 5 50 500 În studiul arhitecturii calculatoarelor ne interesează în mod deosebit - reprezentarea binară (baza=2); - reprezentarea octală (baza=8); - reprezentarea zecimală (baza=10); - reprezentarea hexazecimală (b=16). Sistem de numeraţie
Binar Octal Zecimal Hexazecimal
Baza (b)
2 (0,1) 8 (0,1,2,3,4,5,6,7) 10 (0,1,2,3,4,5,6,7,8,9) 16 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
Fiind dat un număr întreg N, se numeşte reprezentare în baza b, orice succesiune de cifre an,an-1,...,a0 care satisface următoarele proprietăţi: - cifrele lui sunt numere naturale cu proprietatea : 0 ≤ ai ≤ b-1 (i=0÷n) - există egalitatea: N = an bn + an-1 bn-1 + ….+ a0 b0 Când succesiunea de cifre are proprietăţile enumerate, prin definiţie, se poate scrie: N = anan-1 ….a0 sau (N) b = anan-1 ….a0 Un număr întreg admite o reprezentare unică în baza b. Fiind dat un număr real R, se numeşte reprezentare în baza b, orice succesiune de cifre an,an-1,...,a0,a-1, a-2,...,a-m ce îndeplineşte proprietăţile: - cifrele ai sunt numere naturale cu proprietatea : 0 ≤ ai ≤ b-1 (i = −m,n) - nu există un rang k astfel încât să avem: ak = ak-1 = ak-2 = … = b-1 - există egalitatea: R = an bn + an-1 bn-1 + ….+ a0 b0 + a-1 b-1 +….+ a-m b-m În situaţia în care succesiunea de cifre are proprietăţile enumerate prin definiţie se scrie: R = anan-1...a0a-1a-2...a-m, an este cifra cea mai semnificativă (CCMS) a numărului R, iar a-m este cifra cea mai puţin semnificativă (CCMPS).
Subiectul 5. Conversia bazei de numeraţie
Fiind dat un număr reprezentat în sistemul de numeraţie cu baza b, calculul cifrelor reprezentării în baza q, q>1 se numeşte conversia din baza b în baza q. Conversia numerelor dintrun sistem de numeraţie b în alt sistem de numeraţie cu baza q se efectuează examinând separat partea întreagă şi partea fracţionară. Fie (N) b=(NI) b + (NF) b, unde (NI) b - reprezintă partea întreagă a numărului (N) b iar (NF) b reprezintă partea fracţionară. Conversia numerelor întregi
În noua bază de numeraţie q, partea întreagă [(NI) b] se va scrie: (NI) b = a nqn + an-1qn-1 +…+ a0q0, unde ai (i=0,n) sunt cifre ce aparţin sistemului de numeraţie în baza q. Conversia părţii întregi (NI) b în baza q se va reduce la determinarea coeficienţilor ai (i=0,n), ce se obţin prin împărţirea succesivă a lui (NI) b cu q, astfel: (NI)b/q=(anqn-1+an-1qn-2+...+a1) + a0/ q → a0
↓
↓
(NI1) b-partea întreagă a câtului
rest
….. (NIk ) b/q= anq +an-1qn-k-2+…+ak+1+ak / q → ak ↓ (NI(k+1)) b ……. (NIn) b/q= 0+an/ q → an Algoritmul se încheie când partea întreagă a câtului devine nulă. Cifra a n reprezintă cifra cea mai semnificativă iar a0 este cifra cea mai puţin semnificativă. n-k-1
Conversia rapidă
În cazurile în care între cele două baze de numeraţie (implicate în conversie) există o relaţie de genul: b1=b2p (b1 şi b2 sunt cele două baze, p este număr natural mai mare sau egal cu 2) atunci conversia se poate realiza mai rapid. Pentru a face conversia din baza b2 (baza mai mică) în baza b1, se împarte numărul reprezentat în b1 în grupe de câte p cifre, de la dreapta la stânga pentru partea întreagă şi de la stânga la dreapta pentru partea fracţionară. Dacă ultimul grup de cifre nu are exact p cifre, se completează cu zerouri pentru a se obţine un grup de p cifre. Pentru a face conversia din baza b1 (baza mai mare) în baza b2, pentru fiecare cifră a numărului din baza b1 se asociază un grup de p cifre în baza b2, obţinându-se astfel numărul în noua bază b2. Conversia numerelor fracţionare
Partea fracţionară se poate scrie: (NF) b=a-1q-1 + a-2q-2 + a-3q-3 + ... , unde: a-j reprezintă cifre aparţinând sistemului de numeraţie q. Conversia părţii fracţionare se va reduce la determinarea coeficienţilor a-k (k=1,2,...) prin înmulţiri succesive: (NF) b*q=a-1+a-2q-1+a-3q-2 + ... → a-1 ↓ (NF1)b (NF1) b*q=a-2+a-3q-1+a-4q-2+... → a-2 ↓ (NF2) b unde: a-1 reprezintă cifra cea mai semnificativă a părţii fracţionare. Teoretic, algoritmul ar trebui să se încheie când partea fracţionară devine egală cu zero, ceea ce se întâmplă într-un număr limitat de cazuri. În practică, procedeul are un număr finit de paşi, în funcţie de precizia aleasă. De exemplu, pentru a obţine o precizie bună, pentru fiecare cifră zecimală trebuie calculate 4 cifre binare (în cazul conversiei din zecimal în binar).
Subiectul 6. Reprezentarea numerelor în virgula fixă
1. Reprezentarea prin mărime şi semn (Cod direct - CD): Un număr reprezentat prin mărime şi semn se poate scrie conform relaţiei: N = an*2n + Σ ai*2i (i=-m,n-1) an = 0, daca N≥0 1, daca N<0 an este bit de semn, iar a i ∈ {0,1} pentru i =−m,n − 1 şi au fost obţinute în urma conversiei numărului (N) în sistemul de numeraţie binar. Macheta de reprezentare a numărului N este:
Observaţie. S-a considerat că partea întreagă se reprezintă prin n cifre binare, iar partea fracţionară prin m cifre binare: - dacă n = 0 → se obţine reprezentarea numerelor subunitare; - dacă m = 0 → se obţine reprezentarea numerelor întregi. 2. Reprezentarea prin complement faţă de 1 ( cod invers - CI): Un număr reprezentat în cod invers se poate scrie: N = 0*2n+ Σ ai*2i (i=-m,n-1), daca N≥0 1*2n + Σ (1-ai)*2i (i=-m,n-1), daca N<0 unde ai reprezintă cifrele binare ale numărului | N|. Observaţie: Reprezentarea prin complement faţă de 1 se obţine astfel: 1. Fie calculând: N = 2n+1-| N |CD - 2-m 2. Fie prin inversarea cifrelor binare (inclusiv cifra de semn) din reprezentarea în cod direct a numărului în valoare absolută. 3. Reprezentarea prin complement faţă de 2 (cod complementar - CC): Forma de scriere în cod complementar este: N = 0*2n+ Σ aaiii*2i, pentru N≥0 1*2n + Σ aaiii*2i, pentru N<0, (i=-m,n-1), unde: Σ aaiii*2i = Σ (1-ai)*2i+2-m, iar ai reprezintă cifrele binare ale numărulu |N|. Codul complementar al unui număr se poate obţine astfel: 1. Fie calculând: N = 2n+1-|N|CD 2. Fie adunând un 1 la CCMPS a reprezentării numărului în CI 3. Dacă se consideră reprezentarea în CD a numărului în valoare absolută, pentru obţinerea codului complementar, începând de la CCMPS - se lasă neschimbate toate cifrele de zero, inclusiv prima cifră binară a cărei valoare este 1; apoi toate celelalte cifre binare se vor inversa, inclusiv cifra de semn.
Subiectul 7: Operatii aritmetice în virgula fixa
1. Adunarea în cod direct (CD)
Se adună mărimile numerelor, fără cifra de semn şi se dă rezultatului semnul comun celor două numere. Fie: N1 = an*2n + Σ ai*2i, ai ∈ {0,1} N2 = bn*2n + Σ bi*2i, bi ∈ {0,1} N1+N2 = an*2n + Σ ( ai+bi+ti)*2i, (i=-m,n-1) Însumarea se face începând de la bitul cel mai puţin semnificativ al reprezentării numerelor, ţinându-se cont de transportul de la rangul anterior (ti). Se consideră t-m=0, iar dacă va apare tn (transport de la bitul CMS al mărimii) avem de-a face cu depăşire binară. Rezultatul operaţiei poate fi corect când nu apare transport de la cifra cea mai semnificativă a mărimii rezultatului şi poate fi incorect când apare transport. 2. Adunarea/scăderea în cod invers (CI) a). Adunarea/scăderea numerelor cu acelaşi semn:
- Dacă ambele numere sunt pozitive, reprezentarea lor în cod invers este identică reprezentării în cod direct. - Daca numerele sunt negative, fie N 1<0 şi N2<0 se noteaza prin |N1|CD, |N2|CD reprezentarea în cod direct a valorilor absolute ale numerelor N1 şi N2. N1 = 28-|N1|CD-20 N2 = 28 - |N2|CD-20 N1+N2 = 28+28-|N1|CD-|N2|CD-20-20 Avand în vedere că rezultatul trebuie să fie de forma: N1+N2 = 28-(|N1|CD+|N2|CD)-20 apare necesar ca transportul de la cifra de semn să fie adunat la cifra cea mai puţin semnificativă: N1+N2 = 28-(|N1|CD+|N2|CD)-20+28-20 ← Bitul CMPS ↓ ↓ rezultat transport de la cifra la semn b). Adunarea/scăderea numerelor cu semne diferite:
Fie N1>0 şi N2<0. Reprezentarea lui N 1 este aceeaşi în cod direct şi cod invers, iar N 2 = 28|N2|CD-20. În urma operaţiei de adunare obţinem: N1+N2 = 28-(|N1|CD+|N2|CD)-20. Rezultatul este pozitiv sau negativ, după valorile absolute ale numerelor N1 şi N2. Observaţie. Adunarea în cod invers, ca şi în cod complementar, operează asupra tuturor cifrelor binare, inclusiv asupra cifrei de semn. 3. Adunarea/scăderea în cod complementar (CC) a). Adunarea /scăderea numerelor cu acelaşi semn
- Dacă ambele numere sunt pozitive, reprezentarea lor în cod complementar este identică reprezentării în CD. - Daca numerele sunt negative: fie N1<0 şi N2<0: N1 = 28 - |N1|CD N2=28 - |N2|CD N1+N2 = 28 – (|N1|CD+|N2|CD)+28 ↓ forma de reprez. a rez.
↓ transp. de la bitul de semn
Ţinând seama de forma de reprezentare a rezultatului, apare necesar ca transportul de la cifra de semn să se neglijeze. Observaţie. Dacă în urma însumării a două numere cu acelaşi semn, rezultatul are semn contrar → acesta este eronat (valoarea rezultatului nu se poate încadra pe numărul de biţi utilizat). b). Adunarea/scăderea numerelor cu semn diferite: Fie N1>0 şi N2<0, N2=28 - |N2|CD. Prin adunare avem: N1+N2 = 28 – (|N2|CD-|N1|CD). Dacă |N1| > |N2| rezultatul va fi pozitiv, iar pentru |N1|< |N2| rezultatul va fi negativ.
Subiectul 8. Reprezentarea numerelor în format BCD
Pentru reprezentarea numerele folosind codificarea BCD (Binary Coded Decimal) se utilizează două formate: formatul împachetat (packed BCD) şi formatul despachetat (unpacked BCD). Reprezentarea în BCD format împachetat conţine două cifre zecimale pe un octet (cifra zecimală mai puţin semnificativă pe biţii 0 ÷ 3 şi cifra zecimală mai semnificativă pe biţii 4 ÷ 7). Datele reprezentate în BCD format despachetat conţin o cifră zecimală pe octet - memorată în biţii 0 ÷ 3, iar biţii 4 ÷ 7 conţin informaţia (F)H [(1111)2]. Microprocesorul acceptă datele în format BCD împachetat sau despachetat, având următoarea machetă de reprezentare pe un octet:
Pentru reprezentarea numerelor nu s-a impus o anumită lungime a secvenţelor şi nu s-a ţinut cont de semnul numărului. Pentru calculatoarele compatibile IBM-PC coprocesorul matematic memorează numerele întregi zecimale pe zece octeţi - în format împachetat. În acest caz macheta de reprezentare este:
S - bit de semn ( 0 pentru numere pozitive, 1 pentru numere negative); Di - cifră zecimală (două cifre per octet); X - biţi nefolosiţi. Numerele negative se deosebesc de cele pozitive prin bitul de semn.
Subiectul 9. Adunarea si scaderea în format BCD
1. Adunarea în 8421
Adunarea numerelor în zecimal codificat binar (8421) se face binar, rang cu rang pe fiecare grup de patru cifre binare, cu adăugarea, eventual, a unor corecţii. Fie a şi b două cifre zecimale codificate binar (în 8421) care se adună; rezultatul c = a + b poate fi: - corect, şi nu este necesar să se aplice nici o corecţie dacă: 0000< c< 1001; - incorect şi se impune corecţia, adunând 0110 în situaţiile: a). 1010
Fie a şi b două cifre zecimale codificate binar, în codul 8421 ce se scad ast fel: - dacă c = a-b este un număr pozitiv, acest rezultat este corect; - dacă rezultatul este negativ, se realizează un împrumut de la tetrada binară superioară (-0001)2, care va reprezenta pentru tetrada unde este necesar împrumutul valoarea (10000)2=16. Această configuraţie de cifre [(10000)2] se adună la tetrada a şi din aceasta se scade tetrada b, obţinându-se un număr pozitiv. Noului rezultat i se aplică o corecţie prin scăderea cifrei 6, adică (0110)2. Scăderea este necesară deoarece în zecimal valoarea împrumutului este 10, iar prin reprezentarea într-un cod cu 4 cifre binare împrumutul este 16.
Subiectul 10. Reprezentarea numerelor în virgula mobila
În cazul reprezentării numerelor în virgulă mobilă, se pleacă de la faptul că un număr N se poate scrie sub forma: N=±(f) b*bE, unde: b reprezintă baza sistemului de numeraţie utilizat (mai frecvent se utilizează baza 2 sau 16); E exponentul real si f partea fracţionară a numărului. Reprezentarea în calculator, implică existenţa a trei câmpuri, acestea fiind: - bitul de semn: S = 0, daca N≥0 sau 1, daca N<0 - Exponentul (cunoscut şi sub denumirea de caracteristică), are o valoare determinată prin relaţia: EXP = exponent real + constantă în exces. Constanta în exces se stabileşte în funcţie de format şi de calculator şi are ca scop eliminarea unei zone în care să fie specificat semnul corespunzător exponentului real. Se pot reprezenta în acest mod şi numere negative folosind acelaşi tip de reprezentare. - Fracţia (sau mantisa). Numărul de cifre binare corespunzătoare acestei zone variază, de asemenea, în funcţie de calculator şi formatul utilizat. De regulă, fracţia trebuie să fie normalizată, respectând relaţia: 1/b ≤ (f) b <1. Pentru reprezentarea în virgulă mobilă a unui număr real N, într-un calculator din familia IBM-PC se consideră: N=±2E(f)2. 1≤(f)2<2 iar (f)2=I0f 1f 2...f n (I0 = 1, iar valoarea lui n depinde de formatul ales). De regulă se utilizează următoarele formate: 1) Formatul real binar:
- simplă precizie, având macheta:
- dublă precizie:
f i - cifrele binare ale fracţiei normalizate; Ei - cifrele binare ale zonei de exponent; EXP=E + (81)H. Dacă zona exponent este egală cu zero, numărul zecimal este egal cu zero. Dacă zona exponent este diferită de zero, atunci numărul zecimal va fi determinat astfel: = *( 0.1) 2*2-(80)h 2) Formatul real sau formatul IEEE ( Institute of Electrical and Electronics Engineers) 754, apărut în anul 1985: - simplă precizie (format scurt), având macheta: - dublă precizie (format lung), cu macheta:
unde: fi - cifrele binare ale zonei exponent (EXCES=127 sau 1023); EXP = E+127[(7F)H] - pentru format scurt; EXP = E + 1023 [(3FF)H] - pentru format lung. -format temporar (sau real extins), cu macheta:
unde: I0 - bitul părţii întregii, ce se memorează în formatul temporar; f i - cifrele binare ale fracţiei; Ei - cifrele binare ale zonei exponent, EXP = E + 16383 [(3FFF)H] Dacă exponentul este egal cu zero, atunci numărul este egal cu zero. Dacă exponentul nu este egal cu zero, numărul zecimal se va calcula după relaţia: =*(1.)2*2-EXCES
Subiectul 11. Coduri numerice si alfanumerice
Codurile în care sunt reprezentate numai numere se numesc coduri numerice, iar cele care cuprind numerele, literele şi semnele speciale se numesc coduri alfanumerice. Dintre codurile alfanumerice amintim: - Codul BCD (Binary Coded Decimal), reprezintă unul din primele coduri utilizate în tehnica de calcul. O secvenţă de cod are lungimea de şase biţi/caracter. - Codul EBCDIC (Extended Binary Coded Decimal Information Interchange Code), secvenţele de cod au o lungime de opt biţi/caracter. - Standardul ASCII (American Standard Code for Information Interchange) secvenţele de cod au o lungime de opt biţi/caracter. - Standardul Unicode utilizează secvenţe de cod cu lungimea de 16 biţi/caracter. Acest cod a fost conceput să înlocuiască standardul ASCII, prin intermediul căruia se pot reprezenta maximum 256 (2 8) caractere. Codul ASCII este un subset al standardului Unicode. Caracterele de bază din toate limbile scrise existente pot fi reprezentate prin standardul Unicode. Codurile normalizate au fost realizate în aşa fel încât să uşureze modul de prelucrare a informaţiei. Astfel, partea stângă a codului permite identificarea imediată a naturii informaţiei codificate (litere, cifre, funcţii), următoarele poziţii ale codului sunt organizate într-un mod care să uşureze conversia în vederea calculelor (în cazul cifrelor) sau ordonarea alfabetică (în cazul literelor). Codurile numerice au fost introduse pentru a se opera mai uşor cu informaţia numerică. Codurile numerice pot fi: ponderate sau neponderate. Un cod numeric este ponderat dacă unei cifre zecimale îi corespunde o succesiune de cifre binare, în care fiecare cifră de rang j are asociată o anumită pondere P j. Fie N un număr zecimal: N = zk zk-1zk-2...z0, zi ∈ {0, 1, ....9}, i=0,k Oricare ar fi cifra zecimală z i, aceasta se va reprezenta printr-o secvenţă binară ce satisface relaţia: zi = Σ a j*P j, j∈{0,1}, P j ∈ {0, ± 1, ± 2, ....±9} constituie ponderea corespunzătoare rangului j, iar n numărul de simboluri din secvenţa binară asociată cifrei zecimale. Dintre codurile ponderate amintim: - Codul 8421, codul binar-zecimal natural, având ca ponderi puterile lui 2 (2 3,22,21,20). - Codul 2421 (Aiken), la care codificarea primelor cinci cifre zecimale (0÷4) este identică secvenţelor din codul 8421. Codificarea cifrei zecimale 5 se obţine din secvenţa corespunzătoare cifrei zecimale 4 prin schimbarea simbolurilor binare 0 în 1 şi 1 în 0. Astfel, fiecare complement faţă de 9 al unei cifre zecimale se reprezintă printr-o secvenţă ce rezultă complementând faţă de 1 simbolurile binare din secvenţa cifrei zecimale respective. Codurile ce au această proprietate se numesc autocomplementare, prezentând avantaje în efectuarea operaţiilor aritmetice. - Pentru codul 8421 ponderile sunt puteri ale lui 2, însă două sunt negative. Este un cod auto-complementar. - Codul bichinar (50 43210) conţine secvenţe de câte şapte simboluri binare împărţite în două grupe. Acest cod a fost folosit la primele calculatoare electronice. Alte coduri numerice ponderate sunt: 4221, 5421, 7421, 64 21. Din categoria codurilor neponderate, amintim: - Codul EXCES 3 a fost realizat de G. Stibitz şi se remarcă prin aceea că: este un cod autocomplementar si cifrei zecimale zero îi corespunde o secvenţă binară ce conţine cifre binare de 1.
- Codul Gray se caracterizează prin aceea că două secvenţe de cod consecutive diferă printr-o singură poziţie binară. Dacă notăm cu: a 8, a4, a2, a1 cifrele binare ale secvenţelor codului 8421, în ordinea ponderilor şi cu b 4, b3, b2 şi b1 cifrele binare ale secvenţelor Gray, în ordinea de la stânga la dreapta, acestea din urmă pot fi calculate folosind relaţiile: b8 = a 8; b 3 = a 8⊕a4; b 2 = a4⊕a2; b1 = a2⊕a1. - Codul „2 din 5” este un cod pseudo-ponderat. Secvenţele de cod pentru cifrele zecimale 1 ÷ 9 au asociate ponderile 74210, numai codificarea cifrei zecimale 0 face excepţie de la această regulă. Caracteristica secvenţelor de cod este aceea că din cele cinci cifre binare două sunt semnificative (au valoarea 1).
Subiectul 12. Coduri de bare Codul de bare reprezintă un sistem de codificare prin care se permite identificarea automată sau semiautomată a diverselor entităţi (legitimaţii, cărţi, bilete de avion, produse din cele mai variate etc.). Codul de bare are avantajul de a fi relativ simplu de produs şi recunoscut. El poate fi aplicat direct pe orice produs (pe ambalajul acestuia) sau ulterior, ca etichetă. Majoritatea codurilor de bare au la bază principiul binar, reprezentarea făcându-se printr-un număr de linii sau linii şi spaţii cu o anumită lăţime. Secvenţa de linii sau linii şi spaţii reprezintă un caracter numeric sau alfanumeric. Pentru exemplificare vom considera codul 2/5 (2 din 5), cod numeric (sunt reprezentate cifrele de la 0 la 9). Codificarea se face prin trasarea a două linii late şi trei înguste. Raportul de imprimare linie îngustă/linie lată este de 1/2 sau 1/3. Spaţiile nu conţin informaţie. Caracter 1 2 3 4 5 6 7 8 9 0 start stop
Linia1 1 0 1 0 1 0 0 1 0 0 1 1
Linia2 0 1 1 0 0 1 1 0 1 0 1 0
Linia3 0 0 0 1 1 1 0 0 0 1 0 1
Linia4 0 0 0 0 0 0 1 1 1 1
Linia5 1 1 0 1 0 0 1 0 0 0
1: linie lată; 0: linie îngustă
Dacă în cazul codului 2 din 5 spaţiile nu conţin informaţie, există şi un cod asemănător în care densitatea informaţiei reprezentate este mai mare; acest cod se numeşte „codul 2 din 5 intercalat” iar în acest caz spaţiile conţin informaţii în acelaşi mod ca şi liniile. Codificarea informaţiei permite rezolvarea unor probleme ce pot apare în transmisia, stocarea sau prelucrarea acesteia, cum ar fi: - detectarea şi corectarea erorilor pentru a se asigura integritatea informaţiei; - compresia pentru minimizarea cantităţii de informaţie; - criptarea pentru a se garanta securitatea informaţiei.
Subiectul 13. Coduri detectoare si corectoare de erori
Codificarea se efectuează având ca scop principal protejarea informaţiei de perturbaţiile ce pot să apară într-un sistem de transmisie. De aceea, înainte de a emite simbolurile de informaţie pe canalul de comunicaţie, ce poate fi supus perturbaţiilor, se adaugă o anumită informaţie redundantă, de obicei prin introducerea unor simboluri suplimentare, numite simboluri de control. Rolul acestor simboluri de control este acela de a indica utilizatorului prezenţa erorilor şi chiar să-i dea posibilitatea de a le corecta. Codurile obţinute astfel, prin mărirea redundanţei, se numesc coduri detectoare şi corectoare de erori. În acest caz, schema unui sistem de transmiterea informaţiei arata astfel:
Se poate face o clasificare a codurilor detectoare şi corectoare de erori după modul de prelucrare al simbolurilor. Dacă prelucrările necesare obţinerii proprietăţilor de detecţie sau de corecţie se fac în blocuri de n simboluri, avem coduri bloc. Dacă prelucrarea simbolurilor generate de sursă se realizează în mod continuu, avem de-a face cu coduri convoluţionale (recurente). Din categoria codurilor bloc se disting: - codurile grup, secvenţele de cod sunt considerate ca fiind elemente dintr-un spaţiu vectorial; - codurile ciclice, secvenţele de cod sunt considerate ca fiind elemente într-o algebră.
Subiectul 14. Teoremele fundamentale ale algebrei booleene
1. Teoremele reuniunii şi intersecţiei: - Există un element 0 numit prim element cu proprietăţile: x0=0 şi x0=x - Există un element 1 numit ultim element cu proprietăţile: x1=x şi x1=1 2. Teoremele de unicitate: - Elementul 1 este unic - Elementul 0 este unic 3. Teoremele complementării: - Principiul contradicţiei: x x = 0 - Principiul terţului exclus: x x = 1 4. Teorema dublei negaţii: x x 5. Teoremele absorbţiei: x (x y)=x x (x y)=x 6. Teoremele lui DeMorgan: x y
x y
x y
x y
7. Teoremele de idempotenţă: xx…x = x xx…x = x 8. Teoremele de comutativitate, asociativitate şi distributivitate pentru cele 2 legi de compoziţie: xy = y x x (y z)=(x y) z x (y z)=(x y) (x z)
x y=y x x (y z)=(x y) z x (y z)=(x y) (x z)
Subiectul 15. Existenta si unicitatea functiilor logice
Forma canonică disjunctivă, respectiv conjunctivă a unei funcţii logice este unică. Forma canonică disjunctivă (respectiv conjunctivă) a unei funcţii logice se numeşte şi forma normală disjunctivă (respectiv conjunctivă) perfectă. Forma normală disjunctivă a unei expresii logice este o sumă de produse elementare egală cu expresia dată. Forma normală conjunctivă a unei expresii logice este un produs de sume elementare egal cu expresia dată. Forma normală disjunctivă (respectiv conjunctivă) a unei funcţii nu este unică. Vom considera în continuare cele două forme canonice atât pentru funcţia de o singură variabilă cât şi pentru funcţia de două variabile. Funcţia booleană de o singură variabilă: fie f : B2→B2 o funcţie booleană de o singură variabilă iar a şi b două constante booleene. Forma canonică disjunctivă este: f (x) = ax∪ bx. Am obţinut a = f(1) şi b = f(0), valori unic determinate. Înlocuim x=1, x=0 în relatia lui f(x): f(1) = a • 1 ∪ b • 1 = a • 1 ∪ b • 0 = a ∪ 0 = a f(0) = a • 0 ∪ b • 0 = a • 0 ∪ b • 1 = 0 ∪ b = b FCD: f(x) = f(1) • x ∪ f(x) • x Pentru demonstrarea existentiei (in forma canonica disjunctive), vom inlocui pe x pe rand cu valorile 0 si 1 in relatia anterioara: f(1) = f(1) • 1 ∪ f(0) • 1 = f(1) • 1 ∪ f(0) • 0 = f(1) f(0) = f(1) • 0 ∪ f(0) • 0 = f(1) • 0 ∪ f(0) • 1 = f(0) Pentru forma canonica conjunctiva avem: f (x) = (a ∪ x)(b ∪ x). Înlocuim x = 1, x = 0 în relatia lui f(x): f (1) = (a ∪ 1 ) • ( b ∪ 1) = (a ∪ 1 ) • ( b ∪ 0) = 1 • b = b f(0) = (a ∪ 0 ) • ( b ∪ 0) = (a ∪ 0 ) • ( b ∪ 1) = a • 1 = a FCC: f(x) = (f(0) ∪ x) • (f(1) ∪ x) Am obţinut în acest caz: a = f(0) şi b = f(1), valori unic determinate. Pentru demonstrarea existenţei (în forma canonică conjunctivă), vom înlocui x pe rând cu valorile 0 şi 1 în relaţia anterioară: f(1) = (f(0) ∪ 1) • (f(1) ∪ 1) = (f(0) ∪ 1)(f(1) ∪ 0)= 1 • f(1) = f(1) f(0) = (f(0) ∪ 0) • (f(1) ∪ 0) = (f(0) ∪ 0)(f(1) ∪ 1)= f(0) • 1 = f(0) f(x,y) = axy ∪ bxy ∪ cxy ∪ dxy - forma canonică disjunctivă Considerăm forma FCD şi înlocuim x = 1, x = 0, y =1, y = 0 în relaţia lui f(x,y). Vom avea : a = f(1,1), b = f(1,0), c = f(0,1), d = f(0,0). FCD: f(x,y) = f(1,1)xy ∪ f(1,0)xy ∪ f(0,1)xy ∪ f(0,0)xy Funcţia booleană de două variabile : Fie f : B2 × B2→ B2 o funcţie booleană de două variabile iar a, b, c şi d patru constante booleene. În cazul formei canonice conjunctive avem: f(x,y) =(a∪x∪y)(b∪x∪y)(c∪x∪y)(d∪x∪y) Inlocuim în această relaţie x=0, x=1, y=0, y=1 şi obţinem: a=f(0,0), b=f(0,1), c=f(1,0), d=f(1,1). FCC : f (x,y) = (f(0,0)∪x∪y)(f(0,1)∪x∪y)(f(1,0)∪x∪y)( f (1,1)∪x∪y) Demonstrarea existenţei în cazul formei canonice disjunctive: f(x,y) =f(1,1)xy ∪ f(1,0)xy ∪ f(0,1)xy ∪ f(0,0)xy - forma canonică disjunctivă. Considerăm aceasta expresie şi înlocuim x =1, x = 0, y =1, y = 0 şi obţinem:
x=y=1 → f(1,1) = f(1,1) • 1 • 1 ∪ f(1,0) • 1 • 1 ∪ f(0,1) • 1 • 1 ∪ f(0,0) • 1 • 1 = f(1,1) x=1, y=0 → f(1,0) = f(1,1) • 1 • 0 ∪ f(1,0) • 1 • 0 ∪ f(0,1) • 1 • 0 ∪ f(0,0) • 1 • 0 = f(1,0) x=0, y=1 → f(0,1) = f(1,1) • 0 • 1 ∪ f(1,0) • 0 • 1 ∪ f(0,1) • 0 • 1 ∪ f(0,0) • 0 • 1 = f(0,1) x=y=0 → f(0,0) = f(1,1) • 0 • 0 ∪ f(1,0) • 0 • 0 ∪ f(0,1) • 0 • 0 ∪ f(0,0) • 0 • 0 = f(0,0) Demonstrarea existenţei în cazul formei canonice conjunctive: FCC: f(x,y) = (f(0,0) ∪x∪y)(f(0,1) ∪x∪y)(f(1,0) ∪x∪y)(f(1,1) ∪x∪y) Considerăm aceasta expresie şi înlocuim x =1, x = 0, y =1, y = 0 şi obţinem: x=y=1 → f(1,1)=(f(0,0) ∪ 1 ∪ 1)(f(0,1) ∪ 1 ∪1)(f(1,0) ∪ 1 ∪ 1 )(f(1,1) ∪ 1 ∪ 1) = f(1,1) x=1, y=0 → f(1,0)=(f(0,0) ∪ 1 ∪ 0)(f(0,1) ∪ 1 ∪ 0)(f(1,0) ∪ 1 ∪ 0)(f(1,1) ∪ 1 ∪ 0) = f(1,0) x=0, y=1 → f(0,1)=(f(0,0) ∪ 0 ∪ 1)(f(0,1) ∪ 0 ∪1)(f(1,0) ∪ 0 ∪ 1 )(f(1,1) ∪ 0 ∪ 1) = f(0,1) x=y=0 → f(0,0)=(f(0,0) ∪ 0 ∪ 0)(f(0,1) ∪ 0 ∪ 0)(f(1,0) ∪ 0 ∪ 0 )(f(1,1) ∪ 0 ∪ 0) = f(0,0)
Subiectul 16. Forme de reprezentare ale functiilor booleene
Funcţiile booleene se pot reprezenta fie sub forma unor tabele de adevăr, fie sub forma expresiilor booleene. Cele două forme de reprezentare sunt echivalente. Oricărei funcţii logice i se poate asocia un tabel de adevăr sau expresia logică corespunzătoare. Consideram cateva exemple: Reprezentarea sub formă de tabel de adevăr a funcţiilor : NU, SAU, ŞI, SAU-NU, ŞI-NU. x
y
NU f 1(x)=x
0 0 1 1
0 1 0 1
1 1 0 0
SAU f 2(x,y)=x∪y 0 1 1 1
SI f 3(x,y)=x∩y 0 0 0 1
SAU-NU f 4(x,y)=x∪y 1 0 0 0
SI-NU f 5(x,y)=x∩y 1 1 1 0
Fie funcţia logică următoare: f ( x, y) = xy∪ xy. Tabelul de adevăr asociat este: x 0 0 1 1
y 0 1 0 1
x·y 1 0 0 0
x·y 0 0 0 1
f(x,y) 1 0 0 1
f(x,y) 0 1 1 0
Reciproc, dacă avem tabelul de adevăr al funcţiei, putem determina expresia funcţiei. Considerăm valorile lui x şi y pentru care funcţia f este zero: x=0, y=1 sau x=0, y=0 x=1,y=0 x=0, y=0 f 2(x,y) = (x∪y)(x∪y) Verificăm faptul că cele două funcţii sunt egale: f 2(x,y) = (x ∪ y)(x ∪ y) = x · x ∪ x · x ∪ y · x ∪ y · y = x · y ∪ x · y = f1 (x,y) x=y=0 sau x=1, y=1 x=y=1 x=y=1 f 1(x,y)=x·y ∪ x·y
Subiectul 17. Forma normala/canonica disjunctiva/conjunctiva
Se numeşte produs elementar un produs de variabile booleene sau complemente ale acestora, in care aceeasi variabila apare o singura data. Un mintermen în raport cu variabilele logice x1, x2,...,xn este produsul elementar în care apar, fie simple, fie complementare, toate variabilele x 1,x2, …,xn. Un mintermen se va scrie în aşa fel încât pentru un set de valori ale variabilelor booleene să ia valoarea logică 1. Se numeste produs elementar/sumă elementară un produs/sumă de variabile şi/sau negaţiile lor. Se numeste forma normală disjunctivă (FND) a unei relaţii logice funcţionale, o relaţie echivalentă (are aceeaşi valoare de adevăr) care este o sumă de produse elementare construite cu aceleaşi variabile ca şi relaţia dată iniţial, fiecare produs conţinând toate variabilele posibile (ele sau complementarele lor). f ( x ) ax b x - FND Se numeste formă normală conjunctivă (FNC) a unei relaţii logice funcţionale, o relaţie echivalentă (are aceeaşi valoare de adevăr) care este un produs de sume elementare construite cu aceleaşi variabile ca şi relaţia dată iniţial, fiecare sumă conţinând toate variabilele posibile (ele sau complementarele lor). f ( x ) (a x )(b x ) - FNC Forma canonică disjunctivă (FCD) pentru o functie de n variabile booleene se poate scrie astfel: f(x1,x2,…,xn) = ∪ f(i1k ,i2k ,…,ink ) · x1i1k · x2i2k · … · xnink , k=1,2n avand x jijk = x j, daca i jk = 1 xj, daca i jk = 0 În concluzie, forma canonică disjunctivă a unei funcţii logice este o sumă a min trmenilor pentru care funcţia are valoarea logică 1. Se numeşte sumă elementară o sumă de variabile booleene sau complemente ale acestora, faca ca aceeasi variabila sa apara de mai multe ori. Un maxtermen în raport cu variabilele logice x1, x2,..,xn este o sumă elementară, în care apar, fie simple, fie complementare, toate variabilele x 1, x 2, ...,xn. Un maxtermen se va scrie în aşa fel încât pentru un set de valori ale variabilelor logice să ia valoarea logică 0. Forma canonică conjunctivă (FCC) pentru o funcţie de n variabile se poate scrie: f(x1,x2,…,xn) = ∩ [f(i1k ,i2k ,…,ink ) · x1i1k · x2i2k · … · xnink ], k=1,2n avand x jijk = x j, daca i jk = 0 xj, daca i jk = 1 Aşadar, forma canonică conjunctivă reprezintă produsul maxtermenilor pentru care functia booleana are valoarea logica 0.
Subiectul 18. Proprietatile mintermenilor/maxtermenilor
Produsul logic între doi mintermeni mi şi m j (i # j) ai unei funcţii booleene de n variabile este egal cu 0: mi*m j=0, ∀ i≠j P2. Suma logică dintre doi termeni Mi şi M j (i # j) ai unei funcţii booleene de n variabile este egal cu 1: mi U m j =0, ∀ i≠j P3. O funcţie booleană de n variabile poate fi reprezentată printr-o sumă logică de mintermeni mi (respectiv un produs logic de maxtermeni M i) sub forma: f(x1,...,xn) = U (α1*mi) f(x1,...,xn) = ∩ (αi*mi), αi ∈ {0,1} – numere caracteristice, i=0,2n-1 P4. Complementul unei funcţii booleene de n variabile scrise în FCC poate fi exprimat în mod unic prin relaţia: f(x1,...,xn) = U (α1*mi) iar complementul unei funcţii booleene de n variabile scrise în FCD poate fi exprimat unic astfel: f(x1,...,xn) = ∩ (αi*mi), αi ∈ {0,1}, i=0,2n-1 n P5. Dacă o funcţie booleană de n variabile este scrisă în FCD şi conţine 2 termeni distincţi de n variabile atunci ea este egală cu 1. În aceleaşi condiţii, dacă funcţia este scrisă în FCC, atunci ea este egală cu 0. f(x1,...,xn) = U mi = 1 (FCD) f(x1,...,xn) = ∩ Mi = 0 (FCC), i=0,2n-1 P6. Orice mintermen mi al unei funcţii booleene de n variabile scrise în FCD este egal cu produsul logic a 2n-1 termeni M j, respectiv orice maxtermen Mi al unei funcţii booleene de n variabile scrisă în FCC este egal cu suma logică a 2 n-1 termeni m j: mi = ∩ M j, Mi = U m j, j=0,2n-1 si j≠i P1.
Subiectul 19. Functiile booleene de doua variabile
1) Funcţia NU:
f 10(x1, x2,..., xn)=xi, ∀i=1,n 2) Funcţia IDENTITATE : f 3(x1, x2,..., xn) = xi, ∀i =1,n 3) Funcţia ŞI: f 1(x1, x 2,..., xn) = x1 · x2 ·... ·xn, această funcţie are valoarea logica 1 daca toate variabilele au valoarea logica 1. 4) Funcţia SAU: f 7(x1, x2, ...,xn) = x1 + x2 +...+ xn , ce are valoarea logică 1 daca cel putin o variabila are valorea logica 1. 5) Funcţia ŞI-NU, are valoarea logică 1 dacă cel puţin o variabilă are valoarea logică 0: f 14 (x1, x2 , .. , xn) = x1 · x2 · ... · xn = x1 + x2 + .. + xn 6) Funcţia SAU-NU, are valoarea logică 0 dacă cel puţin o variabilă are valoarea logică 1: f 8(x1, x2, ..,x n) = x1 + x2 + .. + xn = x1 · x2 · ... ·xn 7) Funcţia INHIBARE: f 4 (x1, x2 , ..., xn) = x1 · x2 · . . . · xk-1 · xk · xk+1· . . . · xn, k ∈ {1, 2, ..., n}. 8) Funcţia IMPLICARE: f 11 (x1, x2, .. , xn) = x1 + x2 + xk-1 + xk + xk+1 + .. + xn, k ∈ {1, 2, ..., n}.
Subiectul 20. Diagrame Karnaugh – minimizare
Diagramele Karnaugh sunt reprezentări grafice ale funcţiilor booleene. O celulă din diagramă corespunde unei linii din tabela de adevăr. De asemenea, o celulă din diagramă corespunde unui mintermen sau maxtermen al expresiei booleene. Zone ce conţin mai multe celule adiacente corespund termenilor standard .
Algoritmul de minimizare, utilizând diagramele Karnaugh este următorul: - Scrierea valorilor funcţiei în diagramă, scrierea după 1 (sau după 0) dacă se foloseşte FCD (sau FCC) a funcţiei. - Gruparea a 2k (k = 0,1,2,...) suprafeţe elementare adiacente, care au valoarea logică 1 (sau 0 dacă s-a folosit FCC), astfel încât să formeze o suprafaţă dreptunghiulară. În suprafeţele extinse se încearcă includerea tuturor suprafeţelor elementare care au valoarea logică 1 (sau 0 în FCC). - Corespunzător unei suprafeţe extinse se obţine un produs elementar al variabilelor ce nu-şi schimbă valoarea pe această suprafaţă, dacă s-a folosit FCD, sau o sumă elementară a variabilelor ce nu-şi schimbă valoarea în FCC. Dacă nu este posibil ca o suprafaţă elementară să se alipească altei suprafeţe elementare, pentru aceasta se va scrie expresia ce corespunde mintermenului / maxtermenului. În unele cazuri, în practică, anumite combinaţii ale valorilor variabilelor de intrare nu apar niciodată în timp, funcţia numindu-se incomplet definită. Se poate considera că aceste combinaţii sunt nesemnificative pentru determinarea funcţiei logice de la ieşire. Se pot folosi aceste situaţii atribuind suprafeţelor elementare respective valoarea logică 1 sau 0 (R), în funcţie de modul în care se poate obţine o formă mai simplă pentru funcţia logică.
Subiectul 21. Asambloare, compilatoare, interpretoare
translatează instrucţiunile HLL în binar cod – maşină pentru a fi direct executate de către computer. Ele au devenit componente de bază într-un sistem de calcul, reflectând, de regulă, eficienţa cu care resursele hardware sunt exploatate de către programatori. Înainte de apariţia limbajelor de nivel înalt şi a compilatoarelor, programatorii foloseau limbajul de asamblare (ASM) şi asambloarele. Acest lucru avea, de asemenea, avantajul de a nu scrie programe direct în binar. Limbajul de asamblare posedă instrucţiuni cod-maşină ce poartă denumirea de Calculatorul şi sistemul de operare. Noţiuni introductive mnemonice (provin de la cuvintele în engleză ce specifică acţiunea lor) precum ADD, MOV, SUB sau JMP. Programul apare sub forma unei liste de astfel de mnemonice ce pot fi convertite uşor în limbajul de cod binar. Programele ce fac această translatare se numesc asambloare. Exemple de limbaje de asamblare sunt: MASM (Microsoft Assembler) şi TASM (Turbo Assembler – dezvoltat de firma Borland). Translatarea unui program HLL se poate face fie prin intermediul unui compilator, fie prin intermediul unui interpretor. Limbajele BASIC şi Java au pornit la început folosind interpretoare, dar acum există şi compilatoare pentru ele. Pentru a fi executat de către microprocesor, un program trebuie să parcurgă următoarele etape: - Editare (EDIT) - Compilare (COMPILE) - Editare de legături (LINK) - Încărcare în memorie (LOAD) Interpretoarele oferă o alternativă pentru a rula programe scrise într-un limbaj înalt de programare. În loc de a translata instrucţiunile de nivel înalt în cod maşină şi de a crea un program executabil, interpretorul citeşte instrucţiunile de nivel înalt una câte una şi le execută folosind o bibliotecă proprie de rutine. În acest mod, codul executabil nu este generat din codul sursă ci este conţinut în cadrul interpretorului. Interpretorul "vede" codul sursă HLL ca date de intrare care trebuie analizate şi apoi trebuie procesate conform semnificaţiei lor. Avantajele folosirii unui interpretor sunt: pornirea rapidă şi aparenta lipsă a complexităţii legate de compilare şi editare de legături. Dezavantajul este că operează foarte lent; programele compilate au fost întotdeauna superioare programelor interpretate. Este ceva obişnuit ca interpretoarele să convertească instrucţiunile de intrare într-o formă intermediară alcătuită din anumite simboluri, înainte de a se lua o decizie asupra acţiunilor ce vor fi executate. Simbolurile generate sunt apoi trecute unui decodificator care va selecta rutina corespunzătoare ce va fi executată. Uneori interpretorul este văzut ca o "maşină virtuală" deoarece se comportă într-un fel ca o componentă hardware: citeşte instrucţiuni pe rând şi se supune lor. Interpretoarele apropie nivelul execuţiei instrucţiunilor de nivelul programului conceput în limbajul de nivel înalt. Compilatoarele
Subiectul 22. Microprocesorul. Ciclul fetch-decode-execute
reprezintă unitatea centrală de procesare (UCP) a unui calculator, componentă ultracompactă şi de o importanţă majoră; alegerea acesteia determină limitele performanţei şi preţul sistemului de calcul. În zilele noastre, majoritatea microprocesoarelor care rulează software pentru calculatoare personale sunt variante îmbunătăţite ale vechiului procesor 8086 şi au la bază arhitectura x86. Ciclul fetch-execute reprezintă procesul prin care microprocesorul preia din memoria în care este stocată programul următoarea instrucţiune ce va fi executată, o decodifică şi execută operaţia pe care această instrucţiune o reprezintă. I. Etapa fetch este aproximativ identică pentru toate tipurile de instrucţiuni. Paşii urmaţi de microprocesor în această etapă sunt: a) adresa din registrul pointer de instrucţiune (IP) este copiată pe magistrala de adrese de memorie de unde este transmisă în registrul RAM (Registrul de Acces la Memorie); b) pointerul de instrucţiune este incrementat (IP++), indicând adresa de memorie a următoarei instrucţiuni ce va fi executată; c) se selectează locaţia de memorie şi se copiază conţinutul acesteia în magistrala de date; d) procesorul copiază codul instrucţiunii din magistrala de date în registrul de instrucţiune; e) începe procesul de decodificare a instrucţiunii. II. Etapa execute: Pasii urmati de microprocesor sunt: a) conţinutul registrului pointer de instrucţiune (IP) este copiat pe magistrala de adrese de memorie de unde este transmis în registrul RAM (Registrul de Acces la Memorie); b) pointerul de instrucţiune este incrementat (IP++); c) valoarea selectată din memorie (1234H) este copiată pe magistrala de date; d) procesorul copiază valoarea de pe magistrala de date în registrul AX. Microprocesorul
Subiectul 23. Adrese efective. Adrese segmentate.
Proprietăţile regiştrilor de segment (figura 3.6) sunt în strânsă legătură cu noţiunea de segmentare a memoriei. Premisa de la care se pleacă este următoarea: 8086 este capabil să adreseze 1MB de memorie, astfel că sunt necesare adrese pe 20 de biţi pentru a cuprinde toate locaţiile din spaţiul de 1 MB de memorie. Totuşi, registrele utilizate sunt registre pe 16 biţi, deci a trebuit să se găsească o soluţie pentru această problemă. Soluţia găsită se numeşte segmentarea memoriei; în acest caz memoria de 1MB este împărţită în 16 segmente de câte 64 KB (16*64 KB = 1024 KB =1 MB). Noţiunea de segmentare a memoriei presupune utilizarea unor adrese de memorie formate din două părţi. Prima parte reprezintă adresa segmentului iar cea de-a doua porţiune reprezintă adresa de deplasament sau offset-ul.
Fiecare pointer de memorie pe 16 biţi este combinat cu conţinutul unui registru de segment pe 16 biţi pentru a forma o adresă completă pe 20 de biţi. Adresa de segment împreună cu adresa de deplasament sunt combinate în felul următor: valoarea de segment este deplasată la stânga cu 4 biţi (înmulţită cu 16 = 2 4) şi apoi adunată cu valoarea adresei de deplasament.Adresa astfel construită se numeşte adresă efectivă; fiind o adresă pe 20 de biţi poate accesa 220 octeţi de memorie, adică 1 MB de memorie. Construirea adresei efective este prezentată mai jos.
Subiectul 24. Registrii microprocesorului
Regiştrii (sau registrele) microprocesorului reprezintă locaţii de memorie speciale aflate direct pe cip; din această cauză reprezintă cel mai rapid tip de memorie. Alt lucru deosebit legat de regiştri este faptul că fiecare dintre aceştia au un scop bine precizat, oferind anumite funcţionalităţi speciale, unice. Există patru mari categorii de regiştri: regiştrii de uz general, registrul indicatorilor de stare ( flags), regiştrii de segment şi registrul pointer de instrucţiune. Regiştrii de uz general sunt regiştrii pe 16 biţi pentru microprocesorul 8086, iar de la procesorul 80386 încoace au devenit regiştrii pe 32 de biţi, denumiţi, respectiv: EAX, EBX, ECX, EDX, ESP, EBP, EDI, ESI (litera E provine de la Extended – extins în engleză). Cei mai puţin semnificativi 8 biţi formează respectiv regiştrii AL, BL, CL, DL, iar cei mai semnificativi 8 biţi ai aceloraşi regiştrii formează regiştrii AH, BH, CH, DH. - registrul AX: registrul accumulator, implicat in inmultiri/impartiri, utilizat pentru input/output, accesibil partial (AH/AL). - registrul BX: Stocheaza adrese pentru accesul la structuri de date. - registrul CX: contor, rol special la LOOP. - registrul DX: utilizat in operatii de intrare/iesire, utilizat pentru inmultiri/impartiri. - registrul SI: utilizat ca BX pentru referirea unor adrese de memorie, utilizat pentru instructiuni automate pe siruri de bytes (LODSB) ca index al sursei, segmentul va fi DS. - registrul DI: utilizat ca BX pentru referirea unor adrese de memorie, utilizat pentru instructiuni automate pe siruri de bytes (LODSB) ca index al destinatiei, segmentul va fi ES. - registrul BP: stiva este o structura de memorie LIFO, BP un pointer de memorie in interiorul SS(stack segment), util pentru utilizarea de subprograme. - registul SP: contine adresa primului element disponibil din segmentul de stiva. Registrul pointer de instructiuni: IP - Stocheaza adresa urmatoarei instructiuni care trebuie executata, poate fi manipulat pentru a obtine flow control, si, in mod normal, instructiunea este la adresa imediat urmatoare. Registrul indicatorilor de stare (FLAGS): - C (Carry) indică apariţia unei cifre binare de transport în cazul unei adunări sau împrumut în cazul unei scăderi; - O (Overflow) apare în urma unei operaţii aritmetice. Dacă este setat, înseamnă că rezultatul nu încape în operandul destinaţie; - Z (Zero) indică faptul că rezultatul unei operaţii aritmetice sau logice este zero; - S (Sign) indică semnul rezultatului unei operaţii aritmetice; - D (Direction) – când este zero, procesarea elementelor şirului se face de la adresa mai mică la cea mai mare, în caz contrar este invers; - I (Interrupt) controlează posibilitatea microprocesorului de a răspunde la evenimente externe (apeluri de întrerupere); - T (Trap) este folosit de programele de depanare (de tip debugger), activând sau nu posibilitatea execuţiei programului pas cu pas. Dacă este setat, UCP întrerupe fiecare instrucţiune, lăsând programul depanator să execute programul respectiv pas cu pas; - A (Auxiliary carry) suportă operaţii în codul BCD. Majoritatea programelor nu oferă suport pentru reprezentarea numerelor în acest format, de aceea se utilizează foarte rar; - P (Parity) este setat în conformitate cu paritatea biţilor cei mai puţin semnificativi ai unei operaţii cu date. Astfel, dacă rezultatul unei operaţii conţine un număr par de biţi 1, acest indicator este setat. Registrii de segment: CS – segmentul de cod, DS – segmentul de date, ES – un segment oarecare, SS – segmentul de stiva, GS, FS.
Subiectul 25. Reprezentarea datelor în memorie. Formatele Little Endian si Big Endian
Modalitatea de aranjare a datelor (reprezentate pe mai mulţi octeţi) în memoria calculatorului nu este aceeaşi pentru toate tipurile de microprocesoare. Iniţial, Intel a stabilit o convenţie de reprezentare a datelor de dimensiune de 16 biţi (2 octeţi) prin împărţirea în doi octeţi şi stocarea în memorie întâi a octetului cel mai puţin semnificativ şi apoi a octetului CMSO. Această convenţie a luat numele de Little-Endian. Mai târziu, Motorola a dorit să schimbe această modalitate de stocare a datelor pe 16 biţi, raţionând în mod invers: se stochează mai întâi octetul cel mai semnificativ şi după aceea octetul mai puţin semnificativ. Această nouă convenţie a fost denumită Big-Endian. Această convenţie are avantajul că reprezentarea datelor în memorie este identică, de fapt, cu aceea a scrierii obişnuite a numerelor, numită şi ordinea de tipărire („print order”). Citirea unui fişier stocat prin folosirea convenţiei Little-Endian pe un calculator ce utilizează Big-Endian va fi însă imposibilă. De asemenea, atunci când se transferă fişiere ce conţin date numerice de pe un PC pe un calculator UNIX poate aparea problema interschimbarii octetilor; in acest sens pe UNIX exista un program intitulat dd care face conversia intre cele 2 formate. O altă diferenţă apare, de regulă, la transferul unui fişier text de pe un calculator UNIX pe un PC sau invers. Acest lucru se întâmplă datorită caracterului utilizat pentru marcarea sfârşitului de linie. Aplicaţiile de pe calculatoarele PC folosesc caracterul ^M (CR – Carriage Return – Retur de car) în timp ce aplicaţiile de pe UNIX utilizează caracterul ^J (LF – Line Feed – Linie nouă). Reprezentarea in memorie la Motorola: B1 B2 B3 B4
B5
B6
B7
B8
B4
B3
B2
B1
Reprezentarea in memorie la Intel: B8
B7
B6
B5
Subiectul 26. Memoria secundara
Datorită faptului că memoria RAM este foarte scumpă şi este o memorie volatilă, pentru stocarea pentru mai mult timp (nu numai pe parcursul funcţionării calculatorului) a datelor s-a căutat utilizarea unui alt tip de memorie. Acest tip de memorie este memoria externă (sau memoria secundară), care este o memorie relativ rapidă, fiabilă, ieftină, de mare capacitate şi, pe deasupra, ne-volatilă. Un calculator nu poate executa un program decât dacă acesta este încărcat în memoria principală, din acest punct de vedere, memoria principală reprezintă memoria utilizată pentru stocarea programului ce se execută şi a datelor ce sunt prelucrate iar memoria secundară reprezintă memoria folosită pentru stocarea pe termen lung a datelor.
Capacitatea maxima de stocare a unui HD se poate calcula astfel: C = Npl * Np * Ns * Ds, unde: Npl = numărul de platane ale hard/discului; Np = numărul de piste de pe un platan; Ns = numărul de sectoare de pe o pistă; Ds = dimensiunea unui sector. Compact Disk, Read Only Memory Reprezinta un tip foarte popular de mediu de stocare movibil ce a fost conceput iniţ ial pentru înmagazinare de date audio dar care s-a extins rapid în lumea calculatoarelor personale ca suport pentru stocarea datelor. Succesul CD-ROM-ului poate fi atribuit capacităţ ii de stocare, durităţ ii şi, nu în ultimul rând, preţ ului redus. Datorită r ăspândirii acestui format de stocare, unităţ ile de CD-ROM reprezintă echipamente standard prezente pe majoritatea calculatoarelor personale. O unitate CD-ROM este alcătuită dintr-un motor, ansamblu laser, mecanism de rotaţ ie şi circuite electronice. Motorul unităţ ii învârte motorul CD-ROM-ului la viteza necesar ă astfel încât ansamblul laser să poată citi informaţ ia. Ansamblul laser constă dintr-un laser şi lentile optice; acest ansamblu citeşte CD-ROM-ul în timp ce acesta se roteşte. Mecanismul de rotaţ ie este un motor ce deplasează lentilele în poziţ ia corectă pentru a accesa o zonă anume a CD-ROM-ului. Circuitele electronice asigur ă transferul informaţ iei citite de pe CD-ROM către calculator prin intermediul unei magistrale.