Sunteți pe pagina 1din 22

Modelul von Neumann

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.

Fig. 1.1. Modelul von Neumann al calculatorului numeric

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.

1.2.1 Limbaje, niveluri şi maşini virtuale


Calculatoarele utilizează un set de instrucţiuni maşină. Acestea formează împreună un limbaj pe care
îl vom numi L0. Programele scrise de utilizator sunt într-un limbaj L1, mult mai accesibil decât limbajul
maşinii.
O metodă posibilă de executare a unui program scris în L1 este aceea de a înlocui fiecare instrucţiune
din acest limbaj cu o secvenţă echivalentă de instrucţiuni L0.
Programul rezultat este format numai din instrucţiuni scrise numai în limbajul L0. O astfel de tehnică
se numeşte traducere (translation).
Cea de-a doua tehnică constă în a scrie un program în L0 care preia programe din L1 ca date de
intrare şi le execută examinând fiecare instrucţiune pe rând şi executând secvenţa echivalentă de
instrucţiuni din L0. O astfel de tehnică se numeşte interpretare (interpretation), iar programul care o
realizează se numeşte interpretor.
Traducerea şi interpretarea sunt similare.
În loc de a gândi în termeni de traducere şi interpretare de multe ori este mai simplu să ne imaginăm
existenţa unui calculator virtual sau maşină virtuală (virtual machine) al cărui limbaj maşină este L1. Să
numim această maşină virtuală M1 şi să numim maşina virtuală corespunzătoare lui L0 cu M0. Dacă o
astfel de maşină ar putea fi construită la un preţ rezonabil nu am mai putea avea nevoie de L0 sau de o
maşină care să execute programe în L0. Programatorii ar putea scrie programele în L1 şi le-ar putea
executa direct. Dar maşina virtuală ce suportă limbajul L1 este prea scumpă sau prea complicată pentru a
putea fi realizată fizic. Totuşi oamenii au posibilitatea să scrie programe pentru aceasta. Aceste programe
vor fi interpretate sau traduse de un program scris în L1 care poate fi executat pe calculatorul existent. Pe
scurt, pot fi scrise programe pentru maşini virtuale ca şi cum acestea ar exista în realitate.
Pentru ca traducerea şi interpretarea să fie practică limbajele L1 şi L0 nu trebuie să fie “prea” diferite.
Acesta înseamnă că L1, deşi mai bun ca L0, va fi nepotrivit pentru multe aplicaţii. Abordarea evidentă
este de a inventa un alt set de instrucţiuni mai prietenos cu utilizatorul şi mai puţin orientat maşină ca L1.
Acest al treilea set formează un nou limbaj pe care îl numim L2 (cu maşina virtuală corespunzătoare M2).
Programatorii pot scrie programe în L2, ca şi cum o maşină virtuală cu limbajul L2 ar exista în realitate.
Astfel de programe pot fi traduse în L1 sau, alternativ, executate cu un interpretor scris în L1.
Inventarea unei serii întregi de limbaje, fiecare mai convenabil decât predecesoarele, poate continua
până la crearea unui limbaj potrivit. Fiecare limbaj foloseşte predecesorul său ca bază, deci, folosind
această tehnică putem vedea calculatorul ca o serie de straturi (layers) sau nivele unul deasupra celuilalt
ca în figura 1.3.
Figura 1.3.

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.

1.2.2. Maşini multi–nivel contemporane


Cele mai multe calculatoare moderne sunt formate din două sau mai multe niveluri. Există până la 6
niveluri ca în Figura 1.4. Nivelul 0 corespunde structurii hardware a maşinii. Circuitele execută
programele în limbaj – maşină de pe nivelul 1. Trebuie menţionată existenţa unui nivel suplimentar, aflat
sub nivelul 0. Acest nivel, care nu apare în figură, ţine de domeniul ingineriei electrice şi se numeşte
nivelul echipamentelor (device level).
Figura 1.4.

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.

1.3.1. Organizarea UCP


Organizarea internă a unei părţi dintr-o UCP von Neumann tipică este dată mai în detaliu în Fig. 1.2.
Fig. 1.2. Calea de date a unei maşini von Neumann tipice

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.

1.3.3. RISC şi CISC


La sfârşitul anilor `70 interpretoarele erau utilizate uzual pentru proiectarea unui nou procesor şi s-au
făcut experimente cu instrucţiuni foarte complexe. Proiectanţii au încercat să acopere “interstiţiul
semantic” (semantic gap) dintre posibilităţile maşinilor şi limbajele de programare de nivel înalt. Timp de
mulţi ani trendul în arhitectura şi organizarea calculatoarelor a fost acela de a creşte complexitatea
procesorului: mai multe instrucţiuni, mai multe moduri de adresare, mai multe registre specializate.
Au existat însă şi exceptii. În 1981 John Cocke la de IBM a creat modelul experimental 801,
încercând să incorporeze o parte din ideile lui Seymour Cray într-un minicalculator de înaltă performanţă.
În acelaşi an un grup de la Berkeley, condus de David Patterson şi Carlo Sequin a proiectat un cip VLSI
pentru un UCP fără interpretor rezultând procesorul RISC 1. Ei au introdus termenul RISC pentru acest
concept (Reduced Instruction Set Computer). Puţin mai târziu, în 1981, la Stanford, John Henessy a
proiectat şi fabricat un cip întrucâtva diferit, pe care l-a numit MIPS. Aceste cipuri au evoluat în produse
comerciale, procesoarele SPARC şi respectiv MIPS. Totuşi 801 era un model experimental conceput
pentru a ilustra unele concepte. Succesul proiectului 801 a determinat IBM să dezvolte un produs
comercial RISC workstation, PC RT. Introdus în 1986, acesta nu a fost un succes comercial. În 1990 IBM
a produs un al treilea sistem, ţinând cont de lecţiile oferite de 801 şi PC RT. IBM RISC System/6000 era
o maşină RISC superscalară şi la puţin timp după apariţie a început să fie referită ca arhitectura POWER.
Apoi IBM a făcut o alianţă cu Motorola şi Apple, care utiliza microprocesoarele Motorola în
calculatoarele Macintosh. Rezultatul a fost o serie de maşini ce implementează arhitectura PowerPC, o
arhitectură RISC superscalară. Procesoarele PowerPC sunt utilizate în maşinile Apple Macintosh şi în
numeroase aplicaţii embedded.
Procesoarele RISC erau la apariţia lor mult diferite faţă de cele existente în acel moment. Deoarece
nu trebuiau să păstreze vreo compatibilitate cu produsele anterioare, proiectanţii au ales seturi de
instrucţiuni care să maximizeze performanţa sistemului. Dacă la început accentul cădea pe instrucţiuni
care să se execute rapid, în curând s-a constatat că proiectarea unor instrucţiuni care să poată fi lansate
(issued - pornite) rapid era mai relevant. Cât timp dura în total o instrucţiune conta mai puţin decât
numărul de instrucţiuni ce puteau fi lansate într-o secundă. Filozofia generală RISC este de a transfera
complexitatea către software dacă astfel rezultă o îmbunătăţire globală a performanţei.
Procesoarele la care ne referim erau caracterizate de un set mic de instrucţiuni (aproape 50) faţă de
200–300 la DEC VAX sau marile calculatoare IBM. De aici acronimul RISC, în contrast cu CISC ce
înseamnă Complex Instuction Set Computer. Suporterii RISC susţineau că modul cel mai bun de a
proiecta un calculator este să ai un set de instrucţiuni simple care să se execute într-un singur ciclu al căii
de date (Fig. 1.2). Argumentul era viteza de execuţie: chiar dacă maşina RISC va face în 4 -5 instrucţiuni
ceea ce va face o maşină CISC într-o instrucţiune, dacă instrucţiunile RISC sunt de 10 ori mai rapide,
arhitectura RISC va fi în câştig. În acel moment şi viteza memoriilor principale crescuse, ajungând din
urmă viteza memoriilor de control în care erau stocate interpretoarele, fapt ce a favorizat şi el puternic
maşinile RISC. Obiectivul principal era acela de a obţine viteza maximă de operare prin utilizarea unor
procesoare relativ simple. Analizând retrospectiv problema, următorii factori au condus la apariţia
conceptului RISC:
- efectul incluziunii instrucţiunilor complexe,
- utilizarea cea mai bună a tranzistoarelor în implementări VLSI,
- excesul de microcod,
- utilizarea compilatoarelor.
Referitor la prima chestiune, era cunoscut faptul că unele instrucţiuni sunt mai frecvent folosite decât
altele. Soluţia CISC era de a scurta cât mai mult durata instrucţiunilor folosite frecvent. Soluţia RISC este
de a nu avea deloc instrucţiuni folosite mai puţin frecvent.
Cu privire la cea de a doua remarcă, Katevenis (1985) a arătat în teza sa de doctorat că „suportul
hardware pentru instrucţiuni complexe nu este cea mai bună cale de utilizare a tranzistoarelor în circuite
VLSI”.Există un optim între mărime/complexitate şi viteză. Creşterea complexităţii VLSI duce la o
scădere a vitezei componentelor datorită capacităţilor ce apar şi a întârzierii semnalelor. Odată cu
creşterea densităţii circuitelor trebuie luată o decizie asupra celui mai bun mod de a utiliza aria circutului.
Cu privire la microcod, acesta era scris în memorii de control de viteză mai mare decât a memoriei
principale. Odată cu creşterea vitezei memoriei principale, dacă aceasta ajunge să fie de viteză apropiată
cu cea a memoriei de control, apare un considerabil overhead la unitatea de control microprogramată, în
special la maşinile cu instrucţiuni simple.
În ce priveşte compilatoarele, exista tendinţa de a proiecta compilatoare optimizate cu mai puţine
instrucţiuni. La calculatoarele CISC, cu instrucţiuni complexe, era dificil pentru compilator să decidă
automat când o instrucţiune rar folosită, complexă, trebuie utilizată sau nu. O secţiune cheie a dezvoltării
procesoarelor RISC este asigurarea unui compilator optimizat care să preia o parte din complexitatea
hardware şi să utilizeze în cel mai bun mod regiştrii.
S-ar putea crede că, date fiind performanţele oferite de arhitectura RISC, maşinile RISC (cum ar fi
DEC Alpha) vor detrona maşinile CISC (cum ar fi Intel Pentium) de pe piaţă. Timpul a arătat că acest
fapt nu s-a produs din mai multe motive:
- în primul rând din cauza compatibilităţii cu modele anterioare şi a banilor investiţi în software
pentru gama Intel.
- în al doilea rând, Intel a reuşit să incorporeze aceleaşi idei într-o arhitectură CISC. Începând cu
486, UCP-urile Intel conţin un nucleu RISC ce execută instrucţiunile mai simple (şi în general mai des
întâlnite) într-un singur ciclu al căii de date, interpretând instrucţiunile mai complicate în modul
caracteristic CISC. Rezultatul net este că instrucţiunile uzuale sunt rapide şi instrucţiunile exotice mai
lente. Chiar dacă această abordare nu e la fel de rapidă ca cea RISC pură, ea permite obţinerea unei
performanţe globale competitive.
1.5. Paralelism la nivelul instrucţiunii
În acest caz paralelismul este exploatat în cadrul instrucţiunilor individuale, pentru a face maşina să
lanseze în execuţie mai multe instrucţiuni/secundă.

Pipeline (banda de ansamblare sau conductă) .


Concepul a existat din `60 la maşini IBM prin citirea în avans a unei instrucţiuni din memorie şi păstrarea
ei într-un set de regiştri numit prefetch buffer. Citirea în avans împarte instrucţiunile în două părţi:
extragerea şi executarea propriu-zisă. Conceptul pipeline extinde strategia. Instrucţiunea e împărţită în
mai multe părţi, de fiecare parte ocupându-se o componentă hardware, toate aceste componente hardware
putând să funcţioneze în paralel. Fig. 1.3 ilustrează o bandă de asamblare cu 5 unităţi numite şi stages
(segmente, etape).

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.

Fig. 1.4. Banda de asamblare duală cu 5 segmente

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

Figura 2.7. Ciclul de citire al unei magistrale sincronă


UCP depune adresa cuvântului pe liniile de adrese în primul ciclu Tl. După stabilizarea adresei la
noua valoare, se activează semnalele MREQ (care indică accesul la memorie şi nu la un dispozitiv de
I/E) şi RD. Memoria decodifică adresa în ciclul T2 şi depune data pe magistrală în ciclul T3. Pe frontul
descrescător al ceasului din ciclul T3, UCP citeşte liniile de date, memorând valoarea într-un registru
intern. După citire, UCP dezactivează semnalele MREQ şi RD. De la frontul crescător al ceasului poate
începe un nou ciclu.
Pentru o funcţionare corectă, există specificaţii de temporizare care trebuie respectate. Unele
întîrzieri sunt limitate la o valoare minimă, iar altele la o valoare maximă.
TAD este intervalul de timp de la începutul ciclului T1 până la depunerea adresei. Trebuie să fie mai
mic decât o valoare maximă:
TAD  TADmax
Aceasta garantează că în timpul fiecărui ciclu de citire, UCP va depune adresa într-un timp mai mic
decât cel maxim admisibil.
TDS (Data Setup) este intervalul de la depunerea datei până la frontul descrescător al ceasului din
ciclul T3. Trebuie ca acest timp să satisfacă condiţia:
TDS ≥TDSmin
pentru ca data să fie stabilizată înaintea citirii acesteia de către UCP.
Datorită restricţiilor asupra intervalelor TAD şi TDS, în cazul cel mai defavorabil, memoria trebuie să
depună data într-un timp de cel mult:
2T + T/2 - TAD ― TDS
de la depunerea adresei. Dacă memoria nu poate răspunde în acest interval de timp, trebuie să activeze
semnalul WAIT înainte de mijlocul ciclului T2, când se testează semnalul WAIT. Se vor insera stări de
aşteptare (cicluri suplimentare de magistrală) până când memoria dezactivează semnalul WAIT.
TM este intervalul de la depunerea adresei până la activarea semnalului MREQ. Rezultă că este
necesar ca
TM>TMmin
pentru ca adresa să fie stabilă până la activarea semnalului MREQ. Acest timp este important dacă
MREQ se utilizează la selecţia circuitului de memorie, deoarece anumite memorii necesită un timp de
stabilizare a adresei până la selecţie.
TML, TRL sunt intervalele de la frontul descrescător al ceasului din ciclul T1 până la activarea
semnalului MREQ, respectiv RD. Trebuie ca acestea să satisfacă condiţiile
TML  TMLmax
TRL  TRLmin
pentru ca aceste semnale să fie activate într-un anumit timp de la mijlocul ciclului T1.
Memoria va avea un timp de cel mult
2T ― max (TML , TRL) ― TDS
de la activarea MREQ negat şi RD negat până la depunerea datei.
Timpii TMH şi TRH indică timpul după care trebuie dezactivate semnalele MREQ negat şi RD negat
după citirea datei.

2.1.2. Magistrale asincrone


După cum am menţionat, la magistralele sincrone cele mai multe evenimente ocupă un singur ciclu
de ceas. Pot apare însă situaţii în care evenimentele durează mai mult de un ciclu al ceasului magistralei.
Mai mult, la magistralele sincrone, dacă un transfer se termină înaintea unui număr întreg de cicluri,
trebuie să se aştepte până la sfărşitul ciclului, ceea ce duce la intârzieri inutile. Dacă la o magistrală sunt
conectate dispozitive cu viteze diferite (unele lente, altele rapide), viteza trebuie aleasă după dispozitivul
cel mai lent, cele rapide fiind întârziate. De asemenea, după alegerea unui ciclu de magistrală, este dificil
să se utilizeze avantajele îmbunătăţirilor tehnologice viitoare. De exemplu, dacă după un timp vor fi
disponibile memorii mai rapide, deşi ele pot fi utilizate, vor funcţiona la aceeaşi viteză ca şi cele vechi,
deoarece protocolul magistralei cere ca memoria să depună datele imediat înaintea frontului descrescător
al ceasului din ciclul T1.
O magistrală asincronă elimină aceste dezavantaje. În locul semnalului de ceas se utilizează un
protocol logic între emiţător şi receptor (hand shake). Aşa cum am menţionat deja apariţia unui eveniment
pe bus este determinată de finalizarea unui eveniment anterior. Un exemplu simplu este prezentat în
figura 2.8. Un master pe magistrală pune tot ce îi trebuie pe magistrală (date, adrese, control) şi apoi
activează semnalul MSYN (Master Synchronization).
În cazul unei operaţii de citire, după depunerea adresei, activarea semnalelor MREQ negat şi RD
negat, face ca dispozitivul master să activeze semnalul MSYN. După detectarea acestui semnal,
dispozitivul slave depune data, şi apoi activează semnalul SSYN (Slave Synchronization).
Dispozitivul master detectează activarea semnalului SSYN, ceea ce indică faptul că data este
disponibilă, memorează data, iar apoi dezactivează liniile de adrese, împreună cu semnalele MREQ
negat, RD negat şi MSYN negat.
Dispozitivul slave detectează dezactivarea semnalului MSYN negat, indicând terminarea ciclului,
dezactivează semnalul SSYN negat şi invalidează datele, ajungându-se în starea iniţială, cu toate
semnalele dezactivate, aşeptându-se un nou ciclu.

ADR Adresa

MREQ

RD

MSYN

DATA
DATA

SSYN

Fig. 2.8. Operaţia de citire la o magistrală asincronă

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.

2.3.1. Arbitrarea centralizată


Un prim caz este acela în care există o singură linie de cerere a magistralei. Linia de cerere de
întrerupere este unică, de tip SAU cablat, şi poate fi activată de unul sau mai multe dispozitive în orice
moment. Arbitrul nu poate distinge dacă există mai multe cereri simultane sau o singură cerere, ci numai
dacă există sau nu cereri la un moment dat. Linia de acordare a magistralei este şi ea unică. Un exemplu
simplu de arbitrare centralizată este prezentat în figura 2.9, magistrala nefiind figurată.

Cerere magistrală
Arbitru

Acordare magistrală

D1 D2 D3 D4

Dispozitive de I/E

Fig. 2.9. Un exemplu de arbitrare centralizată


cu un singur nivel de prioritate

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

Fig. 2.10. Exemplu de arbitrare centralizată


cu mai multe nivele de prioritate

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.

Master 1 Master 2 Master 3


BPRN BREQ BPRN BREQ BPRN BREQ

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

Fig. 2.12 Digrama de timp a arbitrării centralizate

2.3.2. Arbitrarea descentralizată


Arbitrarea descentralizată se caracterizează prin faptul că nu există arbitru de magistrală. Un
dispozitiv care doreşte să devină master pe magistrală activează semnalul bus request şi apoi verifică
dacă magistrala este ocupată (busy). Dacă linia busy nu este activă, dispozitivul trimite 0 către
dispozitivul cu cel mai mare număr din lanţul daisy-chain, activează linia busy şi reactivează linia bus
request. Dacă magistrala este ocupată sau dacă un dispozitiv nu doreşte controlul asupra magistralei, pur
şi simplu propagă semnalul bus grant către următorul dispozitiv.
Arbitrarea trebuie să fie o operaţie rapidă şi din acest motiv o schemă centralizată va lucra bine
numai cu un număr mic de dispozitive, de obicei până la opt. O schemă de arbitrare descentralizată este
indicată în cazul unui număr mare de dispozitive.
Un exemplu de magistrală care utilizează această metodă de
arbitrare este magistrala SBI (Synchronous Backplane Interconnect), dezvoltată de firma DEC pentru
calculatoarele VAX-11/780. Modulele de I/E nu se conectează direct la magistrala SBI, care este
optimizată pentru operaţiile de citire/scriere a memoriei. Modulele de I/E sunt conectate la o magistrală
Unibus sau MA558U5, care sunt conectate la magistrala SBI prin adaptoare. Magistrala Unibus este
utilizată în principal pentru dispozitive de viteză mică şi medie, ca terminale, imprimante şi linii de
comunicaţie. Magistrala MA558U5 este destinată pentru memorii externe, ca discuri şi benzi magnetice.
Fiecare modul conectat la magistrala SBI (UCP, memorie, adaptor Unibus) are o prioritate unică şi
o linie unică de cerere de transfer (TR - Transfer Request). Există 16 asemenea linii (TR0, ..., TRI5), deci
la magistrală pot fi conectate maxim 16 dispozitive.
Dacă un dispozitiv solicită magistrala, activează linia sa de cerere TR. La sfârşitul ciclului de
magistrală toate dispozitivele cu cereri active testează liniile TR. Dispozitivul cu prioritatea maximă va
putea utiliza magistrala în următorul ciclu. Celelalte dispozitive vor menţine active cererile lor pentru a
obţine un ciclu următor de magistrală.
Anumite transferuri necesită mai multe cicluri consecutive. Un dispozitiv care necesită cicluri
suplimentare activează semnalul de pe linia TR0 la începutul primului ciclu de transfer. Acest semnal, cu
prioritatea maximă dintre semnalele TR, nu este asignat nici unui dispozitiv, ci poate fi utilizat pentru
păstrarea controlului asupra magistralei.
Dispozitivul cu prioritatea minimă (16) poate efectua transferuri în oricare ciclu care nu este
rezervat de celelalte dispozitive. La începutul fiecărui ciclu, dacă nici una din liniile TR nu este activă,
poate efectua transferuri numai dispozitivul cu prioritatea 16. Timpul de aşteptare este minim pentru
acest dispozitiv cu prioritate 16 şi de aceea UCP are de obicei prioritatea minimă.

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ă

BPRN BPRO BPRN BPRO BPRN BPRO


(Prioritate max.) Master 2 (Prioritate min.)
Master 1 Master 3

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ă.

2.11. Magistrale locale

2.11.1. Cerinţe pentru ratele de transfer


Unul dintre parametrii esenţiali ai unei magistrale este rata maximă de transfer. Aceasta trebuie să fie
mai mare sau egală cu rata maximă de transfer a dispozitivelor conectate la magistrala respectivă.
Magistrala poate deveni o ştrangulare când transferul de date agregat se apropie de rata de transfer a
magistralei. Problema poate fi soluţionată uneori folosind magistrale mai largi (de exemplu mărind busul
de date de la 32 de biţi la 64 de biţi). Transferul rapid al unor blocuri mari de date apare ca o necesitate
mai ales la următoarele subsisteme:
- Adaptoare grafice
Interfeţele grafice ale sistemelor de operare Windows, OS/2 şi Unix X-Windows necesită
actualizarea rapidă a imaginii grafice pentru deplasarea, redimensionarea şi actualizarea
ferestrelor multiple. Acelaşi lucru este valabil pentru imaginile video în mişcare. Procesorul
trebuie să actualizeze şi să transfere blocuri mari de date în cadrul memoriei video.
- Adaptoare pentru interfaţă SCSI
Interfaţa SCSI este utilizată mai ales pentru memorii de masă, ca unităţi de disc fix, unităţi CD-
ROM şi unităţi de bandă încasetată. Creşterea vitezei de transfer cu aceste dispozitive
influenţează semnificativ performanţele globale ale sistemului.
- Adaptoare de reţea FDDI (Fiber Distributed Digital Interface)
Dacă adaptorul de reţea este utilizat pentru transferul unor fişiere la sau de la un server, rata cu
care pot fi transferate datele între memorie şi adaptor influenţează performanţele sistemului.

Subsistem Rata de transfer


(MB/s)
Adaptor grafic 30...40
Video 5..30 (pe fereastră)
15 pentru FDDI
LAN 3 pentru Token Ring
2 pentru Ethernet
Disk fix 20...80
CD-ROM 6
Audio 1 pentru calitate CD

Tabelul 2.3. Ratele transfer ale unor dispozitive I/E [3]

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.

Memorie cache nivel 2 Memorie principală


Magistrala Magistrala mem.
UCP

locală a UPC

Punte magistrala de extensie

Conectori de extensie

Buffer
magistrala X

Dispozitiv de I/E Dispozitiv de I/E Dispozitiv de I/E

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.

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