Extras din curs
CAPITOLUL I INTRODUCERE
1.1. Arhitectura calculatoarelor - definiţii şi terminologie
Arhitectura calculatoarelor este o ramură a informaticii percepută destul de divers în literatura de specialitate, de unde rezultă şi diversitatea modurilor în care ea este definită. Astfel, în unele lucrări se spune că domeniul se ocupă cu „studiul structurii, comportării şi proiectării calculatoarelor”, iar în altele, cu „proiectarea specificaţiilor generale pentru un întreg sistem de calcul sau numai pentru o parte a sa”. Alteori, arhitectura este definită ca „o interfaţă între hardware şi software-ul de cel mai scăzut nivel” sau se consideră că tratează „proiectarea unui sistem de calcul integrat capabil să devină un instrument eficient în mâna programatorilor”. Şi din punct de vedere istoric, domeniile abordate de către arhitectura calculatoarelor au evoluat: dacă în anii '60 acestea vizau numai aritmetica sistemelor de calcul, în anii '70 şi '80 vor fi abordate şi elemente legate de proiectarea setului de instrucţiuni, iar începând cu anii '90, pe lîngă problemele legate de proiectarea unităţii centrale, a ierarhiei memoriilor, a mecanismelor de intrare - ieşire, vor fi tratate şi aspecte conceptual-funcţionale vizând sistemele cu multiprocesare sau reţele de calculatoare. Extrapolând aceste tendinţe, suntem îndreptăţiţi să credem că în anul 2010 în aria arhitecturală a ştiinţei calculatoarelor vor fi cuprinse teme legate de studiul organizării sistemelor cu autoadaptare sau al structurilor autoinstruibile. Încercând totuşi o să alegem o definiţie, considerăm potrivit să ne oprim asupra următorului enunţ: arhitectura calculatoarelor se ocupă cu identificarea şi descrierea acelor atribute ale sistemului de calcul vizibile programatorului (setul de instrucţiuni, reprezentarea datelor şi a structurilor de date, organizarea memoriei pentru programe, modurile de adresare, mecanismul de intrare/ieşire), cât şi cu prezentarea principiilor structurale de proiectare ale maşinilor de calcul. Cu toate că avem de-a face cu două noţiuni care au semnificaţii diferite, în anumite lucrări conceptul de „arhitectură” este înlocuit sau confundat cu cel de „organizare”. Eroarea este evidentă, pentru că de fapt este vorba de cele două componente distincte care se îmbină armonios în arhitectura unui calculator: arhitectura se referă la setul de instrucţiuni al procesorului, iar organizarea, la structura maşinii de calcul. Arhitectura setului de instrucţiuni (ISA - Instruction Set Arhitecture) descrie structura maşinii de calcul din punctul de vedere al programatorului. Setul de instrucţiuni realizează interfaţa între software şi hardware. Prin abuz de limbaj, se spune uneori că membrii unei familii de procesoare au aceeaşi arhitectură, dacă ei rulează acelaşi set de instrucţiuni. În acest caz termenul „arhitectură” se referă numai la ISA. Este deci posibil ca procesoare care au diverse organizări interne şi sunt fabricate de producători diverşi să fie percepute de către programatori ca fiind identice, tocmai pentru că au seturi de instrucţiuni identice (este cazul familiilor arhitecturale de tip INTEL, IBM sau SUN). Aşa cum însă vom discuta mai târziu, este posibil să se construiască şi procesoare capabile să implementeze mai multe seturi de instrucţiuni, cum este cazul celor microprogramate, capabile să genereze microcod modificabil. Câteva exemple consacrate de arhitecturi tipice pentru seturi de instrucţiuni sunt: Digital Alpha (1992-1997), HP Precision Arhitecture (1986-1996), Sun Sparc (1987-1995), MIPS I-V (1986-1996), Intel 80x86, Pentium, Pentium MMX (1978-2002…). Organizarea maşinii de calcul desemnează atât modul în care a fost implementată arhitectura setului de instrucţiuni (tehnologiile utilizate, semnalele de comandă şi control, accesul la resurse), cât şi felul în care sunt interconectate diversele nivele ale unităţilor funcţionale. Organizarea calculatorului este transparentă programatorului. Datorită numai modului diferit de implementare al unor caracteristici organizaţionale - ca, de exemplu, numărul unităţilor funcţionale, complexitatea prelucrării instrucţiunilor şi posibilităţile ca acestea să fie tratate în paralel, dimensiunea şi organizarea memoriei cache ş.a. - pot fi întâlnite procesoare cu seturi de instrucţiuni identice, dar cu performanţe radical diferite.
Cele două componente arhitecturale - setul de instrucţiuni şi organizarea maşinii - sunt legate între ele, dar nu trebuie în mod necesar tratate împreună. Spre exemplu, instrucţiunea de înmulţire disponibilă într-un
calculator poate fi prezentată ca o caracteristică ISA a acestuia. Dacă însă este prezentat modul cum această operaţie este implementată, avem de-a face cu un aspect organizaţional al aceluiaşi calculator. Cu toate că detaliile organizării maşinii sunt transparente pentru software, nu trebuie pierdut din vedere faptul că ele contribuie în mare măsură la obţinerea performanţelor de calcul, astfel încât este de dorit ca unele elemente organizaţionale de bază să fie totuşi cunoscute de către programatori. Codul compilat va rula în mod similar pe sisteme cu structuri interne diferite, dacă ele au acelaşi ISA. El nu va fi capabil să detecteze dacă sistemul pe care rulează are sau nu memorie cache sau implementează mecanismele prelucrării pipeline, însă aceste caracteristici vor fi esenţiale pentru viteza cu care programul se execută. În consecinţă, eficienţa rulării codului va fi diferită de la un calculator la altul, dacă acestea au particularităţi organizaţionale distincte. Evoluţia arhitecturilor de calculatoare este strâns legată şi uneori chiar impusă de progresele din unele domenii conexe: tehnologiile de realizare ale componentelor electronice, limbajele de programare de nivel înalt, sistemele de operare, programele de aplicaţii, tehnicile de proiectare, măsurare şi evaluare, creativitatea ş. a.
1.2. Progresul tehnologic şi evoluţia calculatoarelor
Pentru a aduce argumente în sprijinul comentariilor de la sfârşitul paragrafului anterior legate de condiţionările evoluţiilor arhitecturale, vom ilustra prin câteva date statistice şi grafice dramaticele schimbări din ultimul timp ale parametrilor unei maşini de calcul, determinate de spectaculoasele progrese ale tehnologiei. Componentele vizate în special de aceste progrese tehnologice sunt procesoarele, memoria internă, discurile magnetice şi cele optice. Dinamica performanţelor procesoarelor poate fi reprezentată prin mai mulţi indicatori, însă oricare dintre aceştia poate fi edificator chiar de unul singur. Astfel, dacă rata anuală a creşterii capacităţii logice are valoarea de 30%, iar frecvenţa ceasului intern creşte anual cu circa 20%, gradul de integrare a depăşit în anul 2000 pragul celor 100 milioane de componente elementare într-un singur circuit (pe când - spre exemplu - Intel 4004 nu îngloba în 1971 decât ceva mai mult de 1000 de componente!). Nici evoluţia memoriilor nu rămâne mai prejos: în timp ce capacitatea memoriilor DRAM creşte de circa 4 ori în trei ani, iar rata de transfer a acestora se îmbunătăţeşte cu 10% pe an, costul per bit scade anual cu aproximativ 25%. Şi memoriile externe evoluează rapid, capacitatea discurilor hard mărindu-se cu 60% pe an, iar volumul de date disponibile dublându-se la fiecare 9 luni. În perioada 1982-1995 performanţele procesoarelor, măsurate prin indicatori SPEC, s-au dublat la fiecare 1.5 ani. Astfel, generaţia 1995 a microprocesoarelor familiei Intel x86 era de aproape 200 de ori mai performantă decât cea a anilor '80, pe când un procesor RISC din acelaşi an era de 300 de ori mai puternic. În fine, pentru a încheia şirul acestor câteva exemple, să mai menţionăm că lăţimea de bandă a comunicaţiilor din reţele se dublează anual. Dinamici ca şi cele de mai sus sunt cu mult mai multe. Preferăm totuşi să ne oprim aici, iar în loc de concluzii să invităm cititorul să întârzie câteva momente privind diagramele din figura 1.1, care ilustrează astfel de aspecte evolutive. Cum graficele din figură sunt sugestive prin ele însele, alte comentarii suplimentare asupra lor devin de prisos.
Preview document
Conținut arhivă zip
- Arhitectura Calculatoarelor
- CAPITOLUL_I.pdf
- CAPITOLUL_II.pdf