10
1. INTRODUCERE
Lucrarea de faĠă tratează aspecte funcĠionale, constructive úi relaĠionale ale blocurilor unui sistem de calcul numeric. AplicaĠiile derulate pe calculatoare sunt: prelucrările de date; prelucrările de informaĠii; prelucrările de cunoútinĠe; prelucrările inteligente (inteligenĠa artificială).
Fig. 1.1. Structura piramidală a tipurilor de prelucrări.
SpaĠiul datelor. Materialul prelucrat la baza piramidei este considerat un spaĠiu de date din care fac parte numere reprezentate în diverse formate. Datele prelucrate sunt considerate mutual independente în spaĠiul lor. SpaĠiul datelor este cel mai mare spaĠiu al obiectelor prelucrate cu sistemul de calcul, incluzând caractere, simboluri úi/sau reprezentări multidimensionale ale acestora, numere în diverse formate. SpaĠiul informaĠiilor. Termenul de informaĠie reprezintă o colecĠie de date legate între ele printr-o anumită relaĠie sau structură sintactică. El se prezintă ca un subspaĠiu al spaĠiului de date. Prin sintaxă se înĠelege un set de reguli care guvernează alcătuirea propoziĠiilor dintr-un limbaj. SpaĠiul cunoútinĠelor. Formează un subspaĠiu în cadrul spaĠiului informaĠiilor. InformaĠiile sunt legate între ele printr-o structură semantică. Semantica reprezintă un set de reguli care extrag înĠelesul propoziĠiilor dintr-un limbaj. SpaĠiul prelucrărilor de tip inteligenĠă artificială. Lucrează cu baze de cunoútinĠe, reguli de inferenĠă (raĠionament) sau cu alte mijloace specifice domeniului de inteligenĠă artificială. Calculatoarele de astăzi au devenit suficient de rapide. Cu toate acestea, nici un calculator actual nu este un sistem inteligent care gândeúte independent.
ARHITECTURA SISTEMELOR DE CALCUL
Un calculator este o maúină capabilă de a rezolva probleme aplicând instrucĠiuni definite în prealabil. Circuitele electronice ale fiecărui calculator nu pot recunoaúte úi executa direct decât un număr limitat de instrucĠiuni. Ansamblul de instrucĠiuni executate direct de un calculator formează un limbaj care permite oamenilor să comunice cu calculatorul. Este ceea ce se numeúte limbajul maúină. Problema care se pune în acest caz este că limbajele maúină sunt atât de primitive încât este extrem de greoi a le utiliza. Sunt două lucruri de rezolvat în privinĠa acestei probleme, ambele vizând construirea unui nou set de instrucĠiuni mai practic de utilizat decât limbajul maúină. În ansamblu, aceste noi instrucĠiuni formează un nou limbaj care va fi numit L2, în timp ce ansamblul instrucĠiunilor corespunzătoare limbajului maúină formează nivelul L1. Prima sarcină de executat a unui program scris în limbajul L2 este de a înlocui fiecare instrucĠiune a programului cu instrucĠiunile corespunzătoare limbajului L1 care îi sunt echivalente. Calculatorul va executa deci noul program în limbajul L1 úi nu vechiul program care a fost scris în limbajul L2. Se poate spune Fă are loc o conversie de limbaj, această tehnică numindu-se traducere. Al doilea lucru este de a scrie un program în limbajul L1 capabil, după examinarea fiecărei instrucĠiuni a programului din L2, să execute direct secvenĠa de instrucĠiuni în limbajul L1 echivalent. Această tehnică, cu ajutorul căreia nu mai este nevoie să se genereze un program echivalent în L1 care va examina úi executa fiecare instrucĠiune din L2, poartă denumirea de interpretare. Traducerea úi interpretarea se aseamăQă mult. În fiecare caz, toate instrucĠiunile în L2 sunt convertite în final într-o suită echivalentă de instrucĠiuni corespunzătoare lui L1. Dar trebuie notat că în fiecare caz al traducerii, programul scris în L2 este mai întâi convertit într-un program scris în L1; apoi programul în L2 dispare úi programul în L1 va fi cel executat. În replică, interpretarea constă în analizarea úi apoi executarea imediată a fiecărei instrucĠiuni din limbajul L2. Aceste două metode sunt foarte utilizate în proporĠii aproximativ identice. Pentru a simplifica lucrurile, este mai uúor de imaginat existenĠa unui calculator virtual, al cărui limbaj maúină este L2. Dacă se poate construi această maúină la un preĠ rezonabil nu va mai fi nevoie de limbajul L1 úi nici de o maúină capabilă să execute acest limbaj. Utilizatorii vor scrie tot mai simplu programele lor în limbajul L2 úi calculatorul va executa direct aceste programe.
1.1. Limbaje úi maúini virtuale Limbajul úi maúina virtuală sunt într-o relaĠie foarte limitată. Orice maúină prin limbajul său formează un ansamblu de instrucĠiuni de bază pe care le poate executa. Se poate spune deci că o maúină defineúte un limbaj. Reciproc, un limbaj defineúte o maúinăúi, mai precis, un limbaj defineúte o maúină care poate executa toate programele scrise în acel limbaj. BineînĠeles, maúina definită printr-un limbaj oarecare poate fi extraordinar de complexăúi cu un cost prohibitiv. Dar, cu toate acestea, ea poate exista.
Introducere
11
Un calculator alcătuit din n nivele poate fi văzut ca n maúini virtuale distincte, fiecare maúină virtuală având propriul său limbaj. Programele scrise în limbajele L2, L3, …, Ln trebuie să fie interpretate de un interpretor având un nivel mai mic sau să fie traduse într-un limbaj inferior. Programatorul care are programele scrise pentru o maúină virtuală de nivelul n nu este interesat de compilatoare úi nici de interpretoarele aflate la un nivel inferior. Pentru acesta nu este interesant de útiut în acest caz dacă programele sunt traduse într-un limbaj cunoscut de calculator sau dacă ele sunt executate direct de către circuitele aflate la nivelul fizic. În ambele cazuri se va ajunge la acelaúi rezultat: programele sunt executate, indiferent de metodă.
1.2. Calculatoarele actuale – calculatoare multinivel Cea mai mare parte a calculatoarelor actuale au mai mult de două nivele. Predomină foarte mult calculatoarele care au curent 6 nivele. La primul nivel – nivelul 0 – se află logica cablată.
Fig. 1.2. Prezentarea nivelelor unui calculator.
12
ARHITECTURA SISTEMELOR DE CALCUL
Nivelul 0, primul nivel care intră în alcătuirea unui calculator, poartă denumirea de nivel fizic. Obiectele utilizate la acest nivel sunt porĠi, care prin definiĠie pot fi privite ca niúte componente logice interconectate între ele. Fiecare poartă dispune de una sau mai multe intrări logice úi întoarce ca rezultat o funcĠie simplă obĠinută conform semnificaĠiei de la intrare (de exemplu ùI, SAU, NU). O poartă este realizată cu ajutorul tranzistorilor. Acest nivel execută instrucĠiunile limbajului microprogramat (următorul nivel ierarhic), care acĠionează asupra nivelului 0 ca niúte comenzi. De reĠinut este faptul că nivelul 0 poate să nu fie nivelul cel mai scăzut, sub el putând exista un alt nivel care poartă denumirea de nivel componentă, úi care de regulă nu apare în schema nivelurilor unui calculator. Nivelul următor este nivelul 1 sau nivelul microprogramat. El este nivelul limbajului intern al maúinii. Aici există un microprogram care interpretează instrucĠiunile de nivel 2 úi care este realizat cu un set restrâns de instrucĠiuni simple (în medie cam 20 de instrucĠiuni), de transfer úi teste simple ale unor condiĠii. Este scris într-o memorie ROM internă, la ea având acces numai producătorul. Deasupra nivelului 1 se află nivelul 2 sau nivelul maúinii tradiĠionale. Fiecare procesor defineúte în mod implicit un limbaj de nivel 2 úi o maúină virtuală al cărei limbaj maúină este interpretat de un microprogram. Denumirea de nivel al maúinii tradiĠionale este dată deoarece componentele au caracteristici comune. Aceeaúi structură fizică poate corespunde la două sau mai multe maúini dacă microprogramul de pe nivelul 1 este scris în mod adecvat úi aceeaúi maúină tradiĠională se poate implementa prin diverse structuri fizice. Există úi excepĠii: unele calculatoare nu dispun de nivelul microprogramat (nivelul 1), în acest caz instrucĠiunile de pe nivelul 2 fiind tratate direct de nivelul 0. Al treilea nivel este un nivel hibrid, în sensul că cea mai mare parte a instrucĠiunilor care definesc limbajul 3 sunt de tip maúină. Se găsesc aici sarcini specifice privind gestionarea memoriei úi capacitatea de executare a mai multor programe în paralel. Acest nivel poartă denumirea de nivelul sistemului de operare. De remarcat că nivelele 1 úi 2 nu sunt accesibile programatorului mediu. Ele sunt necesare pentru interpretarea nivelului inferior úi sunt scrise de către specialiúti. Limbajele de nivel 1, 2 úi 3 sunt orientate către modul numeric, iar începând cu nivelul 4 apar limbaje formate din simboluri úi cuvinte, care au o sintaxă. Nivelul 4 este nivelul limbajului de asamblare. Este un nivel care nu poate să lipsească. Aici compilatorul generează cod direct pentru nivelul 3. Există o caracteristică specifică acestui nivel: nivelurile inferioare (nivelul 2, nivelul 3) sunt întotdeauna interpretate, iar nivelurile superioare au asociate programe traducătoare. Programele realizate în limbaj de asamblare sunt mai întâi traduse în limbaje pentru nivelurile 1, 2 úi 3 úi apoi interpretate de maúinile reale sau virtuale corespondente. Următorul nivel ierarhic este nivelul 5, numit nivelul limbajului de aplicaĠie. Aici se află limbaje concepute pentru a fi utilizate de către programatorii de aplicaĠii. Ele mai sunt adesea denumite úi limbaje de nivel înaltúi sunt extrem de numeroase. Printre cele mai cunoscute pot fi amintite: Basic, C, Cobol, Pascal, Fortran etc. Programele scrise în unul din aceste limbaje sunt adesea traduse pentru nivelele 3 sau 4 de către programe traducătoare specializate numite compilatoare.
Introducere
13
Nivelul 6, care este úi cel mai de sus nivel, este reprezentat de un ansamblu de programe. Ele conĠin numeroase date pentru aplicaĠii care pot Ġine de domenii diferite de lucru. În concluzie, se poate spune că un calculator poate fi văzut ca o suită de nivele, fiecare nivel înglobând toate nivelele precedente. Un nivel reprezintă un grad oarecare de abstractizare úi conĠine diverse obiecte úi operaĠii cu aceste obiecte. În sens ascendent creúte complexitatea prelucrării, iar în sens descendent creúte volumul materialului prelucrat. Ansamblul tipurilor de date, operaĠiilor úi caracteristicilor fiecărui nivel poartă denumirea de arhitectura nivelului. În particular, arhitectura calculatoarelor úi structura lor semnifică aproape acelaúi lucru.
1.3. Etapele evoluĠiei arhitecturii calculatoarelor
14
ARHITECTURA SISTEMELOR DE CALCUL
1.3.2. Prima generaĠie: tuburile cu vid (1945-1955) Se poate spune că al doilea război mondial a grăbit apariĠia apariĠiei primelor calculatoare echipate cu componente electronice, chiar dacă acestea aveau să fie tuburile cu vid. Primul calculator construit úi folosit a fost ENIGMA, folosit pentru criptarea mesajelor care urmau a fi trimise de către armata germană prin radio submarinelor. Nici armata britanică nu a stat cu mâinile în sân, ea reuúind să pună la punct un calculator numit COLOSSUS, folosit pentru decodarea mesajelor, deoarece erau foarte multe calcule de făcut. Părintele lui COLOSSUS a fost omul de útiinĠă englez Alan Turing. Urmează apoi un nou model numit ENIAC. Acest Dúa zis calculator cuprindea 18000 tuburi cu vid úi 1500 de relee; cântărea peste 30 de tone úi consuma 150 kW. Din punct de vedere al unităĠii de calcul dispunea de 20 registre a 10 cifre zecimale. La foarte puĠin timp după aceasta îúi face apariĠia un nou calculator, al cărui realizator, John von Neumann, va intra în istorie, putând fi considerat pe drept cuvânt părintele calculatoarelor actuale. Schema unei maúini von Neumann este redată în figura 1.3.
Cea mai mare parte a vechilor calculatoare utilizate au ieúit astăzi din uz, ajungând piese de muzeu. Cu toate acestea, au existat câteva maúini care au avut un rol important în evoluĠia calculatoarelor. Pentru acestea se vor analiza în continuare câteva din principalele caracteristici.
1.3.1. GeneraĠia 0: calculatoarele mecanice (1642-1945) Meritul de a fi realizat prima maúină de calcul îi revine lui Blaise Pascal. În onoarea sa a fost denumit úi primul limbaj de programare care a fost inventat. Acest prim calculator a fost în întregime un calculator mecanic, bazat pe angrenajul unor roĠi dinĠate acĠionate manual, principalele operaĠii care puteau fi efectuate fiind adunări úi scăderi. Treizeci de ani mai târziu acestei maúini de calcul i-au fost adăugate de către Leibnitz alte două noi operaĠii: înmulĠirea úi împăUĠirea. Au urmat apoi alte asemenea maúini, dintre care poate fi amintită prima maúină analitică. Aceasta cuprindea patru păUĠi: memoria (magazia), unitatea de calcul, intrarea (cititorul de cartele perforate) úi ieúirea. Memoria dispunea de 1000 de cuvinte de 50 de cifre zecimale care puteau fi utilizate pentru stocarea variabilelor úi rezultatelor. Unitatea de calcul prelua operanzii proveniĠi din memorie, făcea diverse operaĠii asupra lor (adunare, scădere, înmulĠire, împăUĠire) úi întorcea rezultatul tot în memorie. Toate aceste blocuri erau în întregime mecanice. Marea noutate a acestei maúini consta în faptul că putea citi instrucĠiuni de pe cartelele perforate úi apoi le putea trata. Unele instrucĠiuni puteau comanda maúinii să preia doi operanzi din memorie, să efectueze o operaĠie asupra lor úi să trimită rezultatul în memorie. Procesul continuă până în anul 1944 când a fost construită prima maúină, Mark I, care avea 72 cuvinte a 23 cifre úi un ciclu maúină de 6 secunde. A urmat îndeaproape succesoarea sa Mark II. Se poate afirma că, practic, era electronicii începuse.
Fig. 1.3. Schema unei maúini von Neumann.
Maúina von Neumann era alcătuită din 5 păUĠi: memoria, unitatea aritmetică úi logică, unitatea de control, dispozitivele de intrare úi cele de ieúire. Memoria dispunea de 4096 cuvinte, fiecare cuvânt având 40 de biĠi (0 sau1). InstrucĠiunile cuprindeau două câmpuri: 8 biĠi pentru tipul instrucĠiunii úi 12 biĠi pentru adresă. Unitatea aritmeticăúi logică conĠinea un registru intern special numit acumulator. Maúina nu dispunea de capacitate de calcul în virgulă mobilă. )ăcând un salt peste timp se ajunge la modelul IBM 704 care avea aceeaúi structură cu 4 K de memorie, instrucĠiuni de 36 de biĠi úi dispozitive speciale de calcul în virgulă mobilă.
1.3.3. A doua generaĠie: tranzistorii (1955-1965) Primul calculator echipat cu tranzistori a fost realizat în laboratoarele Lincoln, fiind denumit TX 0 (Transistorized eXperimental Computer 0). În 1961 apare PDP-1, o maúină de 4 K cuvinte de 18 biĠi, având ciclul maúină de 5 ms. În comparaĠie cu IBM 7090, care avea un preĠ exorbitant, calculatorul PDP-1 costa
Introducere
15
120.000 de dolari, fapt care a determinat vânzarea sa de către firma DEC úi deci participarea la naúterea unei industrii mini-informatice. În 1964 apare pe piaĠă modelul 6600 al firmei CDC, o maúină aproape de 10 ori mai rapidă decât bătrânul IBM 7094. Impactul asupra publicului a fost unul foarte puternic, numeroase firme exprimându-úi dorinĠa de a cumpăra un astfel de calculator. DiferenĠa faĠă de modelul IBM: o arhitectură paralelă. În concluzie, dispunea de mai multe unităĠi funcĠionale capabile să execute simultan diverse operaĠii. Acest model putea executa 10 instrucĠiuni în acelaúi timp.
1.3.4. A treia generaĠie: circuitele integrate (1965-1980) Inventarea circuitului integrat a permis plasarea de numeroase tranzistoare într-o singură capsulă de siliciu, cea ce a condus la calculatoare mai mici, mai rapide úi mai ieftine. În anul 1965, firma IBM, numărul unu în domeniul informaticii, scoate pe piaĠă modelul IBM 360, acesta fiind primul calculator capabil de a simula un alt calculator. ApariĠia circuitelor integrate a dus la dezvoltarea industriei microinformaticii, prin apariĠia unor noi modele, dintre care pot fi amintite calculatorul PDP-11 realizat de firma DEC. El este asemăQător cu modelul 360 al firmei IBM, dar cu un raport performanĠă/cost mult mai bun.
16
ARHITECTURA SISTEMELOR DE CALCUL
Un alt element esenĠial este apariĠia úi dezvoltarea serviciului www (World Wide Web) iniĠiat de Laboratorul CERN din Geneva în colaborare cu mai multe universităĠi americane. În 1993, firma Intel construieúte microprocesorul cu structură superscalară – Pentium. Apar sistemele masiv paralele cu memorie partajată úi distribuită (Cray/MPP). Interactivitatea serviciului www este asigurată prin introducerea tehnologiei Java. EvoluĠia procesoarelor a luat apoi un avânt puternic, frecvenĠele de lucru crescând în numai opt ani de la 100 MHz la peste 3 GHz, înregistrându-se în acelaúi timp úi o îmbunăWăĠire a arhitecturii microprocesoarelor prin specializare, memorie cache, paralelism (pipe-line), optimizarea algoritmilor Este prezentat în continuare un scurt istoric al dezvoltării domeniului. AN
NUME
SUBIECT
1642 1834
Blaise Pascal C. Babbage
1904 1906 1936 1943
J.A. Flemming L. De Forest K. Zuse Guvernul britanic, cu concursul lui A. Turing H. Aiken
Prima maúină de calculat mecanică Maúina analitică de la Cambridge cu instrucĠiuni pe cartelă perforată Dioda Trioda Primul calculator cu relee – Berlin Primul calculator electronic cu tuburi cu vid – Colossus Primul calculator american – Mark 1 (72 cuvinte a 23 cifre, ciclu maúină de 6 sec.); începutul erei electronicii Debutul generaĠiei I de calculatoare – Eniac, Univ. Pennsylvania (18.000 tuburi electronice, 1.500 relee, 600 comutatoare, 30 tone, 150 KW) Tranzistorul
1944
1.3.5. A patra generaĠie: circuitele VLSI (1980-1990) Această etapă este cea în care încep să apară primele calculatoare personale, acest lucru fiind posibil datorită unor factori decisivi: perfecĠionarea tehnologiei de fabricaĠie; dezvoltarea reĠelelor de calculatoare; diversitatea mare de modele de arhitecturi; apariĠia conceptelor de multimedia úi de programare orientată pe obiecte. Un pas important în această etapă a fost reprezentat de apariĠia primelor calculatoare personale realizate de firma IBM în colaborare cu Intel. Au rezultat câteva modele care au avut o mare priză la public, dintre care IBM PS1, PS2. Un alt mare consorĠiu format din Apple úi Motorola scoate pe piaĠă modelele MacIntosh 68000, 68040. Trebuie remarcat faptul că toate aceste modele erau calculatoare personale, deci accesibile ca preĠ persoanelor fizice.
1.3.6. A cincia generaĠie: prelucrarea masiv paralelă (după 1990) Începutul generaĠiei a cincia este marcată de dezvoltarea calculatoarelor cu prelucrare masiv paralelă, de exemplu CM 2 úi CM 5 de la Thinking Machines Co.
1946
J. Mauchly úi J.P. Eckert
1948
J. Bardeen, W. Shockley, W. Brattain N. Wiener M. Wilkes, cu arhitectură propusă de J. von Neumann MIT J. Mauchly úi J.P. Eckert J. von Neumann
1948 1949 1951 1951 1952 1955 1956 1960 1960-61
Laboratoarele Lincoln Firma IBM
1961 1962
Firma IBM Firma IBM
Firma DEC
Cibernetica Primul calculator cu program înregistrat, EDSAC Primul calculator în timp real, Whirlwind Primul calculator comercializat – Univac 1 Calculatorul IAS (Princeton) răspândeúte arhitectura de bază von Neumann Primul calculator echipat cu tranzistoare – TX 0 Calculatorul IBM 704 Circuite integrate Primul minicalculator, PDP-1, practic începutul generaĠiei a doua de calculatoare (tranzistorizate) úi a miniinformaticii Maúina de gestiune 1401 Primul calculator útiinĠific puternic (pe 36 de biĠi) – IBM 7094
Introducere 1963
Firma Borroughs
1964
Firma IBM
1964 1965
Firma CDC Firma DEC
1970
Firma DEC
1970 1971 1972 1974 1974
Firma Intel Firma Intel Firma Cray Firma Intel
1978 1978 1979 1980
Firma Intel Firma DEC Firma Motorola Firma IBM
1982 1983
Firma Intel S.U.A.
1984 1985 1987
Firma Motorola Firma Intel Firma Motorola
1989
Firma Intel
1990 1991 1992
Thinking Machines Co. CM 2 úi CM 5 Laboratorul CERN, Geneva
1993
Firma Intel
1993
Firma Cray Research
1995
Firma Sun Microsystems
1996
Firma Cyrix
1997 1998 1998 1999 1999 2000
Firma AMD Firma AMD Firma Intel Firma Intel Firma AMD Firma AMD
17
Calculatorul B 5000 – primul calculator dedicat unui limbaj de programare: Algol 60 Prima familie de calculatoare, IBM 360; firma IBM preia supremaĠia în informatică; multiprogramare; începutul generaĠiei a treia (cu circuite integrate) Primul calculator paralel – 6600 Primul calculator cu producĠie de masă (pe 12 biĠi), PDP-8 Minicalculatorul PDP-11, firma DEC preia supremaĠia în miniinformatică Circuite integrate pe scară largă Primul microprocesor de 4 biĠi – 4004 Primul microprocesor de 8 biĠi – 8008 Primul supercalculator: Cray-1 Microprocesorul 8080: prima unitate centrală pe un cip Primul microprocesor de 16 biĠi – 8086 Primul superminicalculator de 32 biĠi – VAX Primul procesor al familiei 680x0 – 68000 Începutul generaĠiei a patra de calculatoare (cu circuite VLSI); era calculatoarelor personale, PC Microprocesorul de 16 biĠi – 80286 Tehnologia LAN (Local Area Network) este folosită pe scară largă Primul microprocesor de 32 biĠi – 68020 Microprocesorul de 32 biĠi – 80386 Microprocesorul de 32 biĠi cu unitate de gestiune a memoriei – 68030 Microprocesorul de 32 biĠi cu coprocesor úi memorie cache – 80486 Începutul generaĠiei a cincia de calculatoare (prelucrare masiv paralelă) Serviciul de informaĠii www (World Wide Web) oferit pe Internet Microprocesorul cu structură superscalară – Pentium Cray/MPP – Sistem masiv paralel Cu memorie partajată distribuită Tehnologia JAVA asigură interactivitatea serviciului www Microprocesorul în arhitectură superpipe-line – 686 P200+ Microprocesoarele RISC – K5, K6 Microprocesorul K6-2 3D Microprocesorul Mendocino/333 MHz Microprocesorul Pentium III/600 MHz Microprocesorul Athlon/K7 Microprocesorul Sharptooth /K6-3
18 2002 2002 2003 2005 2005 2006 2007 2007 2007 2008
ARHITECTURA SISTEMELOR DE CALCUL Firma Intel Firma AMD Firma AMD Firma AMD Firma Intel Firma Intel Firma AMD Firma Intel Firma Intel ... ... ...
Microprocesorul Pentium 4 (> 3 GHz) Microprocesorul AMD Athlon XP 2600+ Microprocesorul AMD Opteron (64 biĠi) Microprocesorul AMD Opteron (2) Microprocesorul Intel Pentium D Microprocesorul Intel Core (1, 2) Microprocesorul AMD Phenom (2, 3, 4) Microprocesorul Intel Dual Core Microprocesorul Intel Core 2 (1, 2, 4) ... ... ...
ARHITECTURA SISTEMELOR DE CALCUL
20
2. TIPURI DE ARHITECTURI
2.1. Clasificarea arhitecturii sistemelor de calcul 2.1.1. Clasificarea Flynn Clasificarea Flynn se face după gradul de multiplicitate al úirurilor formate din secvenĠe de instrucĠiuni úi secvenĠe de date care pot fi tratate simultan din punct de vedere hardware. Prin secvenĠă de date se înĠelege un úir de date de intrare, rezultate parĠiale sau rezultate temporare care sunt apelate de către o secvenĠă de instrucĠiuni. Conform acestei clasificări există patru tipuri de arhitecturi: SISD (Single Instruction Stream – Single Data Stream); SIMD (Single Instruction Stream – Multiple Data Stream); MISD (Multiple Instruction Stream – Single Data Stream); MIMD (Multiple Instruction Stream – Multiple Data Stream). Pentru aceste arhitecturi există trei tipuri de componente de sistem: UC (unitatea centrală), UP (unitatea de prelucrare) úi MM (modulul de memorie). Deúi sunt diferite între ele, toate schemele următoare respectă succesiunea evenimentelor din arhitectura Von Neumann: instrucĠiunile úi datele sunt extrase din memorie, instrucĠiunile sunt decodate de UC care trimite secvenĠa de instrucĠiuni către UP pentru execuĠie, datele circulă între memorie úi procesor pe o cale bidirecĠională. În continuare se va nota úirul de date cu SD úi cel de instrucĠiuni cu SI. 2.1.1.1. Arhitectura SISD
Fig. 2.1. Structura arhitecturii SISD.
Caracteristici: instrucĠiunile sunt executate serial, însă pot exista suprapuneri în execuĠie (pipeline). Majoritatea structurilor SISD rămase astăzi în uz folosesc structuri pipeline.
un calculator cu structură SISD poate avea mai multe elemente de prelucrare (funcĠii definite), toate găsindu-se sub supervizarea aceleiaúi unice UC. Exemple: IBM 7090, VAX 11/780, CDC 6600, IBM 360/91, CRAY. Limitările arhitecturii SISD La acest tip de arhitecturi, viteza calculatorului este determinată de perioada ceasului. Dacă perioada ceasului scade, calculatorul devine în consecinĠă mai rapid. Pentru a obĠine un ceas mai rapid există două posibilităĠi: calea de semnal să fie mai scurtă; tranzistorii folosiĠi să fie mai rapizi. Din nefericire, se pare că ambele au atins o anumită limitare din punct de vedere tehnologic. Scurtarea căii de semnal ar costa foarte mult. Creúterea numărului de tranzistori pe unitatea de arie ar duce la creúterea dramatică a căldurii disipate în exterior. Sistemele suplimentare de răcire ar costa úi ele foarte mult. Se lucrează în prezent la fabricarea unor cipuri de joasă putere (Low Power Chips) care ar duce la scăderea căldurii generate. Aceasta se poate realiza prin menĠinerea constantă a densităĠii de energie în timp ce numărul de tranzistori pe unitatea de arie a cipurilor ar creúte. Realizarea de tranzistori mai rapizi este, de asemenea, foarte costisitoare. În acest scop se lucrează la scăderea rezistenĠei firelor prin care trece curentul. Aluminiul este elementul folosit în 1998, dar recent s-a reuúit construcĠia unui cip cu fire din cupru. Concomitent cu scăderea rezistenĠei firelor se lucrează úi la îmbunăWăĠirea izolaĠiei dintre fire. Este evident că perioada ceasului nu poate fi făcută egală cu 0. În consecinĠă, modul secvenĠial de tratare a operaĠiilor impus de arhitectura von Neumann distruge orice speranĠă într-o viitoare creútere a vitezei calculatoarelor. Această situaĠie este cunoscută sub denumirea de gâtul sticlei lui Neumann (Neumann Bottleneck). Pentru a sparge această limitare, trebuie introdusă o arhitectură de tip neserial. Alternativa este reprezentată de arhitecturile de calcul paralele. 2.1.1.2. Arhitectura SIMD Caracteristici: există mai multe UP datorităúirului de date multiplu, preluat din memoria partajată (memoria împăUĠită în mai multe memorii); corespunde matricelor de microprocesoare: UP identice úi supervizate de o singură UC; toate UP primesc instrucĠiunile (setul unic de instrucĠiuni) care acĠionează asupra unor seturi de date diferite, provenite din úiruri diferite de date SD1, ..., SDn; maúinile SIMD pot efectua două tipuri de prelucrări: pe cuvânt (wordslice) úi pe bit (bit-slice).
Tipuri de arhitecturi
21
22
ARHITECTURA SISTEMELOR DE CALCUL
ieúirea de la UP1 devine intrare pentru UP2 ú.a.m.d. Structura se numeúte macro-pipeline (are doar o valoare teoretică).
Fig. 2.2. Structura arhitecturii SIMD.
Aceste tipuri de maúini lucrează foarte bine pe seturi de date formate de matrice de dimensiuni foarte mari atunci când este necesar să se execute asupra lor aceeaúi operaĠie. Maúinile SIMD sunt eficiente úi în cazul procesării reĠelelor neurale. Exemplu: CM (Connection Machine) fabricată de Thinking Machines Company din Cambridge (Massachusetts). Limitările arhitecturii SIMD Aceste tipuri de maúini sunt destul de scumpe în ceea ce priveúte costurile de producĠie, deoarece bancurile de procesoare nu sunt componente standard. Chiar dacă numărul celor care au nevoie de astfel de maúini este în continuă creútere, aceútia nu sunt destul de numeroúi pentru a justifica existenĠa unor fabrici dedicate exclusiv producĠiei de SIMD-uri. În consecinĠă, aceste maúini sunt în general Iăcute la comandăúi costă foarte mult. 1.4.1.3. Arhitectura MISD Deúi această maúină este posibil de realizat din punct de vedere teoretic, nu a fost niciodată fabricată în scop comercial. A fost construită în laboratoare de cercetare, dar nu au existat clienĠi dornici să investească într-o astfel de arhitectură, deoarece nu se adresează nici uneia dintre aplicaĠiile de bază.
Fig. 2.3. Structura arhitecturii MISD.
Caracteristici: fiecare UC lucrează cu úirul de instrucĠiuni propriu SI1, ..., SIn; fiecare UP lucrează cu acelaúi úir de date, care suportă mai multe prelucrări; partajare pe orizontală (un singur úir de date, mai multe úiruri de instrucĠiuni);
2.1.1.3. Arhitectura MIMD Aceste tipuri de calculatoare sunt cunoscute sub denumirea de multiprocesoare, chiar dacă úi maúinile SIMD sunt tot multiprocesor. În calculatoarele MIMD paralelismul este realizat prin lansarea în execuĠie a mai multor instrucĠiuni în acelaúi timp pe diferite seturi de date. Este evident că sunt necesare elemente adiĠionale de control pentru a trimite instrucĠiunea corectă úi data care trebuie la procesorul ales, toate în acelaúi timp. Cele mai multe sisteme multiprocesor intră în această clasă.
Fig. 2.4. Structura arhitecturii MIMD.
Avantajele arhitecturii MIMD sunt: viteză mare de prelucrare, dacă prelucrarea poate fi descompusă în fire paralele, toate procesoarele prelucrând simultan; întrucât procesoarele úi blocurile de memorie sunt resurse de tip general, defectarea unei unităĠi se poate compensa prin alocarea sarcinii de prelucrare altei unităĠi (grad ridicat de toleranĠă la defectări); se poate utiliza reconfigurarea dinamică pentru a face faĠă gradelor variabile de încărcare a procesoarelor. Exemple de sisteme MIMD: C.mmp, Cm* (Carnegie Mellon University), Ultracomputer (New York University), Cedar (University of Illinois), BBN Butterfly, Alliant FX, CM-5 (Thinking Machine Corporation), seria Intel iPSc etc. Sistemele MIMD se mai numesc intrinseci (propriu-zise) dacă au UP interactive: toate úirurile de date provin din acelaúi spaĠiu de memorie adresat de cele n procesoare (dacă nu se întâmplă acest lucru – spaĠii disjuncte ale memoriei – se spune că există un set de n sisteme SISD independente). Cele două tipuri de sisteme prezentate mai sus se mai numesc shared memory (memoria este accesată de toate procesoarele) úi shared nothing (fiecare procesor are propria memorie, propriul disc úi propriul sistem de comunicaĠii). Dacă la un sistem MIMD intrinsec interacĠiunea între microprocesoare este puternică, sistemul se numeúte cu cuplaj strâns. Legătura procesor – memorie se face prin intermediul unor magistrale de interconectare. ComunicaĠia úi sincronizarea între procesoare se realizează prin zone comune de memorie. Avantaj: comoditate de programare oferită de spaĠiul comun de adrese (shared address space).
Tipuri de arhitecturi
23
În caz contrar, sistemul se numeúte cu cuplaj slab. Legătura procesor – memorie se face prin conexiuni seriale punct-la-punct (de tip reĠea). ComunicaĠia între procesoare se face prin mesaje (message passing). Fiecare procesor dispune de memorie proprie (private memory). Avantaj: scalabilitate (posibilitate comodă de expandare). Cele mai multe sisteme comerciale sunt cu cuplaj slab. Exemple: IBM 370/168 – cuplaj slab, CRAY 2 – cuplaj strâns. 2.1.1.4. Sisteme cu memorie partajată (shared memory) În cazul maúinilor cu memorie partajată, maúina originală von Neumann a fost extinsă prin includerea a ceea ce se numeúte memorie cache. Aceasta este o memorie locală ataúată fiecărui procesor în parte, care îi permite procesorului să aibă acces rapid la propriile seturi de instrucĠiuni úi date, dar să poată accesa în continuare memoria principală prin magistrala de memorie. Acest tip de maúină se mai numeúte arhitectură cu multiprocesare simetricăúi este prezentat în figura 2.5.
Fig. 2.5. Arhitectura sistemelor shared memory.
Dintre sistemele mai vechi, în această categorie se înscrie seria IBM RS/6000: J40, J50, R40 úi R50. Modelul J40 are două nivele de cache în loc de unul singur. În loc să folosească o magistrală pentru a lega diferitele procesoare cu memoria principală, IBM a dezvoltat un aúa-numit crossbar care, spre deosebire de magistrala convenĠională, permite până la patru transferuri simultane cu memoria.
24
ARHITECTURA SISTEMELOR DE CALCUL
La aceste arhitecturi, „gâtul sticlei” (bottleneck) îl reprezintă magistrala de memorie. Toate instrucĠiunile úi datele fiecărui procesor trebuie să treacă prin această magistrală. Când procesoarele care folosesc aceeaúi memorie sunt puĠine, performanĠele depind liniar de numărul procesoarelor. Pe măsură ce acesta creúte, Părirea performanĠelor este din ce în ce mai slabă, aúa cum rezultă din figura 2.6. Există două tipuri de sisteme MIMD cu memorie partajată: cu resurse globale (Global Shared Memory): o arhitectura UMA (Uniform Memory Access); o arhitectura UMA cu memorii cache locale; cu resurse distribuite (Distributed Shared Memory): o arhitectura NUMA (Non-Uniform Memory Access); o arhitectura COMA (Cache-Only Memory Access); o arhitectura CC-NUMA (Cache Coherent Non-Uniform Memory Access). A. Arhitecturile GSM (Global Shared Memory) Calculatoarele MIMD cu spaĠiu unic de memorie au un cost relativ scăzut úi din acest motiv se bucură de o popularitate ridicată. Acestea sunt considerate a fi sisteme cu cuplaj strâns, datorită gradului ridicat de partajare a resurselor. FuncĠionarea întregului sistem paralel este coordonată de către un singur sistem de operare, care se ocupă de planificarea în execuĠie a proceselor pe procesoarele disponibile în sistem, în condiĠiile în care se doreúte o încărcare cât mai echilibrată a acestora. Arhitectura UMA (Uniform Memory Access) Memoria fizică a calculatoarelor de tip UMA este compusă din mai multe blocuri care formează un spaĠiu unic de adresare. Procesoarele accesează blocurile de memorie prin intermediul reĠelei de interconectare (vezi figura 2.7), care poate fi statică (formată din conexiuni fixe, punct-la-punct, între nodurile reĠelei) sau dinamică (formată din conexiuni variabile în timp, de tip crossbar).
Limitările arhitecturilor MIMD cu memorie partajată
Fig. 2.7. Arhitectura UMA.
Fig. 2.6. Limitările calculatoarelor cu memorie partajată.
Principala caracteristică a calculatoarelor UMA este că toate procesoarele au timp de acces egal la memoria partajată. Însă, tocmai de aceea, numărul procesoarelor utilizate în cadrul sistemului paralel nu poate fi foarte mare, deoarece creúterea numărului de procesoare din sistem atrage după sine o probabilitate mai mare de conflict în ceea ce priveúte accesarea concurentă a aceleiaúi zone de memorie. Într-un astfel de caz, se vor înregistra timpi de aúteptare care vor conduce la o utilizare ineficientă a procesoarelor úi la o încărcare neechilibrată a acestora.
Tipuri de arhitecturi
25
În plus, pentru obĠinerea unor performanĠe deosebite, reĠeaua de comunicaĠie va trebui să ofere o lărgime de bandă suficient de mare, deoarece fiecare procesor poate necesita accesul la memoria partajată, ceea ce presupune transportul datelor solicitate din memoria comună către procesorul care a formulat cererea. Arhitectura UMA cu memorii cache locale O îmbunăWăĠire adusă modelului UMA o reprezintă utilizarea memoriilor cache la nivelul elementelor de procesare (vezi figura 2.8). Fiecare procesor va avea asociată o astfel de memorie. Atunci când un procesor solicită date, mai întâi se verifică dacă aceste date se găsesc deja în memoria cache locală. În caz afirmativ, acestea se transferă foarte rapid procesorului, făUă a accesa memoria partajată. Astfel, problema conflictelor de acces concurent la spaĠiul unic de memorie se rezolvă, cel puĠin, parĠial. Mult mai puĠine cereri vor ajunge să acceseze memoria partajată úi, din acest motiv, probabilitatea de apariĠie a conflictelor devine mult mai mică.
26
ARHITECTURA SISTEMELOR DE CALCUL
Arhitectura NUMA (Non-Uniform Memory Access) În cazul acestui model, memoria partajată este distribuită fizic procesoarelor din sistem (vezi figura 2.9). Astfel, fiecare element de procesare are asociată o memorie locală. Toate aceste memorii locale formează un spaĠiu unic de adresă. Din acest motiv, timpul de acces la memorie este neuniform, deoarece accesul la datele aflate în memoria locală este foarte rapid în timp ce accesul la datele aflate în memoria locală a altor elemente de procesare va fi mult mai lent, datorită faptului că datele respective vor fi transportate prin reĠeaua de comunicaĠie.
Fig. 2.9. Arhitectura NUMA.
Fig. 2.8. Arhitectura UMA cu memorii cache locale.
Utilizarea memoriilor cache presupune însă úi asigurarea consistenĠei acestora. În momentul în care anumite date stocate în memoria globală se modifică, aceste modificări trebuie să fie semnalate tuturor memoriilor cache care stochează cópii ale datelor respective. Mai mult chiar, atunci când se schimbă conĠinutul datelor de la nivelul unei memorii cache este nevoie ca modificările să fie efectuate în toate memoriile cache care conĠin cópii ale datelor actualizate. MenĠinerea coerenĠei memoriei cache se poate realiza atât prin mecanisme software, cât úi prin mecanisme hardware. Modelele cu acces neuniform la memorie încearcă să evite dezavantajele întâlnite la calculatoarele de tip UMA.
ObservaĠie. Sistemele NUMA sunt foarte asemăQătoare sistemelor distribuite, din moment ce fiecare procesor dispune de o memorie locală, iar toate aceste module locale formează un spaĠiu unic de adresare. O caracteristică importantă pentru maúinile NUMA este factorul NUMA. Acest factor arată diferenĠele de latenĠă pentru accesarea datelor din memoria locală comparativ cu accesarea dintr-o zonă care nu este locală. În funcĠie de conexiunile sistemului, factorul NUMA poate diferi pentru diverse păUĠi ale maúinii: accesarea datelor dintr-un nod vecin este mai rapidă decât accesarea datelor dintr-un nod mai îndepărtat pentru care este necesară traversarea unui număr mai mare de etaje crossbar. Aúadar, atunci când este menĠionat, factorul NUMA se referă de obicei la cele mai îndepărtate două procesoare ale unei reĠele. Arhitectura COMA (Cache-Only Memory Access) În cazul modelului COMA, spaĠiul global de adrese este format din memorii cache locale fiecărui procesor. Atunci când un procesor are nevoie de anumite date, acestea sunt mai întâi aduse în memoria cache de către controlerul de memorie, după care acestea vor fi accesate foarte rapid (vezi figura 2.10).
B. Arhitecturile DSM (Distributed Shared Memory) Reprezintă sisteme cu memorie partajată, dar care este distribuită din punct de vedere fizic. Astfel, procesoarele au asociate memorii locale care formează împreună o memorie globală care poate fi accesată direct de către toate elementele de procesare. Timpul de acces la locaĠiile de memorie nu mai este uniform, el depinzând de localizarea fizică a datelor care se doresc a fi transferate. Fig. 2.10. Arhitectura COMA.
Tipuri de arhitecturi
27
ObservaĠie. Dispare conceptul de memorie globală, controlerul de memorie având responsabilitatea de a încărca în memoriile cache locale datele ce urmează a fi accesate de către procesoare. Încărcarea datelor presupune localizarea úi transportul acestora prin intermediul reĠelei de interconectare. Prin folosirea memoriilor cache locale, probabilitatea ca un procesor să acceseze majoritar date numai din memoria locală creste foarte mult. Totuúi, folosirea memoriilor cache pe post de memorii locale atrage după sine úi o serie de probleme. Atunci când se încearcă aducerea unui bloc de date într-o memorie cache integral ocupată, apare necesitatea mutării unui alt bloc de date pentru a se crea spaĠiul necesar memorării noului bloc care va fi accesat de Fătre procesor. Însă, datorită faptului că nu mai există o memorie globală în care să se scrie acest bloc, va fi nevoie ca datele conĠinute să fie mutate în memoria cache a unui alt procesor. Aceste date însă nu vor fi niciodată accesate de către procesorul care foloseúte memoria respectivă, ceea ce conduce la o scădere a eficienĠei de utilizare a sistemului. În plus, operaĠia de transfer a blocului de date dintr-o memorie cache în alta este úi ea consumatoare de timpi de procesare, din moment ce datele trebuie să circule prin reĠeaua de interconectare. Aceúti timpi morĠi atrag după sine o utilizare ineficientăúi o încărcare neechilibrată a procesoarelor. O altă problemă o reprezintă asigurarea coerenĠei memoriilor cache, în contextul în care operaĠiile de mutare a blocurilor devin din ce în ce mai complicate, atunci când numărul de procesoare din sistem este din ce în ce mai mare. Controlerul de memorie trebuie să asigure gestiunea nu numai a datelor care vor fi aduse în memoriile cache, ci úi a blocurilor care au fost mutate dintr-o memorie locală în alta. Din aceste motive, arhitectura COMA este tot mai rar folosită. Arhitectura CC-NUMA (Coherent Cache NUMA) Modelul CC-NUMA combină modul în care este construit spaĠiul unic de adresă la calculatoarele de tip NUMA úi la cele de tip COMA. Fiecare element de procesare al unui calculator de tip CC-NUMA dispune atât de o memorie locală. cât úi de o memorie cache asociată (vezi figura 2.11).
Fig. 2.11. Arhitectura CC-NUMA.
28
ARHITECTURA SISTEMELOR DE CALCUL
Ca úi în cazul modelului NUMA, accesul la datele stocate în memoria locală proprie este foarte rapid. Accesarea unor date aflate în memoria locală a unui alt procesor implică aducerea acestora în memoria locală proprie. Transferul de date folosind reĠeaua de comunicaĠie atrage după sine întârzieri, deoarece nu este la fel de rapid precum accesarea memoriilor locale. ExistenĠa memoriilor cache are ca efect reducerea traficului prin reĠeaua de comunicaĠie. Datele solicitate de către un procesor sunt mai întâi căutate în memoriile locale, după care sunt aduse în memoria cache, în cazul în care acestea se găsesc în memoria locală a unui alt procesor. La accesările ulterioare, se va folosi copia datelor respective stocată în memoria cache, deci nu va mai fi nevoie ca datele să fie din nou transferate prin reĠeaua de interconectare. Utilizarea memoriile cache implică necesitatea implementării unor mecanisme software sau hardware care să asigure consistenĠa memoriilor cache. La modificarea unor date aflate în memoria locală a unui procesor, este nevoie să se actualizeze toate copiile acestor date aflate în memoriile cache. Aceste mecanisme care asigură coerenĠa memoriilor cache contribuie la creúterea traficului efectuat în cadrul reĠelei de interconectare. Arhitectura CC-NUMA este utilizată de o serie de supercalculatoare foarte cunoscute: Bull NovaScale, HP Superdome úi SGI Altix. Dezavantajele arhitecturilor DSM Principalul dezavantaj al arhitecturilor MIMD cu memorie distribuită úi cu spaĠiu individual de adresare (NUMA, COMA, CC-NUMA) îl reprezintă întârzierile care pot să apară atunci când un procesor doreúte să acceseze date aflate în memoria locală a unui alt element de procesare. Aceste întârzieri se datorează faptului că procesorul respectiv va aútepta ca datele solicitate să fie transportate în memoria sa locală. Pentru minimizarea timpilor de inactivitate, procesorul în cauză poate efectua o comutare de procese, atunci când procesul activ este blocat în Dúteptarea datelor solicitate. În general comutarea proceselor este o operaĠiune complexă, implicând costuri importante, ce pot influenĠa performanĠele sistemului. EficienĠa operaĠiei de comutare poate fi substanĠial îmbunăWăĠită prin utilizarea firelor de execuĠie (thread-uri). Un proces poate fi împăUĠit în mai multe fire de execuĠie, care comunică între ele prin accesul la spaĠiul de adresă alocat procesului, pe care îl partajează. Din acest motiv, firele de execuĠie reprezintă un mecanism eficient de exploatare a concurenĠei programelor. Un fir de execuĠie reprezintă cea mai mică entitate de planificare în sistemele bazate pe thread-uri. Comutarea între două fire de execuĠie care aparĠin aceluiaúi proces este o operaĠie foarte rapidă, care nu atrage după sine costuri suplimentare semnificative. Astfel, procesul activ este suspendat până în momentul în care datele solicitate au fost aduse în memoria locală. În acest timp, este executat un alt fir de execuĠie al aceluiaúi proces. Această comutare între fire de execuĠie aparĠinând aceluiaúi proces conduce la scăderea timpilor de inactivitate úi, implicit, la creúterea eficienĠei cu care este utilizat sistemul paralel. Calculatoarele MIMD cu memorie distribuită se numesc multicalculatoare úi reprezintă sisteme cu cuplaj slab, datorită gradului redus de partajare a resurselor.
Tipuri de arhitecturi
29
Principalul avantaj al acestor sisteme îl reprezintă scalabilitatea, adică, posibilitatea extinderii prin conectarea unor noi procesoare. Creúterea numărului de procesoare nu atrage după sine probleme legate de accesul concurent la memorie, deoarece majoritatea apelurilor sunt către memoria locală. Însă transferul de mesaje presupune schimburi de date care pot aglomera reĠeaua. Transferul de date între două procesoare este o operaĠie mare consumatoare de timp. Din acest motiv, performanĠele reĠelei de interconectare pot influenĠa în mod hotărâtor eficienĠa cu care este utilizat sistemul paralel. În plus, este foarte greu ca sarcina de calcul distribuită procesoarelor să fie echilibrată. Sistemul de operare rulează în fiecare nod úi, din acest motiv, întregul sistem poate fi văzut ca fiind format din staĠii de lucru care comunică prin transfer de mesaje. Complexitatea acestor sisteme este foarte mare, datorită faptului că într-un nod de procesare individual se poate găsi un simplu procesor sau un întreg sistem de tip UMA. Exemple de arhitecturi MIMD cu memorie partajată Din perspectivă istorică, maúinile paralele cu memorie partajată sunt de trei categorii: bazate pe magistrală (Pentium SMP, nodul IBM SP), bazate pe directoare de tip CC-NUMA (Origin 2000) úi cu spaĠiu de adresare global (Cray T3D, T3E). Maúinile multiprocesor din anii '60 ai secolului trecut aveau structura din figura 2.12.a. Capacitatea de memorare sau posibilitatea de comunicare I/O se puteau ameliora prin adăugarea de module de memorie úi de dispozitive I/O.
30
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 2.13. Arhitectura sistemelor shared nothing.
Pentru ca aceste calculatoare să lucreze bine trebuie să existe un protocol bun de transmitere a mesajelor între ele. Acest protocol trebuie să fie foarte rapid úi IăUă erori. IBM foloseúte în acest scop protocolul Message Passing Interface (MPI) úi mai multe căi redundante care formează un switch de mare viteză. Aceste noduri sunt conectate úi printr-o reĠea convenĠională Ethernet din motive de management al sistemului.
2.1.2. Clasificarea Wang Criteriul de clasificare este în acest caz gradul de paralelism în procesarea cuvintelor, respectiv biĠilor de date. Datele pot fi configurate într-o matrice (vezi figura 2.14). Se notează cu n lungimea unui cuvânt úi cu m numărul de cuvinte procesate la un moment dat.
Fig. 2.12. a. Arhitectura sistemelor multiprocesor. b. Arhitectura reĠelei crossbar (multistage).
Creúterea capacităĠii de procesare se putea realiza prin adăugarea de procesoare. Apărea deja necesitatea unei interconectări a modulelor de memorie, a procesoarelor úi a legăturilor cu canalele I/O. Se foloseau reĠele multietajate de tip crossbar sau multistage (vezi figura 2.12.b). Memoriile cache, marea lovitură a anilor '70, au fost de natură a influenĠa puternic structurile de memorare. Sistemele de memorie scalate prin adăugarea de module suplimentare aveau nevoie de capacitate, dar úi de viteză ridicată. Memoria era o sursă de strangulări (bottleneck). Introducerea memoriilor cache a schimbat aproape radical datele problemei. 2.1.1.5. Sisteme făUă memorie partajată (shared nothing) În acest caz, fiecare procesor are propria lui memorie. Aceste maúini sunt practic calculatoare independente legate într-o reĠea. Fiecare calculator se mai numeúte úi nod (al reĠelei). Arhitectura shared nothing se mai numeúte cu multiprocesare asimetricăúi este prezentată în figura 2.13.
Fig. 2.14. Organizarea datelor într-o matrice.
Conform acestei clasificări, există patru tipuri de arhitecturi: WSBS (Word Serial – Bit Serial). Se lucrează pe un singur cuvânt, fiecare cuvânt fiind prelucrat bit cu bit: n = 1, m = 1; WSBP (Word Serial – Bit Parallel): n > 1, m = 1; WPBS (Word Parallel – Bit Serial): n = 1, m > 1; WPBP (Word Parallel – Bit Parallel): n > 1, m > 1. În cazul tipului WPBP, structura paralelă este completă, corespunzătoare prelucrării pe matrice m n. În cazul tipului WSBP, prelucrarea este pe orizontală, iar în cazul tipului WPBS, prelucrarea este pe verticală.
Tipuri de arhitecturi
31
32
ARHITECTURA SISTEMELOR DE CALCUL
2.2. Structura fizică a unui calculator secvenĠial Calculatorul numeric – sistem fizic, care prelucrează automat informaĠia codificată sub formă de valori discrete, conform unui program, ce indică o succesiune determinată de operaĠii aritmetice úi logice. Sistemul de calcul este compus din două subsisteme principale: subsistemul hardware (echipamente fizice componente); subsistemul software (programele úi structurile de date). Structura de bază a calculatorului secvenĠial, cu program memorat, stabilită de von Neumann în 1945, este reprezentată în figura 2.15 úi cuprinde cinci unităĠi funcĠionale: unitatea de intrare (UI), unitatea de memorare (M), unitatea de ieúire (UE), unitatea aritmetico-logică (UAL) úi unitatea de comandă (UCd).
Fig. 2.16. Etapele execuĠiei secvenĠiale a unei instrucĠiuni.
Unitatea aritmetico-logică (ALU) realizează prelucrarea informaĠiei preluate din memorie, iar rezultatele se depun din nou în memorie sau sunt furnizate în exterior. ALU realizează două categorii de operaĠii: aritmetice: adunare, scădere, înmulĠire, împăUĠire; logice: ùI, SAU, SAU-EXCLUSIV, NEGAğIE. Unitatea de comandă, úi cea aritmetico-logică, împreună cu memoria, formează unitatea centrală (UC sau CPU) a calculatorului. Datele úi programele sunt introduse în calculator prin intermediul unităĠii de intrare, fiind apoi depuse în memorie.
2.2.1. Structuri de calculatoare paralele
Fig. 2.15. Maúina von Neumann.
Linia continuă reprezintă fluxul de date úi instrucĠiuni, iar linia întreruptă, fluxul de comenzi úi stări. Unitatea de comandă (UCda) controlează activitatea tuturor componentelor din sistem pe baza unei secvenĠe de instrucĠiuni, reprezentând programul memorat. Caracterul secvenĠial al calculatorului rezultă din modul de execuĠie al programului. Sunt necesare următoarele etape majore (vezi figura 2.16): încărcarea instrucĠiunii IF (instruction fetch); decodificarea instrucĠiunii ID (instruction decoding); încărcarea (din memorie) a operanzilor OF (operand fetch); execuĠia operaĠiilor impuse de instrucĠiune EX (execution). După terminarea unei instrucĠiuni, se trece la următoarea instrucĠiune. Astfel, programul este executat secvenĠial, instrucĠiune cu instrucĠiune.
Calculatoarele paralele se clasifică în trei configuraĠii arhitecturale: calculatoare pipeline (CPL); calculatoare (procesoare) matriceale (CM); calculatoare (sisteme) multiprocesor (CMP). Un calculator pipeline utilizează paralelismul temporar. Procesoarele matriceale se bazează pe mai multe unităĠi ALU sincronizate pentru a atinge paralelismul spaĠial. Un sistem multiprocesor este caracterizat de paralelism asincron, în sensul că setul de procesoare din structura sa interacĠionează úi îúi împart resursele (memorii, baze de date). În acelaúi timp, procesoarele matriceale apelează la paralelism sincron (blocuri comandate printr-un unic semnal de ceas). Cele patru tipuri de paralelism enunĠate nu se exclud reciproc. Cele mai multe dintre procesoarele actuale au structura internă bazată pe tehnologia pipeline úi multe dintre acestea pot fi organizate în sisteme matriceale sau multiprocesor. DiferenĠa de bază dintre un procesor matriceal úi un sistem multiprocesor este aceea că unităĠile funcĠionale din procesorul matriceal operează sincron, în timp ce procesoarele sistemului multiprocesor funcĠionează asincron. TendinĠele indică utilizarea calculatoarelor controlate prin flux de date cu procesoare algoritmice VLSI. Aceste tipuri de calculatoare sunt caracterizate printr-o creútere masivă a hardware-ului pentru a atinge paralelismul.
Tipuri de arhitecturi
33
2.2.1.1. Calculatoare pipeline ExecuĠia unei instrucĠiuni presupune patru faze majore: încărcarea instrucĠiunii – IF, decodarea instrucĠiunii – ID, încărcarea operanzilor – OF úi execuĠia efectivă – EX. În procesoarele non-pipeline, aceste faze se desfăúoară secvenĠial, iar în procesoarele pipeline se desfăúoară cu paralelism temporal. Pentru procesoare complexe, faza de execuĠie a instrucĠiunii poate fi partajată în suboperaĠii organizate după principiul pipeline. Problemele care apar în calculatoarele pipeline sunt datorate conflictelor de acces la memorie, salturilor úi întreruperilor. Datorită suprapunerii operaĠiilor, calculatoarele pipeline (CPL) sunt optimizate pentru a efectua operaĠii de acelaúi tip. Ori de câte ori se modifică tipul operaĠiei (instrucĠiunii), registrele pipeline trebuie úterse úi reîncărcate úi, ca urmare, se consumă timp suplimentar. Proiectarea CPL include: secvenĠializarea sarcinilor (task-urilor), prevenirea conflictelor de acces (coliziunilor), controlul congestiei úi controlul salturilor în program. O schemă funcĠională a unui CPL este ilustrată în figura 2.17.
34
ARHITECTURA SISTEMELOR DE CALCUL
Tehnica pipeline ExecuĠia unei instrucĠiuni este privită ca fiind alcătuită din mai multe faze (sau stagii), care se succed una după alta úi care pot fi tratate de unităĠi specializate, într-un mod asemăQător funcĠionării unei linii de asamblare (de ex.: de automobile). Exemplu. Fie un úir de procese care are loc la execuĠia unei instrucĠiuni.
P1 1 P2 P3 P4 P5
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2
7 6 5 4 3 t
Fig. 2.18. Exemplu de úir de procese la execuĠia unei instrucĠiuni úi desfăúurarea lor în timp.
Se presupune că de fiecare din aceste procese se ocupă o unitate specializată. Când se atinge al cincilea impuls de ceas, la toate cele cinci procese se lucrează în paralel; astfel se măreúte de cinci ori viteza de execuĠie. În faza încadrată, instrucĠiunea 5 este în faza de încărcare, instrucĠiunea 4 în faza de decodare etc. Problema este că în faza P5 poate să apară fenomenul de strangulare, pentru Fă una sau mai multe instrucĠiuni aflate între P1 úi P5 pot să nu fie instrucĠiuni utile (de ex.: salt). Deúi există un paralelism în execuĠia instrucĠiunilor, aceasta este o maúină pipeline de tip SISD.
Fig. 2.17. Structura funcĠională a unui calculator pipeline.
În schema de mai sus, există două structuri pipeline: una pentru date scalare úi una pentru date vectoriale. Faza de încărcare a operaĠiilor este împăUĠită în două subfaze independente, corespunzătoare operării cu scalari sau cu vectori. Faza de execuĠie se desfăúoară în două procesoare distincte, asociate scalarilor sau vectorilor.
2.2.1.2. Calculatoare matriceale Un procesor matriceal tipic este prezentat în figura 2.19. Există două unităĠi funcĠionale distincte: o unitate de control úi sincronizare a elementelor de procesare (care are ca sarcină suplimentară efectuarea operaĠiilor cu scalari) úi o unitate de prelucrare matriceală. Fiecare element de prelucrare (EP) reprezintă un element pasiv, adică, făUă posibilitatea de a decodifica instrucĠiuni. Încărcarea instrucĠiunilor úi decodarea lor (fazele IF úi ID) pentru unitatea de prelucrare matriceală este efectuată de către unitatea de control, prin intermediul unei reĠele de interconectare între EP. Fiecare element de prelucrare este alcătuit dintr-o unitate ALU, registre úi memorie locală, iar conexiunea dintre elemente este realizată într-o arhitectură de tip NUMA. Pentru o sesiune de lucru specifică, unitatea de control stabileúte funcĠia ALU pentru fiecare EP, după care transferă operanzi din exterior către memoriile locale ale EP úi rezultatele de la un EP spre alt EP (utilizând reĠeaua de interconectare). Programarea CM este mult mai dificilă decât programarea CPL.
Tipuri de arhitecturi
35
36
ARHITECTURA SISTEMELOR DE CALCUL
NotaĠiile din figura 2.20 sunt următoarele: P1 … Pn – procesoare; ML1 … MLn – memorii locale. Sistemul este alcătuit din mai multe procesoare care împart resurse comune (memorie), dar posedăúi resurse proprii (private), într-o arhitectură de tip UMA cu memorii (cache) locale. Procesoarele funcĠionează independent (asincron), dar trebuie să comunice între ele. Structura de interconectare între procesoare úi între procesoare úi resursele comune determină organizarea sistemului multiprocesor. Există trei mari categorii de interconectări: 1. partajarea unei magistrale comune (bus); 2. utilizarea unei reĠele de interconectare totală (crossbar); 3. utilizarea unei memorii multiport (ca memorie comună, duală). CMP pot fi centralizate sau distribuite. Sistemele centralizate conĠin toate procesoarele în acelaúi sistem de calcul, spre deosebire de sistemele distribuite, în care procesoarele pot fi fizic plasate în subsisteme diferite. Pentru sistemele distribuite este necesară o reĠea de comunicaĠie rapidă, flexibilă (adaptabilă) úi fiabilă.
Fig. 2.19. Structura funcĠională a unui calculator matriceal.
2.2.1.3. Calculatoare multiprocesor Structură de bază a unui CMP este prezentată în figura 2.20.
2.2.2. Mecanisme de prelucrare paralelă Aceste soluĠii de implementare a prelucrării paralele sunt corelate cu arhitecturile clasificării Flynn în privinĠa soluĠiilor hardware, soluĠiile software fiind specifice sistemelor de operare care gestionează intervalele de timp alocate diferitelor aplicaĠii úi speculând, astfel, posibilitatea prelucrărilor paralele. 2.2.2.1. SoluĠii hardware de prelucrare paralelă
Fig. 2.20. Calculator multiprocesor.
Multiplicarea úi specializarea unităĠilor aritmetico-logice (ALU) Procesoarele clasice aveau o singură unitate de tip ALU. În acest fel, nu se efectua decât o singură operaĠie la un moment dat. Prin multiplicarea ALU, majoritatea funcĠiilor pot fi distribuite între unităĠile specializate pe o anumită funcĠie aritmetică sau logicăúi pot funcĠiona în paralel. În unele procesoare există două ALU care pot lucra în paralel (o unitate pentru aritmetica în virgulă fixă úi alta pentru aritmetica în virgulă mobilă). Ideea specializării funcĠionale úi a distribuirii úi multiplicării ALU (numite úi unităĠi funcĠionale) poate fi extinsă atât la sistemele multiprocesor, cât úi la cele matriceale. Acest mecanism constituie, de fapt, implementarea paralelismului la sistemele SISD. În figura 2.21 se prezintă un exemplu de schemă pentru figurarea acestei soluĠii. Unitatea centrală conĠine 5 unităĠi ALU specializate pe diferite operaĠii, care pot lucra în paralel. În timp ce o instrucĠiune este executată de o anumită unitate ALU, unitatea de comandă încarcă úi decodifică o altă instrucĠiune pe care o încredinĠează unei alte unităĠi ALU ú.a.m.d.
Tipuri de arhitecturi
37
38
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 2.22. Arhitectura superscalară.
Fig. 2.21. Multiplicarea ALU prin specializarea pe operaĠii.
Sistemul este eficient dacă timpul de execuĠie de către ALU a unei operaĠii este mult mai mare decât timpul de încărcare úi decodificare a unei instrucĠiuni. Această condiĠie este, în general, îndeplinită. Exprimarea algebrică a condiĠiei de eficienĠă pentru multiplicarea úi specializarea ALU este:
Structura superscalară cu tehnică de burst (citire în rafale) este folosită începând cu microprocesorul 80486 úi este corelată cu momentul introducerii în capsula procesorului a memoriei cache de nivel 1. Tehnica burst foloseúte această memorie pentru a citi blocuri de instrucĠiuni din memoria cache, instrucĠiuni care au fost încărcate acolo din memoria principală (MP) în mod secvenĠial (vezi figura 2.23). În acest mod, se citesc dintr-o dată fie două, fie patru cuvinte, în funcĠie de dimensiunea instrucĠiunii (pe 32 sau 16 biĠi). S-a folosit iniĠial o magistrală internă între cache úi decodificatorul de instrucĠiuni de 64 biĠi, ajungându-se în prezent la 128 de biĠi.
tEX(ALU) >> tIF + tID. Paralelism úi structură pipeline în CPU Primele generaĠii de microprocesoare utilizau ALU (în special, sumatoare) care operau cu flux de biĠi (serial). Introducerea unui ALU care operează în paralel, pe flux de 8, 16, 32 sau 64 biĠi simultan (cu sumatoare, cu transport anticipat sau multiplicatoare matriceale) duce la creúterea vitezei de prelucrare. Arhitectura superscalară În arhitectura superscalară, úiruri de instrucĠiuni diferite (de obicei două, eventual mai multe), utilizează resurse diferite în aceleaúi stadii de execuĠie a instrucĠiunilor de pe fiecare úir. Un exemplu particular de arhitectură superscalară este prezentat în figura 2.22.
Fig. 2.23. Arhitectura superscalară cu tehnică de burst (citire în rafale).
Tipuri de arhitecturi
39
40
ARHITECTURA SISTEMELOR DE CALCUL
Exemplu. Schema din figura 2.24 reprezintă o arhitectură superscalară cu trei úiruri de instrucĠiuni diferite. Se execută în acelaúi timp o operaĠie cu numere reale úi două operaĠii cu numere întregi. Fiecare unitate este de tip pipeline úi poate executa câteva operaĠii în diferite stagii pipeline.
a
b
Fig. 2.24. Exemplu de arhitectură superscalară cu trei unităĠi pipeline în paralel.
Arhitectura superpipeline Se bazează pe divizarea stagiului pipeline în substagii úi, deci, pe creúterea numărul de instrucĠiuni care sunt procesate de pipeline la un moment dat. Divizând fiecare stagiu în două substagii, perioada ciclului de ceas IJ va fi redusă la jumătate: IJ/2. La capacitate maximă, structura pipeline produce un rezultat la fiecare IJ/2 secunde. Pentru o arhitectură datăúi setul de instrucĠiuni aferent ei, există un număr optim de stagii pipeline. Dacă numărul de stagii pipeline creúte peste această limită, se va reduce performanĠa globală. O soluĠie pentru a creúte viteza făUă a face compromisuri este arhitectura superscalară, prezentată anterior. În figura 2.25, este prezentat un exemplu de execuĠie pipeline (a), superpipeline (b) úi superscalară (c) a unei instrucĠiuni. Suprapunerea operaĠiilor CPU cu operaĠiile I/O Utilizarea unor controlere I/O separate permite efectuarea în paralel a operaĠiilor interne ale CPU cu operaĠii de transfer de date pe canalele I/O. Exemple de controlere I/O: controlere DMA (Direct Memory Access), care permit transferul direct de date: memorie – memorie sau memorie – canale I/O, bazat pe principiul cererii de magistrală (aceasta reprezintă una dintre tehnicile evoluate de transfer de date, vezi paragraful 3.4.4.2); procesoare specializate I/O, care lucrează pe canale I/O cu sarcini specifice.
c Fig. 2.25. Modul de operare al tehnicilor pipeline (a), superpipeline (b) úi superscalară (c).
Unitate ALU vectorială
Fig. 2.26. Arhitectură SIMD cu unitate ALU vectorială.
Este o soluĠie de paralelism pentru sistemele SIMD, prezentată în figura 2.26.
Tipuri de arhitecturi
41
Utilizarea unui sistem ierarhizat de memorie Memoria unui sistem de calcul trebuie să satisfacă mai multe cerinĠe, adesea contradictorii: capacitate mare, timp de acces mic, cost rezonabil úi dimensiuni reduse. Aceste cerinĠe nu pot fi îndeplinite simultan de un singur tip de memorie. Cu tehnologia actuală se pot realiza memorii de mare viteză, dar de capacitate mică (RAM static), memorii de capacitate mare, dar de viteză medie (variante de memorii DRAM) sau memorii de capacitate foarte mare, dar cu timp de acces ridicat (memorii externe pe suport magnetic sau optic). În sistemele de calcul performante, spaĠiul de memorare este ierarhizat pe mai multe nivele, cu scopul de a beneficia de avantajele oferite de diverse tipuri de memorii. Un sistem de calcul cu memorie organizată ierarhizat poate echilibra diferenĠele de viteză între componentele sistemului (CPU, memorie, discuri) . Într-o astfel de arhitectură, memoria este organizată pe patru niveluri: registrele CPU; memoria cache (MC); memoria principală sau operativă (MP); memoria virtuală (MV). Registrele CPU sunt direct adresabile de către ALU. Memoria cache (rapidă) este cea mai apropiată de CPU, ceea ce impune ca timpul de acces să fie mic, capacitatea fiind limitată. Aici sunt păstrate instrucĠiunile úi datele cu probabilitatea cea mai mare de a fi utilizate într-o proximitate de timp. Memoria cache reprezintă un tampon între memoria principalăúi CPU. Memoria principală sau operativă păstrează programele úi datele aferente în curs de execuĠie. Ea poate fi adresată în mod aleatoriu de un program utilizator. Are o capacitate medie-mare úi un timp de acces mediu. Este un tampon între memoria virtualăúi CPU. Memoria virtuală este un concept arhitectural prin care memoria operativă este extinsă peste spaĠiul de adresare al memoriei externe (hard disk, bandă magnetică). Prin tehnicile de implementare, numite segmentare úi paginare (vezi capitolul 6), se urmăresc două aspecte esenĠiale: creúterea resurselor de memorare disponibile pentru programele utilizator; protejarea zonelor de memorie alocate modulelor de program. Memoria virtuală este utilă în cazul sistemelor de operare multitasking úi multiuser (Windows, Unix). În general, tehnicile de implementare a MC úi a MV sunt transparente pentru programele utilizator. Aparent, programele de aplicaĠie lucrează numai cu memoria principală. Transferul de informaĠii între diferitele nivele de memorie se realizează în mod automat, fie de către componente hardware specializate (unitatea de gestiune a memoriei, MMU), fie de către sistemul de operare. Procesoarele recente oferă suport hardware pentru implementarea memoriei cache úi a memoriei virtuale. EficienĠa utilizării unei arhitecturi ierarhizate de memorie se bazează pe câteva principii legate de modul de utilizare a informaĠiilor conĠinute în memorie. Astfel, conform principiului localizării referinĠei, adresarea locaĠiilor de memorie se realizează într-o secvenĠă repetitivă. Există o probabilitate mare ca o
42
ARHITECTURA SISTEMELOR DE CALCUL
locaĠie adresată de curând să fie adresată úi într-un timp imediat – localizare temporară – úi, similar, este previzibil ca úi locaĠiile adiacente să fie accesate în curând – localizare spaĠială. Principiile localizării temporale úi spaĠiale sunt o consecinĠă a modului uzual de execuĠie a secvenĠelor de program. Exemple: un program conĠine bucle care presupun execuĠia repetitivă a aceleiaúi secvenĠe de instrucĠiuni; execuĠia instrucĠiunilor este, în majoritatea cazurilor, secvenĠială (succesiunea în execuĠie), excepĠie făcând instrucĠiunile de salt; secvenĠa de program (procedura) utilizează repetitiv aceeaúi variabilă sau adresează repetat elemente ale unei structuri de date (tablouri, înregistrări). Concluzie. Statistic s-a constatat că pentru majoritatea programelor este valabilă următoarea regulă: 90% din timpul afectat unui program este utilizat pentru execuĠia a numai 10% din codul acestuia. Pe baza acestor observaĠii, informaĠiile pot fi amplasate în mod dinamic pe diferite niveluri ierarhice ale memoriei, în funcĠie de probabilitatea de a fi utilizate. 2.2.2.2. SoluĠii software de prelucrare paralelă Prelucrarea pe loturi Prelucrarea pe loturi (batch processing) presupune formarea unui fiúier cu extensia .bat úi lansarea lui. Procesele au loc succesiv, iar CPU (care execută operaĠiile de calcul) nu este folosită în mod eficient.
Fig. 2.19. a. Prelucrarea pe loturi. b. Multiprogramarea.
Tipuri de arhitecturi
43
Exemplu. Fie trei procese paralele, P1, P2 úi P3, fiecare fiind văzut în timp ca o succesiune de trei etape: intrare (i), calcul (c), ieúire (o) (vezi figura 2.27.a). Multiprogramarea În acelaúi interval de timp pot exista mai multe programe (procese) active în sistemul de calcul, concurând pentru memorie, I/O úi CPU. Totuúi, unele programe sunt orientate către calcule (utilizând intens CPU), în timp ce altele sunt orientate Fătre citirea/scrierea dispozitivelor I/O. Se pot astfel organiza (intercala) cele două clase de programe pentru a obĠine un timp de prelucrare global cât mai bun. În figura 2.27.b, câútigul de timp este notat cu ǻ. Intercalarea programelor permite utilizarea mai eficientă a resurselor calculatorului prin suprapunerea operaĠiilor I/O cu operaĠiile CPU. Acest mod de organizare este gestionat de sistemul de operare (programul de supervizare). Astfel, multiprogramarea se poate defini ca intercalarea operaĠiilor CPU cu operaĠii I/O pentru mai multe programe. ObservaĠii. 1. P1, P2 úi P3 pot aparĠine aceluiaúi program sau unor programe diferite. 2. În cadrul multiprogramării, se poate întâmpla ca un proces cu prioritate mare să ocupe CPU un timp îndelungat úi în acest fel se împiedică execuĠia altor procese. Neajunsul se poate înlătura folosind un sistem de operare cu divizare în timp. Diviziunea în timp (time sharing) Diviziunea în timp reprezintă împăUĠirea timpului de execuĠie al CPU între toate procesele (task-urile) active din sistemul de calcul. Cuantele de timp alocate fiecărui proces pot fi inegale de la un proces la altul. Viteza de prelucrare poate creúte astfel mai mult decât în cazul multiprogramării (vezi cazul particular din figura 2.28).
Fig. 2.28. Repartizarea în timp a desfăúurării proceselor (time sharing).
44
ARHITECTURA SISTEMELOR DE CALCUL
Procesul de calcul se împarte în mai multe etape. În funcĠie de divizarea în intervale de timp, se poate face ca procesele să se termine aproximativ în acelaúi interval de timp (nu există un proces dominant). Diviziunea în timp constituie o atribuĠie a sistemului de operare (numit, în acest caz, sistem de operare cu diviziune în timp). Utilizarea diviziunii în timp a programelor (sau a proceselor) în sistemele uniprocesor creează conceptul de procesor virtual. Exemplu: sisteme de calcul cu un singur procesor úi mai multe terminale. Pentru subiectul uman, răspunsul unicului procesor este suficient de rapid astfel încât să se considere că fiecare terminal operează independent, ca úi cum ar poseda el însuúi procesor (utilizatorul are impresia că lucrează singur pe calculator). Conceptul de diviziune în timp poate fi extins în mod similar la sistemele multiprocesor. ObservaĠii. 1. În cazul multiprogramării, procesele îúi termină faza de calcul (în CPU), apărând suprapunere doar între operaĠii CPU úi operaĠii I/O. 2. În cazul diviziunii în timp, procesele nu îúi termină faza de calcul înainte de a se executa alt proces; procesele pot fi intercalate, astfel încât să se câútige timp de execuĠie în raport cu multiprogramarea (suprapuneri între operaĠii CPU úi operaĠii I/O, respectiv între diferite operaĠii I/O). NoĠiunea de multithreading Termenul de multithreading reprezintă un aspect important al proiectării software, care necesită atenĠie specială în construcĠia sistemelor mari úi, în deosebi, atunci când se pune problema eficienĠei (exprimate în termeni de viteză a sistemului) úi a performanĠei (exprimate în termeni de corectitudine în funcĠionare a sistemului). Folosind adecvat instrucĠiunile de multithreading, se pot realiza aplicaĠii optimizate. Fiecare aplicaĠie sau program care rulează pe sistemul de operare este un proces alcătuit din unul sau mai multe fire (thread-uri). Un thread este un set de instrucĠiuni sau o parte anume a aplicaĠiei, care se execută independent în cadrul programului sau sistemului. Thread-urile sunt entităĠi responsabile cu multitaskingul în cadrul unei singure aplicaĠii. De obicei, sistemul de operare (SO) se ocupă cu programarea úi executarea thread-urilor. Multithreading-ul presupune execuĠia în paralel a mai multor procese, pentru a îmbunăWăĠi eficienĠa sistemului. Thread-urile sunt implementate în situaĠiile în care trebuie îndeplinite mai multe sarcini simultan. Avantajele threading-ului sunt următoarele: sarcinile care cer mai mult timp de execuĠie pot fi rulate în background; interfaĠa aplicaĠiei poate fi realizată mai atrăJător úi mai simplu de utilizat (de ex.: după apăsarea unui buton se afiúează o bară de progres); viteza aplicaĠiei poate creúte; thread-urile pot fi folositoare în situaĠiile în care există decalaje între anumite evenimente, putându-se astfel elibera anumite resurse care nu sunt necesare la un moment dat.
Tipuri de arhitecturi
45
Modelele de threading suportate de sistemele win32 sunt: 1. Modelul thread-ului unic (Single Thread Model). Acest tip de thread presupune rularea unui singur thread la un moment dat. Restul thread-urilor trebuie Vă aútepte. Principalul dezavantaj al acestui tip de thread îl reprezintă timpii lungi de execuĠie pentru sarcini mici. Corespunde din punct de vedere conceptual prelucrării pe loturi (batch processing). 2. Modelul Apartment Thread (Single Thread Apartment Model – STA). În acest model, pot exista mai multe thread-uri care se execută în cadrul aplicaĠiei. În STA, fiecare thread este izolat într-un „apartament” separat în cadrul procesului. Fiecare proces poate avea mai multe apartamente, care pot partaja date între ele. În acest caz, aplicaĠia este răspunzătoare pentru stabilirea duratei fiecărui thread din cadrul fiecărui apartament. Toate cererile sunt ordonate folosind Windows Message Queue, astfel încât un singur apartament poate fi accesat la un moment dat. Avantajul acestui model fată de modelul thread-ului unic este că se pot procesa simultan mai multe cereri ale utilizatorului. Totuúi, nu este atinsă încă eficienĠa maximă, deoarece sarcinile se vor executa una după alta. Corespunde din punct de vedere conceptual multiprogramării. 3. Modelul Multithread Apartment (Free Thread Apartment Model – FTA). Modelul Multithread Apartment presupune existenĠa unui singur apartament. Nu este nevoie de ordonare, deoarece toate thread-urile aparĠin aceluiaúi apartament úi pot partaje resursele. Aceste aplicaĠii se execută mai rapid decât cele care implementează modelul unic sau STA, deoarece sistemul este mai puĠin solicitat úi poate fi optimizat să elimine timpii morĠi. Corespunde din punct de vedere conceptual diviziunii în timp (time sharing).Aceste tipuri de aplicaĠii sunt foarte complexe, deoarece trebuie să se asigure că thread-urile nu accesează simultan aceleaúi resurse (principiul pipeline). Este, astfel, absolut necesar să se furnizeze un sistem de blocare a resurselor. Acesta trebuie implementat cu atenĠie, deoarece poate conduce la blocarea totală a sistemului. Prin natura úi arhitectura sa, mediul de programare Microsoft .NET Framework este un mediu de tip multithreading. Evaluarea performanĠelor. Utilizând de n ori mai multe resurse în paralel, un algoritm nu va rula de n ori mai repede, datorită fenomenului de timp suplimentar (overhead), indus prin aplicarea paralelismului. Acest timp suplimentar apare din următoarele cauze: interacĠiunea între procese (transmiterea rezultatelor intermediare sau parĠiale) úi sincronizarea proceselor; inactivitatea temporară (idling), care înseamnă că există procese inactive pe anumite perioade de timp, datorită încărcării inegale úi a aúteptării sincronizării; calculele suplimentare, care nu apar în formularea serială a algoritmului. Parametrii de intrare care contribuie la calculul performanĠelor sunt: timpul de execuĠie secvenĠial sau serial, TS (timpul măsurat de la începutul úi până la sfârúitul execuĠiei algoritmului pe un calculator secvenĠial);
ARHITECTURA SISTEMELOR DE CALCUL
46
timpul de execuĠie paralel, TP (timpul măsurat de la începutul execuĠiei úi până la terminarea ultimului subtask paralel); numărul de procesoare, p. Cu ajutorul acestora, se pot calcula următorii parametri de ieúire: suprasarcina, TO (Total Parallel Overhead) = diferenĠa dintre timpul total de lucru însumat al tuturor procesoarelor úi timpul necesar celui mai rapid algoritm secvenĠial; accelerarea, S (Speedup) = raportul dintre timpul necesar rezolvării unei probleme pe un procesor úi timpul necesar rezolvării aceleiaúi probleme în paralel pe p procesoare identice; eficienĠa utilizării calculatorului paralel, E = S / p; costul, C = TP p, care reflectă timpul total de lucru însumat al procesoarelor.
2.3. Categorii de calculatoare Calculatoarele pot fi grupate în 5 categorii, în funcĠie de structură, dimensiuni, viteză, putere de calcul úi destinaĠie: microcalculatoare (ex.: computerele Apple úi toate modelele de PC); minicalculatoare (ex.: serverele IBM, SGI, Sun Microsystems etc.); superminicalculatoare (ex.: Norsk Data Nord, Interdata, DEC VAX etc.); mainframe-uri; supercalculatoare.
2.3.1. Mainframe-uri Un mainframe este un computer mare, folosit de instituĠii guvernamentale úi companii pentru procesarea datelor importante în statistică, recensăminte, cercetare úi dezvoltare, proiectare, prognoză, planificarea producĠiei, tranzacĠii financiare etc. Ca aspect exterior, primele mainframe-uri arătau ca niúte dulapuri uriaúe de metal. Cu trecerea anilor, tehnologiile de fabricaĠie s-au dezvoltat, mărimea fizică a mainframe-urilor a scăzut, iar viteza lor de calcul a crescut foarte mult. La nivelul anului 2008, prin mainframe se înĠelege un calculator compatibil cu modelele de tip IBM System/360 (1965). Actualmente, cel mai modern model de la IBM este System z10. Sunt considerate mainframe-uri calculatoarele actuale de tip: Nova (Fujitsu-Siemens), DPS (Groupe Bull), NonStop (Hewlett-Packard), ClearPath (Unisys) úi cele compatibile IBM System z9 (Hitachi, Platform Solutions). Un mainframe poate rula sau găzdui mai multe sisteme de operare simultan, funcĠionând ca mai multe maúini virtuale. Un mainframe poate înlocui astfel chiar úi câteva sute de servere de dimensiuni mici (de exemplu, în aplicaĠii web), reducând costurile de întreĠinere, dar menĠinând un nivel ridicat de siguranĠă.
Tipuri de arhitecturi
47
48
ARHITECTURA SISTEMELOR DE CALCUL
2.3.2. Supercalculatoare Un supercalculator este un calculator complex cu destinaĠie specială, compus din mai multe procesoare care accesează aceeaúi memorie centrală úi care funcĠionează concomitent úi coordonat, în cooperare strânsă, astfel încât supercalculatorul poate atinge o performanĠă totală de calcul foarte ridicată. Modul de operare al supercalculatoarelor este calculul paralel. Numărul de procesoare interconectate ale unui supercalculator depăúHúte la anumite modele chiar úi 100.000. Pentru a menĠine costul unui asemenea supercalculator la un nivel rezonabil, există arhitecturi care fac uz de procesoare mai ieftine úi mai lente, dar foarte numeroase, grupate în aúa-numite cluster-e. Printre primele firme care au produs supercalculatoare pentru piaĠă s-a numărat firma Cray (modelul Cray-1 din 1976 a atins viteza de calcul de 130 Mflops). În acest domeniu, există o listă (actualizată de două ori de an) a celor mai rapide 500 de supercalculatoare din lume (Top 500), care se bazează pe testul standardizat numit Linpack. Pe lângă supercalculatoarele comerciale, existăúi linia supercalculatoarelor militare. Exemplu: arhitectura supercalculatorului bazat pe IBM BlueGene/L. Modelele IBM BlueGene deĠin momentan (2008) primele două locuri în Top 500. Calculatorul se bazează pe un nou concept, care renunĠă la creúterea frecvenĠei de ceas în favoarea micúorării componentelor, creúterii densităĠii acestora úi reducerii consumului de putere. Reducerea frecvenĠei de ceas este compensată prin Părirea gradului de paralelism, folosind un număr mai ridicat de procesoare. Procesorul de bază este un PowerPC 440 la 700 MHz. Două astfel de procesoare sunt amplasate pe un cip împreună cu o memorie cache L3 de 4 MB partajatăúi 2 KB memorie cache L2 pentru fiecare procesor. Fiecare procesor are două porturi de încărcare úi unul de stocare către memoriile cache L2, funcĠionând cu 8 biĠi/ciclu. Aceasta este jumătate din banda necesară celor două unităĠi de virgulă mobilă (FPU). Procesoarele au o memorie cache L1 de 32 KB pentru instrucĠiuni úi date, în situaĠii favorabile atingând performanĠe de 2,8 Gflops/2. Se observă că memoria cache L1 este mai mare decât L2, un lucru neobiúnuit, care permite însă atingerea unor viteze de procesare mai mari. Arhitectura modelului IBM BlueGene/L este reprezentată în figura 2.29. Sistemul este alcătuit astfel: sunt introduse două cipuri pe o placă cu o memorie de 512 MB, úaisprezece asemenea plăci sunt plasate pe o altă placă nod, iar 32 de plăci nod sunt introduse într-un aúa-numit cabinet. Aúadar, un cabinet conĠine 1024 cipuri (2048 CPU). Pentru configuraĠia maximă, se folosesc 64 de cabinete cuplate, care formează un sistem cu 65.356 cipuri úi 130.712 CPU. În modul normal de operare, o unitate de procesare a unui cip este folosită pentru calcule, iar cealaltă, pentru sarcinile de comunicare. În acest fel, performanĠa de vârf teoretică a sistemului este de 183,5 Tflops. Dacă necesităĠile de comunicare sunt mici, se pot folosi ambele procesoare pentru calcule, dublând viteza de vârf, ajungând la 360 Tflops.
Fig. 2.29. Arhitectura IBM BlueGene/L.
Din punct de vedere al interconectării, BlueGene/L posedă mai multe reĠele: două reĠele pentru conectarea procesoarelor, o reĠea inel 3D úi o reĠea arbore. ReĠeaua inel este folosită pentru comunicaĠii generale, iar cea arbore pentru comunicaĠii colective: broadcast, operaĠii de reducere etc. Lărgimea de bandă a reĠelei arbore este de două ori mai mare decât a reĠelei inel, ajungând la 350 MB/s (faĠă de 175 MB/s). PerformanĠele sistemului ajung la 280,6 Tflops pentru testul Linpack. În urma testului, s-a efectuat rezolvarea unui sistem liniar de N = 1.769.471 ecuaĠii. EficienĠa rezultată a fost de 76%. Supercalculatoarele care au la bază modelul IBM BlueGene/L implementează arhitectura masiv paralelă. Aceasta constă într-un număr de procesoare (de obicei, foarte mare – de ordinul miilor) interconectate úi controlate de un singur computer central. Fiecare CPU are memoria sa úi spaĠiul de date propriu, care conĠine úi o copie a sistemului de operare. Toate blocurile CPU comunică între ele cu ajutorul unor interconectări de foarte mare viteză.
Tipuri de arhitecturi
49
2.4. Exemple de arhitecturi
50
ARHITECTURA SISTEMELOR DE CALCUL
IBM 370/168
2.4.1. Arhitecturi uniprocesor Se bazează pe cele trei componente majore: UCP, memoria, subsistemul I/O. VAX 11/780 (superminicalculator) Sistemul a fost produs de firma DEC. Schema de arhitectură generală este prezentată în figura 2.30. Aceasta conĠine: CPU – unitatea centrală de prelucrare, care include: o R0, ..., R15 = 16 registre generale a câte 32 biĠi fiecare; o PC = contorul de program (program counter); o ALU = unitatea aritmeticăúi logică; o ML = memoria locală; MD = memorie de diagnoză; CVM = coprocesor de virgulă mobilă; MP = memoria principală (maxim 232 cuvinte); C = consolă; F = floppy disk; SBI = interfaĠa cu magistrala sincronă (Synchronous Bus Interface); AU = adaptor unibus, cu (U) = magistrală unibus; AMB = adaptor masterbus, cu (M) = magistrală masterbus. CPU mai conĠine un registru de stare, care indică starea curentă a microprocesorului, a programului care se executăúi a memoriei cache.
Fig. 2.31. Schema arhitecturii generale pentru IBM 370/168.
Schema de principiu (vezi figura 2.31) conĠine: MP = memoria principală; LSU = local storage unit (unitate de memorie locală); CM = controller memory (legătură multiport CPU – memorie); SS I/O = subsisteme de intrare-ieúire (mai multe canale asincrone). IBM RS/6000 model 250 Arhitectura simplificată este prezentată în figura 2.32.
Fig. 2.32. Schema arhitecturii generale pentru IBM RS/6000-250.
Fig. 2.30. Schema arhitecturii generale pentru VAX 11/780.
Schema de principiu conĠine: PPC = PowerPC – Processor Optimized With Enhanced RISC Performance Chip; SIMM = Small In-line Memory Modules (module de memorie); CTRL = controler; MCA = magistrală de control úi adresă; Ethernet = controler de reĠea.
Tipuri de arhitecturi
51
52
ARHITECTURA SISTEMELOR DE CALCUL
2.4.2. Arhitecturi multiprocesor Arhitecturile multiprocesor sunt cel mai bun exemplu al tentativei de a paraleliza un sistem de calcul. Acestea sunt de două tipuri: cele care folosesc procesoare multiple, discrete, pe o placă de bază sau sisteme hardware speciale úi cele care folosesc mai multe nuclee în interiorul unui singur procesor fizic. 2.4.2.1. Arhitecturi cu procesoare multiple Arhitecturile cu procesoare multiple pot fi de două feluri: cu multiprocesare simetrică; cu multiprocesare asimetrică. Multiprocesarea simetrică utilizează mai multe procesoare fizice legate printr-o magistrală de memorie partajată úi suportul magnetic aferent (vezi paragrafele 2.1.1.4 úi 2.2.1.3, referitoare la sisteme cu memorie partajată – shared memoryúi calculatoare multiprocesor). În cazul sistemelor cu arhitecturi de multiprocesare asimetrică, fiecare procesor are alt task. Exemple: cipseturile 3D din plăcile grafice moderne úi cluster-ele de calculatoare personale (Beowulf), în care fiecare procesor are acces numai la memoria calculatorului din care face parte (vezi paragraful 2.1.1.5, referitor la sisteme făUă memorie partajată – shared nothing).
Fig. 2.33. Schema arhitecturii generale pentru IBM RS/6000-F50.
IBM RS/6000 model F50 Sistemul cuprinde între 1 úi 4 procesoare Power PC cu cache extern úi are o magistrală de 64 de biĠi. Memoria cache se numeúte 8-way (cu 8 căi) pentru că datele sunt grupate în seturi de câte 8 64 biĠi. Memoria foloseúte date de 72 biĠi: 64 pentru date úi 8 pentru codul corector de erori (ECC = Erorr Correction Code). Procesorul are o arhitectură de tip superscalar úi poate executa până la 4 instrucĠiuni pe ciclu. Caracteristici (vezi figura 2.33): frecvenĠa de tact: 166–332 MHz, 87 MHz pentru magistrala de memorie; 32 KB cache de date, 32 KB cache de instrucĠiuni; magistrală de date de 64 de biĠi úi magistrală de adrese de 32 de biĠi; memorie de până la 4 GB úi memorie virtuală de până la 4 PB (1P = 252). Arhitectura Intel multiprocesor Arhitectura multiprocesor propusă de firma Intel este reprezentată prin schema din figura 2.34. NotaĠiile din schemă au următoarele semnificaĠii: BSP = Bootstrap Processor, AP = Application Processor, APIC = Advanced Programmable Integrated Circuit, ICC Bus = Interrupt Controller Communications Bus. 2.4.2.2. Arhitecturi biprocesor Un sistem care suportă două procesoare trebuie să aibă o placă de bază adaptată pentru a servi două CPU. În acest scop, placa de bază este dotată cu o magistrală specială, a cărei construcĠii depinde de la producător la producător, dar care se conformează unor reguli generale.
Fig. 2.34. Schema arhitecturii Intel multiprocesor.
Astfel, cele două CPU sunt servite de două interfeĠe paralele cu magistrala principală a sistemului, iar arbitrarea traficului pe aceasta este efectuată de un controler specializat. Accesul la magistrală este multiplexat, astfel că la un anumit moment de timp úi pentru o durată bine stabilită (fixă sau adaptată sarcinii curente) accesul la magistrală îl are doar un singur procesor. Aceste tipuri de scheme pot cuprinde zone de memorie cache comune (integral sau parĠial), iar magistrala poate fi cu lăĠime variabilă sau cu adaptare dinamică la cereri.
Tipuri de arhitecturi
53
Pentium II biprocesor
54
ARHITECTURA SISTEMELOR DE CALCUL
Creúterea performanĠelor este realizată prin utilizarea magistralei punct-lapunct (Point-to-Point) úi a modului snoop. Modul snoop permite citirea datelor de Fătre un procesor din celălalt procesor (prin intermediul Northbridge-ului), nemaifiind necesară accesarea memoriei. Acest mod elimină tehnica prin care datele necesare unuia din cele două procesoare erau înscrise în memorie de către primul procesor úi apoi citite de către al doilea. AMD K7 biprocesor Microprocesorul AMD K7 lucrează pe magistrala ultrarapidă EV6 la frecvenĠa de 200 MHz. Astfel, K7 poate folosi memorii foarte rapide úi cu lărgime de bandă mare, cum este Rambus DRAM. Datorită suportului multiprocesor al protocolului de magistrală EV6, sistemele AMD pot fi folosite în domeniul staĠiilor de lucru úi al serverelor. Arhitectura EV6 permite o flexibilitate ridicată, cu facilităĠi de tipul topologiei punct-la-punct úi clock-forwarding. Magistralele de date úi de adrese sunt decuplate, procesorul putând să emită cereri în timp ce primeúte date úi comenzi de la logica de sistem. Tot aici sunt gestionate transferurile cu sistemul, către memorie sau către magistralele AGP úi PCI. Schema bloc a acestei arhitecturi este prezentată în figura 2.36.
Fig. 2.34. Arhitectura unui sistem biprocesor cu Pentium II.
AMD Athlon biprocesor Este un exemplu de arhitectură biprocesor construit pe baza cipsetului 760 al firmei AMD (vezi figura 2.35).
Fig. 2.36. Arhitectura unui sistem biprocesor cu AMD K7 pe magistrala EV6.
Fig. 2.35. Arhitectura unui sistem biprocesor cu AMD Athlon.
Sun SPARC IV biprocesor Arhitectura biprocesor Sun SPARC IV este prezentată în figura 2.37. NotaĠiile din schemă au următoarele semnificaĠii: ECC = Error Checking/Correction Code (cod de verificare/corecĠie de erori), DCSS = Dual Chip Data Switch (bloc de alegere a cipului), SIU = System Interface Unit (unitatea de interfaĠă cu sistemul), MCU = Memory Control Unit (unitate de comandă a memoriei).
Tipuri de arhitecturi
55
56
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 2.38. Arhitectura sistemului Xeon biprocesor.
Fig. 2.37. Arhitectura Sun SPARC IV biprocesor.
Se observă că cele două procesoare au atât memorie cache comună, cât úi individuală. Accesul la memoria comună se realizează prin intermediul unui multiplexor, care nu permite lucrul simultan celor două CPU cu aceasta, pentru a preveni blocajele úi erorile ce pot apărea în urma unor accesări simultane. Schema este capabilă să ruleze două fire de execuĠie (thread-uri) cu latenĠe foarte mici de scriere a cache-ului. De asemenea, accesul la magistrala principală este multiplexat, pentru a preveni congestiile úi erorile de transmisie. Strategia de gestiune a memoriei cache este de tipul LRU (Least Recently Used – cel mai puĠin recent utilizat), ceea ce duce la mai multe úanse de a găsi în cache informaĠia necesară la următoarea procesare (cache hit). Memoria acestui sistem este de tipul SDRAM. Există scheme care aduc îmbunăWăĠiri suplimentare legate de administrarea eficientă a magistralei (prin repartizarea dinamică a duratelor de acces bazată pe predicĠii úi pe comportări anterioare ale proceselor care se repetă la fiecare CPU etc.). Intel Xeon biprocesor Sistemul este echipat cu două procesoare Intel Xeon instalate pe o placă de bază de tipul Supermicro P4DC6+. Această placă de bază este dotată cu cipsetul i860, constituit din trei componente principale: Intel 82806AA PCI 64 Hub (Intel P64H din figura 2.38), Intel 82860 Memory Controller Hub (MCH din figura 2.38) úi Intel 82801BA I/O Controller Hub (ICH2 din figura 2.38). Aceste blocuri asigură un transfer foarte rapid de date atât între procesoare, cât úi între acestea úi memorie sau dispozitive periferice.
Pentru aceasta, arhitectura pune la dispoziĠie componentelor sistemului (controlerul SCSI, sloturile PCI pe 32 sau 64 de biĠi) magistrale distincte, care asigură separarea fluxurilor de date. Acest lucru este vital într-un server în care schimbul de date dintre componente este realizat în flux continuu. Tot pentru o sporire a vitezei de lucru, s-a recurs la utilizarea memoriei de tip RDRAM. AMD Opteron biprocesor Sistemul cu două procesoare AMD Opteron 250 la 2,4 GHz foloseúte o placă de bază dotată cu cipsetul NVIDIA nForce Professional 2200. Noutatea acestei configuraĠii este că procesoarele nu împart aceeaúi magistrală pentru a accesa memoria, ca la sistemele tradiĠionale. În acel caz, magistrala reprezenta „gâtul sticlei” (bottleneck) sistemului, fiind un obstacol în calea procesării la potenĠialul maxim al CPU-urilor. Pentru a evita această limitare, AMD a recurs la o arhitectură cu memorie cache neuniformă, de tip ccNUMA (vezi figura 2.39). Fiecare procesor dispune de un controler de memorie, care poate accesa o porĠiune de memorie rezervată doar lui. Sunt evitate astfel suprapunerile de date úi alterarea reciprocă a datelor provenite de la procesoare diferite. În plus, cele două CPU sunt interconectate printr-o magistrală de mare viteză, de tipul HyperTransport (tehnologie patentată de AMD), care nu are legătură directă cu memoria (spre deosebire de un sistem clasic) úi care asigură un dialog eficient între componente. Cele două procesoare pot accesa memoriile proprii cu latenĠe foarte mici (mult mai mici decât la sisteme tradiĠionale), precum úi memoria care nu le aparĠine direct, dar cu latenĠe mari. Aceasta nu constituie un dezavantaj, deoarece un CPU lucrează în mod normal doar în zona de memorie care îi este repartizată. Totuúi această tehnologie are úi un punct slab: organizarea corectă a memoriei este crucială. Astfel, arhitectura NUMA trebuie suportată atât de sistemul de operare, cât úi de aplicaĠii.
Tipuri de arhitecturi
57
Fig. 2.39. Arhitectura sistemului AMD Opteron biprocesor.
Sistemele de operare Windows XP úi Windows server 2003 suportă în întregime această tehnologie, opĠiunea activându-se automat la detectarea unui sistem de acest tip. Calculatoarele biprocesor se pretează pentru diverse aplicaĠii complexe, care necesită putere de calcul. Aici intră aplicaĠiile grafice de modelare 3D, aplicaĠiile de reĠea (mai ales dacă sistemul este unul de tip nod coordonator de trafic sau server pentru subreĠele de diverse dimensiuni) úi aplicaĠiile specifice de prelucrare a semnalelor în timp real. Tot ce au acestea în comun este faptul că sunt create astfel încât să lucreze cu mai multe fire de execuĠie simultan, conform principiilor de calcul paralel. Aceste tipuri de algoritmi sunt create pentru a minimiza timpul de execuĠie foarte mare pe care îl implică acele aplicaĠii în situaĠii normale. În ultima vreme, câútigă popularitate un nou tip de aplicaĠii care pot folosi arhitectura biprcocesor, anume sistemele embedded. În esenĠă, este vorba despre conectarea în paralel, pe aceeaúi placă, a două (sau mai multe) procesoare specializate, cu un scop bine definit, spre deosebire de calculatoarele personale, care au scopuri multiple. De exemplu: prelucrarea unui semnal audio (codare úi decodare) úi, eventual, transmiterea lui mai departe. Din această clasă fac parte procesoarele DSP de la firma Texas Instruments. Premisa acestor aplicaĠii este că procesorul este adaptat să realizeze un număr restrâns de operaĠii cu scopuri bine determinate. În plus, DSP-ul este capabil să ruleze aplicaĠii de sine stăWătoare, care Vă ofere interfaĠă cu utilizatorul úi suport pentru memorare úi transmitere către alte componente conectate la acesta. De exemplu: un subsistem care, conectat la un PC, Vă codeze/decodeze fiúiere audio în format mp3.
58
ARHITECTURA SISTEMELOR DE CALCUL
2.4.2.3. Arhitecturi multinucleu Un procesor multinucleu combină două sau mai multe nuclee într-un singur cip fizic, care conĠine fie un circuit integrat cu toate nucleele, fie mai multe circuite integrate interconectate. Un procesor cu mai multe nuclee implementează o arhitectură de multiprocesare într-un singur pachet fizic. Un procesor cu toate nucleele pe acelaúi circuit integrat se numeúte procesor multinucleu monolitic. Nucleele pot partaja un singur cache de nivel înalt (de ex.: cache-ul L2 pentru procesoarele Core 2 de la Intel) sau pot avea câte un cache separat pentru fiecare nucleu (de ex.: linia de procesoare dual-core de la AMD). Fiecare nucleu implementează separat optimizări hardware, cum sunt: sisteme pipeline, execuĠie superscalară, extensii SSE, multithreading etc. Un sistem cu n nuclee este eficient atunci când pe acesta se rulează n procese (sau fire de execuĠie) concurente úi independente. Cele mai cunoscute procesoare multinucleu sunt cele de pe piaĠa calculatoarelor personale (Intel úi AMD), precum úi cele folosite în consolele de jocuri pe televizor (de ex.: procesorul Cell folosit la PlayStation 3 are 8 nuclee, iar Xenon folosit la Xbox360 are 3 nuclee). Avantajele sistemelor cu procesoare multinucleu sunt: Nucleele sunt apropiate fizic, ceea ce înseamnă că semnalele trebuie să parcurgă o distanĠă mai mică. Acestea permit procesoarelor să interacĠioneze cu o frecvenĠă mai mare decât dacă ele ar fi fost separate (două procesoare pe o placa de bază). Procesoarele multinucleu oferă designerilor posibilitatea de a face plăcile de bază mai mici decât pentru două sau mai multe procesoare. Un procesor cu două nuclee consumă mai puĠin decât două procesoare cu câte un singur nucleu, deoarece acestea necesită mai multă putere să transmită aceleaúi semnale în afara cipului, PreĠul produsului este mai redus, pachetul fizic fiind de un singur procesor în loc de mai multe. Dezavantajele sistemelor cu procesoare multinucleu sunt: Deúi, teoretic, două procesoare pot dubla viteza de calcul, software-ul trebuie optimizat pentru a beneficia de acest lucru, în funcĠie de posibilitatea aplicaĠiilor úi a sistemului de operare de a crea fire de execuĠie (thread-uri) paralele úi independente. Integrarea a încă unui nucleu în acelaúi circuit integrat pune probleme deosebite din punct de vedere termic, deoarece, practic, acelaúi pachet fizic trebuie să disipeze de două ori mai multă putere. Intel a rezolvat această problemă prin integrarea a două nuclee dual-core úi a unui cache unificat în locul unui nucleu quad-core cu memorii cache separate. Astfel, se forĠează lucrul numai al unuia dintre cele două nuclee, în loc de toate patru deodată, micúorând puterea instantanee disipată de întregul procesor. Din punct de vedere al arhitecturii, procesoarele cu un singur nucleu folosesc mai eficient resursele de tranzistori de pe cip. Astfel, o companie care produce procesoare trebuie tot timpul să aibă o linie de procesoare cu un singur nucleu în paralel cu cele multinucleu.
Tipuri de arhitecturi
59
60
ARHITECTURA SISTEMELOR DE CALCUL
Există mai mulĠi factori care limitează performanĠa reală a unui sistem multinucleu. În primul rând, magistralele de sistem úi de memorie sunt partajate, astfel încât devin „gâtuiri” (bottlenecks) care limitează fluxul de date către nucleele multiple ale procesoarelor, în acelaúi mod în care o úosea cu prea puĠine benzi de circulaĠie produce uneori blocaje.
Intel Core 2 Procesoarele Intel Core 2 Duo sunt produse folosind tehnologia de fabricare Intel pe 65 nm. Versiunea pentru desktop-uri a procesoarelor furnizează o creútere de 40% a performanĠei úi este cu peste 40% mai eficientă din punct de vedere al consumului de energie, în comparaĠie cu cel mai bun procesor Intel anterior. Potrivit analiútilor independenĠi, procesoarele câútigă 9 din cele 10 teste majore de performanĠă pentru desktop-uri, servere úi calculatoare destinate jocurilor. Familia de procesoare Intel Core 2 Duo este formată din 5 procesoare pentru platforme desktop destinate afacerilor, utilizării individuale úi entuziaútilor pentru tehnologie, precum úi din 5 procesoare pentru notebook-uri. Familia de procesoare Intel Core 2 Duo este bazată pe micro-arhitectura Intel Core. Prin intermediul celor două nuclee de execuĠie, procesoarele pot executa cu viteză un număr mai mare de instrucĠiuni. De asemenea, procesoarele pot opera mai rapid la lansarea simultană în execuĠie a mai multor aplicaĠii, de exemplu, scrierea unui e-mail în acelaúi timp cu descărcarea de muzicăúi scanarea antivirus. Procesoarele Dual-core contribuie la îmbunăWăĠirea execuĠiei programelor, de exemplu, în cazul vizionării unor clipuri high-definition sau al protejării PC-ului în timpul tranzacĠiilor financiare pe Internet, crescând, de asemenea, autonomia bateriei în cazul notebook-urilor, care pot deveni astfel mai subĠiri úi mai uúoare. InovaĠiile aduse de Intel prin introducerea arhitecturii Intel Core 2 (Duo úi Exteme) sunt următoarele: Intel Wide Dynamic Execution – îmbunăWăĠHúte performanĠa úi eficienĠa, întrucât fiecare nucleu de execuĠie poate realiza până la 4 instrucĠiuni simultan, folosind un pipeline eficient în 14 stagii. Intel Smart Memory Access – îmbunăWăĠHúte performanĠa sistemului, diminuând latenĠa cipurilor de memorie úi optimizând astfel utilizarea lărgimii de bandă disponibile pentru furnizarea datelor către procesor când úi unde este nevoie. Intel Advanced Smart Cache – include o memorie cache L2 comună, proiectată pentru a reduce consumul de energie prin micúorarea traficului de memorie, úi măreúte performanĠa, permiĠând unui nucleu de execuĠie să utilizeze întreg cahe-ul atunci când celălalt nucleu nu este folosit. Această funcĠie este asigurată pentru toate segmentele de piaĠă: server, desktop úi notebook. Intel Advanced Digital Media Boost – dublează efectiv viteza de execuĠie a instrucĠiunilor folosite cu precădere în aplicaĠiile grafice úi multimedia. Intel 64 Technology – această îmbunăWăĠire adusă arhitecturii Intel pe 32 de biĠi oferă suport pentru procesarea pe 64 de biĠi úi permite procesorului să acceseze o cantitate mai mare de memorie. Nucleul de execuĠie al procesorului Intel Core este reprezentat în figura 2.40. Caracteristicile funcĠionale ale acestei arhitecturi sunt expuse în cele ce urmează.
Fig. 2.40. Nucleul de execuĠie al procesorului Intel Core.
UnităĠile de execuĠie cu numere întregi Intel Core are trei asemenea unităĠi pe 64 biĠi, fiecare dintre ele putând realiza operaĠii pe 64 biĠi într-un singur ciclu. Există úi o unitate pe 64 biĠi de numere complexe (CIU – Complex Integer Unit), care realizează în mare parte aceeaúi muncă precum cea din P6, úi două unităĠi simple de numere întregi (SIU – Simple Integer Unit), pentru operaĠiile uzuale, cum ar fi adunarea. Una din unităĠile SIU împarte portul 2 cu BEU (Branch Execution Unit), pe care Intel o numeúte unitatea de salt în execuĠie). Pe acest port, SIU este capabil să lucreze în tandem cu BEU pentru a executa instrucĠiuni macro (comparaĠii sau teste +jcc). Posibilitatea de a realiza calcule pe 64 biĠi într-un singur ciclu este o premieră în arhitectura Intel 86 úi aceasta îl pune înaintea IBM, cu al său Power PC970, care are o latenĠă de două cicluri pentru operaĠii cu numere întregi. În plus, datorită unităĠilor ALU pe 64 biĠi care sunt pe porturi separate, Intel Core poate menĠine un total de trei operaĠii pe 64 biĠi per ciclu. UnităĠile de execuĠie în virgulă mobilă Intel Core are două unităĠi de execuĠie în virgulă mobilă, care se ocupă de ambele tipuri de operaĠii aritmetice: scalare úi vectoriale. Unitatea de execuĠie de pe portul 1 se ocupă cu adunări sau cu alte operaĠii simple în virgulă mobilă, după cum urmează: scalar: simplă precizie (32 biĠi) úi dublă precizie (64 biĠi); vector: simplă precizie (4) úi dublă precizie (2).
Tipuri de arhitecturi
61
Unitatea de execuĠie în virgulă mobilă de pe portul 2 se ocupă cu înmulĠiri úi împăUĠiri cu vectori úi scalari în formatele listate mai sus. Procesarea vectorială reală pe 128 biĠi Arhitectura Intel Core asigură latenĠa de un ciclu pentru operaĠiile vectoriale pe 128 biĠi. Intel realizează acest lucru făcând magistrala pentru virgulă mobilăúi cea internă de date cu lăĠimea de 128 biĠi, facilitate care înseamnă că este necesară doar o singură micro-operaĠie (care trebuie generată, trimisă, programată úi realizată) pentru fiecare operaĠie vectorială pe 128 biĠi. De aceea, noul design nu numai că elimină dezavantajul generat de latenĠă, dar în acelaúi timp îmbunăWăĠHúte decodarea úi programarea lărgimii de bandă, pentru că jumătate din micro-operaĠii sunt generate pentru instrucĠiuni vectoriale de 128 biĠi (vezi figura 2.41).
62
ARHITECTURA SISTEMELOR DE CALCUL
Deoarece lăĠimea execuĠiei a fost mărită considerabil, vechiul hardware de decodare al lui P6 ar fi fost inadecvat pentru a Ġine restul procesorului ocupat cu micro-operaĠii. Intel a trebuit să mărească rata de decodare, în aúa fel încât mai multe micro-operaĠii/ciclu să ajungă la final. Primul lucru pe care l-a făcut a fost să adauge încă un decodor simplu úi rapid, ceea ce înseamnă că decodorul hardware poate trimite până la 7 instrucĠiuni pe ciclu în coada de aúteptare ROB (vezi figura 2.42).
Fig. 2.42. Structura hardware pentru decodarea instrucĠiunilor din arhitectura Intel Core.
AMD Opteron Dual-core În figura 2.43 este reprezentată arhitectura simplificată a procesorului Opteron Dual-core. Fig. 2.41. ConfiguraĠia de procesare vectorială reală pe 128 biĠi.
Pipeline-ul Intel Core are un pipeline realizat în 14 stagii, la fel de lung ca la Power PC 970, aproximativ jumătate din cel de la Pentium 4 Prescott (~ 30 etape) úi puĠin mai lung decât cel de la P6 (12 etape). Aceasta înseamnă că Intel Core este proiectat pentru o creútere lentă a vitezei de ceas úi nu scalează la fel de rapid ca Pentium 4. Fereastra de instrucĠiuni Deoarece partea din spate este mult mai lată decât a predecesorilor, buffer-ul de reorganizare (Reorder Buffer, ROB) a crescut la 96 de intrări, de la 40 cât avea Pentium M, iar staĠia de rezervare (Reservation Station, RS) a fost mărită. Fereastra de instrucĠiuni din Intel Core a fost mărită nu numai fizic (ROB + RS), ci úi virtual. Macro-fuziunea úi micro-operaĠiile (descrise anterior), permit lui Intel Core să reĠină mai multe instrucĠiuni cu un număr mai mic de resurse hardware.
Fig. 2.43. Arhitectura AMD Opteron Dual-core.
Tipuri de arhitecturi
63
Tehnologic vorbind, AMD nu a realizat doar o simplă alipire a unei perechi de nuclee K8 pe o bucată de siliciu, ci a efectuat o integrare la nivelul de bază, astfel încât cele două nuclee să poată acĠiona împreună mai eficient. Fiecare dintre nucleele K8 are propriul său cache L2, independent, încorporat, dar cele două nuclee împart o coadă comună a cererilor de sistem, un controler de memorie DDR de tip dual-channelúi un set de legături HyperTransport cu mediul exterior. Accesul la resursele I/O este adjudecat printr-o reĠea crossbar sau printr-un switch, astfel încât fiecare CPU poate comunica direct úi eficient cu memoria sau cu dispozitivele I/O. În unele privinĠe, Opteron Dual-core se comportă foarte asemăQător unui sistem cu multiprocesare simetrică on-chip, transferând date intern între cele două nuclee. Cu toate acestea, pentru restul infrastructurii I/O a sistemului, Opteron Dual-core pare asemenea versiunii mononucleu. Arhitectura de sistem pentru Opteron este foarte diferită de cea a competitorului său principal, Intel Xeon. Arhitectura AMD Direct Connect a fost supra-dimensionată pentru procesorul Opteron mononucleu, anticipând viitorul dual-core. Fiecare procesor (mono- sau binucleu) are propriul său controler de memorie DDR local de tip dual-channel, iar procesoarele comunică între ele úi cu cipurile I/O prin legături HyperTransport punct-la-punct, la frecvenĠa de 1 GHz. /ărgimea totală de bandă posibilă prin cei 940 de pini ai procesorului Opteron 875 este de 30,4 GB/s. Cu o legătură HyperTransport mai puĠin, procesorul Opteron 275 poate atinge, teoretic, viteza de 22,4 GB/s. Prin contrast, procesoarele Xeon actuale au o magistrală front-side (FSB) partajată, pe care lucrează cipul Northbridge (cu controler de memorie) úi ambele procesoare. La frecvenĠa de 800 MHz, lărgimea totală de bandă este de 6,4 GB/s, ceea ce poate fi un bottleneck în anumite situaĠii. AMD Phenom Triple-core AMD are în producĠie un procesor cu trei motoare de procesare, proiectul numindu-se AMD Phenom 3 chip (vezi figura 2.44).
Fig. 2.44. Arhitectura AMD Phenom Triple-core.
64
ARHITECTURA SISTEMELOR DE CALCUL
Noul microprocesor triple-core prezintă propriul design úi nu este un cip quad-core cu un core dezactivat. Totuúi, cipurile includ 2 MB de cache L3 partajat úi beneficiază de caracteristicile micro-arhitecturii K10, cum sunt setul de instrucĠiuni SSE4A úi unităĠile de prelucrare în virgulă mobilă (FPU) de 128 biĠi. Evident, cipurile dispun de posibilităĠi avansate de gestiune a puterii. Potrivit unor estimări ale laboratoarelor X-bit, fiecare motor al procesoarelor quad-core AMD Opteron/Phenom ocupă aproximativ 13% din aria fizică a capsulei. Date fiind întreaga dimensiune de 285 mm² úi numărul de aproximativ 218 cipuri candidate obĠinute din fiecare bucată de 300 mm, este neobiúnuit faptul Fă AMD a decis dezvoltarea unui design triple-core cu aria fizică de 247 mm² úi 250 de cipuri candidate obĠinute de pe o bucată de 300 mm. Tehnic, AMD poate realiza uúor microprocesoare cu un număr impar de motoare de procesare datorită arhitecturii sale Direct Connect. Cu versiunile sale Phenom úi Athlon 64 2, AMD are de combătut procesoarele Intel Core 2 (dual-core úi quad-core). Intel úi AMD Quad-core Ca replică la lansarea CPU-urilor quad-core de la Intel, AMD a lansat propria platformă, Quad FX. Această platformă este un sistem de multiprocesare simetrică, utilizând două CPU-uri Athlon 64 FX dual-core. De aceea, un calculator personal Quad FX are două procesoare fizice dual-core care lucrează în paralel, având în total, în sistem, patru nuclee CPU. Aceste două CPU-uri sunt interconectate printr-o magistrală coerentă dedicată tehnologiei HyperTransport. În CPU-urile quad-core de la Intel, nucleele sunt organizate în perechi. Nucleele fiecărei perechi pot interschimba informaĠii direct (la fel se întâmplă la AMD dual-core úi la Intel Core 2 Duo), dar pentru a schimba informaĠii cu unul dintre nucleele localizate în cealaltă pereche trebuie să acceseze magistrala externă a CPU, ceea ce se întâmplă pe platforma Quad FX, unde CPU-urile comunică între ele folosind magistrala externă coerentă HyperTransport. DiferenĠa dintre platforma Quad FX úi arhitectura utilizată de către procesoarele Intel quad-core se poate remarca în figurile 2.45 úi 2.46. Comparând cele două arhitecturi, se poate observa că platforma Quad FX deĠine un avantaj în ceea ce priveúte accesul la memorie. Magistrala externă a CPU-ului Intel quad-core (Front Side Bus, FSB) este utilizată pentru a accesa memoria RAM úi alte dispozitive prezente pe PC, precum úi pentru comunicarea între perechile de nuclee, cu viteze de până la 8 GB/s. Pe platforma Quad FX, CPU-urile folosesc un canal de comunicaĠie dedicat (magistrala coerentă HyperTransport), care transferă date cu până la 4 GB/s în fiecare direcĠie. Magistrala HyperTransport oferă două canale de comunicaĠie, câte unul pentru fiecare direcĠie. În procesoarele AMD, controlerul de memorie este încorporat în CPU úi, ca urmare, memoria este accesată utilizând o magistrală dedicată, separat de canalul folosit de către CPU pentru a accesa restul PC-ului. Datorită faptului că platforma Quad FX foloseúte o arhitectură de multiprocesare simetrică, fiecare CPU îúi accesează propria memorie RAM. Procesoarele utilizate pe platforma Quad FX pot accesa, de asemenea, memoria controlată de un alt CPU.
Tipuri de arhitecturi
65
3. STRUCTURA UNUI CALCULATOR
3.1. Unitatea centrală (procesorul)
Fig. 2.45. Arhitectura Intel quad-core
Unitatea centrală (UC) este creierul calculatorului. Rolul UC este de execuĠie a programelor stocate în memoria principală, execuĠie realizată în trei etape: extragerea instrucĠiunilor; decodificarea instrucĠiunilor; execuĠia lor propriu-zisă.
Fig. 3.1. Schema bloc a unui calculator.
Fig. 2.46. Arhitectura AMD Quad FX.
În ultima vreme, câútigă popularitate sistemele de tip embedded. Este vorba despre conectarea în paralel a mai multor procesoare specializate, pe aceeaúi placă, cu un scop bine definit. De exemplu, prelucrarea unui semnal audio (codare úi decodare) în format mp3. Procesorul este adaptat să realizeze un număr restrâns de operaĠii specifice, iar DSP-urile sunt capabile să ruleze aplicaĠii de sine stăWătoare, care să ofere interfaĠă cu utilizatorul, suport pentru memorare úi transmitere.
Unitatea de comandăúi control urmăreúte ordinea de execuĠie a instrucĠiunilor unui program úi controlează întreaga activitate a unităĠii centrale, astfel: interpretează instrucĠiunile programului din memoria internăúi comandă circuitele să execute instrucĠiunile; comandă úi controlează transferul de date dintre memoria internă úi dispozitivele periferice. Unitatea aritmetică úi logică (ALU) implementează funcĠiile logice, úi execută operaĠiile aritmetice elementare: adunare, scădere, înmulĠire, împăUĠire. Registrele interne pot fi: de uz general; cu destinaĠie specifică.
Structura unui calculator
67
Registrele de uz general stochează valorile intermediare ale calculelor. Registrele cu destinaĠie specifică – contorul de program (program counter, PC) indică adresa noii instrucĠiuni care urmează a fi executată precum úi adresa instrucĠiunii curente care se execută.
3.1.1. ExecuĠia unei instrucĠiuni Timpul necesar execuĠiei unei instrucĠiuni se numeúte ciclu instrucĠiune. Etapele în execuĠia unei instrucĠiuni sunt: 1. încărcarea instrucĠiunii din memorie în registrul de instrucĠiuni (fetch); 2. actualizarea PC pentru a indica următoarea instrucĠiune care va fi executată; 3. decodificarea instrucĠiunii din registrul de instrucĠiuni; 4. localizarea în memorie a eventualelor date utilizate de instrucĠiune; 5. încărcarea datelor (dacă este necesar) în registrele interne ale UC; 6. execuĠia efectivă a instrucĠiunii; 7. stocarea rezultatelor la destinaĠia corespunzătoare; 8. întoarcerea la etapa nr. 1 pentru a executa următoarea instrucĠiune.
3.1.2. Tipuri de unităĠi centrale Criteriul după care se clasifică unităĠile centrale este cel al setului de instrucĠiuni: procesoare CISC (Complex Instruction Set Computer); procesoare RISC (Reduced Instruction Set Computer). În ultimul timp, s-a produs migrarea de la CISC la RISC. 3.1.2.1. PerformanĠa unităĠii centrale PerformanĠa UC se referă întotdeauna la o aplicaĠie dată, existând mai multe moduri de evaluare a performanĠei: mips (mega instructions per second): milioane de instrucĠiuni pe secundă; flops (floating point operations per second): operaĠii în virgulă mobilă executate pe secundă (exprimat uzual în Mflops sau Gflops); timpul în care un anumit procesor poate să rezolve o anumită secvenĠă de program (o sarcină particulară). PerformanĠa este produsul a trei factori: numărul de instrucĠiuni executate în cazul unei aplicaĠii date (Ni); numărul mediu de perioade de ceas necesare pentru execuĠia unei instrucĠiuni (Np); durata unei perioade de ceas (Tc). Valoarea Np se exprimă în cicluri de ceas/instrucĠiune, iar Tc se exprimă în timp/ciclu de ceas.
ARHITECTURA SISTEMELOR DE CALCUL
68 Rezultă că:
P(t) = Ni Np Tc (sec).
(3.1)
Reducerea numărului de instrucĠiuni Ni se face optimizând compilatorul úi utilizând o arhitectură adecvată acestui compilator. Np se reduce fie optimizând compilatorul, aceasta însemnând utilizarea unor instrucĠiuni de durată mai scurtă, fie utilizând o arhitectură paralelă, deci utilizarea mai multor instrucĠiuni simultan. La optimizarea Np, apar limitări tehnologice legate de implementarea procesorului. Durata TcĠine exclusiv de o tehnologie avansată. 3.1.2.2. Indici de performanĠă Până în 1992, se utiliza următoarea pereche de mărimi: Whetstones úi Dhrystones, care arătau practic viteza UC. Începând din 1992, s-a trecut la alĠi indici de măsurare a performanĠei, úi anume indicii SPEC, cu care s-a înlocuit perechea anterioară. Standard Performance Evaluation Corporation (SPEC) este o organizaĠie non-profit care a luat naútere în 1988 úi are ca scop asigurarea testelor corecte úi utile pentru a face diferenĠă între sistemele de pe piaĠă. Testele SPEC sunt larg folosite actualmente în evaluarea performanĠei calculatoarelor, rezultatele fiind afiúate pe site-ul SPEC. Acestea poartă denumirea de note SPEC (SPECmarks). Testele sunt concepute pentru a realiza situaĠii din viaĠa reală. De exemplu, SPECweb2005, realizează un test al performanĠei serverului de web prin mai multe tipuri de cereri paralele HTTP. PerformanĠa microprocesorului este testată prin rularea câtorva programe (de exemplu, compilatoare gcc) sau printr-un joc de úah. Diverse cerinĠe sunt atribuite în funcĠie de importanĠa percepută, pentru a rezulta un singur rezultat final. Testele SPEC au fost actualizate în repetate rânduri. Aceste teste sunt scrise pe o platformă de limbaj de programare neutră (de obicei, C sau Fortran), iar păUĠile interesate pot compila codul folosind metoda dorită, dar făUă a schimba codul. Producătorii au lucrat la îmbunăWăĠirea compilatoarelor pentru a realiza o cât mai bună acurateĠe a diferitelor teste SPEC. Teste SPEC actuale sunt: SPEC CPU2006 – combină performanĠele microprocesorului, memoriei úi compilatorului; CINT2006 sau SPECint – testează aritmetica numerelor întregi, folosind compilatoare, interpretoare, procesoare de text, programe de úah; CFP2006 sau SPECfp, testează performanĠa în virgulă mobilă, cu simulări fizice, grafică 3D, procesare de imagine, chimie computaĠională; SPECjms2007 – testează performanĠa serviciului de mesaje Java; SPECweb2005 – testează performanĠa în PHP/JSP; SPECviewperf – testează performanĠa unui sistem 3D OpenGL, cu ajutorul diferitelor sarcini de randare din aplicaĠii reale; SPECapc – testează performanĠa aplicaĠiilor 3D cunoscute unui sistem dat;
Structura unui calculator
69
70
ARHITECTURA SISTEMELOR DE CALCUL
SPEC OMP2001 V3.2 – evaluează performanĠelor sistemului paralel, folosind aplicaĠii OpenMP; SPEC MPI2007 – evaluează performanĠele sistemelor paralele, folosind aplicaĠii MPI (Message Passing Interface); SPECjvm98 – evaluează performanĠa unui sistem client, care rulează o maúină virtuală Java; SPECjAppServer2004 – evaluează performanĠa aplicaĠiilor bazate pe Java 2 Enterprise Editition (J2EE); SPEC jbb2005 – evaluează performanĠa serverului Java, prin emularea unui sistem client-server; SPEC MAIL 2001 – evaluează performanĠa unui server de mail, cu testarea protocoalelor POP úi SMTP; SPECimap2003 – evaluează performanĠa unui server de mail la nivel de întreprindere, testând protocoalele IMAP4 úi SMTP; SPECpower_ssj2008 – testează eficienĠa energetică a sistemelor server; SPEC SFS97_R1 – evaluează viteza de transfer a serverului de fiúiere NFS úi timpul de răspuns; SPECappPlatform – evaluează performanĠa platformelor web (Java EE úi NET). Nota obĠinută de sistemul testat se obĠine în modul următor. Pentru SPECint, se rulează 6 programe care folosesc numere întregi úi se obĠin astfel 6 note, din care nota finală rezultă prin mediere geometrică. Pentru SPECfp, se rulează 12 programe care folosesc virgulă mobilă (12 programe în Fortran úi două programe în C), din care se obĠin 14 note. Nota finală se obĠine tot prin media geometrică. 3.1.3. Organizarea unităĠii centrale Datele care trebuie prelucrate sunt aduse din registrele interne în registrele de intrare ale ALU, unde acestea rămân în timpul în care ALU face operaĠiunea de calcul aritmetic úi logic. Rezultatul calculului preluat de registrele de ieúire ale ALU este stocat într-unul din registrele de uz general. Există trei tipuri de instrucĠiuni (vezi figura 3.2): instrucĠiuni registre-memorie: se încarcă date din memorie în registre úi viceversa. Datele pot fi folosite mai departe de alte instrucĠiuni sau chiar de instrucĠiunile respective. În acest ultim caz, rezultatul este depus în registre; instrucĠiuni registre-registre: mută operanzii din registrul de la intrarea ALU, execută asupra lor o anumită operaĠie úi depun din nou operanzii în registru; instrucĠiuni memorie-memorie: preiau operanzii din memorie, îi plasează în registrul de intrare ALU, se execută o anumită operaĠie úi se stochează rezultatul în memorie.
Fig. 3.2. Schema unităĠii centrale.
3.2. Memoria Memoria reprezintă acea parte a calculatorului în care sunt stocate programele úi datele. Practic, de aici procesorul preia datele de care are nevoie úi tot aici scrie rezultatul. Unitatea de memorie este o cifră binară care poate lua numai două valori: 0 sau 1. Microprocesorul are capacitatea de a memora atât datele care urmează a fi prelucrate, cât úi rezultatele intermediare. Se observă că rolul său principal este de a prelucra úi transmite datele. Capacitatea de memorare este mică, neputând stoca, de exemplu, programe. Sistemul de memorie al unui calculator reprezintă ansamblul unităĠilor de memorie, împreună cu algoritmii necesari pentru controlul transferurilor úi memorarea datelor, algoritmi care pot fi implementaĠi hardware sau software. Sistemul de memorie include atât locaĠiile de memorie propriu-zise, cât úi circuitele necesare pentru adresarea locaĠiilor úi controlul operaĠiilor de citire úi scriere. O parte din aceste circuite se găsesc în unitatea de memorie respectivă, altele sunt externe, fiind de obicei integrate în controlerul unităĠii de memorie. Obiectivul principal în proiectarea oricărui sistem de memorie este realizarea unei capacităĠi de memorare adecvate sistemului de calcul, cu un nivel acceptabil de performanĠe, la un cost rezonabil. Trebuie subliniat faptul că nu întotdeauna obiectivul este acela de a obĠine o capacitate de memorare cât mai mare.
Structura unui calculator
71
3.2.1. Caracteristicile unităĠilor de memorie Capacitatea de memorare reprezintă numărul locaĠiilor (celulelor) de memorie conĠinute de o unitate de memorie. Aceasta depinde de tehnologia de fabricaĠie úi se exprimă în număr de cuvinte de informaĠie memorată (cuv), dimensiunea cuvântului fiind diferită de la un calculator la altul. Timpul de acces la o unitate de memorie (tA) este timpul necesar localizării unei celule de memorie pentru transferul de date la/de la locaĠia de memorie respectivă. Acesta reprezintă intervalul de timp calculat din momentul în care o unitate master lansează o comandă către o unitate de memorie úi până în momentul în care informaĠia este transferată în sensul dorit. Rata de acces (rA) este inversa timpului de acces, fiind exprimată în cuvinte pe secundă: rA =
1 [cuv/s]. tA
(3.2)
Timpul de ciclu la o unitate de memorie (tC) este timpul minim între două accese succesive úi reprezintă timpul din momentul în care o unitate master lansează o comandă spre unitatea de memorie úi până când poate lansa o nouă comandă la aceeaúi unitate de memorie. Uzual, tC > tA, diferenĠa lor numindu-se timp de revenire (tR = tC – tA). Acesta reprezintă timpul minim necesar pentru inactivarea primei comenzi, până la activarea celei de-a doua. Rata de transfer (rT) este inversa timpului de ciclu úi reprezintă cantitatea maximă de informaĠie (exprimată în cuvinte pe secundă) care poate fi transferată la/de la memorie într-o secundă: rT =
1 [cuv/s]. tC
(3.3)
Costul total al unităĠii de memorie (CT) include, pe lângă costul celulelor de memorie propriu-zise, costul circuitelor de acces la aceste celule. Pentru compararea diverselor unităĠi de memorie între ele, se utilizează costul unitar (CU), care reprezintă costul de memorare a unui cuvânt de informaĠie. Costul unitar se determină prin raportarea costului total (CT) la capacitatea de memorare (CM): CU =
CT [cost/cuv]. CM
(3.4)
Cu cât memoria este mai rapidă, cu atât costul unitar este mai mare. Modul de acces la locaĠiile unităĠii de memorie arată ordinea în care informaĠia memorată poate fi accesată. Acesta poate fi serial sau paralel.
72
ARHITECTURA SISTEMELOR DE CALCUL
Dacă locaĠiile de memorie pot fi accesate în orice ordine, iar timpul de acces este independent de locaĠia accesată, atunci accesul este aleator, iar unitatea de memorie se numeúte memorie cu acces aleator (Random Access Memory, RAM). În general, memoriile semiconductoare sunt memorii cu acces aleator. Prin ierarhizarea unităĠilor de memorie, blocurile de date cu probabilitatea cea mai mare de accesare sunt aduse pe niveluri superioare, mai aproape de unitatea centrală (localizare spaĠială). Dintre acestea, datele cele mai recent accesate sunt păstrate în apropierea procesorului (localizare temporală).
3.2.2. Ierarhizarea memoriei Pornind de la funcĠiile realizate de fiecare tip de memorie, de la rolul úi locul ocupat în sistemul de calcul, se pot distinge mai multe categorii de memorii, ilustrate în figura 3.3.
Fig. 3.3. Ierarhizarea memoriei.
3.2.2.1. Registrele de memorie Reprezintă dispozitivele de memorie cele mai rapide, dar úi cele mai scumpe. Sunt utilizate de procesor, fiind de două feluri: cu destinaĠie specifică úi de uz general. Registrele cu destinaĠie specifică au un rol precis úi memorează numai anumite tipuri de informaĠie (de exemplu, contorul de program). Din acest motiv, pentru ca procesorul să realizeze o anumită operaĠie, este accesat un anumit registru, úi anume, acela care memorează tipul de informaĠie dorit. În acest fel, nu este necesar ca registrul să fie accesat prin adresă, fapt care măreúte viteza de acces la informaĠia memorată în registre. Registrele de uz general sunt registre nespecializate, care pot fi utilizate explicit prin instrucĠiuni-program. Capacitatea registrului depinde de tipul procesorului úi nu depăúHúte de obicei lungimea cuvântului de memorie. Numărul de registre de memorie este mic, utilizându-se de regulă 16–20 registre. 3.2.2.2. Memoria internă ConĠine programele úi datele pentru toate procesele în curs de execuĠie în sistemul de calcul. Cât timp funcĠionează procesorul, el citeúte úi scrie date din/în
Structura unui calculator
73
aceasta memorie. Memoria internă este o memorie read-write cu acces direct (RAM). Ea trebuie să aibă un timp de acces redus, pentru a nu întârzia activitatea procesorului. Tipurile de memorie din această categorie sunt: Memoriile DRAM (Dynamic Random Access Memory) sunt memorii RAM dinamice, în care, pentru a se păstra informaĠia, trebuie restabilită periodic sarcina electrică cu care a fost încărcat condensatorul circuitului de memorie. Pentru aceasta, este necesar un circuit de reîmprospătare a memoriei (refresh). Memoriile SRAM (Static Random Access Memory) sunt memorii RAM statice, realizate cu circuite basculante bistabile de memorie, care Săstrează informaĠia atât timp cât sistemul este sub tensiune. La calculatoarele PC, cipurile de memorie sunt asamblate pe plăci de memorie organizate în bancuri de memorie. Aceste bancuri se instalează în placa de bază a PC-ului, în soclurile rezervate memoriei interne. Acest mecanism permite modificarea dimensiunii memoriei interne a PC-ului, prin adăugarea de noi bancuri de memorie în locurile disponibile sau prin schimbarea bancurilor cu altele de capacitate mai mare. Memoria principală sau memoria primară reprezintă memoria de lucru a sistemului de calcul, fiind realizată cu circuite integrate de memorie DRAM úi având o capacitate de memorare relativ mare (sute de MB). Memoria principală Săstrează datele active, care vor fi apelate de către procesor, dar care nu sunt imediat necesare acestuia. Datele devin active prin transferarea lor din memoria secundară în memoria principală, fiind memorate sub formă de blocuri de date, în zone de memorie, proprii fiecărui program. Viteza de lucru a memoriei principale este mult mai mică decât cea a registrelor procesorului (cu 2–3 ordine de mărime), având timpi de acces aleator de zeci până la sute de ns. Memoria nevolatilă cu acces aleatoriu (NVRAM) este cea care stochează date atunci când calculatorul este închis sau nu mai are energie. Memoria NVRAM este utilizată pentru a menĠine informaĠiile privind configuraĠia calculatorului, cum ar fi data, ora úi alte opĠiuni de pornire care pot fi setate de utilizator. Memoria cache este o memorie specializată, utilizată în scopul scăderii timpului de acces la datele din memoria internă. Are capacitate micăúi viteză mare, fiind inserată logic între procesor úi memoria principală. Constructiv, este o memorie mai rapidă decât memoria principală, construită, de regulă, din circuite SRAM. Memoria cache are timpul de acces de 2–10 ori mai mic (ns) decât cel al memoriei primare, fiind însăúi de câteva ori mai scumpă. Se urmăreúte ca procesorul Vă lucreze cât mai mult timp cu memoria cache, úi nu cu memoria principală. Pentru o memorie cache bine implementată, procesorul lucrează cu aceasta circa 70–90 % din timpul total de lucru cu memoria. ùi acest tip de memorie poate fi extins prin adăugarea de cipuri suplimentare. Utilizarea memoriei cache se bazează pe două caracteristici ale execuĠiei programelor în sistemele de calcul clasice: 1. programele tind să utilizeze date úi instrucĠiuni situate unele lângă altele sau în zone apropiate (principiul vecinăWăĠii); 2. programele folosesc în mod repetat adresarea aceloraúi blocuri de memorie.
74
ARHITECTURA SISTEMELOR DE CALCUL
Plecând de la aceste constatări, memoria cache conĠine la un moment dat cópii ale unor date din memoria principală. Înainte de orice acces la memoria principală, se verifică dacă nu cumva informaĠia căutată se găseúte în memoria cache. Dacă aceasta există, se preia de acolo cu o viteză superioară. Memoria intermediară, numităúi memorie cache pentru suporĠi externi sau memorie cache de disc (Disk-Cached Memory), este plasată între memoria principală úi memoria secundară, acĠionând într-o manieră similară memoriei cache. Are rol de memorie tampon, care păstrează blocurile de date cel mai recent accesate de un program, duplicări ale celor din memoria secundară. 3.2.2.3. Memoria externă Pentru a utiliza datele memorate în memoria externă, acestea trebuie aduse mai întâi în memoria principală. Prin comparaĠie cu memoria internă, memoria externă se caracterizează prin viteză de acces mai scăzută, cost mai redus, capacitate mai mare, având rolul de a mări spaĠiul de memorare al unui sistem de calcul. În memoria externă sunt stocate úi programele cu ajutorul cărora se realizează prelucrarea datelor. Accesul la memoria externă nu se face direct, ci prin intermediul memoriei interne. În comparaĠie cu memoria internă, memoria externă este: nevolatilă, cu acces poziĠional úi timp de acces mai mare, cu viteză de transfer mai mică, cu cost mai redus, cu capacitate mult mai mare, de tip read-write, cu densitate de memorare variabilă de la un echipament la altul úi de la un suport la altul (magnetic, optic, semiconductor). Memoria secundară este organizată pe un suport extern de memorie, de regulă disc magnetic, úi are rolul de a realiza o extindere a memoriei principale, conform conceptului de memorie virtuală, care se referă la capacitatea procesorului de a utiliza un spaĠiu de memorie externă pentru a simula o capacitate mai mare a memoriei interne disponibile. Altfel spus, este vorba de capacitatea procesorului de a accesa un spaĠiu de adrese care depăúHúte spaĠiul de adrese al memoriei principale. Acest concept a apărut încă din anul 1960, iar la PC este disponibil începând cu seria 286. Memoria suplimentară poate fi de mai multe tipuri: memorie expandată, memorie extinsăúi memorie de arhivare sau terĠiară. Memoria expandată este o memorie suplimentară la calculatoarele de tipul PC, pe care utilizatorul o accesează prin intermediul mecanismului EMS (Extended Memory Specification). Este alcătuită din bancuri de memorie de 64 KB RAM úi este gestionată de un program-sistem specializat. numit EMM386.EXE (în sistemul de operare MS-DOS). Memoria extinsă este memoria suplimentară accesibilă utilizatorului prin mecanismul XMS (eXtended Memory Specification), care poate fi implementat pe procesoare având cuvinte de adresă de 32 biĠi. Programele trebuie scrise ca utilizând special aceste mecanisme. Programul-sistem care gestionează acest tip de memorie în sistemul de operare MS-DOS este HIMEM.SYS.
Structura unui calculator
75
Memoria de arhivare este acea parte a memoriei externe care asigură stocarea datelor preluate din mediul extern pe o perioadă de timp nedeterminatăúi în volume semnificative. Memoria de arhivare sau memoria terĠiară este o memorie nevolatilă de dimensiuni foarte mari, dar úi cu timpi de acces foarte mari (zeci de secunde). 3ăstrează date pasive, stocate doar în scop de arhivare, pe o perioadă de timp nedeterminatăúi în volume semnificative. Accesul la aceste date se face foarte rar. Memoria terĠiară este realizată cu unităĠi de memorare pe suport detaúabil, optic (CD-ROM, DVD-ROM), magnetic (bandă sau casetă magnetică) sau semiconductor (stick-uri úi card-uri de memorie). Trebuie subliniat faptul că memoria terĠiară reprezintă colecĠia de discuri úi casete existente, úi nu unităĠile de memorie propriu-zise.
3.2.3. Memoria RAM Circuitele integrate de memorie sunt memorii semiconductoare, realizate în diverse tehnologii de fabricaĠie (bipolare sau MOS). Acestea sunt de mai multe tipuri, cu diferite raporturi performanĠe/cost, având domenii specifice de utilizare: memoriile cu acces aleator (RAM) úi memoriile cu acces pentru citire (ROM). O memorie cu acces aleator (RAM = Random Access Memory) este acea memorie la care locaĠiile de memorie pot fi accesate în orice ordine, iar timpul de acces nu depinde de locaĠia accesată. Memoriile RAM pot fi de două tipuri: SRAM (Static RAM) úi DRAM (Dynamic RAM).
76
ARHITECTURA SISTEMELOR DE CALCUL
Memoria SRAM poate fi de două tipuri: Memoria SRAM asincronă nu necesită semnal de ceas pentru sincronizarea cu unitatea master. Memoriile asincrone sunt mai lente decât cele sincrone, dar sunt mai ieftine úi au un consum de energie mic. Aceste memorii sunt realizate într-o gamă foarte diversă de performanĠe, cu timpi de acces care variază de la 50–70 ns, până la 10–15 ns. Memoria SRAM sincronă necesită un semnal de ceas pentru validarea semnalelor de control. Ceasul primit din exterior permite operarea memoriei, sincron cu unitatea master. Memoriile sincrone sunt foarte rapide, cu timp de acces sub 10 ns, pot funcĠiona la tensiuni de alimentare mici, dar sunt scumpe. Ele pot fi de mai multe tipuri: PBS (Pipelined Burst Synchronous), FTS (Flow Through Synchronous) sau ZBT (Zero Bus Turnaround) SRAM. În general, sistemele de calcul simple au memoria RAM de lucru formată doar din circuite de memorie SRAM asincronă, cu capacităĠi mici, de zeci-sute de KB, úi care memorează cuvinte de 8 biĠi. Sistemele performante, care necesită viteze úi capacităĠi de memorare mari, folosesc memorii SRAM rapide pentru implementarea memoriei cache. Din punct de vedere constructiv, cele două tipuri de memorii SRAM sunt similare. Ele diferă doar prin algoritmul de transfer al datelor úi, implicit, prin performanĠe. De aceea, în cele ce urmează vor fi analizate elementele comune, definitorii pentru SRAM, iar exemplificările vor fi realizate pentru memoria asincronă. Schema bloc a memoriei SRAM este ilustrată în figura 3.5.
3.2.3.1. Memoria SRAM Memoria SRAM (Static RAM) este o memorie în care informaĠia se memorează într-un mod stabil, pe ambele niveluri logice, atât timp cât memoria este alimentată. Este realizată în tehnologii rapide (bipolare sau CHMOS = Complementary High-density MOS), cu timpi de acces foarte mici (ns). Fiind o memorie care poate fi úi citităúi scrisă, SRAM are magistrala bidirecĠională de date úi două cicluri diferite de memorie: ciclul de citire úi ciclul de scriere, identificate de semnalul WE , activ pe 0L. Simbolul memoriei SRAM este ilustrat în figura 3.4.
Fig. 3.4. Simbolul memoriei SRAM
Fig. 3.5. Schema bloc a memoriei SRAM.
Structura unui calculator
77
3.2.3.2. Memoria DRAM Memoria DRAM (Dynamic RAM) este o memorie volatilă cu acces aleator, care memorează informaĠia în mod dinamic. Este realizată în tehnologie CMOS (Complementary MOS), cu consum de energie foarte mic. Datorită particularităĠilor constructive ale celulelor de memorie, informaĠia 0L este memorată stabil, dar informaĠia 1L se pierde în timp úi necesită împrospătarea periodică a memoriei, de unde úi denumirea acesteia. Indiferent de modul de realizare, memoria DRAM este mult mai lentă decât memoria SRAM, din cauza mecanismului specific de memorare a datelor. Timpul de acces la DRAM este de 2–10 ori mai mare decât la SRAM, úi variază în funcĠie de tipul accesului la memorie. Astfel, în acces aleator, timpul de acces este mare (zeci de ns), însă scade foarte mult (în funcĠie de tipul memoriei DRAM), dacă se restricĠionează accesul în modul pagină (vezi paragraful 3.2.9 – FPM), putând ajunge la doar de două ori mai mare decât cel al memoriei SRAM. Celula de memorie este mult mai mică decât la memoria SRAM, ceea ce permite realizarea unor densităĠi mari de integrare. Circuitele de memorie DRAM au, prin urmare, capacităĠi de memorare mari, úi, implicit, un număr mare de linii de adresă. Simbolul memoriei DRAM este ilustrat în figura 3.6.
ARHITECTURA SISTEMELOR DE CALCUL
78
Fig. 3.7. Schema bloc de bază a memoriei DRAM.
ROR (RAS Only Refresh) este o metodă de împrospătare din exterior, prin care se transmit memoriei adresa de rând (AR) úi semnalul RAS ,
Fig. 3.6. Simbolul memoriei DRAM.
Memorarea datelor se bazează pe stocarea úi transferul de sarcini electrice, úi nu pe mecanisme de comutare, ca în cazul memoriilor SRAM. Fiecare bit de informaĠie este memorat prin încărcarea sau descărcarea unui condensator. Când condensatorul este încărcat, se spune că se memorează valoarea 1L, iar când acesta este descărcat, valoarea memorată este 0L. FaĠă de celula SRAM, mecanismul de memorare nu presupune consum de curent de la sursa de alimentare. Schema bloc de bază a memoriei DRAM este trasată în figura 3.7. Celulele de memorie sunt dispuse într-o arie pătrată sau dreptunghiulară de locaĠii de memorie, fiecare locaĠie memorând un cuvânt de m biĠi, Semnalele de comandă acĠionează prin intermediul logicii de control. Eventual, memoria DRAM poate avea circuit intern de împrospătare, care presupune un număUător de adrese de rând úi un ceas de timp real. În funcĠie de tipul memoriei DRAM, ciclurile de împrospătare pot fi realizate în trei moduri:
IăUă a se activa semnalul CAS . Unitatea master externă este anunĠată periodic să facă refresh de către un ceas de timp real, care este programat software de către sistemul de operare. CBR (CAS Before RAS) este tot o metodă de împrospătare din exterior, prin care se transmit semnalele CAS úi RAS , activate în această ordine. În acest caz, memoria dispune de un număUător de adrese intern, pentru indicarea liniei care trebuie împrospătată, făUă a fi nevoie de transmiterea adresei din exterior. De asemenea, perioada de repetiĠie a ciclurilor de refresh este determinată de un ceas de timp real extern. Auto-împrospătare cu ajutorul circuitelor interne memoriei DRAM. În interior, memoria conĠine un număUător de adrese de rând, un ceas de timp real úi o logică de control pentru generarea semnalelor CAS úi
RAS , conform metodei CBR. Memoria DRAM poate fi de două tipuri: asincronăúi sincronă. Memoria DRAM asincronă nu necesită semnal de ceas pentru sincronizarea cu unitatea master apelantă. Ca úi la SRAM, memoriile DRAM asincrone sunt mai lente decât cele sincrone, dar sunt mai ieftine úi au un consum de energie mai mic. Dintre memoriile DRAM asincrone, se pot enumera: FPM (Fast Page Mode), EDO (Extended Data Out) úi BEDO (Burst EDO) DRAM. La toate memoriile, accesul aleator este lent. În acces aleator, timpul de acces faĠă de RAS (tRAC) este de 50–70 ns, iar timpul de ciclu (tC) este de 90–120 ns.
Structura unui calculator
79
O altă categorie de memorii DRAM este cea care utilizează o interfaĠă sincronă. Prin implementarea unei interfeĠe sincrone, s-au eliminat perioadele de Dúteptare de către procesor, obĠinându-se, de asemenea, unele avantaje suplimentare. În cazul funcĠionării sincrone, se memorează anumite date de la procesor în circuitele latch ale memoriei DRAM, sub controlul ceasului de sistem. Aceste circuite păstrează adresele, datele úi semnalele de control, ceea ce permite procesorului să execute alte operaĠii. După un număr specific de cicluri de ceas, datele devin disponibile úi procesorul le poate citi de pe liniile de ieúire. Un alt avantaj al unei interfeĠe sincrone este că ceasul sistemului este singurul semnal de sincronizare care trebuie furnizat memoriei DRAM. Aceasta elimină necesitatea propagării semnalelor multiple de sincronizare. Intrările sunt de asemenea simplificate, deoarece semnalele de control, adresele úi datele pot fi memorate făUă temporizările de setare úi menĠinere monitorizate de procesor. Avantaje similare se obĠin úi pentru operaĠiile de ieúire. O altă categorie este reprezentată de memoriile DRAM bazate pe protocoale. Categoriile precedente de memorii au linii separate de adrese, date úi control, ceea ce limitează viteza la care poate funcĠiona circuitul cu tehnologia curentă. Pentru eliminarea acestui dezavantaj, au fost proiectate memorii DRAM bazate pe protocoale, care implementează toate aceste semnale pe aceeaúi magistrală. Cele mai cunoscute memorii din această categorie sunt DRDRAM (Direct Rambus) úi SLDRAM (SyncLink) DRAM. Memoria DRAM sincronă necesită un semnal de ceas pentru validarea semnalelor de control. Ceasul primit din exterior permite operarea memoriei sincron cu unitatea master. Deúi accesul aleator este comparativ cu cel al memoriilor asincrone, accesul în mod pagină este mult mai rapid. Memoriile sincrone pot fi de mai multe tipuri: SDRAM (Synchronous DRAM), DDR SDRAM (Double Data Rate SDRAM), RDRAM (Rambus DRAM), DRDRAM (Direct Rambus DRAM) etc. Accesul aleator este, de asemenea, lent, fiind puĠin mai rapid decât la memoriile asincrone, datorită tehnologiei (memoriile sincrone au apărut ulterior). În acces aleator, tRAC este de 40–60 ns, iar tC este de 80–110 ns. Accesul în mod pagină este mult mai rapid decât la memoriile asincrone úi depinde de frecvenĠa semnalului de ceas de sincronizare.
3.2.4. Accesul la locaĠiile de memorie În sistemele cu microprocesoare, modulele de memorie se conectează pe magistrala sistemului. Accesul la locaĠiile de memorie se realizează prin cicluri de transfer (cicluri maúină), folosindu-se semnalele magistralei (de adresă, date úi comenzi). Modul de desfăúurare a diferitelor tipuri de cicluri de transfer se reprezintă prin diagrame de timp (evoluĠia în timp a semnalelor de pe magistrală implicate în transfer). Parametrii de timp ai unui ciclu de transfer depind de tipul procesorului, de regulile de comunicaĠie pe magistrală úi de tipul circuitelor de memorie utilizate.
80
ARHITECTURA SISTEMELOR DE CALCUL
Ciclu de citire din memorie Semnale de adresă S. de c-dă MEMR\ (citire memorie) Semnale de date
Adresa validă
(înaltă impedanĠă) Date valide (citite) tAR tMEMR tC
Ciclu de scriere în memorie Adresa validă
Semnale de adresă S. de c-dă MEMW\ (scriere memorie) Semnale de date
(înaltă impedanĠă) Date valide (scrise) tAW
tMEMW tC
Fig. 3.8. Diagrame de citire/scriere memorie.
În figura 3.8, s-au reprezentat diagramele de transfer pentru un ciclu de citire din memorie úi un ciclu de scriere în memorie. La proiectarea unui modul de memorie, trebuie să se Ġină cont de următorii parametri de timp: timpul de acces la citire (tAR) – intervalul de timp între momentul apariĠiei adresei valide úi momentul în care data citită este prezentă pe liniile de date. Uneori, timpul de acces se măsoară în raport cu momentul apariĠiei semnalului de comandă MEMR\. Dacă timpul de acces al circuitului de memorie folosit este mai mare decât timpul permis pe magistrală, atunci interfaĠa modulului de memorie trebuie să prelungească ciclul de transfer, prin dezactivarea pe un timp limitat a semnalului READY către procesor. timpul de menĠinere a semnalului de comandă MEMR\ activ (tMEMR). durata unui ciclu complet de citire sau scriere (tC). timpul de acces la scriere (tAW) – intervalul de timp între momentul în care adresa este validă úi momentul de generare a comenzii de scriere; în acelaúi mod ca la citire, dacă circuitul de memorie folosit are un timp de acces mai mare, atunci interfaĠa modulului trebuie să dezactiveze temporar semnalul READY pentru prelungirea ciclului de transfer. Momentul activării semnalului de scriere se măsoarăúi în raport cu momentul în care data este prezentă pe magistrală. timpul de menĠinere a semnalului de scriere (tMEMW), de obicei < tMEMR.
Structura unui calculator
81
ObservaĠii: 1. la citire, data este generată după apariĠia semnalelor de adresă úi de comandăúi se menĠine un timp scurt după dezactivarea acestora; 2. la scriere, data trebuie să apară pe magistrală înaintea semnalului de scriere úi să fie validă pe toată durata de activare a semnalului de comandă; 3. timpul de acces acoperă întârzierile care apar într-un modul de memorie datorită circuitelor de decodificare a adresei úi de selecĠie a amplificatoarelor de intrare sau de ieúire; 4. proiectantul trebuie să aleagă circuite de memorie cu parametri de timp acoperitori pentru restricĠiile impuse pe magistrală úi să ia în calcul întârzierile produse de circuitele de amplificare din interfaĠă úi de pe magistrală. Există două moduri de organizare a octeĠilor în memorie, úi anume: a) Big Endian; b) Little Endian. Exemplu. Se consideră că se lucrează pe cuvinte de 32 biĠi. Cele două moduri de organizare a octeĠilor sunt reprezentate în figura 3.9.
82
ARHITECTURA SISTEMELOR DE CALCUL
3.2.5. Metodologia de proiectare a memoriilor statice Proiectarea unui modul de memorie se face pe baza unor parametrilor de proiectare impuúi: capacitatea memoriei; modul de organizare (unitatea elementară de acces la memorie: octet, cuvânt, cuvânt dublu); tipul de magistrală pe care se conectează (numărul semnalelor de date úi de adresă, tipurile semnalelor de comandă, parametrii de timp pentru ciclurile de transfer); amplasarea modulului de memorie în spaĠiul de adresare al procesorului, exprimată prin adresa sa de început (trebuie să fie un multiplu al capacităĠii modulului); tipul de circuit de memorie disponibil (poate fi un parametru impus sau unul ales de proiectant); alte cerinĠe speciale (de exemplu: accesul dual de pe două magistrale, reîmprospătarea controlată centralizat, implementarea unor mecanisme de detecĠie a erorilor etc.)
3.2.6. Metodologia de proiectare a memoriilor dinamice
Fig. 3.9. Modurile de organizare a memoriei de tip Big Endian (a) úi Little Endian (b).
Microprocesoarele PowerPC, Motorola 6800 úi HP, folosesc o organizare a octeĠilor în memorie de tip Big Endian, iar microprocesoarele DEC úi Intel folosesc modul Little Endian.
Proiectarea memoriilor dinamice este, în principiu, similară proiectării memoriilor statice, cu următoarele amendamente: trebuie să se adauge un mecanism de reîmprospătare periodică a memoriei (refresh); adresele trebuie multiplexate (generarea secvenĠială pe aceleaúi semnale a adresei de linie úi a adresei de coloană); trebuie să se genereze semnalul de validare a adresei de linie (RAS – Row Address Select) úi semnalul de validare a adresei de coloană (CAS – Column Address Select); selecĠia circuitelor se face cu semnalele RAS úi CAS (excepĠie fac circuitele tip EDO-DRAM, cu semnal separat pentru selecĠia circuitului). Pentru circuitele RAM dinamice, multiplexarea în timp a adreselor a fost necesară pentru a reduce numărul de pini ai circuitului de memorie úi, implicit, dimensiunea acestuia. De notat că circuitele dinamice au o capacitate relativ mare, ceea ce impune un număr mare de linii de adresă pentru selecĠie. Organizarea internă a unei memorii dinamice este sub forma unei matrice, cu linii úi coloane, iar selecĠia unei locaĠii se face prin specificarea adresei sale de linie úi de coloană. Reîmprospătarea periodică a memoriei este necesară deoarece informaĠia este păstrată un timp limitat după ultima operaĠie de citire sau scriere (condensatorul care stochează informaĠia se descarcă în timp). În figurile 3.10, 3.11, 3.12 s-au reprezentat diagramele de timp pentru ciclurile de citire din memorie, scriere în memorie úi, respectiv, reîmprospătare a memoriei.
Structura unui calculator Adrese
Adresă linie
Adresă coloană
RAS\ CAS\
83
84
ARHITECTURA SISTEMELOR DE CALCUL
Controlul procesului de reîmprospătare poate să se facă la nivelul modulului de memorie sau centralizat la nivelul întregului sistem. Indiferent de metoda aleasă, proiectantul trebuie să se asigure că ciclurile de reîmprospătare nu se suprapun peste ciclurile obiúnuite de citire sau scriere. Reîmprospătarea se face simultan la nivelul unei linii întregi din matricea de memorie.
WR\
3.2.7. Modulele de memorie Date
Date citite tCAS
tRAS±CAS tacces tciclu
Fig. 3.10. Ciclu de citire din memorie. Adrese
Adresă linie
Adresă coloană
RAS\ CAS\ WR\
Date
Date de scris tCAS
tRAS±CAS tacces tciclu
Fig. 3.11. Ciclu de scriere în memorie. Adrese
Adresă linie
RAS\ CAS\ WR\ Fig. 3.12. Ciclu de reîmprospătare a memoriei.
Modulele de memorie sunt plăcuĠe cu circuite integrate care includ conectori externi, pentru a fi introduse în soclurile disponibile pe placa de bază. Modulele de memorie sunt prevăzute cu conectori CELP (Card Edge Low Profile), având 30–83 contacte pe fiecare parte a modulului. Conectorii aflaĠi la baza modulelor de memorie permit adăugarea sau scoaterea lor de pe placa de bază făUă instrumente speciale. În ceea ce priveúte necesarul de memorie într-un sistem de calcul, este demn de reĠinut că prin creúterea dimensiunii acesteia sistemul devine mai rapid, deoarece microprocesorul citeúte datele din RAM foarte repede, neaúteptând citirea de pe hard disk-ul mult mai lent, făUă a mai lua în consideraĠie drumul pe care l-ar avea de parcurs datele pe magistralele la fel de lente. Acest aspect nu are însă un caracter imperativ, deoarece s-a demonstrat că, începând de la 16–32 MB instalaĠi, performanĠele sistemului rămân aproape constante. Totuúi există anumite aplicaĠii care cer resurse deosebite úi îndeosebi RAM. Este cazul profesioniútilor care lucrează mai ales în domeniul graficii (atât statică – proiectare CAD, fotografie, design, cât úi dinamică – animaĠii, spoturi publicitare, filme, aplicaĠii útiinĠifice, simulări etc.), fiind necesari peste 256 MB de RAM. Un alt caz deosebit este al serverelor de reĠea, unde necesarul de RAM este uriaú úi poate atinge valori peste 512 MB. Privitor la modul în care microprocesorul operează fizic cu memoria instalată, aceasta se plasează pe placa de bază în două sau mai multe segmente fizice numite bancuri de memorie. Acestea sunt segmentele minime de memorie care pot fi accesate de microprocesor, numerotate începând cu 0, fiecare banc având unul sau mai multe sloturi pentru plăcuĠele de memorie. Toate aceste bancuri sunt văzute ca niúte porĠi spre memoria fizică instalată úi au dimensiuni date de OăĠimea magistralei microprocesorului (inclusiv biĠii de paritate), de exemplu, de 72 de biĠi pentru Pentium. În sloturile aceluiaúi banc, se introduc întotdeauna memorii de acelaúi tip (având în special timpi de acces identici) úi aceeaúi dimensiune, pentru a nu provoca accesări greúite de memorie sau chiar blocarea sistemului de calcul. Exemplu. Pentru un banc cu două sloturi: 2 plăci 1 MB sau 2 plăci 2 MB. În bancuri diferite, se pot monta (teoretic) memorii diferite (ex.: 2 1 MB în bancul 0 úi 2 4 MB în bancul 1), dar, practic, este bine să se utilizeze valori pare. Exemplu. În loc de 2 4 MB + o plăcuĠă de 1 MB ar trebui montate 2 4 MB + o plăcuĠă de 2 MB), pentru a evita unele neplăceri. În figura 3.13 este prezentată dispunerea bancurilor pe placa de bază.
Structura unui calculator
85
86
ARHITECTURA SISTEMELOR DE CALCUL
3.2.8. Formatele fizice de memorie PlăcuĠe cu cipuri de memorie există sub următoarele tipuri de încapsulări: DIP (Dual In-line Package) Este varianta clasică de încapsulare, în care cipul este prevăzut cu un număr de pini pe partea sa inferioară (de ambele păUĠi), pini care vor fi introduúi în socluri speciale (vezi figura 3.14). Dezavantajul este că, din cauza rezistenĠei reduse pinii, se pot rupe destul de uúor. Acest tip de încapsulare este prezent pe sisteme (i80286) úi plăci video vechi.
Fig. 3.13. Dispunerea bancurilor pe placa de bază.
Arhitectura dual-channel Motivul care a dus la dezvoltarea acestei arhitecturi a fost apariĠia unui bottleneck între procesor úi memorie. Arhitectura dual-channel presupune o tehnologie prin care se poate dubla transferul dintre RAM úi controlerul de memorie. Controlerele de memorie care suportă dual-channel utilizează pentru transfer două canale de date de 64 biĠi, rezultând o lăĠime a căii de date de 128 biĠi. Pentru a putea beneficia de avantajele arhitecturii dual-channel, este nevoie de două sau mai multe module de memorie instalate în bancurile corespunzătoare. De obicei, aceste bancuri sunt colorate diferit pe placa de bază. Cele două canale permit accesul fiecărui modul de memorie la controler, crescând astfel lărgimea de bandă. Teoretic, nu este absolut necesar ca cele două module de memorie să fie identice, dar acest lucru este recomandat pentru a evita eventualele probleme de compatibilitate. De asemenea, se pot folosi un modul single-sidedúi unul double-sided, dar câútigul de performanĠăúi fiabilitate depind foarte mult de controlerul de memorie. În cazul în care pe o placă de bază există două perechi de socket-uri DIMM din bancuri diferite (în general, culoarea socket-ului identifică bancul căruia acesta aparĠine), se poate instala o pereche de două module în bancul 0 úi o pereche de altă capacitate în bancul 1, atât timp cât acestea funcĠionează la aceeaúi viteză. În acest mod, sistemul va folosi arhitectura dual-channel. Chiar úi module care funcĠionează la frecvenĠe diferite pot fi folosite în modul dual-channel, dar, în acest caz, toate modulele vor rula la frecvenĠa celui mai lent modul. Deúi arhitectura permite – cel puĠin teoretic – toate aceste combinaĠii, foarte multe plăci de bază au probleme cu anumite module de memorie dacă urmează să le folosească în mod dual-channel. Tocmai din acest motiv este recomandat să se utilizeze perechi identice de module. Merită reĠinut faptul că arhitectura dual-channel este o tehnologie care Ġine de plăcile de bază, úi nu de memorii. Cu alte cuvinte, orice două module de memorii compatibile vor suporta atât operaĠii single-channel, cât úi dual-channel.
Fig. 3.14. Modul de memorie DIP.
SOJ (Small Outline J Lead) Este o metodă de încapsulare mai modernă, regăsită la modulele SIMM úi cipurile BIOS (uneori). Se aseamăQă cu DIP-ul, cu diferenĠa că, în loc de pini, sunt folosite niúte terminale în formă de J, care se prind prin îndoire (vezi figura 3.15).
Fig. 3.15. Modul de memorie SOJ.
TSOP (Thin Small Outline Package) Este o încapsulare de tip SMD (Surface Mounted Devices), dar care necesită o suprafaĠă foarte redusăúi, de aceea, este folosită pe plăci PCMCIA, notebook-uri úi unele plăci video (vezi figura 3.16).
Fig. 3.16. Modul de memorie TSOP.
Structura unui calculator
87
BGA (Ball Grid Array) Este o metodă mai nouă de încapsulare, în care cipurile sunt ataúate cu ajutorul unor biluĠe din cositor, plasate sub cip. Acestea sunt destul de ieftine úi prezintă proprietăĠi bune de conductivitate electricăúi termică (permit o mai bună disipare a căldurii, în special în versiunea cu suport ceramic). Există mai multe variante ale încapsulării BGA (Fine BGA úi Tiny BGA), folosite în majoritatea modulelor de memorie de azi, inclusiv memoriile Rambus (vezi figura 3.17).
88
ARHITECTURA SISTEMELOR DE CALCUL
SODIMM (Small Outline Dual In-line Memory Module) SIMM-urile de 72 de pini sunt convenabile pentru calculatoare desktop, dar sunt prea mari pentru laptop-uri. În consecinĠă, producătorii de calculatoare miniaturizate au transformat SIMM-urile cu 72 de pini, astfel încât, în locul conectării la un loc a pinilor de pe cele două păUĠi ale modulului, au introdus niúte spaĠii pe fiecare parte, pentru a avea două semnale separate. Astfel, lungimea modulului s-a redus la jumătate, rezultatul fiind Small Outline Dual In-line Memory Module, numit astfel datorită dimensiunilor reduse ale modulului úi a celor două linii de conectori independenĠi de pe fiecare parte a modulului (vezi figura 3.20). Un SODIMM cu 72 de pini are lungimea jumătate faĠă de SIMM-ul cu 72 de pini (2,35 inci), fiind echivalent unui SIMM 72 cu conectorii pe ambele păUĠi ale modulului.
Fig. 3.17. Modul de memorie BGA.
SIMM (Single In-line Memory Module) Este o plăcuĠă de memorie care se introduce în sloturi pe placa de bază. Elimină problemele de compatibilitate, datorită standardizării ei de către producătorii plăcilor de bază. Memoriile SIMM folosesc o magistrală de memorie pe 32 de biĠi úi există în două variante (vezi figurile 3.18 úi 3.19): cu 30 de pini – pentru cantităĠi mici de memorie (< 8 MB); cu 72 de pini – pentru cantităĠi mai mari de memorie (> 8 MB). Memoriile SIMM pot fi atât single sided (cu cipuri de memorie pe o singură parte), cât úi double sided (cipurile sunt dispuse pe ambele feĠe). SIMM-urile double sided sunt realizate din două SIMM-uri single sided, conectate împreună pe acelaúi modul din fibră de sticlă.
Fig. 3.20. Modul de memorie SODIMM.
SIPP (Single In-line Pin Package) Deúi SIPP-urile sunt identice cu SIMM-urile de 30 de pini din punct de vedere electric, din punct de vedere fizic sunt mai mici (vezi figura 3.21). Dimensiunile standard sunt de 3,23 inci lungime úi 1 inci înăOĠime. Deúi din punct de vedere funcĠional SIMM-urile úi SIPP-urile pot avea aceleaúi cipuri de memorie, aceeaúi tehnologie úi aceeaúi capacitate, între ele există diferenĠe care le fac incompatibile. Dacă se doreúte instalarea unei noi extensii de memorie sau înlocuirea uneia existente, trebuie specificat tipul de memorie folosit: SIMM sau SIPP.
Fig. 3.18. Modul de memorie SIMM cu 30 de pini.
Fig. 3.19. Modul de memorie SIMM cu 72 de pini.
Fig. 3.21. Modul de memorie SIPP.
Structura unui calculator
89
DIMM (Double In-line Memory Modules) Sunt module de memorie cu lăĠimea magistralei de 64 de biĠi, folosite la implementarea memoriilor SDRAM úi DDR SDRAM (vezi figura 3.22). DIMMurile SDRAM folosesc 168 de pini, pe când cele DDR SDRAM au 184 de pini. Ele mai diferăúi prin numărul fantelor de pe partea inferioară, cele SDRAM având două, iar cele DDR, numai una. Din punct de vedere al designului úi al tensiunii de alimentare, există 4 variante de DIMM-uri: de 3,3V sau 5V úi cu buffer (buffered) sau făUă buffer (unbuffered). Cele mai des întâlnite sunt de tipul 3,3V, făUă buffer.
Fig. 3.22. Modul de memorie DIMM.
RIMM (Rambus In-line Memory Modules) Este tipul de încapsulare folosit la memorii Rambus (vezi figura 3.23). Este foarte asemăQător DIMM-ului, dar foloseúte setări diferite ale pinilor. Se remarcă prin prezenĠa de radiatoare pe ambele feĠe ale modulului de memorie, pentru a preveni încălzirea excesivă a acestuia. Se prezintă úi în varianta XDIMM (vezi paragraful 3.2.9 – XDR DRAM)
Fig. 3.23. Modul RIMM Rambus.
3.2.9. Formatele logice de memorie Încărcarea cipurilor de memorie prin adresarea liniilor úi coloanelor consumă timp de ordinul nanosecundelor, ceea ce provoacă întârzieri la răspunsurile furnizate microprocesoarelor. Dacă se adaugăúi timpul necesar reîmprospăWării, se obĠin limitele performanĠei cipului de memorie. Pentru a mări performanĠele memoriei, proiectanĠii au dezvoltat o serie de tehnologii care să depăúească aceste limite, orientându-se asupra modului în care sunt procesate datele intern – moduri care constituie formatele logice ale memoriilor interne: s-a încercat memoria de tip coloană statică, apoi s-a trecut la FPM, care s-a dovedit a fi mai performantă prin anul 1995, ulterior tehnologia EDO preluând supremaĠia. Toate formatele logice, au acelaúi mod de adresare a celulelor úi aceeaúi tehnologie la bază, diferind prin anumite semnale úi cuante de timp alocate.
90
ARHITECTURA SISTEMELOR DE CALCUL
SCRAM (Static Column RAM) Primele memorii au folosit tehnologia Static Column RAM, care efectua citirea unei coloane de memorie úi scrierea adresei pe linia de adresă a cipului, transmiĠând apoi semnalul CAS. Odată ce coloana a fost înregistrată, se poate trimite un nou set de adrese, prin care se va indica o linie, activând RAS. În tot acest timp, semnalul CAS este menĠinut deschis, pentru a indica faptul că acea coloană a rămas constantă. FPM (Fast Page Mode) Tehnologiile FPM folosesc tot o variantă a acestei strategii. Controlerul de memorie transmite mai întâi o linie de adrese, apoi activează semnalul RAS. Cât timp semnalul RAS este activ, se transmite o adresă a semnalului CAS, pentru a indica o anumită celulă. Dacă semnalul RAS este menĠinut activ, controlerul poate trimite una sau mai multe adrese, urmate de un impuls al semnalului CAS, pentru a indica celule din cadrul aceleiaúi linii. În terminologia de adresare a memoriei, linia este numită pagină, iar tipurile de cipuri care permit aceste operaĠii sunt numite mod pagină (page mode RAM). Calculatorul poate astfel accesa mai rapid mai multe celule dintr-o pagină de memorie, asigurând un timp de acces de 25–30 ns. Pentru a accesa mai multe pagini, va trebui să se schimbe ambele adrese ale liniei úi coloanei, ceea ce va genera întârzieri. EDO (Extended Data Out) O altă tehnologie utilizată este numită EDO (Extended Data Out) úi este destul de rapidă pentru calculatoarele actuale. Memoria EDO lucrează cel mai bine în combinaĠie cu o memorie cache. În esenĠă, EDO este o variantă a memorie Fast Page Mode (care permite accesul repetat la biĠii din cadrul unei pagini de memorie, IăUă a genera întârzieri). În timp ce memoria convenĠională se descarcă după fiecare operaĠie de citire úi necesită timp de reîncărcare înainte de a fi citită din nou, EDO păstrează datele până când primeúte un alt semnal. Memoria EDO modifică cuanta de timp alocată pentru semnalul CAS. Linia de date mai rămâne activă un interval scurt de timp, după ce linia CAS este dezactivată. Se elimină, astfel, timpul de aúteptare necesar pentru un ciclu separat de citire/scriere, deci, se pot citi sau scrie date la viteza cu care cipul poate să selecteze adresele. La cele mai multe cipuri, este cerută în mod normal o aúteptare de 10 ns între emiterea adreselor de coloană. Modelul EDO elimină această întârziere, permiĠând memoriei să furnizeze mai repede datele solicitate. Teoretic, EDO poate să crească performanĠele cu 50–60%, dar, la modelele mai recente de calculatoare, cele mai bune implementări au condus la o creútere a performanĠelor cu 10–20%. Fizic, cipurile EDO úi SIMM par identice, dar, pentru a implementa EDO, este necesar un sistem complet diferit de gestiune (management) a memoriei, care Vă se potrivească cu tehnologia memoriei (BIOS-ul, în special). Astfel, se pot instala SIMM-uri EDO în majoritatea calculatoarelor, dar vor funcĠiona ca memorie obiúnuită, úi nu vor contribui la o creútere a performanĠei.
Structura unui calculator
91
În aplicaĠiile multimedia, diferenĠa între memoria cache úi EDO nu este notabilă, astfel că EDO poate fi considerat ca o alternativă la memoria cache secundară. La sfârúitul anului 1995, înlocuirea memoriei FPM cu EDO devenise cea mai comună formă de reducere a timpului de acces la memorie. DiferenĠa dintre cele două memorii este mică, astfel încât multe calculatoare create pentru memoria FPM acceptăúi memoria EDO, deúi nu câútigă în performanĠă. Cu toate Fă FPM nu poate imita EDO, calculatoarele actuale pot determina ce fel de memorie s-a instalat, lucrând cu ea în mod adecvat. Pentru o rată de transfer dată, memoria EDO va fi cu 30% mai rapidă decât memoria FPM. Exemplu. Acolo unde un cip page mode de 70 ns are starea de aúteptare zero la o frecvenĠă a magistralei de 25 MHz, un cip EDO poate opera la stare de Dúteptare zero pentru o frecvenĠă a magistralei de 33 MHz.
92
ARHITECTURA SISTEMELOR DE CALCUL
pentru magistrale de memorie de 100 MHz. Cipurile actuale au anumite limite, care reduc viteza la aproape 66 MHz. SDRAM-urile nu pot opera la viteze mai mari de 100 MHz, pentru că sloturile SIMM-urilor devin nesigure la frecvenĠe mai mari.
Memoriile SDRAM sunt adaptate noului standard de magistrală sincronă introdus de microprocesoarele familiei Intel P6 (Pentium Pro, Pentium II úi III). În figura 3.24 este prezentată structura unei memorii organizate pe 4 blocuri, care sunt accesibile în mod concurent.
BEDO DRAM (Burst Extended Data Out DRAM) Pentru a câútiga mai multă viteză cu EDO, Micron Technology a adăugat circuite cipului, pentru a-l face compatibil cu modul burst folosit de microprocesoarele Intel, începând cu 486. Noul cip, numit Burst EDO DRAM, realizează toate operaĠiile de citire úi scriere în serii de câte patru cicluri, numite burst. Aceeaúi tehnologie este regăsită sub numele generic de pipeline nibble mode DRAM, pentru că transferul datelor se realizează în serii de câte patru cicluri pe pipeline. Cipul funcĠionează ca un EDO sau ca un page mode DRAM atunci când linia CAS devine activă, dar, în loc să transfere un octet de date, un număUător binar transmite un semnal de patru ori în interiorul cipului, fiecare semnal transferând un octet de date. BEDO este relativ uúor de fabricat, pentru că necesită un minim de schimbări faĠă de memoria EDO sau page mode DRAM. Cipul de siliciu conĠine un fuzibil care determină dacă cipul funcĠionează ca EDO sau BEDO. Cipul îúi poate schimba starea în mod ireversibil, prin arderea fuzibilului. Tehnologia BEDO este capabilă să opereze la o viteză a magistralei de 66 MHz cu stări de aúteptare zero, la un timp de transfer de 52 ns. SDRAM (Sychronous DRAM) Datorită multiplexării, cipurile de memorie nu pot opera simultan cu microprocesoarele. Adresarea normală cere cicluri alternante, dar, prin reproiectarea interfeĠei de bază, cipurile de memorie pot accesa date la fiecare ciclu de ceas. Modificările cipurilor de interfaĠă au făcut ca cipurile de memorie să poată opera sincron cu microprocesoarele: acestea se numesc DRAM sincron. Deúi schimbarea interfeĠei cipului poate evita blocările sistemului, ea nu are nicio contribuĠie la creúterea vitezei. Ca úi microprocesoarele superscalare, cipurile SDRAM sunt realizate cu stagii de operare multiple úi independente, astfel încât cipul poate să acceseze o a doua adresă înainte de a încheia procesarea primei adrese. Extinderea pipeline se referă doar la adresarea coloanelor unei anumite pagini. Cipurile SDRAM au rata de transfer foarte ridicată. InterfaĠa úi pipeline-ul determină timpi de transfer de ordinul nanosecundelor, ceea ce le permite utilizarea
Fig. 3.24. Structura internă a unei memorii SDRAM de 8 MB.
Structura favorizează operaĠiile în regim burst. Se poate programa numărul de locaĠii dintr-un burst la valorile de 1, 2, 4, 8 octeĠi sau o pagină de memorie. Accesul începe la o adresă specificată úi continuă cu adresele succesive, până la numărul de locaĠii programate. Circuitul de memorie acceptă mai multe tipuri de comenzi, fiecare fiind specificată printr-o combinaĠie a semnalelor de intrare. Ratele de transfer cerute de diverse tehnologii de memorie pentru starea de Dúteptare zero la o viteză de transfer dată pe magistrală sunt prezentate în tabelul 3.1.
Structura unui calculator
93 Tabelul 3.1
Ratele de transfer la o viteză dată a magistralei locale Viteza magistralei de memorie
FPM
EDO
BEDO
SDRAM
25 MHz
70 ns
70 ns
70 ns
12 ns
33 MHz
52 ns
70 ns
70 ns
15 ns
50 MHz
N/A
52 ns
70 ns
12 ns
66 MHz
N/A
N/A
52 ns
10 ns
Dintre versiunile rapide de SDRAM dezvoltate în ultimii ani, se pot aminti: PC 100 RAM – timp de acces 8 ns, rată de transfer 500-800 MB/s; PC 133 RAM – timp de acces 7,5 ns, rată de transfer 800 MB/s; PC 2100/2700/3200 – la frecvenĠele de 266/333/400 MHz. EDRAM (Enhanced DRAM) Memoriile de tip EDRAM sunt mai rapide úi se obĠin din DRAM-urile obiúnuite prin adăugarea unor blocuri mici de memorie cache statică pe fiecare cip. Cache-ul operează la viteză înaltă (în mod obiúnuit, 1 ns), astfel încât pot să acopere cererile de date ale microprocesorului făUă a adăuga stările de aúteptare generate de operaĠia de reîmprospătare. Producătorul tehnologiei EDRAM (Ramtron) descrie patru avantaje ale acestui tip de memorie: legarea cache-ului SRAM cu DRAM-ul pe acelaúi cip presupune folosirea unei magistrale de lăĠime mare pentru conectare (Ramtron foloseúte o magistrală de 16.384 biĠi), care poate determina o rată de umplere a memoriei cache de aproximativ 60 Gb/s, comparativ cu 110 Mb/s la cache page mode DRAM. Timpul de umplere este de aproape úapte ori mai mic (35 ns) la EDRAM faĠă de cache page mode DRAM (250 ns); modelul Ramtron foloseúte o structură de control diferită faĠă de DRAMul convenĠional, ceea ce permite ca memoria să fie preîncărcată în timp ce sistemul realizează transferul în mod burst din cache, preîncărcarea determinând reducerea timpului de acces; deúi cache-ul EDRAM foloseúte proiectarea write through (vezi paragraful 3.2.12), scrierea în memoria principală poate fi făcută cu timp de aúteptare zero. Prima operaĠie de scriere necesită 7 ns, iar ciclul de scriere pentru o pagină normală este de 15 ns; proiectarea EDRAM permite accesul separat la bancurile de cache, ceea ce reduce timpul de acces la sistemele care lucrează în multitasking. CDRAM (Cached DRAM) Memoria CDRAM, realizată de Mitsubishi, adaugă o memorie cache pe fiecare cip, utilizând un model de tip asociat. Cipul iniĠial de 4 MB are încorporată o memorie cache de 2 KB, folosind două buffer-e de câte un cuvânt (16 biĠi) pentru transferul dintre cache úi circuitele externe.
94
ARHITECTURA SISTEMELOR DE CALCUL
Spre deosebire de EDRAM, păUĠile CDRAM asociază atât cache-ului, cât úi DRAM-ului principal, aceeaúi adresă, astfel încât acestea operează independent una faĠă de cealaltă, putând fi adresate separat. Memoria cache este suficient de rapidă pentru a transfera date în mod burst, la o frecvenĠă de 100 MHz. Cipul permite celor două buffer-e să funcĠioneze independent, deci, pot lucra în flux continuu. MDRAM (Multibanc DRAM) Principiul de lucru este următorul: în locul unui bloc de celule, fiecare celulă este adresată prin numărul liniei úi al coloanei. Memoria DRAM produsă de MoSys Inc. desparte informaĠia stocată într-un număr de bancuri de memorie separate. În modelul MDRAM iniĠial de 4 MB, fiecare din cele 16 bancuri de memorie Săstrează 256 KB, ele fiind legate printr-o magistrală centrală de date, care accesează fiecare banc individual. Acest model permite unui banc de memorie să trimită sau să primească o serie de date printr-un singur ciclu de ceas úi să comute la un alt banc pentru un alt transfer. Deoarece fiecare banc de memorie dispune de o interfaĠă de 32 biĠi care lucrează la fel ca SDRAM, cipurile MDRAM operează la viteze de transfer de până la 1 GB/s. RDRAM (Rambus DRAM) Modelul Rambus foloseúte un cache RAM static de 2.048 octeĠi, care se leagă la memoria dinamică printr-o magistrală de lăĠime foarte mare, permiĠând transferul unei pagini de memorie în cache într-un singur ciclu. Cache-ul este destul de rapid, furnizând date la un timp de acces de 15 ns. Memoria Rambus nu este implementată pe calculator ca o memorie standard. Ea foloseúte o magistrală specială de înaltă viteză. Indiferent de legătura cu microprocesorul, lăĠimea magistralei dintre controlerul de memorie úi cipul Rambus este de 1 octet. Rambus operează la frecvenĠe între 250 úi 800 MHz, modelul permiĠând transferul a doi octeĠi la fiecare ciclu de ceas: unul pe frontul crescător, iar al doilea pe frontul descrescător al impulsului de ceas. Accesul la memorie se face în mod inteligent, incluzând funcĠia de preîncărcare a datelor, iar citirea acestora se face în pachete mici, la viteze ridicate ale semnalului de ceas. Viteza Rambus este izolată de microprocesor úi rămâne constantă indiferent de viteza microprocesorului. Rata de transfer maximă poate atinge 1,6 GB/s. Viteza ridicată a Rambus-ului impune limite în proiectarea unui sistem de memorie: magistrala trebuie să fie scurtă úi poate suporta doar 32 de cipuri sau 10 module de memorie Rambus, un modul conĠinând 32 de cipuri Rambus. O viteză de peste 500 MB/s a magistralei poate să inducă interferenĠe; pentru a le minimiza, Rambus funcĠionează la 2 V, cu oscilaĠii de 300 mV. Rambus operează ca o mică reĠea, trimiĠând date în pachete cu o lungime de până la 256 octeĠi. Modelul este schimbat radical úi cere o modificare importantă a tipului de calculator pe care se instalează, fiind deocamdată util pentru sisteme care includ integrare video. O colaborare între Intel úi Rambus s-a materializat în 1999 printr-un DRAM care operează la 100 MHz, pe calculatoare de 64 de biĠi. În figura 3.25 este prezentată arhitectura unui cip de memorie RDRAM cu capacitatea de 32 MB.
Structura unui calculator
95
Fig. 3.25. Cip de memorie RDRAM de 32 MB.
$úa cum se observă din figură, unul din atu-urile memoriei RDRAM este că fiecare cip de memorie poate conĠine până la 32 de bancuri de memorie. Aceste bancuri sunt individuale úi aparĠin riguros aceluiaúi cip, spre deosebire de bancurile SDRAM, care sunt împrăútiate printre mai multe cipuri de memorie. Revenind la diagramă, fiecare banc de memorie are dimensiunea de 1 MB, ceea ce face ca întregul cip să aibă o capacitate de 32 MB. Fiecare banc reprezintă o matrice DRAM organizată în 512 linii a câte 128 dualocĠi (dualoctul este cea mai mică unitate de memorie adresabilă de către RDRAM). Fiecare dualoct conĠine 16 octeĠi úi, deci, dimensiunea totală a liniilor matricei este de 2 KB. În mod ideal, se poate păstra activă câte o linie din fiecare din cele 32 de bancuri, pentru a maximiza úansele de a primi datele dintr-o linie activă. În realitate, însă, pot exista numai 16 bancuri deschise simultan sau, mai precis, doar jumătate din bancurile existente pe cip. Figura 3.26 prezintă două operaĠii: una de citire úi cealaltă de scriere din/în memorie, pentru a ilustra lucrul simultan cu doar jumătate din bancurile disponibile. Modul de funcĠionare este următorul. Atunci când procesorul citeúte un dualoct de 16 octeĠi dintr-un banc, datele respective păUăsesc bancul úi pătrund în amplificatoarele de semnal (numerotate), care sunt plasate de o parte úi de alta a bancurilor de memorie. Data Aúi Data B reprezintă două jumăWăĠi ale unui dualoct (cu 8 octeĠi fiecare), care păUăsesc bancul de memorie pe căi separate, aúa cum se observă în figura 3.26. Cele două magistrale care încadrează bancurile de memorie au fiecare o OăĠime de 8 octeĠi, deci jumătatea dualoctului reprezentată de Data A se va transfera pe magistrala din dreapta, iar cea reprezentată de Data B pe magistrala din stânga. Deúi pe diagramă pare că fiecare banc este conectat la 4 amplificatoare de semnal, de fapt, fiecare pereche de căsuĠe cu aceeaúi etichetă (0/1, 1/2 etc.) plasată la stânga úi la dreapta unui banc constituie un singur amplificator de semnal.
96
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.26. O operaĠie de citire úi o operaĠie de scriere din/în memoria RDRAM.
Deoarece un număr prea mare de amplificatoare ar mări considerabil suprafaĠa pastilei de memorie, fiecare banc de memorie împarte cele două amplificatoare adiacente cu bancurile vecine lui. De exemplu, amplificatoarele 0/1 úi 1/2 sunt conectate la bancurile 0, 1 úi 2. În acest fel, se micúorează suprafaĠa cipului, ceea ce duce la o reducere a costului. Existăúi excepĠii, iar acestea sunt bancurile 0, 15, 16 úi 31, care sunt conectate fiecare la câte un singur amplificator dedicat úi, ca atare, trebuie să aútepte ca un singur banc vecin să îúi termine activitatea pentru a deveni active. Faptul că două bancuri de memorie ajung să împartă un singur amplificator de semnal (sense amp) reprezintă motivul pentru care numai jumătate din bancurile unui cip pot fi active simultan. Chiar úi aúa, numărul bancurilor de memorie active ale unui modul RDRAM este mult mai mare faĠă de cel al unui modul SDRAM. De exemplu, pentru un singur modul RIMM cu 4 cipuri, există 32 de bancuri pe cip úi, deci, 128 de bancuri, dintre care 64 active simultan pentru întregul modul. Acest număr ridicat de bancuri de memorie reprezintă explicaĠia pentru lărgimea de bandă úi frecvenĠele foarte mari (400 MHz, 533 MHz) cu care operează memoriile SDRAM. Referitor la ultima diagramă prezentată, mai trebuie făcute două precizări: fiecare amplificator de semnal are úi o capacitate proprie de stocare de 1024 de octeĠi, el fiind un buffer între bancul de memorie úi magistrala sistemului; cele două magistrale de 8 octeĠi amintite anterior sunt divizate numai conceptual, în realitate formând o singură magistrală cu lăĠimea de 16 octeĠi. Schema din figura 3.27 ilustrează diferenĠele dintre un sistem de memorie bazat pe RDRAM úi unul bazat pe SDRAM. Se observă că la RDRAM cipurile sunt ataúate unor module de memorie RIMM, aúa cum memoria SDRAM este organizată în module DIMM.
Structura unui calculator
97
98
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.28. Elementele de bază ale unui sistem de memorie RDRAM.
Fig. 3.27. DiferenĠele dintre sistemele de memorie RDRAM úi SDRAM.
DiferenĠa constă în faptul că RIMM-urile sunt ataúate plăcii de bază în mod serial, neputând exista sloturi de memorie goale. Dacă nu există suficiente module de memorie RIMM propriu-zise, sloturile de memorie de pe placa de bază rămase libere vor trebui completate cu module de continuitate, pentru a permite canalului Rambus săúi atingă rezistenĠa de sarcină (terminaĠia). Din punct de vedere teoretic, pot exista oricâte canale Rambus independente într-un sistem, fiecare cu o lărgime de bandă de 1,6 GB/s, dar, în practică, numărul canalelor este limitat din considerente de design al plăcilor de bază. Un alt factor care complică designul unui subsistem de memorie Rambus este dat de faptul că semnalului de ceas provenit de la controlerul de memorie îi este necesar un timp atât de ridicat pentru a ajunge la cel mai depărtat modul RIMM din sistem, încât poate fi defazat de mai multe ori, faĠă de semnalul ajuns la primul modul RIMM. Din acest motiv, canalul Rambus suportă până la cinci domenii pentru semnalul de ceas, doar pentru a putea păstra o sincronizare între transferurile pe magistrala de memorie. Aceste schimbări ale domeniilor de tact complică însă úi mai mult arhitectura sistemului de memorie Rambus, prezentată în figura 3.28.
DDR SDRAM (Double Data Rate Synchronous DRAM) Acest tip de memorie transferă date pe ambele fronturi (crescător úi descrescător) al semnalului de ceas. În felul acesta, viteza rezultată în transferul datelor este dublă (Double Data Rate) faĠă de o memorie SDRAM. DDR SDRAM se montează pe acelaúi tip de socluri, dar are nevoie de un nou cip-set. FaĠă de RDRAM, DDR SDRAM prezintă următorul dezavantaj: dacă datele solicitate nu există în cache, conĠinutul curent al acestuia este vărsat în DRAM-ul integrat pe cip, este accesată o altă paginăúi abia apoi are loc citirea din memorie. Avantajele DDR SDRAM faĠă de RDRAM sunt preĠul úi faptul că rata de transfer RDRAM este aproximativ 60–70% din rata DDR SDRAM (datorită faptului că lucrează pe 16 biĠi, faĠă de DDR SDRAM, care lucrează pe 64 de biĠi). Deoarece memoria DDR SDRAM este o variantă evoluată a SDRAM-ului, felul în care interacĠionează cu magistrala de memorie este foarte asemăQător celui al predecesoarei sale, cu excepĠia faptului că la DDR SDRAM se transferă două cuvinte de date într-o perioadă de ceas. Figura 3.29 prezintă funcĠionarea unui sistem de memorie format din 3 DIMM-uri, fiecare cu 4 bancuri de memorie pe 64 de biĠi. În figură sunt marcate blocurile de date de 64 de biĠi (alcătuite din 4 pachete de câte 16 biĠi), blocuri trimise de bancurile de memorie către procesor în timpul unei operaĠii de citire. SăgeĠile indică sensul parcurs de date pe magistrala de memorie la care sunt conectate DIMM-urile. În cazul unei operaĠii de scriere, sensul ar fi, evident, invers (CPU–memorie). Evaluarea modulelor DDR SDRAM se face într-un mod diferit de SDRAM, principalul criteriu nemaifiind frecvenĠa, ci lărgimea de bandă maximă oferită teoretic úi care se exprimă în MB/s. Standardele uzuale actuale sunt PC1600, PC2100 úi PC2400. Primul are o frecvenĠă de 2100 MHz (datorită transmisiei datelor pe ambele fronturi ale semnalului). Lărgimea de bandă de 1600 MB/s se obĠine înmulĠind lăĠimea căii de date (64 de biĠi) cu frecvenĠa memoriei (200 MHz) úi împăUĠind la numărul de biĠi dintr-un octet (8). Similar, pentru PC2100 frecvenĠa este 2133MHz, adică, 266 MHz, iar pentru PC2700, frecvenĠa este de 333 MHz.
Structura unui calculator
99
100
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.30. Citirea în rafale la DDR2 SDRAM.
Fig. 3.29. Sistem de memorie DDR SDRAM cu 3 DIMM-uri a câte 4 bancuri pe 64 de biĠi.
DDR2 SDRAM (Double Data Rate Two Synchronous DRAM) Memoriile DDR2 fac parte din familia memoriilor SDRAM, reprezentând o îmbunăWăĠire a memoriilor DDR SDRAM. Unul dintre principalele avantaje ale DDR2-ului este abilitatea acestuia de a opera cu magistrala de date externă de două ori mai repede decât DDR. Acest lucru este obĠinut prin îmbunăWăĠirea semnalizării magistralei úi prin operarea celulelor de memorie la jumătate din frecvenĠa de ceas (un sfert din rata de transfer a datelor). Dacă memoria DDR2 ar opera la aceeaúi frecvenĠă de ceas ca DDR, ar asigura aceeaúi lărgime de bandă, dar ar avea o întârziere semnificativ mai mare. Ca úi în cazul DDR, datele din memoriile DDR2 sunt transferate atât pe frontul crescător, cât úi pe frontul descrescător al ceasului. DiferenĠa principală dintre DDR úi DDR2 este aceea că în cazul DDR2 magistrala este sincronizată la de două ori frecvenĠa la care lucrează celulele de memorie, astfel încât pot fi transferaĠi 4 biĠi de date într-un ciclu al celulei de memorie, conform diagramei de timp din figura 3.30. FrecvenĠa magistralei DDR2 este crescută prin unele îmbunăWăĠiri la interfaĠa electrică, folosirea tehnologiei on-die termination sau folosirea unor buffer-e de preîncărcare. Buffer-ul de preîncărcare în cazul DDR2 are o adâncime de 4 biĠi, spre deosebire de doi biĠi în cazul DDR. Din păcate, implementarea tuturor acestor tehnologii au dus la o creútere a întârzierilor. Dacă în cazul DDR apare o întârziere între douăúi trei cicluri ale magistralei de date, DDR2 poate avea întârzieri de 4 până la 6 cicluri. Acesta este motivul care a făcut necesar ca magistrala să lucreze la o frecvenĠă de două ori mai mare.
Un alt cost cauzat de creúterea vitezei este necesitatea încapsulării cipurilor în capsule mai scumpe úi mai dificil de asamblat, cum ar fi BGA (Ball Grid Array). Schimbarea capsulelor a fost necesară pentru a menĠine integritatea semnalului la viteze mai mari. Din punct de vedere al consumului de energie, DDR2 a mai făcut un pas înainte, necesitând numai 1,8 V faĠă de 2,5 V, cât era necesar pentru DDR. Consumul de energie poate fi redus chiar úi mai mult, prin reducerea frecvenĠei în situaĠiile în care nu este necesară o rată de transfer foarte mare. Tensiunea maximă recomandată este 1,9 V, fiind chiar interzisă depăúirea acesteia în situaĠiile în care stabilitatea memoriei este un factor cheie. Totuúi, modulele de memorie ar trebui să reziste până la 2,3 V, înainte ca memoria să fie complet distrusă. Pentru folosirea în calculatoarele personale, memoriile DDR2 vin sub forma unor module DIMM cu 240 de pini, identificate, de obicei, după rata maximă de transfer. Cele úase standarde pentru modulele DDR2 sunt prezentate în tabelul 3.2. Tabelul 3.2 Standardele pentru modulele de memorie DDR2 Numele standardului
FrecvenĠa memoriei (MHz)
Perioada ceasului (ns)
FrecvenĠa magistralei I/O (MHz)
Transferuri de date pe sec. (mil.)
Numele modulului
Rata max. de transfer (MB/s)
DDR-400
100
10
200
400
PC-3200
3200
DDR-533
133
7,5
266
533
PC-4200
4266
DDR-667
166
6
333
667
PC-5300
5333
DDR-800
200
5
400
800
PC-6400
6400
DDR-1066
266
3,75
533
1066
PC-8500
853
DDR-1300
325
3,1
650
1300
PC-10400
10400
Structura unui calculator
101
DIMM-urile DDR2 nu au fost proiectate să fie compatibile cu modulele DDR. Cheia de siguranĠă la DDR2 se află în altă poziĠie, iar densitatea pinilor (240 pentru desktop, 200 pentru notebook) este uúor mai mare decât în cazul DDR (184). Modulele DDR2 mai rapide sunt compatibile cu modulele DDR2 mai lente, însă magistrala va funcĠiona la viteza celui mai lent modul. DDR3 SDRAM (Double Data Rate Three Synchronous DRAM) Memoriile DDR3 sunt o îmbunăWăĠire a modelului precedent de memorii, DDR2. Principala diferenĠă între cele două constă în faptul că magistrala I/O DDR3 funcĠionează la o frecvenĠă de patru ori mai mare decât celulele de memorie. În plus, DDR3 permite cipuri de capacitate de la 512 Mb până la 8 Gb, ceea ce duce la posibilitatea obĠinerii de module de până la 16 GB. Memoriile DDR3 promit o reducere a consumului de energie cu 17%, tehnologia de 90 nm folosită în fabricarea cipurilor DDR3 având nevoie de o tensiune de 1,5 V (faĠă de 1,8V pentru DDR2 sau 2,5 V pentru DDR). Unii producători propun utilizarea tranzistorilor dual-gate, tehnologie care ar permite reducerea úi mai mare a scurgerilor de curent. Tensiunea maximă recomandată pentru DDR3 este 1,575 V. În mod normal, memoriile ar trebui să reziste până la 1,975 V, făUă a suferi o distrugere totală, deúi, cel mai probabil, nu vor funcĠiona corect la acest nivel. Principalul avantaj al memoriilor DDR3 este dat de lărgimea de bandă. Creúterea acesteia a fost posibilă úi datorită buffer-ului de preîncărcare, a cărui adâncime a fost mărită de la 4 biĠi, cât era în cazul DDR2, la 8 biĠi. Această dublare a dimensiunii buffer-ului este spectaculoasă, în comparaĠie cu celelalte mici incrementări ale dimensiunii care au avut loc anterior. Redimensionarea buffer-ului are un cuvânt greu de spus în ceea ce priveúte întârzierea semnalului CAS. Teoretic, modulele DDR3 pot transfera date la o frecvenĠă de 800–1600 MHz, folosind ambele fronturi ale tactului I/O, cu frecvenĠa de 400–800MHz. DIMM-urile DDR3 au acelaúi număr de pini ca modulele DDR2 (240), având úi aceleaúi dimensiuni, dar, cu toate acestea, sunt incompatibile din punct de vedere electric, iar cheia de securitate este situată în altă poziĠie. Cele patru standarde pentru modulele DDR3 sunt prezentate în tabelul 3.3. Tabelul 3.3 Standardele pentru modulele de memorie DDR3 Numele standardului
FrecvenĠa memoriei (MHz)
Perioada ceasului (ns)
FrecvenĠa magistralei I/O (MHz)
Transferuri de date pe sec. (mil.)
Numele modulului
Rata max. de transfer (MB/s)
DDR3-800
100
10
400
800
PC-6400
6400
DDR3-1066
133
7,5
533
1066
PC-8500
8533
DDR3-1333
166
6
667
1333
PC-10600
10667
DDR3-1600
200
5
800
1600
PC-12800
12800
102
ARHITECTURA SISTEMELOR DE CALCUL
O tehnologie complet nouă, folosită pentru prima dată în cazul DDR3, este topologia Fly-By. GeneraĠiile anterioare de SDRAM, inclusiv DDR2, utilizau o topologie stea pentru a împăUĠi datele spre mai multe căi de semnal. Topologia FlyBy utilizează o singură legătură directă către toate componentele DRAM, ceea ce permite un răspuns mult mai rapid din partea sistemului. Motivul pentru care DDR2 nu s-a putut dezvolta mai mult decât a făcut-o nu se datorează atât procesului de fabricaĠie, care ar fi trebuit rafinat mai mult, cât unor limitări mecanice. În esenĠă, DDR2 nu este pregătit să atingă viteze mai mari. Teoretic, acest lucru ar fi posibil, dar, practic, tehnologia mecanică dezvoltată până azi nu permite acest lucru. La frecvenĠe mai mari, DIMM-ul începe să întâmpine probleme în ceea ce priveúte integritatea semnalului. În cazul topologiei stea folosite de DDR2, această problemă s-ar rezolva dacă s-ar reuúi echilibrarea tuturor ramurilor. Din păcate, efortul necesar pentru a face acest lucru este peste limitele fizice din ziua de azi. Pentru DDR3, integritatea semnalului este rezolvată la nivelul fiecărui modul DRAM, în locul încercării unei echilibrări la nivelul întregii platforme de memorie. Acum, atât adresele, cât úi semnalele de control, sunt transmise pe aceeaúi cale. Practic, topologia Fly-By elimină limitările cauzate de echilibrarea mecanică folosită în DDR2, înlocuind-o cu un semnal automat de întârziere, generat de către controlerul de memorie. O altă inovaĠie prezentă la DDR3 constă în apariĠia unui pin de reset. Acest pin permite resetarea unui modul de memorie făUă resetarea întregului sistem, ceea ce duce la o scădere a timpului úi a energiei pierdute. De remarcat este úi prezenĠa unui senzor de temperatură, pentru prima dată la memoriile DDR, senzor care detectează momentul în care modulul se apropie de un anumit prag de temperaturăúi, în consecinĠă, poate scurta intervalele de refresh. Acest sistem de siguranĠă permite úi el o reducere a consumului de energie. Un alt element caracteristic DDR3 este sistemul XMP (eXtended Memory Profile). Acest sistem, implementat pe placa de bază, permite utilizatorului unei configuraĠii alcătuite dintr-un procesor Intel úi o memorie DDR3 să realizeze un overclocking foarte simplu. Doar prin selectarea unei anumite opĠiuni, sistemul va decide singur factorii de multiplicare, tensiunile úi frecvenĠele până la care poate fi forĠat ceasul pentru a câútiga un plus de performanĠă. XDR DRAM (eXtreme Data Rate DRAM) Memoriile XDR-RAM sunt considerate ca fiind succesorul memoriilor Rambus (RDRAM), fiind în concurenĠă directă cu DDR2, SDRAM úi GDDR4 (memoriile grafice pentru plăcile grafice din familia GeForce FX). XDR-ul a fost proiectat în special pentru sisteme mici, care necesită o lărgime de bandă ridicată, úi pentru sisteme GPU (Graphical Processing Unit) de top. Această tehnologie elimină problemele cauzate de întârzierile ridicate, prezente la primele modele RDRAM. De asemenea, XDR DRAM permite o lărgime de bandă per pin mult mai mare, ceea ce duce la scăderea costurilor de producĠie a plăcilor de circuite integrate. Scăderea costurilor este posibilă datorită faptului că sunt necesare mai puĠine căi de transmisie a datelor pentru aceeaúi lărgime de bandă.
Structura unui calculator
103
Dispozitivele XDR DRAM folosesc un nucleu DRAM cu 8 bancuri, implementate în tehnologie CMOS, având momentan o densitate de 512 Mb. Spre deosebire de alte dispozitive DRAM, dispozitivele 16 XDR DRAM implementează o lărgime programabilăúi suportă magistrale de 8, 4 sau chiar 2 biĠi. Elementele cheie ale arhitecturii XDR care permit performanĠe ridicate sunt: XDR DRAM este un circuit integrat de memorie de mare viteză, cu o interfaĠă care lucrează la 4 GHz, asigurând o lărgime de bandă de până la 8GB/s; Controlerul I/O, numit XIO în cazul XDR DRAM, asigură aceeaúi viteză ridicată ca la DRAM, aducând úi unele îmbunăWăĠiri (tehnologia FlexPhase); Controlerul de memorie XMS este optimizat pentru a profita de inovaĠiile aduse de XDR, cum ar fi tehnologia Dynamic Point-to-Point, care permite o extindere a capacităĠii, păstrând în acelaúi timp úi integritatea ridicată a semnalului, caracteristică modelului Point-to-Point; Generatorul de tact, XCG, asigură patru ieúiri programabile, care garantează semnalele de tact pentru XIO úi alte dispozitive XDR DRAM. Celula XIO este un controler I/O performant cu întârzieri reduse, care foloseúte un sistem de semnalizare pe 8 biĠi, la o frecvenĠă de până la 4 GHz, permiĠând o lărgime de bandă de până la 8 GB/s de la un singur dispozitiv XDR DRAM. XIO poate fi configurat să suporte mai multe dispozitive, asigurând astfel Oărgimea de bandă necesară aplicaĠiilor grafice sau altor aplicaĠii. XIO este compus din unul până la 12 blocuri de cerere a magistralei (RQ – ReQuest bus block), un bloc de control (CTL) úi un număr variabil de blocuri de date de 8 sau 9 biĠi – în cazul memoriilor cu cod corector de erori (DQ). Blocul RQ asigură subsistemelor memoriei informaĠiile referitoare la adrese úi control. Blocul CTL asigură accesul la registre, iniĠializarea, întreĠinerea úi testarea funcĠiilor sistemului. Un bloc DQ este capabil să primeascăúi să transmită date cu o frecvenĠă de până la 4 GHz. Memoriile XDR DRAM vin sub forma unor module XDIMM, specifice Rambus (vezi figura 3.31). Acestea oferă flexibilitate în ceea ce priveúte upgradeul, o capacitate ridicată úi performanĠă ridicată, esenĠială în cazul serverelor, de exemplu. Datorită tehnologiei Dynamic Point-to-Point, XDIMM-urile pot fi instalate atât în configuraĠie single-channel, cât úi în configuraĠie dual-channel, Săstrând întreagă lărgimea de bandă a sistemului úi conservând integritatea semnalului, caracteristică topologiei Point-to-Point. O altă inovaĠie tehnologică adusă de XDR este tehnologia DRSL (Differential Rambus Signaling Level). Această tehnologie presupune un standard de semnalizare de joasă tensiune, joasă putere, diferenĠial, care permite o magistrală scalabilă, multi-GHz, bidirecĠională, de tip Point-to-Point, care conectează celula XIO la dispozitivele XDR DRAM. XDR foloseúte úi standardul RSL (Rambus Signaling Level), dezvoltat iniĠial pentru RDRAM, standard care permite conectarea a până la 36 de dispozitive într-un mod sincron, adresate prin intermediul unei magistrale úi comandate prin niúte semnale. Sistemul de memorie Rambus XDR satisface nevoile computaĠionale din numeroase domenii, cum ar fi computere grafice, servere, reĠelistică sau electronică de larg consum.
104
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.31. Modul de memorie XDIMM.
eDRAM (embedded DRAM) eDRAM reprezintă o memorie dinamică cu acces aleator, capacitivă, integrată în mod uzual în acelaúi pachet cu procesorul, spre deosebire de modulele DRAM externe úi SRAM-urile utilizate tipic pentru memorii cache. Împachetarea permite folosirea de magistrale mult mai mari úi o viteză sporită a operaĠiilor. Datorită unei densităĠi mult crescute pentru DRAM în comparaĠie cu SRAM, pot fi utilizate cantităĠi mai mari de memorie. DiferenĠa în procesul de fabricaĠie determină dificultatea integrării pe aria cipului procesorului, astfel încât mai multe circuite integrate de pe arie trebuie împachetate într-un chip, ridicând costul. Cele mai recente dezvoltări surmontează această limitare, utilizând procesarea CMOS standard pentru a fabrica eDRAM, ca în formatul de memorie 1T-SRAM (vezi paragraful următor). Memoria eDRAM este folosită într-o largă varietate de console de jocuri. Atât celula microprocesoare utilizată în PlayStation 3, cât úi cea pentru IBM Power, folosesc eDRAM la cache-ul L2, în nodul de procesare de 45 nm al IBM. 1T-SRAM (1 Transistor Static RAM) Tehnologia de fabricare a memoriilor 1T-SRAM, introdusă de către MoSys, oferă o alternativă la memoriile SRAM tradiĠionale, permiĠând o capacitate mai mare. Principala utilizare a memoriilor 1T-SRAM este în cazul sistemelor embedded (sisteme dedicate). MoSys a implementat o celulă de memorare cu un singur tranzistor, ca în cazul DRAM, dar această celulă este susĠinută de o reĠea de circuite care fac funcĠionarea memoriei să fie echivalentă celei a memoriilor SRAM (controlerul ascunde toate operaĠiile specifice memoriilor DRAM, cum ar fi preîncărcarea sau reactualizarea). În consecinĠă, memoriile 1T-SRAM au o interfaĠă standard SRAM de un ciclu úi sunt percepute de restul logicii sistemului exact ca orice altă memorie SRAM. Datorită celulei de memorare cu un tranzistor, varianta 1T-SRAM este mai mică decât SRAM-ul clasic, bazat pe celule de 6 tranzistori, fiind mai apropiată de eDRAM (embedded DRAM) în ceea ce priveúte dimensiunea úi densitatea (vezi figura 3.32). În acelaúi timp, 1T-SRAM oferă performanĠe comparabile cu SRAM, consumă mai puĠin decât eDRAM úi este realizată în tehnologie CMOS, ca SRAM-ul clasic.
Structura unui calculator
105
106
ARHITECTURA SISTEMELOR DE CALCUL
3. 1T-SRAM-R, care încorporează un sistem de corecĠie a erorilor (ECC). Celulele de memorie sunt mai mici, ceea ce duce automat la o rată mai mare de apariĠie a erorilor. Totuúi, sistemul ECC rezolvă această problemă. 4. 1T-SRAM-Q, care este o versiune quad-density, folosind un proces nestandard de fabricare a condensatoarelor, care permite înjumăWăĠirea dimensiunilor memoriei încă o dată faĠă de 1T-SRAM-R. Memoriile 1T-SRAM funcĠionează la viteze comparabile cu 6T-SRAM úi sunt semnificativ mai rapide decât eDRAM, modelul quad-density fiind cu doar 10–15% mai mare. În majoritatea proceselor de fabricare a memoriei eDRAM este necesară parcurgerea unor paúi suplimentari úi costisitori, depăúind astfel destul de mult costul de producĠie al memoriei 1T-SRAM. Memoriile 1T-SRAM sunt disponibile úi sub formă de circuite integrate. Nintendo GameCube a fost prima platformă care a folosit 1T-SRAM ca sistem principal de stocare a datelor. De asemenea, memoria 1T-SRAM a fost folosită în urmaúul lui GameCube, consola Nintendo’s Wii.
Fig. 3.32. ComparaĠie între celula 1T-SRAM úi celula SRAM cu 6 tranzistori.
MoSys prezintă 1T-SRAM ca fiind soluĠia ideală pentru aplicaĠiile bazate pe SOC-uri (System-On-a-Chip – se încearcă integrarea tuturor componentelor unui computer sau a unui sistem electronic într-un singur circuit integrat), cum ar fi microcontrolere, DSP-uri, blocuri de memorie, timer-e, regulatoare de tensiune etc. Memoriile 1T-SRAM sunt organizate sub forma unei matrice de mici bancuri de memorie (în general, 128 linii a câte 256 de biĠi fiecare, rezultând un total de 32 Kb) conectate la o memorie cache de dimensiunea unui banc úi la un controler de memorie. Chiar dacă, în comparaĠie cu DRAM, 1T-SRAM este ineficient în ceea ce priveúte spaĠiul, lungimea mai mică a cuvintelor permite atingerea unor viteze mult mai mari, reuúindu-se astfel realizarea unui ciclu RAS la fiecare acces. Fiecare acces se face la câte un banc, permiĠând astfel bancurilor nefolosite să fie reactualizate în acelaúi timp. În plus, fiecare linie citită este copiatăúi în memoria cache. În eventualitatea unor accesări repetate la acelaúi banc, există două variante: fie sunt accesate linii diferite, caz în care toate liniile vor fi reactualizate automat, fie aceeaúi linie este accesată de mai multe ori. În cazul celei de-a doua variante, următoarele citiri se vor face din memoria cache, acordându-se astfel timpul necesar pentru realizarea reîmprospăWării. Până în prezent (mai 2008), au fost lansate patru generaĠii de memorii SRAM cu un tranzistor: 1. 1T-SRAM original, care are o dimensiune de două ori mai mică decât 6T-SRAM úi consumă mai puĠin de 50% faĠă de acesta. 2. 1T-SRAM-M, care este o variantă cu un consum mult mai mic în modul stand-by, fiind proiectată pentru uzul în sisteme portabile, de genul telefoanelor mobile.
QDR II SRAM (Quad Data Rate II Static Random Access Memory) QDR este o memorie SRAM echipată cu un pin pentru intrarea datelor úi un pin separat pentru ieúirea datelor, spre deosebire de SRAM standard, în care cei doi pini sunt comuni. QDR permite introducerea úi extragerea datelor pe ambele fronturi (DDR – Double Data Rate), ducând astfel la obĠinerea unor viteze foarte mari pentru operaĠiile de scriere úi de citire, care se pot desfăúura simultan. În felul acesta, se poate realiza un transfer de până la patru cuvinte la fiecare ciclu de ceas, cu o latenĠă foarte mică. Acest tip de memorie este ideal pentru sistemele de comunicaĠii úi reĠelistică, cum ar fi router-e sau switch-uri. Pentru a veni în întâmpinarea tendinĠelor din acest domeniu, QDRII SRAM utilizează porturi I/O la o viteză foarte ridicată prin tehnologia HSTL (High Speed Transceiver Logic), suportată de toate sistemele de networking de nouă generaĠie (vezi figura 3.33). Din punct de vedere al consumului de energie, memoriile QDR se situează foarte bine, necesitând doar 1,8 V pentru nucleul memoriei úi 1,4 V pentru pinii de intrare/ieúire. Acest aspect este extrem de important în domeniul pentru care sunt concepute să funcĠioneze aceste memorii.
Fig. 3.33. Arhitectura QDR II SRAM.
Structura unui calculator
107
108
ARHITECTURA SISTEMELOR DE CALCUL
Memoriile QDR II sunt prevăzute cu două generatoare de semnale de ceas, unul pentru intrare, celălalt pentru ieúire. Astfel, intrarea úi ieúirea pot fi foarte uúor defazate. Memoriile QDR II vin sub forma unor FPGA-uri de 13 15 1 mm. O memorie QDR II hotăUăúte dacă va efectua o operaĠie de scriere sau de citire, în funcĠie de starea în care se află pinii de citire (R#) úi de scriere (W#) la momentul în care ceasul se află pe front crescător. Pentru a da o comandă de citire, R# trebuie să fie la nivelul 0 (vezi figura 3.34), iar pentru a da o comandă de scriere, R# trebuie să fie la nivelul 1 úi W# la nivelul 0 (vezi figura 3.35).
Fig. 3.36. Formatul ciclic al diagramei de timp pentru memoria SGRAM.
Fig. 3.34. OperaĠia de citire la QDR II.
Fig. 3.35. OperaĠia de scriere la QDR II.
SGRAM (Synchronous Graphics RAM) FuncĠionarea memoriei SGRAM este asemăQătoare celei de la memoria SDRAM. FuncĠia principală a memoriei SGRAM este aceea de a stoca úi citi date simultan în zona de memorie. Deoarece este o memorie de tip DRAM, trebuie să dispună de o reîmprospătare periodică, pentru a citi úi a scrie date eficient úi rapid. Astfel, au fost introduse funcĠii speciale, care specifică adresele grafice necesare aplicaĠiilor. Aceste funcĠii sunt selectate prin folosirea unor registre speciale, dar úi prin folosirea unor pini speciali.
La fel ca în cazul memoriei SDRAM, toate semnalele de intrare sunt înregistrate pe frontul crescător al semnalului de ceas (vezi figura 3.36). Formatul SGRAM conceput de IBM poate citi sau scrie un număr de locaĠii dintr-un burst de 1, 2, 4, 8 octeĠi sau chiar o pagină de memorie. Odată ce un rând este activ, mai este necesară doar adresa coloanei. Există un contor în structura sa internă, care număUă fiecare locaĠie de memorie, după ce au fost introduse datele. Dacă parametrii de citire úi scriere sunt înregistraĠi, memoria continuă să introducă date până când toate spaĠiile sunt completate sau până când apar secvenĠe de întrerupere. Pentru a face trecerea pe un nou rând, acesta trebuie să fie pregătit úi astfel va deveni activ. VRAM (Video RAM) Problemele de acces la memorie apar cu precădere în sistemele video la care memoria este folosită ca un buffer de cadru pentru imaginea de pe ecran, aceasta fiind înmagazinată sub formă digitalăúi alocată pentru fiecare element al imaginii. Întregul conĠinut al buffer-ului este citit de la 44 la 75 de ori pe secundă. Între timp, calculatorul poate încerca să scrie o nouă informaĠie în buffer, pentru ca aceasta să apară pe ecran. Cu memorii DRAM obiúnuite, aceste operaĠii de citire úi scriere nu pot apărea simultan, una trebuie să o aútepte pe cealaltă, timpul de aúteptare afectând în mod negativ performanĠele video, viteza sistemului úi răbdarea utilizatorului. $úteptarea poate fi evitată prin introducerea unui cip special de memorie, care să aibă două căi (dual ported) pentru accesul fiecărei locaĠii. O astfel de memorie permite scrierea úi citirea simultană. Cipurile de memorie video VRAM permit citirea úi scrierea aleatorie la un port, în timp ce la celălalt port se permite doar citirea secvenĠială, care corespunde nevoilor de scanare a unei imagini video. Dezavantajul principal al tehnologiei VRAM este că aceasta este mai scumpă. Folosind însă memorii VRAM, se poate mări viteza sistemului video cu aproximativ 40%.
Structura unui calculator
109
Pentru a trimite úiruri de date către monitor cu o viteză ridicată, memoria VRAM include o serie de registre numite SAM (Serial Access Memory), legate la un port serial. Acest port este conectat la un controler D/A de viteză foarte mare. Memoria VRAM are o interfaĠă DRAM complet separată de portul serial. În timp ce unele date sunt citite cu ajutorul portului serial, altele sunt citite sau stocate din aria DRAM printr-un port DRAM. Formatul VRAM prezintă câteva caracteristici realizate special pentru a creúte flexibilitatea în aplicaĠiile grafice. WRAM (Windows RAM) Un model VRAM cu două porturi este WRAM (elaborat de Samsung), util în sistemele video proiectate să asiste o interfaĠă grafică gen Windows. Cipul de bază WRAM păstrează 1 MB aranjat în plane de 32 de biĠi, fiecare fiind compus din 512 512 celule. Trei cipuri asigură memoria necesară pentru a afiúa o rezoluĠie de 1024 768, 1024 1024 úi pentru operare în True Color pe 24 biĠi. Intern, o magistrală de date de 256 de biĠi leagă fiecare plan de biĠi cu controlerul logic intern al cipului care multiplexează datele pe 32 de biĠi, compatibile cu circuitele din calculator. Pentru a furniza date în scopul scanării video, cipul conĠine două registre serie. Cipul încarcă unul din registre, iar din celălalt extrage datele, comutând între ele în momentul în care registrul al doilea se goleúte. Cipul conĠine patru registre de 32 de biĠi, două pentru înmagazinare úi pentru culorile de fundal, iar celelalte două pentru control úi măúti. Cu o rată de transfer de până la 640 MB/s, modelul WRAM poate mări viteza sistemului cu 50 % în comparaĠie cu VRAM. ObservaĠie. Formatul Windows RAM nu are legătură cu Microsoft Windows.
3.2.10. Verificarea prin controlul parităĠii Revenind la caracteristicile generale ale memoriei, pe majoritatea plăcuĠelor de memorie se află instalate 9 cipuri (pentru memoriile paritare), primele opt având rol de memorie efectivă de lucru (8 biĠi – de la 0 la 7), iar cel de-al 9-lea fiind numit cip de paritate (parity cip), cu rol de testare a stării de funcĠionare a celorlalte 8 cipuri, prin verificarea parităĠii memoriei. Paritatea memoriei este de două tipuri: pară úi impară. Exemplu. Fie cazul unei memorii impare. Un rând de biĠi conĠine un număr impar de 1 (număr reĠinut în câmpul 9). Datele sunt cuprinse pe 8 biĠi (1 bit/cip). Când o dată este impară, bitul de paritate este 1. La pornirea sistemului, când se ajunge la etapa de verificare a memoriei, se verifică úi paritatea rândurilor de biĠi (parity check). Memoria fiind, conform exemplului, impară, trebuie să existe un număr impar de biĠi, în caz contrar sistemul semnalând o eroare de paritate (parity error) úi deci un cip (sau mai multe) este (sunt) defect(e). În cazul memoriei pare, procesul este identic cu cel anterior, doar că un rând de biĠi conĠine un număr par de 1.
110
ARHITECTURA SISTEMELOR DE CALCUL
Memoriile SIMM se prezintă constructiv cu 8 sau 9 cipuri pe plăcuĠă, după cum sunt cipuri paritare sau nu. Nu toate plăcile SIMM folosesc verificarea parităĠii, dar toate plăcile DIMM sunt prevăzute cu aceasta facilitate. Exemplu. SIMM-urile paritare pe 8 biĠi folosesc un bit de paritate (module pe 9 biĠi), iar cele pe 32 de biĠi folosesc 4 biĠi de paritate (module pe 36 biĠi, 8 4 = 32 biĠi + 4 1 = 4 biĠi de paritate). Există úi module de memorie care folosesc cipuri compuse, pe o plăcuĠă fiind prezente doar 2 sau 4 circuite integrate. În acest caz, în aceeaúi capsulă sunt prezente patru sau două cipuri de memorie. În cazul în care se folosesc module de memorie neparitare, va trebui dezactivată din CMOS opĠiunea de verificare a parităĠii memoriei, în caz contrar apărând erori. În nici un caz nu se pot folosi combinaĠii de module paritare cu module neparitare. În timpul funcĠionării sistemului, la detectarea unei erori de paritate este emisă o cerere de întrerupere (de către cipul specializat), care va avea ca rezultat final oprirea procesului aflat în execuĠie úi reluarea unei rutine BIOS care va afiúa un mesaj specific. Unele variante de microprocesoare au integrat un modul special de evaluare úi verificare a parităĠii memoriei. AnumiĠi producători ai cipurilor de RAM au abandonat verificarea parităĠii, deoarece creútea preĠul memoriei cu 10–15 %, la aceasta adăugându-se úi posibilitatea unei compactări a cipurilor utilă la calculatoare de tip notebook. Există însă úi calculatoare care au implementată o paritate falsă (fake parity), care emite un semnal ce atestă paritatea făUă să realizeze o verificare efectivă. Datorită faptului că cipurile care generează paritate falsă sunt mai ieftine, acestea sunt utile la calculatoarele care au implementat mecanismul de detectare a parităĠii. În general, modulele de memorie cu paritate falsă apar identice modulelor cu paritate. Singurul mod de a le identifica este folosind un tester pentru module de memorie. Deoarece modulele cu paritate falsă lucrează la nivel hard, programele obiúnuite de testare nu pot să le detecteze (conform cu Kingston Tehnologies, cipurile cu paritate falsă sunt marcate cu una din următoarele inscripĠii: BP, GSM, MPEC sau VT). Există însă procedee care pot efectua atât detecĠia, cât úi corecĠia unor erori. Un exemplu îl constituie procedeul ECC (Error Correction Code), care necesită biĠi suplimentari pentru fiecare octet memorat. Procedeul poate să localizeze bitul care este eronat, iar eroarea poate fi remediată (se mai numeúte tehnologie Error Detection And Correction – EDAC). Firma IBM foloseúte tehnologia ECC pe calculatoarele proiectate pentru a funcĠiona ca servere. Acest cod poate corecta automat orice eroare de 1 bit care apare într-un cuvânt de 64 de biĠi. În acest scop, memoria foloseúte cuvinte de cod de 72 de biĠi (64 biĠi de date + 8 biĠi de control). Această schemă are aceeaúi eficienĠă cu cea paritară (8/9 = 64/72), dar oferă corecĠie cu o robusteĠe mai mică, pentru că poate corecta o eroare la 64 de biĠi, spre deosebire de cealaltă schemă, care poate detecta o eroare la 8 biĠi.
Structura unui calculator
111
Procedeul ECC nu este mai costisitor de implementat, datorită creúterii dimensiunilor magistralelor; astfel, pentru microprocesoarele Pentium úi postPentium, care au magistrala de date de 64 biĠi, costul unei memorii cu verificare a parităĠii úi corecĠie este acelaúi. La fiecare acces la memorie, hardware-ul verifică dacă cuvântul de cod este corect; dacă nu, calculează automat cel mai apropiat cuvânt de cod, pe care apoi îl decodifică. Aceste operaĠii sunt destul de complicate, astfel încât un sistem cu memorii ECC merge cu aproximativ 5% mai lent decât unul cu memorii paritare.
3.2.11. Metodele de acces la memorie Un alt aspect care trebuie luat în considerare este timpul de acces al memoriei RAM folosite. După cum s-a mai spus, acesta sunt de ordinul zecilor de nanosecunde (cu excepĠia memoriilor SDRAM, care pot ajunge până la câteva nanosecunde), timp destul de mare, având în vedere vitezele de tact la care lucrează azi diversele procesoare. Pentru a scădea timpul de acces al memoriei RAM, se folosesc diverse metode de acces la memorie prin paginarea acesteia sau întreĠesere (Paging Mode sau Interleaving). Paginarea asigură o citire mai rapidă, datorită faptului că în cazul unei cereri de date din partea microprocesorului, acesta transmite cipului de memorie nu adresa datei cerute, ci adresa unei pagini care conĠine informaĠia dorităúi, în cadrul paginii, adresa datei solicitate (vezi capitolul 6). Automat, spaĠiul de căutare a informaĠiei este micúorat prin paginarea memoriei, iar timpul în care este accesată o informaĠie scade. ÎntreĠeserea presupune că procesorul desfăúoară o activitate paralelă de accesare pentru două bancuri de memorie (memoria este împăUĠită, după cum s-a mai spus, în cel puĠin două bancuri, bancul 0 úi bancul 1, care nu sunt accesate simultan). Timpul de citire din bancul 0 este folosit de memoria instalată în bancul 1 pentru operaĠia de reîmprospătare, apoi timpul în care procesorul citeúte din bancul 1 este folosit de bancul 0 pentru aceeaúi operaĠie de reîmprospătare. Acest lucru este posibil datorită faptului că microprocesorul accesează date, în general, de la adrese apropiate sau învecinate cu adresa citită anterior. Cum citirea este un proces secvenĠial, după citirea de la adresa k din bancul 0 urmează citirea de la adresa k+1 din bancul 1, citire care se efectuează foarte rapid (practic, instantaneu), deoarece operaĠia de refresh a bancului 1 a fost deja realizată. Se asigură astfel citirii o fluenĠă aproape perfectă. Această metodă are un dezavantaj: în cazul citirii din locaĠii succesive, doar pare sau doar impare (la citiri succesive din acelaúi banc datele sunt scrise – cele pare în primul banc, cele impare în cel de-al doilea banc), nu mai este timp de refresh între două citiri consecutive úi se vor introduce una sau două stări de Dúteptare ale procesorului (wait states), ceea ce determină încetinirea generală a vitezei sistemului. Plasarea plăcilor de memorie în bancuri separate este foarte utilă úi uneori obligatorie, existând modele de placă de bază care nici nu funcĠionează cu o singură plăcuĠă de memorie.
112
ARHITECTURA SISTEMELOR DE CALCUL
3.2.12. Memoria cache Datorită vitezei foarte mari cu care lucrează microprocesoarele, implicit úi fluxul de date úi informaĠii cerute de acestea va fi foarte intens. Dar, deoarece unele componente din lanĠul de transmisie a datelor sunt mai lente, în speĠă memoria de lucru RAM (prin necesitatea de a fi reîmprospătată) úi magistralele calculatorului (lente din principiu), acest flux de date cerut de procesor este mai puĠin rapid decât ar fi necesar (de exemplu, memoria RAM asigură un timp de acces de 60–120 ns, ceea ce este foarte mult faĠă de nivelul de câteva nanosecunde, timp cu care lucrează de obicei procesoarele pentru un anumit proces). Ca atare, între posibilităĠile de prelucrare a datelor de către microprocesor úi capacitatea RAM-ului úi magistralelor de a pune la dispoziĠia microprocesorului aceste date a apărut un decalaj foarte mare, ceea ce a dus în procesul de lucru al unui microprocesor la introducerea stărilor de pauză (wait states), astfel încât, prin execuĠia a unuia, a două sau chiar a patru cicluri de aúteptare, datele solicitate să aibă timp să ajungă la procesor. Practic, se întâmplă următorul lucru: microprocesorul lucrează fie cu datele necesare calculelor, fie cu comenzi. Cum datele úi informaĠiile necesare sunt cuprinse în memoria de lucru, microprocesorul citeúte memoria RAM, preluând anumite date, úi realizează calculele úi procesele cerute. Cum memoria este mult mai lentă în livrarea datelor faĠă de viteza cu care le poate prelucra microprocesorul, în funcĠionarea procesorului se introduc ciclurile de aúteptare despre care s-a vorbit anterior; cât timp aceste cicluri se execută, se permite datelor solicitate de procesor să fie localizate úi „extrase“ din RAM, depuse pe magistrala de date úi „transportate“ către microprocesor. În final, dacă se va înmulĠi timpul cât durează un ciclu de aúteptare cu milioanele de operaĠii pe secundă ale unui microprocesor, va rezulta o pierdere de timp substanĠială. Deci, era nevoie de o memorie de lucru ceva „mai aproape de microprocesor“ úi mult mai rapidă (ideal făUă să necesite operaĠii de reîmprospătare). De aceea, între microprocesor úi memoria de lucru a mai fost introdusă o componentă úi anume memoria cache, realizată din celule de tip SRAM, cu rol de memorie tampon. La rândul său, memoria cache a fost divizată fizic în două niveluri úi anume (vezi figura 3.37): memoria cache primară sau internă (primary level cache, L1) memoria cache secundară sau externă (secundary level cache, L2 / L3). Memoria cache internă este plasată chiar în capsula microproceso-rului, dar este de dimensiuni foarte mici, în general de la 8 KB (Pentium) până la 1 MB (Xeon). Memoria cache secundară este exterioară microprocesorului úi se montează pe placa de bază a sistemului. Este sub formă de cipuri (DIP) care se introduc în soclurile aferente, existând úi aici, ca úi la memoria RAM, 8 socluri pentru memoria cache de lucru úi un al 9-lea soclu pentru cipul de control al memoriei cache. Tipurile mai noi de cache sunt oferite sub formă de plachete asemenea SIMM-urilor. Plăcile de bază actuale au uzual cel mult 2 MB de memorie cache. Memoria cache este subordonată în activitatea ei unui controler de memorie cache (de exemplu, controlerul i82385) care va realiza gestiunea adreselor úi controlul operaĠiilor de citire/scriere.
Structura unui calculator
113
Fig. 3.37. Schema unei memorii cache într-un sistem Pentium: 1. microprocesor; 2. cache intern (un bloc de 8 KB); 3. cache intern (al doilea bloc de 8 KB); 4. cache extern; 5. cip de marcare a zonelor de memorie cache (TAG RAM); 6. memorie RAM.
Memoria cache internă Primul nivel de memorie cache (L1) se află integrat în microprocesor úi are o porĠiune destinată datelor úi instrucĠiunilor (codului) úi o alta destinată comenzilor. Cele două module de câte sunt complet separate úi lucrează independent. Dimensiunea memoriei cache interne creúte la procesoarele moderne. Acest tip de memorie îmbunăWăĠHúte mult performanĠele, deoarece – fiind în interiorul procesorului – transmisia de date este foarte rapidă, nefolosindu-se în acest caz magistralele externe, foarte lente. În plus, fiind o memorie de tip SRAM, nu necesită reîmprospătare úi dispune de un timp de acces extrem de scurt. Mai mult, la unele microprocesoare, cache-ul de date este împăUĠit în blocuri, iar controlerul de cache va găsi foarte rapid datele necesare, folosind o tabelă index, alegând exact blocul de memorie care le conĠine. Memoria cache externă Datorită dimensiunilor mici ale memoriei cache interne (limitele fiind impuse din considerente tehnice de construcĠie a microprocesoarelor) úi pentru a Pări úi mai mult performanĠele sistemelor de calcul, mai ales pentru a creúte úansele ca procesorul să găsească datele necesare în cache (cache hit) úi nu în RAM sau, mai rău, pe hard disk (cache miss), a fost introdus încă un nivel de memorie cache (L2 sau L3), de data aceasta în exteriorul microprocesorului, memorie care este ca dimensiuni cu mult mai mare decât memoria cache internă (de ordinul megaocteĠilor). Memoria cache externă este implementată pe placa de bază a sistemului. Este formată din cipuri de memorie de tip SRAM, foarte rapide, cu timpi de acces extrem de mici (4–15 ns). Exemplu. Pentru un procesor cu frecvenĠa internă de 166 MHz, va fi nevoie de o memorie cache cache cu timp de acces de 100/166 = 6,02 ns. Principiul de funcĠionare al unei memorii cache este sintetizat în figura 3.38.
114
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.38. Principiul memoriei cache.
3.2.12.1. Maparea memoriei cache Figura 3.39 prezintă schema logică a algoritmului de citire a memoriei cache.
Fig. 3.39. OperaĠia de citire a memoriei cache.
Structura unui calculator
115
O caracteristică de bază a memoriei cache este funcĠia de mapare (de translatare), care atribuie locaĠii din memoria cache blocurilor din memoria principală. Se pot utiliza patru tehnici: maparea directă; maparea asociativă; maparea asociativă pe seturi; maparea pseudo-asociativă. Cu ajutorul politicilor de înlocuire se află care locaĠie din memorie poate fi depozitată în cache úi în care locaĠie anume. Dacă politicile de înlocuire au libertatea de a alege orice locaĠie din cache pentru a păstra copia, cache-ul se numeúte (complet) asociativ. La extrema cealaltă, dacă fiecare porĠiune din memoria principală poate merge într-o singură locaĠie din cache, procedeul se numeúte mapare directă. Cele mai multe memorii cache implementează un compromis între cele două, numit mapare asociativă pe seturi. Exemplu. Se consideră o memorie cache de 1024 B (1 KB). Datele se transferă între memoria principală úi cache în blocuri de câte 8 octeĠi. Înseamnă că memoria cache are 128 de linii a câte 8 octeĠi fiecare. Memoria principală constă din 64 KB, fiecare octet fiind direct adresabil printr-o adresă de 16 biĠi. Se poate considera că memoria principală constă din 8 Kblocuri de câte 8 octeĠi fiecare. Deoarece există un număr mai mic de linii ale memoriei cache faĠă de numărul blocurilor memoriei principale, este necesar un algoritm pentru plasarea blocurilor memoriei principale în liniile memoriei cache. În plus, este necesar un mijloc de a determina care bloc al memoriei principale ocupă la un moment dat o linie a memoriei cache. Memoria cache cu mapare directă În cazul tehnicii celei mai simple, numită mapare directă, fiecare bloc al memoriei principale poate ocupa o singură linie posibilă a memoriei cache, aúa cum este reprezentat în figura 3.40. Maparea este: C = A mod L,
(3.5)
unde: C = numărul liniei din memoria cache; A = adresa din memoria principală; L = numărul de linii din memoria cache. Pentru exemplul considerat, L = 128 úi C = A mod128. FuncĠia de mapare poate fi implementată simplu, utilizând adresa de 16 biĠi. Cei 3 biĠi mai puĠin semnificativi, câmpul cuvânt (offset), identifică un cuvânt (octet) unic în cadrul unui bloc al memoriei principale. Restul de 13 biĠi specifică unul din cele 213 = 8 Kblocuri ale memoriei principale. Câmpul de 7 biĠi, numit linie sau index (slot), indică numărul blocului, modulo128. Astfel, blocurile 0, 128, 256, …, 8064 vor fi amplasate în linia 0; blocurile 1, 129, …, 8065 vor fi amplasate în linia 1, úi aúa mai departe, până la blocurile 127, 255, …, 8191, care vor fi amplasate în linia 127.
116
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.40. Memorie cache cu mapare directă.
Câmpul de 6 biĠi, numit marcaj sau etichetă (tag), are rolul de a identifica în mod unic blocul din linie. Astfel, blocurile 0, 128, 256, …, 8064 au numerele de marcaj 0, 1, 2, …, respectiv 63. Considerând din nou figura 3.40, o operaĠie de citire are loc astfel. Memoriei cache i se prezintă o adresă de 16 biĠi. Numărul liniei de 7 biĠi este utilizat ca un index în memoria cache pentru accesul la o anumită linie. Dacă marcajul de 6 biĠi este egal cu marcajul liniei respective, atunci numărul de 3 biĠi al cuvântului este utilizat pentru a selecta unul din cei 8 octeĠi ai liniei respective. În caz contrar, marcajul úi numărul liniei (în total 13 biĠi) se utilizează pentru a încărca un bloc din memoria principală. Memoria cache cu mapare asociativă Maparea directă este o tehnică care se poate implementa simplu. Principalul dezavantaj al acesteia este că există o locaĠie fixă în memoria cache pentru oricare bloc dat. Deci, dacă un program face referire în mod repetat la cuvinte din două blocuri diferite care se mapează în aceeaúi linie, blocurile vor fi interschimbate în mod continuu în memoria cache úi rata de succes va fi redusă. O metodă care elimină dezavantajul mapării directe este maparea asociativă, reprezentată în figura 3.41. În acest caz, adresa memoriei principale constă dintr-un marcaj de 13 biĠi úi un număr al cuvântului de 3 biĠi. Un bloc din memoria principală se poate încărca în oricare linie, iar marcajul său de 13 biĠi se memorează împreună cu blocul. Pentru a determina dacă un bloc se află în memoria cache, sunt necesare circuite pentru a compara simultan marcajul său cu marcajele fiecărei linii.
Structura unui calculator
117
118
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.41. Memorie cache cu mapare asociativă.
În cazul mapării asociative, există o flexibilitate în privinĠa înlocuirii unui bloc atunci când un nou bloc este încărcat în memoria cache. Algoritmii de înlocuire a blocurilor din memoria cache, prezentaĠi în continuare, au rolul de a creúte eficienĠa. Principalul dezavantaj al acestei metode îl reprezintă circuitele complexe necesare pentru a examina marcajele tuturor liniilor din memoria cache. Memoria cache cu mapare asociativă pe seturi Maparea asociativă pe seturi reprezintă un compromis care reĠine avantajele mapării directe úi ale celei asociative. În acest caz, memoria cache este împăUĠită în I seturi, iar fiecare din acestea conĠine J linii, aúa cum rezultă din figura 3.42. Rezultă: L = I J,
(3.6)
K = A mod I,
(3.7)
unde K este numărul setului. Cu această metodă, blocul conĠinând adresa A poate fi mapat în oricare din liniile setului I. ObservaĠie. În cazul extrem, în care I = Lúi J = 1, maparea asociativă pe seturi se reduce la maparea directă, iar dacă I = 1 úi J = L, se obĠine maparea asociativă. Utilizarea a două linii pe set (J = 2) este cea mai utilizată organizare asociativă pe seturi, care îmbunăWăĠHúte semnificativ rata de succes faĠă de maparea directă. Exemplu. Cache-ul de nivel 1 din AMD Athlon este asociativ pe două seturi, adică orice locaĠie din memoria principală poate fi depozitată în 2 locaĠii din L1.
Fig. 3.42. Memorie cache cu mapare asociativă pe seturi.
Memoria cache cu mapare pseudo-asociativă Memoria cache asociativă pe seturi testează simultan toate căile posibile, folosind un mecanism asemăQător conĠinutului adresabil al memoriei. Memoria cache pseudo-asociativă testează fiecare cale posibilă o singură dată. În cele mai multe cazuri, când găseúte un bloc din prima testare (succes), memoria cache pseudoasociativă este la fel de rapidă ca în cazul mapării directe, dar are o rată de eúec mai scăzută decât în cazul mapării directe úi mai aproape de cea a mapării asociative. Analize úi comparaĠii Asociativitatea poate fi privită ca un fel de schimb. Dacă sunt zece unităĠi, politica de înlocuire le tratează ca o singură intrare, dar va trebui să caute în toate pentru un cache hit. A verifica mai multe locaĠii consumă mai multă putere, spaĠiu úi timp. Pe de altă parte, depozitarea folosind asociativitatea are câteva minusuri, de aceea viteza procesorului scade. Regula ,,degetului mare” are rolul de a dubla asociativitatea de la maparea directă la cea asociativă pe două căi úi de la cea asociativă pe două căi la cea pe patru căi etc., având acelaúi efect ca în cazul unui cache hit. Mărirea asociativităĠii la peste patru căi are un efect mai slab decât în cazul unui cache hitúi este realizată, în general, pentru alte motive. Dacă fiecare locaĠie din memoria principală poate fi depozitată în alte două locaĠii din memoria cache, se pune întrebarea care din cele două va fi folosită. Cea mai simplăúi cea mai folosită schemă utilizează LSB-ul câmpului linie (index) al locaĠiei de memorie ca index pentru memoria cache úi are două intrări pentru fiecare linie. Avantajul acestei scheme este că etichetele stocate în cache nu trebuie
Structura unui calculator
119
Vă includă acea parte a adreselor din memoria principală care sunt implicate în câmpul linie (index) al memoriei cache. Atât timp cât etichetele cache reprezintă doar câĠiva biĠi, ocupă spaĠiu puĠin, putând fi citite úi comparate rapid. Unul dintre avantajele mapării directe este acela Fă lasă loc speculaĠiilor rapide úi simple. Atunci când o adresă a fost calculată, i s-a ataúat index cache unic, care ar putea conĠine datele. Noua intrare în cache poate fi citită, iar procesorul îúi continuă lucrul cu acele date pe care le avea înainte de a termina procesul de verificare, dacă adresa cerută se potriveúte cu eticheta actuală. Ideea ca procesorul să folosească date depozitate în cache înainte ca eticheta Vă se potrivească complet poate fi aplicată úi la cache-ul asociativ. O parte din etichetă, numită cheie (hint), poate fi folosită pentru a alege una din adresele cerute, aflate posibil în harta cache. Aceste date pot fi folosite în paralel cu verificarea întregii etichete. Tehnica hint lucrează excelent când este folosită în contextul translatării adreselor. Alte tehnici propun un cache „oblic” (skewed cache), unde indexul căii 0 este direct, dar indexul căii 1 este format cu o funcĠie hash. O funcĠie hash de calitate are proprietatea că adresele care intră în conflict cu maparea directă tind să nu mai aibă conflicte când sunt mapate cu funcĠia hashúi este mai neplăcut ca un program să sufere din cauza unui număr neaúteptat de mare de conflicte. Pe de altă parte, există latenĠă în implementarea funcĠiei hash. În plus, când trebuie încărcată o nouă linie úi exclusă una veche, ar putea deveni dificil să se determine care dintre liniile existente a fost ultima folosită, deoarece noua linie intră în conflict cu datele de la diferiĠi indecúi ai fiecărei căi. Metoda LRU (vezi paragraful 3.2.12.3) urmăreúte principiul vecinăWăĠii (cache nears) într-un cache non-oblic (non-skewed), împăUĠindu-l pe seturi. Aúadar, asociativitatea completă are un avantaj major faĠă de asociativitatea pe seturi. 3.2.12.2. EficienĠa úi localizarea datelor în memoria cache O memorie cache este utilă numai dacă anumite informaĠii sunt folosite frecvent úi mult timp. Atunci, acele informaĠii merită să fie păstrate în memoria cache. Din fericire, s-a constatat experimental că acest lucru este adesea adevărat. Această observaĠie poate fi formulată în mai multe moduri, unul dintre acestea fiind principiul localizării (locality principle). Există două feluri de localizare: localizare spaĠială – dacă este nevoie de unele date, în curând va fi nevoie probabil de date aflate în apropierea lor în memorie; localizare temporală – când s-au găsit anumite date, foarte adesea acestea vor fi folosite de mai multe ori. Acestea sunt doar observaĠii, dar se potrivesc destul de bine programelor, aúa cum funcĠionează acestea în calculatoarele actuale. Validitatea observaĠiilor permite folosirea de memorii cache. Acesta nu înseamnă că nu există programe care folosesc prost memoriile cache; dimpotrivă, se poate scrie destul de uúor un astfel de program (este o metodă „eficientă” de a încetini calculatorul). Programele obiúnuite însă nu se comportă astfel.
ARHITECTURA SISTEMELOR DE CALCUL
120
EficienĠa unei memorii cache se măsoară în procentajul de găsiri ale datelor, numit rată de succes, H (hit rate). Opusul acestei valori este procentajul de ratări, numit rată de eúec, M (miss rate). Procentajele acestea se măsoară rulând numeroase programe úi făcând media. RelaĠia în aceste două valori este: H = 1 – M.
(3.8)
Dacă timpul de citire din memoria cache este TH (hit time), iar timpul pierdut până se ratează este TM (miss time), atunci se poate măsura timpul mediu de acces la memoria cache cu următoarea formulă: T = TH H + TM M.
(3.9)
Se observă că timpul unei ratări (TM) nu este neapărat egal cu timpul de citire din memoria lentă, Tl, deoarece, în cazul unei ratări, întâi trebuie constatat dacă datele sunt în memoria cache, iar, dacă nu sunt, se accesează memoria lentă. Memoria cache va fi eficientă dacă T < Tl. Parametrul H depinde de mărimea memoriei cache: pentru o memorie cache de dimensiunea memoriei lente (caz limită), toate datele pot fi Ġinute în memoria rapidăúi se va obĠine H = 1. Pentru o memorie cache de dimensiune 0, H = 0, pentru că niciodată datele nu se găsesc în această memorie. RelaĠia între mărimea memoriei cache, a memoriei lente úi parametrul H nu este o linie dreaptă, ci creúte rapid la început, aúa cum se observă în figura 3.43. Din cauza aceasta, o memorie cache relativ redusă ca mărime are o importanĠă mare ca eficienĠă.
Fig. 3.43. PerformanĠa memoriei cache.
EficienĠa depinde úi de raportul dintre THúi TM. În anumite cazuri, TM este de ordinul a 104TH, deci chiar un parametru H de valoare redusă poate însemna mult. Exemplu. Procesorul Intel Xeon la frecvenĠa de 3,06 GHz are o memorie cache L3 de 1 MB, cu magistrala de sistem la 533 MHz, úi contribuie la creúterea nivelului de performanĠă cu peste 15%.
Structura unui calculator
121
3.2.12.3. Reînnoirea conĠinutului memoriilor cache În ceea ce priveúte reînnoirea conĠinutului memoriilor cache, pentru útergerea datelor curente úi aducerea altora noi, sunt folosite mai multe metode: metoda RW (Random Write) sau de rescriere aleatorie: datele conĠinute sunt rescrise aleator, făUă a folosi un anumit criteriu sau algoritm care să determine care bloc de date va fi rescris; metoda FIFO (First In ± First Out): primul intrat – primul ieúit, adică, primele blocuri de date scrise în memorie sunt rescrise primele; metoda LRU (Least Recently Used): datele folosite cel mai puĠin recent; blocurile de date care, temporal, nu au fost folosite timp de cel mai lung interval sunt rescrise primele, cele accesate de curând fiind păstrate; metoda LFU (Least Frequently Used): datele folosite cel mai puĠin frecvent; blocurile de date care, statistic, au fost folosite cel mai rar sunt rescrise primele, cele folosite mai des fiind păstrate. Alte metode sunt: politica circulară (round robin), politica setului de lucru (working set), politica optimă (optimal), politica ceasului (clock), politica celei de-a doua úanse (second chance) etc. Metoda cea mai folosită este LRU; de aceea, cel de-al 9-lea cip de memorie cache (TAG RAM) va juca úi rol de contor al frecvenĠei de apelare a datelor din cache, determinându-se datele care vor fi rescrise. Modul de lucru general al microprocesoarelor cu memoria cache este următorul: programul va căuta datele, prin intermediul controlerului de cache, în cache-ul intern. Dacă datele solicitate nu se află la acest nivel (cache miss), va merge mai departe cu căutarea în cache-ul extern úi apoi, în cazul negăsirii acestora nici aici, în memoria principală RAM. Probabilitatea ca procesorul să găsească datele necesare într-unul din cele două niveluri cache este însă destul de mare. Totodată, magistrala memoriei care, în lipsa cache-ului, ar fi fost solicitată pentru operaĠii cu RAM-ul, este disponibilizată pentru alte procese. 3.2.12.4. Conectarea memoriei cache la microprocesor Memoria cache este conectată cu microprocesorul úi memoria RAM în sistem serial sau paralel. Conectarea serială (look through) – vezi figura 3.44 – presupune ca dialogul microprocesor–RAM să se desfăúoare prin intermediul cache-ului. Acest sistem are dezavantajul că cererile procesorului sunt întârziate de intermediarul cache, dar are avantajul că magistrala memoriei nu este ocupată la fiecare cerere a procesorului. Dacă datele solicitate se află în cache (cache hit), interogarea memoriei RAM nu se mai efectuează, iar magistrala memoriei rămâne liberă. Conectarea paralelă (look aside) – vezi figura 3.45 – presupune ca microprocesorul să se adreseze, în paralel, atât memoriei cache cât úi memoriei RAM. În cazul în care ecoul din partea cache-ului este pozitiv, adresarea către RAM este abandonată. De aici rezultă, faĠă de metoda anterioară, avantajul vitezei, evitându-se căutarea secvenĠială: întâi în cache, apoi în RAM. Dezavantajul apare prin faptul că magistrala memoriei este tot timpul folosită úi, astfel, nu mai este disponibilă – în momentele de scanare a memoriei – altor accesări din partea perifericelor. Mai ales în modul multitasking, acest lucru se reflectă în întârzieri semnificative ale vitezei de execuĠie a diferitelor sarcini.
122
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.44. Organigrama conectării seriale (look through).
Fig. 3.45. Organigrama conectării paralele (look aside).
3.2.12.5. Depunerea în memorie a rezultatelor Indiferent de tipul funcĠiei de mapare, fiecărui bloc din memoria cache îi sunt asociaĠii doi biĠi de comandă, numiĠi V úi D. Bitul V este un bit de validare a blocului, V = 1 fiind o condiĠie necesară a obĠinerii unui cache hit. Bitul V este util îndeosebi în sistemele multiprocesor, în vederea menĠinerii coerenĠei memoriilor cache locale, datorită redundanĠei informaĠionale. Mai precis, aici apare necesitatea citirii din cache-ul propriu a ultimei cópii modificate a datei respective. Când un procesor modifică o copie locală a unei date, toate blocurile care conĠin acea dată din cadrul celorlalte procesoare trebuie invalidate prin resetarea V = 0. Necesitatea invalidării blocurilor (V = 0) apare chiar úi în sistemele uniprocesor. Imediat după resetarea sistemului, uzual, procesorul execută un program încărcător rezident în memoria EPROM. Cum imediat după iniĠializarea sistemului conĠinutul cache-ului este, practic, aleator, pentru a evita falsele situaĠii de cache hit, la citirea programului încărcător din EPROM, se iniĠializează biĠii V cu zero. La prima încărcare a unei date (instrucĠiuni) în cache, bitul V aferent se va seta pe 1, validând astfel situaĠia de cache hit.
Structura unui calculator
123
Bitul D (dirty data) este pus pe 0 la încărcarea iniĠială a blocului în cache. La prima scriere a acelui bloc, bitul se pune pe 1. Evacuarea propriu-zisă a blocului se face doar dacă bitul D = 1. Practic, prin acest bit se minimizează evacuările de blocuri în memoria principală, pe baza principiului că un bloc trebuie evacuat numai dacă a fost scris în cache. În acest sens, din punct de vedere al accesărilor de scriere de către procesor (depunerea în memorie a rezultatelor), există trei posibilităĠi: metoda Write Through ± vezi figura 3.46±, în care se utilizează traseul invers al citirii datelor, blocurile fiind depuse mai întâi în memoria cache internă, apoi în cache-ul extern úi în final în memoria RAM;
Fig. 3.46. Schema metodei Write Through.
metoda Write Back ± figura 3.47±, în care scrierea se face în cache, în cazul în care adresa de memorie la care se face scrierea există úi ea în cache (de fapt, dacă blocul de date de la acea adresă se află încărcat în cache). În cazul în care blocul de date localizat de acea adresă nu mai există în cache, scrierea se face direct în RAM;
Fig. 3.47. Schema metodei Write Back.
metoda Posted Write, prin care din memoria cache este rezervată o anumită porĠiune care va juca un rol de buffer úi în care vor fi memorate blocuri de date până când magistrala memoriei devine disponibilă, moment în care buffer-ul îúi transferă conĠinutul în RAM. În vederea menĠinerii coerenĠei memoriilor cache, cu precădere în sistemele multiprocesor, există două posibilităĠi, în funcĠie de procesul de scriere: Write Invalidate, prin care CPU care scrie determină ca toate copiile din celelalte memorii cache să fie invalidate înainte ca ea săúi modifice blocul din cache-ul propriu; Write broadcast, prin care CPU care scrie pune data de scris pe magistrala comună, spre a fi actualizate toate copiile din celelalte cache-uri. Ambele strategii de menĠinere a coerenĠei pot fi asociate cu oricare dintre metodele de scriere, dar de cele mai multe ori se preferă Write Back cu invalidare.
ARHITECTURA SISTEMELOR DE CALCUL
124
3.2.12.6. Cache hitúi cache miss Într-o memorie cache, apar posibile patru procese distincte, ca în tabelul 3.4. Tabelul 3.4 Tipuri de acces în memoria cache tip acces
situaĠie în cache
acĠiune în cache
citire
miss
evacuarea blocului úi încărcarea unui bloc nou
citire
hit
compararea marcajelor/etichetelor (tag)
scriere
miss
evacuarea blocului, încărcarea unui bloc nou úi scrierea datei în bloc
scriere
hit
scrierea datei în blocul din cache (Write Back)
$úadar, memoriile cache îmbunăWăĠesc performanĠa, îndeosebi pe citirile cu cache hit, iar, în cazul utilizării scrierii tip Write Back, úi pe scrierile cu cache hit. ÎmbunăWăĠirea accesului la memorie pe citirile CPU este normală, având în vedere Fă acestea sunt mult mai frecvente decât scrierile (orice instrucĠiune implică cel puĠin o citire din memorie pentru încărcarea sa; statistic, cca. 75 % din accesările la memorie sunt citiri, unii autori susĠinând că raportul real citiri/scrieri este de 9/1). Cache miss se referă la încercarea nereuúită de a citi sau scrie o parte din date în memoria cache, ceea ce rezultă în scrierea/citirea în memoria principală cu latenĠe mai mari. ExplicaĠiile pentru cauzele situaĠiilor de cache miss, conform literaturii de specialitate, sunt de trei tipuri: la citirea instrucĠiunilor; la citirea datelor; la scrierea datelor. Un cache miss la citirea instrucĠiunilor cauzează, în general, întârzieri, deoarece procesorul sau ultimul fir de execuĠie trebuie să aútepte până când instrucĠiunile sunt aduse din memorie. Un cache miss la citirea datelor cauzează întârzieri mai mici, deoarece instrucĠiunile nu depind de citirea cache-ului, putând fi evitate, până când datele sunt preluate din memoria principală úi instrucĠiunile care depind de acestea îúi continuă execuĠia. Un cache miss la scrierea datelor cauzează întârzieri mici, deoarece scrierea poate fi pusă într-o coadă de aúteptare úi sunt câteva limitări în execuĠia instrucĠiunilor. Procesul poate continua până când coada este plină. SecvenĠe de referinĠe din memorie trecute prin benchmark-uri sunt salvate ca urme de adrese. Ulterior, analizele simulate au arătat posibile diferenĠe între lungimile urmelor de adrese, în funcĠie de designul memoriei cache. Cercetătorul Mark Hill a separat situaĠiile de cache miss în trei categorii:
Structura unui calculator
125
Ratări obligatorii (compulsory misses) – sunt acele pierderi cauzate de primele referiri la date. Mărimea úi asociativitatea memoriei cache nu fac nicio diferenĠă între numărul de ratări obligatorii. Aducerea timpurile a operanzilor din memorie nu este utilă în acest caz. Ratări de capacitate (capacity misses) – sunt acele pierderi care privesc asociativitatea sau mărimea blocurilor, făcute numai de blocurile finite din cache. Curba ratei pentru ratările de capacitate în funcĠie de capacitatea memoriei cache dă măsura localizării temporale a unui úir temporar de referinĠe. InformaĠiile care indică dacă memoria cache este plină, goală sau aproape plină nu sunt utile în acest caz. ObservaĠie. Cache-ul procesorului are aproape mereu fiecare linie umplută cu o copie a unei linii din memoria principalăúi de fiecare dată alocarea unei noi linii necesităútergerea uneia vechi. Ratările de conflict (conflict misses) – sunt acele pierderi care ar putea fi evitate dacă cache-ul n-ar elimina o intrare mai târziu. Ratările de conflict pot fi puse într-o hartă de ratări (miss map), care este inevitabilă úi care oferă un detaliu particular asociativităĠii úi politicii de înlocuire.
Fig. 3.48. Rata de pierderi (miss rate) în funcĠie de capacitatea memoriei cache.
Graficul din figura 3.48 ilustrează performanĠele memoriei cache, obĠinute pe un benchmark pentru întregi din SPEC2000. Aceste benchmark-uri reprezintă gradul de încărcare al unei staĠii de lucru. Rata de pierderi în cazul asociativităĠii este sensibil superioară celei pentru mapare directă. DiferenĠele obĠinute se explică prin utilizarea algoritmului de înlocuire LRU. Se observă, de asemenea, că pentru memorii cache de dimansiune foarte mare, decalajele devin nesemnificative. 3.2.12.7. Tipuri de celule cache În funcĠie de modul de citire a cuvintelor, celulele memoriei cache pot fi: asincrone, la care operaĠia de citire a unui cuvânt se face în două etape: se depune adresa, apoi se transferă datele, pentru fiecare cuvânt fiind necesar acelaúi ritual. Aceste cipuri se livrează sub formă DIP.
ARHITECTURA SISTEMELOR DE CALCUL
126
sincrone, pentru care accesul se face în mod burst (se depune o singură adresă, iar transferul se face pentru patru cuvinte simultan, primul cuvânt cu adresa indicată de controlerul de cache úi următoarele trei). Timpul de acces scade destul de mult, ajungând până la 9 ns. Cipurile sincrone sunt implementate direct prin lipire pe placa de bază a sistemului. pipe-line burst cache, care este prevăzut la ieúire cu registre speciale, în care datele citite sunt stocate temporar. Astfel, este posibilă o nouă adresare, practic, în acelaúi timp cu preluarea datelor de către microprocesor din registrele de stocare (latch). Timpul de acces scade foarte mult (chiar la 4 ns), fapt care duce la performanĠe deosebite pentru sistemele dotate cu astfel de celule de memorie cache.
3.2.12.8. Memorii cache specializate Accesul la memoriile din procesor cu tehnica pipeline, cu stagii multiple ale pipeline-ului, presupune: aducerea instrucĠiunilor din memorie (instruction fetch); translatarea adresei virtuale în adresă fizică (Translation Look-aside Buffer); aducerea datelor din memorie (data fetch) Designul natural tinde să utilizeze diferite adrese fizice din cache pentru fiecare dintre aceste stagii, astfel încât nicio resursă fizică nu trebuie programată să servească simultan două stagii diferite din pipeline. Astfel de pipeline-uri se termină cu cel puĠin trei memorii cache separate (pentru instrucĠiuni, TLB úi date), fiecare fiind specializată pe un anumit rol. Dacă pipeline-urile au instrucĠiunile úi datele separate în memoria cache, se poate spune Fă este emulată o arhitectură de tip Harvard. IniĠial, această fază s-a regăsit la maúinile cu instrucĠiuni úi date separate în memorie. Dar cele mai multe dintre calculatoarele moderne sunt concepute în arhitectură von Neumann. Cache victimă (victim cache) Cache-ul victimă este o memorie cache folosită pentru a reĠine blocurile úterse din cache-ul procesorului, datorate unui conflict sau unei ratări. Cache-ul victimă se află între cache-ul principal úi zona de reumplere, deĠinând numai blocuri care au fost eliminate din cauza unui cache miss. Această tehnică este utilizată pentru a reduce penalizările suportate de memoria cache la o ratare. Exemple. Cache-ul victimă original de pe HP PA 7200 a fost mic úi complet asociativ. Mai târziu, procesoare precum AMD K7 úi K8 au folosit multă memorie cache secundară pe post de cache victimă, pentru a evita duplicatele de stocare. Cache de urmărire (trace cache) Unul dintre exemplele cele mai extreme de specializare a memoriei cache este cache-ul de urmărire, găsit în microprocesoarele Intel Pentium 4. Trace cache este un mecanism destinat creúterii gradului de aducere din memorie a instrucĠiunilor (instruction fetch) úi lărgimii de bandă, precum úi reducerii consumului de putere (în cazul lui P4), prin stocarea urmelor (traces) instrucĠiunilor care au fost aduse din memorie úi decodate.
Structura unui calculator
127
Un trace cache stochează instrucĠiuni chiar úi după ce acestea au fost depozitate sau retrase. În general, instrucĠiunile sunt adăugate în trace cache în grupuri care reprezintă blocuri individuale de bază sau urme dinamice (dynamic traces). Un bloc de bază constă dintr-un grup de instrucĠiuni neramificate, terminate cu ramificaĠii. O urmă dinamică include numai instrucĠiuni ale căror rezultate sunt utilizate efectiv úi elimină următoarele instrucĠiuni luate ca ramificaĠii (atât timp cât acestea nu sunt executate), o urmă dinamică putând fi o concatenare de mai multe blocuri de bază. Acesta permite unităĠii de fetch a unui procesor să aducă din memorie câteva blocuri de bază făUă să se preocupe de ramificaĠiile aflate în execuĠie. Liniile de urmărire sunt stocate în cache pe baza unui număUător de program aflat în prima instrucĠiune a urmei. Aceasta permite depozitarea pentru diferite căi a urmelor care încep de la aceeaúi adresă, fiecare reprezentând rezultate diferite ale ramificaĠiei. În etapa de aducere din memorie (fetch) a unui pipeline, număUătorul de program curent, împreună cu un set de predicĠii ale instrucĠiunilor ramificate (branch prediction), este pus în memoria cache, mai exact, în trace cache, pentru o situaĠie de cache hit. Dacă apare un cache miss, începe construcĠia unei noi urme. Cache-ul victimă este folosit în procesorul P4, pentru a stoca micro-operaĠii deja decodate sau translaĠii ale instrucĠiunilor de pe sisteme 86, astfel încât, atunci când va fi necesară o instrucĠiune, aceasta nu va mai trebui decodată din nou. Cache multinivel (multilevel cache) O altă problemă este schimbul între latenĠa memoriei cache úi rata de succes (cache hit). Memoriile cache mari au o rată de succes mai bună, dar latenĠe mari. Pentru a rezolva această problemă, în majoritatea calculatoarelor se folosesc mai multe nivele de cache, cu blocuri de cache mai mici úi rapide, grupate într-unul mai mare úi lent. Un cache multinivel operează căutând prima dată în nivelul cel mai de jos (L1) úi, în cazul unui cache hit, viteza de procesare creúte. Dacă apare cache miss în module cache mici, atunci se caută în cache-ul cel mare (L2) úi, mai departe, în memoria principală. DiferenĠa de latenĠă între memoria principală úi memoria cache a devenit mai importantă. Unele memorii cache au început să utilizeze mai mult de 3 nivele pe un chip. Exemplu. În 2003, procesorul Itanium 2 a început să fie livrat cu 6 MB de cache L3 pe cip. Sistemele IBM Power 4 aveau 256 MB de cache L3 pe cip, partajat între mai multe procesoare. Procesorul AMD Phenom foloseúte 2 MB de cache L2 în schimbul celui L3. Scratch Pad Folosirea eficientă a spaĠiului de memorie integrat în cipul procesorului (onchip) este extrem de importantă în aplicaĠiile moderne ale sistemelor dedicate (embedded systems), bazate pe nucleele procesoarelor. În completarea memoriei cache de date, care realizează interfaĠa cu memoria mai lentă din afara cipului procesorului (off-chip), în diverse aplicaĠii se foloseúte adesea o memorie SRAM rapidă, de tip on-chip, numită memorie scratch pad (vezi schema din figura 2.29)
128
ARHITECTURA SISTEMELOR DE CALCUL
Cache integrat úi cache divizat Memoria cache multinivel introduce un nou design al deciziilor. Exemple. În unele procesoare, toate datele din cache-ul L1 trebuie să se Jăsească undeva în cache-ul L2. Aceste memorii sunt numite cache strict inclusiv. Alte procesoare (cum ar fi AMD Athlon) au un cache exclusiv: datele sunt garantate a fi în cel mult unul dintre nivelele L1 sau L2, nu în amândouă. Totodată, alte procesoare, precum Intel PII, PIII úi P4, nu solicită ca datele din cache-ul L1 să se găseascăúi în L2, deúi ar putea face acest lucru. Nu sunt acceptate nume universale pentru această politică intermediară, deúi termenul inclusiv a fost deja folosit. Avantajul cache-ului exclusiv este acela că depozitează mai multe date. Acest avantaj este cu atât mai mare, cu cât cache-ul L1 exclusiv este compatibil cu L2, caz în care se diminuează memoria L2, aceasta fiind mai mare decât L1. Când apare o situaĠie de cache miss în L1 úi cache hit în L2 la un acces, linia din cache-ul L2 pe care se află blocul cu hit este schimbată cu o linie din L1. Acest schimb implică ceva mai multă muncă decât copierea liniei din L2 în L1, ceea ce o face doar cache-ul inclusiv. Un avantaj al cache-ului strict inclusiv este că atunci când dispozitivele externe sau alte procesoare într-un sistem multiprocesor doresc să úteargă o linie cache, nu au decât să caute în L2. În memoria cache, ierarhiile care nu au pus în aplicare mecanismele includerii trebuie să verifice úi cache-ul L1. În schimb, există o corelaĠie între asociativitatea cache-ului L1 úi cea a cache-ului L2: dacă cache-ul L2 nu are cel puĠin atâtea căi ca L1, asociativitatea cache-ului L1 este restricĠionată. Cache-ul strict inclusiv foloseúte linii de dimensiuni mari în cache, ceea ce reduce mărimea etichetelor din cache-ul secundar (cache-ul exclusiv necesită ca ambele cache-uri să aibă linii de aceeaúi dimensiune, pentru a le putea schimba când în L1 apare cache missúi în L2, cache hit). Dacă cache-ul secundar este cu un ordin de mărime mai mare úi datele sunt tot cu un ordin de mărime mai mari decât etichetele, această zonă poate fi etichetată ca zonă de salvare úi poate fi incrementată comparabil până la dimensiunile zonei de care au nevoie L1 úi L2 să depoziteze date. După cum s-a mai spus, calculatoarele puternice au un alt cache între L2 úi memoria principală, numit cache de nivel trei (L3). Acest cache poate fi implementat pe un chip separat de procesor úi, începând din 2004, poate varia ca Părime de la 2 la 250 MB. Beneficiile unui chip L3 depind de cererea de acces a aplicaĠiilor. StaĠiile de lucru high-end úi serverele au memoria de tip L3 implementată în procesor, ceea ce duce la mărirea vitezei úi reducerea costurilor. Exemplu. Intel Xeon MP, produs numit Tulsa, are un cache L3 încorporat de 16 MB, partajat între cele două nuclee ale procesorului. În cele din urmă, la celălalt capăt al ierarhiei (în cazul staĠiilor de lucru lowend), registrul de fiúiere al procesorului poate fi considerat drept cel mai mic úi cel mai rapid cache din sistem, cu caracteristica de a fi programat software de un compilator, ca úi cum ar aloca registre pentru a păstra valori primite din memoria principală.
Structura unui calculator
129
Studiu de caz: memoria cache la procesorul AMD Athlon 64 (K8) Pentru a exemplifica specializările cache-ului multinivel, integrat úi divizat, se foloseúte ierarhia din nucleul K8 al procesorului AMD Athlon 64 (vezi figura 3.49).
Fig. 3.49. Structura nucleului K8 al procesorului AMD Athlon 64.
Nucleul K8 are patru memorii cache: una pentru instrucĠiuni, una pentru blocul TLB, una pentru datele TLB-ului úi una pentru date. Fiecare dintre aceste cache-uri este specializat: 1. Cache-ul pentru instrucĠiuni păstrează cópii ale celor 64 de linii ale memoriei úi aduce din memorie 16 B la fiecare ciclu. Fiecare octet din acest cache este depozitat în 10 biĠi în loc de 8, cu un marcaj suplimentar de bit al limitelor instrucĠiunilor (acesta este un exemplu de precodare). Cache-ul are doar protecĠie de paritate, mai degrabă decât ECC, deoarece informaĠia de paritate ocupă spaĠiu mai puĠin, iar datele avariate pot fi înlocuite de date proaspete aduse din memorie. 2. InstrucĠiunile blocului TLB păstrează cópii ale intrărilor din tabelul paginilor (PTE). Fiecare ciclu de instrucĠiuni adus din memorie are propria sa adresă virtuală, translatată cu ajutorul TLB-ului într-o adresă fizică. Fiecare intrare are 4 sau 8 octeĠi în memorie, iar fiecare TLB este împăUĠit în două secĠiuni: una pentru a păstra PTE-urile care ocupă 4 KB din hartă úi alta pentru a păstra PTEurile care ocupă 2 sau 4 MB din hartă. ÎmpăUĠirea permite o potrivire a circuitului în fiecare secĠiune în mod complet asociativ. Sistemul de operare mapează secĠiuni diferite ale spaĠiului de adrese virtuale cu diferite mărimi ale PTE-urilor. 3. Datele TLB-ului au două cópii, care conĠin intrări identice. Cele două cópii permit accesul la două date per ciclu, pentru a translata adresele virtuale în adrese fizice. Ca úi instrucĠiunile TLB-ului, úi aceasta este împăUĠită în două tipuri de intrări. 4. Datele cache-ului păstrează cópii ale celor 64 de linii ale memoriei. Este împăUĠită în 8 bancuri (fiecare depozitând câte 8 KB de date) úi poate aduce din memorie doi octeĠi de date pe ciclu.
130
ARHITECTURA SISTEMELOR DE CALCUL
Nucleul K8 are, de asemenea, un cache multinivel. Există instrucĠiuni de nivel 2 úi date ale TLB-ului care depozitează numai PTE-uri mapate pe 4 KB. Ambele cache-uri, de instrucĠiuni úi de date, pot fi umplute din cache-ul L2. Acest cache este exclusiv, atât pentru instrucĠiunile cât úi pentru datele din L1, ceea ce înseamnă că orice linie de 1 octet se poate găsi numai într-o singură instrucĠiune dată cache-ului L1 sau în cache-ul L2. Cu toate acestea, este posibil ca o linie de date în cache să aibă un PTE care este într-unul din TLB-uri – sistemul de operare este responsabil cu păstrarea TLB-ului coerent. 3.2.12.9. Concluzii Se poate spune că introducerea în practică a conceptului de memorie cache ca memorie tampon a adus o serie de îmbunăWăĠiri sistemelor de calcul, mărind foarte mult viteza de procesare, desigur în funcĠie úi de dimensiunea memoriei cache instalate în sistem. Totuúi, se poate pune úi aici o întrebare: până unde poate merge memoria cache ca dimensiune úi cât de folositoare este mărimea acesteia? În ultimul timp se construiesc sisteme care pot avea pe placa de bază până la câĠiva megaocteĠi de cache extern. Dar o supradimensionare a memoriei cache externe făUă a se Ġine seama de scopul în care va fi folosit calculatorul nu va duce decât la încărcarea notei de plată (memoria cache, fiind o memorie statică, este cu mult mai scumpă decât RAM-ul), deoarece avantajele obĠinute vor fi insesizabile. Datorită faptului că procesorul execută programele pe segmente, bucle de program de maximum 64 KB, un astfel de segment poate fi cuprins în primii 64 KB ai memoriei cache. Deci, un spor de viteză de circa 90–95% (din totalul sporului adus de o memorie cache montată) se va obĠine folosind doar 64 KB de memorie cache. Ridicând dimensiunea cache-ului la 256 KB se va obĠine o creútere doar de 2–3 %. Se consideră că o memorie cache de 256 KB este suficientă pentru un procesor Pentium, în timp ce pentru Pentium Pro este nevoie de 512 KB cache în condiĠii de lucru deosebite, iar pentru procesoarele actuale valorile de ordinul MB au devenit deja comune. Problema care se pune este atunci când se lucrează în mod multitasking sau în reĠea, úi unde cei 64 KB cache de date ai unei sarcini sunt înlocuiĠi de cei 64 KB ai altei sarcini, la viteze foarte mari. În acest caz, este evident că procesorul va avea nevoie de mai multe „depozite“ de 64 KB, pentru fiecare sarcină cel puĠin două, astfel încât să crească probabilitatea ca procesorul săúi găsească datele necesare într-unul din aceste „depozite“ cache, făUă să fie nevoit să mai acceseze RAM-ul. De aceea, în cazul în care calculatorul va juca rol de file server sau va fi folosit în activităĠi multitasking, este necesară mult mai multă memorie cache.
3.2.4. Memoria ROM Un alt tip de memorie folosit în construcĠia calculatoarelor úi a unor echipamente periferice este memoria ROM (Read Only Memory). Spre deosebire de memoria RAM, această memorie, odată scrisă prin procedee industriale, nu mai poate fi útearsă prin metode aflate la îndemâna utilizatorului; în plus, la decuplarea de sub tensiune a calculatorului, informaĠiile din ROM rămân intacte.
Structura unui calculator
131
ùtergerea anumitor memorii ROM, de construcĠie specială (PROM, EPROM, EEPROM) se poate face prin lansarea unui spot de radiaĠii ultraviolete asupra ferestrei de cuarĠ cu care este prevăzut cipul de memorie. Scrierea memoriilor ROM presupune un atac distructiv úi ireversibil asupra diodelor úi tranzistoarelor, prin „arderea” joncĠiunilor interne. Rezultatul acestei acĠiuni de ardere se observă prin modificarea conĠinutului informaĠiei binare. În prezent, există plăci de bază dotate cu astfel de circuite care permit revitalizarea rutinelor BIOS prin copierea în ROM, cu ajutorul unui soft specializat, a unor versiuni mai noi úi mai performante. Deci, ca o concluzie de bază, datele scrise în memoria ROM au un caracter permanent úi au o importanĠă vitală în iniĠializarea úi funcĠionarea oricărui sistem de calcul. Memoria ROM are aspectul unui circuit integrat cu două rânduri de pini (DIP) úi este montat de placa de bază a calculatorului prin intermediul unui soclu. Intern, memoriile de acest tip sunt realizate din reĠele rectangulare de microtranzistoare sau microdiode. Accesarea memoriei ROM se face la fel ca la RAM. O celulă de memorie este alcătuită dintr-un circuit basculant bistabil (CBB). Pentru a realiza mai multe celule, se aranjează CBB-urile sub forma unui tablou cu un număr de coloane úi rânduri. În general numărul rândurilor este egal cu cel al coloanelor. Fiecare celulă se află la intersecĠia unei anumite linii X úi a unei anumite coloane Y (vezi figura 3.50).
132
ARHITECTURA SISTEMELOR DE CALCUL
Dacă OE = 1, ieúirile memoriei sunt în starea de impedanĠă înaltă (high Z). Tabelul de adevăr din figura 3.51.b este un exemplu care arată o posibilitate de implementare a 4 funcĠii binare de câte 3 variabile.
Fig. 3.51.a. Memorie ROM cu 8 cuvinte de 4 biĠi; b. Tabelul de adevăr asociat.
Structura internă a unui cip de memorie ROM organizat pe 1024 cuvinte a câte 8 biĠi, adică 1 K 8, este prezentat în figura 3.52. Matricea de memorie se construieúte sub o formă cât mai apropiată de cea a unui pătrat. Liniile matricei sunt selectate cu ajutorul decodificatorului cu 7 intrări de selecĠie, iar coloanele, cu ajutorul celor 8 multiplexoare a câte 3 intrări de selecĠie. Intrarea suplimentară, CS (Chip Select), activă pe 0 logic, pregăteúte cipul de memorie în vederea unei operaĠii de citire a datelor. Prin dezactivare, acĠionează asupra circuitelor din structură în scopul reducerii consumului. Schema conĠine úi aspectul unui element din matricea de memorie, dacă aceasta este realizată în tehnologia MOS.
Fig. 3.50. Organizarea memoriei RAM.
Organizarea memoriei sub formă de matrice permite reducerea numărului intrărilor de adrese la un număr mai mic decât numărul liniilor úi al coloanelor aferente informaĠiei stocate. Numărul terminalelor de adresare poate fi micúorat prin adresarea în cod binar úi utilizarea decodificatoarele binar-zecimale. Acest mod de adresare în cod binar este utilizat úi în cazul memoriei RAM. Exemplu. Fie o memorie ROM care conĠine 8 cuvinte de câte 4 biĠi (vezi figura 3.51.a). O combinaĠie binară care se aplică pe cele 3 intrări de adresă (A2, A1, A0) selectează unul din cele 8 cuvinte, iar cei 4 biĠi de date ai cuvântului selectat sunt disponibili la ieúiri (O0, O1, O2, O3), cu condiĠia ca semnalul de validare a ieúirii, OE (Output Enable) să fie activ (activarea se face pe 0 logic).
Fig. 3.52. Structura internă a unui cip de memorie ROM cu 1024 cuvinte de 8 biĠi.
Pentru realizarea memoriei ROM, sunt utilizate tehnologii bipolare (TTL, TTL-Schottky, ECL), tehnologii metal-oxid-semiconductor (MOS) cu canal N (NMOS), cu canal P (P-MOS), cu simetrie complementară (CMOS), cu canal negativ (NMOS) sau tehnologii cu logică integrată de injecĠie (I2L).
Structura unui calculator
133
Ca urmare, performanĠele poartă amprenta caracteristicilor tehnologice: bipolară – viteză de procesare mare, putere disipată ridicată, densitate de integrare scăzută; MOS – densitate de integrare ridicată, viteză de procesare mai scăzută decât la bipolară, putere disipată relativ scăzută; CMOS – putere disipată foarte scăzutăúi viteză de procesare mare. În alegerea unui circuit integrat de memorie, trebuie să se aibă în vedere: tensiunea de alimentare; capacitatea; modul de organizare (lungimea cuvântului, semnalele de control úi adresă); puterea disipată (în regim de funcĠionare sau în regim de rezervă stand-by); timpul de acces; timpul de ciclu memorie; disponibilitatea; preĠul de cost. Orice sistem de calcul foloseúte o memorie ROM care conĠine următoarele sisteme software: 1. Sistemul cu program starter sau ROM-ul de start, adică microcodul cu rol de asistare úi control al pornirii sistemului. Aici se află înscrise mici rutine care realizează următoarele acĠiuni: execută testele de funcĠionalitate ale tuturor componentelor ataúate hardware; iniĠializează toate componentele ataúate calculatorului; iniĠializează tabela vectorilor de întrerupere; verifică alte extensii sau periferice ataúate sistemului de calcul; încarcă în memorie, de pe disc, sistemul de operare. Testele de verificare, care formează aúa-numitul POST (Power On Self Test), durează foarte puĠin pentru verificarea plăcii de bază, a controlerului de disc, a plăcii video, a unităĠilor de disc, úi ceva mai mult pentru memoria RAM, care este verificată kilooctet cu kilooctet. Automat, în cazul în care se detectează anumite erori úi disfuncĠii pentru oricare din componentele hardware, se va lansa un mesaj de avertizare. Sistemul de operare, odată încărcat în RAM, va prelua conducerea úi gestiunea sistemului de calcul. 2. ROM-BIOS (Basic Input Output System) este o parte a memoriei ROM care va asigura toate procesele úi serviciile necesare activităĠii calculatorului, precum úi gestiunea perifericelor, prin intermediul rutinelor conĠinute. BIOS-ul conĠinut de ROM este elementul de legătură sau interfaĠa directă între partea hardware úi cea software, prin care se realizează hard cererile soft ale programelor, folosind întreruperile cu serviciile aferente. Practic, orice program accesează partea hardware prin intermediul BIOS. Rutinele conĠinute vor activa canalele de comunicaĠie dintre componentele sistemului úi un sistem de operare sub care lucrează acesta. 3. ROM-Basic este un program opĠional, care conĠine nucleul limbajului Basic. 4. Extensiile ROM reprezintă un sistem care conĠine anumite rutine necesare gestiunii dispozitivelor ataúate.
134
ARHITECTURA SISTEMELOR DE CALCUL
Întreaga memorie ROM este activă pe tot parcursul lucrului cu calculatorul. Încă de la pornirea úi iniĠializarea calculatorului (la încărcarea sistemului de operare), în situaĠiile apăVării tastei Delete, BIOS-ul va furniza o interfaĠă de dialog cu utilizatorul, prin care va oferi o serie de informaĠii privind starea funcĠionalăúi structura sistemului de calcul. Prin intermediul unor meniuri, se poate modifica o serie de parametri pentru a se obĠine un mod de lucru optim úi rapid.
Fig. 3.53. Modul de organizare al memoriei.
Structura unui calculator
135
Ultimii 128 KB rezervaĠi din zona de memorie superioară (vezi figura 3.53) sunt utilizaĠi de componenta BIOS de pe placa de bază. Componenta BIOS este, de obicei, memorată în cipuri de memorie ROM. Programele din componenta ROM BIOS controlează sistemul pe durata pornirii (până la preluarea controlului de către sistemul de operare) úi rămân ca driver-e pentru subsistemele hard pe durata funcĠionării normale a sistemului. Deoarece aceste programe trebuie să fie disponibile imediat, la pornirea sistemului ele nu pot fi încărcate de pe discuri (sau alte dispozitive de memorare). Principalele funcĠii ale programelor de pe placa de bază sunt: autotestarea la punerea sub tensiune (POST); rutina de încărcare a sistemului de operare (bootstrap loader) – iniĠiază Făutarea sistemului de operare pe discurile disponibile; sistemul de bază pentru operaĠii de intrare-ieúire (BIOS) – este interfaĠa soft sau programul principal de control pentru toate componentele hard ale sistemului. Acest sistem conĠine un prim meniu – Standard CMOS Setup –, unde se stabilesc tipul úi parametrii unităĠilor de disc, tastaturii sau plăcii video, ora úi data curentă a sistemului. Un al doilea meniu – Advanced CMOS Setup – cuprinde o serie de parametri reglabili pentru a obĠine maximul de performanĠă. În acest meniu, se pot activa sau dezactiva memoria cache internăúi externă, se poate stabili o parolă de intrare în sistem, ordinea de căutare a sistemului de operare pe disc etc. Al treilea meniu – Advanced Chip-set Setup – conĠine reglaje foarte fine de optimizare, cum ar fi configurarea magistralelor sau a stărilor de aúteptare ale microprocesorului. Datorită uúurinĠei cu care se poate accesa BIOS-ul, parametrii care definesc funcĠionarea generală a calculatorului pot fi modificaĠi foarte simplu, dar configurarea arbitrară a parametrilor BIOS poate produce dereglări ale sistemului. Tot aici se poate menĠiona unitatea specială MMU (Memory Management Unit), care se ocupă cu transferul conĠinutului memoriei ROM (cel de pe placa de bază: ROM-ul de sistem, ROM-ul video, segmentele ROM ale unor adaptoare sau extensii) în memoria de lucru RAM. Este un dispozitiv integrat în microprocesor. Această posibilitate de transfer a rutinelor úi datelor ROM în RAM ridică foarte mult performanĠele sistemului, deoarece timpul de acces al memoriei ROM este foarte mare (150–200 ns) úi operaĠiile care implică folosirea conĠinutului ROM se desfăúoară lent. Activarea opĠiunilor de transfer (shadowing) se face din meniul BIOS Features Setup din CMOS, prin activarea punctelor de Shadow definite de adrese specificate (System Shadow, Video Shadow etc.). MMU va dezactiva automat toate cartuúele ROM al căror conĠinut a fost citit úi scris apoi în RAM, iar în continuare va marca aceste zone de memorie RAM în care s-a transferat conĠinutul ROM, protejându-le. Legătura memoriei ROM cu exteriorul se face prin magistrala de adrese, corespunzătoare pinilor notaĠi cu A0÷Am (pentru detectarea locaĠiei care conĠine informaĠia cerută) úi magistrala de date, pentru transferul datelor, prin pinii notaĠi cu D0÷An, în funcĠie de numărul de pini al cipului respectiv.
3.3. Organizarea dispozitivelor de intrare-ieúire (I/O) Arhitectura calculatoarelor moderne presupune două moduri de organizare a dispozitivelor I/O: pentru arhitectura calculatoarelor mari; pentru arhitectura microcalculatoarelor.
3.3.1. Organizarea dispozitivelor I/O la calculatoare mari În figura 2.31 se prezintă organizarea dispozitivelor I/O la calculatoarele mari.
Fig. 3.54. Organizarea dispozitivelor I/O la calculatoarele mari.
SemnificaĠia notaĠiilor din figură este următoarea: MP – memoria principală; UC – unitatea centrală; Proc. I/O – procesoare I/O sau de canal; CT – controler terminale; T – terminale; Impr. – imprimantă; UD – unităĠi de disc (D). Magistrale:
Structura unui calculator
137
MM – magistrala memoriei; MD – magistrala de date; MI/O – magistrala de I/O. Când microprocesorul central trebuie să efectueze o operaĠie I/O cu un anumit periferic, el cedează această operaĠie procesorului asociat perifericului; microprocesorul central transmite canalului informaĠia necesară pentru realizarea operaĠiei de I/O úi îi cere acestuia să o execute. Canalul realizează operaĠia I/O în mod complet úi autonom: procesorul I/O execută un program de transfer al datelor cu parametrii primiĠi de la microprocesorul central; când transferul între periferic úi memorie a fost încheiat, procesorul I/O anunĠă microprocesorul central despre efectuarea transferului. Acest mod de lucru degrevează microprocesorul central de operaĠiile I/O, care, de regulă, sunt mult mai lente decât viteza de lucru a microprocesorului central. În timpul acestui transfer, microprocesorul central execută alte instrucĠiuni. Există posibilitatea executării mai multor transferuri I/O în acelaúi timp, astfel rezultând creúterea performanĠelor sistemului. ObservaĠie. PrezenĠa celor trei magistrale este specifică calculatoarelor mari. MM permite canalelor I/O să citească sau să scrie date direct din sau în memorie, MI/O asigură comunicaĠia între microprocesorul central úi canalele I/O, iar MD permite microprocesorului central să schimbe informaĠii cu memoria (citirea/scrierea datelor, execuĠia programelor etc.).
3.3.2. Organizarea dispozitivelor I/O la microcalculatoare Microcalculatoarele sunt construite dintr-o placă de bază pe care se află microprocesorul, circuitele de memorie úi circuitele de I/O (vezi figura 3.55).
138
ARHITECTURA SISTEMELOR DE CALCUL
Cu ajutorul conectorilor, la această placă de bază se pot lega circuite suplimentare (plăci adiĠionale), de exemplu plăci de comunicaĠie. Conectorii reprezintă ieúiri ale magistralei unice a sistemului. Fiecare unitate periferică are următoarele păUĠi: circuite electronice de control a unităĠii (controler – dispozitiv hard care realizează interfaĠa calculator-periferic, guvernat de un program special, numit driver); unitate periferică propriu-zisă (unităĠi de disc, tastatură, mouse, joystick, tabletă digitizoare, imprimantă, cameră digitală, scanner, modem etc.). Controlerul de periferic se prezintă sub forma unei plăci adiĠionale conectate la magistrala sistemului prin conectorii de magistrală. Există însăúi unele excepĠii, aceasta nefiind o regulă generală. Exemplu. Controlerul de tastatură se află pe placa de bază. Rolul controlerului de periferic este de a transmite perifericului instrucĠiunea úi informaĠia necesarăúi de a superviza accesul perifericului la magistrala sistemului. Exemplu. Dacă un program necesită informaĠie de pe disc, microprocesorul transmite o comandă controlerului de disc; controlerul va trimite unităĠii de disc un ansamblu de comenzi necesare găsirii úi transferului informaĠiei respective. După Jăsirea informaĠiei, aceasta ajunge la controler sub formă binară (biĠi). Controlerul de disc formează din acest úir de biĠi cuvinte, pe care le scrie succesiv în memorie. Un controler poate scrie sau citi în/din memorie făUă intervenĠia microprocesorului (acesta realizează o operaĠie DMA – Direct Memory Access). Mai există arbitrul de magistrală (bus arbitrer), necesar în situaĠia în care apar procese concurente. Astfel, când microprocesorul cere acces la magistrală simultan cu alte cereri de magistrală, apare o problemă: pe magistrală se poate transmite un singur cuvânt la un moment dat. Arbitrul de magistrală analizează cererile úi acordă accesul doar unui singur dispozitiv (stabileúte priorităĠile). În general, accesul la magistrală se acordă mai întâi perifericelor, úi nu microprocesorului (microprocesorul are o flexibilitate mai mare decât perifericele). Exemplu. Nu se opreúte hard disk-ul în timpul rotaĠiei pentru a servi microprocesorul; se tratează mai întâi cererea hard disk-ului.
3.4. Conectarea perifericelor la sistem Fig. 3.55. Organizarea dispozitivelor I/O la microcalculatoare.
SemnificaĠia notaĠiilor din figură este următoarea: UC – unitate centrală; M – memorie; MON. – monitor; KBD – tastatură; UDM/O – unitate disc magnetic / optic.
După cum s-a văzut, majoritatea calculatoarelor de tip PC compatibile IBM conĠin o placă de bază dotată cu sloturi (puncte de conectare la magistralele sistemului) prin care se cuplează plăcile de extensie, respectiv, porturile seriale sau paralele, pentru conectarea altor dispozitive (memorii secundare sau terĠiare, echipamente de intrare-ieúire, de achiziĠie, de afiúare, de comunicaĠie etc.). În general, în categoria perifericelor cu cuplare internă în sloturi intră placa video sau acceleratorul grafic, controlerul de disc, placa de sunet, placa de reĠea, plachetele de memorie RAM, plăcile pentru digitizarea imaginilor úi afiúarea acestora pe ecran etc.
Structura unui calculator
139
Legătura dintre toate aceste componente se asigură prin intermediul transmisiunilor de semnale (instrucĠiuni, comenzi, date), pe baza unor protocoale úi seturi de reguli standardizate. Sistemele de calcul sunt maúini care lucrează numai în sistem de numeraĠie binar, acesta fiind sistemul de numeraĠie optim folosit la o maúină de calcul ideală, deoarece se folosesc numai două cifre (0 úi 1) pentru reprezentarea oricărei informaĠii, de orice natură úi formă. Aceste numere au corespondenĠă în două niveluri de tensiune, în general, de valori 0 Vcc (low level) úi 5 Vcc (high level) în logica pozitivă sau niveluri inverse pentru logica negativă. După cum se útie, entitatea elementară purtătoare de informaĠie este digitul binar, care poate lua două valori logice: 0L sau 1L. Dacă aceste valori sunt echiprobabile, cantitatea de informaĠie purtată de un digit binar este de 1 bit. De aceea, printr-un abuz de limbaj, se confundă uneori noĠiunile de bit (ca măsură a informaĠiei) úi digit binar (ca semnal purtător de informaĠie). Un grup de 8 biĠi succesivi formează o structură numită octet sau byte. Sunt folosiĠi, de asemenea, multiplii acestuia: kiloocteĠii, megaocteĠii, gigaocteĠii úi teraocteĠii (KB, MB, GB, TB). Din punct de vedere fizic, legătura între sistemul de calcul úi periferice este realizată prin interfaĠa de intrare-ieúire (I/O). Dispozitivele de intrare-ieúire sau echipamentele periferice (EP) au, în general, o structură proprie, independentă de structura calculatorului la care se conectează (de exemplu: disc magnetic sau optic, imprimantă, plotter etc.) Cuplarea acestor echipamente la un sistem de calcul presupune adaptarea semnalelor specifice fiecărui echipament la semnalele de pe magistralăúi reglarea fluxului de date între calculator úi periferic. Rolul interfeĠelor I/O este de adapta particularităĠile unui dispozitiv I/O la cerinĠele unui anumit sistem de calcul. Sub acest aspect, o interfaĠă I/O este structurată pe două niveluri: un nivel adaptat semnalelor úi modului de funcĠionare al magistralei; un nivel adaptat particularităĠilor funcĠionale ale dispozitivului I/O. Primul nivel conĠine registre I/O (porturi) pentru date, comenzi úi stare, direct adresabile de CPU. Al doilea nivel este responsabil cu generarea semnalelor de comandă úi cu achiziĠia semnalelor de stare specifice unui anumit tip de dispozitiv periferic. Structura acestui nivel diferă mult de la un dispozitiv I/O la altul, în funcĠie de tipul perifericului. O interfaĠă I/O conĠine următoarele blocuri componente: registre de date (de intrare úi/sau de ieúire); registre de comenzi; registre de stare; bloc de selecĠie a registrelor (decodificator); dispozitiv de comandă. InterfaĠa I/O este prezentată în figura 3.56.
140
ARHITECTURA SISTEMELOR DE CALCUL
Registrele de date O interfaĠă poate asigura transferul de date într-un singur sens sau în ambele. Pot exista mai multe canale de intrare, de ieúire sau bidirecĠionale. Pentru fiecare canal úi pentru fiecare sens, se alocă un port (registru) de date, care ocupă o anumită adresă în spaĠiul de adrese I/O al CPU. Registrele de comenzi Au rolul de a genera semnalele specifice unui anumit echipament (de exemplu, pentru hard disk se face selecĠia capului de citire, selecĠia unităĠii de activare a scrierii etc.). Prin registrele de comandă pot fi selectate modurile de lucru ale interfeĠei sau se pot fixa parametrii de transfer (transfer pe octet sau pe bloc, frecvenĠa de transmisie, formatul datelor transmise etc.). Registrele de stare Oferă informaĠii despre starea echipamentului úi a interfeĠei (de exemplu, dispozitiv ocupat/defect, dată recepĠionată, registru de ieúire gol etc.). Aceste informaĠii sunt testate în timpul programului, pentru detectarea eventualelor erori de transfer sau a defectelor úi pentru reglarea vitezei de transfer.
Fig. 3.56. Schema de principiu a unei interfeĠe I/O.
Blocul de selecĠie Generează semnalele de validare a porturilor pentru operaĠiile de scriere úi citire. La selecĠie, se utilizează semnalele de comandă pentru citire/scriere de la/la periferic (de exemplu, semnalele IOR/ IOW/ în sistemele Intel).
Structura unui calculator
141
Dispozitivul de comandă Este un circuit secvenĠial sau combinaĠional, utilizat în cazul unor interfeĠe mai complexe, care controlează funcĠionarea celorlalte componente ale interfeĠei. Pentru anumite tipuri de interfeĠe există circuite specializate de control, numite controlere. Exemple: controler de disc flexibil i8272; controler DMA i8237-5; controler video MC6845. InterfaĠa poate să conĠinăúi o memorie ROM sau RAM. Memoria ROM păstrează driver-ul de interfaĠă, care este identificat la iniĠializarea sistemului úi este inclus în rutinele sistemului de operare. Memoria RAM este utilizată ca buffer între memoria principalăúi periferic. Necesitatea acesteia apare în cazul fluxurilor mari de date, situaĠie în care sincronizarea perifericului cu frecvenĠa de transfer de pe magistrală devine dificilă (de exemplu, interfaĠa de disc sau interfaĠa video). Toate transferurile de informaĠii úi date, între diverse componente ale sistemului de calcul sau între două sau mai multe sisteme legate într-o reĠea, transferuri care se realizează de-a lungul úi cu ajutorul magistralelor, se desfăúoară la nivel de bit, octet, cuvânt sau bloc de octeĠi. Aceste transferuri de biĠi se pot efectua în două moduri: prin transmisie paralelă; prin transmisie serială.
142
ARHITECTURA SISTEMELOR DE CALCUL
Transferul unui grup de octeĠi are loc cu o viteză considerabilă, dar are dezavantajul costului ridicat al instalaĠiei fizice, care presupune existenĠa a 8 fire úi a unei interfeĠe paralele aparte. De aceea, această transmisie se foloseúte la echipamentele care vehiculează volume mari de date într-un interval de timp foarte scurt. Porturile paralele sunt folosite, în general, la comunicaĠia unidirecĠională (dar nu în sens strict) úi dispun de 25 de pini (vezi figura 3.58).
Fig. 3.58. Dispunerea pinilor pentru transmisia paralelă.
3.4.1.1. ConfiguraĠia porturilor paralele ConfiguraĠia porturilor paralele nu este tot atât de complicată ca aceea a porturilor seriale. Chiar úi calculatorul original IBM PC are suport BIOS pentru trei porturi LPT, iar sistemul DOS l-a avut, de asemenea, întotdeauna. Deoarece BIOS úi DOS au definit de la început trei porturi paralele, problemele cu sistemele mai vechi sunt puĠin frecvente. Acestea pot totuúi să apară din lipsa disponibilităĠii unor porturi comandate prin întreruperi la sistemele cu magistrală ISA. Tabelul 3.5 SemnificaĠia pinilor portului paralel Nr. pin
3.4.1. Transmisia paralelă Transmisia paralelă este mai eficientă, prin faptul că se desfăúoară simultan pentru 8 biĠi, pe 8 căi diferite (vezi figura 3.57).
Fig. 3.57. Realizarea unei transmisii paralele.
SemnificaĠie
1
strobe
2...9
bit0...bit7
10
confirmare (ACK)
11
busy
12
lipsă hârtie (paper feed)
13
selecĠie
14
line feed (LF) automat după CR
15
eroare
16
iniĠializare display
17
selecĠie intrare
18...25
masă
În mod normal, un port comandat prin întreruperi nu este absolut necesar pentru operaĠiile de imprimare; de fapt, multe programe nu folosesc posibilitatea de comandă prin întreruperi. Întreruperea este totuúi folosită de multe aplicaĠii, cum sunt programele de tipărire din reĠea úi alte tipuri de tipărire în paralel sau de tip
Structura unui calculator
143
spooler (din fiúiere de tipărire). De asemenea, orice program utilitar pentru o imprimantă laser rapidă ar folosi des posibilitatea de întrerupere pentru a permite imprimarea. Dacă se foloseúte acest tip de aplicaĠii în cazul unui port care nu este comandat prin întreruperi, imprimarea se va face foarte lent sau se va opri. Singura soluĠie este să se folosească un port comandat prin întreruperi. Datorită faptului că sistemele PS/2 cu magistrală MCA pot folosi în comun întreruperile, ele nu au aceste probleme úi toate porturile paralele din aceste sisteme sunt comandate prin întreruperi pe IRQ7. Pentru a configura porturile paralele în sistemele cu magistrală ISA, trebuie Vă se poziĠioneze câteva jumper-e úi comutatoare. Deoarece fiecare placă de pe piaĠă este diferită, trebuie să se consulte manualul pentru a úti cum trebuie configurată. IBM include aceste informaĠii în documentaĠia fiecărei plăci úi oferă manuale tehnice pentru opĠiuni úi adaptoare, ca úi manuale de service úi întreĠinere hard, care descriu în detaliu poziĠiile jumper-elor úi comutatoarelor plăcilor adaptoare IBM. AlĠi producători oferă pur úi simplu pe lângă placă un manual care descrie placa úi include informaĠiile de configurare. Sistemele cu magistrală MCA sau PCI úi toate sistemele actuale au configurarea automată (plug¶Q¶play) sau comandată soft.
3.4.2. Transmisia serială Transmisia serială este mult mai simplă (vezi figura 3.59), deoarece nu necesită decât o cale de transmisie, un octet transmiĠându-se bit cu bit (de aceea este folosită la comunicaĠiile între diverse sisteme de calcul obiúnuite). În plus, costurile echipamentelor sunt foarte mici.
Fig. 3.59. Realizarea unei transmisii seriale.
ARHITECTURA SISTEMELOR DE CALCUL
144
Dezavantajul rezidă în viteza de transmisie, practic de zece ori mai mică faĠă de cea paralelă. Este totuúi transmisia folosită cel mai des, fiind fiabilă, ieftină úi simplu de întreĠinut. Porturile seriale sunt folosite la transmisia bidirecĠionalăúi dispun de 9 pini. Dispunerea pinilor este prezentată în figura 3.60, iar semnificaĠia lor, în tabelul 3.6. Pentru ambele tipuri de transmisiuni, aceeaúi mărime fizică caracterizează numărul de unităĠi binare transmise în unitatea de timp, úi anume, viteza de transmisie sau debitul de informaĠie.
Fig. 3.60. Dispunerea pinilor pentru transmisia serială.
UnităĠile de măsură folosite sunt: la transmisiunea paralelă: B/s (octeĠi pe secundă); la transmisiunea serială: b/s (biĠi pe secundă) úi baud (numărul de semnale electrice pe secundă sau numărul de schimbări ale tensiunii întro secundă – transmisia cifrelor 0 úi 1 înseamnă, de fapt, transmisia unor trenuri de semnale electrice cu două niveluri extreme, corespunzătoare celor două simboluri binare). Tabelul 3.6 SemnificaĠia pinilor la portul serial Nr. pin
SemnificaĠie
Denumire
1
intrare – detecĠie de undă purtătoare
DCD
2
intrare – recepĠie date
RD
3
ieúire – transmisie date
TD
4
ieúire – stare ready la dispozitivul cuplat
DTR
5
masă de protecĠie
GND
6
intrare – stare ready la transmisie
DSR
7
ieúire – cerere de transmisie
RTS
8
intrare – confirmare transmisie la dispozitivul cuplat
CTS
9
intrare – indicator de apel
RI
3.4.2.1. ConfiguraĠia porturilor seriale De fiecare dată când un port serial primeúte un caracter, el trebuie să atenĠioneze calculatorul activând o linie de întrerupere (IRQ). Sistemele cu magistrală ISA pe 8 biĠi au 8 asemenea linii, iar cele cu magistrală ISA pe 16 biĠi
Structura unui calculator
145
au 16 linii. Controlerul i8259A manipulează de regulă aceste cereri de atenĠionare. Într-o configuraĠie standard, COM1 foloseúte IRQ4, iar COM2 utilizează IRQ3. Atunci când elementul ROMBIOS conectează aceste porturi, este posibil să apară o problemă. Dacă autotestul POST nu găseúte portul serial 3F8, dar detectează în schimb 2F8, el este atribuit eronat portului serial COM1. Linia IRQ rezervată pentru COM1 este IRQ4, dar acest port serial foloseúte adresa portului COM2, adică foloseúte linia IRQ3 în locul liniei IRQ4. O altă problemă este aceea că IBM nu a introdus suportul BIOS pentru COM3 în sistemele sale originale cu magistrală ISA. Prin urmare, comanda DOS MODE nu poate lucra cu porturile seriale aflate dincolo de COM2, deoarece DOS primeúte datele de intrare-ieúire de la BIOS, care, în timpul rulării autotestului POST, detectează ce este instalat în sistem úi unde. Pentru a evita această problemă, cele mai multe programe de comunicaĠii úi unele periferice seriale (ca mouse-ul) acceptă porturile COM cu număr de ordine mai mare, adresându-le direct úi nu apelând funcĠii DOS. Porturile suplimentare trebuie să utilizeze întreruperi separate. Dacă se folosesc simultan două porturi COM, acestea trebuie să aibă întreruperi opuse. Iată care sunt posibilităĠile de operare simultană în configuraĠia standard de porturi úi întreruperi: COM1 (IRQ4) úi COM2 (IRQ3) COM1 (IRQ4) úi COM4 (IRQ3) COM3 (IRQ4) úi COM2 (IRQ3) COM3 (IRQ4) úi COM4 (IRQ3). 3.4.2.2. Standarde pentru transmisii seriale Pentru a conecta între ele prin intermediul porturilor seriale două sau mai multe calculatoare aflate la distanĠe destul de mari, nu mai este indicat să se folosească un cablu de reĠea, deoarece ar rezulta un preĠ destul de mare úi ar apărea probleme de transmisie a semnalelor. Conectarea se poate realiza totuúi cu ajutorul liniilor telefonice sau a cablului optic. În cazul primei soluĠii, este nevoie de un dispozitiv care să realizeze adaptarea la linia de telefon, úi anume, de un modem. Laboratoarele Bell úi CCITT au stabilit standardele pentru protocoalele modemurilor. Un protocol este o metodă prin care două entităĠi diferite se înĠeleg Vă comunice. Standardele modemurilor se pot împăUĠi în următoarele trei grupuri, în funcĠie de facilitatea oferită: standarde de modulaĠie: Bell 103, 212A, CCITT V.21, 22bis, 29, 32, 32bis etc.; standarde de corecĠie a erorilor: CCITT V.42 etc.; standarde de compresie a datelor: CCITT V.42bis, MNP etc. Standarde de modulaĠie ModulaĠia este metoda electronică de semnalare folosită de modemuri. Acestea trebuie să utilizeze aceeaúi metodă de modulaĠie pentru a se înĠelege între ele. Cele mai răspândite metode de modulaĠie digitală sunt (vezi figura 3.61): modulaĠia în amplitudine (MA) – Amplitude Shift Keying (ASK); modulaĠia în frecvenĠă (MF) – Frequency Shift Keying (FSK);
ARHITECTURA SISTEMELOR DE CALCUL
146
modulaĠia în fază (MP) – Phase Shift Keying (PSK); modulaĠia binară – Binary Phase/BiPhase Shift Keying (BPSK); modulaĠia în cuadratură (MQ) – Quadrature Phase Shift Keying (QPSK); MA în cuadratură – Quadrature Amplitude Modulation (QAM); modulaĠia impusurilor în cod (MIC) – Pulse Code Modulation (PCM).
Fig. 3.61. Tipuri comune de modulaĠie digitală (de impulsuri): ASK, FSK, PSK, BPSK.
Fig. 3.62. ModulaĠia QPSK făUă zgomot (stânga) úi cu zgomot (dreapta).
Fig. 3.63. ConstelaĠiile pentru modulaĠiile QAM-16 (stânga) úi QAM-128 (dreapta).
Structura unui calculator
147
ARHITECTURA SISTEMELOR DE CALCUL
148
La QPSK, zgomotul prezent pe canal poate fi mare, făUă să influenĠeze prea mult prin apariĠia erorilor (vezi figura 3.62). Nu se poate spune acelaúi lucru úi despre QAM-16 sau QAM-128, care sunt mult mai susceptibile la zgomot pe canal, unde chiar úi un nivel de zgomot redus poate duce la erori multiple (vezi figura 3.63). Pentru a reduce rata erorilor, se introduce posibilitatea corectării erorilor prin adăugarea de biĠi suplimentari fiecărui eúantion. Astfel de modulări sunt cunoscute sub numele de TCM (Trellis Coding Modulation – modulaĠie prin codificare matriceală), iar reprezentările lor se numesc constelaĠii. Standarde de corecĠie a erorilor CorecĠia erorilor se referă la posibilitatea pe care o au unele modemuri evoluate de a identifica erori în timpul transmisiei (EDC – Error Detection Codes) úi de a retransmite automat datele care par a se fi deteriorat în tranzit (tehnici ARQ – Automatic Repetition reQuest). Ca operaĠia de corecĠie să funcĠioneze, ambele modemuri trebuie să adere la acelaúi protocol de corecĠie a erorilor (ECC – Error Correction Codes).
Fig. 3.64. Realizarea unei transmisii sincrone.
transmisia asincronă (vezi figura 3.65), un mod mai simplu, deoarece între octeĠii transmiúi sunt intercalate pauze sau se folosesc biĠi fanion (unul sau doi), care indică începutul unui octet (biĠi de start) úi sfârúitul acestuia (biĠi de stop). La recepĠie, semnalul este curăĠat de aceúti biĠi fanion, rămânând doar biĠii care semnifică informaĠia propriu-zisă. ComunicaĠia asincronă nu este gestionată printr-o secvenĠă de tact sau un semnal adiacent de sincronizare a transmisiei.
Standardele de compresie a datelor Compresia datelor se referă la o posibilitate intrinsecă a unor modemuri moderne de a comprima datele pe care le transmit, făcând astfel economie de timp, spaĠiu de stocare úi costuri pentru utilizatorii de modemuri aflaĠi la distanĠe mari. Algoritmii de compresie utilizaĠi fac parte din familia metodelor făUă pierderi (lossless data compression).
3.4.3. Tipuri de transmisii După modul de folosire a liniei de comunicaĠie, transmisiile se clasifică în: transmisii simplex, la care partenerii de comunicaĠie au rolurile fixe de emiĠător úi receptor (de exemplu: transmisia radio, transmisia TV); transmisii semiduplex, care se efectuează pe aceeaúi linie de legătură între două componente, în ambele direcĠii, dar nu concomitent (de exemplu: transmisia prin walkie-talkie); transmisie duplex, la care partenerii de pe aceeaúi linie de transmisie pot folosi simultan linia la propriile transmisii, în ambele direcĠii, soluĠie mult mai eficientă decât cea anterioară (de exemplu: linia telefonică). DiferenĠele între modurile semiduplex úi duplex sunt vizibile: transmisia duplex este mai rapidă, deoarece două mesaje pot folosi linia simultan, nefiind nevoie de stări de aúteptare pentru eliberarea liniei. Având în vedere că pe o linie este necesară transmisia unor grupuri de biĠi (evident, octeĠi) úi nu a unor trenuri de biĠi succesivi, trebuie introdus un mecanism de separare logică a octeĠilor transportaĠi. De aceea, în construcĠia interfeĠelor se foloseúte o altă clasificare a transmisiilor úi anume: transmisia sincronă (vezi figura 3.64), în care grupurile de 8 biĠi se transmit făUă folosirea unor biĠi fanion sau a unor pauze de transmisie interoctet, fiind cel mai rapid úi eficient mod de transmisie;
Fig. 3.65. Realizarea unei transmisii asincrone.
La fel ca la memorii, úi aici se foloseúte noĠiunea de paritate pentru determinarea corectitudinii transmisiei de date (paritate pară – numărul total de biĠi 1 transmiúi este par úi paritate impară – numărul total de biĠi 1 transmiúi este impar). ImportanĠa úi eficienĠa folosirii acestei tehnici de securizare a transmisiilor este deosebită, prin faptul că în orice moment poate fi semnalată o eventuală eroare de transmisie, recurgându-se la corecĠii hard úi soft. Toate modemurile moderne dispun de astfel de metode de corecĠie. După ce microprocesorul procesează datele, acestea pot fi transmise către un dispozitiv periferic, într-un anumit format digital, fiind necesară o interfaĠă care să convertească semnalul transmis de sursă în semnal care poate fi interpretat de dispozitivul periferic destinaĠie, adică, un format digital interpretabil de către dispozitivul periferic destinaĠie.
Structura unui calculator
149
Sistemele de calcul nu pot exista făUă comunicaĠia cu mediul înconjurător, comunicaĠie care presupune primire de la mediu (returnare către mediu) de date sau informaĠii. Cum acest mediu este alcătuit la rândul său din sisteme interdependente care comunică la rândul lor, este nevoie de un sistem de comunicaĠie, de un limbaj universal, care, chiar dacă nu foloseúte aceleaúi noĠiuni, utilizează măcar aceleaúi semne. Toate aceste semne alcătuiesc un limbaj de tip analogic, recunoscut de orice fiinĠă vie (lumina, sunetul, impulsurile electrice neuronale, radiaĠiile calorice etc.). În concluzie, este necesar un mecanism care să integreze lumea digitală a sistemelor de calcul în acest univers analogic. $úa cum în contextul analogic componentele comunică între ele prin semnale integral analogice, în acelaúi mod există comunicaĠie la nivel intern, în contextul digital, între sisteme de calcul sau, în cadrul aceluiaúi sistem, între subsistemele care îl alcătuiesc (vezi figura 3.66). ComunicaĠia se realizează în format binar.
ARHITECTURA SISTEMELOR DE CALCUL
150
digital-digital. InterfeĠele standard utilizate în cadrul unui sistem de calcul sau între sisteme sunt de tip digital-digital. Ele primesc/transmit acelaúi tip de semnal, digital, úi au ca scop sincronizarea dispozitivelor care comunică, prin transformarea semnalului transmis într-un semnal corect interpretabil de către dispozitivul receptor. Această adaptare este efectuată din punctul de vedere al frecvenĠelor de tact, al nivelurilor de tensiune pentru semnalele emise/recepĠionate, al formatelor de date etc. Spre deosebire de primele două tipuri de interfeĠe, care pur úi simplu translatează semnalul digital în semnal analogic úi invers, interfaĠa digital-digital nu face decât să aducă la aceiaúi parametri comunicaĠia între două componente digitale.
3.4.4. Standarde de interfeĠe 3.4.4.1. InterfeĠe seriale RS-232 Una dintre cele mai uzuale interfeĠe seriale asincrone folosite este RS-232 (Reference Standard 232). Activitatea esenĠială a acesteia este adaptarea semnalului transportat la cerinĠele receptorului, activitate denumită comunicaĠie asincronă. În interfaĠa RS-232, datele sunt trimise sub formă de úiruri de biĠi, fiind suportat atât modul sincron cât úi cel asincron. Pe lângă circuitele de date, standardul defineúte un număr de circuite de control care supervizează conexiunea dintre DTE (Data Terminal Equipment, dispozitivul de la capătul îndepărtat al conexiunii, de obicei, un calculator sau un terminal) úi DCE (Data Circuitterminating Equipment, dispozitivul cel mai apropiat de conexiune, de obicei, un modem), conform reprezentării din figura 3.67.
Fig. 3.66. Tipuri de interfeĠe-translator.
Privind această problemă de comunicaĠie intersisteme, se constată că sunt necesare trei tipuri de interfeĠe-translator care pot asigura comunicaĠia între două lumi diferite (cea analogicăúi cea digitală) sau în cadrul aceleiaúi lumi. Aceste interfeĠe traduc semnalele astfel: analog-digital. Este interfaĠa clasică, utilizată ca poartă de intrare a informaĠiilor din mediul înconjurător în mediul digital. Ca exemple imediate, se specifică toată gama echipamentelor de intrare care comunică cu un sistem de calcul: tastatura, mouse-ul, ecranul senzitiv, scanerul, tableta digitizoare, camera video, modemul etc. digital-analog. Este complementară interfeĠei analog-digitale, venind în completarea sistemului de comunicaĠie úi asigurând bidirecĠionalitatea schimbului de informaĠii cu mediul. Această interfaĠă reprezintă poarta de ieúire din lumea digitală către cea analogică. Ca exemple, se pot menĠiona DAC-ul sau monitorul digital, imprimanta, modemul, placa de sunet etc.
Fig. 3.67. Conexiunile interfeĠei seriale RS-232 C.
Fiecare circuit de date sau control funcĠionează doar într-o singură direcĠie. Pentru că datele transmise úi datele recepĠionate folosesc fiecare câte un circuit separat, interfaĠa poate funcĠiona în mod duplex. În cadrul standardului, nu sunt definite formatul caracterelor din úirul de date sau tipul de codare a lor. Standardele RS-232 utilizează pentru niveluri de semnal (0 úi 1), în afara intervalului +3Vcc … –3Vcc (semnalele cuprinse în acest interval sunt ignorate),
Structura unui calculator
151
următoarele convenĠii: orice tensiune peste +3Vcc este considerată corespunzătoare unui bit de 0, iar sub –3Vcc este considerată corespunzătoare unui bit de 1. Standardul prevede un conector DB25 de tip tată (sau fiúă) pentru DTE úi un conector DB25 de tip mamă (sau priză) pentru DCE. Din cei 25 de pini ai conectorilor, doar 22 sunt folosiĠi pentru semnale úi masă. Deoarece majoritatea dispozitivelor folosesc doar 9 semnale, sunt folosiĠi adesea conectori mai mici. Protocolul RS-232 se bazează pe tehnica acordului confirmat (handshake), iar semnificaĠia celor mai uzuale semnale, relativ la DTE, este (vezi tabelul 3.6): Transmitted Data (TD) – transmisia datelor de la DTE la DCE; Received Data (RD) – recepĠia datelor de la DCE; Request To Send (RTS) – setat pe 0 de către DTE, pregăteúte DCE-ul pentru recepĠionarea datelor; Ready To Receive (RTR) – setat pe 0 de către DTE, indică DCE-ului faptul că DTE-ul este pregătit să recepĠioneze date; Clear To Send (CTS) – setat pe 0 de către DCE ca răspuns la RTS, permite DTE-ului să transmită date; Data Terminal Ready (DTR) – setat pe 0 de către DTE, indică faptul că acesta este gata să fie conectat (dacă DCE-ul este un modem, atunci această comandă îl activează); Data Set Ready (DSR) – setat pe 0 de către DCE, indică faptul că acesta este pornit úi pregătit să recepĠioneze comenzi sau date de la DTE (în cazul unui modem, DSR-ul este setat pe 0 de îndată ce acesta este gata să primească comenzi); Data Carrier Detect (DCD) – setat pe 0 de către DCE, indică faptul că sa stabilit o conexiune cu echipamentul partener; Ring Indicator (RI) – setat pe 0 de către DCE, arată că s-a detectat semnalul corespunzător apelului (soneriei) telefonice. Standardele mai noi (RS-422, RS-485 etc.) dezvoltă RS-232, urmărind optimizarea acestuia. UART Circuitele integrate folosite ca interfaĠă asincronă pentru transmisia serială sunt denumite UART (Universal Asynchronous Receiver Transmitter). În componenĠa lor intră registre de deplasare (shift, vezi figura 3.68), prin intermediul Fărora datele în format serial/paralel pot fi convertite în format invers (paralel/serial). Un UART tipic are trei secĠiuni: un modul receptor, care primeúte de la periferic un semnal serial úi îl converteúte paralel, după care îl depune pe magistrala de date; un modul emiĠător, care primeúte semnal paralel de pe magistrala de date úi îl converteúte în semnal serial pentru periferic; un controler de interfaĠă, care gestionează activitatea modulelor receptor úi emiĠător (vezi figura 3.69). Se folosesc cipurile UART 8251, 16450 (mai vechi) sau UART 16550 úi 16550A, mult mai rapide.
152
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.68. Intrare serială – ieúire paralelă (A); intrare paralelă – ieúire serială (B).
Fig. 3.69. Al treilea modul UART: controlerul de interfaĠă.
ACIA Un model similar de interfaĠă universală asincronă este ACIA (Asynchronous Communication Interface Adapter), instalată în blocul de mapare a memoriei úi care recepĠionează 4 linii de adrese, 3 selecĠii de cip úi o selecĠie de registru. Cipul standard folosit este MC 6850, cu 24 de pini. Comanda ACIA se realizează prin două perechi de registre, prima fiind de stare, iar cel de-a doua, de control (vezi figura 3.70).
Structura unui calculator
153
Fig. 3.70. Registrul de stare úi registrul de control pentru comanda ACIA.
FuncĠionarea ACIA are la bază două registre de deplasare (unul de tip readonly úi celălalt, write-only) pentru convertirea semnalelor paralel/serial úi serial/paralel. ComunicaĠia cu magistrala de date se face prin intermediul unui buffer de date, cuplat direct la aceasta. Un exemplu tipic de interfaĠă ACIA este modemul (vezi figura 3.71).
Fig. 3.71. Modemul ca exemplu de interfaĠă ACIA.
154
ARHITECTURA SISTEMELOR DE CALCUL
USB InterfaĠa USB (Universal Serial Bus) a înlocuit interfeĠele RS-232 úi paralelă în multe situaĠii. Astfel, USB este acum cea mai folosită interfaĠă în conectarea imprimantei, mouse-ului sau scanerului la calculator. USB a fost proiectată pentru a permite conectarea dispozitivelor periferice printr-un conector standardizat, care Vă înlocuiască multitudinea de conectori ai unui calculator, úi să îmbunăWăĠească funcĠionalitatea plug¶Q¶play, permiĠând dispozitivelor să fie conectate úi deconectate făUă a fi necesară repornirea calculatorului. De asemenea, dispozitivele care consumă puĠin pot fi alimentate direct prin interfaĠa USB. Versiunile standardului USB sunt următoarele: USB 1.0, lansat în 1996, defineúte două viteze de transfer: 1,5 Mb/s (Low Speed) úi 12 Mb/s (Full Speed); USB 1.1 , lansat în 1998, defineúte aceleaúi viteze de transfer úi are două tipuri de conectori: seria A úi seria B; USB 2.0, lansat în 2000, defineúte o a treia viteză: 480 Mb/s (High Speed); USB 3.0, anunĠat pentru 2008, va defini viteze de până la 10 ori mai mari faĠă de versiunea anterioară, ajungând la aproximativ 4,8 Gbit/s. Deúi toate calculatoarele actuale sunt echipate cu porturi USB, acestea nu au înlocuit complet conectorii standard existenĠi. Monitorul, tastatura, porturile paralele úi cele seriale utilizează, în continuare, conectori separaĠi. Un motiv ar putea fi arhitectura mai complexă a magistralei USB, care trebuie să permită conectarea unor tipuri variate de periferice. Un alt motiv ar fi că perifericele care trebuie să conĠină un distribuitor, cum este monitorul sau tastatura, devin mai complexe úi mai costisitoare. USB conectează mai multe dispozitive la un HCI (Host Controller Interface), prin intermediul unor hub-uri. USB este complet controlat de HCI. Nu poate exista decât un singur host pe o magistrală la un moment de timp. Un adaos la standardul USB introduce un protocol (Host Negociation Protocol) care permite negocierea de host între două dispozitive USB.
Fig. 3.72. Arhitectura interfeĠei USB.
Structura unui calculator
155
Orice topologie necesită cel puĠin un hub, numit root-hub, ataúat direct la HCI. Un host comunică cu dispozitivele prin intermediul unor canale logice (pipes), care au niúte terminale logice pe dispozitive numite endpoints (vezi figura 3.72). Uneori este folosit termenul endpoint pentru a identifica úi canalul logic respectiv. Există 16 endpoint-uri [0-15] úi pipe-uri corespunzătoare în fiecare direcĠie (in/out, referindu-se la host), deci un periferic poate avea 32 de pipe-uri active simultan. Fiecare endpoint poate transfera date într-o singură direcĠie, deci, fiecare pipe este unidirecĠional. Endpoint-urile 0 pentru inúi out sunt întotdeauna active, fiind folosite pentru management. ComunicaĠiile între periferice úi host se execută prin conexiuni dispozitivhost úi host-dispozitiv. Conexiunea de la host la dispozitiv se numeúte downstream, iar conexiunea de la dispozitiv la host se numeúte upstream. Conectorii USB sunt diferiĠi pentru upstream úi downstream úi nu pot fi interschimbaĠi. O comunicaĠie (transfer de date) nu se poate efectua decât între porturi diferite de upstreamúi downstream. Există două tipuri de conectori principali: tip A úi tip B. Conectorii de tipul A se folosesc pentru host-uri sau hub-uri úi se regăsesc cel mai des pe plăcile de bază ale PC-urilor. Conectorii de tipul B se găsesc numai la dispozitivele periferice. Nu pot exista legături de cabluri decât de la tipul A de conector la tipul B, dar se pot Jăsi úi cabluri care nu respecte aceste specificaĠii, numite cabluri directe. Alte tipuri de conectori sunt mini-USB de tip A úi B (mai frecvent utilizaĠi) sau AB úi micro-USB, folosiĠi în special pentru dispozitive de dimensiune mai mică, fiind mai uúor de integrat. Conectorii USB de diferite tipuri sunt reprezentaĠi în figura 3.73.
Fig. 3.73. ConfiguraĠia pinilor conectorilor USB de tip A, B, mini-A, B úi micro-A, B.
Cablul USB foloseúte 4 fire (vezi figura 3.74): două pentru putere: (tensiunea VBUSúi masa) úi două pentru semnalele de date (pinii D+úi D–). Alimentarea VBUS este, în general, de 5V (cu o toleranĠă prestabilită), iar modul de transmisie a datelor este diferenĠial. Modul de codare al datelor este NRZI (Non Return to Zero Inverted), folosit pentru a trimite date sincronizate úi pentru a sincroniza host-ul cu semnalul de ceas. D+úi D– sunt semnale transmise împreună. În cazul micro-USB, există 5 pini (apare în plus un pin de identificare, ID).
Fig. 3.74. Cablul USB.
156
ARHITECTURA SISTEMELOR DE CALCUL
SemnificaĠia pinilor conectorilor USB cu 4 pini este prezentată în tabelul 3.7. Tabelul 3.7 SemnificaĠia pinilor conectorilor USB Pin
Descriere
1
VBUS (4,35–5,25 V)
2
D–
3
D+
4
GND (0 V)
Există trei tipuri de alimentare posibile, în funcĠie de diversele dispozitive ataúate: de putere mică (low power) – pot lua un curent de 100 mA de la sursa de alimentare (pinul VBUS); de putere mare (high power) – pot lua un curent între 100 mA úi 500 mA de la VBUS; cu auto-alimentare (self power) – pot lua un curent de 100 mA de pe magistralăúi se mai pot alimenta de la o sursă externă. IEEE 1394 (FireWire) FireWire este numele înregistrat de Apple pentru standardul IEEE1394, fiind o specificaĠie de magistrală serială, care asigură comunicaĠii de mare viteză úi servicii de date în timp real. S-a impus mai ales în domeniul conexiunilor externe, datorită costurilor mici de fabricaĠie úi a unui sistem simplu de cablare. De asemenea, a devenit interfaĠa standard pentru conectarea componentelor de comunicaĠii úi control în domeniul audio-vizual. FireWire este disponibilă úi în versiunile wireless, fibră optică úi cablu coaxial, folosind protocoale simultane. InterfaĠa FireWire suportă conectarea simultană a 63 de periferice. FireWire este bazată pe comunicaĠia punct-la-punct, ceea ce permite, de exemplu, ca o imprimantăúi un scaner să comunice între ele făUă a încărca suplimentar procesorul úi magistrala sistemului. De asemenea, la fel ca interfaĠa USB, FireWire suportă tehnologia plug'n'playúi conectarea dispozitivelor la magistrală făUă a fi necesară repornirea calculatorului. InterfaĠa FireWire poate alimenta cu energie dispozitive care au un consum mai mic de 45 W úi o tensiune mai mică de 30 V. Standardul fizic de conectare se prezintă în două forme – o mufă de 6 pini úi una de 4 pini (vezi figura 3.75). Singura diferenĠă între acestea este faptul că doar mufa de 6 pini poate alimenta dispozitive externe, mufei de 4 pini lipsindu-i conexiunile necesare pentru aceasta.
Structura unui calculator
157
Cablul FireWire conĠine 6 fire de cupru (vezi figura 3.76): două transportă energie, iar celelalte patru sunt grupate în câte două perechi. Fiecare pereche este ecranată, ca úi întregul cablu.
Fig. 3.75. Conectorii interfeĠei FireWire.
Fig. 3.76. Cablul FireWire.
Cablurile de alimentare transportă tensiuni între 8 úi 40 V c.c. úi amperaje până la 1,5 A úi sunt folosite pentru menĠinerea continuităĠii stratului fizic al unui echipament, când apar căderi de tensiune sau defecĠiuni, úi pentru alimentarea echipamentelor conectate la magistrală. Deci, cablul FireWire transportă atât date, cât úi energie, ceea ce constituie un mare avantaj pentru utilizator. Standardul FireWire se prezintă în două versiuni: FireWire 400 úi FireWire 800. FireWire 400 suportă rate de transfer de 100, 200 úi 400 Mbit/s. Lungimea maximă a unui cablu este de 4,5 metri, însă aceste cabluri pot fi legate între ele folosindu-se repetoare sau hub-uri până la o lungime maximă de 72 m sau echivalentul a 16 cabluri interconectate. FireWire 800 (2003) úi S800T (2007) suportă o rată maximă de transfer de 800 Mb/s úi o lungime mai mare a cablurilor (100 m), fiind compatibilă la nivel logic cu FireWire 400 însă la nivel fizic conectorii nu sunt compatibili, fiind necesar un convertor. Viitoarele versiuni de FireWire intenĠionează să aducă o creútere de viteză de până la 6,4 Gb/s úi conectori suplimentari, cum sunt interfeĠele multimedia mici.
Fig. 3.77. Conectorul RJ45 al interfeĠei Ethernet.
3.4.4.2. InterfeĠe paralele Cel de-al doilea tip de interfaĠă, indiscutabil mai rapidă, este interfaĠa paralelă. Din păcate, este utilizabilă pentru transmisii la distanĠe foarte mici, în comparaĠie cu cei 30 m la care se poate comunica prin interfeĠe seriale, motivul fiind nivelurile energetice foarte scăzute la care se lucrează. Este cunoscută úi ca port imprimantă sau port Centronics.
158
ARHITECTURA SISTEMELOR DE CALCUL
IEEE 1284 În 1994, mai vechile interfeĠele Bitronics úi Centronics au dat naútere standardului IEEE 1284. InterfaĠa paralelă nu a fost folosită doar pentru imprimante, ci úi pentru alte dispozitive (chei dongle pentru protecĠia la copiere, unităĠi ZIP, scanere, modemuri externe, plăci de sunet úi camere web externe, gamepad-uri, joystick-uri, hard disk-uri úi CD-ROM-uri externe, programatoare EPROM sau controlere hardware etc.). Azi, interfaĠa paralelă a fost înlocuită de interfaĠa USB úi chiar de cea Ethernet, în unele cazuri (vezi figura 3.77). MulĠi producători de calculatoare personale úi laptopuri nici nu mai includ un port paralel, considerându-l învechit, dar úi pentru că există convertoare USBparalel, care pot fi folosite în cazul imprimantelor care au numai port paralel. Standardul IEEE 1284 defineúte o comunicaĠie paralelă bidirecĠională între calculatoare sau alte dispozitive, oferind o bandă maximă teoretică de 4 Mb/s, úi poate funcĠiona în cinci moduri: Compatibility Mode (Centronics) – foarte asemăQător modului unidirecĠional original Centronics; Nibble Mode – foloseúte liniile de stare pentru a recepĠiona date de la imprimantă (pentru transferul extins de stare al imprimantei); Byte Mode – se transmit 8 biĠi concomitent, folosind liniile de date; Enhanced Parallel Port (EPP) – este o arhitectură semiduplex bidirecĠională, care permite dispozitivelor să transmită cantităĠi mari de date (pentru scanere sau dispozitive de stocare); Extended Capability Port (ECP) – similar EPP-ului, poate oferi o bandă de până la 2,5 Mb/s (pentru a mări viteza, foloseúte RLE – Run Length Encoding –, o compresie simplă a secvenĠelor lungi care conĠin acelaúi caracter repetitiv, folosind un cod de doar doi octeĠi). Calculatoarele recente cu port paralel îl pot folosi în modurile EPP, ECP sau în mod mixt. PIA Cel mai uzual model de interfaĠă utilizat este PIA (Peripheral Interface Adapter). Cipul standard folosit este 6821 PIA cu 40 de pini. InterfaĠa foloseúte două registre, unul pentru datele transmise de la periferic la microprocesor úi celălalt pentru sensul opus. Când perifericul transmite un octet de date de-a lungul celor opt linii către sistem, datele sunt depuse într-un registru PIA unde vor aútepta până când microprocesorul este pregătit pentru preluarea lor. După efectuarea citirii acestui octet stocat, procesul se repetă pentru următorul octet. Pentru transmisii în sens invers, procesorul va transmite un octet de-a lungul magistralei de date către cipul I/O, care le va depozita într-unul din aceste registre. Când perifericul este în stare ready, va transmite un semnal către PIA, care îi va pune la dispoziĠie datele, apoi procesul se reia. În plus faĠă de aceste registre, este disponibil un registru de stare ai cărui biĠi, folosiĠi ca fanioane, indică microprocesorului care coordonează activităĠile I/O starea registrelor amintite, validitatea octetului de date transferat sau, în general,
Structura unui calculator
159
starea interfeĠei paralele PIA. Toate aceste registre – programabile – sunt cuplate la magistrala de date a sistemului, prin aceasta fiind adresate direct de către procesor. Faptul că, prin intermediul registrelor interne, aceste cipuri-interfeĠe sunt programabile le face deosebit de practice, deoarece fiecare port al unei linii de transmisie (din cele opt existente) poate fi programat úi controlat individual în privinĠa direcĠiei de transfer a datelor. Astfel, anumite linii pot fi programate pentru transmisie într-un sens, în timp ce celelalte acĠionează în sens opus. Un exemplu clasic de folosire a comunicaĠiilor paralele este imprimanta. În figura 3.78 este reprezentată o implementare fizică a interfeĠei PIA, prin cipul W65C21S, compatibil cu microprocesoarele din familia Motorola 68• • . InterfaĠa prezintă două porturi I/O bidirecĠionale (A úi B) pe câte 8 biĠi, cu comandă individuală a sensului datelor. Transferul datelor se face folosind un protocol automat de tip handshake. InterfaĠa este prevăzută cu două ieúiri de întrerupere comandate software. Portul A, prin ieúirea CA2, asigură transferuri de mare viteză, pentru operaĠii statice sau cu o frecvenĠă de până la 14 MHz.
Fig. 3.78. Conexiunile interfeĠei PIA pentru microprocesoarele din familia Motorola 68• • .
3.4.4.3. InterfeĠe wireless Bluetooth Tehnologia Bluetooth reprezintă un set de specificaĠii bazate pe undele radio, pentru o reĠea wireless personală, PAN (Personal Area Network). DocumentaĠia acestui standard a fost creată în anul 1994 de către Jaap Haartsen úi Sven Mattisso, angajaĠi ai diviziei Mobile Platforms din cadrul companiei Ericsson. Astfel, standardul dezvoltat de aceútia se baza pe tehnologia de transmisie cu salt în frecvenĠă úi spectru distribuit, FHSS (Frequency-Hopping Spread Spectrum). SpecificaĠiile platformei Bluetooth au fost formalizate de către Bluetooth Special Interest Group (SIG). Aceasta organizaĠie a fost fondată în data de 20 mai 1998 de către Ericsson, IBM, Intel, Toshiba, Sony Ericsson úi Nokia, urmând ca de-a lungul timpului peste 7.000 de companii să adere la acest grup.
160
ARHITECTURA SISTEMELOR DE CALCUL
Tehnologia Bluetooth creează o cale prin care se poate face schimb de informaĠii între aparate precum telefoane mobile, laptopuri, calculatoare personale, imprimante, camere digitale úi console video, printr-o frecvenĠă radio sigurăúi de rază mică. Aparatele Bluetooth comunică între ele atunci când acestea se află în aceeaúi rază de acĠiune. Ele folosesc un sistem de comunicaĠii radio, astfel încât nu este nevoie să fie aliniate faĠă în faĠă pentru a transmite, putând fi plasate chiar în camere diferite dacă transmisia este suficient de puternică. Clasele de emisie definite prin tehnologia Bluetooth sunt prezentate în tabelul 3.8. Tabelul 3.8 Clasele de emisie Bluetooth Clasa
Puterea maximă permisă (mW)
Puterea maximă permisă (dBm)
Raza aproximativă (m)
Clasa 1
100
20
~ 100
Clasa 2
2,5
4
~ 10
Clasa 3
1
0
~1
Protocolul Bluetooth funcĠionează în banda de frecvenĠă 2,4–2,4835 GHz. Pentru a preveni interferenĠele cu alte dispozitive care operează în banda de 2,45 GHz, protocolul Bluetooth împarte banda în 79 de canale (fiecare cu o lăĠime de bandă de 1 MHz) úi schimbă permanent canalele de 1.600 de ori pe secundă. Implementările Bluetooth din versiunile 1.1 úi 1.2 funcĠionează la viteza de 723,1 kb/s, iar versiunea 2.0 foloseúte modul EDR (Enhanced Data Rate), pentru a atinge o viteză de 2,1 Mb/s. Din punct de vedere tehnic, versiunea 2.0 are un consum de energie mai ridicat, însă la o viteză de transfer de peste 3 ori mai mare. Astfel, în mod practic este redus consumul de energie faĠă de variantele anterioare cu peste 50%. Standarde Bluetooth sunt: a) Bluetooth 1.0 úi 1.0B. Versiunile 1.0 úi 1.0B au avut multe probleme, care au făcut producătorii să întâmpine dificultăĠi în a face produsele funcĠionale. b) Bluetooth 1.1. Multe din erorile manifestate la versiunea 1.0B au fost reparate în versiunea 1.1. De asemenea, aceasta versiune oferea suport pentru canale necriptate úi avea adăugat un indicator al puterii semnalului de transmisie. c) Bluetooth 1.2. Această versiune este compatibilă cu 1.1. Principalele sale îmbunăWăĠiri sunt: viteză mai mare de descoperire úi de conectare la alte dispozitive; viteză practică de transfer îmbunăWăĠită (deúi maximul teoretic rămâne 721 kb/s); îmbunăWăĠirea rezistenĠei la interferenĠă cu alte dispozitive radio, prin implementarea mecanismului AFHSS (Adaptive Frequency-Hopping Spread Spectrum).
Structura unui calculator
161
d) Bluetooth 2.0. Este compatibilă la nivel de comunicaĠie cu versiunile 1.• . Principala îmbunăWăĠire este introducerea modului EDR (Enhanced Data Rate), care permite o viteză de 3 Mb/s. Trecerea la versiunea 2.0 a vizat următoarele optimizări: viteză de transmisie de 3 ori mai mare; consum de energie mai mic; rată a erorilor de transmisie, BER (Bit Error Ratio), mai mică. Un dispozitiv Bluetooth de tip master poate comunica simultan cu alte maximum 7 dispozitive. Acest grup de 8 dispozitive se numeúte reĠea de tip piconet. Astfel, piconetul poate fi definit ca o reĠea de tip ad-hoc, care foloseúte protocoalele Bluetooth pentru a permite unui dispozitiv master să se interconecteze cu alte 7 dispozitive Bluetooth active. Pe lângă acestea, pot exista până la un număr de maximum 255 de dispozitive inactive, pe care dispozitivul master le poate activa în orice moment. La un moment dat, prin intermediul protocolului Bluetooth, dispozitivul master nu poate comunica decât cu un singur alt echipament. Pentru a combate acest aspect negativ, dispozitivele îúi pot schimba rolul în cadrul piconetului în orice moment úi astfel orice dispozitiv slave poate deveni master úi viceversa. Mai mult decât atât, specificaĠiile standardului Bluetooth permit interconectarea a două sau mai multe piconeturi pentru a forma un scatternet. Astfel, unele echipamente vor avea rolul de master într-un piconet úi de slave în alt piconet. Acest lucru este util, deoarece se permite interconectarea a mai mult de 8 dispozitive active simultan. Orice dispozitiv Bluetooth va transmite la cerere altui dispozitiv următoarele seturi de informaĠii: numele úi clasa dispozitivului, lista de servicii úi specificaĠiile tehnice (capabilităĠile dispozitivului, fabricantul etc.). De asemenea, orice dispozitiv Bluetooth poate executa o căutare pentru a vedea ce alte echipamente compatibile există în proximitate úi, de asemenea, orice dispozitiv poate fi configurat să Uăspundă la căutarea executată de alt echipament. Totuúi, dacă dispozitivul care doreúte să se conecteze la alt echipament cunoaúte adresa exactă a acestuia, se va putea conecta la el indiferent de setările de vizibilitate ale echipamentului accesat. Fiecare dispozitiv Bluetooth are o adresă unică pe 48 de biĠi. Aceste adrese nu sunt totuúi folosite în mod direct de către utilizatori, optându-se pentru utilizarea unor nume care pot fi definite. Aceste nume sunt afiúate atunci când un dispozitiv Bluetooth le scanează pe cele din proximitatea sa. Dispozitivele Bluetooth se conectează prin intermediul unui proces numit pairing. Astfel, se stabileúte o legătură între dispozitive pe baza unei parole (passkey). De asemenea, datele transferate între dispozitivele Bluetooth pot fi criptate, pentru a preveni mai eficient interceptarea lor. Arhitectura Bluetooth, care evidenĠiază protocoalele legate de modelul OSI, inclusiv de setul comenzilor AT (vezi paragraful 2.7) este reprezentată în figura 3.79. Wi-Fi O reĠea wireless WLAN (Wireless Local Area Networks) este o reĠea făUă fir, locală, extinsă pe arii limitate, în funcĠie de echipamentele folosite úi de puterea acestora, prin care se poate face transfer de date úi internet folosind undele radio. Raza de acoperire poate fi de la câteva zeci de metri până la 20 km, prin folosirea soluĠiilor iDirect, care au implementată interfaĠa de administrare pentru 200 de utilizatori.
162
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.79. Arhitectura Bluetoooth.
Wi-Fi, prescurtarea de la Wireless Fidelity, reprezintă o categorie de produse compatibile cu standardele WLAN, bazate pe protocoale IEEE 802.11. Noile standarde, bazate pe specificaĠiile 802.11 (cum este 802.16 WiMAX), fac parte din reĠelele actuale úi oferă multe îmbunăWăĠiri, de la arii mari de acoperire până la viteze mari de transfer. DiferenĠele între o reĠea terestră úi o reĠea wireless radio sunt multiple úi reprezintă beneficii în favoarea reĠelelor wireless: Spre deosebire de alte sisteme radio, Wi-Fi foloseúte un spectru de frecvenĠe radio care nu are nevoie de licenĠă, deci, nu necesită aprobare pentru utilizare. Se permite dezvoltarea variată a unei reĠele locale WLAN făUă utilizarea cablurilor, reducând costurile necesare dezvoltării reĠelei úi evitând diferite obstacole în implementarea reĠelei (locuri inaccesibile, care nu pot fi cablate). Multe reĠele Wi-Fi suportă roaming, permiĠând unui client să se mute dintr-un punct de acces în altul în aceeaúi clădire sau zonă geografică. Wi-Fi este un standard global, clienĠii Wi-Fi putând lucra în diferite Ġări de pe glob. Există posibilităĠi variate de conectare a utilizatorului final, prin intermediul plăcilor Wi-Fi PCMCIA, PCI, USB sau a sistemelor Wi-Fi 802.11b sau 802.11g integrate în majoritatea notebook-urilor moderne. Există posibilităĠi alternative sau combinate de antene Wi-Fi unidirecĠionale sau bidirecĠionale, sectoriale, direcĠionale, omnidirecĠionale, punct la punct, punct la multi-punct, sisteme de bridge (interconectarea a două reĠele wireless), puncte de acces de diferite puteri, cu diferite câútiguri etc. Arhitectura unui sistem de comunicaĠie care foloseúte tehnologia Wi-Fi este prezentată în figura 3.80.
Structura unui calculator
163
164
ARHITECTURA SISTEMELOR DE CALCUL
Dar dacă procesorul nu mai este interogat asupra acelor activităĠi, atunci de controlul úi securitatea lor se ocupă un dispozitiv numit controler DMA (în general de tipul i8237), care suportă, în cazul PC-XT, patru canale (DMA0• DMA3), putând gestiona până la patru procese simultane de transfer de date. Calculatoarele dotate cu procesoare de la 80386 în sus dispun de încă patru canale DMA pe 16 biĠi (numite HDMA), gestionate de un al doilea controler de tipul i8237A-5 (vezi figura 3.81).
Fig. 3.80. Arhitectura unui sistem de comunicaĠie Wi-Fi.
3.4.5. Gestionarea tranzacĠiilor I/O În ceea ce priveúte conectarea plăcilor de extensie-periferice într-unul din sloturile libere de pe placa de bază, simpla cuplare fizică a acestora este suficientă din punct de vedere hardware, dacă dispozitivele sunt de tipul plug'n'play. Existăúi o integrare de tip software, pe baza driver-elor care însoĠesc, de obicei, plăcile de extensie úi, de asemenea, este posibilă parĠial configurarea pe baza setărilor din CMOS, soluĠii care însă nu rezolvă integral problema interconectării. Pentru a integra complet un dispozitiv periferic într-un sistem de calcul, indiferent de rolul acestuia, este nevoie de a defini úi a asigura comunicaĠia generală, prin care se va semaforiza úi controla, la comanda microprocesorului, activitatea totală a dispozitivului în cauză, respectiv, de a-l cupla în sistemul general al transferurilor de date. Este vorba, pe de-o parte, de a stabili úi rezerva un canal de comunicaĠie DMA (Direct Memory Access), iar, pe de altă parte, de a stabili úi rezerva anumite canale de întrerupere IRQ (Interrupt Request) úi, în final, de a seta adresele de intrare-ieúire (adrese I/O), la nivelul cărora se efectuează transmiterea datelor, comenzilor úi parametrilor necesari proceselor executate de periferic. 3.4.5.1. Transferurile DMA (Direct Memory Access) Folosirea DMA duce la creúterea vitezei sistemului prin degrevarea microprocesorului de controlul transferurilor de date, accesul la memorie fiind efectuat de către placa de extensie respectivă, făUă supraveghere continuă. În esenĠă, când este vorba despre DMA, se face practic referire la transferurile de date (úi la controlul acestora) între memorie úi porturile I/O (care pot fi definite úi ca puncte de cuplare a extensiilor periferice la sistem).
Fig. 3.81. Conectarea controlerului DMA în sistem.
Un transfer DMA constă din următoarele faze: 1. iniĠializarea transferului; 2. transferul efectiv de date; 3. verificarea terminării úi a corectitudinii transferului. În faza de iniĠializare, CPU înscrie în registrele interne ale controlerului DMA adresa de început a blocului de memorie implicat în transfer úi numărul de octeĠi transferaĠi, precizând sensul de transfer (citire din memorie úi scriere la periferic sau citire de la periferic úi scriere în memorie). La lansarea unui transfer DMA de către o interfaĠă de intrare-ieúire, succesiunea evenimentelor din faza de iniĠializare este următoarea: interfaĠa generează un semnal de cerere, DRQ (DMA ReQuest), către controlerul DMA; controlerul DMA solicită prin linia HOLD accesul la magistrală; după terminarea ultimului ciclu în execuĠie, CPU suspendă temporar activitatea pe magistrală prin dezactivarea amplificatoarelor de date, adrese úi comenzi (magistrala trece în starea de impedanĠă înaltă);
Structura unui calculator
165
ARHITECTURA SISTEMELOR DE CALCUL
166
CPU răspunde controlerului DMA prin generarea unui semnal, HLDA (HoLD Acknowledge), prin care anunĠă acceptarea cererii de cedare a magistralei; controlerul DMA preia controlul magistralei prin generarea semnalelor de comandă úi a celor de adrese pentru efectuarea transferului, Uăspunzând interfeĠei I/O prin semnalul DACK (DMA ACKnowledge) în momentul în care transferul poate începe. În faza de transfer al datelor au loc mai multe cicluri de transfer sub supervizarea controlerului DMA. În cadrul unui ciclu se transferă un cuvânt de date. În faza de verificare se realizează un control de paritate sau CRC. Pentru a realiza funcĠiile prezentate, un controler DMA trebuie să conĠină următoarele componente: registre pentru generarea adreselor de memorie; număUătoare pentru contorizarea cuvintelor de date transferate pe fiecare canal; un registru de stare pentru marcarea configuraĠiei curente; registre de comandă pentru programarea modului de transfer; un circuit de arbitrare pentru soluĠionarea cererilor multiple de acces; circuite pentru controlul magistralei (amplificatoare de adrese, date, comenzi); un dispozitiv de comandă secvenĠial pentru derularea ciclurilor DMA úi pentru preluarea/cedarea magistralei. SituaĠiile în care este necesar acest dispozitiv de comandă secvenĠial sunt cele în care viteza de transfer impusă de echipamentul periferic este relativ mare úi CPU nu reuúHúte să execute instrucĠiunile conĠinute în ciclul de transfer în perioada dintre două solicitări succesive. În cazul PC-urilor, transferul DMA se utilizează pentru interfaĠa de floppy disk úi pentru transferul serial pe bloc. Un canal DMA (canalul 0) este utilizat pentru operaĠia de reîmprospătare (refresh) a memoriei dinamice. Sunt simulate periodic cicluri de citire a memoriei. Referitor la primele patru canale DMA, dintre acestea canalele 0, 2 úi 3 sunt rezervate pentru activitatea internă a sistemului de calcul (0 – RAM refresh, 2 – operaĠii cu floppy disk-ul úi 3 – operaĠii cu hard disk-ul). Rămâne disponibil canalul 1 pentru dispozitive periferice. Sunt disponibile încă 3 canale HDMA: 5, 6, 7, în general, canalul 4 fiind folosit pentru funcĠionarea controlerului HDMA, cuplat în cascadă cu primul controler. Utilizările tipice ale canalelor DMA se pot observa în tabelul 3.9. În momentul în care o setare DMA a fost făcută greúit (de exemplu, mai multe dispozitive folosesc acelaúi canal DMA), placa nou montată nu va mai funcĠiona sau sistemul se va bloca. Concluzia este că nu trebuie folosite, practic, aceleaúi canale DMA pentru două dispozitive periferice diferite. 3.4.5.2. Canalele IRQ (Interrupt Request) În ceea ce priveúte cel de-al doilea parametru, canalul IRQ, úi acesta poate cauza, la setări defectuoase, funcĠionări greúite úi blocări de sistem.
Tabelul 3.9 Utilizările tipice ale canalelor DMA DMA
magistrală
utilizare tipică
0
–
RAM refresh
alte utilizări uzuale –
1
8/16 biĠi
Placă de sunet (low DMA)
Adaptoare SCSI, porturi paralele, plăci de reĠea, modemuri de voce
2
8/16 biĠi
Controler floppy disk
–
3
8/16 biĠi
Liber
Adaptoare SCSI, porturi paralele, plăci de sunet (low DMA), de reĠea, voice modem, controler HD
4
–
Redirectat pentru nivelele DMA 0• 3
–
5
16 biĠi
Placă de sunet (high DMA)
Adaptoare SCSI, plăci de reĠea
6
16 biĠi
Liber
Placă de sunet (high DMA), plăci de reĠea
7
16 biĠi
Liber
Placă de sunet (high DMA), plăci de reĠea
Întreruperile hardware sunt gestionate de un cip de genul i8259. Logica procesului de cerere de întrerupere (Interrupt Request) constă din conectarea funcĠională la sistem a unei extensii (cu rolul úi scopul său bine definit) úi optimizarea transferurilor de date úi informaĠii către/de la microprocesor dinspre/spre acele extensii. În acest mod, se eliberează microprocesorul de sarcina cronofagă de a urmări activitatea perifericului în cauză. Un canal IRQ este sistemul de transmisiune folosit de componentele sistemului pentru a semnala o cerere de intrare în acĠiune. Exemplu. O placă de sunet nu va funcĠiona oricum, ci va avea nevoie de o comandă din partea microprocesorului pentru a îndeplini sarcina trasată la un moment dat de o cerinĠă soft. În funcĠie de nivelul de întrerupere (gradul de prioritate) alocat, controlerul de întrerupere va stabili oportunitatea intervenĠiei plăcii de sunet în funcĠie de celelalte cereri de întrerupere primite de la alte periferice. Dacă nivelul de prioritate este superior celorlalte cereri existente, placa vúi va îndeplini activitatea pe baza acceptului primit de la microprocesor. Alocarea nivelurilor de întrerupere este prezentată în tabelul 3.10. FuncĠionarea unui canal IRQ este următoarea: placa periferică instalată lansează către microprocesor un semnal Interrupt Request (o cerere de întrerupere, desemnată de un anumit număr-cod); imediat, microprocesorul abandonează temporar acĠiunea pe care o întreprinde la acel moment úi transmite perifericului un mesaj de recepĠie, denumit Interrupt Acknowledge, în cazul în care nivelul de prioritate al procesului solicitant este superior celui în curs de desfăúurare;
Structura unui calculator
167
Tabelul 3.10 Nivelurile IRQ úi asignarea corespunzătoare fiecărui dispozitiv nivel întrerupere
utilizare
IRQ0
Ceas de sistem (nu se poate defini de către utilizator)
IRQ1
Tastatură
IRQ2
Al doilea controler IRQ
IRQ3
Liber (standard pentru COM2/COM4)
IRQ4
Liber (standard pentru COM1/COM3 – conectarea mouse-ului serial)
IRQ5
Liber (standard pentru placa de sunet); placa de reĠea úi LPT2 sunt deseori setate la IRQ5, dacă nu este alocat plăcii de sunet
IRQ6
Floppy disk (nu se poate defini de către utilizator)
IRQ7
LPT1 (dacă nu se foloseúte un port paralel, atunci IRQ7 poate fi asignat unui alt dispozitiv)
IRQ8
Ceas de timp real (nu se poate defini de către utilizator)
IRQ9
Redirectat de IRQ2 (de obicei, folosit pentru placa grafică)
IRQ10
Liber (dacă placa de sunet foloseúte IRQ5, atunci IRQ10 poate fi folosit pentru placa de reĠea)
IRQ11
Liber (de obicei, folosit pentru controlerul SCSI)
IRQ12
Liber (de obicei, folosit pentru PS2)
IRQ13
Coprocesor matematic (nu se poate defini de către utilizator)
IRQ14
Controlerul IDE1 (Hard disk, CD-ROM); al doilea dispozitiv IDE de pe acelaúi cablu foloseúte acelaúi IRQ
IRQ15
Controlerul IDE2
sistemul de operare execută o rutină specială, care are ca sarcină salvarea stării microprocesorului (salvarea conĠinutului registrelor curente); se citeúte din tabela vectorilor de întrerupere (TVI) o adresă la care se află numărul canalului de întrerupere cerut; prin citirea adresei din TVI, se poate da controlul rutinei-driver aflate la adresa citită, rutină care răspunde de activitatea dispozitivului care a emis semnalul IRQ; rolul final al rutinei sistemului de operare este să refacă starea microprocesorului, încărcând registrele salvate anterior, moment din care sistemul revine la starea úi procesul desfăúurate anterior semnalului IRQ. Cum într-un sistem de calcul există mai multe componente care pot cere simultan permisiunea microprocesorului de a intra în acĠiune, este foarte probabil
168
ARHITECTURA SISTEMELOR DE CALCUL
ca cel puĠin două cereri de întrerupere să fie lansate către microprocesor în acelaúi timp. De aceea, magistrala IRQ (traseul urmat de semnalele de întrerupere la/de la microprocesor) a fost dotată cu două controlere de întrerupere înseriate, fiecare având opt intrări úi o ieúire, cel de-al doilea având intrarea 2 conectată la ieúirea primului, mărindu-se astfel numărul nivelurilor de întrerupere care pot fi utilizate. Plăcilor de extensie (perifericelor) le vor fi asignate anumite numere de ordine (coduri), prin care vor fi recunoscute de controlerul de întrerupere úi, mai departe, de microprocesor. Corespunzător celor 28 intrări, vor rezulta 16 niveluri (canale) de întrerupere, multe dintre acestea fiind rezervate unor periferice instalate, făUă de care sistemul nu ar putea funcĠiona (placa grafică – canalul 9, hard disk-ul – canalul 14, tastatura – canalul 1, ceasul de timp real – canalul 8 etc., conform tabelului 3.10). Cel mai important nivel IRQ este IRQ0, apoi urmează IRQ1, IRQ2/9, IRQ10–IRQ15 úi IRQ3–IRQ8. Similar alegerii canalelor DMA, úi pentru nivelurile de întrerupere folosite este valabil acelaúi principiu: este necesară alocarea nivelurilor de întrerupere diferite pentru plăci de extensie diferite, pentru a nu intra în conflict diversele cereri simultane ale extensiilor, adresate aceluiaúi nivel de întrerupere. Cipul 8210A asigură un nivel de priorităĠi pentru cererile simultane de întrerupere, în scopul eliminării conflictelor. Pentru sistemele de tip XT există opt niveluri de priorităĠi (IRQ0• IRQ7), iar pentru sistemele AT, 16 niveluri. Se pot folosi úi diversele canale de întrerupere prealocate (de exemplu, IRQ5 pentru LPT2, dacă placa de sunet nu există). 3.4.5.3. Adresa de intrare-ieúire Cel de-al treilea parametru care trebuie avut în vedere la instalarea unui dispozitiv periferic este adresa de intrare-ieúire. Microprocesoarele din seria • 86 au disponibil un spaĠiu de memorie special pentru stocarea adreselor de intrare-ieúire, respectiv, pentru instrucĠiunile de transfer al informaĠiei dintre microprocesor úi plăcile de extensie conectate. Această memorie este nesegmentatăúi poate depozita în total 64 KB (pentru porturi de 8 biĠi) sau 32 KB (pentru porturi de 16 biĠi) de date. Cum secĠiunea de memorie pusă la dispoziĠia unei plăci de extensie pentru transferul de date la/de la microprocesor este de dimensiune relativ mică (16 octeĠi), va fi nevoie de alocarea mai multor spaĠii de memorie pentru ca o extensie să poată fi cuplată în sistemul de comunicaĠie. Practic, aceste spaĠii de memorie reprezintă mici porĠi de memorie folosite ca „punĠi” de comunicaĠie, aceleaúi porĠi fiind folosite întotdeauna de aceeaúi placă de extensie. Toate aceste adrese (date în sistem hexazecimal) sunt indicate în căUĠile tehnice care însoĠesc plăcile de extensie úi trebuie setate cu mare grijă pentru a nu se suprapune cu alte adrese, alocate altor dispozitive. În acest scop, se analizează adresele I/O pentru toate celelalte dispozitive úi abia după aceea se setează cele noi. În caz contrar, funcĠionarea sistemului va fi obstrucĠionată de conflictele de comunicaĠie care apar la suprapunerea adreselor de
Structura unui calculator
169
intrare-ieúire. Orice port este definit de o asemenea adresă, care va accesa o zonă de memorie din partea inferioară a memoriei de lucru. Referitor la dificultăĠile generate de setarea acestor parametri, se menĠionează ca soluĠie deosebit de avantajoasăúi rapidă folosirea arhitecturii PCI, care, prin intermediul setului de cipuri inteligente, permite sistemului să se autoconfigureze, instalarea noii plăci decurgând făUă probleme (plug'n'play). Practic, după cuplarea fizică, în slotul PCI liber urmează instalarea driver-ului plăcii respective (o acĠiune software), cu aceasta încheindu-se dotarea sistemului. Sistemul va recunoaúte automat la pornire placa nou instalată, configurând totodată úi canalele DMA, IRQ úi adresele I/O necesare.
3.4.6. Proiectarea unui sistem I/O Arta proiectării unui sistem I/O constă în a găsi soluĠia care să îndeplinească obiectivele de cost, dependenĠe úi varietate ale dispozitivelor, úi, în acelaúi timp, să se evite scăderea performanĠei I/O. Pentru a evita scăderea performanĠei, componentele trebuie să fie echilibrate între memoria principală úi dispozitivele I/O. Arhitectul trebuie să plănuiască o extindere, atât în ceea ce priveúte numărul, cât úi tipurile dispozitivelor I/O, astfel încât clienĠii să poată proiecta reĠeaua I/O conform necesităĠilor aplicaĠiilor lor, aúa cum rezultă din figura 3.82. De exemplu, discurile de stocare trebuie să fie dependente de limitările care se pot impune proiectului.
Fig. 3.82. Exemplu de organizare a unui sistem I/O.
170
ARHITECTURA SISTEMELOR DE CALCUL
În continuare, sunt prezentaĠi paúii care trebuie urmaĠi pentru proiectarea unui sistem I/O. SoluĠiile pentru fiecare pas în parte sunt dictate de cerinĠele pieĠei, cost, performanĠă sau de posibilitatea îndeplinirii obiectivelor. 1. enumerarea diferitelor tipuri de dispozitive I/O care se vor conecta la sistem sau enumerarea magistralelor standard pe care le suportă sistemul; 2. enumerarea cerinĠelor fizice pentru fiecare dispozitiv I/O, cerinĠele incluzând dimensiunea, puterea, conectorii, sloturile disponibile pe magistrală etc.; 3. luarea în calcul a costului fiecărui dispozitiv I/O, incluzând costul controlerului necesar pentru dispozitivul respectiv; 4. luarea în calcul a fiabilităĠii fiecărui dispozitiv I/O, precum úi a cerinĠelor de memorie úi de ocupare a magistralei I/O de către fiecare dispozitiv I/O în parte; ObservaĠie: úi atunci când CPU nu foloseúte memoria, dimensiunea memoriei principale úi a magistralei I/O este limitată; 5. estimarea performanĠei úi a disponibilităĠii diferitelor modalităĠi de organizare a dispozitivelor I/O, pentru ca în final să se aleagă cea mai bună organizare; 6. înregistrarea cererii de acces a fiecărui dispozitiv I/O la resursele CPU: numărul necesar de cicluri de ceas pentru instrucĠiunile de iniĠializare a dispozitivului I/O; suportarea operaĠiilor unui dispozitiv I/O (de exemplu, întreruperile); evitarea blocării CPU cauzate de aúteptarea eliberării memoriei, magistralei sau memoriei cache, care sunt folosite de dispozitivele I/O.
172
4. NIVELUL FIZIC
La baza structurii ierarhice a oricărui calculator se află nivelul fizic. El constituie fundamentul calculatorului úi are ca suport circuitele úi porĠile logice. Deoarece porĠile utilizează numere binare, funcĠionarea calculatoarelor se bazează pe algebra booleană. FuncĠionarea circuitelor logice se conduce după principiul unui tranzistor care se comportă ca un întrerupător electronic foarte rapid. PorĠile logice sunt realizate în diferite tehnologii: tehnologie bipolară úi tehnologie unipolară sau MOS (Metal Oxide Semiconductor). În cadrul tehnologiei bipolare se poate remarca familia TTL (Transistor-Transistor Logic) – foarte utilizată – úi ECL (Emitter Coupled Logic) – folosită în aplicaĠii care necesită o mare rapiditate de execuĠie. PorĠile realizate în tehnologie MOS sunt de 10 ori mai lente decât cele în tehnologie TTL úi de 100 de ori mai lente decât cele din tehnologia ECL. În cadrul tehnologiei MOS se disting câteva familii clasice: PMOS, NMOS úi CMOS. Aúa cum s-a mai spus, funcĠionarea porĠilor logice se bazează pe algebra booleană. O funcĠie booleană este asociată uneia sau mai multor variabile úi furnizează un rezultat care depinde în mod unic de valorile variabilelor binare aplicate la intrare. Exemplu. O funcĠie f a unei variabile oarecare A poate fi definită ca fiind f(A) = 1 dacă A = 0 úi f(A) = 0 dacă A = 1. Aceasta este funcĠia NON. O funcĠie booleană de n variabile prezintă 2n stări posibile. A descrie complet aceste stări sub forma unui tabel care conĠine 2n linii înseamnă a construi tabela de adevăr a funcĠiei respective. Fiecare linie a acestui tabel indică valoarea funcĠiei pentru configuraĠia binară de n variabile. Prin combinarea unor porĠi logice úi încapsularea lor într-un circuit sau capsulă au rezultat circuitele integrate logice. Ele sunt realizate cu diverse densităĠi de integrare (numărul de porĠi sau de tranzistoare interne pentru circuit sau pe milimetru pătrat). Există mai multe categorii de integrare: SSI (Small Scale Integration) – circuite cu integrare redusă (sub 64 porĠi/circuit); MSI (Medium Scale Integration) – circuite cu densitate medie de integrare (sub 1024 porĠi/circuit); LSI (Large Scale Integration) – circuite cu înaltă densitate de integrare (sub 65.000 porĠi/circuit); VLSI (Very Large Scale Integration) – circuite cu înaltă densitate de integrare (peste 65.000 porĠi/circuit); SVLSI (Super Very Large Scale Integration) – circuite cu foarte înaltă densitate de integrare (peste 500.000 porĠi/circuit).
ARHITECTURA SISTEMELOR DE CALCUL
Limita de integrare a ajuns la câteva milioane de tranzistoare pentru circuitele modeste sau chiar la câteva zeci de milioane în cazul procesoarelor puternice. Exemplu. Din cadrul tehnologiei SSI fac parte circuitele logice simple, dintre care cele mai cunoscute sunt cele din familia 74xx dezvoltate iniĠial de Texas Instruments úi distribuite astăzi de numeroúi fabricanĠi de circuite logice. Din cadrul tehnologiei MSI fac parte circuitele logice combinaĠionale, dintre care se pot aminti: multiplexorul, demultiplexorul, comparatorul, registrele logice programabile. Există unele circuite logice cu memorie. Pentru un calculator, memoria este un dispozitiv esenĠial. Ea este utilizată pentru stocarea instrucĠiunilor úi a datelor programului în curs de execuĠie. Pentru a obĠine memorarea unui bit, este necesar Vă se utilizeze un dispozitiv care se substituie valorii pe care a înregistrat-o. Un astfel de circuit poate fi realizat simplu cu porĠi logice, de exemplu cu porĠi logice ùI-NU.
4.1. Microprocesorul Microprocesorul reprezintă inima unui sistem de calcul. Privit din punct de vedere fizic, el este un circuit care prezintă câteva zeci sau chiar sute de terminale. Semnalele de comunicaĠie asociate acestora îi permit microprocesorului să facă schimb de informaĠii cu mediul extern, în principal cu circuite de memorie sau cu circuite de intrare-ieúire. O analiză detaliată a acestor semnale determină diversele moduri de funcĠionare logică úi electrică a procesorului úi posibilităĠile sale de interfaĠă. Există trei categorii de semnalele electrice externe ale microprocesorului: de adresă; de date; de comandă. Fiecărui tip de semnal îi sunt asociate linii de comunicare care formează o magistrală. De cele mai multe ori, în limbajul de specialitate se vor întâlni câteva noĠiuni specifice precum: magistrala de adrese, care reprezintă totalitatea liniilor pe care circulă adresele, magistrala de date, corespunzătoare liniilor de date úi magistrala de comenzi, specifică liniilor de comenzi.
Fig. 4.1. Schema unui microprocesor tipic.
Structura unui calculator
173
Pentru obĠinerea unei instrucĠiuni a programului care este executat, microprocesorul începe prin plasarea adresei acestei instrucĠiuni pe magistrala de adrese. Se activează un semnal pe magistrala de comandă pentru specificarea unei acĠiuni de citire din memorie. Ca răspuns la această cerere, memoria plasează instrucĠiunea pe magistrala de date, trimite un semnal către microprocesor prin care acesta este atenĠionat că operaĠiunea este terminatăúi activează un semnal specific de validare a magistralei de comenzi. În timp ce microprocesorul primeúte semnalul de validare de memorie, el citeúte informaĠia (instrucĠiunea) prezentă pe magistrala de date úi o plasează într-unul din registrele interne. Există doi parametri principali asociaĠi performanĠelor unui microprocesor: numărul de linii ale magistralei de adrese úi numărul de linii ale magistralei de date. ObservaĠie. Ambii parametri se referă la OăĠimea magistralelor úi se măsoară în număr de linii (sau de biĠi). A nu se confunda cu Oărgimea (de bandă) a magistralelor, care se exprimă în termenii vitezei de transfer (multipli de octeĠi/secundă.) Un microprocesor care are m linii de adresă poate adresa până la 2m cuvinte de memorie. Valorile curente pentru m sunt: 16, 20, 24, 32 sau 64. De asemenea, dacă dispune de n linii de date poate scrie/citi un cuvânt de memorie de n biĠi într-o singură operaĠie. Valorile curente pentru n sunt: 8, 16, 32 sau 64. Exemplu. Un microprocesor care dispune de opt linii de adresă necesită patru operaĠii de citire pentru citirea unui cuvânt de 32 de biĠi. Dacă microprocesorul ar avea 32 de linii de adresă, citirea aceluiaúi cuvânt s-ar face întrun singur tact, de unde rezultă că un procesor este cu atât mai rapid cu cât are mai mare numărul de linii de date. În afara liniilor de adresă úi de date, microprocesorul dispune de linii de comandă. Acestea permit asigurarea sincronizării, reglării úi comandării schimburilor pe magistrală între microprocesor úi mediul extern. Semnalele de întrerupere sunt semnale de intrare pentru un microprocesor. Ele provin în principal de la circuitele de intrare-ieúire. Exemplu. Un microprocesor cere unui circuit de intrare-ieúire (de fapt perifericului căruia îi este asociat) să efectueze o anumită sarcină, după care îúi continuă activitatea. În acest timp, perifericul realizează operaĠia cerută la viteza sa proprie de execuĠie. După ce sarcina este îndeplinită, perifericul previne circuitul de I/O (intrare-ieúire) care activează un semnal de întrerupere prin care i se cere microprocesorului o cerere de comunicare. O astfel de cerere de întrerupere poate fi activată, de exemplu, la terminarea unei sarcini sau la apariĠia unei erori. Urmează apoi o secvenĠă de tratare a acestei cereri de întrerupere. Semnalele care gestionează accesul la magistrală servesc la fluidizarea traficului pe magistrală prin evitarea unor blocări care pot rezulta din utilizarea simultan de către două circuite a magistralei. Unele procesoare au linii speciale de comunicare cu alte procesoare sau cu procesorul secundar (coprocesorul), atunci când situaĠia o cere. Acest lucru se poate întâmpla, de exemplu, atunci când este nevoie de un calcul matematic, prin cedarea controlului coprocesorului matematic.
174
ARHITECTURA SISTEMELOR DE CALCUL
4.2. Întreruperile Întreruperile sunt schimburi în fluxul de control, care nu sunt cauzate de programul care se execută, ci de alte cauze, aflate de obicei în legătură cu operaĠiile I/O. Exemplu. Un program poate comanda discului să pornească transferul informaĠiei úi îi cere acestuia să furnizeze o întrerupere imediat ce transferul s-a terminat. Microprocesorul întrerupe programul ce se executăúi transferă controlul unei proceduri de tratare a întreruperii, care execută câteva acĠiuni corespunzătoare. Când se termină, rutina de tratare a întreruperilor întoarce controlul către programul întrerupt. Microprocesorul trebuie să repornească procesul întrerupt exact din aceeaúi stare în care era când a apărut întreruperea, ceea ce înseamnă refacerea tuturor registrelor interne în starea de dinainte de întrerupere. Un concept cheie al întreruperilor este transparenĠa. Când apare o întrerupere, se execută câteva acĠiuni úi un fragment de cod anumit, dar când servirea întreruperii s-a terminat, calculatorul trebuie să se întoarcă în aceeaúi stare pe care a avut-o înainte de întrerupere. O procedură de tratare a întreruperii cu această proprietate se spune că este transparentă. Dacă un calculator are mai multe dispozitive de I/O care pot lucra în paralel, există o probabilitate diferită de zero să apară simultan două cereri de întrerupere sau să apară o astfel de cerere atunci când se execută deja una. Pentru a se putea face o departajare între toate aceste întreruperi, acestea vor avea ataúat câte un nivel de prioritate. Când un dispozitiv cu prioritatea n generează o întrerupere, rutina de tratare a întreruperii trebuie, de asemenea, să fie executată cu prioritatea n. În timp ce se execută o procedură de tratare a întreruperii cu prioritatea n, orice încercare de a cauza o întrerupere de către un dispozitiv cu o prioritate mai mică este ignorată până când rutina întreruperii se termină úi UCP se întoarce la programul utilizatorului. Pe de altă parte, tratarea întreruperilor de la un dispozitiv cu o prioritate mai mare trebuie validată făUă nici o întârziere.
4.2.1. Gestionarea întreruperilor Dacă unitatea centrală (UC) a cerut unui circuit de I/O efectuarea unei operaĠii, aceasta anunĠă sfârúitul operaĠiei printr-o întrerupere. De asemenea, un dispozitiv care doreúte să folosească resursele procesorului semnalizează acest lucru către procesor printr-o cerere de întrerupere. O întrerupere implică în majoritatea cazurilor o cerere de magistrală. Într-un sistem real, mai multe dispozitive pot cere simultan întreruperi. Este deci necesar un sistem de gestionare a cererilor de întrerupere (apare aceeaúi problemă ca în cazul accesului la magistrală, úi anume care dintre dispozitivele ce au emis cererea urmează să fie servit). O modalitate curentă de soluĠionare a cererilor simultane de întrerupere este de a asigna niveluri de prioritate diferite pentru diversele dispozitive úi de a utiliza un circuit arbitru pentru gestionarea acestor cereri.
Structura unui calculator
175
Exemplu. Un astfel de circuit este Intel 8259A (controler de întreruperi utilizat în calculatoarele IBM PC/AT úi PS/2).
UC
INT INTA RD WR A0 CS D0-D7
8259A controler de întreruperi
IR 0 IR 1 IR 2 IR 3 IR 4 IR 5 IR 6 IR 7
Ceas de sistem Tastatură Controler IRQ2 COM2/COM4 Mouse serial Placa de sunet Floppy disc Imprimantă
Fig. 4.2. Schema controlerului de întreruperi 8259A.
O cerere de întrerupere se traduce prin activarea intrării asociate perifericului. Când una sau mai multe întreruperi ajung la controlerul de întreruperi, acesta anunĠă UC prin linia specială INT (Interrupt), care este legată la intrarea de întrerupere a UC. Aceasta răspunde de obicei printr-un semnal de validare a întreruperii (de exemplu, INTA = Interrupt Acknowledge). Ca urmare, controlerul de întreruperi informează UC pe magistrala de date despre dispozitivul care a cerut întreruperea. Unitatea centrală utilizează acest număr pentru a obĠine dintr-o tabelă de pointer-i indexată adresa rutinei de întrerupere corespunzătoare. Controlerul de întreruperi conĠine un număr de registre interne care pot fi citite sau scrise de către UC cu ajutorul semnalelor RD (Read), WR (Write), CS (Chip Select) úi A0 (linia 0 de adresă). Toate aceste semnale, la fel ca INT úi INTA, sunt active pe zero. Prin intermediul registrelor, UC comunică controlerului de întreruperi disponibilitatea de a trata o nouă cerere de întrerupere sau poate programa controlerul să funcĠioneze într-un mod particular, de exemplu să mascheze întreruperile pe o anumită intrare. Dacă se dispune de mai multe controlere de întrerupere, acestea se pot conecta în cascadă. Rezultă un avantaj: dacă sunt necesare mai mult de opt linii de întrerupere, atunci se poate crea o structură pe două niveluri, care conĠine un 8259A la ale cărui intrări sunt legate ieúirile de întreruperi ale altor opt circuite 8259A. Se creează astfel posibilitatea tratării a 64 de linii de întrerupere.
4.3. Magistrala 4.3.1. Conceptul de magistrală În modelul maúinii von Neumann, comunicaĠia dintre componentele sistemului se realizează prin legături dedicate între perechi de componente. Această
176
ARHITECTURA SISTEMELOR DE CALCUL
abordare este relativ rigidă, limitând drastic scalabilitatea (posibilitatea de extindere) a sistemului. Adăugarea de noi componente este dificilăúi implică modificarea celor deja existente. Proiectarea unei noi componente implică cunoaúterea în detaliu a funcĠionării celorlalte elemente deja prezente. SoluĠionarea acestei probleme a venit din partea firmei Digital Equipment Corporation (DEC), care la sfârúitul anilor '60 a lansat pe piaĠă primul calculator (PDP 11), construit în jurul unei magistrale – magistrala UniBus. Conceptual, magistrala este un mediu comun de comunicaĠie între componentele unui sistem de calcul; fizic este alcătuită dintr-un set de linii de semnal care facilitează transferul de date úi realizează sincronizarea între componentele sistemului. Introducerea conceptului de magistrală a revoluĠionat modul de concepere úi proiectare a noilor sisteme de calcul. Modelul de calculator bazat pe magistrală a fost preluat mai ales de familiile de calculatoare mini úi micro. Prin standardizarea magistralelor, sistemele de calcul au devenit deschise, în sensul că un număr mai mare de producători au avut posibilitatea să realizeze componente pentru o anumită structură de calculator (module de memorie, interfeĠe I/O, echipamente periferice), bazându-se numai pe specificaĠiile magistralei. În decursul timpului au fost dezvoltate diferite standarde de magistrală, care au urmărit evoluĠia procesoarelor (a unităĠilor centrale) úi a necesităĠilor de comunicaĠie ale acestora (viteză, mod de transfer, necesităĠi de sincronizare úi control etc.). S-au dezvoltat, de asemenea, magistrale specializate pentru anumite tipuri de echipamente periferice (SCSI úi EIDE pentru unităĠi de disc, console grafice, interfeĠe de măsură úi control). Din acest punct de vedere, în momentul actual se pot distinge două clase de magistrale: magistrale de sistem – dezvoltate mai ales pentru conectarea unităĠii centrale la celelalte componente de bază ale sistemului (de exemplu: MultiBus, ISA, EISA, PCI); magistrale specializate – care încearcă să optimizeze transferul de date cu un anumit tip de echipamente periferice (VESA, AGP, SCSI, GPIB). ApariĠia úi evoluĠia ulterioară a microprocesoarelor a consacrat modelul de calculator bazat pe magistrală. ConfiguraĠia semnalelor unui microprocesor este astfel concepută încât să permită conectarea uúoară la o magistrală de sistem. În general, fiecare familie de microprocesoare (Intel 8086, Z80, MC 68000) a impus o anumită structură úi un anumit standard de magistrală. Există însă anumite caracteristici comune acestor magistrale (principii de transfer, tipuri de semnale), astfel încât modulele proiectate pentru un tip de magistrală să poată fi, prin modificări minime, conectabile altor magistrale. S-au introdus noi principii de transfer care compensează într-o oarecare Păsură limitările de viteză impuse de legile fizicii de transmitere a semnalelor electrice. Cele mai reprezentative dintre acestea sunt transferul concurent prin tranzacĠii úi prelucrarea pipe-line a cererilor de transfer.
Structura unui calculator
177
4.3.2. Elemente definitorii ale magistralei O magistrală se compune dintr-un set de semnale úi un set de reguli constituite într-un protocol, care guvernează transferul de informaĠii úi accesul la mediul de comunicaĠie. InformaĠiile transferate pot fi: date, instrucĠiuni úi informaĠii de control úi sincronizare. Protocolul se referă la: caracteristicile mecanice: tip de conectori, număr de conectori alocaĠi pentru un slot, formatul modulelor de extensie ataúabile, sertar úi fund de sertar (rack úi cablajul din spatele acestuia – această structură fiind specifică magistralelor industriale); caracteristicile electrice ale componentelor conectate pe magistrală: niveluri de tensiune, curenĠi, încărcare, frecvenĠă de lucru, rată de transfer; secvenĠa de generare a semnalelor necesare pentru efectuarea unui transfer; timpii limită pentru diferitele faze ale unui transfer úi timpii de menĠinere a unui anumit semnal; intercondiĠionările funcĠionale úi temporale între diferitele tipuri de semnale. În accepĠiunea clasică, o magistrală se compune din următoarele tipuri de semnale. Semnale de date – sunt semnale bidirecĠionale utilizate pentru transferul de date úi instrucĠiuni. La un moment dat doar un singur dispozitiv poate să emită pe liniile de date; numărul liniilor de date (8, 16, 32, 64) determină dimensiunea maximă a cuvântului de date care poate fi transferat la un moment dat úi, implicit, viteza medie de transfer a magistralei. Semnale de adresă – sunt utilizate pentru specificarea adresei modulului destinaĠie sau sursă de date, numărul de linii de adresă determinând spaĠiul maxim de adresare permis de magistrală (de exemplu, 24 linii de adresă determină un spaĠiu de adresare de 224 =16 MlocaĠii). Semnale de comandă – sunt semnale unidirecĠionale generate de CPU (sau de către alt dispozitiv master), utilizate pentru specificarea direcĠiei de transfer (de exemplu, semnale de citire sau scriere pentru CPU) úi a tipului de modul adresat (de memorie sau modul I/O, de memorie program, controler de întrerupere etc.). Semnale de control – sunt semnale de utilizate pentru reglarea condiĠiilor de transfer al datelor (temporizarea deschiderii úi închiderii amplificatoarelor de magistrală pentru semnalele vehiculate pe aceasta). Semnale de întrerupere – sunt generate de un controler dedicat, permit semnalizarea unor evenimente interne sau externe úi implicit determină întreruperea execuĠiei programului curent. Semnale de tact (de ceas) – sunt generate de un oscilator cu cuarĠ, fiind folosite pentru sincronizare úi pentru generarea unor semnale de frecvenĠă programabilă. Linii de alimentare – sun generate de sursa de tensiune a sistemului, fiind folosite pentru alimentarea modulelor sistemului.
178
ARHITECTURA SISTEMELOR DE CALCUL
Semnale de control al accesului – sunt utilizate pentru arbitrajul úi controlul accesului pe magistrală (în cazul magistralelor multimaster), fiind generate de un circuit specializat (arbitru de magistrală). Numărul úi semnificaĠia particulară a semnalelor depind de tipul úi destinaĠia magistralei. Anumite grupe de semnale din cele prezentate pot să lipsească (de exemplu, semnalele de control) sau altele noi pot fi adăugate (semnalele de eroare, semnalele de control al lăĠimii datelor transferate pe 8 sau pe 16 biĠi etc.). Magistralele pot fi clasificate în funcĠie de mai multe criterii. I. modul de lucru (în raport cu semnalul de tact): magistrale sincrone – la care ciclurile de transfer sunt direct corelate cu semnalul de tact. Viteza de transfer este mai mare, însă rata de transfer a magistralei este limitată de frecvenĠa tactului. Datorită vitezei limitate de propagare a semnalului electric, creúterea ratei ar duce la diferenĠe de fază la capetele magistralei. magistrale asincrone – la care nu există o legătură directă între evoluĠia în timp a unui ciclu de transfer úi tactul sistemului. Majoritatea magistralelor actuale lucrează pe acest principiu (de exemplu, ISA, EISA, MultiBus etc.). II. numărul de module master conectate pe magistrală: magistrale unimaster – există un singur modul master pe magistrală. Nu necesită mecanisme de arbitraj al magistralei (un modul master poate iniĠia un ciclu de transfer, pe când un modul slave poate fi comandat în timpul unui ciclu de transfer, neavând elementele necesare pentru a prelua controlul magistralei). magistrale multimaster – permit conectarea mai multor module master pe acelaúi tronson de magistrală. Magistrala trebuie să conĠină semnale de arbitraj úi un protocol de transfer al controlului pe magistrală (de exemplu, MultiBus, VME). III. modul de realizare al transferului de date: magistrale cu transfer prin cicluri (magistrale secvenĠiale) – regula de bază: ciclurile de transfer se desfăúoară secvenĠial, la un moment dat cel mult un ciclu de transfer fiind în curs de desfăúurare. Majoritatea magistralelor folosesc acest principiu de transfer. În funcĠie de direcĠia de transfer se disting úase cicluri semnificative: cicluri de citire (respectiv scriere) din/în memorie; cicluri de citire (respectiv scriere) de la/la un port intrare-ieúire; cicluri de acces direct la memorie (citire/scriere); magistrale tranzacĠionale – transferul de date se efectuează prin tranzacĠii. O tranzacĠie este divizată în mai multe faze. Mai multe tranzacĠii se pot desfăúura simultan, cu condiĠia ca tranzacĠiile să fie în faze diferite; această restricĠie provine din faptul că fiecare fază a unei tranzacĠii foloseúte un subset din mulĠimea semnalelor magistralei. Teoretic, la aceste magistrale factorul de creútere a vitezei (în comparaĠie
Structura unui calculator
179
180
ARHITECTURA SISTEMELOR DE CALCUL
cu o magistrală secvenĠială) este egal cu numărul de faze în care se divide o tranzacĠie (de exemplu, magistrala procesoarelor post-Pentium). IV. numărul semnalelor utilizate în transferul de date: magistrale seriale – se utilizează ca mijloc de comunicaĠie între componentele de bază ale unui calculator (CPU, memorie, interfeĠe de I/O etc.). Se folosesc, de asemenea, în anumite sisteme dedicate bazate pe microcontrolere, la care costul úi dimensiunea redusă sunt parametri definitorii. Cu toate că viteza de lucru este mai mică decât la magistralele paralele, în ultimul timp sunt tot mai utilizate (de exemplu, magistralele USB, SATA, SAS, PCIExpress etc.). magistrale paralele – sunt folosite datorită vitezei de lucru ridicate, transferurile de date realizându-se la nivel de octet úi nu de bit. 4.3.3. Tipuri, familii úi standarde de magistrală
Tipurile uzuale de magistrale sunt: I. Magistrale procesor-memorie: între procesor úi memorie; specializate; scurte; rapide. II. Magistrale I/O: pot avea multe dispozitive I/O conectate (direct sau prin canale I/O supervizate de procesoare specializate); universale; lungi; mai lente decât magistralele procesor-memorie; nu sunt legate direct la memorie, ci prin magistrale procesor-memorie ori magistrale de fundal (backplane) III. Magistrale backplane (originar folosite la placa de bază): permit acces simultan la procesor, memorie, dispozitive I/O; sunt reutilizabile (bune pentru diverse configuraĠii); Magistralele I/O necesită o interfaĠă simplă, pe când cele backplane necesită o logică suplimentară la interfaĠă. În schimb, avantajul magistralelor backplane este că acestea conĠin singure toate conexiunile. Se pot crea conexiuni complexe, ca în figura 4.3 (în cazul folosirii unor tipuri multiple de magistrale, trebuie utilizate adaptoare de magistrale pentru interconectare). Figura 4.3 conĠine configuraĠii cu magistrale pentru comunicarea procesor-memorie úi trafic I/O: (a) o singură magistrală backplane: folosită la PC-urile vechi; (b) o magistrală procesor-memorie de tip PCI (bus backplane), care are conexiuni SCSI cu magistrale I/O: folosită la PC-urile noi; (c) ca la (b), plus o magistrală separată pentru traficul procesor-memorie: folosită la sistemele multiprocesor SiliconGraphics.
Fig. 4.3. ConfiguraĠii cu magistrale pentru comunicarea procesor-memorie úi trafic I/O: a. doar magistrala backplane; b. magistrala de tip procesor-memorie + magistrale I/O; c. toate tipurile.
Caracteristicile constructive ale unei magistrale sunt influenĠate de cerinĠele úi particularităĠile funcĠionale ale procesorului pentru care a fost concepută. Acest fapt vine în contradicĠie cu ideea de sistem deschis, conform căreia mediul de comunicaĠie între componentele unui sistem trebuie să fie independent de producător. Firmele dominante în domeniul construcĠiei de calculatoare úi-au dezvoltat propriile standarde de magistrală adaptate familiilor de procesoare pe care le produc. Exemple. DEC – UniBus, Intel – MultiBus, IBM – PC Bus HP – GPIB etc. Unele din aceste magistrale sunt deschise, în sensul că standardul este accesibil úi utilizabil liber de orice producător; altele au fost patentate úi au restricĠii de utilizare, de exemplu magistrala MicroChannel (MCA) a firmei IBM, folosită în construcĠia calculatoarelor PS/2. Există úi standarde dezvoltate de grupuri de producători cu interese apropiate. Astfel au apărut standardele Camac, FastBus, FutureBus, NuBus, Can etc. În cazul acestor magistrale se pune problema asigurării interoperabilităĠii úi compatibilităĠii între module realizate de diverúi producători. Metoda de eliminare a unor astfel de probleme este supunerea componentelor la teste de conformanĠă. Cele mai cunoscute foruri internaĠionale de standardizare care au activitate în domeniul magistralelor sunt IEEE, ANSI úi IEC. Câteva din cele mai cunoscute tipuri de magistrale sunt prezentate în tabelul 4.1.
Structura unui calculator
181 Tabelul 4.1
Tipuri de magistrale Standard IEEE
Nume uzual
Domenii de utilizare
488
GPIB
Instrumente de laborator
583, 596, 683
Camac
AchiziĠie de date úi instrumentaĠie
696
S 100
Microsisteme de dimensiune medie
796, P1296
MultiBus I, II
Microsisteme de dimensiune medie
P896
FutureBus
Sisteme multiprocesor
P996
PC Bus
Calculatoare personale
P1014
VME Bus
Sisteme microprocesor performante (cu Motorola 68000)
P1196
NuBus
Sisteme multiprocesor
–
UniBus
Minicalculatoare PDP 11
–
QBus
Minicalculatoare VAX
–
SCSI
Periferice (HD, bandă, CD-ROM)
În cadrul unui sistem de calcul pot să coexiste mai multe tipuri de standarde, specializate pe transferul de date între anumite tipuri de componente de sistem. Astfel, se poate utiliza o magistrală de mare viteză pentru transferul între procesor úi memorie, o magistrală cu acces multiplu (multimaster) pentru unele periferice de mare viteză (disc, interfaĠă video) úi o magistrală de mică viteză pentru perifericele lente. În aplicaĠiile de control se mai poate adăuga úi o magistrală de instrumentaĠie, adaptată pentru culegerea datelor de proces. Pentru a satisface o gamă largă de cerinĠe, s-au dezvoltat familii de magistrale care cuprind mai multe variante ale unei magistrale de bază úi sunt compatibile între ele într-o oarecare măsură (interfeĠele dezvoltate pentru aceste variante necesită modificări minore pentru compatibilizare). În prezent există mai multe astfel de familii de magistrale: magistrale dezvoltate pentru calculatoare DEC – UniBus, QBus úi VAXBI; magistrale dezvoltate pentru procesoarele Intel – MultiBus I, MultiBus II úi extensii ale acestora; magistrale inspirate de structura seriei de procesoare Motorola – magistralele VME; magistrale de instrumentaĠie – familia GPIB (dezvoltată de Hewlett Packard), IEEE488 úi Camac.
182
ARHITECTURA SISTEMELOR DE CALCUL
În domeniul PC-urilor, s-au dezvoltat mai multe magistrale care au devenit standarde de facto înainte ca acestea să fie propuse pentru standardizare formală: ISA, EISA, VESA, PCI, SCSI, AGP etc. După cum s-a arătat, o magistrală (bus) este o structură de interconectare (un ansamblu de linii de comunicaĠii) între mai multe circuite sau unităĠi ale unui calculator. Un PC are diferite tipuri de magistrale, între care se află următoarele: magistrala procesorului, magistrala de adrese, magistrala memoriei, magistrala I/O. Exemple. Camac (fizică nucleară), FastBus (fizica energetică), OmniBus (PDP-8), UniBus (PDP-11), MassBus (VAX úi PDP-11), MegaBus (Moneywell), MicroChannel (PS/2), NuBus (MacIntosh 2), VersaBus (Motorola), VME (Motorola 680x0), MultiBus 1 (INTEL 8086), MultiBus 2 (INTEL 80386), ISA sau ATBus (INTEL 80286), EISA (INTEL 80386), MCA (IBM, 80386), VLBus (VESA, 80486), PCI (Pentium), FireWire (IEEE 1394) etc.
4.3.4. Magistrala procesorului Magistrala procesorului este calea de comunicaĠie între CPU úi cipurile cu care lucrează direct. Această magistrală este folosită pentru a transfera date, de exemplu între CPU úi memoria cache externă. Cele mai multe sisteme au un cache extern pentru CPU; aceste memorii cache sunt în general folosite în toate sistemele care utilizează cipuri 486, Pentium, Pentium Pro sau ulterioare. Deoarece scopul magistralei procesorului este transmiterea úi primirea datelor de la CPU cu cea mai mare viteză posibilă, această magistrală lucrează la o viteză mult mai mare decât orice altă magistrală din sistem: aici nu există strangulări. Magistrala este compusă din linii de semnal utilizate pentru date, pentru adrese úi pentru comenzi. Exemple. 1. Într-un sistem 486, magistrala procesorului este compusă din 32 de linii de adrese, 32 de linii de date úi câteva linii de comandă. 2. Magistrala procesorului dintr-un sistem Pentium are 64 de linii de date, 32 de linii de adrese úi linii de comandă asociate. 3. Sistemul Pentium Pro are 36 de linii de adrese, iar în rest are o magistrală similară cu cea a sistemului Pentium. Magistrala procesorului lucrează la aceeaúi frecvenĠă cu cea a ceasului de bază ca CPU în exterior. Acest lucru poate conduce la concluzii greúite deoarece cele mai multe procesoare actuale utilizează o frecvenĠă de lucru internă mult mai mare decât a oricărei magistrale din sistem. Exemplu. Un sistem Pentium 100 are un procesor Pentium care lucrează intern la 100 MHz, dar în exterior lucrează la numai 66,6 MHz. Aceeaúi frecvenĠă externă de lucru (66,6 MHz) o au úi procesoarele Pentium 133, Pentium 166 úi chiar Pentium Pro 200. În cele mai multe dintre noile sisteme, frecvenĠa reală de lucru a procesorului este un multiplu (de 1,5 ori, de 2 ori, de 2,5 ori, de 3 ori etc.) al frecvenĠei magistralei procesorului.
Structura unui calculator
183
Magistrala procesorului este legată la pinii procesorului úi poate transfera un bit de date pe o linie de date la fiecare perioadă sau la două perioade ale ceasului. Astfel, un sistem 486 poate transfera 32 biĠi de date simultan, în timp ce un sistem Pentium sau Pentium II poate transfera 64 biĠi de date la un moment dat. Pentru a determina viteza de transfer pe magistrala procesorului se multiplică lăĠimea datelor (32 de biĠi pentru 486 sau 64 de biĠi pentru Pentium úi Pentium II) cu frecvenĠa ceasului magistralei (aceeaúi cu frecvenĠa ceasului de bază al procesorului). Exemplu. Un cip Pentium de 66/100/133/166/200 MHz care rulează la 66 MHz poate transfera un lot de date la fiecare perioadă de ceas pe fiecare linie de date. Se obĠine astfel o viteză maximă instantanee de transfer de 528 MB pe secundă. Acest rezultat derivă din următoarea formulă: 66 MHz 64 biĠi = 4.224 megabiĠi/secundă; 4.224 megabiĠi/secundă : 8 = 528 MB/secundă. Această viteză de transfer, adesea numită Oărgime de bandă a magistralei, reprezintă o valoare maximă. Ca toate valorile maxime, această viteză nu reprezintă Oărgimea de bandă în funcĠionarea normală; va rezulta o valoare medie mai scăzută a vitezei transferului de date. AlĠi factori de limitare, cum ar fi proiectarea setului de cipuri, viteza memoriei úi altele, contribuie la scăderea lărgimii de bandă efective. Între unităĠile sau circuitele conectate la magistrală se disting unităĠi de tip master, care au iniĠiativa comunicării pe magistrală, úi unităĠi de tip slave, care Uăspund la iniĠiativa de comunicare a masterului. Exemple. Perechi master-slave: UC – memorie (acces la instrucĠiuni úi la date); UC – port I/O (transfer de date); UC – coprocesor (tratarea instrucĠiunilor în virgulă mobilă ); dispozitive I/O – memorie (accesul la operanzi) etc. În cazul procesoarelor moderne, comunicaĠia cu cipurile externe procesorului a introdus noĠiunile de magistrale FSB, BSB úi PSB a) În cazul procesoarelor cu memorie cache L2 (L3, în cazul procesoarelor K62+ úi K6-3) care nu se află în interiorul procesorului (exemple tipice fiind procesoarele pe socket 7, slot 1 úi slot A), legătura dintre acesta úi northbridge poartă denumirea de magistrală FSB (Front Side Bus), iar frecvenĠa de bază a acesteia înmulĠită cu multiplicatorul dă frecvenĠa de lucru a procesorului. Între procesor úi memoria cache L2 conexiunea se face prin magistrala BSB (Back Side Bus), o magistrală de memorie care funcĠionează fie la frecvenĠa FSB (la procesoarele pe socket 7), fie la jumătate din frecvenĠa procesorului (la procesoarele Intel pe slot 1), fie între 1/3 úi 1/2 din frecvenĠa procesorului (la procesoarele AMD pe slot A). Exemplu. Un FSB pe 32 de biĠi, operând la o frecvenĠă de 100 MHz úi care realizează 4 transferuri pe ciclu, are o lărgime de bandă de 1.600 MB/s. Producătorii specifică viteza FSB-ului în MT/s (Mega Transfers per second). Dacă o placă de bază are un FSB cu frecvenĠa de tact de 266 MHz úi realizează 4 transferuri pe ciclu de ceas, FSB-ul certificat este de 1.066 MT/s.
184
ARHITECTURA SISTEMELOR DE CALCUL
b) În cazul procesoarelor cu cache L2 integrat în procesor (Intel P3 úi Celeron pe socket 370 úi P4 toate variantele, respectiv, AMD Athlon pe socket A, 754, 939, 940), BSB-ul a dispărut, nemaifiind necesar. Combinând a) úi b), rezultă că nu este corect să se folosească termenul de FSB în cazul procesoarelor actuale, termenul mai potrivit fiind Processor Side Bus (PSB) sau System Side Bus (SSB), iar în cazul procesoarelor Opteron/Athlon64 nici măcar termenul PSB nu este corect, legătura dintre procesor úi northbridge fiind de tip punct-la-punct (point-to-point). 4.3.4.1. Conectarea la magistrală Majoritatea circuitelor logice nu dispun la ieúire de amplificatoare capabile să furnizeze puterea necesară transmiterii unui semnal binar pe liniile magistralei (datorită capacităĠii magistralei, pe de o parte, úi a încărcării intrării cu alte sarcini). Pentru transmitere se utilizează circuitele amplificatoare de putere numite driver-e. La recepĠie este necesară utilizarea unui receptor de tip Trigger-Schmidt care reface semnalul degradat din cauza capacităĠii limitate a liniei de transmisiune sau a eventualelor zgomote. De multe ori, un circuit poate să transmită úi în acelaúi timp să fie receptor, rezultând că pentru interfaĠarea cu magistrala sistemului trebuie utilizate circuite mixte numite transceiver-e (transmitter + receiver). Din punctul de vedere al stărilor logice, circuitele de conectare la magistrală sunt circuite cu trei stări, în care a treia stare (stare flotantă) permite acestora să fie deconectate logic când se află în repaus. Un alt tip de circuit de conectare este circuitul cu colectorul în gol (realizează funcĠia SAU-cablat). 4.3.4.2. Magistralele sincrone Din punctul de vedere al cadenĠei schimbului de date care are loc pe magistrală există arhitecturi sincrone úi asincrone. Magistrala sincronă dispune de o linie de ceas comandată de un oscilator cu cuarĠ. Toate operaĠiile de pe o magistrală sincronă sunt efectuate într-un număr întreg de perioade de ceas. Exemplu. În figura 4.4 este prezentat modul de lucru al magistralei sincrone în cazul operaĠiei de citire a unui cuvânt din memorie. NotaĠii folosite: Ø – semnal de ceas real (un ciclu de ceas TC = 250 ns); MREQ – cerere acces memorie (Memory Request); RD – citire (Read); TML – timp de stabilire a adreselor înainte de MREQ (> 60 ns; la o frecvenĠă de ceas 4 MHz se acceptă un timp de creútere de 10 ns); TM – activarea semnalului MREQ faĠă de frontul descrescător în ciclul T1 (< 85 ns); TRL – activarea semnalului RD faĠă de frontul descrescător în ciclul T1 (< 85 ns); TDS – date disponibile înainte de frontul descrescător în ciclul T3 (> 50 ns); TMH – tranziĠia semnalului MREQ după frontul descrescător în ciclul T3 (< 85 ns); TRH – tranziĠia semnalului RD faĠă de frontul descrescător în ciclul T3 (< 85ns); TDH – menĠinerea datelor după ridicarea semnalului de date (după comutarea lui RD, > 0).
Structura unui calculator
T1
185
T2
citire. Stările de wait, care sunt generate de surplusul de viteză a procesorului în comparaĠie cu viteza memoriei, încetinesc viteza calculatorului. Avantaj: funcĠionare relativ simplă. Dezavantaje: 1. orice operaĠie pe magistrală corespunde unui număr întreg de perioade de ceas, ceea ce conduce la o funcĠionare suboptimală din punct de vedere al vitezei de lucru, datorată faptului că o operaĠie care durează 3,1 perioade de ceas va fi realizată în 4 perioade de ceas, chiar dacă memoria poate să răspundă mai repede; 2. magistrala sincronă evoluează dificil odată cu procesul tehnologic de realizare a componentelor, datorită faptului că prin utilizarea unor memorii de viteză mai mare nu se poate reduce durata unei operaĠii de citire-scriere până când nu este modificată frecvenĠa ceasului care guvernează magistrala. Concluzie. Pentru a conecta în mod optim un ansamblu de circuite la magistrală, este preferată arhitectura asincronă.
T3
Ø
ADDR
ADRESĂ CUVÂNT
DATE
DATE TM
MREQ
ARHITECTURA SISTEMELOR DE CALCUL
186
TDS
TML TMH
4.3.4.3. Magistralele asincrone
RD TRL
TRH TDH
În acest caz, nu este necesară existenĠa unui semnal de ceas care să supervizeze transferul. Deci, durata unei operaĠiuni pe magistrală este variabilă, în funcĠie de performanĠele circuitelor utilizate. Exemplu. În figura 4.5 este prezentat modul de lucru al magistralei asincrone în cazul operaĠiei de citire a unui cuvânt din memorie.
Fig. 4.4. Schema accesului la magistrala sincronă.
Începutul ciclului T1 este marcat de frontul crescător al semnalului Ø. În prima parte a ciclului T1 procesorul plasează pe magistrala de adrese adresa care se doreúte a fi citită din memorie. PoziĠionarea adresei pe magistrală corespunde activării mai multor semnale binare care formează adresa. După stabilirea adresei pe magistrală, devin active semnalele MREQ úi RD. MREQ indică prin activarea sa că se efectuează un acces la memorie úi nu un acces la dispozitivele I/O. RD defineúte prin activarea sa o operaĠie de citire din memorie. În timpul ciclului T2 nu are loc nici o modificare pe magistrală pentru a permite memoriei decodificarea adresei de pe magistrala de adrese úi poziĠionarea informaĠiei cerute pe magistrala de date. În timpul ciclului T3, pe frontul descrescător al semnalului de ceas, microprocesorul capteazăúi înregistrează într-un registru intern informaĠia prezentă pe magistrală. Odată terminată această operaĠiune, procesorul pune în repaus semnalele MREQ úi RD (le ridică în 1). Dacă este nevoie mai departe de o altă operaĠie de citire sau scriere, aceasta poate începe pe frontul crescător al următorului ciclu de ceas. Dacă memoria nu este capabilă să plaseze datele pe magistrală în timpul cerut (să fie respectat TDS), atunci memoria activează un semnal de wait, prin care cere prelungirea timpului de
ADDR
ADRESĂ CUVÂNT
MREQ RD MSYN DATE
DATE
SSYN Fig. 4.5. Schema accesului la magistrala asincronă.
Structura unui calculator
187
MSYN (Master Synchronisation) úi SSYN (Slave Synchronisation) sunt semnalele de sincronizare care asigură respectarea ordinii diverselor momente din operaĠiunea de citire. De obicei, master este UC úi slave este memoria. După ce adresa cuvântului este depusă pe magistrala de adrese de către UC úi după ce semnalele MREQ úi RD devin active, UC activează semnalul MSYN care comunică memoriei începerea operaĠiei de citire. Memoria efectuează citirea la viteză proprie, iar după depunerea pe magistrală a informaĠiei cerute activează semnalul SSYN. Acest semnal informează procesorul că datele cerute sunt valide pe magistrală. Procesorul încarcă datele în registrele interne, după care dezactivează semnalele MREQ, RD úi MSYN. Dezactivarea lui MSYN este sesizată de memorie, care pune în repaus SSYN úi eliberează magistrala de date. Astfel s-a ajuns din nou la starea iniĠialăúi rezultă că poate începe o altă operaĠie pe magistrală. Ansamblul semnalelor de mai sus, cu ajutorul cărora se efectuează transferul datelor, corespunde tehnici full handshake (tehnica acordului confirmat), care include următoarele operaĠii: activarea lui MSYN; activarea lui SSYN ca răspuns la MSYN; dezactivarea lui MSYN ca răspuns la SSYN; dezactivarea lui SSYN ca răspuns la MSYN. ObservaĠie. Această tehnică este total independentă de timp. Fiecare eveniment din succesiune este cauzat de evenimentul precedent. De aceea dispozitivele conectate la o magistrală asincronă pot fi uúor înlocuite cu altele mai performante, pe măsură ce tehnologia avansează. În consecinĠă, avantajul folosirii magistralei asincrone apare evident în comparaĠie cu magistrala sincronă. Pe o magistrală sincronă UC îúi poziĠionează semnalele, iar memoria sau circuitele I/O nu fac altceva decât să răspundă solicitărilor UC făUă a fi necesară o sincronizare cu aceasta. Astfel, simplitatea magistralei sincrone constă în lipsa semnalelor MSYN úi SSYN. 4.3.4.4. Transferul datelor pe magistrala locală a procesorului (PLB) TranzacĠiile pe magistrala locală a procesorului, PLB (Processor Local Bus), constau în mai multe faze de adresare úi date. În funcĠie de nivelul de activitate a magistralei úi capacitatea slave PLB, acestea pot dura unul sau mai multe cicluri de magistrală PLB. De asemenea, pipeline-ul de adresare úi livrarea datelor úi adreselor separate sunt îmbunăWăĠite prin modul în care aceste faze sunt gestionate. TranzacĠia de adresare conĠine 3 faze: cerere, transfer úi confirmare de adresare. O tranzacĠie PLB începe când un master adună adresele sale úi transferă semnalele în vedere obĠinerii dreptului asupra magistralei în timpul fazei de cerere. Odată ce arbitrul PLB oferă dreptul asupra magistralei, adresa masterului este prezentată la dispozitivele slave în timpul fazei de transfer. Ciclul de adresare se termină când un slave încheie adresa masterului úi transferă datele în timpul fazei de confirmare a adresei.
188
ARHITECTURA SISTEMELOR DE CALCUL
Figura 4.6 ilustrează două pipeline-uri de adresare de citire úi scriere, împreună cu fazele de citire úi scriere a datelor. Master A úi B reprezintă starea fiecărei adrese master. PLB arbitrează între aceste cereri úi trimite cererea masterului selectat la magistrala de adrese a PLB slave. Urma cu eticheta „faza de adresare” arată starea magistralei de adrese a slave-ului PLB de-a lungul fiecărui tact PLB.
Fig. 4.6. Exemplu de protocol de transfer PLB.
$úa cum se arată în figura 4.6, specificaĠiile PLB acceptă implementările în care aceste trei faze pot solicita numai un singur ciclu de ceas PLB. Acest lucru se întâmplă atunci când masterului solicitant îi este acordat imediat accesul la magistrala slave úi unitatea slave confirmă adresa de-a lungul aceluiaúi ciclu. Dacă un master trimite o cerere care nu poate fi imediat trimisă la magistrala slave, faza de cerere poate dura unul sau mai multe cicluri. Procesorul de magistrală locală de 128 de biĠi a apărut în mai 2007. PLB oferă o interfaĠă standard între nucleele procesorului úi controlerele integrate ale magistralei. Cu PLB, poate fi dezvoltată o bibliotecă a nucleelor procesorului úi controlerelor magistralei pentru utilizare úi aplicare în nucleu, sub formă de circuite integrate specifice (numite Core + ASIC) úi modele system-on-achip (SOC). În plus, PLB este o magistrală de mare performanĠă on-chip care este folosită în sistemele integrate Core + ASIC. PLB sprijină citirea úi scrierea, transferuri de date între dispozitivele master úi slave care sunt dotate cu o interfaĠă de magistrală PLB úi sunt conectate prin semnale ale PLB. Fiecare master PLB este anexat prin magistrale de adresare diferite, magistrale de citire de date, magistrale de scriere de date úi semnale de transfer. Slave-urile PLB sunt ataúate la PLB prin magistrale de adrese puse în comun, dar decuplate, magistrale de citire, magistrale de scriere, control al transferului úi starea semnalelor pentru fiecare magistrală de date. PLB este o magistrală complet sincronă. O singură sursă de ceas prevede timing-ul pentru toate semnalele de PLB. Toate unităĠile master úi slave care sunt anexaĠi la PLB folosesc acest ceas ca sursă. PLB se diferenĠiază prin următoarele caracteristici de performanĠă:
Structura unui calculator
189
transferurile de citire úi scriere se suprapun pentru a permite două transferuri de date per ciclu pentru maximizarea folosirii magistralei; magistrale decuplate pentru adresare úi date susĠin capacitatea de divizare a tranzacĠiilor pentru o lăĠime de bandă mai bună; protocolul de suprapunere a cererii de magistralei úi protocolul de oferire a dreptului magistralei reduc întârzierile cauzate de arbitraj; PLB este o magistrală complet sincronă.
4.3.4.5. Arbitrajul magistralei Până acum s-a considerat că există un singur master pe magistrală. În realitate, în cele mai multe cazuri există mai multe dispozitive I/O care pot cere simultan accesul la memorie, ceea ce conduce la necesitatea introducerii unor reguli de arbitraj. Arbitrajul magistralei se poate realiza în două variante: structura centralizată, în care există fizic un arbitru; structura descentralizată, în care fizic nu există un arbitru de magistrală, dar care implementează funcĠiile acestuia. Structura centralizată Algoritmul cu priorităĠi statice (daisy chain). Se presupune existenĠa a cinci dispozitive de I/O care cer simultan accesul la magistrală prin linia de BUS REQUEST, iar arbitrul le răspunde prin linia de acordare a magistralei (BUS GRANT). Circuitele I/O care pot deveni master sunt legate printr-un SAU cablat la linia de cerere de magistrală BUS REQUEST. Când cel puĠin unul dintre circuite cere accesul la magistrală, arbitrul este sesizat, iar când este posibil (când magistrala este liberă) acesta acordă accesul la magistrală printr-o linie de acordare a magistralei (BUS GRANT), astfel încât arbitrul nu vede decât o singură cerere, chiar dacă mai multe circuite cer accesul (vezi figura 4.7). BUS REQUEST arbitru
1
BUS GRANT
2
3
4
Dispozitive I/O
Fig. 4.7. Algoritmul cu priorităĠi statice (daisy chain).
5
ARHITECTURA SISTEMELOR DE CALCUL
190
Linia de acordare a magistralei traversează în serie cele cinci circuite de I/O (pe această linie dispozitivele I/O sunt aúezate în cascadă). Când primul circuit I/O recepĠionează acordarea magistralei, el cunoaúte dacă are sau nu nevoie de magistrală, adică dacă a formulat cererea de acces sau nu. Dacă are nevoie, el acceptă magistrala úi preia controlul ei, iar dacă nu, permite propagarea semnalului de acordare mai departe, către circuitul următor. Prioritatea scade de la stânga spre dreapta (prioritatea este direct proporĠională cu apropierea de arbitru). În cele ce urmează se va prezenta o variantă care permite existenĠa mai multor niveluri de prioritate. Aceasta va cuprinde două niveluri de ierarhizare: primul cuprinde circuitele 1 úi 2, iar cel de-al doilea cuprinde circuitele 3, 4 úi 5. Astfel, rezultă două linii de acordare a magistralei. Pentru fiecare nivel de prioritate există o linie de cerere de magistrală úi o linie de acordare de magistrală. Dispozitivele I/O pot fi repartizate în diferite moduri pe nivelurile de prioritate (fig. 4.8). BUS REQUEST 1 BUS REQUEST 2
arbitru
1
2
3
4
5
BUS GRANT 1 BUS GRANT 2 Fig. 4.8. Repartizarea dispozitivelor I/O pe nivele de prioritate.
O altă variantă ar fi următoarea: în unele scheme de arbitraj poate fi folosită o linie care specifică starea BUS BUSY (ocuparea magistralei), activată de unitatea ce preia controlul magistralei. Odată ce linia de ocupare a magistralei a fost activată, se dezactivează cererea de acces la magistrală, aceasta permiĠând altor unităĠi să ceară accesul în timpul transferului de date pe magistrală úi, mai mult chiar, permiĠând arbitrului de magistrală să facă o preselecĠie a unităĠii care are prioritate. Astfel, odată ce transferul de date pe magistrală a luat sfârúit, magistrala este eliberatăúi unitatea preselectată preia controlul magistralei (această tehnică este mai eficientă). De obicei, această variantă cu preselecĠie úi BUS BUSY este folosită la magistralele Motorola. Algoritmul cu cereri independente. Acest algoritm reprezintă cel mai general caz de arbitraj al magistralei, dar din punct de vedere hardware este greu de implementat. Fiecare dispozitiv emite o cerere de bus independentă către arbitru. Acesta răspunde pe linii separate dispozitivelor. Dispozitivul care primeúte răspuns afirmativ poate folosi magistrala. Logica de acordare a magistralei este implementată în arbitru. Figura 4.9. prezintă un exemplu de schemă de arbitraj cu cereri independente.
Structura unui calculator
1
2
191
ARHITECTURA SISTEMELOR DE CALCUL
192
m
1
2
m log2m linii de interogare
BG 1 BR 1
arbitru
confirmare ACK
arbitru
BG 2 BR 2
BUS REQUEST
BG m
BUS
BR m
ACK
BUS
Fig. 4.9. Algoritmul cu cereri independente.
NotaĠiile folosite: BR = linia de cerere de magistrală (BUS REQUEST); BG = linia de acordare a magistralei (BUS GRANT); ACK = linia de confirmare (ACKnowledge) BUS = magistrala. Algoritmul cu interogare ciclică (polling). Există log2m linii de interogare pentru cele m dispozitive. Dispozitivele sunt prevăzute cu câte un decodor pentru a recupera codul de interogare. Dispozitivul care îúi recunoaúte codul de interogare activează semnalul de confirmare ACK (acknowledge) úi preia controlul magistralei. Arbitrul întrerupe ciclul de interogare până când dispozitivul căruia i s-a acordat magistrala îúi încheie operaĠiile pe magistrală (vezi figura 4.10). Prioritatea fiecărui dispozitiv este setată în codul de interogare. În majoritatea sistemelor de calcul, unitatea centrală trebuie să negocieze accesul la magistrală în acelaúi mod cu celelalte unităĠi. În general, unitatea centrală are prioritatea cea mai scăzută; ea utilizează magistrala doar când nici un alt circuit nu are nevoie de ea. Aceasta permite circuitelor I/O să realizeze transferul de date atunci când este necesar, făUă să apară pericolul de pierdere a datelor. Pentru fiecare nivel de prioritate există o linie de cerere de magistrală úi o linie de acordare de magistrală.
Fig. 4.10. Algoritmul cu interogare ciclică (polling).
În majoritatea sistemelor de calcul, unitatea centrală trebuie să negocieze accesul la magistrală în acelaúi mod cu celelalte unităĠi. În general, unitatea centrală are prioritatea cea mai scăzută; ea utilizează magistrala doar când nici un alt circuit nu are nevoie de ea. Aceasta permite circuitelor I/O să realizeze transferul de date atunci când este necesar, făUă să apară pericolul de pierdere a datelor. Structura descentralizată În această structură nu există un arbitru veritabil de magistrală (circuit fizic), ci fiecare unitate îúi gestionează singură accesul la magistrală realizând o parte din funcĠiile arbitrului. Exemplu. La sistemele VAX, există 16 niveluri de prioritate úi fiecăruia îi este asociată o linie de cerere de magistrală (sistemul poate accepta maximum 16 unităĠi, potenĠiali master de magistrală). Când o unitate doreúte să utilizeze magistrala, ea activează propria linie de cerere de magistrală; la finele transferului de date curent de pe magistrală, fiecare unitate examinează cererile de acordare a magistralei. Circuitele logice de pe fiecare unitate permit accesul la magistrală doar unităĠii cu cea mai mare prioritate, iar pentru celelalte unităĠi accesul nu este permis. Avantajul este că permite o implementare simplă, iar dezavantajul, că necesită mai multe linii, deoarece fiecare unitate recepĠionează cele 16 linii. Exemplu. Pentru sistemele Intel se foloseúte schema de arbitraj din figura 4.11. Pentru gestiunea magistralei sunt utilizate: linia de cerere de magistrală BUS REQUEST (SAU cablat); linia care semnifică ocuparea magistralei BUS BUSY, activată de circuitele ce ocupă magistrala (de masterul magistralei); linia de arbitraj ARBITRATION LINE, pe care unităĠile sunt aúezate în cascadă (conform structurii centralizate);
Structura unui calculator
193
BUS REQUEST
BUS BUSY ARBITRATION LINE
+ 5V 1
2
3
4
ARHITECTURA SISTEMELOR DE CALCUL
194
1
2
m
5
Fig. 4.11. Structura descentralizată de arbitraj al magistralei.
conexiunea la +5V (1 logic). Acest +5V înseamnă nivelul activ al liniei: dacă nici un circuit nu cere accesul pe magistrală, potenĠialul de +5V se propagă pe toată linia de arbitraj (toate unităĠile în repaus pleacă de la o prioritate egală). Pentru a obĠine accesul la magistrală, o unitate trebuie să verifice: 1. dacă magistrala este liberă; 2. dacă semnalul BUS BUSY este dezactivat; 3. dacă linia de arbitraj prezentă la intrarea sa este liberă. Dacă aceste trei condiĠii sunt îndeplinite, unitatea pune în 0 ieúirea sa, ceea ce are ca efect propagarea stării de 0 pe linia de arbitraj pentru toate unităĠile care urmează. În acest moment există o singură unitate care are intrarea activă (în +5V) úi ieúirea inactivă (în 0), ceea ce face ca această unitate să devină masterul magistralei; ea activează linia de BUS BUSY úi este liberă să efectueze transferul pe magistrală. LanĠul de priorităĠi la structura descentralizată este, deci, următorul: o unitate obĠine accesul la magistrală înaintea unităĠii de la dreapta sa, dar după cele de la stânga. Avantajele schemei faĠă de structura cu arbitru sunt simplitatea (arbitrul de magistrală lipseúte úi sunt trei teste de efectuat pentru unităĠi) úi rapiditatea. Algoritmul cu priorităĠi dinamice (rotating daisy chain). Acest algoritm reprezintă varianta descentralizată a algoritmului cu priorităĠi statice (daisy chain). Pentru algoritmul cu priorităĠi dinamice nu mai există arbitru de magistrală. Acest bloc este divizat în subblocuri descentralizate (vezi figura 4.12). Semnalul de acordare de magistrală este conectat în buclă închisă între subblocurile de control ale magistralei. Subblocul conectat cu dispozitivul care a preluat controlul magistralei devine master, modificând astfel „distanĠa” dintre dispozitive úi subblocul de arbitraj. Dispozitivul care a preluat controlul magistralei va avea la următoarea cerere de magistrală prioritatea minimă. Subblocurile de arbitraj comunică între ele pentru a arbitra cererea de magistrală prin semnalele BUS REQUEST úi ACK. De asemenea, există legături electrice pentru dialog între fiecare subbloc de control al magistralei úi dispozitivul asociat.
BUS GRANT ACK BUS REQUEST BUS Fig. 4.12. Algoritmul cu priorităĠi dinamice (rotating daisy chain).
4.3.4.6. Magistrala VME Magistrala VME (Versa Module Eurocard) este un exemplu de magistrală asincronă, de înaltă performanĠă, proiectată pentru utilizarea intensivă în mediul industrial; ea conĠine 32 de linii de adrese úi 32 de linii de date. Pe lângă aplicaĠiile industriale, este utilizatăúi în minicalculatoare. Magistrala VME a fost dezvoltată din magistrala Versa Bus a firmei Motorola, iar specificaĠiile pentru magistrala VME sunt conĠinute în norma IEEE P1014. Spre deosebire de magistrala IBM PC, magistrala VME a fost proiectată urmărind trei scopuri: interoperabilitatea, performanĠa úi fiabilitatea. Magistrala VME se prezintă sub trei forme: VSB, VMS úi VME. Aceste magistrale specifice sunt bine adaptate la realizarea unor sisteme de calcul variate, de la scheme de dezvoltare úi până la sisteme multiprocesor. Fiecare procesor dispune de o memorie locală, legată prin VSB, care este o magistrală locală proprie magistralei VME. În memoria locală se află toate programele úi datele asociate unui procesor. InstrucĠiunile referitoare la memoria globală sunt singurele care necesită utilizarea magistralei VME, celelalte instrucĠiuni merg pe magistrala VSB. În consecinĠă, performanĠa globală a sistemului este superioară limitei de 40MB/s impuse de tehnologia VME. Exemplu. La sistemele cu 16 procesoare care fac acces la cuvinte de 32 de biĠi, cu un ciclu de magistrală de 200 ns, lărgimea de bandă calculată este de 320 MB/s. Dacă se face presupunerea că 90% din accesele la memorie sunt efectuate în memoriile locale (ipoteză realistă), rezultă că magistrala VME va fi încărcată doar la valoarea de 32MB/s (adică restul de 10%), ceea ce este mai puĠin de 40MB/s (valoare impusă de tehnologia VME).
Structura unui calculator
195
Familia VME cuprinde o magistrală serie pe care comunicaĠiile se realizează prin transmisiuni seriale (VMS). Magistrala VMS este independentă de celelalte douăúi oferă o lărgime de bandă de 30Mb/s (la transmisia serială banda se exprimă în megabiĠi pe secundă, nu în megaocteĠi pe secundă). Ea corespunde necesităĠilor de comunicaĠie cu debit scăzut sau transferului informaĠiilor de sincronizare între procesoare. Magistrala VMS este asemăQătoare unei reĠele locale, ea fiind bazată pe un cablu coaxial. Exemplul 1: sistem cu trei plăci VME: procesor, memorie, controler I/O. UC
M
I/O
Magistrală VME Fig. 4.13. Exemplu simplu de magistrală VME.
Exemplul 2: sistem multiprocesor. ML
ML
ML VSB BUS
UC
UC
UC
MP VME BUS
VMS BUS ML = memorie locală
MP = memorie partajată
Fig. 4.14. Exemplu complex de magistrală VME.
Magistralele VME, VSB úi VMS sunt magistrale pe care comunicaĠiile au loc independent úi simultan, nefiind sincronizate. Magistralele VME cuprind patru grupe de linii: liniile de date, liniile de arbitraj al magistralei, liniile de întreruperi úi liniile de comandă. În ceea ce priveúte unităĠile implicate în transferul de pe liniile de date, există, pe lângă modulele master úi slave, încă două tipuri de unităĠi funcĠionale care participă la schimbul de date pe magistrală: monitorul de urmărire úi supervizorul de magistrală.
196
ARHITECTURA SISTEMELOR DE CALCUL
Monitorul de urmărire analizează traficul de pe magistralăúi generează o întrerupere atunci când detectează o acĠiune sau o adresă anormală (are rolul de a semnaliza o acĠiune nepermisă). Exemplu. O tentativă de scriere în memorie într-o zonă protejată este recunoscută de monitorul de urmărire úi oprită prin cererea de întrerupere a procesorului). Monitorul de urmărire înregistrează în memorie într-un spaĠiu cu n poziĠii semnalele care tranzitează magistrala. Aceasta înseamnă că este posibilă vizualizarea ultimelor cicluri de magistrală care au precedat cererea de întrerupere, de unde rezultă că utilizatorul poate detecta eventualele anomalii de pe magistrală. Supervizorul de magistrală îndeplineúte funcĠia de urmărire temporală a semnalelor de pe magistrală. Exemplu. Dacă un ciclu de magistrală este prea lung, rezultă o eroare de adresare, recunoscută prin faptul că nu există nici un element care să răspundă acestei adresări. Rolul supervizorului de magistrală este important datorită faptului Fă făUă intervenĠia acestuia există posibilitatea ca ciclul de magistrală să se prelungească un timp nedefinit, ceea ce ar duce la blocarea magistralei. Pe liniile de arbitraj, magistrala VME suportă mai multe scheme de lucru, dintre care, în general, sunt recomandate trei: arbitrajul simplu, arbitrajul cu priorităĠi fixe úi arbitrajul cu priorităĠi circulare. Arbitrajul simplu presupune existenĠa unui lanĠ de unităĠi pe un singur nivel. Arbitrajul cu priorităĠi fixe permite existenĠa mai multor niveluri de prioritate, între care se stabileúte o anumită ordine. Arbitrajul cu priorităĠi circulare implică înlăQĠuirea ciclică a unităĠilor, existând astfel posibilitatea unui transfer continuu al priorităĠilor. El presupune existenĠa unor linii de cerere de magistrală cu aceeaúi prioritate; la magistrala VME există patru astfel de linii de cerere de magistrală. Acestea funcĠionează astfel: la primul ciclu de magistrală este servită cererea sosită pe linia 0, la ciclul următor cererea sosită pe linia 1 ú.a.m.d. Dacă nu există nici o cerere pe linia considerată, atunci se analizează linia următoare. UnităĠile care pot deveni master sunt legate în lanĠ la cele patru linii. Oricare ar fi schema de arbitraj utilizată, o unitate master care doreúte accesul la magistrală transmite o cerere în acest sens către arbitru pe o linie corespunzătoare; când cererea este satisfăcutăúi se obĠine magistrala, acea unitate master transmite arbitrului un semnal de ocupare a magistralei úi anulează cererea sa. În acest mod, devine posibilă alocarea anticipată a magistralei unei alte unităĠi care o solicită. Noua unitate master care a adresat cererea de magistrală ocupă magistrala imediat după eliberarea acesteia. Această facilitate de alocare anticipată, care provine din modul de lucru al procesoarelor Motorola, permite o îmbunăWăĠire netă a performanĠelor magistralei. În plus, la magistrala VME arbitrului de magistrală îi este permisă suspendarea activităĠii unui master de prioritate scăzută angajat într-o secvenĠă lungă pe magistrală (de exemplu, într-un transfer de blocuri de date). Acest lucru se întâmplă atunci când un master cu prioritate mare face o cerere de magistrală.
Structura unui calculator
197
198
ARHITECTURA SISTEMELOR DE CALCUL
4.3.5. Magistrala memoriei Magistrala memoriei este utilizată pentru transferul informaĠiilor între CPU úi memoria principală – memoria RAM a sistemului. Această magistrală este o parte din magistrala procesorului sau, de cele mai multe ori, este implementată separat cu un set special de cipuri care este responsabil de transferul informaĠiilor între magistrala procesorului úi memorie. Sistemele cu frecvenĠă mare a plăcii de bază lucrează la viteze care depăúesc uneori posibilităĠile cipurilor DRAM standard. În astfel de sisteme este utilizat un set de cipuri, controlerul memoriei, care realizează interfaĠa între magistrala rapidă a procesorului úi memoria principală, mai lentă (vezi figura 4.15). Acest set de cipuri este în general acelaúi cu setul de cipuri responsabil cu gestionarea magistralei I/O. CPU
Cache extern Fig. 4.16. Arhitectura northbridge-southbridge.
Magistrala procesorului
Cipurile controlerului de memorie Magistrala principală a sistemului
Magistrala principală a sistemului
Magistrala memoriei RAM
Fig. 4.15. Schema de interconectare a magistralelor unui calculator.
InformaĠia care circulă prin magistrala memoriei este transferată la o viteză mult mai mică decât viteza de transfer a informaĠiei pe magistrala procesorului. /ăĠimea magistralei de memorie este întotdeauna egală cu cea a magistralei procesorului. Dacă procesorul are 32/64 biĠi, magistrala memoriei are tot 32/64 biĠi. Procesoarele mai noi aduc o nouă arhitectură a plăcii de bază, cu două cipseturi: northbridge úi southbridge, între care sarcinile sunt împăUĠite (vezi figura 4.16 úi 4.17). Chipul northbridge, cunoscut ca Memory Controller Hub (MCH), se ocupă de comunicaĠiile între CPU, memorie, grafică, interfeĠe úi southbridge. Unele northbridgeuri conĠin controlere video integrate, numite Graphics and Memory Controller Hub (GMCH). Deoarece diversele procesoare úi RAM-ul necesită semnale diferite, un northbridge va funcĠiona doar cu una sau două clase de CPU úi cu un singur tip de RAM.
Fig. 4.17. Arhitectura northbridge-southbridge la procesoare dual-core în sisteme server.
În forma sa cea mai simplă, southbridge integrează controlere I/O, furnizează interfaĠa cu perifericele úi magistralele úi transferă date din/în northbridge, fie prin magistrala PCI la modelele mai vechi (care creează efectul de gâtuire – bottleneck), fie prin interconexiunea proprie (o interfaĠă de înaltă performanĠă), la cipurile mai recente. Southbridge este cunoscut ca I/O Controller Hub (ICH). Spre deosebire de northbridge, southbridge nu este conectat direct la CPU, având în responsabilitate dispozitivele mai lente. Un anumit southbridge va funcĠiona cu mai multe tipuri de northbridge, dar aceste cipuri trebuie proiectate să lucreze împreună.
Structura unui calculator
199
4.3.6. Magistrala de adrese Magistrala de adrese este o parte a magistralei procesorului úi a celei de memorie. Magistrala unui sistem Pentium are 64 de linii de date, 32 linii de adrese úi câteva linii de comandă. Aceste linii de adrese constituie magistrala de adrese; în multe scheme bloc este inclusă în magistrala procesorului úi în cea a memoriei. Magistrala de adrese este folosită pentru a indica adresa de memorie sau adresa de pe magistrala sistemului care va fi utilizată în cadrul operaĠiei de transfer al datelor. Magistrala de adrese indică precis locul în care va avea loc următorul transfer în memorie sau pe magistrală. Dimensiunea magistralei de memorie determină mărimea memoriei pe care unitatea centrală o poate adresa direct.
4.3.7. Magistrala I/O Magistrala I/O permite procesorului să comunice cu dispozitivele periferice. Magistrala úi sloturile sale de extensie asociate sunt necesare pentru că nu este posibil ca sistemele de bază să satisfacă toate necesităĠile tuturor celor care le achiziĠionează. Magistrala I/O permite adăugarea de dispozitive calculatorului pentru a-i extinde posibilităĠile. Componentele de bază ale calculatorului, cum ar fi controlerele de hard disk úi plăcile adaptoare video, pot fi ataúate sistemului prin intermediul sloturilor de extensie; de asemenea, se pot ataúa dispozitive mai specializate, cum ar fi adaptoarele de reĠea etc. De la apariĠia primului PC, s-au introdus mai multe tipuri de magistrale I/O (ISA, MCA, EISA etc.). ÎmbunăWăĠirea performanĠelor vizează trei domenii principale: procesoare mai rapide; cerinĠe software sporite; cerinĠe video mai mari. Fiecare dintre aceste trei cerinĠe impune ca magistrala I/O să fie cât mai rapidă posibil. Aproape toate sistemele PC livrate în prezent folosesc încă aceeaúi arhitectură de magistrală ca la modelul IBM PC/AT din 1984. Dar, cele mai multe dintre aceste sisteme conĠin acum úi o magistrală locală de mare viteză, cum este VLBus sau PCI, care oferă un nivel de performanĠă mai ridicat pentru adaptoarele care solicită aúa ceva. Standardizarea este una dintre caracteristicile care au determinat succesul sistemelor PC. Aceste tipuri de magistrale se deosebesc prin volumul datelor transferate simultan úi prin viteza cu care se realizează acest transfer. Arhitectura magistralei este realizată cu un set de cipuri care este conectat la magistrala procesorului. În general, aceste cipuri controleazăúi magistrala memoriei. 4.3.7.1. Serial ATA SATA (Serial Advanced Technology Attachment) este o magistrală construită în mod special pentru transferul de date între calculator úi echipamente de stocare, cum ar fi hard disk-ul sau unităĠile optice. Principalele avantaje faĠă de vechile interfeĠe
200
ARHITECTURA SISTEMELOR DE CALCUL
Parallel ATA sunt transferurile de date mai rapide, abilitatea de a deconecta sau instala echipamente în timp ce calculatorul este funcĠional (hot swapping), cabluri mai subĠiri care permit sistemului de răcire cu aer să funcĠioneze mai eficient úi operaĠii mai sigure cu verificări de integritate ale datelor mai riguroase. InterfaĠa standard pentru controlerele SATA este AHCI (Advanced Host Controller Interface), care permite să fie folosite specificaĠiile avansate ale SATA cum ar fi hot plug sau NCQ (Native Command Queuing). Dacă interfaĠa AHCI nu este implementată pe placa de bază, controlerele SATA rulează într-un mod care emulează interfaĠa IDE, dar în acest mod nu se pot beneficia de nici una din caracteristicile SATA enumerate mai sus. Driver-ele native din sistemul de operare Windows XP nu suportă interfaĠa AHCI, în timp ce sistemul de operare Windows Vista úi versiunile curente din Mac OS oferă acest suport. Valorile ratei de transfer a generaĠiilor interfeĠei SATA sunt de 1,5 Gb/s úi 3,0 Gb/s. Există planuri de viitor pentru un standard de 6 Gb/s, care ar fi în momentul de faĠă folositor în tandem cu multiplicatori de porturi, pentru a permite mai multor discuri să fie conectate la un singur port SATA, împăUĠind lărgimea de bandă a portului între respectivele discuri. SATA este o arhitectură de tip punct-la-punct (point-to-point), iar conexiunea între controler (H – host) úi echipamentele de stocare (D – device, maximum 8 porturi) este una directă (vezi figura 4.18).
Fig. 4.18. Topologia SATA.
În PC-urile actuale, controlerul SATA este de cele mai multe ori plasat pe placa de bază sau instalat pe un slot PCI. Unele controlere SATA au mai multe porturi SATA úi pot fi astfel conectate la mai multe echipamente, acestea având un identificator unic pe 64 de biĠi. Există, de asemenea, úi porturi de expansiune (M) care permit conectarea prin cabluri (C, lungime 2 m) a mai multor echipamente (maximum 16) la un singur controler de port SATA. Protocoalele de transmisie de mare viteză folosesc o codare de tip 8b/10b, iar semnalul este trimis folosind algoritmul NRZ (Non Return to Zero), cu semnale de voltaj mic, diferenĠiale (LVDS). În codarea de tip 8b/10b, semnalul de sincronizare este inclus în secvenĠa de date. Această tehnică este numită clock data recovery (recuperarea ceasului cu ajutorul datelor), deoarece nu foloseúte un semnal de sincronizare separat. În schimb, are nevoie de o tranziĠie de la 0 la 1 în úirul de date serial pentru a face sincronizarea. Varianta externă la magistralei SATA se numeúte eSATA (introdusă în 2004).
Structura unui calculator
201
4.3.7.2. Magistrala SCSI Small Computer System Interface (SCSI) este un standard al industriei calculatoarelor ce are rolul de a conecta computerele cu dispozitivele periferice ca: hard disk-uri, driverele CD-ROM, imprimante, scanere úi orice alt dispozitiv care trebuie să transfere cantităĠi mari de date într-un timp foarte scurt. Standardul SCSI specifică interfaĠa hardware úi software la un nivel care minimizează subordonarea faĠă de orice altă implementare hardware. SpecificaĠia permite conectarea unei mari varietăĠi de periferice la multe tipuri de calculatoare. O magistrală SCSI este un tip de magistrală care se conformează cerinĠelor fizice úi electrice ale standardului SCSI standard. Un dispozitiv SCSI (Ġintă) se supune oricărei unităĠi conectate la magistrala SCSI, fie că este vorba despre un echipament periferic sau un calculator. Fiecărui dispozitiv SCSI îi este atribuit un ID SCSI (o valoare întreagă, care identifică unic dispozitivul în timpul operaĠiilor). Fazele magistralei SCSI sunt intervale de timp de-a lungul cărora, prin convenĠie, anumite semnale de control sunt permise, iar altele nu sunt. Magistrala SCSI nu poate fi în mai mult de o fază la un anumit moment de timp. Pentru fiecare dintre fazele magistralei, există un set de faze permise care o pot urma. De exemplu, faza de magistrală liberă poate fi urmată numai de faza de arbitraj sau de orice altă fază de magistrală liberă. O fază de date poate fi urmată de o comandă, o stare, un mesaj sau de o fază de magistrală liberă. Semnalele de control direcĠionează tranziĠia de la o fază la alta. De exemplu, semnalul de resetare invocă faza de magistrală liberă, în timp ce semnalul de atenĠie invocă faza de mesaj. Standardul SCSI specifică opt faze distincte pentru magistrala SCSI : 1. Magistrala liberă: această fază indică faptul că nici un dispozitiv SCSI nu foloseúte magistrala úi că magistrala este liberă pentru orice altă operaĠie SCSI. 2. Arbitrajul: această fază este precedată de faza de magistrală liberăúi permite unui dispozitiv SCSI să câútige control asupra magistralei. În timpul acestei faze, toate dispozitivele care doresc să folosească magistrala îúi pun ID-ul pe magistrală (folosind semnalele de date). Semnalul cu cel mai mare ID câútigă. 3. SelecĠia: această fază urmează fazei de arbitraj. Dispozitivul care a câútigat faza anterioară foloseúte această etapă pentru a selecta un alt dispozitiv cu care să comunice. 4. ReselecĠia: această fază, opĠională, este folosită de sisteme care permit echipamentelor periferice să se deconecteze úi să se reconecteze (de) la magistrală în timpul operaĠiilor îndelungate. 5. Comanda: de-a lungul acestei faze, Ġinta cere o comandă de la iniĠiator. 6. Datele: faza de date are loc când Ġinta cere un transfer de date (de) la iniĠiator. 7. Starea: această fază are loc când Ġinta cere ca informaĠia de stare să fie trimisă la iniĠiator. 8. Mesajul: faza de mesaj are loc când Ġinta cere transferul unui mesaj. Mesajele sunt mici blocuri de date care transportă informaĠia sau cererea între iniĠiator úi Ġintă. În această fază, pot fi trimise mesaje multiple. Împreună, ultimele patru faze (comandă, date, stare, mesaj) sunt cunoscute ca fazele de transfer al informaĠiei.
202
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 4.19. Fazele magistralei SCSI úi tranzacĠiile permise.
Figura 4.19 arată legătura dintre fazele magistralei SCSI. Varianta serială a magistralei SCSI se numeúte Serial Attached SCSI (SAS), care este un protocol de tip punct-la-punct (cu viteză de transfer de 6 Gb/s în 2009).
4.3.8. Magistrala locală Magistralele I/O prezentate au o latură comună: viteza relativ scăzută. În timp ce viteza magistralei procesorului a crescut, magistrala I/O a cunoscut doar ajustări ale vitezei nominale, în principal prin creúterea lăĠimii de bandă. SoluĠiile bazate pe magistrala locală nu înlocuiesc standardele existente, ci sunt proiectate pentru a le îmbunăWăĠi. De aceea, un sistem uzual este bazat pe standardele I/O úi, în acelaúi timp, este dotat cu unul sau mai mulĠi conectori Local Bus. Un exemplu de magistrală locală la Intel 80486 este VLBus (VESA Local Bus). 4.3.8.1. Magistrala PCI Magistrala PCI (Peripheral Component Interconnect) este numită adesea úi magistrală mezanin, oarece ea adaugă un alt nivel configuraĠiei de magistrală. PCI ocoleúte magistrala standard I/O, folosind magistrala sistemului (pentru a creúte viteza ceasului) úi toate avantajele căilor de date (vezi figura 4.20). La magistrala PCI standard, informaĠiile se transferă la 33 MHz, utilizând toată lăĠimea cuvântului. Lărgimea de bandă este de 132 MB/s. Când magistrala este folosită cu o unitate CPU pe 64 biĠi, lărgimea de bandă se dublează, aceasta însemnând că datele se pot transfera la viteze de până la 264 MB/s. În realitate, vitezele de transfer ale datelor vor fi în mod necesar mai mici, dar ele rămân în continuare mult mai mari decât la orice altă variantă anterioară. Una dintre cauzele acestui transfer mai rapid este faptul că magistrala PCI lucrează în paralel cu magistrala procesorului, făUă să o înlocuiască. Unitatea CPU poate procesa date în memoria cache externă, în timp ce magistrala PCI este ocupată cu transferarea informaĠiilor între alte elemente ale sistemului, ceea ce constituie un avantaj major al magistralei PCI.
Structura unui calculator
203
204
ARHITECTURA SISTEMELOR DE CALCUL
9. Scriere în memorie úi invalidare. Scrierea se poate face, de asemenea, în salvă. Se respectă modul Write Back pentru scrierea din cache în memorie. 10. Citire configuraĠie. Fiecare dispozitiv PCI include un set de 256 de registre interne, care se folosesc în faza de configurare. În acest tip de ciclu, dispozitivul master poate citi registrele de configurare. 11. Scriere configuraĠie. În acest tip de ciclu, dispozitivul master poate modifica registrele de configurare. 12. Ciclu de adresare dual. Este folosit de iniĠiator pentru a arăta că apare o adresare pe 64 de biĠi. Orice transfer de date pe magistrala PCI constă într-o fază de adresare úi una sau mai multe faze de date. În figura 4.21 este reprezentat un transfer de citire.
Fig. 4.20. Schema de principiu a magistralei PCI.
Activitatea magistralei se manifestă sub forma unor transferuri între un iniĠiator (master) úi o Ġintă (slave). După ce un master a obĠinut controlul magistralei, determină tipul transferului care va urma. În timpul fazei de adresare liniile C/BE informează despre tipul ciclului de magistrală. Ciclurile de magistrală sunt: 1. Acceptare întrerupere. Este un ciclu de citire conceput pentru dispozitivele care funcĠionează cu rol de controler de întreruperi PCI. Liniile de adresă nu sunt folosite în faza de adresare, iar în faza de date este indicat vectorul de întrerupere. 2. Ciclu special. Este folosit de iniĠiator pentru a emite mesaje către una sau mai multe Ġinte. 3. Citire I/O. Este un ciclu de transfer de date între iniĠiator úi un dispozitiv I/O. Fiecare dispozitiv I/ O are alocat un spaĠiu propriu de adresare. 4. Scriere I/O. 5. Citire din memorie. Citirile din memorie se pot executa în salvă, pe blocuri, funcĠie de modul în care controlerul de memorie gestionează transferurile între memorie úi cache. Se citeúte o jumătate de linie de cache sau mai puĠin, în salvă fiind unul sau două cicluri de citire. 6. Citire o linie din memorie. Se citeúte mai mult de o jumătate de linie de cache, dar mai puĠin de trei linii, în salvă fiind între 3 úi 12 cicluri de citire. 7. Citire multiplă din memorie. Se citesc mai mult de 3 linii de cache, în salvă fiind mai mult de 12 cicluri de citire. 8. Scriere în memorie
Fig. 4.21. Fazele unui transfer de citire pe magistrala PCI.
Linii implicate în acest transfer sunt: CLK – tactul de magistrală PCI, 33MHz-133MHz; AD – liniile multiplexate pentru adrese úi date; C/BE – liniile multiplexate pentru comenzi de magistrală sau Byte Enable. În timpul fazei de date, arată care din cei 4 octeĠi de date poartă date semnificative; FRAME – semnalul generat de iniĠiatorul curent, pentru a indica startul unui transfer. Este dezactivat când iniĠiatorul începe faza finală de date. IRDY – iniĠiator pregătit, generat de masterul curent. La citire, indică faptul că masterul este gata să accepte date, iar, la scriere, că pe AD sunt prezente date valide. TRDY – Ġintă pregătită, generat de modulul selectat (Ġintă). La citire, pe AD sunt prezente date valide, iar la scriere indică faptul căĠinta este gata să accepte date. DEVSEL – semnalul activat de Ġintă când îúi recunoaúte adresa. FuncĠionarea este următoarea:
Structura unui calculator
205
1. De îndată ce masterul are controlul magistralei, poate începe transferul activând FRAME. Linia rămâne activă până iniĠiatorul termină ultima fază de date. IniĠiatorul pune adresa pe AD úi comanda de citire pe liniile C/BE. 2. ğinta îúi recunoaúte adresa pe liniile AD. 3. IniĠiatorul cedează magistrala Ġintei (începând cu tactul 3). IniĠiatorul schimbă informaĠia pe liniile C/BE, pentru a indica pe care dintre liniile AD se vor transmite datele de la Ġintă (1 până la 4 octeĠi). 4. ğinta selectată activează DEVSEL, pentru a semnaliza că a recunoscut adresa, apoi pune datele pe liniile AD (primul octet) úi activează TRDY. 5. ğinta are nevoie de timp pentru a pregăti următorul octet de date. 6. ğinta dezactivează TRDY, pentru a informa iniĠiatorul că pe următorul tact nu vor exista date valide. Ca urmare, iniĠiatorul nu va citi datele la începutul tactului 5, ci la începutul tactului 6. S-a inserat astfel o stare de WAIT. 7. După tactul 6, Ġinta pune pe magistrală al treilea octet de date. Se presupune de data aceasta că iniĠiatorul nu este gata să preia datele (are, de exemplu, buffer-ul plin). IniĠiatorul dezactivează IRDY, ceea ce are ca efect menĠinerea datelor de către Ġintă un tact suplimentar (datele nu se citesc la începutul tactului 7, ci la începutul tactului 8). 8. IniĠiatorul dezactivează semnalul FRAME úi activează semnalul IRDY, pentru a semnala că este gata să finalizeze transferul. 9. IniĠiatorul dezactivează IRDY, permiĠând magistralei să treacă în starea iniĠială. ğinta a detectat dezactivarea semnalului FRAME úi dezactivează TRDY úi DEVSEL. 4.3.8.2. Magistrala AGP AGP (Accelerated Graphics Port) este o magistrală dedicată comunicării cu display-ul, accesibilă prin intermediul unui slot special, aflat pe placa de bază, în care se montează placa grafică. AGP a fost introdus pentru a degreva magistrala PCI de comunicaĠia cu display-ul úi pentru a mări banda transferurilor de date către acesta. AGP a fost apărut în 1997, odată cu procesorul Pentium II úi cipsetul 62440LX. Acest cipset, primul care a implementat controlul comunicaĠiei pe AGP, intermedia transferul de date între procesorul Pentium II, aflat împreună cu memoria cache L2 în modulul SECC (Single Edge Contact Cartridge), memoria principală, magistrala PCI úi placa grafică montată în slotul AGP (vezi figura 4.22). AGP dă plăcii grafice posibilitatea de a accesa direct memoria principală, printr-o procedură numită DIME (Direct Memory Execute). Cu DIME, adresarea memoriei se face în pipeline, mod care constă în a lansa mai multe cereri pe durata unui acces la memorie (spre deosebire de PCI, care lansează o nouă cerere numai când cea anterioară a fost satisfăcută). Cererile formează o coadă de aúteptare, printr-un proces denumit SBA (Sideband Addressing). Magistrala AGP are la bază standardul PCI versiunea 2.1. AGP are 32 de linii úi lucrează la 66 MHz, spre deosebire de PCI, a cărei frecvenĠă este de 33 MHz. Banda primei magistrale AGP era de 264 MB/s (dublă faĠă de PCI). Ulterior, au apărut plăci grafice care suportau transferul de date pe ambele fronturi ale semnalului de ceas (2-mode transfer) úi banda s-a dublat ajungând la 528 MB/s (AGP 2).
206
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 4.22. ConfiguraĠia magistralelor la PC-urile cu procesor Pentium II.
Versiunea AGP 2.0, cunoscută úi ca AGP 4, defineúte un nou mod de transfer – 4x-mode transfer – constând în patru transferuri de date pe o perioadă de ceas, banda fiind de 1,066 GB/s. O nouă versiune, lansată în 2001, AGP 8, dublează încă o dată banda de transfer, care depăúHúte, astfel, valoarea de 2 GB/s. 4.3.9. Magistrala serială 4.3.9.1. Magistrala USB Acest tip de magistrală a apărut în toamna anului 1995. La crearea lui au contribuit mai multe firme de renume, cum ar fi DEC, Compaq, IBM, NEC, Northern Telecom. Odată cu apariĠia USB, dispare multitudinea de cabluri úi conectori necesară conectării diverselor periferice: tastatură, mouse, imprimantă, joystick, scaner sau modem extern. În partea din spate a calculatorului există un singur conector de la care pornesc datele spre tastatură, periferice úi monitor. Aceste aparate funcĠionează ca distribuitori (hub) pentru alte aparate. De asemenea, calculatorul preia rolul de gazdă (host), gestionând diversele comunicaĠii. Magistrala USB este dirijată exclusiv de calculatorul gazdă. Practic, la această magistrală poate fi conectat orice periferic echipat cu un controler USB, dar, datorită ratei de transfer de 12 Mb/s, sunt vizate în primul rând echipamentele audio-video, telefonia digitală, modemurile, tastaturile, tabletele digitizoare, unităĠile CD úi DVD, unităĠile HDD externe etc. După cum s-a arătat în paragraful 3.4.4.1, un host USB comunică cu dispozitivele conectate prin intermediul unor canale logice (pipes), care au niúte terminale logice pe dispozitive numite endpoints.
Structura unui calculator
207
Pipe-urile se împart în patru categorii, după tipurile de transfer folosite: modul control – folosit, de obicei, pentru comenzi simple către dispozitive, primind ca răspuns starea dispozitivului periferic la un moment dat (de exemplu, pipe-urile de management 0); modul izocron – garantează o viteză (nu neapărat cea maximă), dar cu posibilităĠi de a pierde date (de exemplu, aplicaĠii audio-video în timp real); modul întrerupere – pentru periferice care au nevoie de răspuns rapid (cu latenĠe limitate) (de exemplu, mouse, tastatură etc.); modul bulk – transferuri mari úi lungi de date, folosind toată banda liberă, făUă a garanta banda (de exemplu, transferuri de fiúiere). Când un dispozitiv periferic este activ, ataúat host-ului, acesta primeúte o adresă de 7 biĠi de la host. Host-ul interoghează dispozitivele pentru trafic, astfel încât nici un dispozitiv nu poate transfera date pe magistrală făUă a face o cerere Fătre host. Întreruperile efectuate asupra endpoint-urilor corespunzătoare nu întrerup practic traficul de date, ci sunt programate doar pentru a fi interogate mai des de Fătre host, primind o prioritate mai mare. Accesarea unui endpoint se face printr-o configuraĠie ierarhică. Un dispozitiv conectat la magistrală are un descriptor de dispozitiv (device descriptor), care, la rândul său, are mai mulĠi descriptori de configuraĠie (configuration descriptors). ConfiguraĠiile corespund, de obicei, cu starea la un moment dat (de exemplu, activ sau în mod putere scăzută – low power). Fiecare descriptor de configuraĠie are, la rândul său, un descriptor de interfaĠă (interface descriptor), care descrie diferite funcĠionalităĠi ale dispozitivului, în funcĠie de tipul acestuia (de exemplu, o cameră video poate avea descriptor de interfaĠă video úi descriptor de interfaĠă audio). Structura ierarhică este prezentată în figura 4.23.
Fig. 4.23. Structura ierarhică a descriptorilor USB.
208
ARHITECTURA SISTEMELOR DE CALCUL
Fiecare descriptor de interfaĠă are niúte setări implicite úi este posibil să aibă setări alternative de interfaĠă (alternate interface settings), care, la rândul lor, au descriptori de enpoint-uri (endpoint descriptors). Un endpoint poate fi totuúi folosit pentru mai multe interfeĠe sau setări alternative de interfeĠe. Hub-urile sunt elemente cheie în arhitectura plug’n’play a USB, uúurând conectivitatea din punct de vedere al utilizatorului úi asigurând o robusteĠe mai mare. Punctele de conexiune ale hub-urilor se numesc porturi. Un hub are un port upstream úi mai multe porturi downstream (vezi figura 4.24). Portul upstream conectează hub-ul cu gazda (host) sau cu un hub mai apropiat de gazdă. Portul downstream conectează hub-ul cu alt hub sau cu un dispozitiv funcĠional. Hub-ul poate detecta conectarea úi deconectarea dispozitivelor la fiecare port downstream úi permite alimentarea cu energie a dispozitivelor din aval.
Fig. 4.24. Structura unui hub USB.
Un hub USB 2. 0 se compune din trei porĠiuni: controlerul hub-ului: este un comutator controlat de protocol între portul upstreamúi porturile downstream, care are suport hardware pentru reset úi semnalizare suspend/resume; repetorul hub; translatorul de tranzacĠii: asigură mecanismul de viteză medie/mică în aval de hub, în timp ce în amonte transmisia se face la viteză mare. Calculatorul (host) úi aparatul (hub) sunt împăUĠite în niveluri (layer) distincte. SăgeĠile verticale indică starea actuală de comunicaĠie la gazdă. InterfaĠa corespunzătoare a aparatului are o implementare specifică. Toate comunicaĠiile dintre gazdăúi aparat au loc prin cablul fizic USB. Există interfeĠe gazdă-aparat la fiecare nivel orizontal. ComunicaĠia între clientul deĠinător al software-ului úi funcĠiile provenite de la aparat sunt reglementate de un contract bazat pe nevoia aplicaĠiei curente de a folosi aparatul úi posibilităĠile oferite. Această interacĠiune client-funcĠie creează cereri pentru toate nivelurile úi interfeĠele lor. Nivelul gazdei pune la dispoziĠie următoarele posibilităĠi: detectarea ataúării sau deconectării unui aparat USB; managementul fluxului standard de control între gazdăúi aparat; managementul fluxului de date între gazdăúi aparat; colectarea informaĠiei statistice de stare a activităĠii; controlul electric al interfeĠelor între controlerul gazdăúi aparatul USB.
Structura unui calculator
209
Fig. 4.25. Arhitectura stratificată a comunicaĠiei USB.
Fluxul de date de bază úi relaĠiile dintre modulele USB sunt prezentate în figura 4.25, iar comunicaĠia între calculator (host) úi aparate (hub) se face pe baza unui protocol descris în figura 4.26. Câmp de sincronizare (8 biĠi)
Identificator al pachetului (8 biĠi)
Date (0 … 1032 octeĠi)
Control erori CRC (16 biĠi)
210
ARHITECTURA SISTEMELOR DE CALCUL
4.3.9.2. Magistrala FireWire (standardul IEEE 1394) Această magistrală a fost creată în 1986 de către firma Apple úi a fost adoptată ca standard în 1994. În prezent ea este sprijinită de numeroase firme cum ar fi Adaptec, AMD, Cirrus Logic, Compaq, HP, Hitachi, Matsushita, IBM, Maxtor, Microsoft, NEC, Philips, Sun, Sony, Texas Instruments. Magistrala FireWire este de fapt o interfaĠă serială de mare viteză: ea permite rate de transfer de 400 Mb/s … 1 Gb/s. Este văzută ca magistrala viitorului, pentru conectarea tuturor echipamentelor electrocasnice: TV, DVD, scanner, cameră web, PC. Acest tip de magistrală a apărut datorită cerinĠelor tot mai mari în ceea ce priveúte calitatea transmisiei audio-video, dar úi din necesitatea interconectării tuturor echipamentelor electrocasnice. Cu ajutorul unui suport software adecvat se poate crea un nou tip de aplicaĠii multimedia: conferinĠe de calitate full-motion, jocuri úi multimedia de calitate cinematografică, video-mail, editare video etc. Toate transmisiile de date FireWire sunt de tip pachet úi pot fi clasificate în două categorii: asincroneúi isocrone, magistrala fiind de tip tranzacĠional. Transmisiile asincrone sunt garantate la recepĠie úi au nevoie de un semnal de confirmare de la receptor. Ele sunt transmisiuni unipunctuale (unicast). Transmisiile isocrone sunt garantate în timp, cu o lărgime de bandă specifică, rezervată pentru ele în magistrala serială. Până la 80% din banda magistralei poate fi alocată pentru transmisiile isocrone. Lărgimea de bandă este alocată în intervale de 125μs, numite cicluri. Transmisiile isocrone au o natură multipunctuală (multicast), fiind adresate unuia sau mai multor noduri, pe baza unui număr de canal. FireWire suportăúi un alt tip de transmisii, numite fluxuri asincrone (asyncronous streaming). Acestea pot fi unipunctuale sau multipunctuale. Pachetele de date FireWire au dimensiune variabilă. Dimensiunea maximă a încărcăturii de date depinde de tipul de transmisiune úi lărgimea de bandă a magistralei FireWire (1001000 Mb/s). Figurile 4.27 úi 4.28 reprezintă formate de pachete FireWire isocrone úi, respectiv, asincrone. Fluxurile asincrone úi pachetele isocrone au acelaúi format.
Fig. 4.26. Structura pachetului de date.
Controlul erorilor este realizat cu ajutorul unui cod redundant ciclic, CRC (Cyclic Redundancy Code), care asigură transmisia corectă a informaĠiei. Mecanismul CRC asigură o rată de eroare a transmisiei de un bit eronat la 10 miliarde. După terminarea transferului de date, are loc confirmarea transmisiei datelor úi verificarea corectitudinii transmisiei lor (handshake). Datorită modulelor soft plug’n’play, la conectarea fizică a unui periferic la computer, acesta este autodetectat, iar datorită unor registre interne ale perifericului (care furnizează sistemului de operare informaĠia necesară) sunt încărcate exact driver-ele necesare funcĠionării acestuia, care poate fi úi dezinstalat când se hotăUăúte îndepărtarea perifericului respectiv din configuraĠie. După instalarea driver-ului aferent, acesta face o cerere de alocare de bandă. Banda se alocă în mod dinamic, în funcĠie de necesităĠile fiecărui periferic. InformaĠiile se transferă sincron sau asincron pe magistrală, în format de pachete.
Fig. 4.27. Formatul pachetelor isocrone úi a fluxurilor asincrone FireWire.
Structura unui calculator
211
SemnificaĠia notaĠiilor din figura 4.27 este următoarea: tag – formatul datelor (specific protocolului); channel – adresa de canal; tcode – codul tranzacĠiei (asincron, isocron, pachet de date, de control etc.); sy – codul de sincronizare (specific aplicaĠiei).
212
ARHITECTURA SISTEMELOR DE CALCUL
FireWire necesită trei noduri primare pentru gestionarea magistralei la o operare normală. Acestea sunt: cycle master, IRM (Isochonous Resource Manager) úi BM (Bus Manager), conform figurii 4.29.
Fig. 4.29. Structura stratificată a protocolului FireWire.
Fig. 4.28. Formatul pachetelor asincrone FireWire.
SemnificaĠia notaĠiilor din figura 4.28 este următoarea: destination id – include 6 biĠi pentru ID-ul nodului (63 de noduri) úi 10 biĠi pentru ID-ul magistralei (1024 magistrale); tcode – tipul tranzacĠiei; pri – prioritate (câmp neutilizat); destination offset – locaĠia de adresă din interiorul nodului Ġintă (target); celelalte câmpuri depind de tipul protocolului. Arhitectura FireWire este constituită ca o stivă cu un protocol de patru nivele. Nivelul fizic determină arbitrajul magistralei, defineúte semnalele electrice pentru transmisia de date úi interfaĠa mecanică pentru cabluri úi conectori. Nivelul de conexiuni asigură adresa úi decodificarea numărului de canal, precum úi generarea CRC-ului úi verificarea pachetelor de date transmise úi recepĠionate. Nivelul de tranzacĠii asigură servicii de interogare-răspuns pentru transmisiile asincrone. Transmisiile isocrone operează independent faĠa de acest nivel. Nivelul de gestiune a magistralei asigură suportul pentru diferite activităĠi de gestiune úi configurare a magistralei.
Cycle master genereazăúi transmite pachete de iniĠializare ciclice la fiecare 125 μs. Un pachet de iniĠializare ciclic reprezintă începutul intervalului periodic de 125 μs. Nodul răGăcină joacă rolul de cycle master. IRM gestionează lărgimea de bandă a magistralei de date seriale isocrone úi alocă numerele de canale generate multinodal. BM gestionează distribuĠia de putere pe cabluri úi afiúează harta topologică úi diagrama de viteză pentru magistrala serială. Diagrama de viteză este necesară deoarece FireWire poate suporta noduri/cabluri de lărgimi de bandă diferite într-o singură reĠea. În general, toate nodurile sunt capabile să efectueze activităĠile de gestionare a magistralei. Totuúi, nodurile operaĠionale de gestionare a magistralei sunt cele alese în etapa configurării magistralei. FireWire utilizează un mecanism de arbitraj cerere/acceptare pentru controlul accesului în reĠeaua shared-medium. O schemă de arbitraj simplă funcĠionează după cum urmează: nodurile care doresc să transmită un pachet cer permisiunea de la managerul de magistrală; managerul selectează cererea optimă, bazată pe anumite criterii, úi emite un semnal de acceptare pentru nodul corespunzător; numai nodul acceptat îúi transmite pachetul de date, celelalte noduri continuând să ceară permisiunea până când o primesc de la manager.
Structura unui calculator
213
4.3.9.3. Magistrala I2C Magistrala I2C (Inter-Integrated Circuits) a fost dezvoltată de firma Philips pentru comunicaĠia între diferite microcontrolere úi controlere I/O. Este o magistrală bidirecĠională simplă, care utilizează două fire, unul pentru datele seriale, SDA (Serial Data), úi unul pentru ceasul serial, SCL (Serial Clock), după cum arată în figura 4.30. Există un mare număr de circuite integrate compatibile cu magistrala I2C, care a devenit un standard industrial pentru magistralele de control.
Fig. 4.30. Circuite conectate printr-o magistrală I2C.
Fiecare dispozitiv conectat la magistrală este recunoscut printr-o adresă unicăúi poate funcĠiona fie ca receptor (de exemplu, un afiúaj cu cristale lichide), fie ca transmiĠător úi receptor (de exemplu, o memorie). TransmiĠătoarele úi receptoarele pot funcĠiona în modul master sau în modul slave, după cum acestea pot iniĠia un transfer de date sau sunt doar adresate. Un dispozitiv master poate transmite/recepĠiona semnale la sau de la un dispozitiv slave sau poate controla transferurile între două dispozitive slave, dintre care unul este transmiĠător, iar celălalt este receptor. Pot exista mai multe dispozitive master pe magistrală. În cazul în care mai multe dispozitive master încearcă simultan să controleze magistrala, o procedură de arbitraj decide care din dispozitive este prioritar. În sistemele cu mai multe dispozitive master, în cazul în care mai multe asemenea dispozitive doresc accesul la magistrală, are loc o procedură de arbitraj. Dacă un dispozitiv master transmite un semnal 1 logic pe linia de date, iar un alt dispozitiv master transmite un semnal 0 logic, acesta din urmă va prelua magistrala, iar primul dispozitiv master va elibera magistrala. Acest arbitraj poate continua pe durata mai multor biĠi. Pentru arbitraj, se utilizează biĠii de adresăúi cei de date. Mai recent, în versiunea 2.1 a specificaĠiilor magistralei, a fost inclusă facilitatea de deplasare a nivelelor de tensiune (level shifting), care permite conectarea la magistrală a dispozitivelor care funcĠionează cu tensiuni de alimentare diferite, de exemplu, la 5 V úi 3,3 V. De asemenea, specificaĠiile au fost extinse pentru dispozitivele care funcĠionează la tensiuni de sub 2,7 V. A fost adăugat un mod de transfer de viteză ridicată (high speed), care asigură rate de transfer de până la 3,4 Mbit/s úi permite conectarea unor memorii EEPROM. Cu ajutorul unei punĠi (bridge), se asigură comunicaĠia bidirecĠională cu dispozitivele care utilizează modul de transfer rapid sau cel standard.
214
ARHITECTURA SISTEMELOR DE CALCUL
4.3.9.4. Magistrala Fibre Channel Creúterea performanĠelor staĠiilor de lucru, a procesoarelor úi a perifericelor, ca úi creúterea ponderii arhitecturilor distribuite de tip client/server, au ridicat cerinĠele pentru aplicaĠiile cu rate de transfer ridicate. Interconexiunile dintre aceste sisteme úi dispozitivele I/O necesită un nou nivel al performanĠelor în ceea ce priveúte fiabilitatea, viteza úi distanĠa. Fibre Channel reprezintă o tehnologie de interconectare cu fiabilitate ridicată, care permite comunicaĠii concurente între staĠii de lucru, servere, sisteme de stocare a datelor úi alte periferice care utilizează protocoale ca SCSI, IP, HPPI-FP sau audio-video. Această tehnologie asigură interconectarea pentru topologii multiple cu o rată de transfer totală scalabilă până la 1 Tbit/s. Fibre Channel reprezintă un standard pentru un canal de comunicaĠie care dispune de facilităĠi de reĠea úi asigură astfel conectivitatea úi distanĠa necesară, permiĠând utilizarea diferitelor protocoale de comunicaĠie. De asemenea, Fibre Channel are caracteristicile unui canal de comunicaĠie tradiĠional, cu avantajele simplităĠii, a performanĠelor repetabile úi a furnizării garantate a datelor. În termenii arhitecturii Fibre Channel, comutatorul care leagă dispozitivele este o reĠea de tip fabric. Legătura este reprezentată de două fibre unidirecĠionale transmiĠând în sensuri opuse faĠă de emiĠătorul úi receptorul asociate acestora. Fiecare fibră este ataúată unui emiĠător al unui port la unul dintre terminale úi unui receptor al altui port la celălalt terminal. Dacă reĠeaua de tip fabric este prezentă în configuraĠie, fibra poate fi ataúată unui port al unui nod (N_Port) úi unui port al reĠelei (F_Port). Deoarece sistemul de canale se bazează pe porturi comunicând între ele úi cu reĠeaua de tip fabric, nu este esenĠial dacă reĠeaua este un comutator de circuit, un hub activ sau o buclă. Topologia poate fi selectată în funcĠie de cerinĠele de performanĠă ale sistemului sau de opĠiunile de pachete. Topologiile posibile ale magistralei Fibre Channel (vezi figura 4.31) sunt cele de tip punct-la-punct (jos), crosspoint cu comutare (stânga) sau buclă arbitrată (dreapta).
Fig. 4.31. Topologii Fibre Channel.
Structura unui calculator
215
Arhitectura Fibre Channel reprezintă, aúadar, integrarea unei reĠele cu o interconexiune inteligentă între dispozitive. Magistrala Fibre Channel operează la o mare varietate de viteze (133 Mbit/s, 266 Mbit/s, 530 Mbit/s, 1 Gbit/s) úi pe trei tipuri de medii electrice úi optice. DistanĠele de transmisiune variază în funcĠie de combinaĠiile între vitezăúi mediu. Mediul optic de fibre unimodale utilizând surse de lumină laser cu lungime de undă mare oferă cea mai înaltă performanĠă (distanĠa maximă de 10 km la 1 Gbit/s). 4.3.9.5. Magistrala InfiniBand Arhitectura InfiniBand rezolvă limitările de lărgime de bandăúi suprasarcină ale magistralei PCI prin trecerea de la tradiĠionala arhitectură partajată a magistralei la o arhitectură cu comutare de reĠea de tip fabric (switched fabric architecture). Figura 4.32 ilustrează cea mai simplă configuraĠie a unui sistem InfiniBand, în care două sau mai multe noduri sunt conectate prin reĠeaua InfiniBand Fabric. Un nod reprezintă fie un dispozitiv gazdă (server), fie un dispozitiv I/O (subsistem RAID). ReĠeaua InfiniBand Fabric poate consta dintr-un singur comutator (în cel mai simplu caz) sau dintr-un set de comutatoare interconectate úi router-e.
216
ARHITECTURA SISTEMELOR DE CALCUL
4.3.9.6. Magistrala PCI Express Necesitatea schimbării magistralei a apărut ca o cerinĠă firească, având în vedere că vechiul PCI, cu limita sa de viteză de transfer de 133 MB/s, nu mai putea face faĠă necesităĠilor actuale ale calculatoarelor. Chiar úi portul AGP 8, cu viteza sa teoretică maximă de 2 GB/s nu face faĠă noilor cipuri video apărute. În aceste condiĠii, o grupare a liderilor în domeniu, numită PCI-SIG (Intel, NVidia, Dell etc.) au lucrat la dezvoltarea magistralei PCI Express, cu scopul de a înlocui PCI úi AGP. Tehnologia din în spatele magistralei PCI Express nu este complet nouă. Cunoscută sub numele Arapahoe sau 3GIO, a fost ratificată ca standard în aprilie 2002. Această magistrală a fost gândită pentru a prelua munca pentru următorii 10 ani, deci nu este vorba despre un standard de tranziĠie. Din punct de vedere tehnic, PCI Express este o magistrală serială bidirecĠională (cu versiunile 1.0, 2.0 úi 3.0), care transferă informaĠiile sub formă de pachete, aproape la fel cu o conexiune Ethernet. Arhitectura PCI Express Fiecare dintre cele două conexiuni unidirecĠionale în parte poate transporta 2,5 Gbit/s. Un semnal de tact poate fi integrat în transferuri, pentru a regla viteza de transfer. Arhitectura acestei generaĠii de magistrală se bazează pe straturi (layer), ca úi cele utilizate de protocolului TCP/IP (vezi figura 4.33).
Fig. 4.32. Arhitectura InfiniBand Fabric.
Fiecare conexiune dintre noduri, comutatoare úi router-e este o legătură serială, punct-la-punct. Această deosebire esenĠială aduce anumite beneficii: 1. Fiind o conexiune serială, necesită doar patru legături, faĠă de conexiunea deosebit de complexă a magistralei PCI. 2. Natura punct-la-punct a conexiunii oferă capacitatea maximă a legăturii între două puncte, fiind dedicată celor două puncte finale. Astfel, se elimină concurenĠa la magistrală, precum úi întârzierea rezultată în condiĠiile unei suprasarcini în arhitectura magistralei partajate. 3. Canalul InfiniBand este proiectat pentru conexiuni între gazde úi dispozitive I/O în cadrul unui centru de date (Data Centre). Datorită lungimii bine definite úi relativ scurte a conexiunilor, poate fi atinsă o lărgime de bandă mult mai mare decât în cazurile în care este nevoie de lungimi mult mai mari. SpecificaĠiile InfiniBand definesc lărgimea de bandă brută a conexiunii de bază 1 la 2,5 Gb/s úi specifică două lărgimi de bandă adiĠionale, referite ca 4úi 12, ca multipli ai ratei pentru legătura de bază.
Fig. 4.33. Arhitectura PCI Express.
Nivelul fizic defineúte specificaĠii electrice, mecanice, procedurale úi funcĠionale pentru activarea, menĠinerea úi dezactivarea legăturilor fizice între sisteme úi este alcătuit dintr-o interfaĠă serială de mare viteză, numită Low-Voltage Differential Signaling (LVDS), pentru a transfera 2,5 GHz. Cuprinde componentele fizice necesare pentru a configura úi menĠine conexiunile. Include mecanisme pentru pregătirea conexiunii, citirea semnalelor, codarea 8b/10b, crearea de frame-uri & pachete úi transmiterea datelor pe conexiune.
Structura unui calculator
217
Nivelul legăturilor de date este responsabil cu transmiterea corectă a datelor printr-o legătură fizică existentă, între două puncte conectate direct prin această legătură fizică. Nivelul fizic nu poate realiza acest lucru, deoarece aici nu se operează cu de date, ci numai cu biĠi úi, mai exact, cu reprezentarea fizică a acestora (niveluri de tensiune, intensitate a luminii etc.). Nivelul legăturilor de date se ocupă cu adresarea fizică, topologia reĠelei, accesul la reĠea, detecĠia & anunĠarea erorilor (CRC pe 32 de biĠi) úi controlul fluxului fizic (flow control); Nivelul transport este responsabil cu crearea pachetelor care vor fi expediate úi cu citirea pachetelor primite. Se ocupă cu controlul fluxului de date úi cu managementul puterii consumate. Acest nivel oferă un serviciu de transport de date izolează nivelurile superioare de orice specificităĠi legate de modul în care este executat transportul datelor. Are un caracter redundant, realizat de ECRC (End-toend Cycling Redundancy Check), mecanism pe 32 biĠi cu rolul de a asigura transportul între două staĠii separate de una sau mai multe entităĠi. Deúi toate tranzacĠiile PCI Express sunt separate, unele nu necesită răspuns (avantaj). Nivelul software (aplicaĠie) este situat cel mai aproape de utilizator, oferind servicii de reĠea aplicaĠiilor utilizator. Nivelul aplicaĠie stabileúte disponibilitatea unui calculator cu care se doreúte iniĠierea unei conexiuni, stabileúte procedurile care vor fi urmate în cazul unor erori úi verifică integritatea datelor. PCI Express vs PCI /ărgimea de bandă disponibilă între două puncte nu este partajată, astfel încât, atât la un singur periferic PCI Express cât úi la trei, fiecare are la dispoziĠie aceeaúi lărgime de bandă. La nivelul cipsetului, magistrala PCI Express este gestionată de un switch care gestionează conexiunile punct-la-punct, înainte de a interacĠiona cu restul sistemului (vezi figura 4.34).
Fig. 4.34. Topologia de magistrală partajată la PCI úi topologia punct la punct la PCI Express.
ObservaĠie. În cazul PCI Express, fiecare dispozitiv are o cale directă úi exclusivă către switch. Switch-ul analizează datele în funcĠie de prioritatea aplicaĠiilor. /ărgimea mare de bandă reprezintă o altă noutate adusă de PCI Express. O singură cale este capabilă să transmită 250 MB/s în fiecare direcĠie simultan (500 MB/s pentru ambele direcĠii). PCI Express este alcătuit din două căi, aúadar, poate transmite 500 Mb/s pentru o singura direcĠie úi 1000 MB/s pentru ambele direcĠii. PCI Express în variantele 4, 8, 16 nu se fabrică pentru calculatoarele desktop, ci pentru servere, iar PCI Express 16 este creat pentru a înlocui slotul VGA 8x.
218
ARHITECTURA SISTEMELOR DE CALCUL
Din punct de vedere al compatibilităĠii, producătorii au gândit PCI Express pentru a rămâne compatibil din punct de vedere software cu toate sistemele de operare úi programele actuale. Cu alte cuvinte, nu este nevoie de un update software pentru a putea beneficia de avantajele aduse de PCI Express. Un alt lucru important este că PCI Express rămâne compatibil cu plăcile PCI actuale nu oferă suport simultan pentru AGP úi PCI Express, din cauza constrângerilor. Deci, adoptând o platformă cu PCI Express, trebuie înlocuită vechea placă video. În plus, PCI Express diminuează consumul de energie când slotul nu este activ, oferă suport pentru traficul în timp real, încorporează funcĠiile hot plugúi hot swap, furnizează performanĠe scalabile úi caracteristici avansate, QoS (Quality of Service). Comparativ cu PCI, PCI Express are semnale de legătură minime, iar ceasul úi adresarea informaĠiei sunt incluse în date. Figura 4.35 compară lărgimea de bandă per pin la PCI, PCI-X, AGP8úi PCI Express.
Fig. 4.35. ComparaĠie a lărgimilor de bandă.
Exemple de arhitecturi PCI Express NenumăraĠi factori duc la alegerea cardurilor PCI Express în funcĠie de necesităĠile clientului, serverului sau a platformei portabile: carduri standard úi cu profil mic: desktop, staĠii de lucru úi servere; minicarduri: calculatoare portabile; ExpressCard: calculatoare portabile úi desktop; Server I/O Module (SIOM). Figura 4.36 exemplifică implementarea PCI Express într-un sistem client. IniĠial, conexiunea PCI Express 16 înlocuieúte slotul AGP dintre subsistemele grafice úi northbridge. O variantă de PCI Express poate înlocui conexiunea dintre northbridgeúi southbridge, rezolvând incompatibilităĠile dintre componente úi nothbridge. Figura 4.37 exemplifică structura unui sistem portabil. La fel ca la sistemele desktop, PCI Express înlocuieúte placa AGP, fiind o alternativă la conexiunea dintre nothbridge úi southbridge. Magistrala PCI dintre northbridge úi staĠia de lucru poate migra, de asemenea, spre PCI Express. Un slot ExpressCard 1 care foloseúte o conexiune USB 2.0 poate înlocui cardul PC. Figura 4.38 exemplifică modul în care poate fi implementat PCI Express într-o arhitectură de server dual-core. PCI Express face legătura dintre componente úi sloturi plasate direct pe northbridge.
Structura unui calculator
219
220
ARHITECTURA SISTEMELOR DE CALCUL
Fig. 4.38. Exemplu de arhitectură server PCI Express.
Fig. 4.36. Exemplu de arhitectură desktop PCI Express.
4.3.10. ComparaĠii între magistrale Figura 4.39 este o sinteză de tip roadmapúi arată evoluĠia în timp a vitezei magistralelor, exprimată prin valoarea ratei de transfer (benzii), iar tabelul 4.2 prezintă comparativ caracteristicile, parametrii úi performanĠele câtorva dintre cele mai răspândite standarde de magistrale seriale din ultimii ani.
Fig. 4.37. Exemplu de arhitectură de sistem portabil PCI Express.
Această abordare are următoarele avantaje: viteză mult mai mare pentru generaĠiile viitoare (10-Gps Ethernet); costuri mai mici – mai multe sloturi úi componente se pot conecta la cipul sistemului; latenĠă mică – latenĠa transmisiei dintre componente, CPU úi memorie poate fi redusă, eliminând puntea PCI-X.
Fig. 4.39. EvoluĠia ratei de transfer a magistralelor.
Structura unui calculator
221 Tabelul 4.2
ComparaĠie între magistrale
Nume
/ărgime de bandă efectivă (Mb/s)
Viteză de transfer (MB/s)
Lungime maximă de cablu (m)
Putere/ tensiune necesare (W/V)
Număr de echipamente per canal
SAS
3.000
375
8
-
4
eSATA
3.000
300
2
-
1 (15 cu multiplicator de port)
SATA 300
3.000
300
1
-
1 (15 cu multiplicator de port)
SATA 150
1.500
150
1
-
1
PATA 133
1.064
133
0,46
-
2
FireWire 3200
3.144
393
100
15/12–25
63 (cu hub)
FireWire 800
786
98,25
100
15/12–25
63 (cu hub)
FireWire 400
393
49,13
4,5
15/12–25
63 (cu hub)
USB 2.0
480
60
5
2,5/5
127 (cu hub)
UltraSCSI 320
2.560
320
12
-
16
Fiber Channel cablu cupru
4.000
400
12
-
126 (16.777.216 cu switch-uri)
Fiber Channel fibră optică
10.520
2.000
2–50.000
-
126 (16.777.216 cu switch-uri)
Infiniband 12 Quad-rate
120.000
12.000
5
-
1 (punct-la-punct)
5. NIVELUL MICROPROGRAMAT
Sistemele de calcul sunt implementate folosind diferite concepte care le apropie de gândirea umană. Se disting astfel mai multe niveluri de programare ale unui calculator. În acest capitol se va studia nivelul microprogramat. FuncĠionarea microprocesorului úi a oricărui bloc dintr-un sistem cu microprocesor necesită date úi semnale de comandăúi control. Succesiunea dorită a evenimentelor din sistem (care conduce la executarea unei sarcini utile) se produce prin acĠionarea corectă, secvenĠială, a semnalelor de control, acestea conducând la transferul corect de date, prelucrarea acestora úi luarea de decizii. În general, însă, datorită multitudinii acestor semnale úi a legăturii lor intime cu structura internă a fiecărui bloc nu se lucrează direct cu semnale simple ci cu grupuri ale lor care au un efect mai uúor de sesizat din exterior. Astfel de grupuri de semnale sunt numite instrucĠiuni úi ele sunt caracteristice logicii programate. Din cele menĠionate rezultă că executarea unei instrucĠiuni presupune efectuarea într-o anumită ordine a unor paúi elementari care se numesc microoperaĠii úi microinstrucĠiuni. Primele procesoare executau codul direct la nivel hardware. ExecuĠia era destul de rapidă (se accesa direct nivelul 0 din nivelul 2), dar conceptul era lipsit de flexibilitate. Aceasta se datora imposibilităĠii adăugării de instrucĠiuni noi.
Fig. 5.1. Structură parĠială a nivelurilor unui calculator.
223
Practic s-a constatat că pentru execuĠia oricărei instrucĠiuni din setul microprocesorului se execută o succesiune bine definită de paúi. Microprogramarea este un concept care formează de fapt interfaĠa între limbajul de asamblare úi structurile fizice ale procesorului. MicroinstrucĠiunile sunt practic semnalele de comandă adresate de unitatea de control către unitatea de execuĠie a procesorului. ApariĠia nivelului microprogramat presupune asocierea fiecărei instrucĠiuni cu o succesiune de microinstrucĠiuni.
5.1. Exemplu de maúină microprogramată În figura 5.2 se prezintă structura unei maúini microprogramate.
Fig. 5.2. Structura unei maúini microprogramate de tip A (mA).
224
NotaĠiile folosite în figura 5.2: R1 … R16: 16 registre generale de tip latch, fiecare de 16 biĠi, care au funcĠii diferite, registre inaccesibile utilizatorului; ele sunt utilizate doar de maúina microprogramată. Fiecare registru poate depune date pe magistralele A, B úi poate fi încărcat de pe magistrala C. ALU: circuit logic combinaĠional care realizează patru operaĠii aritmetice úi logice selectate de F0 úi F1. Cele patru operaĠii sunt A+B, AB, A, nonA. La ieúire mai sunt disponibili doi biĠi notaĠi cu N úi Z. SemnificaĠia lor este: rezultatul din ALU este negativ N = 1; rezultatul ALU este zero Z = 1. registrul shift: este un circuit de deplasare a cărui intrare este legată la ieúirea ALU úi care poate executa următoarele operaĠii: deplasare cu un bit la stânga/dreapta; livrare directă la ieúire a cuvântului aflat la intrare (stare inactivă). Aceste operaĠii sunt selectate de liniile de comandă S0 úi S1. magistralele A úi B sunt legate la ALU prin registrele tampon de tip latch RTA úi RTB (ALU este un circuit logic combinaĠional, iar intrările lui trebuie Ġinute constante pe timpul unei operaĠii). Registrele tampon sunt încărcate prin liniile de comandă L0 úi L1. ObservaĠii: Registrele tampon permit modificarea magistralelor A úi B în timpul unei operaĠii executate de către ALU. Rezultă că pot avea loc operaĠii între registre de tipul R1 R1 + R2, R2 R1 + R2 etc.; Dacă registrele R1 … R16 ar fi de tip flip-flop, atunci nu ar mai fi nevoie de registrele tampon. RDA, RAD: registre care realizează conexiunea cu magistrala de date, respectiv de adrese. RAD este încărcat cu date de pe magistrala B în acelaúi timp cu efectuarea unei operaĠii de către ALU. RDA este încărcat de pe magistrala C atunci când se activează semnalul M1. Semnalele M2 úi M3 comandă poziĠionarea conĠinutului lui RDA pe magistrala de date (scriere în memorie) úi respectiv înregistrarea datelor de pe magistrală în RDA (citire din memorie). Datele încărcate în RDA pot fi utilizate la o intrare a unităĠii ALU prin semnalul de comandă A0 care se aplică multiplexorului.
5.2.1. Structura unei microinstrucĠiuni
1
4
4
4
8 ADDR*
1
A
RAD
1
B
1
C
1
VALC
2
RD
2
WR
2
RDA
1
DEPL
O microinstrucĠiune cuprinde mai multe păUĠi, numite câmpuri, fiecare câmp definind o funcĠie proprie. Reprezentarea din figura 5.3 arată structura unei microinstrucĠiuni.
ALU
În exemplul prezentat anterior, microinstrucĠiunile reprezintă setul de semnale care sunt primite de componentele unităĠii de execuĠie a maúinii microprogramate. În total sunt 61 de linii de comandă, dispuse în nouă grupe funcĠionale, care execută comanda úi controlul căii de date a maúinii. Aceste grupe sunt: 16 semnale pentru transferul de date din registrele R1 … R16 pe magistrala A, la un moment dat putând fi selectat un singur registru (în figura 5.2 nu au fost reprezentate aceste semnale); 16 semnale pentru transferul de date din registrele R1 … R16 pe magistrala B cu menĠiunile anterioare; 16 semnale pentru transferul de date de pe magistrala C într-unul din registrele R1 … R16 (nici aceste semnale nu au fost reprezentate pe schemă din motive de spaĠiu); două semnale de comandă a încărcării registrelor tampon RTA úi RTB, notate în figură cu L0 úi L1; două semnale care selectează operaĠiile executate de ALU (F0 úi F1); două semnale de comandă a registrului shift (S0 úi S1); patru semnale de comandă a registrelor RDA úi RAD (M0, M1, M2 úi M3); două semnale care indică operaĠiile de scriere/citire în/din memoria principală; un semnal de comandă pentru AMUX (A0). Maúina funcĠionează secvenĠial, fiind necesar un registru de comandă de 61 biĠi. Acest număr al semnalelor de comandă este prea mare. S-a încercat reducerea lui prin selectarea registrelor R1 … R16 cu ajutorul unei linii de comandă de 4 biĠi pentru fiecare magistrală. Semnalele se obĠin apoi prin trei decodoare 4/16 care generează cele trei grupe de 16 semnale. În felul acesta se economisesc 3 12 = 36 biĠi. Procedând astfel, la fiecare pas trebuie încărcat un registru. SituaĠia nu este mereu avantajoasă. De exemplu, este posibilă executarea unei operaĠii ALU doar pentru setarea semnalelor N úi Z. De aceea se utilizează un semnal suplimentar de validare a încărcării, VALC. Acesta ia valoarea 1 când validează încărcarea úi 0 când o interzice. VALC este legat de intrarea de CS (Chip Select) a decodorului. Semnalele M2 úi M3 pot informa în exterior tipul operaĠiei (citire/scriere din/în memorie). În acest fel se economisesc încă 2 biĠi.
Semnalele L0 úi L1 sunt identice úi sunt generate de ceasul intern al sistemului. În fiecare perioadă, L0 úi L1 permit stocarea datelor pe magistralele A úi B. În concluzie, nu este necesară specificarea lor în instrucĠiuni. Rămân 61 – 36 – 2 – 2 + 1 = 22 biĠi suficienĠi pentru comanda Făii de date a micromaúinii. În structura microinstrucĠiunii vor intra astfel 22 biĠi de comandă plus alĠi biĠi descriúi în continuare.
AMUX
5.2. MicroinstrucĠiunile
226
COND*
225
Fig. 5.3. Structura unei microinstrucĠiuni (câmpuri úi număr de biĠi alocat); * neprezentat.
Rezultă un total de 22 + 2 + 8 = 32 biĠi. SemnificaĠia acestor biĠi este: AMUX (1 bit) 0 – intrare din RTA; 1 – intrare din RDA. ALU (2 biĠi) 0 – A+B; 1 – AB; 2 – A; 3 – nonA. DEPL (2 biĠi) 0 – făUă deplasare; 1 – deplasare la dreapta; 2 – deplasare la stânga; 3 – neutilizat. RDA (1 bit) indică încărcarea RDA cu cuvântul de pe magistrala C; RAD (1 bit) indică încărcarea RAD cu cuvântul din RTB; RD (1 bit) indică citirea din memoria centrală; WR (1 bit) indică scrierea în memoria centrală; VALC (1bit) autorizează încărcarea registrelor generale: 0 – interdicĠie; 1 – validare. încărcare/depunere de pe magistrala C/pe magistrala A sau B (semnal pe 3 4 biĠi).
227
5.2.2. ExecuĠia unei microinstrucĠiuni O instrucĠiune cuprinde patru subcicluri de execuĠie (este folosit un ceas cu patru faze): 1. încărcarea microinstrucĠiunii care trebuie executată într-un registru particular denumit registru microinstrucĠiune RMI; 2. transferul conĠinutului registrelor selecĠionate pe magistralele A, B úi încărcarea datelor în RTA úi RTB; 3. realizarea operaĠiilor ALU úi ale registrului shift; dacă este necesar, RAD este încărcat de la ieúirea registrului tampon B; 4. încărcarea datelor de la ieúirea registrului shift în registrul selecĠionat úi/sau în registrul RDA. Până acum s-a prezentat calea de date a maúinii. În cele ce urmează se va analiza blocul care generează semnalele de comandă (microinstrucĠiunile) pentru calea de date. Schema ceasului úi fazele semnalului de ceas sunt reprezentate în figura 5.4.
228
5.2.3. Unitatea de comandă Schema bloc a sistemului microprogramat este prezentată în figura 5.5. Unitatea de comandă preia codul în limbaj de asamblare úi comandă calea de date prezentată anterior. Componentele sale sunt descrise în continuare. Memoria de microprogram se mai numeúte memorie de comandă (există însă diferenĠe între memoria de program úi cea de microprogram). Memoria de microprogram este o memorie foarte rapidă care conĠine instrucĠiuni microprogramate. Pentru majoritatea micromaúinilor, memoria de microprogram este de tip read-only; există úi posibilitatea utilizării memoriei de tip read-write, ceea ce conferă posibilitatea modificării dinamice a programului. Adresă microprogram
SecvenĠiator de microprogram
Memorie de microprogram
Control adresă următoare Stare
Control Calea de date
Fig. 5.5. Schema bloc a unităĠii de comandă.
Fig. 5.4. Fazele semnalului de ceas.
În exemplul anterior. microinstrucĠiunile sunt de 32 de biĠi. Există 256 de microinstrucĠiuni, ceea ce necesită 8 biĠi de adresă (aúa se explică câmpul ADDR de 8 biĠi în structura câmpurilor microinstrucĠiunii). Cele 256 de microinstrucĠiuni cer o memorie de 8192 biĠi (256 instrucĠiuni 32 biĠi). Fiecare microinstrucĠiune execută două funcĠii: controlează funcĠionarea căii de date; generează adresa pentru microinstrucĠiunea următoare. Aúa cum s-a arătat, formatul microinstrucĠiunilor conĠine câmpuri de control pentru fiecare resursă hardware a maúinii. SecvenĠiatorul de microprogram primeúte de pe calea de date starea curentă a acesteia prin biĠii de stare (starea este dată de semnalele N úi Z). SecvenĠiatorul de microprogram are rolul de a adresa următoarea
229
microinstrucĠiune, în funcĠie de starea căii de date úi de biĠii de control ai adresei următoare, care sunt daĠi la rândul lor de câmpurile COND úi ADDR din microinstrucĠiune. Prin linia de adresă a microprogramului se selectează instrucĠiunea care este depusă pe intrarea de control a căii de date. Astfel, semnificaĠia câmpului COND este următoarea: COND (2 biĠi) 0 – se execută următoarea microinstrucĠiune; 1 – salt la adresa specificată de ADDR dacă N = 1; 2 – salt la adresa specificată de ADDR dacă Z = 1; 3 – salt necondiĠionat la ADDR. Schema generală a micromaúinii este dată în figura 5.6. NotaĠiile folosite sunt următoarele: MCO = microcontor (registru de adresare a memoriei de microprogram); INCR = circuit de incrementare (INCR = MCO + 1); MMUX = multiplexor care lucrează în concordanĠă cu decizia provenită de la microsecvenĠiator; el va alege pentru microinstrucĠiunea următoare fie adresa MCO + 1, fie adresa specificată în ADDR.
230
Încărcarea datelor de pe magistrala C într-unul din cele 16 registre generale nu este posibilă decât atunci când se îndeplinesc următoarele condiĠii: 1. VALC = 1; 2. subciclul curent de ceas este 4 (ĭ4 activ); 3. registrul este indicat de câmpul C al microinstrucĠiunii. 5.2.4. Modul de lucru al microsecvenĠiatorului EcuaĠia logică a microsecvenĠiatorului este: O(s) = DN + SZ + SD, unde: Oȝs) = ieúirea microsecvenĠiatorului; D = bitul dreapta al câmpului COND; S = bitul stânga al câmpului COND; N, Z = semnale de stare generate de ALU (negativ úi zero). Când Oȝs) = 1 are loc schimbarea adresei microinstrucĠiunii următoare cu adresa dată de câmpul ADDR din instrucĠiunea curentă.
5.3. Microprogramarea orizontalăúi verticală
Fig. 5.6. Schema bloc a unei micromaúini (schema modificată pentru mA).
DiferenĠa majoră între aceste două tehnici de microprogramare este dată de modul de codare a microinstrucĠiunii. Se presupune că pentru comanda maúinii mA sunt necesare n semnale. Când microinstrucĠiunile conĠin n biĠi, câte un bit pentru fiecare microcomandă, ele sunt denumite microinstrucĠiuni în format orizontal. Exemplu. În cazul micromaúinii mA s-ar fi putut renunĠa la utilizarea decodoarelor pentru magistralele A, B sau C. De asemenea, ALU ar fi putut să nu conĠină un decodor intern pentru cele patru operaĠii executate. În acest caz, pentru fiecare încărcare de pe/pe magistrală ar fi fost nevoie de 16 biĠi în loc de 4, iar la ALU ar fi fost nevoie de 4 biĠi în loc de 2 (vezi câmpul ALU în formatul de microinstrucĠiune prezentat). Deci la una din extremităĠile formatului microinstrucĠiunilor se află formatul orizontal, în care fiecare bit semnifică o microcomandă. În consecinĠă, microinstrucĠiunea conĠine mulĠi biĠi. La cealaltă extremitate se află formatul vertical, în care microinstrucĠiunile conĠin un număr mic de biĠi ( n), însă câmpurile microinstrucĠiunii sunt puternic codate. Dacă în microprogramarea orizontală
231
un microprogram necesită puĠine instrucĠiuni cu mulĠi biĠi, în programarea verticală acelaúi microprogram necesită multe instrucĠiuni cu puĠini biĠi. În practică se întâlnesc formate mixte, cum este cel prezentat în exemplul micromaúinii mA, situat între cele două extremităĠi. Astfel, la formatul prezentat se întâlnesc câmpuri asociate direct microcomenzilor (de exemplu, RAD, RDA, AMUX, RD, WR), care au un efect imediat asupra circuitelor micromaúinii. Însă se întâlnesc, de asemenea, úi câmpuri de biĠi codate (de exemplu, ALU, A, B, C), care necesită utilizarea unui decodor înainte de aplicarea pe circuitele corespunzătoare. 5.3.1. Micromaúina cu format vertical MicroinstrucĠiunea verticală tipică conĠine un câmp numit codul operaĠiei (care poate fi văzut ca o generalizare a câmpului ALU) úi mai multe câmpuri de operanzi, de exemplu: A, B, C. Pentru a clarifica distincĠia între microprogramul orizontal úi cel vertical, se va revizui micromaúina mA, utilizând de această dată microinstrucĠiuni verticale. Fiecare nouă microinstrucĠiune va cuprinde trei câmpuri de 4 biĠi, deci un total de 12 biĠi faĠă de 32 de biĠi la versiunea precedentă. Primul câmp este codul operaĠiei (COP) care arată ce trebuie să facă microinstrucĠiunea. Celelalte câmpuri sunt registrele R1 úi R2. MicroinstrucĠiunile de salt regrupează registrele R1úi R2 pentru a forma un câmp de 8 biĠi (fie acesta R). În tabelul 5.1 este prezentat codul operaĠiei (fiecare tip de microinstrucĠiune). Se observă că fiecare microinstrucĠiune nu realizează decât o singură operaĠie úi că cei 12 biĠi ai microinstrucĠiunii sunt suficienĠi pentru a specifica o operaĠie la un moment dat. Corespunzător, maúina se modificăúi rezultă micromaúina mB, în conformitate cu schema din figura 5.7. Se constată că la cele două scheme căile de date sunt identice. În schimb, la micromaúina cu format vertical nu sunt utilizate decât două decodoare 4 la 16 pentru R1 úi R2 în locul celor trei decodoare A, B, C din schema anterioară. De asemenea, în schemă apar trei elemente noi: blocul ùI, blocul NZ úi decodorul COP. Blocul ùI conĠine 16 porĠi ùI care permit câmpului R1, după traversarea decodorului R1, să comande golirea unui registru pe magistrala A úi încărcarea sa pe magistrala C. Desigur că aceste operaĠii nu pot fi simultane. De aici necesitatea porĠilor ùI care determină în timpul subciclului 4 încărcarea unui registru când această operaĠie este validată de decodorul COP.
232 Tabelul 5.1 Codul operaĠiei pentru microinstrucĠiunile în format vertical Binar
Simbol
0000
ADD
Descriere adunare
OperaĠie R1 = R1 + R2
0001
AND
ùI logic
R1 = R1 R2
0010
MOVE
deplasare
R1 = R2
0011
COMPL
complement
R1 = inv(R2)
0100
SHIFTL
deplasare stânga
R1 = shiftleft(R2)
0101
SHIFTR
deplasare dreapta
R1 = shiftright(R2)
0110
GETRDA
încărcare R1 cu RDA
R1 = RDA
0111
TEST
test registru
if R2 < 0 then N = true if R2 = 0 then Z = true
1000
BEGRD
început RD
RAD = R1; RD
1001
BEGWR
început WR
RAD = R1; RDA = r2; WR
1010
CONRD
continuare RD
RD
1011
CONWR
continuare WR
WR
1100
LIBER
–
–
1101
NJUMP
salt dacă N = 1
if N then go to R
1110
ZJUMP
salt dacă Z = 1
if Z then go to R
1111
UJUMP
salt necondiĠionat
go to R
ObservaĠie: R = l6R1 + R2.
Blocul NZ este un registru de 2 biĠi care înregistrează semnalele N úi Z la ieúirea ALU, când această înregistrare este ordonată de decodor. Acest artificiu este utilizat deoarece pe micromaúina B nu este realizată decât o singură operaĠie în timpul unei microinstrucĠiuni. Astfel, testarea úi utilizarea biĠilor N úi Z se face doar în microinstrucĠiunea următoare, deci este necesară o păstrare a lor în registru. Decodorul COP reprezintă elementul central al micromaúinii. Acesta analizează codul operaĠiei úi precizează acĠiunile care se vor întreprinde. Decodorul COP distribuie 13 microcomenzi distincte către blocul ùI, microsecvenĠiator, registrul NZ, AMUX, ALU, circuitul shift, RAD úi RDA. Pentru fiecare din cele 16 coduri de operaĠii posibile trebuie determinat care dintre cele 13 microcomenzi sunt active (1) úi care sunt în repaus (0).
233
234
AMUX = A’BCD’ ùI = A’B’C’D’ + A’B’C’D + A’B’CD’ + A’B’CD + A’BC’D’ + A’BC’D + + A’BCD’ = A’B’ + A’C’ + A’D’ RAD = AB’C’D’ + AB’C’D = AB’C’ RDA = AB’C’D RD = AB’C’D’ + AB’CD’ = AB’D’ WR = AB’C’D + AB’CD = AB’D MSA = ABCD’ + ABCD = ABC MSB = ABC’D + ABCD = ABD Tabelul 5.2
Fig. 5.7. Structura micromaúinii cu format vertical (mB).
Rezultă astfel un tablou 16 13, prezentat în tabelul 5.2. Dacă se numerotează cei patru biĠi care codează microinstrucĠiunea cu A, B, Cúi D, atunci se pot obĠine, după minimizare, următoarele funcĠii logice (ideal pentru implementare este un PLA cu 4 intrări úi 13 ieúiri): ALUA = A’B’CD’ + A’B’CD + A’BC’D’+ A’BC’D + A’BCD’ + A’BCD + + AB’C’D’ + AB’C’D +ABC’D + ABCD’ + ABCD = = C + AB’ + A’B + AD ALUB = A’B’C’D + A’B’CD = A’B’D SHIFTA = A’BC’D’ SHIFT B = A’BC’D NZ = A’B’C’D’ + A’B’C’D + A’B’CD’ + A’B’CD + A’BC’D’ + A’BC’D + + A’BCD’ + A’BCD = A’
+
0
ADD
1
AND
2
MOVE
+
3
COMPL
+
4
SHIFTL
+
5
SHIFTR
+
6
GETRDA
+
+
7
TEST
+
+
8
BEGRD
+
+
9
BEGWR
+
+
10
CONRD
+
11
CONWR
+
12
LIBER
13
NJUMP
+
14
ZJUMP
+
+
15
UJUMP
+
+
+
+ + +
MSB
WR
MSA
RD
RDA
RAD
ùI
AMUX
NZ
SHIFTB
ALUB
SHIFTA
ALUA
instrucĠiuni
comenzi
CorespondenĠa microinstrucĠiuni-microcomenzi la micromaúina cu format vertical
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+ + +
+
+
235
5.3.2. ComparaĠie între cele două microprograme Micromaúina mA are un format mixt, conĠinând atât câmpuri verticale cât úi câmpuri orizontale, pe când micromaúina mB are un format vertical. Exemplu. În cazul în care microprogramul ar fi utilizat pentru interpretarea unui număr de 23 de tipuri de macroinstrucĠiuni, atunci microprogramul micromaúinii mA ar trebui să aibă 79 microinstrucĠiuni a câte 32 biĠi, rezultând 2528 de biĠi în memoria de microprogram. În schimb, microprogramul micromaúinii mB conĠine 160 microinstrucĠiuni a 12 biĠi, rezultând în total 1920 de biĠi. Se obĠine astfel un câútig de 24% în capacitate de memorie, deci o diminuare a costului de implementare pentru al doilea caz (micromaúina mB cu structură verticală). Inconvenientul major al formatului vertical este dat de numărul important de microinstrucĠiuni care trebuie executate pentru interpretarea unei macroinstrucĠiuni. Aceasta se traduce într-o diminuare netă a vitezei micromaúinii. Din acest motiv, calculatoarele mari úi rapide utilizează microprogramarea orizontală. În schimb, maúinile mai modeste utilizează microprogramarea verticală pentru simplitate úi preĠ de cost mai mic. Într-adevăr, microprogramarea verticală permite scrierea uúoară a microprogramului, deoarece fiecare linie de microprogram reprezintă o singură operaĠie. Microprogramul este mult mai lizibil decât la microprogramarea orizontală, unde o microinstrucĠiune reprezintă operaĠii multiple. În ultimul timp, când competiĠia dintre arhitecturile RISC úi CISC a fost eliminată, se poate spune acelaúi lucru úi despre formatele vertical úi orizontal pentru microinstrucĠiuni. 5.3.3. Analiza comparativă a sistemelor microprogramate Microcod vs VLIW (Very Long Instruction Word) úi RISC Procesoarele proiectate propice, microcodate puternic cu instrucĠiuni complexe au luat naútere la începutul anilor 1960 úi au continuat până la mijlocul anilor 1980. La acel punct, filozofia proiectării RISC-ului a început Vă devină mai proeminentă. Aceasta a inclus punctele: Analiză arată că instrucĠiunile complexe sunt folosite rar, întrucât resursele maúinilor necesare lor sunt risipite foarte mult. Programarea s-a îndepărtat foarte mult de nivelul de asamblare, deci nu se mai merită să furnizezi instrucĠiuni complexe din motive de productivitate.
236
Resursele maúinilor necesare pentru instrucĠiunile complexe, rar folosite, sunt utilizate mai bine pentru accelerarea performanĠei instrucĠiunilor simple (folosite în mod obiúnuit). InstrucĠiunile complexe microcodate, care necesită multe úi diverse cicluri ceas, sunt dificil de actualizat pentru creúterea performanĠei. Seturile de instrucĠiuni simple permit execuĠii directe ale hardwareului, evitând penalizarea performanĠei a execuĠiei microcodate. Ar trebui menĠionat că există la fel de bine úi puncte-contor: InstrucĠiunile complexe din implementările dificil microcodate pot Vă nu ia multe extra-resurse ale maúinilor (cu excepĠia spaĠiului microcodului); de exemplu, aceeaúi ALU este utilizată des pentru a calcula adrese efective precum úi să calculeze rezultatele operanzilor actuali. InstrucĠiunile non-RISC, care implică operanzi direcĠi de memorie, sunt folosite frecvent de către compilatorii moderni, chiar úi stivele de operaĠii aritmetice (ex. rezultatul memoriei) sunt de obicei întrebuinĠate. Deúi asemenea operaĠii de memorie, de multe ori cu decodări cu lungimi variate, sunt mai greu de actualizat, este pe deplin fezabil, exemplificându-se în mod limpede prin Intel 486, Cyrix 6x86 etc. InstrucĠiunile non-RISC îndeplinesc, în mod firesc, mai multă muncă pe instrucĠiune (în medie) úi de asemenea de obicei sunt extrem de codate; aúa că permit dimensiuni exterioare mai mici ale aceluiaúi program, iar astfel o utilizare mai bună a memoriilor cache limitate. Implementările CISC (Complex Instruction Set Computer) moderne – cel mai remarcabil x86 – îndeplinesc cele mai multe instrucĠiuni úi toate modurile de adresare “în hardware”; microcodul este încă folosit, pentru câteva instrucĠiuni extrem de complexe sau foarte speciale (precum CPUID – CPU Identification) precum úi pentru housekeeping intern.
Multe procesoare RISC úi VLIW sunt proiectate să execute fiecare instrucĠiune (cât timp este în cache) într-un singur ciclu. Acesta este foarte similar modului în care CPU-urile cu microcod execută o microinstrucĠiune pe ciclu. Procesoarele VLIW au instrucĠiuni care se comportă similar microcodului orizontal, cu toate că nu au un asemenea control microgranular asupra hardware-ului precum asigură microcodul. InstrucĠiunile RISC sunt uneori similare limitatului microcod vertical.
237
mw = 128 100 biĠi úi o memorie de comandă de n log2m = 4096 7 biĠi. Câútigul faĠă de microprogramarea convenĠională este de:
5.4. Nanoprogramarea Până acum, discutând despre microprograme, s-a presupus existenĠa unei memorii principale (care conĠine instrucĠiunile nivelului 2) úi a unei memorii de comandă (care conĠine microprogramul). O a treia memorie, denumită nanomemoria, permite în unele cazuri o asociere optimă între microprogramul orizontal úi cel vertical Astfel, nanoprogramarea corespunde unei optimizări statistice a microprogramului, în cazul în care un set de instrucĠiuni este mai des solicitat. În figura 5.8 este reprezentat (prin comparaĠie cu microprogramarea) conceptul de nanoprogramare. În cazul a), microprogramul conĠine n microinstrucĠiuni a câte w biĠi, rezultând capacitatea unei memorii de comandă de nw biĠi. Se presupune că o analiză detaliată a microprogramului arată că dintre cele 2w posibilităĠi de reprezentare sunt utilizate doar m << n instrucĠiuni. În cazul b) s-a construit o nanomemorie de m cuvinte a câte w biĠi care conĠine cele m microinstrucĠiuni mai des utilizate. Atunci fiecare microinstrucĠiune a microprogramului original poate fi înlocuită în memoria de comandă prin adresa cuvântului din nanomemorie care conĠine nanoinstrucĠiunea corespunzătoare, rezultând lăĠimea cuvântului în memoria de comandă de log2m biĠi. w
n microprogram
log2m
microprogram
238
w
nanoprogram
m
(4096 100) – (4096 7) – (128 100) = 368 128 biĠi. Economia de memorie este realizată în contextul unei reduceri sensibile de viteză. Datorită faptului că un ciclu de extragere a microinstrucĠiunii necesită două accese la memorie (memoria de comandăúi nanomemorie), maúina nanoprogramată este mai lentă decât maúina microprogramată. Din acest considerent, în ultimul timp s-a folosit din ce în ce mai rar conceptul de nanoprogramare.
5.5. Exemplu de sistem microprogramat AMD 5.5.1. UnităĠi de execuĠie integrate Unitatile de executie se prezinta sub forma unor circuite integrate pe scara medie/larga. De regula ele sunt structurate transe de biti astfel incat, prin concatenare si prin utilizarea unor circuite aditionale, se pot construi sisteme de prelucrare pentru date organizate pe 4, 8, 16, 24, 32, 48 sau 64 de biti. UnităĠile de execuĠie integrate s-au comercializat în asociaĠie cu unităĠile de comandă corespunzătoare úi cu o serie de circuite adiĠionale, formând ceea ce se cheamă microprocesoare pe tranúe de biĠi, microprocesoare bit-slice, microprocesoare multi-chip etc. Printre cele mai răspândite familii de microprocesoare bit-slice s-au aflat úi cele produse de compania Advanced Micro Devices, sub numele de AMD 2900. Unitatea de execuĠie AMD 2901 este organizată pe tranúe de 4 biĠi/circuit úi este prevăzută cu elementele necesare cuplării în cascadă. Semnalele de comandă se aplică sub forma unor vectori binari la terminalele circuitului, fiind, de regulă, preluate sub controlul unui circuit micro-secvenĠiator integrat (AMD 2909, 2911) de la o memorie cu conĠinut permanent. In cele ce urmeaza va fi prezentata unitatea de executie AMD 2901 sub aspect structural úi functional. 5.5.2. Unitatea de execuĠie AMD 2901
a)
b)
Fig. 5.8. a) Microprogramare convenĠională; b) microprogramare úi nanoprogramare.
Exemplu. Fie un microprogram de nw = 4096 100 biĠi cu m = 128 de instrucĠiuni diferite folosite mai frecvent. Rezultă o nanomemorie având
Unitatea de executie AMD 2901 este organizata pe transe de 4 biti/circuit si este prevazuta cu elementele necesare cuplarii in cascada. Semnalele de comanda se aplica sub forma unor vectori binari la terminalele circuitului, fiind, de regula, preluate sub controlul unui circuit microsecventiator integrat (AMD 2909, 2911) de la o memorie cu continut permanent.
239
240
Aceasta solutie se foloseste in cazul unitatilor de comanda microprogramate. Uneori, pentru a mari viteza de operare, in locul unitatii de comanda microprogramate se utilizeaza automate conventionale cu porti, bistabile si registre. Unitatea de executie AMD 2901 dispune de urmatoarele resurse: - un ansamblu de 16 registre generale de cite 4 biti, organizate sub forma unei memorii RAM biport, cu doua intrari de adrese, o intrare de date si doua iesiri de date; - o unitate aritmetica-logica, cu transport anticipat, capabila sa efectueze 3 operatii aritmetice binare si 5 operatii logice si sa genereze, atit indicatorii de conditii: depasire, zero, semn, transport (Cn+4), cat si conditiile de propagare (P) si generare(G) ale transportului, la nivelul intregului circuit; - un selector de date pentru cele doua intrari ale unitatii aritmeticelogice, care pot reprezenta combinatii intre iesirile memoriei biport (A,B), o intrare externa de date (D), constanta "zero" si iesirea unui registru su plimentar-extensie (Q); - un selector de iesire din circuit, care furnizeaza prin intermediul unor tampoane TS fie datele de la iesirea A, a memoriei biport, fie datele de la iesirea UAL; - un registru auxiliar-extensie (Q), care poate fi incarcat fie cu datele de la iesirea UAL, fie cu propriul sau continut deplasat stanga/dreapta prin intermediul unei retele logice de deplasare-multiplexor QSHIFT; - o retea de deplasare-multiplexor RAMSHIFT, plasata pe intrarea B a memoriei RAM biport. Indicatorii de conditii trebuie stocati intr-un registru dupa fiecare operatie efectuata de UAL. Intrarile R si S ale UAL sunt preluate de la iesirile unui circuit selector (Selector sursa UAL), care sub controlul semnalelor I0:2, din intrarile D (Date externe), A, B, 0 si Q, poate furniza combinatiile AB;AD; AQ; A0; DQ; D0; Q0; BD; BQ; B0. In tabelul 5.3 se prezinta selectia surselor de operanzi pentru UAL. Tabelul 5.3. Selectia surselor de operanzi pentru UAL Fig. 5.9. Schema bloc a circuitului AMD 2901.
Mnemonica AQ AB ZQ ZB ZA DA DQ DZ
Microcod I2 I1 I0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
Codul octal 0 1 2 3 4 5 6 7
Sursa R S A Q A B 0 Q 0 B 0 A D A D Q D Z
Figura 5.9 prezinta schema bloc a circuitului AMD 2901. Unitatea aritmetica-logica poate efectua sub controlul semnalelor I3:5 trei operatii aritmetice binare si cinci operatii logice asupra operanzilor aplicati la intrarile R si S.
Intrarea directa D este folosita pentru a introduce date in circuit, in RAM si in registrul Q. Registrul Q este utilizatin operatiilede inmultire si impartire, ca extensie sau ca acumulator/registru in unele aplicatii. 9 biti
I8:6 Destinatie UAL 8 7 6
I5:3 Functie UAL 5 4 3
I2:0 Sursa UAL 2 1 0
Fig. 5.10. Structura vectorului de comanda (Microcodul I8:0).
241
Campul "Destinatie UAL" din vectorul de comanda are o semnificatie complexa prin faptul ca specifica: - operarea RAM (deplasare/incarcare/inactiv); - operarea registrului Q (deplasare/incarcare/inactiv); - conexiunile la RAMSHIFT (RAM0 si RAM3); - conexiunile la QSHIFT (Q0 si Q3); - iesirea Y. Cuvantul (microinstructiunea) de comanda al unitatii de executie va avea structura din figura 5.11. 23 M U X 1
22 21 20 I8 I7 I6 Selectie destinatie
19 M U X 2
18 17 16 I2 I1 I0 Selectie sursa
15 Cn
14 13 12 I5 I4 I3
11 10 9 8 A3A2A1A0
7654 B3B2B1B0
3210 C3C2C1C0
Operatie UAL
Adresa “A”
Adresa “B”
Adresa “C”
242
Un cuvant al memoriei de control reprezinta un vector de comanda sau o microinstructiune. Secventiatorul de microprogram, structurat pe transe de cate 4 biti, este destinat generarii adreselor de microinstructiuni si asigurarii inlantuirii acestora. Secventiatorul, prezentat mai jos, are ca resurse hardware: - Contorul de MicroProgram (CMP); - Registrul de Ramificare (RR); - Indicatorul de Stiva (IS); - STiVa (STV) cu capacitate de 4 cuvinte x 4 biti; - INCrementatorul (INC); - MultipleXorul (MUX) 4 x (4 : 1);
Fig. 5.11. Cuvântul de comandă al unităĠii de execuĠie.
Se poate observa ca microinstructiunea care controleaza unitatea de executie poseda 24 de biti. Bitii 0,..,3 au aparut ca urmare a inglobarii datei in microinstructiune (microinstructiune cu operand imediat). Campul D se va extinde in incrementi de 4 biti odata cu extinderea lungimii cuvantului prelucrat de catre unitatea de executie. Campul Cn este asociat cu transportul in rangul cel mai putin semnificativ al unitatii de executie, fiind la latitudinea celui care scrie microprogramul. 5.5.3. Unitatea de comanda integrata. Secventiatorul de microprogram AMD 2909 Secventiatorul de microprogram AMD 2909 face parte din familia de circuite AMD2900 si constituie elementul de baza in jurul caruia este organmizata unitatea de comanda microprogramata. Dupa cum s-a aratat in paragraful anterior, atat unitatea de executie AMD 2901, cat si circuitele asociate acesteia sunt controlate cu ajutorul unui vector de comanda constituit din campuri de biti, cu functii bie precizate. Un asemenea vector controleaza operatii aritmetice elementare, care se pot efectua pe durata unei perioade de ceas. Vectorul semnalelor de comanda poate fi generat cu ajutorul unui circuit secvential, in cazul unitatilor de comanda conventionale, sau extras dintr-o memorie cu continut permanent, in cazul unitatilor de comanda microprogramate. Operatiile cu caracter complex, printre care se numara si instructiunile calculatoarelor conventionale, se implementeaza sub forma unor secvente de vectori de comanda. In sistemele microprogramate aceste secvente sunt stocate intr-o memorie de control sau memorie de microprograme.
Fig. 5.12. Unitatea de comanda (schema bloc)
Schema bloc a unitatii de comanda va contine, pe langa microsecventiator, si elementele necesare realizarii unei unitati de comanda: - Memoria de Microprogram (MM); - Registrul MicroInstrucriunii (RMI); - un Comutator de Adrese (CA); - o memorie de tip PROM.
243
Secventierea microinstructiunilor este realizata prin controlul circuitului 2909 cu ajutorul semnalelor preluate din campurile de control ale microinstructiunii si de la conditiile externe.
6. NIVELUL SISTEMULUI DE OPERARE
Acest nivel are un caracter hibrid, cea mai mare parte a instrucĠiunilor care definesc limbajul fiind de tip maúină. Existăúi instrucĠiuni specifice, care necesită interpretare pentru a fi trecute pe nivelul 2. Nivelul sistemului de exploatare are sarcini particulare în ceea ce priveúte gestionarea memoriei (lucrul cu memoria virtuală prin conceptele de paginare úi segmentare) úi organizarea execuĠiei în paralel a mai multor programe. Atât nivelul microprogramat cât úi nivelul sistemului de operare (exploatare) sunt necesare pentru interpretarea nivelurilor inferioare. Acestea sunt scrise de specialiúti úi sunt orientate către numeric. Începând cu nivelul imediat superior (limbajul de asamblare) apare orientarea către simboluri, cuvinte, toate acestea având o anumită sintaxă.
6.1. Conceptul de paginare
Fig. 5.13. Schema bloc AMD 2909.
Se poate observa, in schema bloc din figura 5.13, faptul ca intrarea R a microsecventiatorului este preluata direct de la iesirea memoriei de comanda, fara a mai fi stocat in prealabil in registrul microinstructiunii RMI.
Paginarea este procedeul de realizare în memorie a unor blocuri fixe numite pagini, care pot fi utilizate în mecanismul interschimbării proceselor (transferul blocurilor între memoria internăúi cea externă). Tehnica paginării este larg folosită úi poate fi independentă de gestionarea memoriei. Există procesoare care creează pagini în memoria fizică, sau, ca în cazul familiei Intel, în memoria virtuală. Ideea este de a face distincĠia între capacitatea de adresare fizică a sistemului care defineúte un spaĠiu de memorie (denumit memorie virtuală) úi capacitatea de memorie instalată în sistem (denumită memorie fizică sau reală). Exemplu. Fie un sistem cu 16 linii (64 KB) úi o memorie instalată de 4 linii (fig. 6.1). În prezent, denumirea de memorie virtuală se foloseúte cu două accepĠiuni: a) spaĠiu virtual care poate fi accesat (iniĠial); b) zonă de memorie plasată nu în memoria principală, ci pe un dispozitiv de memorare secundar sau extern, cel mai adesea pe hard disk. O singură pagină de 4 KB se poate afla la un moment dat în memoria principală (MP) sau fizică. Dacă programul conĠine mai multe pagini, restul paginilor se află undeva în memoria secundară (pe floppy disk sau pe hard disk).
245
Când programul trebuie să execute o instrucĠiune din pagina următoare, sistemul de gestiune al memoriei virtuale (care face parte din sistemul de operare) execută următoarele operaĠii: 1. 2. 3. 4. 5.
salvează conĠinutul memoriei periferice în memoria secundară; localizează pagina respectivă în memoria secundară; încarcă această pagină în MP; asociază adreselor absolute adresa de memorie fizică de la 0 la 4095; continuă execuĠia programului. spaĠiul virtual
0
o pagină de 4 KB
246 Tabelul 6.1 ComparaĠie între capacităĠile de adresare a memoriei fizice úi a memoriei virtuale Procesor
Memoria maximă fizic adresabilă
8086
1 MB (20 linii)
Memoria virtuală maximă –
80286
16 MB (24 linii)
1 GB
80386
4 GB (32 linii)
64 TB
80486
4 GB (32 linii)
64 TB
Pentium
4 GB (32 linii)
64 TB
0 Memoria reală care păstrează păUĠi din memoria virtuală
4096
0
spaĠiul fizic
8192 12287
Memoria virtuală
4095 65536
15 Fig. 6.1. Exemplu de paginare.
Program care utilizează memoria virtuală
ObservaĠie. Spre deosebire de procesul de segmentare, paginarea este transparentă programatorului, fiind realizată de sistemul de operare. Memorie fizicăúi memorie virtuală (fig. 6.2). AccepĠiunile termenului de memorie fizică sunt următoarele: 1. linii fizice de adresare pe care le are procesorul în afară; 2. spaĠiu de memorie fizică instalată (existentă) în sistemul de calcul. AccepĠiunile termenului de memorie virtuală sunt următoarele: 1. prima definiĠie de la memoria fizică; 2. spaĠiu de memorie pe care îl creează sistemul de operare úi care conĠine un model al memoriei úi al adreselor de memorie pe care le are programul la dispoziĠie (poate fi mai mare decât 1); 3. suportul fizic, de obicei hard disk-ul, pe care sistemul de operare salvează zone din memoria totală disponibilă programului pentru a asigura spaĠii libere în zona de memorie fizică, destinate zonelor de cod sau de date cu care programul lucrează la momentul respectiv.
Disc care stochează SăUĠi din memoria virtuală Fig. 6.2. Legătura între memoria fizicăúi memoria virtuală.
6.1.1 Realizarea unei paginări simple În mod normal, în memoria fizică instalată se pot afla mai multe pagini active (fig. 6.3.) Dimensiunea paginii cu care operează procesorul Intel, echivalentă de fapt cu dimensiunea blocurilor de memorie cu care se lucrează, este de obicei de 4 KB. Se presupune că există o capacitate de adresare fizică de 64 KB (adică 16 linii de adresă). Se împarte acest spaĠiu în pagini de câte 4 KB (blocuri), rezultând astfel 16 pagini. Se mai presupune că memoria fizică instalată este de 32 KB.
247 memoria fizic adresabilă 64 KB (16 linii)
memoria fizic instalată 32 KB
0
0
pagina 0 pagina 1
4096 8192
pagina 0 pagina 1
4096
4 KB
8192
pagina 5 pagina 7
28672 32678 61440
4 KB
pagina 15
65536
Fig. 6.3. Exemplu de paginare simplă.
Adresa fizică este pe 16 biĠi úi dacă se urmăreúte folosirea memoriei paginate se poate considera că cei mai semnificativi 4 biĠi reprezintă numărul paginii, iar cei mai puĠin semnificativi 12 biĠi reprezintă deplasamentul în cadrul paginii. Pentru a realiza gestiunea memoriei fizice instalate se va folosi un tabel de pagini cu 16 intrări a câte 4 biĠi fiecare (fig. 6.4.). Din cei 4 biĠi, un bit va indica dacă pagina fizică adresabilă se află sau nu în memoria principală, restul de 3 biĠi (acest număr este dat de fapt de numărul de biĠi cu care poate fi codificat numărul de pagini aflate în memoria instalată) indică pagina din memoria instalată în care se află pagina din memoria fizică adresabilă la care se face referire. memorie fizic adresabilă
deplasament 0011
0000
4
0001
0110
12
0 1
1
1
1
0
2 3
110
0000 0001 0110
15 Fig. 6.4. Gestiunea memoriei fizice folosind tabelul de pagini.
248
Avantajele paginării pot fi rezumate astfel: Părimea fixă a paginilor intră corect într-un sector al unui disc; un obiect în memorie nu trebuie să fie continuu: pagina poate constitui o nouă „cuantă” de informaĠie; mecanismul paginării úi, implicit, întreaga tehnică de a schimba continuu blocuri fixe de informaĠii între memoria internă úi cea externă nu sunt vizibile utilizatorului. În concluzie, mecanismul paginării are următoarele elemente esenĠiale: se realizează două niveluri de adresare indirectă a memoriei, astfel încât până să se ajungă la pagina propriu-zisă se face o referinĠă într-un director din care se selectează o tabelă a paginilor; toate obiectele din memorie implicate (directorul úi tabelele) sunt tratate la rândul lor ca niúte pagini speciale; deci toate au mărimea fixă de 4 KB. Se păstrează astfel principiul coerenĠei informaĠiei în memorie (ca úi în cazul segmentelor); atât directorul cât úi tabelele de pagini au structura uniformă, fiind formate din 1 K „elemente” a câte 4 octeĠi. Aici se găseúte adresa bazei tabelei úi respectiv a paginii selectate; orice adresă a bazei unei tabele sau a unei pagini este dată pe un număr de 20 biĠi, aceútia constituind partea mai semnificativă a adresei fizice vizate. Blocurile în memorie sunt aliniate din 4 KB în 4 KB, deci automat cei mai puĠin semnificativi 12 biĠi ai adreselor fizice ale bazelor sunt 0; adresa fizică a bazei directorului se află în unul din cele patru registre de control al microprocesoarelor.
6.1.2. Politica de înlocuire a paginilor Într-un sistem care foloseúte memoria virtuală, sistemul de operare trebuie să stabilească următoarele politici de gestionare: politica fetch: stabileúte când o pagină trebuie adusă în memorie; paginarea la cerere: aduce o pagină în memorie doar ca rezultat al excepĠiei page fault; pre-paginarea: încearcă să anticipeze úabloane de utilizare a memoriei în viitor úi să aducă paginile în memorie înainte ca cererile de accesare să fie emise. Scopul pre-paginării este de a reduce consecinĠele operaĠiilor de citire/scriere, programând ca acestea să se desfăúoare în paralel cu procesarea desfăúurată de unitatea centrală. politica de plasament: unde să fie puse paginile sau segmentele aduse în memorie. Această politică este folosită în cazul segmentelor făUă paginare. În caz contrar, o pagină nu contează unde este plasată (excepĠia este reprezentată de arhitecturile NUMA, unde este avantajos ca o pagină să fie stocată cât mai aproape de procesorul care o va folosi).
249
politica de înlocuire: dacă memoria este complet ocupată, când intervine o excepĠie page fault, o pagină sau un segment de memorie trebuie să fie evacuate. Politicile de înlocuire stabilesc care pagini sau segmente să fie înlocuite. Algoritmii de înlocuire intră în acĠiune atunci când sistemul de operare primeúte semnalul de page fault, prin care se înĠelege că pagina solicitată nu se află în memoria fizică, ci pe disc. La primirea acestui semnal, algoritmul de înlocuire a paginii are sarcina de a muta o pagină existentă în memoria fizică pentru a face loc paginii care va fi copiată de pe disc. Decizia corectă asupra paginii care va fi mutată este crucială pentru viteza cu care va rula aplicaĠia. Deoarece lucrul cu discul este lent, este de preferat să se realizeze cât mai puĠine operaĠii cu acesta. Cu cât un algoritm păstrează paginile de care va fi nevoie în memorie mai mult timp, cu atât acesta este mai eficient. Obiectivul unei politici de înlocuire este de a determina o rată de apariĠie a excepĠiei page fault cât mai mică. SituaĠia ideală ar fi ca o pagină care este eliminată să fie o pagină care nu va mai fi folosită niciodată. Dacă acest lucru nu este posibil, următoarea opĠiune este ca pagina înlocuită să fie una care nu va mai fi folosită pentru o lungă perioadă de timp. Întrebarea care se pune este: ce factori pot fi folosiĠi pentru a stabili ce pagină trebuie înlocuită? CâĠiva dintre aceúti factori sunt următorii: durata perioadei în care o pagină a fost situată în memorie: principiul localităĠii temporale enunĠă faptul că o pagină aflată de mult timp în memorie poate să nu mai fie necesară; cât de recent a fost apelată o pagină: acelaúi principiu al localităĠii temporale enunĠă faptul că probabilitatea ca o pagină care a fost apelată de curând să fie apelată din nou în viitorul apropiat este mare; frecvenĠa cu care a fost apelată o pagină: acest factor nu este la fel de important ca cei doi descriúi mai sus, dar există totuúi o probabilitate relativ ridicată ca o pagină care a fost des apelată să fie apelată din nou destul de curând; proprietatea unei pagini de a fi fost modificată sau nu: dacă toĠi factorii sunt egali, se alege a fi înlocuită o pagină care nu a fost modificată. Acest fapt nu va cauza o operaĠie de citire/scriere; eventualitatea ca un cadru să fie blocat: unele cadre sunt blocate – aceasta înseamnă că paginile din interiorul lor nu pot fi înlocuite, această proprietate prevenind situaĠia ca pagini din kernel sau din buffer-ele I/O sa fie evacuate. Paúii care sunt parcurúi pentru tratarea excepĠiei page fault sunt: 1. aplicaĠia accesează o pagină care nu este prezentă în memoria virtuală; 2. apare excepĠia page fault; 3. este aleasă o pagină goală; 4. dacă nu este găsita nicio pagină goală, este aleasă una care urmează a fi evacuată din memoria virtuală, această alegere fiind făcută în baza unor politici de înlocuire;
250
5. dacă pagina a fost modificată, această pagină este întâi scrisă pe disc; 6. pagina necesară este citită de pe disc; 7. pagina este mapată spaĠiului de adrese al aplicaĠiei; 8. este reluată execuĠia aplicaĠiei. Algoritmii de înlocuire pot fi locali sau globali. Când apare semnalul de page fault, algoritmii de înlocuire locali selectează pagini care aparĠin aceluiaúi proces, în timp ce algoritmii globali pot selecta orice pagină din memorie. Algoritmul optim de înlocuire (Belady) Algoritmul optim de înlocuire, cunoscut úi sub numele de algoritmul lui Belady, este un algoritm de înlocuire ce funcĠionează după următorul principiul: când o pagină trebuie copiată de pe disc în memorie, sistemul de operare mută conĠinutul paginii care va fi folosită în proces cel mai târziu, din memorie pe disc, Iăcându-i loc noii pagini. De exemplu, o pagină care nu va fi folosită în următoarele 10 secunde va fi mutată din memorie pe disc înaintea unei pagini care va fi folosită în următoarele 2 secunde. Acest algoritm este unul teoretic, el neputând fi implementat pe sistemele de operare deoarece nu se poate úti exact cât va dură până când o pagină din memorie va fi folosită. Not Recently Used (NRU) Algoritmul NRU (nefolosit recent) este un procedeu de înlocuire a paginilor care au fost folosite recent. Acest algoritm funcĠionează pe următorul principiu: când o pagină este referită, un bit de referinĠă este setat la valoarea 1 pentru acea pagină, aceasta este acum marcată ca fiind referită. Când o pagină este scrisă, un alt bit, de scriere a paginii, este setat la valoarea 1. La un anumit interval de timp se resetează biĠii de referinĠă a paginilor folosite recent. Sistemul de operare distinge 4 clase de pagini: clasa 0: nereferite, nemodificate; clasa 1: nereferite, modificate; clasa 2: referite, nemodificate; clasa 3: referite, modificate. First-In First-Out (FIFO) Algoritmul de înlocuire FIFO (primul intrat, primul ieúit) elimină pagina care a fost încărcată prima, indiferent de momentul în care această pagină a fost referită ultima dată. Fiecare pagină are un contor care este iniĠial egal cu 0 pentru fiecare cadru de pagină. Pagina care tocmai a fost adusă în memorie va avea valoarea contorului egală mereu cu 0, următoarea va avea valoarea 1 (înainte ca pagina cu indexul 0 să fie adusă în memorie pagina aceasta avea contorul egal cu zero, dar a fost incrementat cu 1) ú.a.m.d. Practic, se creează un fenomen de îmbătrânire a paginilor, cea mai “tânăUă” pagină având contorul cu valoarea 0. Când o pagină trebuie eliminată, se va alege mereu cea cu contorul cel mai mare.
251
Algoritmul FIFO este foarte ieftin, însă are performanĠe slabe comparativ cu alĠi algoritmi. Din această cauză este rar folosit. Un exemplu de sistem de operare care foloseúte algoritmul FIFO este VAX/VMS. Second Chance (SC) Second Chance (a doua úansă) este un algoritm de înlocuire a paginilor inspirat din FIFO, dar care are performanĠe mult mai bune decât acesta din urmă, diferenĠa de preĠ fiind una foarte mică. FuncĠionează verificând pagina cu contorul având cea mai mare valoare (cea mai bătrână pagină), dar în loc de a o extrage ca în algoritmul FIFO, Second Chance îi acordă o a doua úansă paginii verificând dacă are sau nu fixat bitul de referinĠă. Dacă acesta nu este setat, algoritmul funcĠionează ca úi FIFO în continuare, mutând pagina din memorie. Dacă bitul de referinĠă este setat, atunci contorul paginii este resetat la valoarea 0, pagina fiind practic inserată din nou în coadă ca úi cum ar fi o pagină nouă. Clock (C) Clock este un algoritm cu performanĠe mai bune decât Second Change, care merge tot pe principiul FIFO. La fel ca úi Second Change, Clock foloseúte biĠi de referinĠă pentru a da o “a doua úansă” paginii. ÎmbunăWăĠirea adusă de Clock constă în faptul că nu mai este nevoit să „împingă” paginile în coadă, algoritmul folosind un pointer (indicator) úi un sistem circulat al paginilor în loc de o coadă. Pointer-ul arată care pagină este cea mai veche úi poate fi înlocuită Least Recently Used (LRU) Algoritmul Least Recently Used (LRU) – cel mai puĠin frecvent utilizată pagină, deúi similar în terminologie cu NRU, diferă prin faptul că LRU urmăreúte paginile într-o perioadă scurtă de timp, în timp ce NRU urmăreúte paginile într-un interval de ceas. LRU funcĠionează pe ideea că paginile folosite cel mai mult în trecutul apropiat vor fi cel mai probabil folosite úi în viitorul apropiat, în cadrul următoarelor câtorva instrucĠiuni. Deúi în teorie LRU se descurcă foarte bine, acesta este foarte scump de implementat. Există câteva implementări ale LRU care încearcă să reducă costul acestuia dar să menĠină în acelaúi timp performanĠele ridicate. Cea mai costisitoare variantă a LRU este cea de tip coadă. Aceasta implică realizarea unei liste cu toate paginile din memorie. La sfârúitul listei se află cea mai puĠin utilizată recent pagină iar în vârful listei se află cea mai des recent utilizată pagină. Intrările din listă trebuie rearanjate la fiecare accesare a listei, ceea ce face această metodă foarte lentă. O altă metodă are nevoie de suport hardware úi funcĠionează pe baza unui counter (număUător). De fiecare dată când o pagină este accesată primeúte o valoarea egală cu a counter-ului la momentul accesării. Când o pagină trebuie mutată sistemul de operare selectează pagina cu counter-ul cel mai mic úi o mută. Costul implementării acestei metode este unul foarte ridicat datorită tehnologiei necesare realizării counter-ului.
252
Din cauza costurilor mari se folosesc de obicei algoritmii similari cu LRU, care oferă o implementare mai ieftină. În unele situaĠii, LRU eúuează lamentabil. De exemplu, în cazul folosirii ciclurilor care se întind pe mai multe pagini. În aceste cazuri, algoritmul MRU (Most Recently Used) este mult mai eficient. Majoritatea implementărilor LRU încearcă să detecteze aceste cicluri úi să le trateze corespunzător cu algoritmul MRU. Variante ale LRU sunt: LRU-K, cunoscut úi sub numele de LRU-2, LRU-1 fiind identic cu LRU; ARC. Random (R) Algoritmul de tip Random înlocuieúte aleator o pagină din memorie cu una de pe disc. Acest procedeu elimină costurile suplimentare legate de realizarea unui sistem de monitorizare a referinĠelor către o pagină. De obicei, are rezultate mai bune decât FIFO úi în cazul ciclurilor chiar rezultate mai bune decât LRU, deúi în general în practică LRU se descurcă mai bine. Sistemul de operare OS/390 construit pentru mainframe-urile de la IBM foloseúte, de exemplu, algoritmul LRU, iar când performanĠele acestuia scad trece la algoritmul Random. Not Frequently Used (NFU) Algoritmul NFU (pagini nefolosite frecvent) generează mai puĠine semnale de tip eroare de pagină (page fault) decât algoritmul LRU când tabelul de pagini conĠine mulĠi pointer-i cu valori nule. Acest algoritm foloseúte un counter (număUător), fiecare pagină având un astfel de counter de sine stăWător. La fiecare interval de ceas toate paginile referite în acel interval vor avea counter-ul incrementat cu 1. Astfel, cu ajutorul counter-ului se poate determina cât de frecvent a fost folosită o anumită pagină. Pagina cu valoarea cea mai mică a counter-ului va fi selectată pentru a fi mutată pe disc. Viteza acestui algoritm este mică datorită număUătorului. Aging (A) Algoritmul Aging (îmbătrânire) este o versiune îmbunăWăĠită a NFU, având o viteză de lucru mult mai mare. Modificările care îl fac săĠină cont úi de factorul „interval de timp”. În loc ca doar să incrementeze contoarele paginilor apelate, nefăcând nici o discriminare din punct de vedere al intervalului de timp în care numărul de apeluri a contribuit la contorul de frecvenĠă, contorul de apel al unei pagini este întâi deplasat către dreapta (împăUĠit la 2), înainte ca bitul de referinĠă să fie adăugat în partea stângă a numărului binar. De exemplu, dacă o pagină are biĠii de referinĠă: 1, 0, 0, 1, 1, 0 cu 6 perioade de ceas înainte, contorul de referinĠă va arăta în modul următor: 10000000, 01000000, 00100000, 10010000, 11001000, 01100100. După cum se poate observa, apelurile mai apropiate de momentul prezent au un impact mai mare decât apelurile care au avut loc mai demult. Aceasta asigură faptul că paginile care au fost apelate mai puĠin, dar mai recent, să aibă o
253
prioritate mai mare decât paginile care au fost apelate mai mult, dar în trecut. În acest fel, când o pagină trebuie să fie înlocuită, vor fi alese paginile cu contorul cel mai scăzut. ObservaĠie. Algoritmul Aging diferă de algoritmul LRU, în sensul în care poate Ġine evidenĠa apelurilor în ultimele 16/32/64 intervale de timp (depinzând de numărul de biĠi pe care poate lucra procesorul). În consecinĠă, se poate spune că modul în care au decurs apelurile în memorie în ultimele 16 intervale de ceas este suficient pentru a lua o decizie corectă asupra cărei pagini trebuie înlocuite. $úadar, algoritmul Aging poate oferi performanĠe foarte apropiate de cele ale algoritmului optim (Belady), la un preĠ moderat. Algoritmul Working Set
Fig. 6.5. Dimensiunea setului de pagini utilizate de ultimele k apeluri de memorie în funcĠie de timp (t).
Este un algoritm cu grad mare de generalitate. Working Set reprezintă setul de pagini utilizate de ultimele k apeluri de memorie, iar funcĠia w(k,t) este dimensiunea acestui set la momentul de timp t. ComparaĠie între algoritmi În figura 6.6 este reprezentat un grafic care redă comparativ performanĠa (raportată la numărul de excepĠii page fault apărute la 1000 de referinĠe) în funcĠie de numărul de cadre apelate, pentru 4 dintre algoritmi: FIFO, Clock, optim úi LRU.
Fig. 6.6. ComparaĠie între algoritmi.
254
6.2 Conceptul de segmentare Fie, de exemplu, un compilator care poate avea mai multe tabele, construite pe măsură ce decurge compilarea, incluzând: tabela de simboluri, conĠinând numele úi atributele variabilelor; textul sursă, memorat pentru tipărirea unui listing; o tabelă cu toate constantele întregi úi în virgulă mobilă folosite; arborele de analiză sintactică a programului; stiva folosită pentru apelurile de funcĠii ale compilatorului. Se analizează ce se întâmplă dacă un program are un număr deosebit de mare de variabile. PorĠiunea din spaĠiul de adrese alocată pentru tabela de simboluri se va umple, chiar dacă mai este suficient spaĠiu în celelalte tabele. Compilatorul ar putea, fireúte, să afiúeze un mesaj prin care să anunĠe imposibilitatea continuării compilării din cauza numărului mare de variabile, lucru care nu este corect atunci când mai există spaĠiu nefolosit în celelalte tabele. O soluĠie imediată este de a furniza mai multe spaĠii de adrese independente, numite segmente. Fiecare segment constă dintr-o secvenĠă liniară de adrese, de la valoarea 0 la valoarea maximă. Lungimea fiecărui segment poate fi oricât de mare între 0 úi valoarea maximă. Segmente diferite pot să aibă, úi, de regulă, au lungimi diferite. Mai mult chiar, lungimea unui segment se poate modifica în timpul execuĠiei. Lungimea unui segment de stivă poate creúte ori de câte ori se pune ceva în stivăúi poate scădea ori de câte ori se ia ceva din stivă. Deoarece fiecare segment reprezintă un spaĠiu de adrese separat, segmente diferite vor creúte úi vor scădea independent, făUă să se influenĠeze reciproc. Dacă o stivă dintr-un anumit segment are nevoie de un spaĠiu suplimentar pentru a creúte, îl poate avea, neexistând nimic peste care să se suprapună. Evident, un segment se poate umple, dar deoarece segmentele sunt de obicei mari, această situaĠie este deosebit de rară. Pentru a preciza o adresă în această memorie segmentată sau bidimensională, programul trebuie să furnizeze o adresă cu două componente: un număr de segmentúi o adresă în cadrul segmentului. Un segment este, deci, o entitate logică unică de care programatorul este conútient úi pe care o foloseúte ca atare. Un segment poate conĠine: procedură, un vector, o stivă, o colecĠie de variabile scalare. ObservaĠie. În general, un segment nu conĠine elemente de tip diferit. Segmentarea permite úi partajarea de date sau cod între diferite programe. Dacă un calculator are mai multe programe care rulează în paralel úi care folosesc anumite proceduri de bibliotecă, ar fi o risipă de memorie dacă fiecare program ar avea copia sa proprie. Segmentele pot avea diferite niveluri de protecĠie:
255
un segment procedură poate fi marcat ca accesibil doar pentru execuĠie, interzicând accesul pentru citirea din sau scrierea în el; un segment care conĠine un vector de numere în virgulă mobilă poate fi marcat ca accesibil pentru citire/scriere, dar nu pentru execuĠie, orice încercare de a fi executat fiind interceptată (o astfel de protecĠie ajută de obicei la depistarea erorilor de programare). Exemplu. Procesorul 80286 utilizează 16 linii de adresare, putând să lucreze fie în modul real, ceea ce înseamnă că funcĠionează cu un spaĠiu de adresare liniar de 1 MB, fie în modul protejat. Pentru procesorul 80386, în modul de lucru protejat pot fi adresate 16 K segmente, fie de 64 KB (286), fie de 4 GB (386) fiecare. Spre deosebire de cazul lui 80286, registrele segment pentru 80386 nu mai specifică adresa unui segment, ci indică o intrare într-unul din cele două tabele de adrese în care se află zone ce conĠin descriptorii segmentului. Memoria virtuală este gestionată cu ajutorul a două tabele: 1. LDT (Local Descriptor Table) de 8 K intrări fiecare; 2. GDT (Global Descriptor Table). Fiecare program are propriul său tabel LDT, în timp ce tabelul GDT este utilizat în comun de toate programele prin intermediul sistemului de operare. LDT descrie segmentele locale ale fiecărui program, cum ar fi cele de cod, date, stivă etc., în timp ce GDT descrie segmentele utilizate de sistemul de operare. Registrul segment obiúnuit este înlocuit în acest caz de un registru selector pe 16 biĠi, care conĠine următoarele informaĠii (fig. 6.7). 1
13 index
2
256
SemnificaĠiile notaĠiilor folosite sunt: G = bit care indică dacă mărimea segmentului este dată în octeĠi sau în pagini: G = 0 – făUă paginare, mărimea este dată în octeĠi úi rezultă dimensiunea maximă de 8 MB; G = 1 – mărimea este dată în pagini de câte 4 octeĠi úi rezultă dimensiunea maximă de 4 MB; D = indicator al tipului de cuvinte cu care se lucrează în interiorul segmentului: D = 0 – cuvinte de 16 biĠi; D = 1 – cuvinte de 32 biĠi; P = bit care indică prezenĠa în memoria principală (MP): P = 0 – segmentul nu se găseúte în MP; P = 1 – segmentul se găseúte în MP; Pr = 2 biĠi care indică nivelul de prioritate în execuĠie al programului din care face parte segmentul (între 0 úi 3); Tip = 5 biĠi care indică tipul segmentului (cod, date, stivă, extra segment etc.) úi nivelul său de protecĠie în modul protejat. Acest tabel de descriptori foloseúte la obĠinerea adresei fizice (fig. 6.9), respectând următorul algoritm: 1. se pleacă de la registrul selector úi se ajunge într-unul din tabelele unde Jăsesc descriptorii de segment (care joacă rolul tabelei de paginare): adresă, mărime úi alte câmpuri; 2. folosind această informaĠie, sistemul de operare utilizează o zonă MSB pentru adresă la care adaugă deplasamentul din program; 3. rezultă 32 de biĠi (o adresă liniară folosită ca adresă fizică). Selector
0/1
Deplasament
Adresa de bază numărul de intrări într-unul din tablourile GDT úi LDT
GDT sau LDT
0 ÷ 3 nivelul de protecĠie al segmentului respectiv
Fig. 6.7. InformaĠiile conĠinute în registrul selector.
Descriptorul este format din 4 octeĠi (fig. 6.8). adresa de bază segment 0 ÷ 15 adresa de bază segment 24 ÷ 31
P
Alte câmpuri
MSB
LSB
adresa liniară – 32 biĠi mărimea segmentului 0 ÷ 15
mărime G D 0 X segment 16 ÷ 19
0ărimea LDT (GDT)
Pr
32 biĠi Fig. 6.8. Structura descriptorului.
Tip
adresa de bază 16 ÷ 23
Fig. 6.9. Utilizarea tabelului de descriptori în obĠinerea adresei fizice.
Adresa liniară poate fi interpretată în două feluri: a) dacă nu există paginare, adresa liniară este interpretată ca adresă fizică, spunându-se în acest caz că se foloseúte o schemă de memorie cu segmentare pură; ObservaĠie. Segmentele se pot suprapune spaĠiul de adresare liniar dacă programatorul nu Ġine o evidenĠă clară a lor la scrierea programului. Ar fi fost prea complicat pentru sistemul de operare să verifice dacă aceste segmente sunt disjuncte.
257 10
10
Dir
1024 linii
12
Page
Deplasament
1024 linii
Adresa de intrare în tabelul Page 0/1
MSB Deplasament
0/1 Fig. 6.10. Separarea nivelurilor de tabele.
b) dacă există paginare, adresa liniară este folosită pentru tabelele de paginare (încă o treaptă) úi de abia apoi ajung la adresa fizică. Aúadar, dacă există paginare adresa liniară este interpretată ca adresă virtuală (adresă din spaĠiul fizic adresabil) úi transformată în adresă fizică (reală) prin intermediul tabelei de pagini (vezi figura 6.10). Deoarece un segment poate avea 1 M de pagini de 4 K, metoda de paginare la microprocesorul 80386 úi următoarele cuprinde două niveluri de tabele pentru a reduce din aceste tabele. ObservaĠie. Pot exista 1024 de tabele de tip Page. Nivelurile de protecĠie (03) sunt reprezentate în figura 6.11.
Fig. 6.11. Nivelurile de protecĠie.
258
Dacă toate registrele selector trimit către un acelaúi descriptor (aflat în LDT sau în GDT) cu adresa de bază 0 úi mărimea maximă (1 M sau 4 G), se va obĠine un sistem numit cu paginare pură, care face adresare liniară pe 32 de biĠi. În concluzie, procesoarele Intel începând cu 80386 asigură trei scheme de folosire a memoriei: 1. cu segmentare pură; 2. cu paginare pură; 3. superpoziĠie între segmentare úi paginare (paginare segmentată). Exemplu. Paginarea segmentelor foloseúte avantajul eliminării fragmentării externe creat de către paginare (pentru alocare poate fi folosit oricare dintre cadrele disponibile). Deosebirea dintre această metodăúi segmentare este aceea că intrarea tabelei de segment nu conĠine adresa de bază a segmentului ci adresa de bază a unei tabele de pagină asociată acestui segment. Segmentul este format dintr-un număr de pagini de aceeaúi dimensiune. Deplasarea în cadrul segmentului se exprimă prin număr de paginăúi deplasare în pagină. Cu numărul de pagină folosit ca index în tabela de pagină a segmentului, se obĠine numărul cadrului care, în final, se combină cu deplasarea în pagină úi formează adresa fizică (vezi figura 6.12). Deoarece ultima pagină a fiecărui segment nu este întotdeauna complet ocupată, metoda introduce totuúi o cantitate redusă de fragmentare externă (în realitate, atunci când se lucrează cu tabele de segment de dimensiuni mari, mecanismul este ceva mai complicat).
Fig. 6.12. Exemplu de paginare segmentată.
259
6.2.1 Implementarea segmentării Implementarea segmentării diferă într-un mod esenĠial de paginare: paginile au dimensiuni fixe, pe când segmentele nu. Exemplu. Se consideră o memorie fizică care conĠine iniĠial 5 segmente (fig. 6.12.a). Se analizează ce se întâmplă dacă segmentul 1 este eliminat úi înlocuit cu segmentul 7, care este mai mic. Se obĠine configuraĠia de memorie prezentată în figura 6.12.b. Între segmentul 7 úi segmentul 2 există o zonă nefolosită, adică o gaură. Apoi segmentul 4 este înlocuit cu segmentul 5, ca în figura 6.12.c, iar segmentul 3 este înlocuit de segmentul 6, ca în figura 6.10.d. După ce sistemul rulează o vreme, memoria va fi împăUĠită într-un număr de porĠiuni, unele conĠinând segmente, unele găuri. Acest fenomen se numeúte fragmentare externă. Se analizează ce s-ar întâmpla dacă programul ar referi segmentul 3 după ce a apărut fragmentarea externă, ca în figura 6.10., d. SpaĠiul total disponibil în Jăuri este de 10 K, mai mult decât suficient pentru segmentul 3, dar deoarece Jăurile sunt distribuite în bucăĠele mici, nefolositoare, segmentul 3 pur úi simplu nu poate fi încărcat. Pentru a o face totuúi, trebuie mai întâi eliminat din memorie un alt segment.
260 Segment 4 (7k) Segment 3 (8 k) Segment 2 (5 k) Segment 1 (8 k) Segment 0 (4 k)
(a)
Segm. 3 Segm. 6
6.2.2 Algoritmi de înlocuire a segmentelor I. O modalitate de a elimina fragmentarea externă este compactarea: ori de câte ori apare o gaură, toate segmentele de după ea vor fi mutate cât mai aproape de locaĠia de memorie 0, eliminând acea gaură úi lăsând o singură gaură, mare, la sfârúitul memoriei. Alternativ, se poate aútepta ca fragmentarea externă să devină serioasă (adică mai mult de un anume procent din memorie este pierdut în găuri), înainte de a se face compactarea (eliminarea găurilor). Figura 6.10.e prezintă memoria din figura 6.10.d după compactare (defragmentare). Scopul compactării este colectarea tuturor găurilor mici úi inutilizabile într-una singură, mare, în care pot fi plasate unul sau mai multe segmente. Compactarea are dezavantajul evident al pierderii de timp cu realizarea ei. Compactarea după apariĠia fiecărei găuri este de obicei mult prea cronofagă. Dacă timpul necesar compactării memoriei este inacceptabil de mare, este nevoie de un algoritm care să stabilească ce gaură se va folosi pentru un anumit segment. Această gestiune a găurilor necesită menĠinerea unei liste cu adresele úi dimensiunile găurilor. II. Un algoritm des întâlnit, numit best fit (cea mai bună potrivire) alege cea mai mică gaură în care segmentul dorit va încăpea. Ideea este de a găsi potriviri între segmente úi găuri, evitându-se astfel preluarea unei porĠiuni dintr-o gaură mare, care ar putea fi necesară ulterior pentru un segment mare. III. Alt algoritm frecvent utilizat este first fit (prima potrivire), care parcurge circular lista de găuri úi alege prima gaură suficient de mare pentru a Săstra segmentul.
Segm. 1 Segm. 7
Gaură (3 k) Segment 5 (4 k) Gaură (4 k) Segment 6 (4 k) Segment 2 (5 k) Gaură (4 k) Segment 7 (5 k) Segment 0 (4 k) (d)
Segment 4 (7k) Segment 3 (8 k) Segment 2 (5 k) Gaură (3 k) Segment 7 (5 k) Segment 0 (4 k) (b)
Compactare
Segm. 4 Segm. 5
(c)
Gaură (3 k) Segment 5 (4 k) Segment 3 (8 k) Segment 2 (5 k) Gaură (3 k) Segment 7 (5 k) Segment 0 (4 k)
Gaură unică (10 k) Segment 5 (4 k) Segment 6 (4 k) Segment 2 (5 k) Segment 7 (5 k) Segment 0 (4 k)
(e)
Fig. 6.12. Exemplu de implementare a segmentării.
Procedând astfel, este evident că timpul de căutare necesar este mai mic decât în cazul căutării în întreaga listă a celei mai bune potriviri, ceea ce reprezintă un avantaj al acestui algoritm. Aceúti ultimi doi algoritmi au tendinĠa de a reduce dimensiunea medie a găurilor. Ori de câte ori un segment este plasat într-o gaură mai mare decât dimensiunea sa, ceea ce se întâmplă aproape întotdeauna (potrivirile exacte fiind rare), gaura este divizată în două păUĠi. O parte este ocupată de segment, cealaltă devine noua gaură, care bineînĠeles este mai mică decât gaura iniĠială. Dacă nu există un proces de compensare care să creeze găuri mai mari prin unificarea celor mici, aceúti ultimi doi algoritmi vor duce în cele din urmă, la umplerea memoriei cu găuri mici, nefolositoare. În concluzie, aceúti algoritmi trebuie utilizaĠi în conjuncĠie cu compactarea, aplicată rar.
261
6.3.1. Memoria virtuală la Multics
6.3. Exemple de gestionare a memoriei Se defineúte gestionarea memoriei ca fiind translatarea adreselor virtuale (folosite de programator) în adrese fizice identificabile în structura fizică, concretă, a calculatorului. Primul reprezentant al familiei Intel care foloseúte acest mecanism este 80286. De remarcat este faptul că Intel 80286 úi succesorii săi au mecanismul de gestionare implementat pe cip. Gestionarea memoriei bazate pe principiile segmentării încurajează multiprocesarea, protecĠia adreselor, protecĠia proceselor a căror izolare rezultă în mod natural din definirea segmentelor úi atributelor, precum úi interschimbarea locului proceselor între memoria internăúi cea externă. Tabelul 6.2 ComparaĠie între paginare úi segmentare ConsideraĠie
Paginare
Programatorul útie de existenĠa sa?
Nu
Da
Câte spaĠii liniare de adresă există?
1
Mai multe
SpaĠiul de adrese virtuale poate depăúi dimensiunea memoriei?
Da
Da
Tabelele de dimensiune variabilă pot fi gestionate uúor?
Nu
Da
Pentru simularea memoriilor mari
Pentru a furniza mai multe spaĠii de adrese
De ce a fost inventată tehnica?
262
Segmentare
Paginarea introduce úi o nouă noĠiune legată de adrese: adresa liniară. Acest tip de adresă rezultă în urma translatării adresei virtuale úi urmează, la rândul ei, să fie translatată în adresa fizică. În cazul familiei Intel, adresa liniară coincide cu cea fizică dacă G = 0 (vezi figura 6.8). Se impun câteva observaĠii preliminare: pentru familia Intel, mecanismul paginării se aplică numai începând de la 80386 úi apoi la descendenĠii familiei (80486, familia Pentium). Pentru Intel 386/486 paginarea este opĠională, în funcĠie de bitul de granularitate din descriptorii de segmente; adresa virtuală, alcătuită din selector úi adresa efectivă, este translatată în adresa liniarăúi apoi în cea fizică. La fel ca adresa fizică, adresa liniară (AL) este de 32 de biĠi; Intel 386/486 adaugă modurilor de adresare cunoscute de la ascendenĠii familiei un nou tip: adresarea la care, alături de bază úi deplasament, există un index care poate fi înmulĠit cu un factor de scală 1, 2, 4 sau 8; dimensiunea maximă a unui segment în memoria virtuală se obĠine numai pentru G = 1. În acest caz, un segment poate avea: 220 pagini 212 B/pagină = 232 B = 4 GB.
Sistemul de operare Multics rula pe maúinile Honeywell 6000 úi pe urmaúii acesteia si asigura fiecărui program o memorie de până la 218 segmente, fiecare dintre ele putând avea o lungime de până la 65.536 cuvinte (de 36 biĠi). Pentru a combina avantajele paginării (dimensiunea uniformă a paginii si neobligativatea Ġinerii în memorie a unui segment întreg dacă numai o parte din acesta este folosit) cu avantajele segmentării (uúurinĠa în programare, modularitate, protecĠia si partajarea), sistemul de operare Multics tratează fiecare segment ca pe o memorie virtualăúi astfel fiecare segment se paginează. Fiecare program Multics are un tabel de segmente, cu câte un descriptor pentru fiecare segment. Deoarece există mai bine de un sfert de milion de intrări în tabel, acesta este el însuúi un segment úi este paginat la rândul lui. Descriptorul de segment conĠine o indicaĠie care atestă, sau nu, apartenenĠa segmentului la memoria principală. Dacă vreo parte din segment se află în memorie, atunci se consideră că segmentul úi tabelul său de pagini se află în memorie. Daca segmentul este în memorie, descriptorul său conĠine un pointer de 18 biĠi către tabelul său de pagini după cum se poate vedea din figura 6.13.
Fig. 6.13. Descriptorul de segment úi indicarea tabelelor de pagini.
Deoarece adresele fizice au 24 de biĠi úi paginile sunt aliniate la limite de 64 de octeĠi sunt necesari numai 18 biĠi în descriptor pentru a stoca adresa tabelului de pagini. Descriptorul conĠine de asemenea dimensiunea segmentului, biĠii de protecĠie úi alte câteva elemente. În figura 6.14 se poate observa un descriptor de segment Multics. Adresa segmentului în memoria secundară nu este în descriptorul de segment, ci într-un alt tabel care este folosit de agentul de tratare a defectelor al segmentului.
263
264
Fig. 6.14. Ilustrarea unui descriptor de sistem.
Trebuie specificat că fiecare segment este un spaĠiu de adrese obiúnuit úi astfel úi paginarea se face la fel ca la paginarea memoriei nesegmentate. Dimensiunea normală a paginii este de 1024 de cuvinte. O observaĠie pertinentă este că există segmente nepaginate sau paginate în unităĠi de 64 de cuvinte de obicei segmente mici úi astfel se economiseúte memorie fizică. O adresă în Multics constă din două păUĠi: segmentul úi adresa în cadrul segmentului. Adresa din cadrul segmentului este mai departe divizată între un număr de paginăúi un cuvânt în cadrul paginii. În figura 6.15 se observă această divizare.
Fig. 6.16. Conversia unei adrese Multics.
Pentru simplitate, a fost omis faptul că însuúi descriptorul de segment este paginat. De fapt, este folosit un registru (registrul de bază al segmentului) pentru a localiza descriptorul tabelului de pagini al segmentului, care la rândul său indică spre paginile descriptorului de segment. Îndată ce este găsit descriptorul pentru segmentul dorit, se continuă adresarea după cum este arătat în figura 6.17. Dacă algoritmul precedent ar fi fost rulat de către sistemul de operare la fiecare instrucĠiune, evident programul nu ar fi rulat foarte rapid. Pentru a nu exista această problemă hardul Multics conĠine o tabelă TLB de viteză mare pe 16 cuvinte, care poate căuta în paralel o anumită cheie prin toate intrările sale. Aceasta este ilustrată în figura 6. Când o adresă este prezentată calculatorului, hardul de adresare verifică întâi dacă adresa virtuală se află în TLB. Dacă adresa se află în TLB, numărul cadrului de pagină se obĠine direct din TLB úi se formează adresa efectivă a cuvântului referit făUă a se consulta descriptorul de segment sau tabelul de pagini.
Fig. 6.15. O adresă virtuală Multics de 34 de biĠi.
Când are loc o referire la memorie, se urmăreúte următorul algoritm: 1. Numărul de segment este folosit pentru a găsi descriptorul de segment; 2. Se verifică dacă tabelul de pagini al segmentului se află în memorie. Dacă tabelul de pagini este în memorie, i se stabileúte locaĠia. Dacă nu este în memorie, are loc un defect de segment. Dacă are loc o încălcare a protecĠiei, se generează o capcană. 3. Se examinează intrarea din tabelul de pagini pentru pagina virtuală cerută. Dacă pagina nu este în memorie, are loc un defect de pagină. Dacă este în memorie, adresa de memorie principală a începutului paginii este extrasă din intrarea tabelului de pagini. 4. Se adaugă deplasarea la originea paginii pentru a furniza adresa de memorie principală la care se află cuvântul. 5. Are loc citirea sau scrierea în memorie (vezi figura 6.16).
Fig. 6.17. Tabela TLB Multics simplificată.
265
Adresele celor 16 cele mai recent referite pagini sunt salvate în TLB. Programele ale căror seturi de lucru sunt mai mici decât dimensiunea tabelei TLB vor ajunge la echilibru cu adresele întregului set de lucru din TLB úi prin urmare vor rula eficient. Dacă pagina nu este în TLB, descriptorul úi tabelele de pagini sunt referite efectiv pentru a se găsi adresa cadrului de pagină úi tabela TLB este actualizată prin includerea acestei pagini, fiind eliminată pagina utilizată cel mai puĠin recent. Câmpul de vârstăĠine evidenĠa intrărilor utilizate cel mai puĠin recent. Tabela TLB este folosită pentru a compara în paralel segmentele úi numerele de pagină ale tuturor intrărilor.
6.3.2. Memoria virtuală la Intel Din multe puncte de vedere, memoria virtuală de la Pentium se aseamăQă cu cea de la MULTICS, incluzând prezenĠa atât a segmentării cât úi a paginării. În timp ce MULTICS are 256K segmente independente, fiecare de până la 64K cuvinte de 36 de biĠi, Pentium are 16K segmente independente, fiecare Ġinând până la 1 miliard de cuvinte de 32 de biĠi. Cu toate că sunt mai puĠine segmente, dimensiunea mai mare a segmentului este de departe mult mai importantă, întrucât puĠine programe au nevoie de mai mult de 1000 de segmente úi multe programe necesită segmente mari. Inima sistemului de memorie virtuală de Ia Pentium este formată din două tabele: LDT (tabela descriptorilor locali) úi GDT (tabela descriptorilor globali). Fiecare program are propria sa tabelă LDT, însă există o singură copie a tabelei GDT, partajată de toate programele de pe calculator. Tabela LDT descrie segmentele locale fiecărui program, cuprinzând codul, datele, stiva úi aúa mai departe, în timp ce GDT descrie segmentele sistem, inclusiv cele ale sistemului de operare. Pentru a accesa un segment, un program de pe Pentium încarcă mai întâi un selector pentru segmentul respectiv, într-unul din cele 6 registre de segment ale maúinii. În timpul execuĠiei, CS păstrează selectorul pentru segmentul de cod úi DS pentru cel de date. Celelalte registre de segment sunt mai puĠin importante. Fiecare selector este un număr pe 16 biĠi, aúa cum se vede în figura 6.18.
Fig. 6.18. Selector Pentium.
266
Unul dintre biĠii selectorului indică dacă este vorba despre un segment local sau global (adică segmentul este în LDT sau în GDT). AlĠi treisprezece biĠi precizează numărul intrării în LDT sau GDT, astfel încât aceste tabele nu pot păstra decât 8K descriptori de segmente. CeilalĠi doi biĠi se referă la protecĠie úi vor fi discutaĠi mai târziu. Descriptorul 0 este invalid. El poate fi însă încărcat într-unul din registrele de segment, pentru a indica faptul că registrul segment nu este momentan disponibil. Folosirea lui declanúează o capcană. În momentul în care un selector este încărcat într-un registru de segment, descriptorul corespunzător este preluat din LDT sau GDT úi memorat în registrele interne ale MMU, pentru a putea fi accesat mai rapid. Un descriptor constă din 8 octeĠi, cuprinzând pe lângă alte informaĠii úi adresa de bază a segmentului, aúa cum se observă în figura 6.19.
Fig. 6.19. Descriptor de segment de cod pentru Pentium.
Formatul selectorului a fost ales în mod inteligent, pentru a uúura localizarea descriptorului. Se selectează mai întâi fie LDT, fie GDT, în funcĠie de bitul 2 din selector. Apoi selectorul este copiat într-un registru de lucru (scratch) intern al MMU, iar cei mai puĠin semnificativi 3 biĠi sunt setaĠi la 0. în final, adresa LDT sau GDT este adunată, obĠinându-se un pointer direct spre descriptor. De exemplu, selectorul 72 se referă la intrarea 9 în GDT, care se află la adresa GDT+72. Sunt prezentaĠi paúii prin care o pereche (selector, deplasare) este convertită într-o adresă fizică. De îndată ce microprogramul útie ce registru de segment este folosit, el poate găsi descriptorul complet al segmentului corespunzător selectorului în registrele sale interne. Dacă segmentul nu există (selector 0) sau nu este momentan în memorie, se declanúează o capcană. Apoi se verifică dacă deplasarea este dincolo de graniĠa segmentului, caz în care se declanúează altă capcană. Logic, în descriptor ar trebui să existe un câmp de 32 de biĠi, pentru a preciza dimensiunea segmentului, dar deoarece sunt disponibili doar 20 de biĠi, trebuie folosită o altă metodă.
267
Dacă în câmpul G (granularitate) este valoarea 0, câmpul limită (Limit) reprezintă atunci dimensiunea exactă a segmentului, până la valori de 1MB. Dacă valoarea este 1, atunci câmpul limită conĠine dimensiunea segmentului în pagini úi nu în octeĠi. Dimensiunea paginii la Pentium este fixată la 4KB, astfel încât 20 de biĠi ajung pentru segmente de până la 212 octeĠi. Presupunând că segmentul este în memorie úi că deplasarea este corectă, Pentium adună apoi la deplasare câmpul bază (Base) de 32 de biĠi din descriptor, pentru a forma ceea ce se numeúte o adresă liniară (linear address), aúa cum se vede úi în figura 6.20. Câmpul bază este divizat în trei componente úi distribuit spre descriptor, pentru compatibilitate cu 286, care avea un câmp bază de doar 24 de biĠi. Ca o consecinĠă, câmpul bază permite fiecărui segment să înceapă în orice loc din spaĠiul liniar de adrese pe 32 de biĠi.
Fig. 6.20. Conversia unui selector úi a unei deplasări într-o adresă liniară.
Dacă paginarea este dezactivată (printr-un bit într-un registru global de control), atunci adresa liniară este interpretată ca adresă fizică úi trimisă spre memorie pentru citire sau scriere. De aceea, cu paginarea dezactivată are o schemă de segmentare pură, adresa de bază a fiecărui segment aflându-se în descriptorul asociat. Segmentele se pot suprapune, din întâmplare, probabil deoarece ar fi prea mare efortul úi timpul pentru a verifica dacă ele sunt sau nu disjuncte. Pe de altă parte, dacă paginarea este activată, adresa liniară este interpretată ca adresă virtuală úi pusă în corespondenĠă cu o adresă fizică folosind tabele de pagini. Singura complicaĠie ce poate apărea este că o adresă virtuală pe 32 de biĠi úi o pagină de 4K permit unui segment să conĠină 1 milion de pagini, astfel încât se foloseúte o punere în corespondenĠă pe două niveluri, pentru a reduce dimensiunea tabelei de pagini pentru segmente mici. Fiecare program în rulare are asociat un catalog de pagini (page directory), format din 1024 intrări de 32 biĠi. El este localizat la o adresă memorată într-un registru global. Fiecare intrare în acest catalog indică spre un tabel de pagini care conĠine de asemenea 1024 intrări de 32 biĠi Intrările din tabelul de pagini indică spre cadrele de pagină. Schema este prezentată în figura 6.22.
268
Fig. 6.21. Adresa liniară.
În figura 6.21 se prezintă o adresă liniară divizată în trei câmpuri: Dir (catalog), Pagină (page) úi Deplasare (offset). Câmpul Dir este utilizat primul ca index în catalogul de pagini, pentru a localiza pointer-ul către tabelul de pagini corespunzător. Apoi câmpul Pagină este folosit ca index în tabelul de pagini, pentru a afla adresa fizică a cadrului de pagină. Câmpul Deplasare este adunat la adresa cadrului de pagină pentru a obĠine adresa fizică a octetului sau cuvântului adresat. Intrările în tabelul de pagini sunt de 32 de biĠi fiecare, din care 20 de biĠi conĠin un număr de cadru de pagină. CeilalĠi biĠi reprezintă biĠi pentru controlul accesului úi biĠi pentru a indica modificarea regiunii, setaĠi de către hard pentru sistemul de operare, biĠi de protecĠie úi alĠi biĠi utilitari. Fiecare tabel de pagini are 1024 de intrări pentru cadre de pagină de 4K, astfel încât o singură tabelă de pagini gestionează 4MB de memorie. Un segment mai mic de 4M va avea un catalog de pagini cu o singură intrare, un pointer către singura úi unica lui tabelă de pagini. Astfel, consumul suplimentar de memorie indus de segmentele scurte este doar de două pagini, în loc de milioane de pagini dacă s-ar fi folosit tabele de pagini pe un singur nivel. Pentru a evita accesul repetat la memorie, Pentium, ca úi Multics, are o mică tabelă TLB pentru a regăsi repede cele mai recent folosite combinaĠii Dir-Paginăúi a Ie pune în corespondenĠă cu adresa fizică corespunzătoare cadrului de pagină. Doar pentru acele combinaĠii care nu au fost folosite recent se urmează paúii descriúi în figura 6.22. Atâta timp cât lipsurile TLB sunt rare, performanĠa este bună.
Fig. 6.22. CorespondenĠa între o adresă liniarăúi o adresă fizică.
Este important de menĠionat că dacă o anumită aplicaĠie nu necesită segmentare, ci se mulĠumeúte cu un spaĠiu de adresare unic de 32 de biĠi, paginat, acest lucru se poate obĠine foarte uúor. Toate registrele segment pot fi încărcate cu aceeaúi valoare a selectorului, care are un descriptor cu bază = 0 úi limită de valoare maximă permisă. Deplasarea instrucĠiunii va fi adresa liniară, cu un singur
269
spaĠiu de adrese folosit, adică paginare tradiĠională. De fapt, toate sistemele de operare pentru Pentium funcĠionează în acest mod. OS/2 a fost singurul care s-a folosit de toată puterea arhitecturii MMU de la Intel. Proiectarea sistemului de memorie virtuală la Intel Pentium, date fiind scopurile contradictorii de implementare a paginării pure, a segmentării pure úi a segmentelor paginate, este un real succes. Faptul că s-a păstrat compatibilitatea cu 286 úi că s-au reuúit toate acestea într-un mod atât de eficient este un real succes din punct de vedere al proiectării.
6.3.3. Memoria virtuală la Motorola Din punct de vedere conceptual, utilizarea memoriei virtuale este mai simplă la microprocesorul Motorola 68030, utilizând doar scheme de paginare pură. Cu toate acestea, datorită faptului că schemele Motorola folosesc un număr variabil de niveluri de tabelare (între 0 úi 4), sistemul de operare ar avea de îndeplinit operaĠii destul de elaborate, de aceea majoritatea sarcinilor de gestionare a memoriei sunt preluate de un controler de tip MMU (Memory Management Unit), care începând cu 68030, este integrat în aceeaúi capsulă cu cipul care reprezintă nucleul procesor. ObservaĠie. La microprocesoarele Pentium există unitatea de pagină (Page Unit). În locul împăUĠirii fixe a adreselor liniare în zonele Dir, Page úi Deplasare (vezi figura 6.21), numărul zonelor de tabelare úi numărul de biĠi ai fiecărui nivel sunt specificate în câmpurile unui registru global, denumit TCR (Translation Control Register). 32 biĠi (adresă liniară) 12
4
3
2
11
ignoraĠi
A
B
C
deplasament
X
10
7
0
6
A
B C
16 intrări
4 biĠi
8 intrări Fig. 6.23. Structura adresei liniare la Motorola 68030.
MSB deplasament
270
Adresa liniară va fi împăUĠită conform figurii 6.23. Având în vedere că majoritatea programelor utilizează o memorie virtuală mult mai mică de 4 GB (232), în registrul TCR este prevăzut úi un câmp în care se poate preciza numărul MSB al adresei la care se renunĠă. Exemplu. Prin intermediul TCR, se poate preciza că: 12 biĠi MSB sunt ignoraĠi; 4 biĠi reprezintă nivelul de tabelare A; 3 biĠi reprezintă nivelul de tabelare B; 2 biĠi reprezintă nivelul de tabelare C; 11 biĠi reprezintă deplasamentul (deplasament în pagină de 2 K).