Documente Academic
Documente Profesional
Documente Cultură
Calculatoarele convenţionale digitale au o formă comună care îi este atribuită lui von Neumann, dar
istoria reală este că o întreagă echipă a fost responsabilă pentru elaborarea acestui model. De formaţie
matematician, acesta a înţeles că un program poate fi reprezentat în formă digitală în memoria
calculatorului, împreună cu datele asociate. Aritmetica binară paralelă putea deci înlocui cu succes
aritmetica zecimală stângace folosită de ENIAC, cu fiecare rang reprezentat de zece tuburi electronice (1
activ şi 9 inactive).
Modelul von Neumann constă din cinci componente ca în figura 1.1.
Input Unit şi Output Unit formează grupul dispozitivelor de intrare ieşire ce asigură instrucţiuni şi
date sistemului, care anterior au fost stocate în Memorii Unit.
Instrucţiunile şi datele sunt procesate de ALU, sub controlul unităţii Control Unit. Aceasta determină
execuţia instrucţiunilor una după alta, aşa cum au fost ele memorate, atât timp cât această secvenţă nu este
întreruptă de o instrucţiune de salt.
ALU şi CU formează unitatea centrală (CPU).
Memoria calculatorului IAS era formată din 1000 de locaţii de stocare, numite cuvinte, fiecare având
40 de digiţi binari (biţi). Atât datele cât şi instrucţiunile erau stocate aici. Deci numerele erau reprezentate
în formă binară, iar fiecare instrucţiune era tot un cod binar. Fiecare număr era reprezentat pe 39 de biţi şi
un bit de semn. Un cuvânt putea conţine, de asemenea, două instrucţiuni de 20 de biţi, fiecare formată
din: un cod al operaţiei de 8 biţi (opcode) specificând operaţia şi 12 biţi de adresă ai unui cuvânt din
memorie.
Unitatea de control aduce instrucţiunile din memorie şi acestea sunt executate pe rând. Pentru a putea
realiza acest lucru, o structură mai detaliată a maşinii IAS relevă faptul că atât unitatea de control cât şi
ALU posedă locaţii de stocare, numite registre, definite după cum urmează:
- Memory buffer register (MBR) – conţine un cuvânt ce va fi stocat în memorie sau e folosit pentru
a recepţiona un cuvânt din memorie,
- Memory address register (MAR) – specifică adresa în memorie a cuvântului ce va fi scris/citit în
MAR,
- Instruction register (IR) – conţine codul pe 8 biţi al instrucţiunii ce se execută,
- Instruction buffer register (IBR) – folosit pentru a reţine temporar a doua instrucţiune dintr-un
cuvânt de memorie,
- Program counter (PC) – conţine adresa următoarei perechi de instrucţiuni ce va fi adusă din
memorie,
- Accumulator (AC) şi multiplier quotient (MQ) – folosit pentru a reţine temporar operanzii şi
rezultatul din ALU. De exemplu, rezultatul multiplicării a două numere de 40 de biţi este un
număr de 80 de biţi; cei mai semnificativi 40 de biţi sunt reţinuţi în AC, iar cei mai puţin
semnificativi în MQ.
Programul stocat sau memorat este cel mai important aspect al maşinii von Neumann. Un program
este stocat în memoria calculatorului împreună cu datele. Deşi în prezent cunoaştem acest fapt ca un dat,
anterior dezvoltării calculatoarelor cu program stocat, programele erau memorate pe cartele, benzi
perforate sau benzi magnetice. În calculatoarele cu program memorat, programul poate fi manipulat ca şi
datele. Acest fapt a dat naştere compilatoarelor şi sistemelor de operare şi a făcut posibilă marea
versabilitate pe care o au calculatoarele actuale.
Un calculator cu n niveluri poate fi văzut ca n maşini virtuale diferite, fiecare cu un limbaj maşină
diferit. Numai programele scrise în L0 pot fi direct executate de circuitele electronice, fără a necesita o
traducere sau interpretare.
Un programator ce a scris un program pentru maşina virtuală de nivel n nu trebuie să se preocupe de
interpretările şi translatările de dedesubt. Cei mai mulţi utilizatori ce folosesc o maşină de nivel n sunt
interesaţi de ultimul nivel, deci de limbajul Ln care seamănă cel mai puţin cu limbajul maşină de pe
nivelul de bază. Cei care sunt interesaţi să înţeleagă cum funcţionează de fapt un calculator trebuie să
studieze toate nivelurile. Cei interesaţi de proiectarea unui calculator sau a unui nou nivel trebuie de
asemenea, să fie familiarizaţi şi cu alte niveluri decât cele de sus.
La nivelul cel mai de jos avem nivelul logic digital, format din porţi. Deşi sunt alcătuite din
tranzistoare, porţile pot fi modelate cu acurateţe ca circuite digitale. Fiecare poartă are una sau mai multe
intrări digitale (0 sau 1 logic) şi calculează, în funcţie de acestea o valoare de ieşire pe baza unei funcţii
simple cum ar fi ŞI, SAU, NU. Câteva porţi combinate pot forma o memorie de un bit, ce poate stoca 0
sau 1.
Memoriile de un bit pot fi combinate în grupuri de 16, 32 sau 64 (de ex.) pentru a forma registre.
Fiecare registru conţine un număr binar până la o anumită valoare.
Urmează nivelul microarhitecturii. La acest nivel avem în mod obişnuit o colecţie de 8 până la 32 de
registre care formează o memorie locală şi un circuit UAL ce poate executa operaţii aritmetice simple.
Registrele sunt conectate la UAL pentru a forma o cale de date (data path) prin care se transmit datele.
Operaţiile principale ale căii de date constau în selecţia a 1 sau 2 regiştri asupra cărora acţionează UAL,
de exemplu le adună şi rezultatul este stocat apoi în unul din regiştri.
Pe unele maşini operaţiile căii de date sunt controlate de un program numit microprogram. Pe alte
maşini calea de date este controlată direct prin hardware.
Pe maşinile cu control software al căii de date, microprogramul este un interpretor al instrucţiunilor
de pe nivelul 2. Acesta extrage, examinează şi execută instrucţiunile secvenţial folosind pentru aceasta
calea de date. De exemplu pentru ADD se va extrage intrucţiunea, se vor localiza şi aduce în registru
operanzii, UAL calculează suma şi în final rezultatul va fi depus într-un registru. Pe o maşină cu control
hardware al căii de date se vor executa paşii similari dar fără ajutorul unui program memorat explicit
pentru controlul interpretării instrucţiunilor de pe nivelul 2.
Nivelul 2 este nivelul arhitecturii setului de instrucţiuni (sau nivelul ISA – Instruction Set
Arhitecture). Fiecare producător de calculatoare publică un manual ce cuprinde şi acest set de instrucţiuni.
Aceste manuale tratează nivelul ISA, dar şi nivelele de dedesupt.
Următorul nivel este de obicei un nivel hibrid. Cele mai multe din instrucţiuni sunt de obicei, de
asemenea, intrucţiuni de nivelul ISA. În plus există un set de instrucţiuni noi, o organizare diferită a
memoriei, posibilitatea de executare concurentă a două sau mai multe programe şi diverse alte
caracteristici. Există mai multe posibilităţi de proiectare a nivelului 3 decât în cazul nivelurilor 1 şi 2.
Noile facilităţi adăugate pe nivelul 3 sunt realizate de un interpretor care se execută de pe nivelul 2,
interpretor numit sistem de operare din motive istorice. Instrucţiunile de pe nivelul 3 ce sunt identice cu
cele de pe nivelul 2 sunt executate direct de microprogram (sau controlate hardware) şi nu de sistemul de
operare. Astfel spus, unele instrucţiuni de pe nivelul 3 sunt interpretate de sistemul de operare, iar alte
instrucţiuni de pe nivelul 3 sunt interpretate direct de microprogram. Aceasta este semnificaţia termenului
“hibrid” folosit anterior. Vom numi acest nivel , nivelul maşină al sistemului de operare.
Primele trei niveluri ne sunt proiectate a fi utilizate de programatorul obişnuit. Ele sunt concepute, în
principal, pentru execuţia interpretoarelor şi translatoarelor necesare susţinerii nivelurilor superioare.
Aceste interpretoare şi translatoare sunt scrise de programatorii de sistem, puţini la număr, care sunt
specializaţi în proiectarea şi implementarea de noi maşini virtuale. Nivelul 4 şi cele superioare sunt
destinate programatorilor de aplicaţii.
O altă modificare ce apare pe nivelul 4 este metoda prin care sunt susţinute nivelurile superioare.
Nivelurile 2 şi 3 sunt întodeauna interpretate . Nivelurile 4 şi 5 şi altele superioare sunt, de obicei,
susţinute de translatoare, deşi nu întotdeauna.
O altă diferenţă între nivelele 1,2,3 şi 4,5 este natura limbajului oferit. Limbajele maşină ale
nivelurilor 1,2,3 sunt numerice. Începând cu nivelul 4 limbajele conţin cuvinte sau abrevieri pe înţelesul
oamenilor.
Nivelul 4, nivelul limbajului de ansamblare, este de fapt o formă simbolică pentru unul din limbajele
inferioare. Acest limbaj oferă utilizatorilor o metodă de a scrie programe pentru nivelurile 1, 2, 3 într-o
formă care nu este chiar aşa de dificilă ca cea a limbajelor virtuale. Programul care efectuează traducerea
de pe acest nivel se numeşte asamblor (assembler).
Nivelul 5 conţine de obicei limbaje proiectate pentru a fi utilizate pentru programatori de aplicaţii.
Aceste limbaje sunt frecvent numite limbaje de nivel înalt. Există sute de astfel de limbaje. Dintre cele
mai cunoscute se numără C, C++, BASIC, JAVA, LISP, PROLOG, PASCAL. Programele scrise în aceste
limbaje sunt traduse pentru nivelurile 3, 4 de translatoare cunoscute sub numele de compilatoare, deşi
acestea pot fi uneori interpretate. De exemplu., programele scrise în Java sunt deseori interpretate. În
unele cazuri nivelul 5 reprezintă un interpretor pentru un domeniu aplicativ, particular, de exemplu calcul
simbolic.
În esenţă calculatoarele sunt proiectate ca o serie de niveluri, fiecare nivel fiind construit pe baza
precedecesorului său. Fiecare nivel reprezintă o abstractizare distinctă cu obiecte şi operaţii diferite.
Mulţimea de tipuri de date, operaţii şi caracteristici ale fiecărui nivel se numeşte arhitectură. Arhitectura
se referă la aspecte care sunt vizibile pentru utilizatorul unui nivel. Diferite caracteristici văzute de
programator, de exemplu memoria existentă, sunt părţi ale arhitecturii. Aspectele complementare, de
exemplu tehnologia de realizare a cipurilor de memorie nu fac parte din arhitectură (ci din organizare). În
practica comună arhitectura calculatoarelor şi organizarea calculatoarelor înseamnă acelaşi lucru
1.3. Procesoare (UCP)
În figura 1.1 este prezentată organizarea unui calculator simplu, organizat în jurul unei magistrale.
Figura 1.1.
Componentele sunt conectate printr-o magistrală; aceasta este formată dintr-o mulţime de fire
paralele pe care sunt transmise adrese, date şi semnale de control. Magistralele se pot afla în exteriorul
UCP conectând o memorie şi dispozitivele I/0, dar şi în interiorul UCP.
UCP este alcătuit din mai multe părţi distincte: unitatea de control răspunde de extragerea
instrucţiunilor din memoria principală şi executarea lor, iar UAL execută operaţiile necesare îndeplinirii
instrucţiunilor.
UCP mai conţine şi o memorie redusă ca dimensiune, foarte rapidă, plasată pentru depozitarea
rezultatelor temporare şi a anumitor informaţii de control. Aceasta e formată dintr-un număr de regiştri.
De obicei toate registrele au aceaşi dimensiune. Registrele pot fi citite şi scrise cu mare viteză deoarece se
află în interiorul UCP. Cel mai important registru este PC (program counter) care indică instrucţiunea
următoare ce va fi extrasă pentru execuţie. Important este şi registrul IP – registru de instrucţiuni
(instruction register), în care se păstrează instrucţiunea în curs de execuţie. Mai există şi alte registre, de
uz general şi altele pentru scopuri bine determinate.
Figura reprezintă aşa numita cale de date şi include registre (între 1 şi 32), UAL şi mai multe
magistrale de legătură. Registrele trimit date către cele 2 registre de intrare în UAL, notate A şi B.
Acestea au rolul de a păstra datele de intrare ale UAL în timp ce acesta calculează. UAL execută asupra
datelor operaţii simple (adunări, scăderi, funcţii logice) al căror rezultat este depus ulterior tot în registre
prin intermediul registrului de ieşire. Ulterior registrul poate fi scris (adică depozitat) în memorie. În
exemplul ilustrat este prezentată operaţia de adunare.
Majoritatea instrucţiunilor fac parte din categoria registru–memorie sau registru–registru.
Instrucţiunile registru-memorie permit cuvintelor din memorie să fie încărcate în registre, unde pot fi
folosite, de exemplu, ca date de intrare pentru UAL, Altele sunt folosite pentru depozitarea în memorie.
“Cuvintele” sunt unităţi de date transferate între memorie şi registru. Un cuvânt are lungimea
variabilă, în funcţie de calculatorul de care discutăm. Subiectul se va detalia în capitolul privind memoria
şi organizarea memoriei.
O astfel de instrucţiune extrage doi operatori din registru, îi aduce în registrele de intrare ale UAL,
execută o operaţie asupra lor, şi depune rezultatul din nou în registru. Se numeşte ciclu al căii de date
(data path cycle) procesul prin care cei doi operatori sunt trecuţi prin UAL şi rezultatul este depozitat.
Aceasta este o dată extrem de importantă pentru cele mai multe UCP. Ea defineşte în mare măsură ce
poate face maşina. Cu cât ciclul căii de date e mai rapid, cu atât maşina funcţionează mai repede.
S1 S2 S3 S4 S5
(a)
S1
S2
S3
S4
S5
1 2 3 4 5 6 7 8 9 timp
(b)
Fig. 1.3. O bandă de asamblare de 5 segmente (a)
Starea fiecărui segment în funcţie de timp (b)
Segmentul 1 extrage instrucţiunea din memorie şi o plasează într-un registru tampon. Segmentul 2 o
decodifică, determinându-i tipul şi operanzii. Segmentul 3 localizează şi extrage operanzii, fie din
registre, fie din memorie. Segmentul 4 execută instrucţiunea, de obicei rulând operanzii prin calea de
date, iar segmentul 5 scrie rezultatul în registre.
În figura 1.3 –b vedem cum operează o bandă de asamblare în funcţie de timp. În ciclul 1, reg S1
lucrează cu instrucţiunea 1 şi o extrage din memorie. În ciclul 2, S2 decodifică instrucţiunea 1. Tot în
ciclul 2, S1 extrage instrucţiunea 2. În ciclul 3, S3 extrage operanzii pentru instrucţiunea 1, S2 decodifică
instrucţiunea 2 şi S1 extrage instrucţiunea 3.
Dacă un ciclu maşină durează x ns, o maşină clasică ar avea o viteză de 1/5x MIPS (milion
instruction per second). Viteza de prelucrare pe pipeline este 1/x MIPS.
Folosirea pipeline determină un compromis între latenţa (latency – cât durează execuţia unei
instrucţiuni) şi lărgirea de bandă a procesului. (bandwidth – câte MIPS execută un UCP). Pentru un ciclu
de ceas T μs şi n segmente, latenţa este nT şi lărgimea de bandă -1/T MIPS.
Arhitecturi superscalare
Date fiind avantajele benzii de asamblare, ar fi de dorit mai multe din acestea. În figura 1.4 este
prezentată o posibilă proiectare a unui UCP în banda de asamblare duală. Pentru a putea lucra în paralel,
cele 2 instrucţiuni nu trebuie să-şi dispute resursele (de exemplu registrele) şi nici una nu trebuie să
depindă de rezultatul celeilalte. Fie compilatorul trebuie să garanteze că ipoteza anterioară e respectată,
fie conflictele sunt detectate şi eliminate pe parcursul execuţiei, cu ajutorul unui hardware suplimentar.
Cu toate că benzile de asamblare, simple sau duale, sunt folosite pe maşinile RISC (386 şi
predecesorii nu aveau nici una), începând cu 486, Intel a introdus o bandă de asamblare în procesoarele
sale.
Pentium are două benzi de asamblare asemănătoare cu cele din fig. 1.4, deşi împărţirea între
segmentele 2 şi 3 (numite decode-1 şi decode-2) este puţin difertă faţă de cea din exemplul nostru. Banda
de asamblare principală, numită u pipeline, poate executa orice instrucţiune Pentium, în timp ce a doua
bandă, numită v pipeline, poate executa doar instrucţiuni pentru întregi şi o instrucţiune simplă în virgulă
mobilă – FXCH.
Reguli destul de complexe determină dacă instrucţiunile sunt compatibile, astfel încât să poată fi
executate în paralel. Dacă instrucţiunile sunt incompatibile, doar prima este executată (pe banda u), iar a
doua este păstrată şi împerecheată cu o instrucţiune care o va urma. Instrucţiunile sunt executate în
ordine. Din această cauză compilatoarele specifice Pentium, care produceau perechi compatibile de
instrucţiuni, puteau să producă programe mai rapide. Pentru programe cu numere întregi, Pentium cu cod
optimizat pentru el este de 2 ori mai rapid decât 486 la aceeaşi frecvenţă de ceas. Acest câştig se
datorează celei de-a 2-a benzi de asamblare.
Alte UCP utilizează abordări cu totul diferite. Idea de bază este de a avea o singură bandă de
asamblare, dar cu mai multe unităţi funcţionale, aşa cum se observă în figura 1.5
Procesorul Pentium II are o structură asemănătoare cu cea din fig. 1.5. Pentru această abordare a fost
introdus termenul arhitectură superscalară.
Fig. 1.5. Un processor superscalar cu 5 unităţi funcţionale
Idea nu este nouă, ci are o vechime de peste 30 de ani. În calculatorul CDC6600 se extrăgea o
instrucţiune la fiecare 100nsec şi se trimitea pentru execuţie, în paralel, uneia din cele 10 unităţi
funcţionale, în timp ce UCP se ocupa cu extragerea instrucţiunii următoare.
Ar rezulta din figură că segmental S3 poate lansa instrucţiunile mult mai repede decât le poate
executa segmental S4. În realitate, majoritatea unităţilor funcţionale din segmental S4 au nevoie de mai
mult timp decât un ciclu de ceas pentru a-şi face treaba, în mod cert cele care accesează memoria sau care
lucrează în virgulă mobilă.
După cum se poate observa pot exista mai multe UAL în registrul S4.
2.2.1. Magistrale sincrone
Considerăm o magistrală sincronă cu perioada ceasului T. Pentru exemplificare este prezentată o
operaţie de citire şi presupunem că citirea unui octet sau cuvânt din memorie necesită 3 cicluri de
magistrală, T1, T2 şi T3, cu durata totală 3T ca în figura 2.7.
Ciclu de citire
T1 T2 T3
Tact
TAD
ADR Adresa
TDS
DATA
TML TMH
MREQ
TM
TRH
RD
TRL THD
ADR Adresa
MREQ
RD
MSYN
DATA
DATA
SSYN
Se utilizează deci un protocol cu intercondiţionare totală (full hand-shake). Fiecare acţiune este
condiţionată de o acţiune anterioară, şi nu de un impuls de ceas.
Aceste acţiuni sunt următoarele:
1. Este activat MSYN.
2. Este activat SSYN ca răspuns la activarea MSYN
3. MSYN este dezactivat ca răspuns la activarea SSYN.
4. SSYN este dezactivat ca răspuns la dezactivarea MSYN.
Magistralele de tip sincron sunt uşor de implementat şi de testat. Deoarece toate dispozitivele
conectate la un bus sincron sunt legate de frecvenţa de ceas a acestuia, sistemul nu poate beneficia de
avantajele conectării unor dispozitive mai performante. Singura soluţie este utilizarea unei noi magistrale
de frecvenţă mai ridicată.
Deşi magistralele asincrone au avantajele amintite, cele mai multe magistrale sunt sincrone. Motivul
este că o magistrală sincronă necesită mai puţine linii şi realizarea acesteia este mai simplă. UCP
activează semnalele de comandă corespunzătoare, iar memoria sau perifericul va răspunde. Trebuie
respectate doar condiţiile de temporizare.
Costul magistralelor asincrone este mai ridicat, ceea ce influenţează alegerea lor. Magistralele
asincrone sunt mai greu de depanat şi interfeţele pentru magistrale asincrone mai greu de realizat. Apple a
renunţat la utilizarea magistralei VME (asincronă) pentru calculatoarele Macintosh, chiar dacă această
magistrală a fost special proiectată pentru a fi compatibilă cu familia de procesoare Motorola 68000.
Cerere magistrală
Arbitru
Acordare magistrală
D1 D2 D3 D4
Dispozitive de I/E
Arbitrul activează linia de acordare a magistralei, la care sunt conectate în serie toate dispozitivele,
dacă aceasta a fost activată. Dispozitivul cel mai apropiat fizic de arbitru detectează semnalul de pe
această linie, şi, în cazul în care a efectuat o cerere, preia controlul asupra magistralei, fără să propage
semnalul de activare pe linie. Dacă nu a efectuat o cerere, transmite semnalul următorului dispozitiv, care
procedează la fel, până când un dispozitiv preia controlul asupra magistralei.
Prioritatea dispozitivelor este dată deci de distanţa la care se află faţă de arbitru, iar schema se
numeşte de tip daisy chain. Dispozitivul cel mai apropiat de arbitru are prioritatea maximă. Aceasta
însemnă că prioritatea diferitelor module poate fi asignată pur şi simplu prin poziţia pe care o au unele
faţă de celelalte în sertar. Pentru a modifica aceste priorităţi implicite, magistralele pot avea mai multe
nivele de prioritate. Pentru fiecare prioritate există o linie de cerere şi una de acordare a magistralei. Un
exemplu de astfel de magistrală cu două nivele de prioritate este prezentat în figura 2.10. Acest exemplu a
fost ales pentru simplitate, într-un caz real numărul nivelelor de prioritate putând fi mai mare decât 2.
Dispozitivul se conectează la una din liniile de cerere, după cum se doreşte a fi asignată prioritatea
dispozitivului. În exemplul anterior, dispozitivele D1 şi D2 utilizează nivelul 1, iar dispozitivele D3 şi
D4 utilizează nivelul 2. În situaţia că apar cereri de acordare a magistralei simultan pe ambele nivele de
prioritate, arbitrul de magistrală va acorda magistrala dispozitivelor cu nivelul de prioritate cel mai
ridicat. În exemplul nostru nivelul mai prioritar este nivelul 2. Prioritatea se stabileşte prin înlănţuire
(daisy-chain) pentru dispozitivele plasate pe acelaşi nivel de prioritate. Deci, ordinea dispozitivelor din
punct de vedere al priorităţii pentru exemplul prezentat este D3, D4, D1, D2.
Cerere nivel 1
Arbitru
Cerere nivel 2
Acordare nivel 1
Acordare nivel 2
D1 D2 D3 D4
Se observă că nu este necesar să se cableze linia de acordare a cererii de nivel 2 serial prin
dispozitivele D1 şi D2 deoarece acestea utilizează nivelul 1 pentru cererea de magistrală. Este mai uşor
să se cableze toate liniile de acordare a magistralei prin toate dispozitivele, decât să se efectueze
conexiuni speciale în funcţie de prioritatea fiecărui dispozitiv. În funcţie de nivelul de prioritate asignat
dispozitivului, doar o singură linie de acordare a magistralei va fi activă şi utilizată de către un anume
dispozitiv.
Mecanismul de arbitrare a priorităţii poate include o linie suplimentară de achitare, care este activată
de un dispozitiv atunci când a preluat controlul asupra magistralei în urma unui semnal de acordare a
magistralei. Semnalele de cerere şi de acordare pot fi dezactivate imediat după activarea acestei linii. Ca
urmare, în timpul utilizarii magistralei, alte dispozitive pot solicita magistrala. La terminarea transferului
curent, va fi deja selectat următorul dispozitiv master, care poate începe transferul imediat după
dezactivarea semnalului de achitare. Calculatoarele PDP-11 şi microprocesoarele Motorola 680x0
utilizează un asemenea sistem de priorităţi.
În cazul extrem din exemplul anterior se poate ajunge în situaţia în care fiecare dispozitiv să posede
propria linie busrequest/bus grant. Această abordare complet centralizată este cea mai puternică din
punct de vedere logic, dar din punct de vedere practic cea mai puţin scalabilă dintre toate abordările. Un
cost suplimentar important ar fi necesar pentru liniile adiţionale.
Un exemplu de magistrală cu arbitrare centralizată este magistrala Multibus. Această magistrală a
fost elaborată de firma Intel pentru diferite configuraţii de sisteme bazate pe microprocesoare, atât
uniprocesor, cât şi multiprocesor. Magistrala permite existenţa a până la 16 module master şi permite
două tipuri de arbitrare, centralizată şi descentralizată. În figura 2.11 se prezintă arbitrarea centralizată.
Magistrala Multibus a fost standardizată prin standardul lEEE 796.
1 Logică de 1
2 priorităţi 2
3 3
Fig. 2.11. Arbitrarea centralizată a magistralei Multibus
Fiecare modul master dispune de o linie de cerere a magistralei (BREQ) şi de una de acordare a
magistralei (BPRN), conectate la un modul central cu o logică de priorităţi. Să presupunem că un modul
solicită magistrala printr-o cerere transmisă logicii de arbitraj. Această logică selectează următorul modul
master căruia i se acordă magistrala şi activează semnalul BPRN corespunzător. În Figura 2.12 se
prezintă diagrama de timp a unei secvenţe de operaţii.
1. Modulul Master 2 solicită magistrala. Arbitrul achită cererea prin activarea semnalului de pe linia
BPRN a modulului Master 2.
2. Modulul Master 1 solicită magistrala. Arbitrul stabileşte că Master 1 are o prioritate mai mare
decât Master 2, acordă magistrala modulului Master 1 şi simultan retrage prioritatea modulului Master 2.
Modulul Master 1 doreşte în continuare controlul asupra magistralei, astfel încât menţine activ semnalul
său BREQ.
3. Modulul Master 1 termină operaţia pe magistrală şi Master 2 preia controlul asupra magistralei.
BREQ
Master 1
BPRN
BREQ
Master 2
BPRN
BREQ
Master 3
BPRN
TR0
Terminator de magistrală Terminator de magistrală
TR1
TR2
TR3
Ceas Ceas
UCP M1 M2 M3
Fig. 2.13.
Figura 2.13 ilustrează metoda de arbitrare SBI sub formă simplificată. Fiecare dispozitiv are ca
intrări un semnal de ceas pentru sincronizare şi toate liniile TR de prioritate mai mare (inclusiv TR0).
Fiecare dispozitiv poate activa propria sa linie TR şi linia TRO.
Un exemplu pentru o secvenţă de operaţii este prezentat în Figura 2.14.
1 2 3 4 5
Ceas
TR0
Activat de 2
TR1
TR2
TR3
Transfer de date De la 3 De la 1 De la 2 De la 2
Fig. 2.14
Modulul 3 solicită magistrala în ciclul 1, iar modulele 1 şi 2 solicită magistrala în ciclul 2. La
sfârşitul ciclului 1, modulul 3 nu detectează semnale TR de prioritate mai mare, astfel că dezactivează
TR3 şi transmite datele în timpul ciclului 2. La sfârşitul ciclului 2, modulul 2 este întârziat de modulul 1.
Modulul 1 transmite datele în ciclul 3, iar modulul 2 în ciclurile 4 şi 5. Modulul utilizează linia TR0
pentru a menţine controlul asupra magistralei pentru un transfer care necesită două cicluri.
Există o limită superioară a dispozitivelor conectate la magistrala SBI, egală cu numărul liniilor TR.
Deoarece controlerele nu se conectează direct la magistrala SBI, aceasta nu este o limitare serioasă a
magistralei SBI.
Un alt tip de arbitrare descentralizată se utilizează în cazul magistralei Multibus a firmei Intel şi este
prezentat în figura 2.15.
Modulele master sunt conectate în lanţ, în ordinea descrescătoare a priorităţii. Pentru arbitrare se
utilizează o linie conectată la intrarea BPRN (Bus Priority In) şi la ieşirea BPRO (Bus Priority Out) a
fiecărui modul. Primul modul din lanţ primeşte un semnal BPRN activ în permanenţă (1 logic), deoarece
nu există un modul de prioritate mai mare care să solicite magistrala. Dacă nici un modul nu solicită
magistrala, semnalul cu valoarea 1 logic de pe linia de arbitrare se propagă prin toate modulele. Pentru a
prelua magistrala, la începutul unui ciclu de ceas modulul testează dacă magistrala este liberă şi dacă
semnalul de pe intrarea sa BPRN este activat.
BUSY
Terminator de magistrală Terminator de magistrală
Fig. 2.15.
Dacă acest semnal este activat, modulul dezactivează semnalul de pe ieşirea sa BPRO, ceea ce va
determina dezactivarea semnalelor de pe intrările BPRN şi ieşirile BPRO ale modulelor următoare. La
sfârşitul propagării semnalelor prin lanţ, un singur modul va avea intrarea BPRN activată şi ieşirea
BPRO dezactivată. Acest modul poate deveni master la începutul unui ciclu de ceas, dacă magistrala nu
este ocupată (semnalul BUSY nu este activ). Controlul asupra magistralei poate fi păstrat prin
continuarea activării semnalului BUSY. În figura 2.16 se exemplifică această schemă de arbitrare.
„1”
BPRN
Master 1
BPRO
BPRN
Master 2
BPRO
BPRN
Fig. 2.16
În punctul 1, modulul Master 1 cedează magistrala şi activează ieşrea BPRO. Semnalul de la această
ieşire se propagă prin celelalte module. În punctul 2, modulul Master 1 solicită din nou magistrala prin
dezactivarea semnalului de la ieşirea BPRO.
Prioritatea dispozitivelor descreşte de la stânga la dreapta. Această metodă este similară cu arbitrarea
centralizată daisy chain, dar fără utilizarea unui arbitru, astfel că are un cost mai redus şi este mai rapidă.
Principalul avantaj al metodei de arbitrare descentralizată este simplitatea. Sunt necesare doar două
linii de control, şi numărul de linii este independent de numărul de dispozitive. Se pot adăuga noi
dispozitive prin simpla conectare a lor la magistrala sistem.
Dezavantajul constă în posibilitatea funcţionării eronate. O eroare în logica de arbitrare a unui modul
master poate împiedica dispozitivele de prioritate mai mică să preia controlul asupra magistralei, sau
poate permite ca mai multe dispozitive să devină master. În plus, prioritatea dispozitivelor este fixă şi nu
se poate modifica.
O observaţie legată de arbitrajul de magistrală se referă la operaţiile cu cicluri multiple. În cazul
sistemelor multiprocesor, se utilizează în mod obişnuit un cuvânt de memorie pentru a proteja datele
partajate. Dacă acest cuvânt este 0, un procesor îl poate seta la 1 şi poate utiliza data partajată. Dacă este
deja 1, procesorul trebuie să aştepte până când procesorul care utilizează data în acel moment termină
operaţia şi setează cuvântul din nou la 0.
Pot apare situaţii în care două procesoare consideră simultan că au acces exclusiv la o dată partajată,
de exemplu în secvenţa următoare:
I. Procesorul A citeşte cuvântul x, care este zero (ciclul 0).
2. Procesorul B citeşte cuvântul x, care este zero (ciclul 1).
3. Procesorul A scrie 1 în cuvântul x (ciclul 2).
4. Procesorul B scrie 1 în cuvântul x (ciclul 3).
Pentru a se preveni o asemenea situaţie, anumite procesoare au o instrucţiune care citeşe un cuvânt
de memorie, şi dacă este 0, îl setează la 1 ("Test and Set"). Problema constă în faptul că o asemenea
instrucţiune necesită două cicluri de magistrală, unul pentru citire şi unul pentru scriere. Există
posibilitatea ca un alt procesor să îşi intercaleze operaţiile între cele două cicluri.
Soluţia la această problemă este de a se adăuga o linie suplimentară la magistrală, de exemplu
LOCK, care poate fi activată înaintea unei instrucţiuni "Test and Set”. Cât timp această linie este
activată, nici un alt procesor nu poate prelua magistrala. Aceasta permite primului procesor să execute
cicluri multiple de magistrală fără intervenţia altor procesoare.
Un alt tip important de ciclu de magistrală este atunci când sunt utilizate întreruperi. Dacă UCP a
comandat unui dispozitiv I/E să facă ceva, acesta trebuie să primească o întrerupere când lucrul ia sfârşit.
Semnalizarea întreruperii se face tot pe magistrală.
În cazul existenţei a mai multor linii de întrerupere conectate la mai multe dispozitive apar aceleaşi
tipuri de probleme de arbitrare ca în cazul ciclurilor de magistrală obişnuite. Soluţia care a fost găsită
este de a atribui priorităţi dispozitivelor şi de a folosi un arbitru centralizat. Acesta trebuie să satisfacă
prioritar dispozitivele critice din punct de vedere al timpului. Există mai multe astfel de chip-uri care
controlează întreruperile. Intel utilizează circuitul 8259A. Acesta poate lucra cu opt linii de întrerupere.
În cazul existenţei a mai mult de opt dispozitive de I/E acesta poate fi cascadat. La limită, toate cele opt
intrări ale circuitului se conectează la încă opt circuite 8259A, rezultând posibilitatea conectării a 64 de
dispozitive într-o reţea de întrerupere pe două nivele. Circuitul 8259A are câţiva pini speciali pentru
această conectare în cascadă.
Dacă vorbim de calculatoarele PC, majoritatea subsistemelor sunt conectate la magistrala de extensie
a calculatorului. Aceasta poate fi o magistrală PCI, ISA, EISA sau Micro Channel. Aceste magistrale nu
asigură o rată de transfer suficientă pentru imagini grafice de înaltă rezoluţie şi un număr mare de culori,
şi nici pentru imagini video cu un număr de 30 cadre/s. Un calcul simplu arată că un ecran 1024*768
utilizat pentru imagini color reale, în mişcare (3 octeţi/pixel) conţine 2,25 Mo de date. Pentru o mişcare
lentă sunt necesare cel puţin 30 ecrane/sec, deci o viteză de transfer a datelor de 67,5 Mo/sec. De fapt,
situaţia este mult mai critică deoarece pentru a afişa o imagime de la un hard disk, CD-ROM sau DVD
datele trebuie să treacă de la unitatea de disc, pe magistrală, către memorie. Pentru a fi afişate, datele
trebuie să treacă din nou pe magistrală către adaptorul grafic. Rezultă că este nevoie de o bandă de trecere
a magistralei dublă, de 135 Mo/sec.
Magistrala ISA lucrează la o viteză maximă de transfer de 8,33 MHz şi poate transfera 2 octeţi pe
ciclu, deci o viteză medie de transfer de 16,7 Mo/sec. Totodată ratele de transfer de la interfeţele video şi
de reţea cresc în permanenţă. Aceste argumente demonstrează că o arhitectură cu o singură
magistrală nu este viabilă.
În multe cazuri, anumite subsisteme sunt integrate pe placa sistem. Aceasta nu înseamnă că ele nu
utilizează magistrala de extensie. Cele mai multe subsisteme integrate sunt conectate la o extensie a
magistralei de extensie, pe care o vom numi magistrala X sau magistrala utilitară. Astfel de dispozitive
pot fi: interfaţa de reţea, modem, interfaţă SCSI, un port serial etc. Această arhitectură, devenită
tradiţională, a fost eficientă, dar devine la rândul ei nesatisfăcătoare datorită performanţelor în creştere ale
dispoziticelor I/O.
locală a UPC
Conectori de extensie
Buffer
magistrala X
Fig. 2.19.
Soluţia adoptată de industrie a constat în a construi o magistrală de mare viteză strâns integrată cu
restul sistemului ce necesită doar o punte (bridge) între magistrala procesorului şi magistrala de mare
viteză. Această magistrală este conectată printr-o punte sau un buffer cu magistrala de extensie X. Figura
2.19 ilustrează o astfel de arhitectură cu câteva dispozitive I/O care pot fi conectate la magistrala X. Acest
aranjament este uneori cunoscut ca o arhitectură mezanin.
La o operaţie de citire a memoriei, procesorul poate comunica cu memoria sa cache internă de nivel
1 la viteză maximă, dacă informaţia cerută se află în memoria cache. Dacă această memorie cache este de
tip write-back, operaţiile de scriere în locaţiile din memoria cache se pot executa de asemenea la viteza
maximă. Dacă la o citire cuvântul nu se află în memoria cache, sau conţinutul memoriei cache trebuie
scris în memoria principală, procesorul trebuie să utilizeze magistrala sa locală pentru a comunica cu
memoria cache externă (de nivel 2). Controlerul de cache este integrat în puntea care face legătura cu
magistrala de mare viteză. Dacă cuvântul nu se află nici în această memorie cache, se execută un acces la
memoria DRAM.
La execuţia unei operaţii de I/E, se va executa un ciclu de citire sau scriere utilizând magistrala de
extensie. Viteza de execuţie a acestui ciclu este dată de viteza maximă a magistralei de extensie şi de
timpul de acces al dispozitivului adresat.
2.11.2. Conceptul magistralei locale
Pentru a creşte rata de transfer la operaţiile de actualizare a memoriei video, adaptorul video se
poate conecta la magistrala locală a procesorului în locul magistralei de extensie. Adaptorul video
este reproiectat pentru conectarea directă la magistrala locală şi minimizarea sau eliminarea stărilor de
aşteptare inserate în ciclurile de magistrală atunci când procesorul face acces la memoria video şi la
registrele de I/E ale adaptorului. În plus, adaptorul video conţine şi un procesor local care poate
executa comenzi grafice de nivel înalt.
Există trei metode de bază pentru conectarea unui dispozitiv la magistrala locală a procesorului.
Conectarea directă
După cum spune şi numele, dispozitivul se conectează direct la magistrala locală a procesorului.
Acesta poate fi un procesor de orice tip, de exemplu 80486 sau Pentium. Această metodă impune unele
restricţii importante de proiectare:
- Dispozitivul va trebui reproiectat pentru a fi utilizat cu procesoarele din generaţiile viitoare
(dacă structura magistralei sau protocolul vor fi modificate).
- Nu se poate conecta mai mult de un dispozitiv din cauza încărcării suplimentare a magistralei
locale.
- În cazul modernizării ulterioare a sistemului prin instalarea unui procesor de tip "overdrive",
sistemul poate funcţiona incorect datorită încărcării suplimentare a magistralei locale.
- Procesorul nu poate efectua transferuri cu un dispozitiv, în timp ce dispozitivul de pe magistrala
locală execută un transfer cu un alt dispozitiv.
Conectarea printr-un buffer
Bufferul are rolul de a amplifica semnalele magistralei, fiind posibilă conectarea mai multor
dispozitive. Deoarece magistrala locală bufferată este izolată din punct de vedere electric faţă de
magistrala locală a procesorului, reprezintă o singură încărcare pentru aceasta. Singurul avantaj al acestei
metode este că la magistrala buferată se pot conecta de obicei trei dispozitive. Dezavantajul major al
conectării printr-un buffer este că orice tranzacţie iniţiată de procesor apare pe magistrala locală, ca şi pe
cea bufferată. De aceea, procesorul şi dispozitivul master nu pot utiliza magistrala simultan.
Conectarea de tip staţie de lucru
În acest caz controlerul memoriei cache de nivel 2 este combinat cu un circuit de interfaţă numit
punte (bridge), care asigură interfaţa dintre procesor, memoria principală şi o magistrală de I/E de viteză
ridicată (de exemplu, PCI). Dispozitivele conectate la magistrala de I/E pot fi şi adaptoare inteligente cu
rol de master. Prin utilizarea punţii de legătură, memoria principală poate fi accesată fie de procesor (prin
memoria sa cache de nivel 2), fie de un dispozitiv master de pe magistrala de I/E sau magistrala de
extensie.
Procesorul poate continua încărcarea datelor din memoria cache de nivel 1 sau 2, în timp ce
controlerul memoriei cache asigură accesul la memoria principală a unui dispozitiv master de pe
magistrala de I/E. Dispozitivele master pot de asemenea comunica cu dispozitive slave de pe magistrala
de I/E în timp ce procesorul accesează una din memoriile cache sau în timp controlerul memoriei cache
de nivel 2 accesează memoria principală. Principalul beneficiu al acestei metode este că interfaţa
dispozitivelor conectate la magistala de I/E va fi independentă de magistrala procesorului. Va trebui
reproiectată numai puntea de legătură în situaţia modernizării procesorului.