Sunteți pe pagina 1din 28

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

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 şi lărgirea de bandă a procesului.
Pentru un ciclu de ceas T μs şi n segmente, latenţa este nT şi lărgimea de bandă -1/T MIPS.
S1 S2 S3 S4 S5

Unitate de Unitate de Unitate de Unitate de Unitate de


e xtragere a decodificare a e xtragere a e xecuţie a scriere a
instrucţiunilor instrucţiunilor operanzilor instrucţiunilor rezu ltatelor

(a)
S1         
S2        
S3       
S4      
S5     
1 2 3 4 6 5 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)
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.
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.
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
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
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.
TM este intervalul de la depunerea adresei până la activarea semnalului MREQ.
Rezultă că este necesar ca
TM>TMmin
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
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

Magistralele asincrone nu utilizează un semnal de ceas. În acest caz ciclurile de


magistrală pot avea în acest caz orice durată, şi aceasta nu trebuie să fie aceeaşi între
toate perechile de dispozitive de pe magistrală. La magistralele asincrone, apariţia unui
eveniment pe magistrală urmează şi este determinată de evenimentul anterior.
Î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 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.

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.

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
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ă
- 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 dispositive
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.
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.
2.13. Magistrala serială universală (USB)

Nu este raţional să se conecteze o interfaţă PCI pentru fiecare dispozitiv I/E de


viteză scăzută, cum ar fi o tastatură sau un mouse pentru ca utilizatorul obisnuit trebuie
sa desfaca calculatorul,sa se asigure ca nu intra in conflict cu alte disp. ,sa introduca
placa,sa inchida cutia si sa reporneasca sistemul,procesul fiind prea complicat, s-a
proiectat un mod mai bun de a atasa disp I/E.

Obiectivele urmărite de companiile care au conceput iniţial USB-ul şi care au început


proiectul au fost următoarele:
1. Utilizatorii nu trebuie să aibă de poziţionat comutatoare sau jumpere pe plăci sau pe
dispozitive.
2. Pentru a instala noi dispozitive de I/E utilizatorii nu trebuie să deschidă cutia
sistemului de calcul.
3. Trebuie să existe un singur tip de cablu, bun pentru conectarea tuturor dispozitivelor.
4. Dispozitivele de I/E trebuie să se alimenteze singure, prin cablu.
5. Să se poată ataşa un număr mare de dispozitive la un singur calculator (standardul
actual prevede că se pot ataşa până la 127 de dispozitive la un singur calculator).
6. Sistemul ar trebui să suporte dispozitivele în timp real (de exemplu sunet, telefon).
7. Dispozitivele trebuie să poată să fie instalate în timp ce calculatorul funcţionează.
8. După instalarea unui nou dispozitiv să nu trebuiască repornit calculatorul.
9. Noua magistrală şi dispozitivele ei de I/E ar trebui să fie înglobate în placa de bază.

USB este proiectată pentru dispozitive de viteză redusă cum ar fi tastaturi, mouse-
uri, camere de luat vederi, scanere, telefoane digitale şi altele.
Sistemul USB poate fi văzut ca un set de canale de biţi, din punct de vedere logic,
de la hub-ul central la dispozitivele de I/E. Fiecare dispozitiv împarte canalul său în cel
mult 16 subcanale, pentru diferite tipuri de date (de exemplu, audio şi video). Pe fiecare
canal sau subcanal, datele merg de la hub-ul central la dispozitiv sau invers. Nu există
trafic între două dispozitive de I/E.
USB este conceput pentru a suporta patru tipuri de cadre: control, izocron, transfer
cantităţi mari de date (bulk) şi întrerupere.
3.3. Registrele generale şi stiva
Registrele generale cuprind:
1) registre de utilizare generală. AX, BX, CX, DX adresabile direct pe 16 biţi,
fiecare putând servi ca destinaţie a datelor (acumulator);
AX - este utilizat pentru operaţiile de înmulţire şi împărţire, pe 16 biţi, respectiv
pentru operaţii de intrare/ieşire pe 16 biţi;
AL - este utilizat, pentru aceleaşi operaţii ca şi AX dar pe 8 biţi; în plus se utilizează
pentru operaţii BCO (binary coded decimal) şi conversii de cod;
AH - este folosit pentru înmulţire şi împărţire pe 8 biţi;
BX - se utilizează în conversii de cod şi ca registru de bază la adresare;
CX - are rol de contor de ciclu în cazul structurilor repetitive cu incrementare, utilizat
fiind şi în operaţiile cu şiruri;
DX - este utilizat ca registru de adresare indirectă la porturile de intrare/ieşire,
precum şi la operaţiile de înmulţire/împărţire.
2) registrul indicator de stivă de 16 biţi, conţinând adresa vărfului stivei (SP- Stack
Pointer); este utilizat implicit în toate operaţiile cu stiva.
3) registrul indicator de bază de 16 biţi, conţine adresa de baza (BP - Base
Pointer).
3.4. Registrul indicatorilor de condiţie

Indicatorii de condiţie sunt utilizaţi pentru a memora informaţii referitoare la


rezultatul unor operaţii aritmetice sau logice (AF, CF, OF, PF, SF, ZF) şi pentru
memorarea unor informaţii de control pentru microprocesor (DF, IF, TF).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-- NT IO PL OF DF IF TF SF ZF -- AF -- PE -- CF

Semnificaţiile biţilor din registrul indicatorilor de condiţie sunt următoarele:


(I) - Indicatorul CF (Carry Flag). Bitul de transport are valoarea 1 dacă în execuţia
unei instrucţiuni care poziţionează acest indicator a apărut un transport sau s-a făcut un
împrumut la rangul cel mai semnificativ. De asemenea, instrucţiunile de rotire a
conţinutului unui registru pot să poziţioneze acest indicator;
(2) - Indicatorul PF (Parity Flag). Bitul de paritate are valoarea 1 dacă din execuţia
unei instrucţiuni care poziţionează acest indicator s-a obtinut un rezultat număr par de biţi
cu valoarea 1;
(3) - Indicatorul AF (Auxiliary Carry Flag). Este bitul pentru transportul auxiliar. Are
valoarea 1 dacă în execuţia unei instrucţiuni care poziţionează acest indicator a apărut un
transport de la rangul 3 spre rangul 4, sau a fost executat un împrumuţ din rangul 4 spre
rangul 3. Acelaşi indicator este utilizat pentru implementarea aritmeticii zecimale
codificate binar;
(4) -Indicatorul ZF (Zero Flag). Este bitul indicator al rezultatului nul şi este 1 dacă
în execuţia unei instrucţiuni care poziţionează acest indicator, s-a obţinut rezultatul zero;
(5) - Indicatorul SF (Sign Flag). Bitul de semn are valoarea 1 dacă din execuţia unei
instrucţiuni care poziţionează acest indicator s-a obţinut un rezultat pentru care bitul cel
mai semnificaliv este 1 (rezultat negativ);
(6) - Indicatorul TF (Trace Flag). Bitul de depanare este utilizat pentru controlul
execuţiei instrucţiunilor în regim pas cu pas, în scopul depanării programelor. Dacă acest
indicator este 1, după execuţia fiecărei instrucţiuni se va genera un semnal de întrerupere
intern (pe nivel 1);
(7) - Indicatorul IF (Interrupt Flag). Bitul de activare/dezactivare a sistemului de
întreruperi controlează acceptarea semnalelor de întrerupere externă. Dacă indicatorul IF
este 1, este activată acceptarea semnalelor de întrerupere externă. Indicatorul nu are
influenţă în cazul semnalului de întrerupere nemascabilă;
(8) - Indicatorul DF (Direction Flag). Bitul de "direcţie", indică direcţia de parcurgere
a şirurilor de octeţi în cazul instrucţiunilor pe şiruri de octeţi. Valoarea zero a acestui
indicator indică parcurgerea şirurilor de la adrese mici spre adrese mai mari;
(9) - Indicatorul OF (Overflow Flag). Bitul de depăşire în virgulă fixă, este 1, dacă
din execuţia unei instrucţiuni aritmetice cu semn a apărut o depăşire, adică s-a obţinut un
rezultat care nu poate fi memorat corect în destinaţia stabilită de către instrucţiune.
Paginarea
Tehnica paginării este reprezentată în figura 3.16. Adresa liniară preluată de pe
magistrala de adrese, formată din 32 de biţi, conţine în acest caz trei câmpuri: offset,
adresa relativă de tabel şi un index.

Semnificaţia celor trei câmpuri este următoarea:


1) indexul unei intrări în directorul ce conţine adresele tabelelor de pagini; pentru a
identifica o adresă a unui tabel de pagini, acesta se va aduna cu adresa fizică de bază a
directorului dc pagini (numărul de intrări este 210 = 1024);
(2) adresa relativă a unui tabel de pagini (210 - 1024 tabele), care se adună la adresa
de bază a tabelului determinat anterior pentru a obţine adresa paginii;
(3) offset-ul relativ la adresa paginii selectate anterior, care adunat la această adresă,
conduce la obţinerea adresei fizice pe 32 de biţi.
31 22 21 12 11 0
adresă Director adrese
liniară 32 biţi tabele pag. Tabelă Offset

12
10
RAM
10
adresă
+ fizică pagină
210 selectată
+
210 adresă fizică a
pag. selectare
+
Adresă adresă de bază a
fizică de tabelelor de pagini
bază

Fig. 3.16. Tehnica paginării


Predicţia dinamică a ramificaţiilor

Din cele spuse este esenţial ca atunci când se fac predicţii acestea să fie corecte.
Acest lucru permite UCP să lucreze la viteză maximă permisă de banda de asamblare
O posibilă abordare este ca UCP să menţină o tabelă a istoriei într-un hardware
special, în care plasează ramificaţiile condiţionate pe măsură ce acestea apar, astfel încât
acestea pot fi căutate dacă apar din nou. (desen)
Utilizând această schemă, predicţia constă în a spune pur şi simplu că ramificaţia
va urma aceeaşi cale ca ultima dată. Dacă predicţia este greşită, bitul din tabela istoriei
este schimbat.
Dacă apare o coincidenţă între adresa memorată şi adresa ramificaţiei, bitul de
predicţie este utilizat pentru predicţia ramificaţiei. Dacă este prezentă eticheta greşită sau
intrarea este invalidă, se produce ceea ce se numeşteo ratare, la fel ca la memoria
intermediară. În acest caz, poate fi utilizată regula ramificaţiei înainte/înapoi.

În majoritatea situaţiilor această schemă lucrează bine pentru o dimensiune de


tabelă suficient de mare şi suficientă asociativitate.
Apare întotdeauna o problemă sistematică. Când o buclă este în sfârşit încheiată
predicţia ramificaţiei de la sfârşit va fi întotdeauna greşită. Şi mai rău decât atât, predicţia
greşită va schimba bitul din tabela istoriei astfel încât să indice în viitor “non
ramificaţie”. Data următoare când bucla este accesată, predicţia ramificaţiei de la sfârşitul
primei iteraţii va fi inevitabil greşită. Dacă bucla este interiorul altei bucle sau într-o
procedură apelată frecvent, această eroare poate să apară foarte des. Dacă se doreşte
eliminarea acestei predicţii eronate se poate încerca acordarea unei a doua şanse intrării
respective din tabela istoriei ramificaţiilor
Predicţia statică a ramificaţiilor
Tehnicile de predicţie a ramificaţiilor discutate până acum sunt generate în timpul
rulării programului, adică sunt tehnici de predicţie dinamice a ramificaţiilor. Ele se
adaptează de asemenea la comportarea curentă a programului. Dezavantajul acestor
tehnici este că necesită hardware special şi costisitor. În lipsa acestui hardware
suplimentar nu pot fi folosite.
Un alt set de tehnici de predicţie se bazează pe ajutorul compilatorului. Când
compilatorul ajunge la o instrucţiune ca for (i=0; i<1000000; i++) {....} , el ştie
foarte bine că ramificaţia de la sfârşitul buclei se va efectua aproape tot timpul. Dacă ar
exista o cale de a comunica hardware-ului acest lucru, s-ar putea economisi un mare
efort. Aceasta implică însă o modificare arhitecturală, nefiind doar o soluţie de
implementare.
Unele maşini, ca UltraSPARC II, au un al doilea set de instrucţiuni de ramificaţie
condiţionată, în plus faţă de cele obişnuite care sunt necesare pentru compatibilitate cu
sistemele mai vechi. Maşinile mai noi conţin un bit în care compilatorul poate specifica
dacă presupune că ramificaţia va fi executată sau nu. Când apare o ramificaţie în
program, unitatea de fetch face exact ce i s-a spus de către compilator. Mai mult, nu e
nevoie să se piardă spaţiu preţios în tabela de istorie a ramificaţiilor pentru aceste
instrucţiuni, reducând astfel conflictele.
4.7. Execuţie speculativă

Programele pentru calculatoare se pot sparge în blocuri de bază (basic blocks), fiecare
bloc de bază constând într-o secvenţă liniară de cod cu un punct de intrare în capătul de
sus şi o ieşire în capătul de jos. Un bloc de bază nu conţine nici un fel de structuri de
control (de exemplu instrucţiuni if sau while) astfel încât translatarea sa în limbaj maşină
nu conţine nici un fel de ramificaţii. Blocurile de bază sunt conectate prin instrucţiuni de
control.
Utilizarea acestei tehnici necesită sprijin din partea compilatorului şi a hardware-ului,
precum şi anumite extensii arhitecturale. În majoritatea cazurilor, reordonarea
instrucţiunilor peste graniţele blocurilor de bază este mai presus de capacitatea hardware-
ului, deci compilatorul trebuie să mute instrucţiunile explicit.
Execuţia speculativă introduce anumite probleme interesante:
Prima ar fi că, este esenţial ca în nici una din instrucţiunile speculative să nu existe
rezultate irevocabile, pentru că s-ar putea constata mai târziu că n-ar fi trebuit executate.
Există însă şi o altă problemă introdusă de codul speculativ, care nu se poate
rezolva prin redenumirea registrelor.
O posibilă soluţie ce se găseşte într-o serie de maşini moderne este să se dispună de o
instrucţiune specială SPECULATIVE_LOAD care încearcă să citească cuvântul din
memoria intermediară, iar dacă nu este acolo, renunţă. Dacă valoarea este acolo când este
de fapt necesară, se poate folosi, dar dacă nu, hardware-ul trebuie să o aducă imediat.
evensum = 0;
evensum = 0; oddsum = 0;
oddsum = 0; i = 0;
i = 0;

i >=limit
while (i < while (i<limit)
limit){

k=i*i*i k=i*i*i
if ((i/2)*2==0) if ((i/2)*2)==0)

T F
evensum =
evensum+k evensum = evensum+k; oddsum = oddsum +k;
else
oddsum =
oddsum + k

i=i+1 i = i +1;
}

(a) (b)
Fig. 4.9.(a) Un fragment de program.
(b) Graful corespunzător blocului
Unitatea Citire/Decodificare

Unitatea Citire/Decodificare este implementată ca bandă de asamblare, cu şapte


segmente.
Instrucţiunile intră în banda de asamblare în segmentul IFU0, unde sunt încărcate linii
întregi de 32 octeţi din memoria intermediară I. Ori de câte ori tamponul intern este gol,
se copiază în el o altă linie din memoria intermediară. Registrul NEXT ghidează procesul
de citire.
Decodificarea începe în segmentul ID0. Decodificarea în Pentium II constă în
conversia fiecărei instrucţiuni IA-32 în una sau mai multe micro-operaţii. Instructiunile
IA-32 mai simple, ca transferurile registru la registru, se pot converti într-o singură
micro-operaţie. Altele mai complexe pot necesita până la patru micro-operaţii. Câteva
extrem de complexe necesită chiar mai multe şi folosesc ROM-ul secvenţiatorului de
micro-operaţii pentru a genera secvenţa.
Micro-operaţiile sunt plasate în coadă în segmentul ID1. Acest segment mai execută şi
detecţia ramificaţiilor. Mai întâi se face o predicţie statică, pentru orice eventualitate.
Predicţia depinde de o serie de factori, dar pentru ramificaţiile relative la instrucţiunea
curentă se presupune că vor fi efectuate cele înapoi, iar cele înainte nu vor fi efectuate.
După aceasta urmează predictorul dinamic de ramificaţii, utilizând un algoritm bazat pe
istorie.
În ROB sunt depozitate câte trei micro-operaţii pe ciclu de ceas. Operanzii sunt, de
asemenea, colectaţi aici, dacă sunt disponibili. Dacă operanzii unei micro-operaţii şi
registrul rezultat sunt toţi disponibili, iar unitatea de execuţie este liberă, această
instrucţiune este candidată să fie lansată în execuţie. Dacă nu, rămâne în ROB până când
toate resursele sale au fost obţinute.
Unitatea Repartizare/Execuţie

Unitatea de Repartizare/Execuţie planifică şi execută micro-operaţii, rezolvând


dependenţele şi conflictele de resurse. Deşi numai trei instrucţiuni pot fi decodificate pe
ciclu de ceas în ID0, pot fi lansate în execuţie până la cinci micro-operaţii într-un ciclu,
câte una pe fiecare port.
Micro-operaţiile pot fi lansate în orice ordine, dar Unitatea de Retragere le retrage în
ordine. Se utilizează o tabelă de scor complexă pentru a gestiona micro-operaţii în
desfăşurare, registre şi unităţi de execuţie. Când o micro-operaţie este eligibilă pentru
execuţie ea poate fi începută, chiar dacă altele puse mai devreme în ROB nu sunt gata.
Un algoritm complex o alege pe cea mai bună instrucţiune pentru a fi următoarea
lansată în execuţie când mai multe micro-operaţii sunt eligibile pentru execuţie de către
aceeaşi unitate de execuţie.
Unitatea de Repartizare/Execuţie conţine o staţie de rezervare şi unităţi de execuţie
conectate la cinci porturi. Staţia de rezervare este o coadă cu 20 intrări pentru micro-
operaţii care au toţi operanzii disponibili. Acestea îşi aşteaptă rândul în Staţia de
rezervare până când unitatea de execuţie cerută devine liberă.
DRAM (SDRAM)

Introducerea memoriilor SDRAM nu a fost un lucru atât de simplu. Prima


încercare de a se înlocui memoriile EDO DRAM s-a concretizat prin introducerea
modulelor bazate pe chip-uri SDRAM ce rulau la 66MHz. Creşterea de performanţă fiind
în jurul a 5% faţă de EDO, astfel că pentru utilizatorul final acest lucru nu justifică
investiţia în module DIMM SDRAM 66MHz.
Pentru ca rezultatele să devină semnificative, erau necesare modificări majore la
nivelul mai multor componente ale sistemului, cum ar fi: chip-urile controlerului de
memorie, chip-urile şi modulele de memorie.
Producătorii au înţeles destul de repede că această tehnologie va rezista numai în
cazul în care se oferă o performanţă considerabil sporită în raport cu preţul. Singura
soluţie pentru creşterea performanţelor era ridicarea frecvenţei de bus. Aşa s-a trecut de la
66MHz la 83MHz şi apoi la 100MHz. Proiectarea chip-urilor care să permită 100MHz s-
a dovedit a fi o problemă destul de serioasă. Specificaţiile (zgomotul, impedanţa şi
reflexia) care până în acel moment au fost foarte bine tolerate de chip-urile cu frecvente
de 66 şi chiar 83 MHz, reprezentau acum o mare problemă în design-ul chip-urilor de
100MHz.
O altă mare problemă, care în fapt s-a născut o dată cu chip-urile de 66MHz şi
care s-a amplificat pentru cele de 100MHz, era compatibilitatea între diferitele module
SDRAM care funcţionau numai cu anumite plăci de bază.

EDRAM (Enhanced RAM)

Aceasta este probabil cea mai simplă dintre noile arhitecturi DRAM. EDRAM-
urile sunt mai rapide şi se obţin din DRAM-urile obţinute prin adăugarea unor blocuri
mici de memorie cache statică pe cip.
Producătorul tehnologiei EDRAM (Ramtron) descrie 4 avantaje:
- legarea cache-ului SRAM cu DRAM-ul pe acelaşi cip presupune folosirea unei
magistrale largi de 16384 biti, ce poate determina rată de umplere de aproximativ
60GB/sec. Timpul de umplere este de aproape 7 ori mai mic la EDRAM faţă de page-
mode DRAM (35 s faţă de 250s);
- modelul Ramtron foloseşte o structură de control ce permite ca memoria să fie
încărcată în timp ce sistemul face transferul în modul burst din cache, fapt ce reduce
timpul de acces;
- scrierea în memoria principală poate fi făcută cu timp de aşteptare 0. Prima operaţie
de scriere necesită 7 s, iar ciclul de scriere pentru o pagină normală este de 15 s.
- proiectarea EDRAM permite accesul la bank-urile de cache separate.
CDRAM (Cached Dram)

Memoria CDRAM (realizată de Mitsubishi) este similară cu EDRAM, numai că


adaugă o memorie cache SRAM mai mare pe fiecare cip, utilizând un model de tip
asociat; cipul iniţial de 4 MB au o memorie cache de 2 MB, folosind câte 2 buffere de 16
biţi pentru transferul dintre cache şi circuitele externe.
Spre deosebire de EDRAM, părţile CDRAM asociază atât cache–ului cât şi DRAM-
ului principal aceaşi adresă, însă ele pot opera independent una de cealaltă. Cache-ul este
suficent de rapid pentru a transfera date în modul burst la o frecvenţă de 100MHz.
Memoria SRAM dintr-un CDRAM poate fi folosită în două feluri. În primul rând,
poate fi utilizată ca un veritabil cache conţinând linii de 64 de biţi. Acest fapt
contrastează cu EDRAM, în care memoria SRAM conţinea doar un bloc, şi anume rândul
accesat ultimul. Memoria cache a CDRAM este deci eficientă pentru accese aleatoare la
memorie.
Memoria SRAM dintr-un CDRAM poate fi, de asemenea, utilizată ca un buffer
pentru a permite accesul serial la un bloc de date. De exemplu, pentru un refresh al
ecranului, memoria CDRAM poate efectua un prefetch al datelor din DRAM în buffer-ul
SRAM. Accesele ulterioare la chip vor acesa doar SRAM.

Direct R (Rambus) DRAM

RDRAM, realizat de Rambus, adoptă o abordare mai revoluţionară a problemei


lărgimii de bandă a memoriei. Modelul Rambus foloseşte un cache de RAM static de
2KB, care se leagă la memoria dinamică printr-o magistrală foarte largă ce permite într-
un singur ciclu transferal unei pagini în cache.
Rambus operează ca o mică reţea, trimiţând date în pachete cu o lungime de până la
256 bytes. Modelul este schimbat radical şi cere o modificare a PC-ului pe care operează
fiind util mai ales pentru sisteme care include integrare video. Colaborarea Intel-Rambus
a dus la PC-uri ce utilizează RDAM la 100MHz pe PC-uri de 64 de biţi.
Din specificaţiile pentru intrefaţa Direct RDRAM rezultă că aceste module
transferă datele pe 16 bit/18 bit şi incorporează un bus de control pe 8 bit, la o frecvenţă
maximă de 800MHz. Această frecvenţă fiind atinsa datorită utilizării ambelor fronturi ale
semnalului. Canalul RAMBUS este format din controler, chip-urile de memorie şi
terminatori pentru liniile de semnal. Fiecare dispozitiv al canalului Rambus îşi reglează
tensiunea de ieşire în mod automat pentru a menţine semnalul la valoarea nominală.
Memorii intermediare asociative pe seturi

Această variantă este un compromis ce beneficiază de avantajele celor două abordări


anterioare şi care încearcă totodată să le minimizeze dezavantajele. In acest caz, memoria
este împărţită în v seturi, fiecare set având k linii de cache. Relaţiile sunt:
m=v∙k
i = j modulo m
unde
i = numărul liniei din cache,
j = numărul blocului din memoria principală,
m = numărul de linii din cache.
Aceasta este referită ca mapare asociativă pe k seturi.
Prin mapare complet asociativă câmpul tag în adresa memoriei este mare şi, după
cum s-a precizat, trebuie comparat cu câmpul tag al fiecărei linii din cache.
Prin mapare asociativă pe k seturi, câmpul tag din adresa memoriei rezultă mult
mai mic şi trebuie comparat doar cu k taguri ale unui singur set.
În cazul limită v = m, k =1, tehnica de mapare asociativă pe seturi se reduce la
maparea directă, iar în cazul v =1, k =m, această tehnica se reduce la tehnica de mapare
complet asociativă.
Utilizarea a două linii pe set (v = m/2, k=2) este organizarea pe seturi cea mai comună
(memorie asociativă pe două căi).
În cazul utilizării memoriei asociative pe 4 căi (v = m/4, k =4) îmbunătăţirea faţă de
cazul precedent este modestă în comparaţie cu costurile.
Creşterea în continuare a numărului de seturi are un efect minor.

7.3.2. Detectarea biţilor

Determinarea valorii bitului dintr-o fereastră de timp necesită circuite electronice


complexe. Semnalul va conţine zgomote de la canalul însuşi, de la canalele adiacente şi
de la circuitele electronice. Pentru a avea o anumită imunitate la zgomote şi a se putea lua
o decizie asupra valorii bitului, semnalul de intrare este filtrat, i se detectează valoarea
maximă, şi în final este diferenţiat. Dacă nu este detectat un vârf cu o amplitudine
suficientă, bitul are valoarea 0. Dacă valoarea de vârf este deasupra valorii de prag, este
detectată poziţia trecerii prin zero a semnalului diferenţiat. Bitul din fereastra în care se
detectează trecerea prin zero va avea valoarea 1.
Prelucrarea semnalelor este prezentată în figurile 7.3 şi 7.4. O tranziţie de flux, fără
zgomote, provine direct de la semnalul de la capul de citire. Acest semnal este trecut
printr-un filtru trece jos care elimină o mare parte din zgomote, dar lărgeşte de asemenea
impusul. Impulsul este apoi redresat pentru ca atât tranziţiile pozitive cât şi cele negative
să fie reprezentate ca pozitive. Dacă impulsul rezultat depăşeşte pragul de detecţie,
rezultă că bitul detectat este 1 logic.
7.4.1.1. Metoda FM
Această metodă de modulaţie în frecvenţă este numită şi înregistrarea în simplă densitate
(Single Density). Este una din cele mai simple metode de codificare a informaţiilor, fiind
utilizată la primele unităţi de discuri flexibile utilizate de calculatoarele personale. Metoda nu
mai este folosită în prezent.
În fiecare celulă de bit se înregistrează o tranziţie de flux pentru un bit egal cu 1, sau nu se
înregistrează nici o tranziţie pentru un bit egal cu 0. Datele sunt înscrise împreună cu un semnal
de ceas pentru a păstra sincronizarea între controler şi unitatea de disc, mai ales în cazul citirii
unei serii lungi de zerouri, când nu apare nici o tranziţie pe o perioadă mai lungă.
Pentru fiecare bit sunt necesare două celule de tranziţii. Un bit de 1 este înregistrat ca o
tranziţie de flux de ceas, urmată de o tranziţie de flux de date, care apar din punctul de vedere al
unităţii ca două tranziţii de flux consecutive. Pentru un bit de 0, numai celula de ceas conţine
tranziţie de flux. Pentru ambele cazuri, tranziţia de flux iniţială reprezintă semnalul de ceas, iar a
doua celulă de bit conţine o tranziţie numai dacă bitul înregistrat este un bit de 1.

7.4.1.2. Metoda MFM

Această metodă de modulaţie în frecvenţă este numită şi înregistrarea în dublă densitate


(Double Density), deoarece conduce la înregistrarea unei cantităţi de informaţie duble faţă de cea
a metodei FM. Ideea este a minimiza numărul celulelor de tranziţii de ceas pentru a câştiga
spaţiu pentru date. Tranziţiile de ceas sunt înregistrate numai dacă un bit de 0 este precedat de un
alt bit de 0. Din cauza minimizării numărului de tranziţii de ceas, frecvenţa reală a ceasului poate
fi dublată faţă de metoda FM, deci într-un număr de tranziţii de flux egal cu cel utilizat de
metoda FM se pot înregistra un număr dublu de biţi.
Dublarea frecvenţei ceasului conduce şi la dublarea vitezei cu care sunt scrise şi citite
informaţiile, chiar dacă din punct de vedere al unităţii de tranziţie de flux acestea au aceeaşi
frecvenţă ca în cazul metodei FM. Sincronizarea tranziţiilor de flux trebuie să fie însă mult mai
precisă decât în cazul metodei FM, ceea ce a necesitat îmbunătăţirea circuitelor unităţii şi ale
controlerului.

7.4.1.3. Metoda RLL

Este metoda cea mai răspândită astăzi şi permite ca pe disc să fie înregistrate cu 50% mai
multe informaţii decât cu metoda MFM şi de trei ori mai multe informaţii decât prin metoda FM.
Deosebirea principală faţă de metodele anterioare este aceea că prin metoda RLL nu se
codifică un singur bit, ci un grup de biţi în acelaşi timp. Această metodă reprezintă de fapt o
familie de tehnici de codificare, deoarece există doi parametri care definesc modul de codificare,
şi prin urmare există mai multe variante posibile.
Limita minimă, care indică gradul de apropiere între două tranziţii de flux consecutive,
este necesară din cauza densităţii de înregistrare limitate a suportului magnetic. Limita maximă
este necesară pentru păstrarea sincronizării între unitate şi controler.
Pentru toate cele trei metode de codificare prezentate, distanţa minimă şi cea maximă între
două tranziţii de flux consecutive este aceeaşi. Densitatea tranziţiilor de flux este deci
neschimbată, deşi cantitatea informaţiilor codificate este diferită, ceea ce însemnă că acelaşi disc
poate avea capacităţi diferite în funcţie de metoda de codificare utilizată.
Formatarea fizică
Formatarea fizică (sau de nivel scăzut) reprezintă operaţia propriu-zisă de formatare,
deoarece prin această formatare se creează structurile fizice utilizate pentru înregistrarea
datelor pe disc. În timpul acestei operaţii, se definesc poziţiile pistelor şi se împart pistele
într-un număr de sectoare, fiind înscrise structurile de control corespunzătoare pistelor şi
sectoarelor. Aceste structuri cuprind zonele de prefix şi de sufix ale sectoarelor,
intervalele dintre sectoare şi intervalele de la începutul şi sfârşitul pistelor. Octeţii din
zona de date a fiecărui sector sunt iniţializaţi cu o anumită valoare.
La primele unităţi de discuri, controlerele nu erau incluse în unitate. Formatarea
fizică era executată în aceste cazuri de controlerele de interfaţă. Un anumit controler de
interfaţă utiliza acelaşi număr de sectoare de pistă, indiferent de tipul unităţii conectate la
interfaţă. Controlerele interfeţei ESDI au permis utilizarea unui număr de sectoare pe
pistă cuprins între 32 şi 80. Unităţile de discuri cu interfaţă IDE sau SCSI, care au
controlerul inclus în unitate, pot avea un număr de sectoare pe pistă care depinde de tipul
controlerului inclus.
Unităţile mai noi utilizează structuri interne complexe, ca de exemplu înregistrarea
zonată, pentru a plasa un număr mai mare de sectoare pe pistele exterioare faţă de cele
interioare, şi informaţii servo dedicate sau încorporate pentru controlul mecanismului de
poziţionare. Datorită acestei complexităţi, toate unităţile moderne sunt formatate fizic de
către producător.

Formatarea logică

Distincţia dintre formatarea logică şi cea fizică este importantă. De exemplu pentru
ştergerea completă a unui disc nu este necesară formatarea fizică a acestuia, formatarea
logică fiind suficientă. Prin iniţializarea structurilor de date utilizate de sistemul de
fişiere, deşi datele rămân pe disc, ele nu mai pot fi accesate.
În timpul formatării logice (sau la nivel înalt) sistemul de operare creează structurile
de date necesare sistemului de fişiere utilizat. Aceste structuri de date permit sistemului
de operare gestionarea spaţiului de pe disc, gestionarea fişierelor şi marcarea zonelor
defecte de pe disc astfel încât ele să nu fie utilizate pentru memorarea datelor.
Diferitele sisteme de operare utilizează diferite utilitare de formatare logică, deoarece
ele utilizează diferite sisteme de fişiere. De exemplu, în cazul sistemului de operare DOS,
care utilizează sistemul de fişiere FAT, formatarea logică este executată prin comanda
FORMAT. Această comandă creează pe fiecare unitate logică un sector de boot al
volumului (VBS - Volume Boot Sector), o tabelă de alocare a fişierelor (FAT - File
Allocation Table), şi un director rădăcină.
S1 S2 S3 S4 S5

Unitate de Unitate de Unitate de Unitate de Unitate de


e xtragere a decodificare a e xtragere a e xecuţie a scriere a
instrucţiunilor instrucţiunilor operanzilor instrucţiunilor rezu ltatelor

(a)
S1         
S2        
S3       
S4      
S5     
1 2 3 4 6 5 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)
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ă

ADR Adresa

MREQ

RD

MSYN

DATA
DATA

SSYN

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


EAX AH AL AX
EBX BH BL BX
ECX CH CL CX
EDX DH DL DX
ESP SP – stack pointer
EBP BP – base pointer
ESI SI – source index
EDI DI – destination index

Figura 3.2. Registrele generale

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-- NT IO PL OF DF IF TF SF ZF -- AF -- PE -- CF

Figura 3.5. Registrul indicatorilor de condiţie

31 22 21 12 11 0
adresă Director adrese
liniară 32 biţi tabele pag. Tabelă Offset

12
10
RAM
10
adresă
+ fizică pagină
210 selectată
+
210 adresă fizică a
pag. selectare
+
Adresă adresă de bază a
fizică de tabelelor de pagini
bază

Fig. 3.16. Tehnica paginării


Biţi de
Ramificaţie/nu predicţie
Valid Valid Valid
Biţi de
Adresa/eticheta Adresa/eticheta predicţie Adresa/eticheta Adresa
ramificaţiei ramificaţiei ramificaţiei ţintă
Poziţie Poziţie Poziţie

      
6 6 6
5 5 5
4 4 4
3 3 3
2 2 2
1 1 1
0 0 0
(a) (b) (c)

Figua 4.5. Predictia dinamica (a) Istorie de 1 bit a ramificaţiilor (b). Istorie pe 2 biţi a
ramificaţiilor. (c) corespondenţa între adresa instrucţiunii de ramificaţie şi adresa ţintă.

evensum = 0;
evensum = 0; oddsum = 0;
oddsum = 0; i = 0;
i = 0;

i >=limit
while (i < while (i<limit)
limit){

k=i*i*i k=i*i*i
if ((i/2)*2==0) if ((i/2)*2)==0)

T F
evensum =
evensum+k evensum = evensum+k; oddsum = oddsum +k;
else
oddsum =
oddsum + k

i=i+1 i = i +1;
}

(a) (b)
Fig. 4.9.(a) Un fragment de program.
(b) Graful corespunzător blocului
Memorie intermediară I nivel 1

Segment al benzii de asamblare

IFU0 Cache line fetcher Următorul IP

Decodificator al lungimii Predictor dinamic de


IFU1 instrucţiunii ramificaţii

IFU2 Aliniator de instrucţiuni

Secvenţiator de
ID0 0 1 2 microoperaţii

ID1 Plasator în coada de Predictor static de


microoperaţii ramificaţii

RAT Alocator de registre

ROB Microoperaţiile trec în ROB

Fig. 4.11. Structura internă simplificată a unităţii Citire/Decodificare


Staţie de Unitate de execuţie MMX
rezervare Unitate de execuţie în
virgulă mobilă
Unitate de execuţie
Port 0
pentru întregi
Unitate de execuţie MMX
Unitate de execuţie în
virgulă mobilă
Unitate de execuţie
Port 1
pentru întregi

Port 2 Unitate de încărcare Încărcări

Port 3 Unitate de stocare Stocări

Port 4 Unitate de stocare Stocări

Fig. 4.12. Unitatea de Repartizare/Execuţie