Documente Academic
Documente Profesional
Documente Cultură
Lecţii ASC
Scurt istoric
Trebuie remarcat deosebirea între cei doi termeni, care în limba română sunt cunoscuţi ca maşina
de calcul şi sistem de calcul echivalent cu calculator programabil sau mai simplu, calculator.
Pentru acestea, în limba engleză se utilizează termenii de calculator, respectiv computer (cu
pronunţia engleză). Prima noţiune reprezintă o maşină de socotit, sau calculat, pentru tipuri de
operaţii stabilite dinainte, aşa cum este un calculator de buzunar, ne-programabil. Cea de-a doua
noţiune reprezintă o maşină secvenţială, a cărei funcţionare este guvernată de un program format
din instrucţiuni aritmetice sau logice, eventual chiar cu caracter simbolic sau cu elemente de
inteligenţă artificială.
Primele încercări teoretice de a concepe o maşină de calcul sunt datorate lui Leibnitz şi Pascal.
Primul proiect nerealizat, dar care a evidenţiat bazele structurii unui calculator îi aparţine lui
Charles Babbage, încă din secolul IX (1830). Mult mai târziu, în 1937 Howard Aiken de la
Universitatea Harvard construieşte primul sistem de calcul (deci programabil) denumit
“Calculator cu secvenţă de comandă automată”, realizarea având mai mult un caracter
demonstrativ.
În apropierea celui de-al doilea război mondial, necesităţile calcul şi de prelucrare a informaţiei
sunt accelerate de dezvoltarea tehnologiei şi chiar de imperativele apropierii războiului. Astfel, în
acest scop, în SUA au fost create colective specializate, şi finanţate care au pus la punct între
1939 şi 1944 primul calculator, în sensul în care este acceptat astăzi, denumit Mark1. Acesta era
realizat cu elemente de comutaţie electro-mecanice (comutatoare cu relee) şi avea performanţe
foarte reduse. În perioada imediat următoare a fost realizat primul calculator electronic denumit
ENIAC, cu titulatura engleză: “Electronic Numerical Integrator and Comparator”, determinată de
funcţiile pentru care era destinat. Acesta conţinea 18000 de tuburi cu vid electronice, realiza 5000
de adunări pe secundă, avea o memorie de 20 de numere cu reprezentare zecimală şi era
programat cu ajutorul a 6000 de comutatoare mecanice.
Dezvoltarea ulterioară a calculatoarelor a fost marcată de caracterul de universalitate dat de
structura concepută de matematicianul John von Neumann, care s-a implicat şi în proiectele
viitoare. Aceasta permitea dezvoltarea unei funcţionalităţi flexibile, destinată prelucrării
informaţiei (datelor) într-o manieră generalizată şi universală, păstrându-şi actualitatea până în
prezent. Astfel, un sistem de calcul trebuie să conţină unităţi funcţionale care să asigure
următoarele funcţii: 1) preluarea datelor de intrare (dispozitive de intrare); 2) memorarea datelor
(memoria); 3) prelucrarea datelor şi calculul rezultatelor (unitatea de calcul aritmetic şi logic); 4)
transmisia la ieşire a rezultatelor (dispozitive de ieşire); 5) comanda întregului sistem (unitatea de
comandă). Aceste concepte au permis realizarea calculatorului EDVAC şi apoi, în anul 1951,
prima formă comercială de calculator, sub denumirea de UNIVAC (Universal Automatic
Computer).
În istoria claculatoarelor acestea au căpătat diferite forme şi moduri de realizare, în funcţie de
modurile de lucru şi mijloacele tehnice disponibile la momentul respectiv. Astfel, perioada anilor
1960-1970 a fost dominată de calculatoarele denumite “main frame” realizate cu tranzistori sau
circuite integrate simple a căror configuraţie conţinea mai multe dulapuri şi ocupa o sală răcită cu
instalaţii de climatizare. Pe măsura miniaturizării dispozitivelor electronice au fost dezvoltate
apoi minisistemele (1970-1980) cu o configuraţie concentrată într-unul sau mai multe dulapuri de
format mic, până la calculatoarele personale, staţiile de lucru sau serverele din prezent.
ASC – Dan Olaru
Evoluţia calculatoarelor poate fi clasificată, mai ales urmărind considerente tehnologice, atât
hardware cât şi software în mai multe generaţii de calculatoare, punctând anumite caracteristici
pentru: hardware (HD), software (SW), memorie (MM) şi viteza de procesare (VP):
Generaţia I (1946-1956): HW – relee şi tuburi electronice; SW – program cablat (forma
neintegrată a memoriilor ROM), programare în cod maşină şi limbaj de asamblare; MM – 2 KB
(kilo-bytes sau kilo-octeţi); VP – 10000 operaţii/sec.
Generaţia II (1957-1963): HW – tranzistori, memorii cu innele de ferită, cablaj imprimat; SW –
programare în limbaj ALGOL, FORTRAN, etc.; MM – 32KB; VP – 200000 op/sec.
Generaţia III (1964-1981): HW – circuite integrate, cablaj multistrat, discuri magnetice mai
performante, microprocesoare (µP) simple; SW – programare în limbaje de nivel foarte înalt,
programare structurată, baze de date, prelucrări grafice; MM – 1-2 MB; VP – 5M Instr/sec.
Generaţia IV (1982-1989): HW – circuite VLSI, sisteme distribuite, µP pe 16/32 biţi; SW –
pachete de programe (medii de programare), sisteme expert, programe orientate pe obiecte, baze
relaţionale; MM – 8-10MB; VP – 30 M Instr/sec.
Generaţia V (în dezvoltare): HW – circuite ULSI (ultra large scale integration), eventual
configuraţii 3D; arhitecturi paralele, reţele neorale; SW – limbaje concurente dezvoltate,
programare funcţională, programare simbolică, baze de cunoştinţe, sisteme expert evoluate; MM
– sute, chiar mii MB; VP – 1G, 1T instr/sec.
Puterea de calcul, caracteristică unui anumit sistem este determinată de mai mulţi factori, printre
care pot fi enumeraţi:
- frecvenţa maximă de lucru a dispozitivelor de comutaţie şi a căilor de date (MHz – GHz);
- numărul de biţi ai unui cuvânt (32 – 64);
- arhitectura unităţii centrale, a căilor de comunicaţie şi a dispozitivelor periferice;
- volumul de memorie şi viteza de acces a acesteia (MB – GB);
- performanţele de calcul cu virgulă flotantă (Mflop).
Înţelegerea noţiunii de informaţie este foarte importantă. Din punct de vedre fizic aceasta este
reprezentată de stările maşinii, deci simbolic poate fi reprezintată ca o mulţime de cifre binare.
Acesta, la rândul ei poate fi structurată în cuvinte (grupuri de cifre binare). Cu ajutorul acestora
se pot reprezenta (codifica) simboluri, texte, numere, grafice, programe, funcţii, etc. Sistemul de
calcul poate realiza funcţii diferite, referitoare la memorarea, transmisia şi prelucrarea
informaţiei. Aceasta poate aparţine, de exemplu, domeniului ingineresc (referitoare la calcule,
proiectare, etc.) sau domeniului informatic (referitoare la prelucrarea fişelor, înregistrărilor de
date, etc.).
Dacă informaţia este reprezentată binar, deci cu cifre binare (bit, prescurtare de la binary digit),
prelucrarea acesteia se bazează pe operatori binari (dacă au două variabile de intrare), sau unari
(în cazul unei singure variabile). Cifrele binare pot reprezenta numere (câte obiecte are o
mulţime), dar şi valoarea de adevăr a unei propoziţii logice. De exemplu, se poate spune că dacă
o afirmaţie este adevărată, are valoarea logică “1”, iar dacă este falsă are valoarea logică “0”. De
aceea aceşti operatori se mai numesc operatori logici, deşi ei pot realiza şi funcţii aritmetice cu
numere sau cifre reprezentate binar.
Atunci când n+1 cifre binare reprezintă un număr (deci în baza 2), scris sub forma:
cncn-1…c3c2c0, valoarea zecimală a acestuia poate fi calculată astfel:
Din punct de vedere abstract (simbolic), tipurile şi caracteristicile operatorilor binari sunt descrise
de Algebra lui Boole. Printre operatorii binari (logici) simpli pot fi enumeraţi: non, şi, sau, şi-nu,
sau-nu, etc. Datorită corespondenţei cu teoria mulţimilor, operatorul şi poate fi simbolizat cu “∧”,
iar operatorul sau poate fi simbolizat cu “∨”. Simbolul “∧” a fost ales datorită similitudinii cu
noţiunea de “intersecţie de mulţimi” când elementul rezultant aparţine şi unei mulţimi şi
celeilalte. Simbolul “∨” a fost ales datorită similitudinii cu noţiunea de “reuniune de mulţimi”
când elementul rezultant aparţine sau unei mulţimi sau celeilalte.
Aşa cum s-a spus aceşti operatori pot avea o semnificaţie numerică sau logică. Astfel, avem
următoarea corespondenţă:
Dacă valoarea ieşirii depinde exclusiv de valorile instantanee ale intrărilor, se spune că operatorul
este de tip combinaţional. Dacă valoarea ieşirii depinde şi de evoluţia precedentă a intrărilor se
spune că operatorul este de tip secvenţial. Este interesant faptul că operatorii secvenţiali pot fi
construiţi pe baza operatorilor combinaţionali.
Operatorii pot fi complet defeiniţi de tabelul de adevăr asociat. Cel mai simplu caz este cel al
operatorilor combinaţionali, când sunt descrise valorile ieşirilor (out) pentru toate combinaţiile de
ASC – Dan Olaru
la intrări. Acestea pot fi parcurse dacă se folosesc chiar codurile binare ale numerelor naturale.
De exemplu pentru operatorii şi (AND), respectiv sau (OR) avem:
Se observă că, atunci când semnalul la una dintre intrări este 0 logic (jos), starea ieşirii va fi
forţată în starea jos (trecută în mod necondiţionat în starea jos). Dacă însă semnalul la o intrare
este în starea logică 1, starea ieşirii va fi determinată în mod direct de cea de-a doua intrare şi
deci poarta NAND se va comporta ca un circuit inversor. Se poate spune astfel, că acest tip de
ASC – Dan Olaru
operator, are intrările active pe zero. Acest mod de interpretare se poate extinde, în general,
pentru orice tip de dispozitiv, schemă sau circuit. Astfel, starea logică a unui semnal de intrare
care duce la acţiuni sau schimbări de stare semnificative va fi considerată ca stare activă. De
exemplu, dacă scrierea unei memorii (memorarea datelor) are loc atunci când semnalul de
comandă (WRITE) este 0, atunci se spune că acesta este activ pe zero şi se notează prescurtat în
schemă cu W .
Având în vedere că un operator (poartă) logic este realizat cu componente electronice, poate fi
caracterizat de mărimi electrice. Aceste dispozitive trebuie alimentate de la o sursă de tensiune
(5V, de obicei), se comportă la ieşire ca o sursă de tensiune (ne-ideală) şi pentru intrările,
comandate în tensiune, sunt caracterizate de anumite impedanţe. Dacă o sursă de tensiune este
ideală, impedanţa ei ar fi nulă, deci ar putea susţine un curent de valoare oricăt de mare. În
realitate ieşirea unei porţi nu poate comanda oricâte intrări ale altor porţi. De aceea, pentru un
anumit tip de poartă, este definit un număr maxim de porţi care pot fi comandate (fan-out).
Aceste mărimi electrice definesc, alături de timpul de propagare, performanţele porţii. Timpul de
propagare se referă la timpul necesar stabilizării tensiunii de ieşire, după ce la intrări a fost
schimbat nivelul de tensiune. Acest timp va caracteriza viteza de lucru a calculatorului.
Impedanţele de intrare determină curentul absorbit, şi implicit puterea absorbită. Structura porţii
trebuie să conţină tranzistori, care joacă rolul dispozitive de amplificare (active) pentru a
compensa atenuarea semnalului de tensiune care se transmite prin aceasta. Aceştia necesită la
rândul lor putere consumată, uneori chiar în lipsa tranziţiilor. Puterea consumată devine un
parametru deosebit de important atunci când numărul de dispozitive integrate este foarte mare,
depăşind, în prezent, ordinul milioanelor.
Trebuie menţionat că aceste dispozitive nu trebuie să funcţioneze în regim liniar, adică semnalul
de ieşire să depindă proporţional de semnalul de intrare. Pentru a se mări imunitatea la zgomot,
adică la semnale perturbatoare, suprapuse peste semnalul util, starea ieşirii trebuie să se schimbe
numai dacă tensiunea de la intrări depăşeşte anumite nivele. La ieşire, nivelul de tensiune trebuie
să corespundă nivelului standard pentru starea “sus” (high) sau “jos”(low).
Rezultă că implementarea (realizarea fizică) a unui operator (poartă) într-o formă ideală trebuie
să îndeplinească anumite condiţii oarecum contradictorii: putere consumată aproape nulă, viteză
de propagare cât mai mare, imunitate la zgomot cât mai mare. Acest deziderat a fost atins într-o
anumită măsură de circuitele integrate VLSI (very large scale integration) bazate pe tehnologia
C-MOS (complementary metal-oxide-semiconductor field-effect-transistor).
este utilizat un operator de tip NAND (ŞI-NU), cu o intrare fixată la 1 logic, se poate obţine
operatorul de negaţie, datorită echivalenţei:
echivalent cu:
1
Funcţia ŞI se realizează simplu prin negarea ieşirii operatorului NAND:
1 AB
A
B __
AB
Relaţiile De Morgan, permit transformarea sumelor în produse şi invers, ca în exemplul de mai
jos, considerând nişte variabile binare oarecare a şi b:
a+ b = a⋅ b respectiv a⋅ b = a+ b
Astfel, ţinând cont că dubla negaţie nu are nici un efect, expresia de la ieşirea unui operator
NAND poate fi pusă sub forma:
A⋅ B = A+ B = A+ B
Rezultă că operatorul NAND joacă rolul unui operator SAU pentru variabilele de intrare negate.
Astfel, pentru a realiza un operator SAU mai este necesară negarea intrărilor:
_
A
A
1 _ A+B
1 B
B
Din cele arătate mai sus decurge concluzia importantă că implementarea unui circuit logic
oarecare se poate realiza cu un singurtip de operator (în cazul nostru de tip NAND).
Este interesant de remarcat că dacă într-o configuraţie oarecare avem mai multe nivele de
operatori aceştia realizează funcţii ŞI, respectiv SAU, în mod alternativ. Astfel, în exemplul de
mai jos, care conţine două nivele de operatori de tip NAND, operatorii de pe primul nivel joacă
rolul de operatori ŞI, iar cei de pe nivelul următor joacă rolul de operatori SAU:
__
AB
A
B __ AB ⋅ CD = AB + CD
C CD
D
Aceasta se poate justifica dacă expresia de la ieşirea operatorului combinat este adusă la o formă
de tip sumă, cu ajutorul relaţiilor De Morgan. Considerând ca intrări variabilele AB şi CD , şi
ţinând cont că dubla negaţie nu are nici un efect, se obţine:
( ) (
AB ⋅ CD = AB ⋅ CD = AB + CD = AB + CD )
2. Principii de funcţionare pentru un sistem de calcul
Aşa cum s-a menţionat un sistem de calcul trebuie să realizeze funcţii referitoare la memorarea,
trasmisia şi prelucrarea informaţiei. Deci, informaţia trebuie structurată şi vehiculată între
ASC – Dan Olaru
diferitele unităţi (părţi componente) ale calculatorului în vederea memorării sau prelucrării ei.
Rezultă că structura unui calculator trebuie să conţină căi de comunicaţie şi dispozitive
specializate. Structura de comunicaţie principală este numită magistrală (BUS) şi trebuie să facă
legătura cu păţile principale ale calculatorului, destinate comunicaţiei cu exteriorul, memorării
programelor sau datelor şi prelucrării informaţiei.
În forma simplificată, această configuraţie poartă denumirea de “maşină von Neumann” după
numele unuia dintre pionierii în domeniul teoriei calculatoarelor, şi are forma:
În cazul unui calculator personal (PC), magistrala este realizată la nivelul plăcii de bază (mother-
board), rolul unităţii centrale este jucat de propcesor (micro-procesor), memoria principală se
găseşte concentrată la nivelul RAM-ului (random-access-memory) şi este extinsă la nivelului
discurilor (hard-disk) iar dispozitivele de intrare-ieşire sunt constituite de tastatură şi monitor
(diplay), din unităţile de CD (DVD) şi floppy–disk, din dispozitivele grafice de intrare sau de
ieşire, de porturile de comunicaţie (paralel – pentru imprimantă, seial, USB, etc.).
Magistrala asigură transmisia datelor între diferitele dispozitive, de regulă, într-o manieră
bidirecţională, adică atât într-un sens, cât şi în celălalt. Acest mod de lucru este oarecum firesc în
cazul comunicaţiei dintre procesor şi memorie, dar se dovedeşte util chiar în cazul dispozitivelor
de intrare sau de ieşire.
Unitatea centrală conţine setul de operatori, necesari prelucrării datelor, dar şi dispozitive de
memorie locală, necesare funcţionării sau creşterii performanţelor (ca memoria Cache, de
exemplu).
Memoria RAM, implementată cu circuite integrate este volatilă (nu îşi conservă conţinutul la
dispariţia tensiunii de alimentare) şi are timp de acces redus, totuşi relativ mare faţă de memoria
Cache şi registrele procesorului. Memoria “de masă” (cu capacitate foarte) mare se află la nivelul
discului magnetic dur (hard-disk), este nevolatilă (dipolii magnetici îşi conservă starea în lipsa
tensiunii de alimentare) şi are timp de acces relativ ridicat faţă de memoria RAM..
Dispozitivele de intrare ieşire au cunoscut de-a lungul evoluţiei calculatoarelor o evoluţie
dinamică şi interesantă, începând cu dispozitivele cu bandă perforată sau disc flexibil şi
îndreptându-se către dispozitive optice (CD, DVD) sau memorii Flash.
Deşi unitatea elementară de informaţie este reprezentată de un bit este mai firesc şi eficient ca la
nivelul calculatorului informaţia să fie prelucrată şi vehiculată sub formă de “cuvinte” structurate,
în funcţie de tipul calculatorului pe un număr de 8, 16, 32, sau 64 de biţi. Numărul de biţi ales
pentru reprezentarea unui cuvânt este de regulă o putere a lui 2 (8=2 3, 16=24, 32=25, 64=26).
ASC – Dan Olaru
Alături de bit (o cifră binară), octetul (cuvântul de 8 biţi) este larg utilizat ca unitate intermediară
de reprezentare a informaţiei.
Este important ca numarul de biţi ai unui cuvânt să fie o putere a lui pentru a avea o mai bună
corespondenţă între valoarea unui cuvânt şi modul de selecţie a biţilor acestuia. Selecţia se poate
face cu circuite de tip selector sau decodificator (DEC), reprezentat în figura de mai jos. Acest
circuit îşi activează: ieşirile B0, B1 sau B2 în funcţie de valoarea codului reprezentat de cele 8
intrări: A0,…, A7. Astfel, dacă la intrări avem codul 101, va fi activată ieşirea a 5-a, adică B 4,
corespunzătoare valorii: 1 ⋅ 2 2 + 0 ⋅ 21 + 1 ⋅ 2 0 = 4 + 1 = 5
B0
A0
A1
DEC
A2 B7
Este evident că numărul de ieşiri ale unui decodificator cu n intrări va fi egal cu 2n. În structura
circuitelor unui calculator, în mod frecvent este folosit procesul de selecţie (pentru adresarea
memoriei, selecţia liniilor magistralei, transferul de date în cadrul procesorului, etc.). Deoarece
căile de date sunt grupate la nivel de cuvânt, trebuie să existe o corespondenţă între numărul căii
de date şi bitul corespunzător. Rezultă că este firesc ca numărul de selecţii posibile să corespundă
unei puteri a lui doi. Altfel, o parte din circuitele şi ieşirile decodificatoarelor vor rămâne
nefolosite.
Ieşire Intrare
date date
Căi de Căi de
intrare MUX ieşire
DMUX
Selecţie Selecţie
Pentru ca un operator să poată calcula rezultatul corespunzător a două variabile, acestea trebuie să
corespundă semnalelor (valorilor tensiunilor) de la intrările dispozitivului electronic respectiv.
Deci, pentru a obţine un rezultat corect este necesar ca atât intrările dispozitivului (operatorului)
cât şi ieşirile acestuia să se găsească într-o stare stabilă. Rezultă că, în afara operatorilor propriu-
zişi, unitatea centrală trebuie să conţină elemente de memorie care să asigure, pe de o parte intrări
stabile şi pe de altă parte reţinerea (stocarea) rezultatului în intervalul de stabilitate. Deci, este
necesar ca unitatea centrală să conţină, în afara operatorilor, elemente de memorie (registre de
memorie) care să furnizeze datele la intrarea operatorilor şi să memoreze rezultatele de la ieşire.
Dispozitivele periferice, indiferent pe ce principiu lucrează, din punctul de vedere al comunicaţiei
cu procesorul, sunt văzute sau identificate ca locaţii de memorie, sub forma aşa-ziselor porturi de
comunicaţie, specifice fiecărui dispozitiv. Acestea, de fapt, sunt registre de memorie care pot fi
citite, scrise sau şi scrise, şi scrise.
Fiecare dispozitiv periferic (de intrare/ieşire) conţine pe de o parte o structură constructivă
specifică (tastatură, monitor, imprimantă, etc.), aflată, de regulă, la distanţă de calculatorul
propriu-zis şi o structură electronică dedicată, care asigură comunicaţia cu magistrala (cuplor,
interfaţă, etc.). Uneori pot fi conectate mai multe unităţi identice, cuplate pe o magistrală
dedicată, la acelaşi cuplor cum este cazul unităţilor de hard-disk şi a celor de CD/DVD (Fig.*)
sau chiar al plăcilor de memorie RAM.
ASC – Dan Olaru
Unitatea
Cuplor
centrală Cuplor Cuplor
memorie
RAM discuri (HD) CD, DVD
Magistrala principală
Magistrala de comunicaţie
iar celălal ca un receptor. Dacă emiţătorul este o sursă de tensiune, acesta va debita curent către
receptor.
În cazul magistralei nu este importantă energia, ci informaţia trasmisă. Deci, în acest caz
transmiţătorul trebuie să furnuzeze suficientă energie (de fapt suficient curent, pentru că
emiţătorul se comportă ca o sursă de tensiune) pentru ca starea receptorului să se schimbe. Deci
puterea transmisă pe magistrală trebuie să fie capabilă să comande receptorul într-o manieră
corectă, deci să asigure imunitatea la zgomotul electric care apare datorită cuplajelor capacitive
sau inductive cu alte surse.
Dacă un dispozitiv nu este capabil să susţină curentul cerut este necesar ca pe linia de transmisie
să fie intercalat un amplificator de curent (buffer).
Spre deosebire de o linie electrică care transmite semnale continui, transmisia pe magistrală se
realizează în impulsuri, într-o manieră secvenţială. Adică, la anumite momente de timp
transmiţătorul îşi schimbă starea ieşirii, având drept consecinţă schimbarea stării receptorului.
Această comunicaţie trebuie să dureze un timp cât mai scurt. De aceea apariţia acestui eveniment
(schimbarea de stare) trebuie memorată la nivelul receptorului, permiţând astfel ca emiţătorul să
nu mai fie activ (să nu mai necesite semnal de comandă). Astfel circuitele de comandă ale
emiţătorului pot realiza alte funcţii. În plus, pentru ca circuitele de comandă ale emiţătorului să
nu depindă de viteza de transmisie pe magistrală, informaţia (schimbarea de stare) furnizată
acestuia trebuie, la rândul ei, memorată la nivelul emiţătorului. Rezultă că dispozitivele care sunt
conectate la magistrală trebuie dotate cu circuire de memorare (registre de memorie tampon, sau
registre latch), atât la emisie cât şi la recepţie. Deci magistrala trebuie să asigure transmisia
informaţiei de schimbare de stare, de la emiţător la receptor. Starea unei linii (low sau high), de
fapt reprezintă semnificaţia unei cifre binare, 0 sau 1 (bit). În acest fel se poate spune că pe
magistrală sunt transmise date, purtătoare de informaţie. Astfel, starea dispozitivului emiţător este
transmisă receptorului. În realitate, pe magistrală se transmit simultan grupuri de stări (sau biţi),
corespunzătoare cuvintelor de date prin care este codificată informaţia. Deci, zona transmisiei de
date a magistralei conţine un număr de linii corespunzător lungimii cuvântului de date (8, 16,32,
64 de biţi).
Pentru ca dispozitivele conectate la magistrală să funcţioneze într-o manieră flexibilă, acestea
trebuie identificate, şi la un moment dat trebuie stabilită calitatea de emiţător sau receptor (pentru
că un anumit dispozitiv poate transmite sau primi date).
Identificarea dispozitivelor sau zonelor de memorie între care se realizează comunicaţia se face
prin codul de adresă. Pe liniile de adresă ale magistralei va fi trasmis un cod care va activa un
anumit dispozitiv, registru sau o anumită zonă (cuvânt sau locaţie) de memorie.
Stabilirea calităţii de emiţător sau receptor se face cu ajutorul unor semnale de control (comandă),
trasmise pe anumite linii speciale. Dispozitivul care controlează magistrala (secvenţa de
comunicaţie) poartă denumirea de master. Este posibil ca alt dispozitiv să ceară controlul
magistralei (deci să obţină calitatea de master).
Începerea unei secvenţe de comunicaţie impune ca magistrala să fie liberă. Dacă se impun
comunicaţii urgente sau datorate unor evenimente exterioare imprevizibile (asincrone), cererea de
comunicaţie este transmisă pe linii de comandă speciale (linii de întrerupere) către procesor, care
joacă rolul de master în majoritatea timpului.
Este posibil ca, la un moment dat, să existe mai multe cereri de întrerupere simultane. În acest
caz, trebuie stabilită care dintre comunicaţii va fi realizată prim, prin intermediul unui disapozitiv
numit arbitru de priorităţi.
ASC – Dan Olaru
Conexiuni interne
Latch
date
Linii adresă
Linii date
Linii comandă
Fiecare dispozitiv trebuie dotat cu registre Latch şi circuite electronice pentru transmisie şi
recepţie. Acestea sunt amplificatoare cu ieşirea pe magistrală, capabile să susţină curentul de
comandă a altor dispozitive. De asemenea trebuie dotat cu circuite receptoare, conectate cu
intrarea la linia magistralei.
Conexiunile la liniile de date trebuie să fie bidirecţionale pentru orice dispozitiv care transferă
date în ambele sensuri. Trebuie menţionat că datele transmise nu reprezintă numai informaţiile
necesare execuţiei programului, dar şi cele legate de starea sau comanda unui dispozitiv.
Conexiunea la liniile de adrese se face numai cu circuite de emisie în cazul dispozitivelor de tip
master şi cu circuite de recepţie pentru cele care nu au niciodată această calitate. Registrul de tip
latch se comportă ca un grup de celule de memorie corespunzătoare unui grup de biţi (cuvânt).
Întreaga structură a calculatorului se bazează pe celule de memorie care au capabilitatea de a
transmite date între ele. Acestea sunt organizate fie în cadrul unui banc de memorie (circuit
integrat utilizat numai ca memorie), fie sub forma registrelor prezente la nivelul procesorului sau
a altor dispozitive. Conexiunile se fac fie la magistrală, fie în interiorul dispozitivului. Fiecare
celulă conţine, de fapt o celula de tip latch şi circuite (amplificatoare) de emisie/recepţie.
nepermis. Rezultă că emiţătoarele trebuie realizate şi comandate astfel încât acest lucru să nu se
întâmple. Soluţia tehnică este utilizarea ieşirii cu trei stări (three state), şi anume: starea Jos (nivel
de tensiune scăzut), starea Sus (nivel de tensiune ridicat), ambele cu impedanţă redusă, deci
capabile să furnizeze sau să absoarbă curent, şi starea izolată (a treia stare) atunci când impedanţa
de ieşire este ridicată şi nu mai influenţează nivelul de tensiune al liniei.
Rezultă că transferul bidirecţional al informaţiei se poate realiza prin activarea, la un moment dat,
a unui singur circuit de emisie (având starea Sus sau Jos) şi dezactivarea celorlalte emiţătoare
conectate la linia respectivă, prin trecerea lor în starea a treia (izolată). Atunci când un
transmiţător este activ, poate avea loc o operaţie de scriere (write) într-o celulă de memorie, dacă,
bineînţeles există şi o comandă internă de memorare (scriere) pentru celula respectivă. În acest
caz se spune că în celula receptoare are loc o operaţie de citire (read). Atunci un circuit de tip
latch îşi schimă starea, conform cu nivelul de tensiune de la intrare.
Intrare date
Comandă
memorare
b0 b1 b2 b3 b4 b5 b6 b7
Ieşire date
Fig.*. Registru Latch (paralel) pentru 1 octet (byte)
Buffer
Conexiunea la
emisie-recepţie
magistrala internă Memorare (pt.magistrală)
recepţie Magistrala
calculatorului
(Magistrala
Latch recepţie externă)
Latch emisie
Conexiune
Memorare
internă
emisie
Comandă scriere
Pe magitrală
În mod obisnuit magistrala realizează comunicaţii bidirecţionale. Există totuşi cazuri când din
motive tehnice sau economice este mai avantajos ca transmisia de informaţie să se facă într-un
singur sens. În acest caz (magistrală de tip Daisy-chain), dispozitivele au intrări şi ieşiri separate
atât pentru emiţătorul şi receptorii liniei de adresă (EA, RA1, RA2, RA3) cât şi pentru emiţătorii şi
receptorii liniilor de date (ED1, ED2, ED3, ED4 şi RD1, RD2, RD3, RD4). O asemenea soluţie este
ASC – Dan Olaru
folosită uneori pentru dispozitivele conectate la acelaşi cuplor (sau interfaţă) cum ar fi unităţile de
memorie pe disc.
Linii de adrese
Linii de date
Dacă lungimea magistralei este scurtă în raport cu viteza de propagare a semnalului (şi
stabilizarea nivelului de tensiune), atunci se poate considera că transmisia stărilor este instantanee
şi că în secvenţa semnalelor sau comenzilor nu trebuie să fie introduse întârzieri, sau timpi de
aşteptare (magistrală sincronă).
Un caz special apare atunci când nu există întârzieri datorită propagării, dar viteza de răspuns a
anumitor circuite este mai redusă. De exemplu, timpul de memorare poate fi mai lung decât
timpul scurs între două schimbări de stare a procesorului. Când acest lucru este cunoscut,
cuplorul de memorie trebuie să introducă semnale de aşteptare (wait) care să prelungească starea
de la ieşirea procesorului.
Astfel, secvenţa de scriere în memorie (folosind semnalul de scriere Write) poate decurge ca în
Fig.*
În cazul când timpul de propagare pe magistrală este relativ mare, din punctul de vedere al
procesorului (sau dispozitivului emiţător), nu poate fi cunoscut cu precizie momentul când
semnalele sunt stabile la intrările unui dispozitiv. De exemplu, procesorul poate dezactiva
semnalul de scriere înainte ca acesta să se fi propagat până la intrarea memoriei. Atunci sunt
necesare conexiuni şi semnale suplimentare pentru confirmarea sosirii informaţiei de schimbare
de stare la nivelul receptoarelor (magistrală asincronă). În Fig.* este dat un exemplu simplificat
de magistrală cu protocol de tip hand shake (strângere de mână). Acesta este asemănător salutului
prin strângere de mână. Pentru aceasta sunt folosite semnalele de sincronizare suplimentare:
SendData, DataSent, DataAcepted, BusClear.
ASC – Dan Olaru
Send data
Data sent
Dispozitiv Dispozitiv
“master” Data acepted “slave”
Bus clear
Astfel, dispozitivul Master transmite semnalul de cerere de date SendData (“întinde mâna”).
Atunci când dispozitivul Slave primeşte acest semnal (după timpul de propagare respectiv)
validează (emite) datele pe liniile corespunzatoare şi răspunde cu semnalul DataSent (“întinde şi
el mâna”). Când semnalul DataSent ajunge (după un timp de propagare) la dispozitivul Master,
acesta ia la cunoştiinţă că datele sunt stabile la intrările lui şi îşi poate comanda circuitele Latch
pentru memorare. După aceasta datele nu mai sunt necesare la intrările lui şi este cazul să
înştinţeze dispozitivul transmiţător (care are calitatea de Slave) că acesta poate să elibereze
magistrala, adică să îşi comande ieşirile în starea a treia (de impedanţă mare). Astfel, dispozitivul
Master transmite semnalul DataAccepted (“îşi retrage mâna”). Atunci când dispozitivul Slave îl
primeşte, acesta va avea confirmarea că datele transmise au fost memorate şi eliberează
magistrala, odată cu transmiterea semnalului BusClear care înştinţează dispozitivul “master” că
poate utiliza magistrala. După receptionarea acestui semnal, eliberarea magistralei este
confirmată şi din acest moment Master-ul poate utiliza magistrala, activând emiţătoarele proprii,
care până atunci au fost menţinute în starea a treia.
Noţiunea de magistrală ocupată sau liberă se referă, pe de o parte la starea electrică a liniilor, iar
pe de altă, parte la existenţa unei secvenţe de comunicaţie. În primul caz, toate emiţătoarele
dispozitivelor conectate la magistrală sunt în starea a treia (izolată), potenţialul liniei este
“flotant”, adică este la discreţia oricărei surse de tensiune (emiţător) care poate fi activată. Deci,
în această stare, un dispozitiv poate commanda magistrala, dacă aceasta se doreste. În cel de-al
doilea caz, magistrala este considerată ocupată dacă o secvenţă de comunicaţie este în curs şi
liberă în situaţia contrară. În lipsa unor semnale speciale care să indice că există o asemenea
secvenţă, situaţia magistralei poate fi detectată fie prin analiza evoluţiei semnalelor electrice, fie
prin alocarea calităţii de Master unui singur dispozitiv, la un moment dat.
o procesare mai uşoară, numărul de conexiuni folosit reprezintă, de regulă, o putere a lui 2. De
exemplu, o magistrală care conţine 16 linii de adresă poate accesa: 216-1 = 65536 cuvinte de
memorie. Analog, o magistrală care conţine 32 linii de date poate transmite cuvinte cu valoarea
maximă: 232-1 =4294967296. Pentru a lucra mai uşor cu aceste numere, se obişnuieşte ca să fie
exprimate în multipli de biţi, octeţi (bytes) sau cuvinte specifice unui anumit calculator. De
asemenea se foloseşte prescurtarea “b” pentru biţi, “B” pentru bytes şi “W” (word) pentru
cuvinte. În această convenţie, multiplu kilo nu reprezintă 1000 de unităţi, ci 1024 de unităţi,
corespunzător puterii 10 a lui 2, adică 210=1024. Rezultă că 65536 cuvinte reprezintă de fapt 64k
cuvinte, pentru că: 65536 = 64*1024.
Trebuie remarcat că în cazul calculatoarelor complexe, în această categorie putând fi considerate
şi anumite configuraţii de PC, structura de magistrală poate evolua către arhitecturi de magistrale
multiple, care lucrează cu număr de linii şi viteze diferite. De exemplu, se pot utiliza magistrale
separate pentru perifericele rapide (cuplorul de discuri sau placa video), şi respectiv magistrale cu
viteză redusă pentru perifericele lente (cuplor de imprimantă, interfeţe seriale, etc), ca în Fig.*.
Bineînţeles că nici legătura cu memoria RAM, nici conexiunea DMA nu este necesară magistrale
separate. Totuşi această structură permite ca unitatea centrală să poată da comenzi unor
dispozitive, în timp ce are loc un transfer DMA şi, de asemenea, să comunice cu memoria cu un
protocol mai eficient şi cu o viteză mai mare decât cea permisă de magistrala rapidă.
În cazul unei structuri cu o singură magistrală, realizarea ciclurilor DMA trebuie să nu interfereze
cu acţiunea procesorului şi, în acelaşi timp, să-şi păstreze eficienţa. Astfel, sunt utilizate câteva
strategii ca, de exemplu, metodele: ********
Magitrală lentă
CPU Magitrală rapidă
Periferie rapidă
Controler Cuplor
Placă video
DMA discuri
Magitrală unităţi de disc
RAM
Conexiune DMA
Transferul DMA
Pentru transferurile de tip DMA se utilizează un controler special, care poate fi integrat în cadrul
cip-setului plăcii de bază. Pentru analiza funcţionării DMA se va lua în consideraţie o structură
mai simplă (Intel 8257), specifică unui microsistem cu procesorul Z-80, dezvoltat înaintea
apariţiei IBM-PC.
ASC – Dan Olaru
-I/OR 1 40 A7 Ampli
DB 0-7
-I/OW 2 39 A6 Date Can 0
-MEMR 3 38 A5 DRQ0
-MEMW 4 37 A4 -IOR DACK0
MARK 5 36 TC -IOW
READY 6 35 A3
HLDA 7 34 A2 CLK
ADSTB 8 33 A1 Can 1
RESET
AEN 9 32 A0 DRQ1
HRQ 10 31 Vcc A0 Bloc R/W DACK1
-CS 11 30 D0 A1
CLK 12 29 D1 A2
RESET 13 28 D2 A3
-DACK2 14 27 D3 Can 2
-CS
-DACK3 15 26 D4 DRQ2
DRQ3 16 25 -DACK0 A4 DACK2
DRQ2 17 24 -DACK1 A5
DRQ1 18 23 D5 A6
DDRQ0 19 22 D6 A7 Can 3
GND 20 21 D7
Ready DRQ3
DACK3
HRQ
HLDA Bloc C-dă
Arbitru
-MEMR priorităţi
-MEMW
AEN
ADSTB
TC
MARK
Controlerul 8257 poate asigura transferul DMA, simultan (în mod time-sharing) între memorie şi
patru porturi. Sincronizarea operaţiilor de citire sau scriere se face prin semnale de eşantionare,
care comandă memorarea datelor, după ce acestea ajung la nivele stabile pe magistrală.
Semnificaţia semnalelor utilizate este următoarea (semnul minus arată că sunt active pe “0”):
-IOR – de la/spre magistrală, pentru eşantionarea datelor citite din port;
-IOW – de la/spre magistrală, pentru eşantionarea datelor scrise în port;
-MEMR - de la/spre magistrală, pentru eşantionarea datelor citite din locaţia de memorie
adresată;
-MEMW - de la/spre magistrală, pentru eşantionarea datelor scrise în locaţia de memorie
adresată;
MARK – semnal emis la fiecare al 128-lea octet transferat;
READY – semnal care permite introducerea unor stări de aşteptare, SW, înaintea încheierii
transferului, având portul şi locaţia de memorie selectate;
READY – semnal primit de la magistrală, indicând eliberarea acesteia, în vederea transferurilor
DMA;
ADDSTB – semnal de eşantionare pentru încărcarea unui port adiţional (de tip 8212) cu octetul
cel mai semnificativ al adresei de memorie;
AEN – semnal indicator al ocupării magistralei pentru transferuri DMA, care validează emiterea
octetului cel mai semnificativ de adresă din portul adiţional;
ASC – Dan Olaru
Memoria calculatorului
Memoria sistemului de calcul are rolul pe de o parte de a stoca programele şi datele de sistem şi
de aplicaţie şi pe de altă parte de a facilita şi îmbunătăţi comunicaţia şi operarea la nivelul
calculatorului. Alături de elementele de memorie distribuite la nivelul unităţii centrale sau
dispozitivelor periferice (registre Latch sau registre ale unităţii centrale) sistemul de calcul este
dotat cu blocuri de memorie cu capacităţi şi viteze de acces diferite, implementate şi realizate sub
diferite forme tehnologice. Trebuie menţionat că în cadrul comfiguraţiei sistemului anumite
periferice pot fi considerate ca dispozitive de intrare-ieşire, desi, în esenţă sunt dispozitive de
memorare pe un suport amovibil, destinat trasportului de informaţie în exteriorul calculatorului,
ca de exemplu: discurile de tip disc flexibil (Floppy disc), CD (Compact disk), DVD (Digital
Video disk), memoriile Stick sau Flash, etc.
Din punct de vedere tehnologic, pentru dispozitivele de memorie sunt folosite soluţii tehnice
diferite, cu caracteristici diferite. Deoarece memoria ocupă un loc esenţial în funcţionarea
calculatorului, de-a lungul evoluţie calculatoarelor s-a acordat o mare atenţie găsirii unor soluţii
tehnice cât mai eficiente şi cu caracteristici cât mai performante.
Este important că sistemul de calcul trebuie să conţină, în mod necesar, măcar parţial, memorii
nevolatile care îşi pot păstra conţinutul atunci când dispare tensiunea de alimentare (calculatorul
nu mai este alimentat electric), spre deosebire de memoria volatilă, care îşi pierde conţinutul în
lipsa tensiunii de alimentare. În altă ordine de idei, funcţionarea calculatorului necesită, pe de altă
parte, o memorie cu viteză de acces ridicată, dar care poate avea o capacitate mai redusă şi poate
fi volatilă, utilizată de unitatea centrală în timpul execuţiei programelor (memoria prinsipală sau
RAM) şi pe de altă, o memorie de masă, cu capacitate foarte mare, nevolatilă, care conţine
cantităţi foarte mari de informaţie.
Este important de menţionat că memoria principală terbuie să permită accesul rapid şi imediat la
nivelul fiecărei unităţi de date memorate (cuvânt de date), denumită şi memorie cu acces aleator
(random access memory - RAM), în sensul că accesul se poate face la orice cuvânt, oricare ar fi
acesta. Spre deosebire de aceasta, memoria de masă poate avea un caracter secvenţial, adică poate
permite accesul la un anumit cuvânt de date numai după ce a fost citită, cuvânt cu cuvânt, o
anumită zonă de date în care se află cuvântul respectiv. Acest mod de lucru apare deoarece
posibilităţile de sincronizare, adică de identificarea sau regăsirea unor elemente de informaţie se
poate face numai numai la nivelul unor şiruri sau blocuri de informaţie înregistrată, urmând ca
identificarea informaţiei în cadrul şirului să se facă prin citirea succesivă a conţinutilui acestuia.
ASC – Dan Olaru
Pentru anumite scopuri sunt necesare chiar memorii nevolatile a căror conţinut nu se schimbă,
după procesul de fabricaţie sau configurare a calculatotului, utilizate, de exemplu, pentru stocarea
programului de încărcare a sistemului de operare sau pentru zona BIOS. Acestea sunt memorii de
tip ROM (read only memory), realizate de regulă, sub formă de matrice conductoare, având în
noduri diode. Totuşi, pentru necesităţi de reconfigurare, s-au dovedit utile unităţi de memorie
ROM programabile sau reprogramabile, realizate în diferite tehnologii: PROM (programable
ROM, EPROM (erasable PROM), EEPROM (electric EPROM).
Din punct de vedere tehnologic s-a dovedit că se pot realiza memorii cu capacităţi mult mai mari
(deci cu densitate de componente pe cip mai mare) dacă, în loc de circuite bistabile (pe care se
bazează memoriile statice), se folosesc elemente de memorie bazate pe stocarea informaţiei în
capacitatea de poartă a unui tranzistor MOS, cunoscute sub denumirea de memorii dinamice.
Folosirea memoriilor statice este mai simplă, în sensul că, o dată ce informaţia a fost scrisă în
memorie, aceasta se păstrează un timp nelimitat (dacă există tensiune de alimentare). Memoria
dinamică, având un caracter capacitiv, îşi pierde în timp conţinutul dacă nu au loc procese
repetate de reînscriere a informaţiei (cicluri de refrech), comandate de procesor sau alt circuit
spacializat.
Totuşi, pentru memoria Cache, care lucrează, de regulă, cu acceeaşi frecvenţă de tranziţie ca şi
procesorul, se preferă utilizarea dispozitivelor statice, permiţând eliminarea ciclurilor de
reînprospătare care necesită un timp preţios pentru transferul de informaţie cu procesorul.
Organizarea şi modul de acces la memorie este diferit în funcţie de tipul şi funcţionalitatea
acesteia.
Astfel, memoria RAM conţine, de regulă mai multe bancuri implementate cu circuite integrate
(cipuri) care pot fi activate separat, cu semnalul CS (cip select) şi ale căror ieşiri pot fi activate cu
semnalul OE (output enable). Fiecare cuvânt de date este accesat separat, corespunzător unui cod
plasat la intrările de adresă.
Un sistem poate funcţiona cu o memorie RAM cu o capacitate adresabilă mai mare decât este
permisă de numărul de conexiuni disponibile ale procesorului sau dispozitivului Master care
comandă liniile de adresă. În acest caz, se spune că memoria este paginată hardware (deoarece se
referă la schema de conexiuni). Atunci, o parte din informaţia de adresă provine de la un registru
ASC – Dan Olaru
de tip latch, iar restul de la magistrala de adresă. Astfel, este necesar ca procesul de adresare să se
execute în două etape (secvenţe). În prima, în registrul latch este înscrisă informaţia numărului de
pagină. Pentru aceasta sunt folosite o parte din conexiunile magistralei de adrese, în funcţie de
numărul de pagini. La ieşirile circuitului Latch se va menţine această informaţie, în a doua etapă,
când se va produce adresarea propriu-zisă. De regulă, din motive tehnologice, memoria este
constituită din mai multe bancuri, implementate cu circuite integrate (cipuri) diferite.
Selecţia fiecăruia se face cu semnalele de cip select produse la ieşirea decodificatorului (DEC).
Acesta activează câte o singură ieşire (pentru starea corespunzătoare selecţiei cipului de
memorie), în funcţie de codul binar furnizat de registrul Latch.
Metoda de adresare paginată, pentru magistrale de adresă şi date cu câte opt conexiuni (8 biţi de
adresă şi 8 biţi de date), pentru o memorie implementată cu patru cipuri este schiţată în Fig.*.
Cele patru cipuri de memorie sunt identice şi au câte şase intrări de adresă şi opt linii de date. Se
observă, că în acest caz numărul de pagini adresate, prin intermediul circuitului Latch este egal cu
numărul de cipuri utilizate pentru implementarea memoriei. Bineînţeles că într-o schemă
oarecare, se pot folosi diferite combinaţii între numărul de pagini adresate şi numărul de cipuri
folosite pentru implementarea memoriei, cu condiţia ca numărul de pagini să poată fi codificat cu
numărul de biţi corespunzători liniilor de adresă.
A0-A5
A5
latch DEC
A4
A0-A5
CS A0-A5 CS CS A0-A5 CS A0-A5
M0 M1 M2 M3
W W W W
D0-D7
În afara memoriei RAM care a existat totdeauna în structura unui calculator, s-a dovedit că este
utilă folosirea unei memorii speciale, cunoscută sub denumirea de Cache (sau memorie
intermediară). Aceasta poate avea două funcţii principale. Pe de o parte poate fi utilizată ca
memorie tampon în care sunt aduse pagini din memoria RAM, care conţin date acesate de
procesor la un moment dat. Pe de altă parte, (aşa cum este considerată de obicei) este utilizată
pentru stocarea datelor (sau instrucţiunilor de program) cel mai des utilizate de procesor, pe
ASC – Dan Olaru
parcursul execuţiei unui program, indiferent de ordinea în care sunt plasate în memoria RAM.
Pentru a realiza această funcţie, memoria Cache trebuie să stocheze atât cuvinte de date din
memoria RAM, dar şi informaţii asupra codului de adresă unde se găsesc acestea (etichete sau
Tag-uri). Astfel, datele sunt căutate în memoria Cache într-o manieră asociativă, adică nu după
adresa acestora, ci după conţinutul acestora, după principiul următor. Înainte ca procesorul să
facă acces la o anumită la o anumită adresă din RAM, verifică dacă, nu cumva, codul acestei
adrese (sau eventual partea de adresă din cadrul paginii curente) nu se găseşte în memoria Cache.
Dacă da, datele sunt citite (foarte rapid) numai din memoria Cache. Dacă nu, datele se citesc din
memoria RAM (relativ mai lent), dar acestea sunt copiate şi în memoria Cache, într-o locaţie
stabilită după un algoritm care să permită menţinerea datelor utilizate cel mai des. Căutarea
datelor, în mod asociativ (printr-un proces de comparare succesivă) se face, de asemenea după
algoritmi care urmăresc criterii de performanţă.
Constructiv, memoria Cache se găseşte cât mai aproape de procesor, eventual chiar pe acelaşi cip
şi lucrează la o frecvenţă maximă comparabilă sau identică procesorului. Spre deosebire de
memoria RAM aceasta are un mod de conectare, special construit, pentru mărirea performanţelor
de procesare. De regulă, este conectată cu procesorul prin mai multe magistrale dedicate, care
permit adresări simultane şi cicluri de citire/scriere simultane pentru mai multe zone ale
memoriei. Capacitatea memoriei cache este în general redusă faţă de memoria RAM, în special
din motive economice, constructive dar şi pentru a putea mări viteza de căutare în mod asociativ.
Unitatea centrală
Procesorul conţine, în principal, registre cu rol de memorii tampon, pentru câte un cuvânt de date
şi unul sau mai mulţi operatori aritmetici şi logici. Operatorii aritmetici (şi logici) au o structură
combinaţională adică, atunci când la intrarea lor sunt plasate anumite date de intrare (sub formă
de nivele de tensiune) la ieşire se obţine codul corespunzător rezultatului. În realitate stabilizarea
datelor la ieşire nu este instantanee datorită timpului necesar propagării semnalelor electrice prin
structura electronică. Se poate arăta că orice operator aritmetic se poate realiza ca o structură de
porţi, de obicei bazată, în principal, pe acelaşi tip de poartă, care corespunde cel mai bine unei
anumite tehnologii de fabricaţie. Asa cum s-a mai arătat mai sus, în algebra binară (Booleană) din
punct de vedere formal (adică după modul de reprezentate) nu există deosebire între operaţiile
aritmetice sau logice, la nivelul unui singur bit (cifră binară). Deşi operaţiile aritmetice implică
numere (care arată numărul de elemente ale unei mulţimi), iar operaţiile logice implică valori de
adevăr (corespunzătoare unor afirmaţii logice subînţelese), modul de operare este similar şi se
bazează pe operatori tip poartă. În realitate calculele aritmetice implică grupuri de biţi (cuvinte)
care reprezintă coduri numerice binare. Şi operaţiile logice se pot face la nivelul grupurilor de
biţi, de exemplu, operaţiile de negare cuvânt (schimbare din 0 în 1 şi din 1 în zero pentru toţi
biţii), deplasare în cadrul unui cuvânt (poziţiile biţilor sunt translatate la stânga sau la dreapta),
comparare între două cuvinte (bitul rezultatului va fi zero dacă biţii corespondenţi sunt diferiţi).
Automatul secveţial al unităţii centrale trebuie să genereze semnale corespunzătoare diferitelor
stări. Principiul de lucru se bazează pe utilizarea semnalului de ceas (impulsuri cu o anumită
frecvenţă) şi generarea unor semnale diferite în funcţie de numărul stării, corespunzător
numărului de ordine al impulsului curent (Fig.*).
Oscilator Numărător
Impulsuri
de tact
A B C Cod binar
Decodificator
(de stări)
O0 O1 O2 O3 O4 O5 O6 O7
Tabelul 1
Numărul Ieşiri: ABC Ieşiri: O0 O1 O2 O3 O4 O5 O6 O7
impulsului (numărător) (decodificator)
0 0 0 0 1 0 0 0 0 0 0 0
1 0 0 1 0 1 0 0 0 0 0 0
2 0 1 0 0 0 1 0 0 0 0 0
3 0 1 1 0 0 0 1 0 0 0 0
4 100 0 0 0 0 1 0 0 0
5 101 0 0 0 0 0 1 0 0
6 110 0 0 0 0 0 0 1 0
7 111 0 0 0 0 0 0 0 1
Fig.* Formele de undă şi stările la intrarea şi ieşirile unui numărător de 2 biţi (patru stări).
Bineînţeles, după un anumit număr de impulsuri ciclul maşină se reia. În realitate conţinutul şi
succesiunea stărilor depinde şi de codul instrucţiunii active. Deci, în locul unui numărător simplu
acţiunează, de fapt, un circuit de secvenţă ale cărei tranziţii de stări sunt comandate de
impulsurile de tact.
In cadrul procesorului, semnalele corespunzătoare fiecărei stări active comandă direcţia fluxurilor
de date şi încărcarea registrelor cu operanzi de intrare, rezultate de ieşire sau date transferate, de
la, sau către, magistralele interne sau externe. Dirijarea fluxurilor de date este guvernată de
circuite multiplexoare care dirijază semnalele, corespunzătoare datelor de intrare, către un grup
sau alt grup de ieşiri, în funcţie de nivelul semnalului de selecţie.
secvenţe de lucru, specifice unei anumite instrucţiuni. Deci, în principiu, aşa cum s-a arătat mai
sus, procesorul trebuie să conţină o unitate de comandă (UC), cu rol de automat secvenţial, şi o
unitate aritmetică-logică (ALU- aritmetic logic unit), cu rol de operator efectiv. Pentru ca datele
să fie procesate, trebuie să fie prezente la intrările unităţii aritmetic-logice. Dacă comunicaţia cu
memoria RAM se realizează (ca de obicei) printr-o singură magistrală, rezultă că, chiar dacă un
operand ar fi preluat direct de pe magistrală, trebuie să existe cel puţin un registru care să
stocheze celălalt operand şi cel puţin un registru Latch în care să fie depus rezultatul, care apoi
urmează să fie transferat tot în acumulator. Plasarea operanzilor trebuie specificată la nivelul
instrucţiunilor de program. Astfel, procesorul trebuie să conţină, cel puţin, un registru de
manevră, cu rol de memorie temporară, numit Acumulator care să poată fi referit şi de
instrucţiunile maşină. Aceastea fac parte din limbajul de asamblare ale cărei instrucţiuni
corespund, în mod direct, cu secvenţele de lucru ale procesorului.
Pentru aducerea fiecărei instrucţiuni din memorie (prin ciclul de “fetch”), sub forma codului
corespunzător, reprezentat pe unul sau mai multe cuvinte, este necesară adresarea ei. Prin aceasta
se înţelege citirea cuvintelor de cod de la adresele corespunzătoare din RAM. Rezultă că este
necesar să existe un registru care să conţină adresa instrucţiunii următoare, numit contor de
program (PC-program counter) sau numărător de instrucţiuni. Cuvintele de cod parţiale ale
instrucţiunii, dacă este cazul, vor fi citite automat, în mod succesiv, având ca referinţă adresa din
rămânâ.
În cadrul funcţionării unui procesor este necesar ca anumite informaţii simple să fie transmise de
la o instrucţiune la alta. Acestea, de regulă, pot fi reprezentate cu câte un singur bit şi sunt
memorate într-un set de bistabili care formează registrul de stare al procesorului, numit de
regulă, PSW (program status word). Aceste informaţii de câte un bit se numesc indicatori de
stare sau Flag-uri (fanion). Ca exemplu de indicatori de stare pot fi enumeraţi: bitul (Flagul) de
Transport sau împrumut, necesar operaţiilor aritmetice pe mai multe cifre binare, bitul de Zero,
activat atunci când rezultatul unei operaţii aritmetice sau de comparare este zero, bitul de
Întrerupere care indică activarea întreruperilor hardware, etc.
Rezultă că structura minimală a unui procesor trebuie să conţină, alături de ALU şi UC registrele
PC, AC şi PSW. În Fig.* sunt reprezentate conexiunile dindre acestea, care pot avea un caracter
bidirecţional: AC-ALU-MD (pentru transferul operanzilor), PSW-ALU, PSW-UC (pentru
transferul biţilor de stare sau unidirecţional UC-MC (pentru transmisia comenzilor), UC-PC
(pentru încărcarea numărătorului de instrucţiuni), MD-UC (pentru încărcarea codului
instrucţiunilor), UC-ALU (pentru transmisia codului de operaţie). Trebuie menţionat că
decodificarea codului instrucţiunii se efectuează la nivelul unităţii de comandă, care în funcţie de
aceasta stabileşte secvenţa de lucru.
Pentru funcţionarea eficientă a unui calculator mai sunt necesare, chiar în structurile minimale,
implementate la nivelul celor mai simple procesoare, registre indicator (RI) de stivă (SP-stack
pointer) şi registre de tip Index. Indicatorul de stivă conţine adresa (relativă) a vârfului de stivă.
Utilizarea stivei este foarte eficientă, mai ales atunci când se lucrează cu mai multe programe
simultan, când este necesară întreruperea reciprocă a acestora, în timpul execuţiei prin partajare
în timp (time sharing). În acest caz este necesară salvarea (memorarea) informaţiilor de stare a
programului întrerupt (conţinutul PC şi PSW) pentru a putea fi reluat după terminarea procesului
de întrerupere. Adresarea stivei este foarte simplă (numai prin conţinutul SP), pentru că datele
sunt memorate la adrese succesive şi apoi sunt extrase în ordine inversă. Aceasta permite, într-o
ASC – Dan Olaru
manieră eficientă, lucrul cu mai multe programe, care se pot întrerupe reciproc, informaţiile de
stare respective fiind memorate în stivă în ordinea în care au avut loc întreruperile.
Registrele de tip Index sunt foarte utile atunci când se utilizează adresarea idexată. În acest caz
adresa cuvântului de date căutat se găseşte, la rândul ei, într-o locaţie descrisă de o altă adresă.
Adresarea indexată se foloseşte când se lucrează în acelaşi segment de memorie. În acest caz
adresa bazei segmentului rămâne aceeaşi şi se schimbă, pe parcursul execuţiei numai adresa
relativă din interiorul segmentului. Deci, fiecare adresă absolută (propriu-zisă) va fi formată din
adresa bazei segmentului suplimentată cu adresa relativă. Astfel, este mai efucient ca contorul de
program (PC) să lucreze numai cu adresa relativă, iar adresa bazei să fie memorată în registrul
index (RI).
Procesoarele performante, de regulă, conţin mai multe regisre index şi mai multe registre de
manevră cu funcţii multiple, numite şi registre generale pentru a putea lucra simultan cu mai
multe programe. Aparent, ar fi benefic ca dimensiunea setului de registre să fie cât mai mare,
pentru a putea creşte viteza de transfer şi operare a datelor. Totuşi, actualizarea lor cu datele
aflate în memoria RAM devine dificilă şi durează mai mult, mai ales că aceasta trebuie făcută
prin instrucţiuni mai multe şi mai complicate. De aceea se preferă utilizarea memoriei Cache care
realizează transferulri rapide şi este manevrată, în mod automat de către procesor.
Bistabil
INT
întrerupere
Unitate de
Comandă
UC
PC
AC
ALU
PSW
Magistrală comenzi (MC)
Magistrală adrese (MA)
costul sistemului de calcul dar influenţează în mod direct structura şi modul de realizare al
programelor. De regulă, un calculator mai complex “hardware” va putea avea instrucţiuni maşină
mai complexe, o programare mai eficientă şi o putere de calcul mai mare. Dacă structura
hardware este mai simplă, funcţiile calculatorului trebuie compensate, la nivel de program, adică
prin software, programarea devenind mai puţin eficientă şi timpul de lucru mai lung.
În această ordine de idei, se poate face următoarea clasificare a configuraţiilor de calculator:
structuri de calculatoare “orientate pe acumulator”, structuri “orientate pe stivă” sau structuri
“orientate pe registre generale”.
Memorie
Rezultate
program,
Tact scriere date de intrare,
date de ieşire
Cod operaţie, valori
operanzi şi rezultate
Registru tampon
Operator ALU
(aritmetic şi logic)
Mai interesant ar fi să se considere tot o structură ipotetică de calculator, dar la care să poată fi
individualizate structura cuvintelor de date şi a semnalelor de comandă. Deşi este mai realist, nici
acest concept nu se foloseşte în realitate, dar este important pentru că evidenţiază modul de
funcţionare a unui model de procesor care utilizează un număr minimal de blocuri şi semnale
interne.
Pentru a putea fi generate semnalele utilizate în scheme, trebuie să fie cunoscută structura codului
instrucţiunii de program. Tipurile de instrucţiuni decodificate şi interpretate de unitatea centrală
corespund unui anumit limbaj maşină sau limbaj de asamblare. Acesta face referire chiar la
componentele (care joacă rolul de argumente sau variabile), modul de funcţionare şi operatorii
specifici structurii electronice a unui anumit tip de procesor. Spre deosebire de limbajul maşină,
limbajele de nivel înalt, destinate, de obicei utilizatorilor, folosesc instrucţiuni specifice unui
anumit mod de operare sau unui anumit tip de variabile, care nu are legătură cu structura
procesorului. De aceea, pentru a putea fi executate este necesar ca fiecare instrucţiune să fie
transformată (translatată sau compilată) în mai multe instrucţiuni maşină, cu o structură mai
simplă, prin acţiunea unui porogram numit translator sau compilator.
O instrucţiune maşină este reprezentată de un cod binar care este interpretat de către logica
electronică (circuitele logice) a unităţii centrale. Trebuie menţionat că limbajul de asamblare
coorespunde limbajului maşină dar, pentru a fi mai uşor de utilizat, reprezentarea se face cu
ajutorul unor denumiri textuale, numite mnemonice.
Instrucţiunile maşină sunt stocate în memoria de program şi decodificate de catre circuitele
combinaţionale ale decodificatorului de instrucţiuni. Acesta permite identificarea câmpurilor (sau
zonelor) codului instrucţiunii, generarea semnalelor de comandă, a codurilor de operaţie, şi a
codurilor de identificare a operanzilor.
ASC – Dan Olaru
În general, se poate considera, în mod pur convenţional, că un cod de instrucţiune poate conţine
trei câmpuri, ca mai jos.
Codul de operaţie specifică tipul operaţiei aritmetice, logice sau de transfer care trebuie realizată.
Codul operanzilor furnizează informaţiile de identificare pentru primul şi al doilea operand de
intrare, dar şi pentru plasarea rezultatului care va fi suprapus peste operandul A. Trebuie
specificat că, în funcţie de codul de operaţie, codurile operanzilor vor putea reprezenta: adrese ale
operanzilor, coduri parţiale de adresă (adresă relativă, adresă în interiorul unui segment, etc.),
coduri referitoare la regiştre, adrese de salt sau indicaţii de translatare a adresei curente (Offset).
Schema maşinii cu un singur tact trebuie să conţină, pe de o parte logica de operare a datelor de
intrare şi pe de altă parte logica de adresare a instrucţiunii următoare, respectiv cea de
decodificare şi generare a semnalelor de comandă. Prin termenul “logică”, în acest context se
înţelege ansamblul de circuite electronice binare sau logice a structurii respective.
Pentru a reduce restricţiile legate de diferenţele între timpii de tranziţie a stărilor memoriei sau
registrelor se va considera că modelul de procesor este de tip Load/Store adică utilizează
instrucţiuni speciale şi separate pentru accesele la memorie adică pentru operaţii de încârcare din
memorie (Load) şi, respectiv, scriere în memorie (Store).
Schema de operare a datelor de intrare (Fig.*) conţine următoarele componente (blocuri):
- operatorul aritmetic-logic (ALU);
- blocul registrelor generale (REG);
- blocul memoriei de date (MemD);
- multiplexorul datelor de intrare (MuxD);
- multiplexorul datelor de ieşire (MuxR);
OpIm
R1 R2 Rd DatIm
CodOp
WR
MuxD Load
CK
CR1
REG ALU
CRd CR2 AdrM
WM MuxR
CK MEMD
operand imediat, adică specificat chiar în codul instrucţiunii. Atunci multiplexorul va prelua
operandul direct de la decodificatorul de instrucţiuni. În caz că operanzii implică setul de registre,
numele (codurile) registrelor care vor conţine operanzii respectivi, specificate în codul
instrucţiunii, vor fi identificate de semnalele R1, R2 şi Rd obţinute tot prin decodificatorul de
instrucţiuni. Acestea indică registrii operanzilor de intrare (RG1, RG2) şi registrul destinaţie
pentru rezultat (RGd). Astfel, la ieşirile CR1 şi CR2 va fi transmis conţinutul registrelor RG1”şi
“RG2”, iar conţinutul de la intrarea CRd va fi înscris în registrul “RGd”.
Rezultatul, selectat prin multiplexorul MuxR (atunci când semnalul Load nu este activ) va fi
înscris în registrul destinaţie, specificat cu codul RGd, la apariţia semnalului de tact sau de ceas
(CK–clock). Se presupune că operaţia de scriere este suficient de rapidă, astfel încât, starea
celorlalte circuite să nu se schimbe.
Aşa cum s-a spus mai sus această schemă corespunde unei maşini (procesor) de tip Load/Store
care are instrucţiuni speciale şi separate pentru accesul la memorie (de date). În cazul
instrucţiunilor de prelucrare a datelor, acestea utilizează numai setul de registre, fără a implica
memoria de date. Atunci când apar instrucţiuni de tip Load, de încărcare din memoria de date,
semnalul “Load” este activat şi multiplexorul MuxR selectează ieşirea memoriei de date.
Conţinutul (cuvântul) de la adresa specificată de semnalele Adr va fi transmis, prin multiplexor,
către setul de registre şi înscris, atunci când semnalul CK devine activ, într-unul din regiştrii
pentru operanzi. Operandului respectiv va deveni utilizabil, la o instrucţiune de operare
următoare. Atunci când apar instrucţiuni de tip Store, de înscriere din memoria de date, odată cu
apariţia semnalului CK, conţinutul cuvântului ce va fi scris va fi preluat din setul de regiştrii. Este
interesant că, deşi, atât setul de registre cât şi memoria de date folosesc acelaşi semnal de
comandă pentru scriere (CK), nu apare nici un conflict de transfer datorită faptului că sunt
folosite instrucţiuni diferite, care vor activa, fie semnalul WR, fie semnalul WM.
Logica de determinare a adresei instrucţiunii următoare este dată de schema din Fig.* şi conţine
urmatoarele componente:
- blocul memoriei de program (MemPrg);
- registrul numărător de instrucţiuni (PC);
- multiplexorul de adresă (MuxA);
- sumatorul de incrementare (SumI);
- sumatorul de adresare (SumA).
ASC – Dan Olaru
SumI Salt
LCod MuxA
Adr Date
SumA PC MemPrg
PrgDec
AdrJ CK
AbsJ
Principiul de funcţionare este următorul. Dacă instrucţiunea precedentă nu este una de salt, atunci
adresei instrucţiunii următoare se calculează prin incrementare (adunare) cu un număr
corespunzător numărului de cuvinte de cod ale instrucţiunii precedente (LCod), cu ajutorul
sumatorului SumI. De exemplu, dacă aceasta se întinde pe două cuvinte, se va adăuga valoarea
doi. În caz că instrucţiunea precedentă este una de salt la altă adresă în program, atunci adresa
următoare se calculează adunând la adresa precedentă valoarea specificată în instrucţiunea de salt
(AdrJ), cu ajutorul sumatorului SumA. Se lucrează aşa deoarece deoarece, în mod obişnuit,
salturile se realizează într-o manieră relativă faţă de adresa precedentă. În caz că apare o
instrucţiune de salt care conţine o adresă absolută, sumatorul va aduna valoarea zero. Adresa
instrucţiunii următoare va fi încărcată în registrul numărător de instrucţiuni (PC), la activarea
semnalului CK şi va fi folosită de memoria de program. Scrierea acesteia se face numai prin
procedura de încărcare a programului, înaintea începerii execuţiei. Timpul de tranziţie al
numărătorului de instrucţiuni trebuie să fie mult mai scurt decât cel de citire din memorii sau cel
de propagare prin circuitele de operare sau de control al fluxului de date.
La ieşirea memoriei de program va apare codul instrucţiunii, corespunzător adresei respective.
Acesta este introdus în Decodificatorul de instrucţiuni (PrgDec) din Fig.*, care furnizează la
ieşire semnalele de comandă sau codurile necesare celor două scheme.
MemPrg
PrgDec
Procesoarele microprogramate
Aşa cum s-a arătat, unitatea centrală (procesorul) poate fi partajat în două secţiuni principale, şi
anume, unitatea de comandă (UC) şi unitatea aritmetică şi logică (ALU). Unitatea de comandă
sau automatul secvenţial, prin stările care le parcurge, realizează transferurile de date interne sau
externe (prin comanda magistralei). Transferurile interne sunt efectuate fie între regiştrii
accesibili de utilizator, prin instrucţiunile maşină, fie între registre Latch cu rol de memorii
tampon pentru funcţionarea corectă a unităţii aritmetice/logice. Unitatea de comandă poate să fie
implementată cu o reţea de porţi şi circuite bistabile, fără ca acestea să aibă destinaţii privilegiate,
sau poate să aibă la rândul ei o structură de maşină von Neumann (Fig.*). Atunci fiecare
instrucţiune maşină este considerată ca element de program la intrarea unui subansamblu, cu
structură de calculator. Astfel, execuţia fiecărei instrucţiuni este realizată printr-o secvenţă de
microprogram, care conţine operaţii (microinstrucţiuni) mai simple. Instrucţiunea maşină este
preluată din zona de program a memoriei, adresată prin registrul PC şi este plasată într-un
registru de instrucţiuni. În funcţie de codul acesteia, unitatea de secvenţă de microprogram aduce
din memoria de microprogram secvenţa necesară de prelucrare a instrucţiunii, prin intermediul
unităţii aritmetice-logice de microprogram.
Trebuie menţionat că, deşi microinstrucţiunile conţin operaţii mai simple, totuşi în anumite cazuri
lungimea unei microinstrucţiuni poate fi mai mare decât lungimea unei instrucţiuni maşină.
Astfel, într-o microinstrucţiune pot fi incluşi toţi operanzii şi execuţia acesteia se poate realiza
mai repede, eventual într-un singur ciclu de tact, folosind eventual subunităţi de prelucrare care
acţionează în paralel.
Memoria de instrucţiuni
PC (instrucţiuni maşină)
Registru instrucţiuni
Adresă
microprogram
Memoria de
microprogram Unitatea de secvenţă
Cod microprogramată
microprogram
Magistrală
de date
ALU
microprogram
Comunicarea cu perifericele
Comunicaţia cu dispozitivele perifericele prin intermediul magistralei poate fi controlată şi
comandată numai de un dispozitiv cu calitatea de Master. În afară de procesor, de regulă, cel mai
important dispozitiv de acest tip este Controlerul DMA.
Trebuie remarcat faptul că dispozitivele periferice propriu-zise sau echipamentele exterioare
calculatorului nu comunică direct pe magistrală ci utilizează un subansamblu electronic, numit
“controler”, “interfaţă”, “cuplor” sau “placă”. Aceasta asigură transferul, eventual memorarea
temporară a datelor, şi realizează trecerea de la protocolul de comunicaţie pe magistrală (mai
rapid şi mai performant) la cel al dispozitivului cuplat cu calculatorul.
ASC – Dan Olaru
În cele de mai sus au fost analizată funcţionarea internă a unei unităţi centrale, rezumată la
execuţia instrucţiunilor, preluate din memoria de program şi prelucrarea datelor aflate în memoria
de date. Însă, pentru a putea comunica cu dispozitivele conectate pe magistrală trebuie utilizate
semnale de comandă specifice. Trebuie remarcat că, semnalele utilizate pot avea un caracter
sincron sau asincron. Un semnal este sincron dacă este generat conform unei anumite secvenţe
sau protocol. Deci, acesta este generat într-un moment de timp corelat sau aflat în
interdependenţă cauzală cu semnalele care identifică sau generează fazele de funcţionare a
procesorului. În caz că apariţia semnalului este independentă, deci poate apare la un moment de
timp oarecare, eventual datorită unui eveniment exterior, se consideră că semnalul este de tip
asincron.
În mod obişnuit, comunicaţia sincronă se realizează pe parcursul ciclurilor de citire sau scriere în
memorie. Acestea folosesc semnalele de citire sau Read (R) şi de scriere Write (W). Trebuie
remarcat că spaţiul de adresare a dispozitivelor periferice este mult mai restrâns decât cel al
memoriei (RAM). La un periferic spaţiul de adresare se referă, de regulă, la adresele registrelor
interfeţei respective, destinate transferului de date, biţilor de stare sau mesajelor de comandă.
Acestea au un număr de adrese mai restrâns şi este firesc ca adresarea să se realizeze separat,
pentru memoria RAM şi pentru periferice, cu un număr de biţi mai redus în ultimul caz. Pentru a
putea departaja cele două tipuri de adrese, sunt utilizate semnalele suplimentare de selecţie,
notate de regulă cu MEM şi I/O.
Pentru comunicaţia între procesor şi celelate dispozitive, eventual chiar de tip Master poate
necesita, da la caz la caz identificarea unor cicluri de funcţionare a procesorului. Cel mai des se
utilizează un semnal, (notat M1) sau eventual două semnale (notate S1,S2).
Necesitatea controlerului DMA apare atunci când este necesară realizarea şi coordonarea unei
transmisiei rapide (de exemplu, între memorie şi unitatea de disc) a unor cantităţi importante de
date (masive de date) printr-un protocol special numit DMA (direct memory acces). Acesta
necesită câteva faze preliminare de programare la nivelul controlerului DMA a informaţiilor de
adresă a dispozitivelor sursă şi destinaţie, de lungime de mesaj, de prioritate a transferului şi de
obţinere a controlului magistralei. Pentru aceasta sunt emise, către procesor, semnale de cerere a
controlului magistralei (BUSRQ). Dacă este posibilă eliberarea magistralei (prin terminarea
transferurilor în curs), procesorul răspunde cu semnalul BUSAQ. Atunci ieşirile circuitului DMA
va putea controla liniile de adresă sau de date.
Există situaţii când activitatea procesorului trebuie iniţializată, întârziată, sau chiar oprită. În acest
scop sunt folosite semnalele: RESET, WAIT şi HOLD.
În primul caz, semnalul RESET poate fi primit de procesor într-o manieră asincronă, de regulă
după conectarea la tensiunea de alimentare sau după generarea unei erori grave care impune
trecerea tuturor circuitelor într-o stare iniţială bine definită. Aceasta, de obicei, implică încărcarea
cu biţi zero a anumitor registre (în primul rând numărătorul de instrucţiuni – PC), fixarea
bistabililor de stare şi control într-o anumită stare şi declanşarea, după un anumit timp a secvenţei
de încărcare a primei instrucţiuni de program.
Semnalul WAIT, aşa cum s-a amintit şi mai sus are rorul de a prelungi durata ciclului maşină,
pentru ca anumite dispozitive mai lente să poată prelua date sau să execute comenzi, procese care
implică, de fapt, o operaţie de scriere în registrele acestuia.
ASC – Dan Olaru
RESET
HOLD
HOLDA
WAIT
BUSRQ
BUSAQ
INT
INTAQ
M1
CPU
MEM
I/O
R
W
Comunicaţia sincronă este avantajoasă atunci dispozitivul Master este acela care iniţiază şi
termină comunicaţia cu un dispozitiv care primeşte comenzi sau este implicat într-un proces de
scriere sau citire. Există însă cazuri, foarte frecvente în modul de lucru al calculatorului când
dispozitivul Slave este acela care trebuie să iniţieze sau să determine sfârşitul procesului de
comunicaţie, datorită unui eveniment exterior calculatorului sau intern dispozitivului Slave. De
exemplu, în cazul unui defect de tipărire, imprimanta este aceea care trebuie să ceară oprirea
transferului de date. Dacă problema se rezolvă, tot imprimanta este aceea care trebuie să ceară
reluarea comunicaţiei. Foarte interesantă, da asemenea, este comunicaţia cu dispozitivele de
memorare pe disc. La acestea, unitatea centrală coordonează comunicaţia, însă transferul de date
nu se poate face imediat, ca în cazul memoriilor electronice (de tip RAM) şi nici ne este eficientă
întârzierea cu semnale de tip WAIT.
Dispozitivele cu disc sunt caracterizate de un transfer de date rapid, mai ales la hard-disk, rata de
transfer fiind determinată de viteza de rotaţie a discului (de fapt viteza periferică în dreptul
capului de citire/scriere). Totuşi, datorită modului de organizare a datelor pe disc, procesul global
de comunicaţie implică manevre intermediare. Astfel, poziţionarea capetelor de citire/scriere,
căutarea cilindrului (pistei) şi sectorului pe care se găsesc datele, sincronizarea fluxului de date cu
poziţia de început şi sfârşit de sector, etc., necesită comenzi suplimentare, la care dispozitivul
poate răspunde relativ lent. În plus, se pot utiliza unităţi de disc multiple, conectate printr-o
magistrală specială, care pot comunica aparent simultan, când fiecare dintre ele poate realiza
funcţii diferite şi se poate afla în stări diferite. Deci în timp ce una dintre unităţi realizează o
anumită manevră, altă unitate poate transfera date sau primi comenzi. În plus, chiar înre
intervalele de timp necesare pentru realizarea comenzilor intermediare, procesorul poate executa
porţiuni din alte programe.
Rezultă că folosirea semnalelor de tip WAIT este total ioportună şi mai avantajoasă este
utilizarea unui mod de lucru prin care dispozitivul Slave să poată înştinţa dispozitivul Master
asupra stării lui şi asupra “intenţiilor” care le are în legătură cu iniţierea sau oprirea unui proces
ASC – Dan Olaru
de comunicaţie. În acest scop pot fi folosite două modalităţi. Fie, procesorul (sau Master-ul)
testează periodic starea dispozitivului Slave, fie acesta transmite un semnal de informare asupra
unei schimbări semnificative de stare. Dacă a apărut o schimbare stare, dispozitivul Master poate
iniţia o procedură de interogare a stării, după care să iniţieze un transfer de date sau o transmisie
de comenzi. Este evident că a doua soluţie este mai eficientă deoarece dialogul între dispozitive
ia naştere numai în momentul unei schimbări de stare. Testarea reciprocă a stării consumă timp
preţios, mai ales pentru procesor, care are viteză mare de lucru şi poate realiza alte funcţii în acest
interval.
Primul procedeu poartă denumirea de poling, adică Master-ul interoghează periodic starea
dispozitivului, până când se produce evenimentul aşteptat. Acest mod de lucru este ineficient şi
rar utilizat, numai în cazuri speciale.
Al doilea procedeu, numit mod de lucru în întreruperi este specific modului de operare al
procesorului. Denumirea arată că acest mod de comunicaţie degrevează procesorul de o sarcină
permanentă (cum este poling-ul), acesta întrerupându-şi activitatea curentă numai “la cerere”. În
acest caz, atunci când apare o schimbare de stare semnificativă, perifericul (dispozitivul Slave)
transmite un semnal de întrerupere (notat de regulă cu INT), pe o linie specială de comandă a
magistralei, câtre o intrare specială a procesorului, care va răspunde cu un semnal de aceptare a
întreruperii, notat IAQ (interrupt acknowledge). Apariţia acestui semnal este memorată de un
bistabil special care va da naştere la o secvenţă de întrerupere. Aceasta intră în acţiune după
terminarea execuţiei instrucţiunii aflate în curs, şi va avea ca efect următoarele operaţii:
- procesorul eliberează magistrala de date (ieşirile trec în starea izolată);
- procesorul transmite semnalul IAQ (interrupt acknowledge);
- perifericul transmite vectorul de întrerupere pe magistrala de date;
- procesorul citeşte vectorul de întrerupere şi calculează adresa procedurii de serviciu;
- procesorul execută procedura de serviciu a întreruperii.
Vectorul de întrerupere reprezintă adresa (sau adresa relativă) a locaţiei de memorie unde se
găseşte procedura (programul) care conţine instrucţiunile ce trebuie executate în urma apariţiei
întreruperii. Trebuie menţionat că aceste întreruperi sunt de tip “hardware”, pentru că utilizează
semnale şi circuite electronice specializate, spre deosebire de întreruperile de tip “software”,
reprezentate de instrucţiuni de salt la o altă adresă, corespunzătoare unei anumite proceduri
speciale, în timpul execuţiei unui program.
În realitate, un calculator utilizează mai multe linii pe care pot fi transmise semnale de
întrerupere, dotate cu diferite nivele de prioritate. Acestea indică prioritatea sau ordinea de
servire a unei întreruperi, atunci când sunt emise simultan mai multe semnale de întrerupere.
Prioritatea întreruperilor poate fi stabilită, pe de o parte prin identificarea intrării de întrerupere,
atunci când nu se utilizează o intrare unică. Atunci când numărul de periferice care pot lansa
semnale de întrerupere depăşeşte numărul de intrări respective, situaţie care poate apare frecvent,
este necesară stabilirea priorităţii prin modul de conexiune al perifericelor la liniile de
întrerupere, corespunzător unei anumite soluţii constructive. Cel mai utilizat este modul de
conectare lanţ sau în cascadă, exemplificat în Fig.*, pentru trei dispozitive periferice.
ASC – Dan Olaru
INT
Magistrală de date
În această schemă semnalul de acceptare a întreruperii, IAQ emis de către procesor trece prin
circuite electronice specializate, la nivelul dispozitivelor periferice. Fiecare periferic este dotat cu
câte un receptor (RIA1, RIA2, RIA3) şi cu câte un emiţător (EIA1, EIA2, EIA3) de semnal. Acestea
sunt comandate electronic, astfel încât dacă un periferic nu a transmis nici un semnal de
întrerupere INT pe linia comună, atunci transmite mai departe semnalul IAQ, iar dacă un
periferic a transmis un semnal de întrerupere, atunci semnalul IAQ nu este transmis mai departe,
câtre următorul periferic. Rezultă că, dacă mai multe periferice transmit simultan cereri de
întrerupere, propagarea semnalului de confirmare, între periferice va fi oprit de dispozitivul care a
transmis semnal INT, aflat cel mai apropiat de procesor. Deci, prioritatea de întrerupere este
stabilită de modul de aşezare a perifericelor în conexiunea cascadă.
SO + INT Registre
Magistrală adrese stare
Arhitecturi complexe
Pentru mărirea performanţelor procesoarelor, în afara alegerea unei anumite arhitecturi interne,
optimizate dintr-un anumit punct de vedere, se utilizează diferite strategii bazate pe conceptul
prelucrării paralele. Aceasta se referă, fie la execuţia simultană a unor instrucţiuni diferite (cazul
calculatoarelor vectoriale sau paralele), fie la realizarea simultană a unor operaţii parţiale,
necesare prelucrării instrucţiunilor (cazul calculatoarelor pipe-line). În primul caz, unitatea
centrală conţine mai multe procesoare identice, destinate execuţiei paralele a instrucţiunilor.
Chiar dacă acestea există, ele nu pot fi utilizate eficient decât dacă succesiunea instrucţiunilor
este cunoscută şi dacă acestea sunt independente, adică o instrucţiune nu trebuie să conţină ca
operanzi de intrare date rezultate din execuţia altor instrucţiuni.
Din punct de vedere istoric, elemente de prelucrare paralelă s-au folosit odată cu apariţia co-
procesoarelor numerice şi a procesoarelor de date grafice. Primele erau capabile să execute, în
mod independent, instrucţiuni de calcul cu virgulă flotantă, deci cu numere zecimale, care altfel
ar fi trebuit realizate prin proceduri complexe la nivelul procesorului propriu-zis. Procesoarele
grafice erau destinate execuţiei unor instrucţiuni de tip grafic (translaţii sau rotaţii geometrice, de
exemplu), efectuând operaţii identice asupra unor operanzi vectoriali cu câte trei componente,
corespunzător celor trei axe de coordonate ale spaţiului cu trei dimensiuni.
În realitate, pe de o parte, succesiunea instrucţiunilor nu este cunoscută deoarece pe parcursul
execuţiei programului pot apare instrucţiuni de salt care pot depinde de rezultate obţinute pe
parcurs. Pe de altă parte, independenţa instrucţiunilor, de obicei, nu poate fi garantată. De aceea,
procesarea paralelă propriu-zisă nu poate fi făcută decât dacă programul este construit într-o
formă particulară şi conţine directive speciale pentru directarea instrucţiunilor către procesoarele
paralele. Aceasta duce la o creştere a preţului de rezolvare a aplicaţiilor şi la necesitatea rescrierii
programelor existente.
O soluţie aplicabilă pentru orice program este utilizarea structurii denumite Pipe-line (conductă)
sau “bandă de asamblare”. În acest caz, structura procesorului este divizată în mai multe
subunităţi destinate prelucrării instructiunii la diferite nivele, în intervale de timp diferite. Fiecare
ASC – Dan Olaru
dintre subunităţi este comandată de tactul (semnalul de ceas) propriu şi conţine memorii tampon
sub formă de registre Latch. În acestea vor fi stocate coduri, corespunzătoare instrucţiunilor,
aflate la diferite nivele de prelucrare, organizate sub formă de “cozi de aşteptare”. Structura de
“coadă” furnizează la ieşire datele care au fost memorate la începutul formării segmentului
respectiv (conceptul “primul intrat – primul ieşit” sau “first in – first out”). Memoriile tampon
permit ca subunităţile să nu aştepte date de intrare, chiar dacă ciclurile lor de prelucrare necesită
timpi diferiţi.
Prelucrarea unei instrucţiuni poate fi departajată, spre exemplu, într-o manieră primară, în fazele
de: încărcare din memorie (operaţia de “fetch”), decodificare, execuţie propriu-zisă (sau calcul)
şi înscrierea rezultatelor în memorie. Execuţia unei instrucţiuni implică mai mulţi cicli maşină,
conţinând la rândul lor mai multe faze de execuţie (perioade de tact sau ceas). În maniera clasică,
când nu este încărcată altă instrucţiune, până nu se termină execuţia celei precedente, execuţia
completă a unei instrucţiuni va necesita un anumit număr de cicli de ceas.
Dacă procesorul este departajat în subunităţi, spre exemplu, atunci când o instrucţiune se află în
faza de execuţie propriu-zisă, altă instrucţiune poate intra în faza de decodificare, şi respectiv,
altă instrucţiune poate fi încărcată din memorie. Se poate spune că, în acest caz, că un procesor de
tip Pipe-line conţine, în diferite faze de execuţie, trei instrucţiuni diferite.
Dacă subunităţile sunt realizate astfel încât să poată prelucra codul intermediar într-un singur
ciclu de tact, rezulta că, la fiecare ciclu de ceas, pe de o parte, va fi încărcată câte o instrucţiune
şi, pe de altă parte, vor fi disponibile rezultatele în memorie.
procesoare se află în plină evoluţie, foarte interesantă este evoluţia µ-procesoarelor dezvoltate de
firma americană INTEL (“Integrated Electronics” fondată în 1960).
Enumerarea, pe scurt, a caracteristicilor produselor reprezentative ale firmei, realizate de-a lungul
timpului, oferă o perspectivă interesantă asupra evoluţiei structurii şi performanţelor
procesoarelor.
Intel 8086 (1979): Conexiuni pentru 16 biţi de date, 20 biţi de adresă (1MB adresaţi direct);
Memorie segmentată cu 16 segmente de memorie, a câte 64 kB; 2 unităţi de procesare paralele;
sistem de operare MS-DOS (Micro Soft Disk Operating Sistem).
Intel 80286 (1982): 16 biţi de date, 24 biţi de adresă (16MB adresaţi direct); Memorie cu
segmente de lungime variabilă: 16 seg.x (1-64 kB) = 1GB pentru fiecare task (program în
execuţie); Execuţie Multi-task, Memorie virtuală = 4GB pentru 4 task-uri procesate în paralel;
Mod de lucru protejat cu 4 nivele şi comutare de task-uri; 4 unităţi paralele; Utilizarea unui co-
procesor matematic pentru realizarea calculelor în virgulă mobilă; A stat la baza configuraţiei
IBM PC AT.
Intel 80386 (1986): 32 biţi de date, 32 biţi de adresă (4GB adresaţi direct); 16 seg.x (1-4 GB) =
64TB; Memorie virtuală = 64 TB /task; Memorie paginată, 1 pagină = 4kB; Mod de lucru “real”
şi “virtual”; 4 nivele de protecţie; “Spaţiu de memorie liniar protejat” (lungimea unui segment =
spaţiul adresabil); 6 unităţi paralele; Co-procesor matematic extern.
Intel 80486 (1989): Configuraţie analoagă lui Intel 80386; Memorie Cache=8 kB (nivel L1), cu
acces într-un ciclu de de ceas (1CK); Arhitectură RISC (1CK); Structură Pipe-Line (1CK) cu 5
nivele pentru unităţile de decodificare şi execuţie; Co-procesor matematic intern.
Intel Pentium I(1994): 64 biţi de date, 32 biţi de adresă; Două memorii Cache, pe nivelul L1, în
arhitectură MESI, separat pentru instrucţiuni program şi date, de câte 8 kB; Două structuri Pipe-
Line paralele (denumite U şi V), asigurând procesarea a câte două instrucţiuni pe fiacare ciclu de
ceas (CK); Căi de date interne extinse (128 respectiv 256 biţi), necesare transferurilor paralele;
Estimator pentru instrucţiunile de salt (Branch Prediction); Registru pentru evidenţa
instrucţiunilor de salt (Branch Target Buffer); Facilităţi multiproces APIC (Advanced Program
Interupt Control)
Pentium I MMX (Multi Media Extension): Conţine facilităţi pentru prelucrarea datelor de tip
multimedia (semnale Audio, Video), cu ajutorul instrucţiunilor de tip SIMD (Single Instruction –
Multiple Data) şi registrelor de tip DSP (Digital Signal Processor) care acţionează asupra unor
structuri de date de tip vectorial; Memorie Cache L1 dublată la 32kB.
Pentium I PRO: 64 biţi de date, 36 biţi de adresă (64 GB adresaţi direct); Structură superscalară
cu trei tronsoane Pipe-Line, putând executa simultan 3 instrucţiuni pe fiecare ciclu de ceas;
Execuţie “dinamică” a programului, având următoarele facilităţi: Analiza fluxului de
microinstrucţiuni; Execuţia instrucţiunilor în altă ordine (succesiunii din program), pentru a putea
reduce dependenţa reciprocă; Prezicerea instrucţiunilor de salt; Execuţie speculativă (prin
estimarea salturilor); Trei unităţi paralele de decodificare care generează câte o secvenţă de
micro-cod (micro-program); Memorie tampon pentru instrucţiuni (Instruction Pool); Cinci unităţi
de execuţie paralelă (2 pentru instrucţiuni întregi, 2 pentru instrucţiuni în virgulă mobilă); Unitate
de retragere-extragere a instrucţiunilor (Retirement Unit), pentru a reface ordinea dată de
program; Două nivele de memorie Cache: două pe nivelul L1, cu conexiune Dual-port, a câte
8kB (pentru cod şi date) şi 256kB pentru nivelul L2, având o magistrală separată de 64 biţi.
ASC – Dan Olaru
Pentium II : constă, în esenţă, într-un procesor Pentium-Pro, cu toate facilităţile structurii MMX,
la care s-a dublat nivelul L1 al memoriei Cache.
Pentium III : constă, în esenţă, într-un procesor Pentium II la care s-a extins setul de instrucţiuni
(70 de instrucţiuni suplimentare), cu noi instrucţiuni de tip SIMD în virgulă mobilă pe 32 de biţi,
acţionând asupra unor pachete de date de 128 biţi.
Memoria
Memoria, alături de procesor determină în mod hotărâtor performanţele calculatorului. Cu cât
viteza de acces la datele sau instrucţiunile programului în execuţie este mai mare, cu atât
procesorul poate acţiona (opera) mai eficient. Din motive tehnologice, aşa cum s-a amintit, există
departajarea sub forma de memorie principală (RAM) implementată cu circuite integrate
semiconductoare şi sub formă de memorie de masă (Hard Disc). Trebuie menţionat că au existat
şi încercări de implementare a memoriei de masă cu ajutorul unor dispozitive statice (fără
mişcare mecanică), prin folosirea unui material cu dipoli magnetici mobili (memorie cu bule).
De-a lungul istoriei calculatoarelor, pentru memoria de masă s-au folosit diferite suporturi
(tambur magnetic, benzi magnetice, discuri magnetice demontabile, etc.). Deosebirea esenţială
între memoria RAM şi memoria de masă este modul de acces al datelor. În cazul RAM (random
acces memory) accesul se poate realiza la orice locaţie (cuvânt) de memorie, după codul de
adresă. În cazul memoriei de masă accesul se face secvenţial (pe banda magnetică) sau pseudo-
secvenţial (pe disc). Astfel, datele nu pot fi citite sau scrise individual, ci numai sub formă de
pachete, care includ şi informaţiile de sincronizare cu mişcarea benzii sau discului. Acest mod de
lucru permite transferul mai rapid a unor masive mari de date, pe care suportul respectiv le poate
înregistra. În cazul discului accesul este secvenţial numai la nivelul sectoarelor (segmente
circulare de pistă), poziţionarea pe piste fiind făcută într-o manieră aleatoare. Este astfel evident
că, din motive de viteză, în timpul execuţiei parogramelor trebuie să se facă accese numai în zona
de memorie RAM. Totuşi, pentru a extinde spaţiul de memorie zone din RAM pot fi transferate
(“mapate”) pe disc.
Tot aspecte de ordin tehnologic fac ca viteza de transfer la nivelul procesorului să fie mult
superioară vitezei de lucru al memoriei RAM. Aceasta face necesar ca o parte din date să fie
transferate (într-o manieră ciclică) la nivelul memoriei Cache (memorie temporară), plasată, de
regulă, pe cipul procesorului şi având o viteză de lucru comparabilă cu acesta. Deci, din punct de
vedere funcţional, în mod obişnuit, memoria RAM conţine codul şi datele programelor aflate în
execuţie, care de altfel sunt memorate pe disc, iar memoria Cache conţine secvenţe de program,
la care se fac acese mai frecvente. Astfel, este necesar ca cele trei nivele de memorie să aibă
caracteristici şi moduri de lucru diferite, uneori relativ complexe.
Modul de organizare a memoriilor este esenţial atât pentru eficienţa procesării datelor, dar şi
pentru ordonarea proceselor care au loc.
realizându-se printr-un anumit procedeu de calcul (de exemplu, “translatarea” adreselor). Aceasta
permite în program să poată fi utilizate adrese convenţionale care să nu depindă direct de
structura calculatorului şi de modul de execuţie a programului. Calculul adreselor propriu-zise
(fizice) se va realiza prin intervenţia Sistemului de operare.
Dacă în cadrul unei zone de memorie logică codurile de adresă sunt consecutive, spunem că
memoria sau adresarea este liniară.
Pentru a mări eficienţa lucrului, dar şi pentru a asigura evidenţa operaţiilor efectuate, memoria
poate fi structurată, căpătând atributele sau caracteristicile de : Memorie paginată, Memorie
segmentată şi Memorie virtuală.
Memoria este paginată atunci când sunt definite anumite zone, de regulă cu lungime fixă
(corespunzătoare spaţiului adresabil). Acestea sunt identificate printr-o adresă de pagină, în
interiorul cărora se lucrează cu o adresă relativă, având ca referinţă adresa de început de pagină.
Împărţirea în pagini nu ţine cont de conţinutul zonelor de memorie. Aceasta este însă avantajoasă
pentru uşurarea transferurilor de date între diferitele dispozitive de memorare. Deoarece, de
regulă, execuţia unui program utilizează cu predilecţie anumite zone continui de memorie este
firesc, ca atunci când este cerut accesul la o anumită adresă să se tranfere, într-o manieră
temporară (în cache sau de pe disc) şi pagina care o conţine.
Memoria este virtuală dacă spaţiul de adrese depăşeşte ca dimensiune pe cel al memoriei fizice.
Astfel, în mod aparent ar apare adrese care nu pot să aibă corespondenţă în memoria RAM. Calea
de rezolvare depinde de context. Dacă zonele aparţin mai multor programe care se află în
execuţie simultan (în modul time sharing), acestea sunt “mapate” în memoria RAM numai pe
durata de timp alocată programului respectiv. Dacă un anumit program necesită o zonă de
memorie mai mare decât cea disponibilă în RAM, aceasta va fi extinsă pe disc sub forma unei
structuri asemănătoare celei din RAM (RAM virtual).
procesorului. Acest mod de lucru este cel mai avantajos, eficient şi nu implică un efort de
programare suplimentar.
Mecanismul de paginare este o problemă mai simplă şi urmăreşte optimizarea transferurilor între
diferite structuri de memorie. De exemplu, majoritatea structurilor de date se găsesc stocate la
nivelul memoriei de masă (disc). Atunci când procesorul cere accesul la o anumită informaţie,
dacă aceasta nu se găseşte în memoria RAM este transferată întreaga pagină care o conţine.
Memoria Cache lucrează într-o manieră similară, numai că, de regulă transferul se face la nivel
de linie (o succesiune de bytes).
Funcţionarea memoriei Cache este mult mai complexă, mai ales datorită necesităţilor de
actualizare într-o manieră eficientă. Scopul urmărit este aducerea în zona Cache a datelor cel mai
frecvent utilizate. De obicei, datele deja aflate în Cache sunt înlocuite atunci când nu mai este
spaţiu pentru noile date accesate.
Memoria Cache lucrează după următorul principiu de bază. Atunci când procesorul are nevoie de
date încearcă să le obţină din memoria Cache. Dacă acestea sunt disponibile (situaţia de Hit) nu
se mai face acces la memoria RAM.ele sunt transferate. Dacă nu sunt disponibile, se face
transferul din memoria RAM şi imediat datele sunt copiate şi în Cache, pentru a putea fi utilizate
cu altă ocazie. Problema scrierii în memorie este însă mai coplicată. Procesorul va efectua, de
regulă, scrierea numai în memoria Cache, actualizarea memoriei RAM urmând să fie realizată
după anumiţi algoritmi de eficienţă, astfel încât gradul de ocupare al procesorului să fie minim.
Tot din motive de eficienţă stocarea şi căutarea în memoria Cache se efectuează într-o manieră
mai specială. Astfel, datele aduse în Cache nu sunt ordonate (într-o manieră liniară) după codul
de adresă aşa cum se lucrează în RAM. Acestea sunt transferate în Cache în funcţie de modul de
acces controlat de program. Deci, aceste date vor corespunde unor adrese diferite (din RAM),
care nu se află într-o anumită ordine prestabilită. Astfel, nu există nici o legătură între adresele
din Cache, unde sunt păstrate temporar datele şi adresele din RAM, corespunzătoare funcţionării
programului. Totuşi, procesorul face accese urmărind codul de adresă, specific programului. De
aceea, pentru a putea fi căutate, în memoria Cache trebuie păstrate şi informaţii suplimentare,
referitoare la adresa reală din memoria RAM, plasate în vecinătatea datelor propriu-zise (în
structura Cache) în locaţii cunoscute sub numele de Tag (etichetă). Deoarece execuţia unui
program se face, de regulă, în zone relativ localizate de memorie informaţia din Tag nu conţine
întreaga adresă din RAM, ci numai o parte a acesteia, corespunzătoare unei anumite zone de
adrese.
Astfel, căutarea datelor în Cache trebuie făcută după codul adresei reale, memorat odată cu datele
transferate din RAM în locaţiile de Tag. Deci, operaţia de căutare se face prin comparaţia adresei
căutate cu cele disponibile deja în Cache. De aceea, se spune că memoria Cache este o memorie
asociativă.
Pentru a mări eficienţa de transfer pentru structura memoriei Cache sunt utilizate diferite structuri
pentru liniile de date, corespunzătoare unui datelor transferate într-un singur ciclu şi diferite
moduri (algoritme) de asociativitate. Alegerea dimensiunii liniilor, blocurilor sau grupurilor
urmăreşte criterii de eficienţă corespunzătoare vitezei de lucru ale memoriei şi procesorului şi
structurii ciclurilor maşină.
Asociativitatea totală permite ca orice locaţie din Cache să stocheze conţinutul oricărei adrese din
RAM. Aceasta presupune, ca la fiecare operaţie de căutare, să fie comparate toate codurile de
adresă, fiind necesar un timp inacceptabil, mai ales în cazul memoriilor Cache voluminoase.
ASC – Dan Olaru
De exemplu, structura unei memorii Cache de 512 octeţi, asociata procesoarelor I 386/486, cu 32
biţi de adresă fizică este următoarea. Cei 2 biţi, mai puţin semnificativi selectează numărul
octetului dintr-o linie conţinând câte 4 octeţi. Biţii 2, până la 31 reprezintă câte un “tag”, necesar
pentru căutarea asociativă, într-o listă cu 128 de valori (512/4=128).
Asociativitatea directă lucrează pe blocuri, structurile de date aduse în Cache corespunzând unor
zone cu adrese consecutive. În acest mod numărul de comparaţii este mult mai redus. Deşi
aparent mai expansivă, ocuparea memoriei Cache este eficientă deoarece programele lucrează cu
zone realtiv localizate de memorie.
De exemplu, pentru un Cache de 64 kB, putem folosi biţii 2-15 ai adresei fizice ca Index în
cadrul zonei (blocului cu adrese consecutive) corespunzătoare aceluiaşi Tag, pentru care vor fi
folosiţi biţii 16-31.
Asociativitatea parţială combină flexibilitatea celei totale cu simplitatea celei directe. Memoria
Cache este structurată pe grupuri, care lucrează în paralel, fiecare lucrând în maniera directă.
De exemplu, un Cache de 64 kB poate fi organizat în 2 grupuri a câte 32kB. Pentru câmpul index,
în cadrul fiecarui bloc, utilizăm 13 biţi (biţii 2-14), cu care va fi selectată una dintre cele 8kB de
locaţii posibile, din fiecare dintre cele două grupe. Câmpul Tag va avea 17 biţi (biţii 15-31) şi va
fi simultan (în acelaşi ciclu) comparat cu cele 2 câmpuri Tag corespunzătoare celor 2 grupuri.
În cazul când, la o încercare de acces, datele nu se găsesc în memoria Cache (situaţia de Miss-
Cache), acestea trebuie preluate din memoria RAM şi imediat trebuie făcută actualizarea în
Cache. Deoarece, în mod obişnuit, zona Cache este complet ocupată trebuie stabilit un mod de
alegere a datelor care vor fi substituite, corespunzator unui algoritm de înlocuire.
Algoritmul LRU (Least Recent Used) – realizează înlocuirea datei cel mai puţin recent utilizate.
Metoda este cea mai performantă, dar necesită un indicator al “vechimii” acceselor şi un
mecanism de actualizare a acestuia.
Algoritmul FIFO (First In, First Out) - realizează înlocuirea în ordine. Vechimea unui acces este
memorată cu ajutorul unui numărător asociat grupului respectiv.
Algoritmul de înlocuire aleatoare (Random) – şi această metodă poate folosi numărătoare, cu
deosebirea că, acestea pot fi incrementate de evenimente exterioare, cum ar fi un semnal de ceas
sau alte acţiuni de înlocuire.
În situaţia în care un anumit rezultat (sau date) trebuie memorat, procesorul va iniţia o operaţie de
scriere în memoria Cache, urmănd ca apoi să se facă actualizarea în RAM, algoritmul de transferl
urmărind anumite criterii de optim.
Algoritmul de scriere imediată (Write through) – execută scrierea în RAM după fiecare scriere în
Cache, angajând procesorul în operaţii de scriere repetate, expansive ca timp de lucru.
Algoritmul de scriere cu buffer (Buffered Write through) – memorează informaţia care trebuie
scrisă în RAM într-o memorie tampon (buffer). Realizarea scrierii necesită circuite specializate,
dar permite procesorului să efectueze alte operaţii, în paralel.
Algoritmul de scriere cu întoarcere (Write Back) – execută scrierea mai târziu, fără intervenţia
directă a procesorului, într-un moment ales după criterii de performanţă. Scrierea în memoria
RAM se poate face mai eficient dacă se aşteaptă copletarea unui întreg bloc de date. Dacă însă
există o altă cerere de scriere la o intrare deja utilizată, salvarea datelor precedente este
obligatorie, fiind nevoie de un ciclu de scriere “artificial”, neiniţiat de procesor, care însă pentru
performanţe optime necesită circuite hardware speciale.
ASC – Dan Olaru
Trebuie menţionat că, atunci când actualizarea scrierii în memoria RAM nu se face imediat, vor
putea apare locaţii invalide (dirty cells), care vor putea furniza date eronate, fără corespondenţă
cu cele din Cache.
tampon speciale, care conţin coduri sau operanzi aflaţi în faze de execuţie intermediare. Această
metodă asigură şi sincronizarea atunci când duratele de prelucrare, pentru fazele intermediare,
sunt diferite.
În cazul unei funcţionări optime, structura superscalară ar trebui să permită execuţia simultană a
mai multor instrucţiuni, pe durata unui singur ciclu de ceas. Rezultă o prelucrare în paralel a
instrucţiunilor unui program oarecare, care nu conţine restricţii specifice procesării paralele.
Înseamnă că pot apare diferite dependenţe, în sensul că o instrucţiune poate folosi, ca operand de
intrare, rezultatul execuţiei altei instrucţiuni. Pe de altă parte, succesiunea instrucţiunilor nu poate
fi, de la început, cunoscută deoarece pot apare instrucţiuni de salt, dependente la rândul lor de alte
rezultate intermediare.
În altă ordine de idei, disponibilităţile hardware ale procesorului nu sunt totdeauna aceleaşi, la
orice moment de timp. Astfel, prelucrarea unei instrucţiuni poate necesita la un moment dat
acţiunea unui subansamblu sau operator care este implicat în procesarea altei instrucţiuni.
Pentru rezolvarea acestor probleme, abordarea structurilor suprscalare a necesitat dezvoltarea mai
multor categorii de concepte noi, prezentate mai jos.
Execuţia dinamică (Dynamic Execution) – Codul operaţiei este scindat în mai multe micro-
operaţii de lungime fixă, care după o rearanjare corespunzătoare se execută simultan, într-un
singur ciclu de ceas.
Execuţia speculativă (Speculative Execution) – Instrucţiunile sunt executate în altă ordine decât
cea impusă de program. În acest fel este evitată acţiunea salturilor. Rezultatele temporare sunt
stocate temporar într-o zonă de memorie tampon, urmând ca apoi să fie supuse unei operaţii de
rearanjare. În cazul apariţiei unei instrucţiuni de salt, chiar înainte ca aceasta să fie complet
executată, procesorul continuă încărcarea de instrucţiuni pentru a completa coada de aşteptare de
la intrare. Alegerea adreselor de încărcare a instrucţiunilor este estimată (speculată), urmând ca
apoi, să fie verificată şi confirmată. Dacă adresa de salt nu a fost corect estimată, coada de
instrucţiuni deja încarcate este golită şi se reia procesul de încărcare de la adresa corectă.
Execuţie în orice ordine (Out of order execution) – Execuţia instrucţiunilor se face în paralel, fără
a ţine cont de execuţia lor secvenţială din program. Dacă apare o indisponibilitate a unei resurse
hardware, procesorul va executa instrucţiunea următoare, care nu intră în conflict cu precedenta,
urmând să revină ulterior la instrucţiunea peste care a sărit.
Reordonare (utilizarea ROB – Re-Order-Buffer) – Rezultatele temporare, obţinute după execuţia
speculativă a unui număr de microinstrucţiuni de lungime fixă, sunt stocate într-o zonă tampon
(ROB). Rezultatele finale trebuie aranjate apoi în ordinea corespunzatoare.
Predicţia salturilor (Branch Prediction)- Este o procedură prin care sunt estimate adresele de salt,
pentru a permite încărcarea de instrucţiuni în coada de aşteptare, înainte de execuţia completă a
instrucţiunii de salt. Estimarea are loc pe baza informaţiilor obţinute, într-o manieră statistică, de
la execuţiile anterioare ale instrucţiunilor de salt, care au avut loc într-o perioadă relativ recentă,
folosind o memorie tampon.
Detecţia dependenţelor – Determinarea dependenţelor, la nivelul operanzilor, între instrucţiuni.
Cu ajutorul unui set de comparatoare se determină dacă registrul de scriere a unei instrucţiuni,
aflate într-o etapă mai avansată, este folosit, ca intrare, de alte instrucţiuni aflate în fazele de
prelucrare precedente. Dacă se întâmplă aşa, prelucrarea instrucţiunii respective (din faza
precedentă) este blocată până la obţinerea datelor necesare.
Modul de Înaintare (Forward) – Este folosită atunci când rezultatele obţinute în urma execuţiei
unei instrucţiuni, conform programului, trebuie plasate într-un registru, pentru a fi folosite de o
ASC – Dan Olaru
instrucţiune următoare. Pentru mărirea eficienţei, circuite specializate transferă rezultatul către
instrucţiunea următoare, când aceasta se află încă în faza de decodificare, fără a mai efectua
transferuri intermediare cu regiştri.
Branch
Instr.Cache
Target
Buffer
Prefetch Buffer
Data
Microcode
Bus Instr. Decode ROM
Addr
Bus
Ctrl Control Unit
Mag
Ctrl.
Adr.Gen (U) Adr.Gen (V) FPU
Control
Page
Unit Int. Reg. File FP. Reg. File
ALU (U) ALU (V)
Add
Shifter
Multiply
Data Cache
Divide
TLB
Adresarea memoriei
Funcţionarea procesorului, în orice moment, este guvernată de un program care constă în
instrucţiuni (comenzi) maşină, care pot fi încărcate şi executate prin intermediul circuitelor
electronice (hardware) aferente. Deci, orice program, scris într-un anumit limbaj, trebuie
transformat (compilat) în limbaj de asamblare, bazat numai pe istrucţiunile specifice procesorului
utilizat. Codul unei instrucţiuni (determinat de formatul instrucţiunii) specifică tipul operaţiei şi
informaţiile necesare identificării operanzilor de intrare şi de ieşire, care se găsesc iniţial în
memoria RAM (memoria principală) sau care, eventual, au fost transferaţi în registrele
procesorului. Deoarece pe parcursul execuţiei programului sunt efectuate numeroase accese la
memorie, din motive de eficienţă (viteză de lucru) şi de simplitate în scrierea programelor există
mai multe moduri de specificare a locaţiei unde se găsesc operanzii, cunoscute ca moduri de
adresare a memoriei. Tot din motive de eficienţă dimensiunea (mărimea) locaţiilor adresate
trebuie să corespundă volumului datelor stocate. De aceea, adresarea memoriei, şi chiar a
registrelor procesorului se poate face la nivel de octet (byte), cuvânt sau dublu-cuvânt. Acest mod
ASC – Dan Olaru
de lucru permite, pe de altă parte compatibilitatea cu programele mai vechi, scrise pentru
procesoare cu o dimensiune mai redusă a cuvântului de date.
Adresarea imediată (directă) – Operandul este un octet sau un cuvânt conţinut în codul
instrucţiunii.
Adresarea directă la registru – Operandul este conţinutul unui registru, specificat în codul
instrucţiunii.
Adresarea directă la memorie – Operandul se află în memorie la adresa efectivă (offset)
specificată în codul instrucţiunii.
Adresarea indirectă la memorie prin registru – Operandul se află în memorie la adresa efectivă
dată de conţinutul unui registru (de bază sau index).
Adresarea indirectă la memorie prin registru cu deplasare – Operandul se află în memorie la o
adresă efectivă dată de suma între conţinutul unui registru de bază sau index, şi un deplasament
specificat în codul instrucţiunii.
Adresarea indirectă la memorie prin două registre – Operandul se află în memorie la adresa
efectivă dată de suma conţinuturilor registrelor de bază şi index, specificate în codul instrucţiunii.
Adresarea indirectă la memorie prin două registre cu deplasare – La adresa operandului,
calculată ca mai sus, se adaogă o valoare corespunzătoare unui deplasament, specificat în codul
instrucţiunii.
Setul de registre
Familia de microprocesoare produse de firma Intel, desemnată prescurtat I 80X86, identificate
prin indicativele: 8086, 8088, 80186, 80286, 80386, 80486, conţine acelaşi set de bază de registre
generale. Pentru tipurile mai recente au foste aduse diferite îmbunătăţiri, păstrând
compatibilitatea cu cele precedente. Dezvoltările ulterioare, cunoscute sub denumirea de
Pentium, s-au bazat, de asemenea, pe aceleaşi concepte.
a) Grupul de Registre generale se poate împărţi, la rândul lui, în două subgrupuri:
Registre de date: AX, BX, CX, DX se caracterizează prin faptul că pot fi adresate şi la nivel de
octet, care poate ocupa jumătatea inferioară (AL, de exemplu) sau superioară (AH, de exemplu) a
unui registru. Deşi aceste registre sunt considerate ca registre generale, există şi instrucţiuni
aritmetice care le acordă anumite semnificaţii speciale, aşa ca mai jos:
AX – operaţii de intrare/ieşire pe 16 biţi (un cuvânt) sau registru implicit (când nu este specificat
în instrucţiunea respectivă) pentru înmulţiri şi împărţiri pe 16 biţi;
AL - operaţii de intrare/ieşire pe 8 biţi şi registru implicit în aritmetica BCD, înmulţiri şi împărţiri
pe 8 biţi;
AH - registru implicit pentru înmulţiri şi împărţiri pe 8 biţi;
BX – operaţii cu memoria, adresare indirectă;
CX - registru implicit pentru operaţii cu şiruri şi bucle;
CL – operaţii de deplasare sau rotaţie a poziţiei biţilor în cadrul registrului;
DX - operaţii de intrare/ieşire cu adresare indirectă şi registru implicit pentru înmulţiri şi împărţiri
pe 16 biţi.
Registre de adresare care pot fi clasificate în:
Registre indicatoare de adresă în stivă:
SP (“Stack Pointer”) – conţine adresa curentă în stivă;
BP – registru implicit, conţinând adresa de bază pentru adresarea indirectă a stivei;
Registre indicatoare de adresă index pentru şiruri:
ASC – Dan Olaru
Astfel adresa completă a codului instrucţiunii este formată din conţinutul registrului CS şi
deplasamentul (offsetul) numărătorului de program IP (Instruction Pointer). Registrul DS conţine
de obicei adresa bazei segmentului de date. În cazuri speciale sunt folosite registrele BP, SP sau
DI. De obicei, segmentul de stivă este identificat prin SS. Atunci când sunt utilizate în mod
implicit sau explicit registrele BP şi SP se consideră că segmentul de date este definit explicit
prin conţinutul registrului ES.
Se observă că aceste cipuri realizează funcţii specifice lucrului cu magistrala. Printre acestea
sunt: amplificarea în curent a semnalelor de adrese sau de date (funcţia de driver); generarea
respectiv amplificarea semnalelor de control şi eventual memorarea temporară a informaţiilor de
adresă sau date, atunci când se lucrează cu blocuri de memorie sau cu tronsoane de magistrală
ASC – Dan Olaru
multiplexate (pe care se transmit succesiv informaţii referitoare la zonele de adresă sau coduri de
adresă şi date).
Cipsetul CS 80230 admite o magistrală locală pentru procesor (CPU), un sistem de memorie de
32 de biţi şi magistralele secifice arhitecturii AT (advanced technology), corespunzător Fig.*.
Cipurile 82C301 şi 82A306 asigură generarea şi sincronizarea semnalelor de control pentru toate
magistralele. Circuitul 82C301 suportă, de asemenea, un semnal de ceas independent şi permite
alegerea dinamică a semnalului de ceas pentru procesor. Circuitul 82A306 conţine amplificatoare
(buffer) pentru semnalele de control de magistrală şi circuite necesare altor funcţii logice.
Circuitul 82C302 permite funcţionarea subsistemului de memorie în regim de memorie paginată.
Circuitele 82A303 şi 82A304 asigură interfaţarea între toate magistralele de adresă, generează
semnalele de adresă RAS/CAS pentru sistemul de memorie şi adresele necesare pentru transferul
între căile de date. Două circuite sunt folosite pentru interfaţarea între sistemul de memorie local
şi magistralele de date. De asemenea, poate realiza transferul între căi de date cu parametrii
diferiţi.
Sistemul bazat pe cipsetul CS 80230 conţine patru magistrale, şi anume: magistrala locală a
procesorului (A şi D - adrese şi date), magistrala sistemului de memorie (MA şi MD), magistrala
canalelor de intrare-ieşire (I/O – SA şi SD), magistrala extinsă X-bus (XA si XD). Magistrala
sistemului de memorie este utilizată pentru interfaţarea controlerului DRAM cu circuitul 82C302.
Magistrala canalelor de intrare-ieşire (I/O) este destinată cuploarelor compatibile magistralei AT,
pentru dispozitive funcţionând pe 8 sau 16 biţi. Magistrala “X” este utilizată pentru periferice
atunci când într-o structură IBM PC AT sunt prezente controlere DMA şi de temporizare (Timer).
Aceasta contine numai căi de date de 8 biţi. Termenul de magistrală AT (AT bus) se referă la
magistrala canalelor I/O şi magistrala “X”. Sunt prevăzute, de asemenea, extensii ale magistralei
I/O pentru 32 de biţi.
ASC – Dan Olaru
82A305
80386 (x2)
Data
Buffers
DRAM
82A204 – conţine amplificatoarele (driver) pentru liniile de adresă inferioare pentru magistrala
extinsă, pentru magistrala I/O şi magistrala memorie. În afară de amplificarea (buffering)
semnalelor de adresă pentru memorie, 82A204 mai realizează multiplexarea pe linii şi coloane la
memorie şi numărarea ciclurilor de reînprospatare (refrech).
Elemente constructive
colector drena
baza poarta
emitor
sursa
difuzie se opreşte în momentul când câmpul electric generat de sarcinile spaţiale echilibrează
forţele care au generat difuzia.
În lipsa aplicării unei tensiuni exterioare, pe laturile joncţiunii, nu există conducţie electrică
deoarece deplasarea sarcinii spaţiale este oprită de câmpul rezultat, care se opune procesului de
difuzie al purtătorilor. Dacă însă este aplicată o tensiune exterioară, contrară câmpului creat de
sarcini (joncţiunea este polarizată direct), aceasta va reduce influenţa câmpului şi purtătorii de
sarcină vor putea migra mai departe. Dacă prin bornele joncţiunii pot circula curenţi, aceştia vor
alimenta permanent joncţiunea cu purtători, menţinându-se astfel un circuit electric prin
joncţiune.
Dispozitivul electronic cu o singură joncţiune reprezintă o diodă. Datorită mecanismului
prezentat mai sus aceasta poate conduce curentul numai într-un singur sens. Principiul de
funcţionare al tranzistorului bipolar se bazează pe o structură cu două jonctiuni (npn de exemplu),
în care grosimea zonei dintre joncţiuni este foarte redusă. Astfel, un curent în joncţiunea bază-
emitor (polarizată direct) poate alimenta cu purtători joncţiunea vecină (bază-colector) care este
polarizată invers. Se dovedeşte astfel că joncţiunea bază-colector este blocată în lipsa unui curent
de bază, iar atunci când acesta este prezent, curentul prin joncţiune bază-colector este “comandat”
de curentul de bază . Acest fenomen poate avea loc datorită “modulării” zonei de sarcină spaţială
din zona bazei, vecină colectorului, prin intermediul curentului de bază care curge spre emitor.
Deci, la un tranzistor bipolar tensiunea bază-emitor, care este polarizată direct, are variaţii reduse,
comanda realizându-se prin intermediul curentului de bază.
Funcţionarea tranzistorului MOS este mult diferită. Deşi avem o structură de joncţiuni care pare
asemănătoare, comanda curentului drenă-sursă se realizează diferit. Constructiv, tranzistorul (de
tip p, de exemplu) este realizat pe o structură de tip p, zonele corespunzătoare sursei şi drenei
fiind de tip n (Fig.*). Deasupra zonei de legătură între drenă şi sursă se găseşte electrodul de
poartă, izolat de structura semiconductoare printr-un strat, extrem de subţire, de oxid de siliciu
(SiO2). Dacă electrodul de poartă nu este polarizat, circulaţia curentului între sursă şi drenă este
blocată de una dintre cele două joncţiuni, care este polarizată invers. Atunci când între electrodul
de poartă şi cel al sursei se aplică o diferenţă de potenţial, aceasta creează un câmp electric
deasupra zonei de legătură dintre sursă şi drenă. Când acest câmp este destul de puternic, acesta
extrage purtători de sarcină din structura semiconductoare, care devin liberi. Aceştia vor asigura
procesul de conducţie între sursă şi drenă.
p n n E n
canal de purtători
n
substrat Structură p
Elemente de circuit
Circuite de multiplexare şi demultiplexare
În cazul când căile de date conţin numai o singură linie, corespunzătoare transferului unui singur
bit de date, pentru selecţie este necesară numai o singură conexiune. Schema multiplexorului (a)
ASC – Dan Olaru
poate fi implementată cu trei porţi Şi-Nu (NAND) şi un inversor. În funcţie de starea intrării va fi
validată numai una dintre porţi, care se va comporta ca un inversor. Starea celeilalte va fi forţată
pe nivelul “1”. Rezultă că poarta de la ieşire se va comporta tot ca un inversor, pentru datele
transmise. Se observă că porţile de la intrare joacă rolul unor operatori de tip ŞI (înmulţire
binară), iar poarta de la ieşire joacă rolul unui operator SAU (adunare binară). Deci, porţile de la
intrare pot permite sau nu transferul datelor, iar poarta de ieşire transmite la ieşire numai
contribuţia intrării porţii validate, indiferent de nivelul logic al celeilalte intrări. Tabelul de
adrevăr pentru această structură de multiplexor este Tab.1.
În schema demultiplexorului (b), valoarea de la intrare este distribuită către cele două porţi de
validare a trasferului. În funcţie de nivelul conexiunii de selecţie, va fi validată numai o singură
poartă, care va juca rol de inversor, iar cealaltă va fi forţată în starea “1”. Inversoarele de la ieşire
au rolul de a restabii nivelul de la intrare (ne-inversat). Dacă acestea sunt de tip “trei-stări”, la
ieşirea inactivă vom avea impedanţă mare (nivel flotant). În caz contrar, ieşirea inactivă va fi
poziţionată pe “0”. Tabelul de adevăr Tab.2 corespunde ieşirilor cu două nivele logice, iar Tab.3
celor cu trei-stări. Deşi demultiplexoarele integrate separate nu au, de regulă, ieşiri cu trei-stări,
totuşi această schemă este foarte utilă în cazul structurilor complexe cu multe nivele de conexiuni
sau magistrale interne multiple.
A
QA
Q IN
B
QB
(a) Selecţie (b)
Selecţie
Fig.*. Schema multiplexorului şi demultiplexorului cu câte două căi selectate
Circuite de memorie
Circuitele de memorie au un rol esenţial în alcătuirea şi funcţionarea unui sistem de calcul.
Acestea sunt prezente nu numai la nivelul dispozitivelor propriu-zise de memorie (RAM, Cache),
dar şi la nivelul procesorului sau dispozitivelor periferice (cuploare), sub forma registrelor de
memorie (Latch) sau a elementelor bistabile.
Memoriile sau regiştrii de tip static conţin colecţii de circuite bistabile interconectate. Acestea
sunt elemente de memorie cu două stări care pot memora o unitate de informaţie (un bit). Astfel,
ASC – Dan Olaru
circuitul trece în starea logică corespunzătoare intrării (prin operaţia de scriere) spunem că acesta
memorează informaţia de la intrare, până când are loc o nouă operaţie de scriere.
Cu ajutorul circuitelor bistabile se pot construi circuite secvenţiale. Acestea sunt caracterizate de
mai multe stări, specifice stărilor individuale ale bistabililor din care sunt alcătuite. De exemplu,
dacă un circuit secvenţial conţine trei bistabili, acesta va putea avea cel mult 8 stări,
corespunzătoare tuturor combinaţiilor de stări ale celor trei bistabili. Astfel, dacă codificăm
(reprezentăm) starea fiecărui bistabil cu câte un bit, care poate fi 0 sau 1, rezultă că starea globală
a circuitului secvenţial poate fi reprezentată de trei biţi. Un număr cu trei biţi poate avea valori (în
zecimal) de la 0 la 7, deci în total 8 valori sau 8 stări. Este important că acestea nu mai depind
direct de stările (valorile logice) de la intrare. De fapt, la un moment dat, starea globală a
circuitului secvenţial depide de starea iniţială a acestuia (la punerea în funcţiune), de starea
instantanee a intrărilor dar şi de istoria (evoluţia) intrărilor până în acel moment. Cu toate
aceestea se poate arăta că un circuit secvenţial poate fi construit cu operatori combinaţionali, de
tipul porţilor logice. Funcţionarea circuitului, bazată pe stări stabile, care nu sunt direct
dependente de intrări se poate realiza prin folosirea unor bucle de reacţie pozitivă (conexiuni de
la ieşiri către intrări).
Un exemplu simplu de circuit bistabil poate fi implementat cu două porţi NAND (Fig.*).
SA
QA
SB QB
Pentr această conexiune, stările la ieşire sunt determinate în modul următor. Dacă, de exemplu,
intrarea SA are starea logică 0, ieşirea corespunzătoare QA va trece obligatoriu în starea 1,
conform modului de lucru al porţii NAND. Cealaltă ieşire, QB va fi determinată de intrarea SB şi
iesirea QA. Dacă SB are starea logică 0, QB va trece obligatoriu în starea 1, iar QA va depinde de
starea intrării SA şi ieşirii QB. Dacă ambele intrări sunt în starea 0, ambele ieşiri vor fi forţate în 1,
iar dacă ambele intrări sunt în starea 1, aceste nu vor influenţa porţile NAND, starea lor
rămânând cea precedentă. Rezultă funcţionarea descrisă de tabelului *.
Tabelul *
Intrarea SA Intrarea SB Ieşirea QA Ieşirea QB
0 0 1 1
0 1 1 0
1 0 0 1
1 1 St. prec. St. prec.
Se observă că acest circuit bistabil poate fi folosit ca o celulă de memorie. Atunci când la intrări
se aplică valori logice complementare, acestea vor determina starea bistabilului, similar unei
operaţii de scriere. Această stare va fi menţinută, chiar dacă nu mai avem informaţie la intrări, cu
condiţia ca acestea să fie trecute în starea logică 1. Astfel, o celulă de memorie, în forma cea mai
ASC – Dan Olaru
simplă, poate fi construită dacă adăugăm circuitului bistabilul două porţi pentru validarea
operaţiei de scriere şi un circuit inversor, pentru obţinerea intrărilor cu valori logice
complementare (Fig.*). Dacă semnalul de scriere Write este în starea 0, ieşirile porţilor de
validare vor avea valoarea 1, iar bistabilul îşi va păstra starea precedentă, care va putea fi citită la
ieşire. Dacă semnalul de scriere are valoarea logică 1, porţile de validare vor inversa şi vor aplica
la intrările bistabilului semnalele complementare de la intrarea şi de la ieşirea inversorului.
Astfel, dacă la intrare avem starea 0, respectiv 1 logic, aceasta se va regăsi la ieşire după operaţia
de scriere.
Intrare
Ieşire
Write
Celula de memorie de tip dinamic nu se bazează pe un circuit bistabil. În acest caz informaţia
(valoarea sau starea descrisă de un bit) corespunde stării de încărcat sau descărcat a capacităţii
de poartă a unui tranzistor MOS (Fig.*). Avantajul major al acestei structuri este faptul că pentru
stocarea informaţiei este necesar un singur tranzistor, deci densitatea celulelor de memorie pe cip
şi implicit capacitatea totală ve memorie este mult mai mare.
selecţie
Această schemă de principiu a celulei de memorie conţine trei tranzistori MOS. Capacitatea de
poartă a celui din mijloc reprezintă elementul de stocare. Ceilalţi doi tranzistori joacă rol de
elemente de comutaţie. Capacitatea de stocare poate fi încărcată sau descărcată dacă tranzistorul
de la intrare este în stare de conducţie. Datele sunt acesibile pentru citire dacă tranzistorul de
ieşire este în conducţie.
În realitate, se utilizează o schemă mai eficientă (Fig.*), la care fiecare celulă de memorie
(corespunzătoare unui bit) conţine numai doi tranzistori MOS, unul pentru obţinerea capacităţii
de stocare, figurat cu un condensator, iar celălalt pentru conectarea acestuia la o reţea de
conexiuni, cu o structură matriceală (figurat printr-un comutator).
ASC – Dan Olaru
Memoria RAM dinamică, deşi poate oferi capacităţi mult mai mari, pentru acelaşi număr de
componente, pune două probleme. Prima se referă la pierderea, în timp a sarcinii din capacitatea
de stocare. De aceea, pentru ca memoria să-şi păstreze conţinutul, sunt necesare cicluri de
reîmprospătare sau Refresh prin care este regenerată sarcina capacităţilor de stocare.
În al doilea rând, capacitatea tranzistorilor MOS, de dimensiuni foarte reduse (de ordinul
micronului) este foarte mică şi sarcina stocată în aceasta nu este capabilă să comande
amlificatoarele de magistrală.
Atunci când memoria dinamică este în funcţiune, datorită prezenţei unor circuite suplimentare,
ciclurile de Refresh, de fapt, sunt realizate odată cu operaţiile de scriere sau citire. Aceasta se
impune datorită faptului că prin operaţia de scriere sau citire sarcina stocată se pierde, fiind
distribuită pe intrările comparatoarelor. Astfel, este necesară o secvenţă de lucru specială, care
permite detecţia prezenţei sarcinii de stocare, la nivelul tranzistorilor MOS şi care acţionează în
modul următor:
- înainte de fiecare operaţie de citire, comutatoarele de la nivelul superior generează o
secvenţă de preîncărcare care se obţine o sarcină electrică, la nivelul liniei de bit,
localizată de fapt în porţile tranzistoarelor MOS de la intrarea comparatoarelor;
- în momentul când un comutator de legătură cu o capacitate de stocare intră în conducţie
(comandată de linia de cuvânt), sarcinile de preîncărcare se redistribuie în funcţie de
starea de încărcare a capacităţii de stocare. În funcţie de această redistribuire se va obţine
o anumită valoare pentru potenţialul la intrarea comparatoarelor, care vor comanda linia
de ieşire în starea Sus sau Jos;
- refacerea sarcinilor de stocare se face prin închiderea comutatoarelor de Refresh. Dacă
este vorba de o operaţie de citire, semnalul este luat de la ieşirea comparatoarelor,
bineînţeles după invalidarea intrărilor şi memorarea temporară a stării acestora. În cazul
unei operaţii de scriere, semnalul este preluat chiar de pe magistrală.
Acest mod de lucru este necesar deoarece, pe de o parte, sarcina de stocare este foarte redusă şi
nu este capabilă, singură, să comande intrările comparatoarelor şi, pe de altă parte, valoarea
potenţialului obţinut prin redistribuirea sarcinii poate fi mai bine controlată.
Atât liniile de preîncărcare ca şi liniile de cuvânt sunt comandate corespunzător cuvântului
selectat prin codul de adresă. Trebuie menţionat însă, că pentru a mări eficienţa procesului de
Refresh operaţia de citire se poate extinde la nivelul unui grup de cuvinte, corespunzător unei
anumite structuri matriceale de partiţionare a memoriei, selecţia cuvăntului citit pe magistrală
facându-se prin intermediul unui multiplexor (MUX).
ASC – Dan Olaru
Vcc/2
Preîncărcare
Celula
de 1 bit
Linie cuvânt
Linie de bit
Vcc/2 Vcc/2 Vcc/2
Refresh
Comparatoare
MUX
Din punct de vedere hardware, memoria este organizată în plăci (card-uri) care conţin mai multe
circuite integrate. Fiecare dintre acestea conţin un anumit număr de celule de memorie. Fiecare
celulă poate memora câte un bit. Totuşi funcţionarea calculatorului şi adresarea datelor se
bazează pe transferuri de grupuri de biţi (cuvinte). Deci cipul de memorie trebuie să conţină
circuite electronice suplimentare care să permită adresarea la citire sau scriere a câte unui grup de
celule de memorie, corespunzătoare cuvântului adresat. De asemenea, sunt necesare circuite
amplificatoare de curent, la ieşiri, şi circuite de recepţie, pentru transferul datelor către celulele de
memorie. Dacă liniile de ieşire trebuie să fie comune cu liniile de intrare, aşa cum se întâmplă în
cazul conexiunii directe la magistrală, fără intervenţia unui controler de memorie,
amplificatoarele de ieşire trebuie să fie cu trei-stări şi să fie activate numai în timpul operaţiei de
citire, prin de semnalul Read.
În Fig.* este descrisă o structură care conţine 16 celule de memorie, organizate în patru cuvinte.
Pentru adresarea celulelor de memorie este utilizat un circuit decodificator, care pentru fiecare
cod de adresă selectează câte o linie de celule de memorie, corespunzătoare unui cuvânt. Pentru
citirea datelor pe magistrală este activat semnalul CitireDate sau Read care validează
amplificatoarele de ieşire, care în caz contrar rămân în starea-a-treia (izolată).
ASC – Dan Olaru
b b b b
b b b b
Cod Adresă Reţea de
b b b b celule de
memorie
DEC
b b b b
Citire date
D3 D3
Data D2 D2 Data
In D1 D1 Out
D0 D0
CK D Q
Amplificator
(buffer) de intrare
CK Reprezentarea
CK simbolică
CK
Amplificator
(buffer) de ieşire
Fig.*. Schema de principiu a unui bistabil de tip “Latch” în implementare CMOS.
ASC – Dan Olaru
QA
IN
QB
(b) Selecţie OE
Q0 Q1 Q2 Q0 Q1 Q2
slave permit ca funcţionarea să fie stabilă, deoarece pe frontul crescător secţiunea master preia
datele de la bistabilul precedent, la care starea secţiunii master rămâne stabilă, iar pe frontul
descrescător este modificată starea secţiunii master a tuturor bistabililor.
Atunci când registrul este folosit la deplasarea datelor datelor (biţilor) unui cuvânt încărcarea se
face paralel, la comanda semnalului de încărcare (Load), apoi este comandată deplasarea cu un
număr de poziţii şi apoi datele se obţin la ieşirile paralele. Registrul poate fi configurat astfel
încât datele să fie deplasate atât la stânga cât şi la dreapta, în acest caz folosidu-se două semnale
de tact separate. De asemenea, deplasarea se poate face ciclic, atunci când ultima ieşire este
conectată la intrarea serială sau poziţiile rămase libere în urma deplasării pot fi completate cu 0
sau 1 în funcţie de starea intrarii seriale.
Registrul poate, de asemenea, să fie folosit la transformarea datelor din forma paralelă (ca pe
magistrală, de exemplu) în forma serială (ca la portul serial, de exemplu), atunci când se
utilizează intrările paralele şi ieşirea serială (SO) sau la transformarea datelor din forma serială în
forma paralelă atunci când se utilizează intrarea serială (SI) şi ieşirile paralele.
Intrări de date paralele
L
SI SO
M-S M-S M-S M-S
T (CK)
Se observă că, pentru aceasta configuraţie, bistabilul Slave comută pe frontul crescător al
impulsului de intrare, iar bistabilul Master comută pe frontul căzător al acestuia.
Q Q
T A P C Q
B P D Q
C D
0 1 0 1 0
1 1 0 1
1 0 1 1 0
P
P
1 0 1 1
0 1 1 0 1
1 0 1 0 A B
T
Fig.*.Schema de principiu a unui bistabil “master-slave”
ASC – Dan Olaru
Sumatorul
În cadrul sistemului de calcul datele sunt reprezentate cu cifre binare. Un număr binar poate
conţine mai multe cifre binare, valoarea acestuia fiind dată de o sumă de puteri ale lui doi având
drept coeficienţi cifrele binare ale numărului.
Suma a două numere binare trebuie făcută cifră cu cifră, transmiţând transportul de la o operaţie
la alta.
Combinaţiile de adunare pentru numere reprezentate de câte o cifră binară sunt:
0 0 1 1 termenul(A)
+ 0 +1 + 0 +1 termenul(B)
0 1 1 10 transportul(C) si suma (S)
În cazul IV cifra 0 reprezintă suma iar cifra 1 din stânga ei reprezintă transportul (carry) care
trebuie adogat la suma cifrelor plasate la stânga dacă numerele adunate au mai multe cifre. Se
observă că valoarile sumei şi transportului se pot obţine cu următoarele expresii de algebră
binară:
S = AB + AB C = AB
Tabelul de adevăr pentru cele două expresii este:
Termenul A Termenul B Suma S Transportul C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
A
B C
Dacă numărul binar conţine maimulte cifre, pentru calculul sumei şi transportului se pot utiliza
următoarele expresii logice:
S = ABC n − 1 + AB C n − 1 + ABC n − 1 + ABC n − 1
C = BC n − 1 + AC n − 1 + AB
Regula de sumare pentru fiecare ordin al cifrelor binare, pentru toate valorile posibile ale
termenilor şi transportului se va conforma tabelului de adevăr de mai jos:
Intrări Ieşiri
Transportul Cn-1 Termenul A Termenul B Suma Transportul Cn
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
ASC – Dan Olaru
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
Componentele unui sumator complet pentru numere cu câte două cifre binare este descris de
următoarele scheme logice:
A
B B
Cn-1 Cn-1
A Cn
S
ASC – Dan Olaru
Plan
1. Concepte de bază, Circuite de comutaţie, Algebra Booleană
Disp.de comutaţie – generaţiile calculatoarelor;
Semnificaţia logică şi aritmetică a cifrei binare (bit);
Reprezentarea numerelor – zecimală, binară, hexa, (ASCII).
3. Principii de funcţionare
Transmisia datelor, Operaţii aritmetice, Secvenţa de program;
Instrucţiunea maşină, format, operanzi, cod operaţie.
4. Memoria
RAM, ROM, CACHE, Registre, Fişiere (CD, DVD, Flash).
5. Procesorul
Maşina cu un tact;
Arhitecturi evoluate.
6. Periferice
Porturi, Întreruperi (hard, soft), Programe de serviciu (Drivere).