William Stallings.architettura e Organizzazione Dei Calcolatori.progetto e Prestazioni.8TH
March 20, 2017 | Author: Ylenia Placanica | Category: N/A
Short Description
Download William Stallings.architettura e Organizzazione Dei Calcolatori.progetto e Prestazioni.8TH...
Description
W illiam Stallings
Architettura e organizzazione dei calcolatori Progetto e prestazioni ottava edizione
■ ■ ■ ■ ■
P E A R S ON
I
Prentice I Hall f I
Sommario
Prefazione all'edizione italiana Prefazione N ote sull’autore
xx
Capitolo 0 Guida alla lettura 0.1 0.2 0.3
P ro filo d e lte sto Percorso per lettori e docenti Internet e risorse web
1 2 2
Parte 1 P ano ram ica Capitolo 1 Introduzione 1.1 1.2 1.3
O rganizzazione e architettura S tru ttu ra e fu n z io n e Parole chiave, dom ande di revisione
8 14
Capitolo 2 Evoluzione e prestazioni del calcolatore 2.1 2.2 2.3 2.4 2.5 2.6 2.7
B revesto riad eicalco lato ri Progettazione in funzione delle prestazioni Evoluzione dell architettura Intel x86 Sistemi em bedded e ARM Valutazione delle prestazioni L etture e siti web consigliati Parole chiave, dom ande di revisione e problem i
16 36 43 44 48 56 59
Sommario
Parte 2 Sistema di elaborazione Capitolo 3 Visione ad alto livello delle funzioni e interconnessioni del calcolatore 3.1 Componenti di un calcolatore 3.2 Funzione del calcolatore 3.3 Strutture di interconnessione 3.4 Interconnessione a bus 3.5 PCI 3.6 Letture e siti web consigliati 3.7 Parole chiave, domande di revisione e problemi Appendice 3A Diagrammi di temporizzazione
68 71 85 87 96 105 105 110
Capitolo 4 Memoria cache 4.1 Panoramica dei sistemi di memoria di un calcolatore 4.2 Principidcllem em oriecache 4.3 Elementi di progettazione delle cache 4.4 Organizzazione della cache nel Pentium 4 4.5 Organizzazione della cache di ARM 4.6 Letture consigliate 4.7 Parole chiave, domande di revisione e problemi Appendice 4A Caratteristiche delle prestazioni delle memorie a due livelli
114 121 123 144 147 148 149 156
Capitolo 5 Memoria interna 5.1 5.2 5.3 5.4 5.5
Memoria centrale a semiconduttore Correzione degli errori Organizzazione avanzata delle DRAM Lettiure e siti web consigliati Parole chiave, domande di revisione e problemi
164 173 179 185 186
Capitolo 6 Memoria esterna 6.1 6.2 6.3 6.4 6.5 6.6
Disco magnetico RAID Memorie ottiche Nastri magnetici Letture e siti web consigliati Parole chiave, domande di revisione e problemi
192 202 212 217 220 221
Capitolo 7 Input/Output 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9
Dispositivi esterni Moduli di I/O I/O da programma I/O interrupt driven Accesso diretto alla memoria Canali e processori di I/O Interfaccia esterna: FireWire e InfiniBand Lettiure e siti web consigliati Parole chiave, domande di revisione e problemi
226 229 232 235 244 250 251 262 263
Sommario
Capitolo 8 Supporto ai sistemi operativi 8.1 8.2 8.3 8.4 8.5 8.6 8.7
Panoram icadeisistem ioperativi Schedulazione Gestione della memoria Gestione della memoria nel processore Pentiiun Gestione della memoria nel processore ARM Letture e siti web consigliati Parole chiave, domande di revisione e problemi
270 281 287 300 305 310 311
Parte 3 C P U Capitolo 9 Aritmetica del calcolatore 9.1 9-2 9.3 9.4 9.5 9.6 9.7
L’unità aritmetico-logica Rappresentazione degli interi Aritmetica intera Rappresentazione in virgola mobile Aritmetica in virgola mobile Letture e siti web consigliati Parole chiave, domande di revisione e problemi
320 321 326 341 347 356 358
Capitolo 10 Linguaggi macchina: caratteristiche e funzioni 10.1 Caratteristiche delle istruzioni macchina 10.2 T ipi degli operandi 10.3 T ipi di dato di Intel x86 e ARM 10.4 T ipidioperazione 10.5 T ipi di operazioni in Intel x86 e ARM 10.6 Lcttureconsigliate 10.7 Parole chiave, domande di revisione e problemi AppendicelOA Pile (stack) AppendicelOB Little-endian, big-endian e bi-endian
364 370 373 376 389 399 400 407 413
Capitolo 11 Linguaggi macchina: modi ai indirizzamento e formati 11.1 11.2 11.3 11.4 11.5 11.6 11.7
Indirizzamento M odi di indirizzamento di x86 e ARM Formati delle istruzioni Formati delle istruzioni di x86 e di A RM Linguaggioassembly Letture consigliate Parole chiave, domande di revisione e problemi
418 424 430 439 444 446 446
X
Sommario
Capitolo 12 Struttura e funzione del processore 12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8
,
Organizzazione del processore Organizzazione dei registri Ciclo esecutivo delle istruzioni Pipeliningdelleistruzioni La famiglia di processori Intel x86 II processore ARM Letture raccomandate Parole chiave, domande di revisione e problemi
452 454 459 463 483 491 498 499
Capitolo 13 ProcessoriRISC 13.1 C arattcristichcdeiresecuzionedelleistruzioni 13.2 Uso di un ampio banco di registri 13.3 Compilatori ottimizzanti 13.4 A rchitctturaR ISC 13.5 PipeliningRISC 13.6 MIPS R4000 13.7 SPARC 13.8 Controversia tra RISC e CISC 13.9 Lctturcraccom andatc 13.10 Parole chiave, dom ande di revisione e problemi
507 511 517 518 523 529 536 542 543 544
Capitolo 14 Parallelismo a livello di istruzioni e processori superscalari 14.1 14.2 14.3 14.4 14.5 14.6
Panoramica Problemi di progettazione Pentiiun 4 ARM Cortex-A8 Letture raccomandate Parole chiave, domande di revisione e problemi
550 555 563 570 579 580
Parte 4 U nità di controllo Capitolo 15 Operazioni dell'unità di controllo 15.1 15.2 15.3 15.4 15.5
Micro-operazioni C ontrollo del processore Im plementazionecablata Letture raccomandate Parole chiave, dom ande di revisione e problemi
590 596 606 610 611
Capitolo 16 Controllo microprogrammato 16.1 16.2 16.3 16.4 16.5 16.6
C o n ccttid ib ase Serializzazione delle microistruzioni Esecuzione delle microistruzioni T I 8800 Letture raccomandate Parole chiave, domande di revisione e problemi
614 623 628 640 650 651
Sommario
Parte 5 O rg anizzazione parallela________________________________ Capitolo 17 Elaborazione parallela 17.1 Organizzazione multiprocessore 17.2 Mulciproccssori simmetrici 17.3 Coerenza delle cache e protocollo MESI 17.4 M ultithreadingechipm idtiprocessorc 17.5 Cluster 17.6 Accesso non uniforme alla memoria 17.7 * Elaborazionevettorialc 17.8 Letture raccomandate 17.9 Parole chiave, domande di revisione e problemi
656 659 666 672 680 687 691 704 705
Capitolo 18 Calcolatorimulticore 18.1 18.2 18.3 18.4 18.5 18.6 18.7
Prestazioni hardware Prestazioni software Organizzazionimulticore Organizzazione multicore Intel x86 A R M llM P C o re Letture e siti web consigliati Parole chiave, domande di revisione e problemi
714 719 724 726 729 734 735
Appendice A Progetti per l'insegnamento dell'organizzazione e dell'architettura dei calcolatori A .l A.2 A.3 A.4 A.5 A.6 A.7
Simidazioni interattive Progetti di ricerca Progetti di simulazione Progetti in linguaggio Assembly Assegnazione di letture e resoconti Esercizi di scrittura Raccolta di test
738 738 738 740 741 741 742
Appendice B Linguaggio Assembly e argomenti correlati B.l B.2 B.3 B.4
LinguaggioAssembly Assemblatori Caricamento e collegamento Letture raccomandate e siti web
744 754 757 766
Appendice C Logica Digitale (sul web) Glossario
773
Bibliografia
785
Indice analitico
801
Prefazione all'edizione italiana
L’autore di questo libro non ha certo bisogno di presentazione, ma lottava edizione del li bro di W illiam Stallings sulle architetture dei calcolatori merita un com m ento particolare. La prim a osservazione riguarda la m eritoria scelta di A R M come architettura di ri ferimento per le m acchine RISC. C on il diffondersi di telefonini sempre più sofisticati e di altri gadget digitali per ascoltare musica, ricevere mail e così via, i processori ARM stanno vivendo una seconda giovinezza. E, proprio per questo motivo, sono Iem blem a dei cosiddetti sistemi embedded (almeno per quanto riguarda le applicazioni commerciali). A differenza dei calcolatori che abbiamo sulla nostra scrivania, questi processori sono lette ralmente immersi in sistemi digitali più am pi e la loro attività è dedicata ai sistemi di cui fanno parte. N aturalm ente i più recenti m odelli A R M sono allineati con le scelte archi tetturali più avanzate come ad esempio lorganizzazione multi-core. D altro canto, l’analogo riferimento C ISC è costituito dalla nuova famiglia multi-core Intel. U n a ltra piccola, m a im p o rtan te novità di q uesta edizione è l’inserim ento di un A ppendice che tratta gli assemblatori. Assembler e loader sono l’anello di congiunzio ne tra l’am biente di sviluppo e quello esecutivo. M olto spesso, purtroppo, gli studenti non colgono appieno la differenza tra questi due mondi. Ecco dunque che l’argom ento meri ta particolare attenzione. A ncora dal punto di vista didattico, va detto che il libro è uno strum ento prezioso vuoi per il docente, vuoi per lo studente. Gli argom enti sono, com e sempre, organizzati m olto bene e ogni capitolo contiene un puntatore a siti web che contengono im portanti informazioni per gli studenti e per i professionisti che vogliono approfondire le proprie co noscenze. Prof. Ottavio M . DAntona Dipartimento di Informatica e Comunicazione Università degli Studi di M ilano
Prefazione
Obiettivi I contenuti di questo libro vertono sulla struttura e la funzione dei calcolatori, allo scopo di presentare, nel m odo più chiaro ed esauriente, la natura e le caratteristiche dei m oder ni sistemi di elaborazione. Q uesto obicttivo rappresenta per m olti versi una vera e propria sfida. Innanzi tutto, esiste uncnorm e gamma di prodotti che possono vantare a pieno titolo la definizione di calcolatore: dai più economici microprocessori su un unico chip ai supercomputer da de cine di milioni di dollari. E questa estrema varietà si presenta non solo nei costi, m a anche nelle dimensioni, nelle prestazioni e nelle applicazioni. In secondo luogo, i continui c re pentini cam biam enti che da sempre caratterizzano la tecnologia non accennano ad arre starsi. Trasformazioni che riguardano tu tti gli aspetti dell’inform atica, a partire dalla tec nologia dei circuiti integrati fino ad arrivare al sempre più frequente uso di tecniche di organizzazione parallela. N onostante la varietà e la mutevolezza della materia, alcuni concetti fondam entali trovano coerente applicazione in ogni campo. L’applicazione di tali concetti dipende dal lo stato attuale della tecnologia e dagli obiettivi di rapporto tra costi e prestazioni, stabi liti dal progettista. L’intento del libro e quello di fornire un’esauriente trattazione dei fon dam enti di organizzazione e arch itettu ra degli elaboratori in relazione alle odierne problem atiche d i progettazione. Il so ttotitolo suggerisce il tema e !’approccio scelti. È sempre stato im portante pro gettare sistemi informatici per ottenere alte prestazioni; ma mai come ora tale vincolo è sta to così fondam entale e difficile da soddisfare. Stanno crescendo rapidamente tu tte le prin cipali caratteristiche di prestazione dei sistemi di elaborazione, incluse la velocità del processore, la velocità della memoria, la sua capienza c la velocità di trasferimento dati. E, per giunta, a ritm i differenti. Ciò rende difficile concepire un sistema bilanciato, in grado di massimizzare le prestazioni e l’utilizzo di tu tti gli elementi. Così, la progettazione dei cal colatori diventa sempre più un gioco in cui si apportano modifiche alla struttura e alla fun zione di una specifica area per compensare un calo di prestazioni in un’altra area. Avremo m odo di apprezzare com e questa sfida venga affrontata in numerose scelte progettuali. Un calcolatore, come ogni sistema, consiste di un insieme di com ponenti intercon nessi tra loro. Il sistema è meglio caratterizzato in term ini di struttura (il m odo in cui i coni-
xvi
Prefazione
ponenti sono connessi) e di funzione (le operazioni svolte dai singoli componenti). Inoltre, l’organizzazione degli elaboratori è gerarchica. Ogni componente principale può essere me glio descritto scomponendolo a sua volta nei suoi principali sottocomponenti e descri vendo struttura e funzione di questi ultimi. Per chiarezza e comprensibilità, l’organizza zione gerarchica è descritta nel libro con un approccio top-down: ♦ calcolatore, i cui componenti principali sono il processore, la memoria e ΓΙ/Ο ♦ processore, i cui componenti principali sono l’unità di controllo, i registri, Punirà aritmetico-logica e l’unità di esecuzione delle istruzioni ♦ unità di controllo: emette segnali di controllo per l’operazione e la coordinazione di tutti i componenti del processore. L’implementazione della microprogrammazionc chc viene tradizionalmente utilizzata prevede che i componenti principali siano la memoria di controllo, i circuiti di scquenzializzazione delle microistruzioni e i re gistri. Al giorno d’oggi la microprogrammazione riveste un ruolo minore, pur rima nendo un im portante tecnica di implementazione. L’obiettivo è quello di presentare il materiale in uno stile che illustri i nuovi contenuti in un contesto chiaro. Chiesto dovrebbe ridurre al m inimo la possibilità che il lettore “perda l’orientamento”, fornendo nel contempo maggiori stimoli rispetto a un approccio bottomuPIn tutta la trattazione, gli aspetti dei sistemi sono visti sia nell’ottica dell’architettura (gli attributi di un sistema visibili al programmatore in linguaggio macchina) sia delPorganizzazione (le unità operative e le loro interconnessioni che realizzano Parchitettura).
Esempi di sistema Qiiesto testo si propone di introdurre il lettore ai principi della progettazione e alle te matiche implcmentative dei principali sistemi operativi. Per questo motivo una trattazio ne puramente concettuale o teorica sarebbe inadeguata. Per chiarire i concetti presentati e rappresentare il ruolo pratico della progettazione, sono state prese in considerazione le seguenti due famiglie di elaboratori. ♦ Architettura Intel x86, quella utilizzata più frequentemente per i calcolatori nonembedded. Gli x86 sono fondamentalmente processori CISC (complex instruction set computer) con alcune caratteristiche RISC (reduced instruction set computer). I mem bri più recenti della famiglia x86 adottano principi di progettazione superscalare e supportano configurazioni a processore multiplo. L’evoluzione delle caratteristiche dell’architettura x86 costituisce un caso di studio dell’evoluzione della maggior par te dei principi di programmazione dell’architettura dei computer. ♦ ARM, probabilmente il processore embedded più diffuso, utilizzato nei telefoni cel lulari, iPod, apparecchiature di sensori remoti e in molti altri casi. ARM è essenzial mente un sistema RISC. Anche i membri più recenti della famiglia ARM adottano principi di progettazione superscalare e supportano configurazioni a processore mul tiplo. Molti, ma non tutti gli esempi utilizzati, sono presi da queste due famiglie di elaboratori. Numerosi altri sistemi, sia contemporanei sia storici, forniscono esempi delle importanti caratteristiche di progettazione delParchitettura degli elaboratori.
Prefazione
χνίί
Struttura del testo Il libro c organizzato in cinque parti. ♦ Panoramica ♦ Sistema di elaborazione ♦ CPU, l’unità centrale di elaborazione ♦ Unità di controllo ♦ Organizzazione parallela, incluse le organizzazioni multiprocessore. Il testo include anche molti supporti didattici, tra cui il ricorso a simulazioni interattive e nu merose figure e tabelle per esemplificare e chiarire la trattazione. Ogni capitolo comprende una lista di parole chiave, domande di revisione, esercizi, suggerimenti per ulteriori letture e siti web consigliati. Il libro comprende inoltre un esteso glossario e una bibliografia.
Destinatari del testo Il testo è concepito sia per lam bito universitario sia per quello professionale. Come libro di testo, è pensato per corsi accademici e di specializzazione - semestrali o annuali - in informatica, ingegneria informatica e ingegneria elettronica. Per il professionista, il testo costituisce un utile manuale di riferimento e può essere un valido ausilio per I autoapprendimento.
Materiale didattico di supporto Collegandosi alla nostra pagina del catalogo on-line h ttp :// h p e .p e a rs o n .it/s ta llin g s , stu denti e docenti potranno scaricare gratuitamente TAppendice C che contiene gli ele menti di base dcllclcttronica digitale. Le porte logiche elementari (AND, O R, N O T ,...) e i più semplici circuiti combinatori e sequenziali sono gli atomi e le molecole del tes suto con cui è realizzato Thardware di tutti i sistemi di elaborazione delTinformazione. I docenti che adottano il testo avranno accesso ai seguenti supporti didattici (in lin gua inglese) : ♦ Solutions Manual: soluzioni alle domande di revisione e ai problemi di ogni capi tolo. ♦ Projects Manual : proposte di progetti per tutte le categorie sottoelencate. ♦ Slide in PowerPoint: una serie di slide per ogni capitolo, adatte a essere utilizzate durante la lezione. ♦ File PDF: riproduzione di tutte le figure e tabelle presenti nel libro. ♦ Test bank: vari test di tipo vero/falso, a scelta multipla e domande e risposte da com pletare. Per effettuare il download di questi file è necessario collegarsi al seguente link: h t tp :// w w w .p e a rs o n h ig h e re d .c o m /s ta llin g s /
e seguire le procedure di registrazione.
xviii
Prefazione
Servizi Internet per insegnanti e studenti Esiste un sito web che fornisce supporto a studenti e insegnanti che usano questo libro. Il sito contiene collegamenti ad altri siti interessanti e una serie di documenti utili. La pagi na web ha indirizzo: h ttp ://w illia m s ta llin g s.c o m /C O A /C O A 8 e .h tm l
E stata istituita una mailing list grazie alla quale i docenti che adottano il libro possono scambiare informazioni, suggerimenti e domande, tra loro e con l’autore. Non appena ver ranno individuati errori di stampa o di altra natura, verrà pubblicata un’errata corrige sul sito: W illia m S ta llin g s .c o m
E inoltre attivo il sito per gli stu d en ti di inform atica: http://w w w .W illiam S tallin g s.co m /S tu d en tS u p p o rt.h tm l
Simulazioni interattive Una novità di questa edizione sono le simulazioni interattive, che costituiscono un effica ce strumento di comprensione per le complesse caratteristiche di progettazione di un mo derno calcolatore. Per illustrare le funzioni chiave e gli algoritmi dell’organizzazione dei cal colatori e del progetto di architetture vengono utilizzate venti simulazioni interattive, segnalate da un’icona che indica la disponibilità di una simulazione interattiva online. Le simulazioni permettono di definire le condizioni iniziali, fungendo quindi da base per i compiti da assegnare agli studenti. Il manuale del docente include una serie di esercizi, uno per ogni animazione. Ogni compito è costituito da una serie di problemi specifici che possono essere assegnati allo studente. Le simulazioni, suddivise capitolo per capitolo e in sequenza, sono reperibili attra verso il seguente percorso: h ttp :// w w w .W illia m S ta llin g s .c o m / C O A /A n im a tio n /L in k s .h tm l
Novità dell'ottava edizione Nei quattro anni intercorsi dalla pubblicazione della precedente edizione di questo libro l’informatica ha assistito a innovazioni continue. In questa nuova edizione cerchiamo di co gliere tali cambiamenti mantenendo nel contempo una trattazione vasta ed esauriente del l’intero argomento. A questo scopo, la precedente edizione è stata attentamente rivista da un gran numero di docenti di informatica e da molti professionisti del campo. Di conse guenza, in molti punti l’esposizione è diventata più chiara e concisa e le immagini sono sta te migliorate. Inoltre, sono stati aggiunti parecchi esercizi già sperimentati sul campo. Oltre a queste sottigliezze, volte a migliorare l’aspetto pedagogico e la funzionalità del testo, sono state apportate sostanziali variazioni in tutto il libro. Si è mantenuta ap prossimativamente la stessa organizzazione dei capitoli, anche se la maggior parte del ma teriale è stata rivista e sono stati apportati numerosi ampliamenti. Ecco alcuni tra i più significativi. ♦ Simulazione interattiva. La simulazione fornisce un efficace strumento per com prendere i complessi meccanismi di un moderno elaboratore. L’ottava edizione con tiene 20 strumenti di simulazione interattiva, basati sul Web, che coprono argomen
Prefazione
ti quali memoria cache, memoria centrale, I/O , predizione dei salti, pipelining delle istruzioni ed elaborazione vettoriale. In alcuni punti del libro viene evidenziata la di sponibilità di una simulazione, in modo che lo studente ne faccia uso nel momento più appropriato. ♦ Processori embedded. Lottava edizione tratta anche la tematica dei processori em bedded e della loro progettazione specifica. L’architettura ARM viene utilizzata co me esempio. ♦ Processori multicore. Questa edizione si occupa di quello che è al momento il nuo vo sviluppo nell’architettura degli elaboratori, ovvero l’utilizzo di processori multipli su un singolo chip. Il Capitolo 18 e dedicato interamente a questo argomento. ♦ Memoria cache. Il Capitolo 4, dedicato completamente a questo tema, è stato am piamente rivisto, aggiornato e ampliato per offrire una più completa copertura tec nica e migliorarne il carattere pedagogico grazie all’utilizzo di numerose immagini e agli strumenti di simulazione interattiva. ♦ Valutazione delle prestazioni. Nel Capitolo 2 viene ampliato significativamente il discorso relativo alla valutazione delle prestazioni, toccando anche il tema dei ben chmark e un’analisi della legge di Amdahl. ♦ Linguaggio Assembly. Una nuova appendice (Appendice B) si occupa del linguag gio Assembly e degli assemblatori. ♦ DDR-SDRAM . La D D R, in particolare D D R 2 e DDR3, è diventata la tecnologia dominante della memoria centrale per i desktop e per i server. La tecnologia D D R viene illustrata nel Capitolo 5. ♦ Nastro LTO. LTO (linear tape open) è diventato il formato “super tape” più vendu to ed è ampiamente utilizzato per sistemi di elaboratori grandi e piccoli, special mente per il backup. Qiiesto argomento viene trattato nel Capitolo 6.
Ringraziamenti Questa nuova edizione ha beneficiato della revisione di molte persone che hanno genero samente messo a disposizione il proprio tempo e la propria esperienza. Un primo ringra ziamento va a quanti hanno rivisto il manoscritto, completamente o in larga misura: Azad Azadmancsh (University o f N ebraska-O m aha), HenryCasanova (UnivcrsityofHawaii)1 Marge Coahran (Grinnell College), AndreeJacobsen (University ofNew Mexico), Kurtis Kredo (University o f California—Davis), Jiang Li (Austin Peay State University), Rachid Manseur (SUNY, Oswego), John Masiyowski (George Mason University), Fuad Muztaba (Winston-Salem State University), Bill Sverdlik (Eastern Michigan University) e Xiaobo Zhou (University o f Colorado Colorado Springs). Un ringraziamento anche alle molte persone che hanno fornito revisioni tecniche det tagliate di singoli capitoli: Tim Mensch, Balbir Singh, Michael Spratte (Hewlett-Packard), Frai^ois-Xavier Peretmere, John Levine, Jeff Kenton, Glen H errm annsfeldt, Robert Thorpe, Grzegorz Mazur (Facoltà di Informatica, Warsaw University o f Technology), Ian Ameline, Terje Mathisen, Edward Brekelbaum (Varilog Research Inc), Paul DeMone e Mikael Tillenius. Vorrei inoltre ringraziare Jon Marsh della ARM per la revisione del ma teriale concernente ARM.
xix
XX
Prefazione
La professoressa Cindy Norris dell’Appalachian State University, il professor Bin Mu della University o f New Brunswick e il professor Kenrick Mock della University o f Alaska hanno contribuito all’elaborazione degli esercizi. Aswin Sreedhar della University o f Massachusetts ha sviluppato gli esercizi di simulazione interattiva e ha scritto la raccolta di test. I professori Miguel Angel Vega Rodriguez, Juan Manuel Sánchez Pérez e Juan Antonio Gómez Pulido, dell’Università dell’Estremadura (Spagna), hanno preparato gli esercizi SMPCache del manuale per i docenti e sono ^li autori della guida per l’utente di SMPCache. Todd Bezenek della University o f Wisconsin e James Stine della Lehigh University hanno preparato gli esercizi SimpleScalar del manuale per i docenti. Todd ha anche scrit to la guida per l’utente di SimpleScalar. Grazie ad Adrian Pullin del Liverpool Hope University College, che si è occupato del le slide in PowerPoint per questo testo. Infine, un ringraziamento a tutti i responsabili della pubblicazione di questo libro, che hanno lavorato come sempre in modo eccellente. Nello specifico, grazie al mio editor Tracy Dunkelberger, alla sua assistente Melinda Haggerty e alla direttrice editoriale Rose Kernan, oltre a Jake Warde della Warde Publishers per il lavoro di revisione e a Patricia M. Daly, responsabile del copy-editing.
Note sull'autore William Stallings ha apportato un contributo unico allo studio del vasto campo delle ar chitetture dei calcolatori e delle reti digitali. Ha scritto 17 libri sull’argomento, che salgo no a 42 contando riedizioni e revisioni. I suoi lavori sono apparsi in numerose pubblica zioni del TACM e della IEEE, tra cui Proceedings o f the IEEE e A C M Computing Reviews. Per dieci volte ha ricevuto il premio per il miglior libro di testo di informatica da par te della “Text and Academic Authors Association”. Da più di trentanni nel settore, W illiam Stallings e collaboratore, responsabile tec nico e direttore di molte aziende ad alta tecnologia. H a progettato e implementato suite di protocollo basate su T C P /IP e su OSI per vari calcolatori e sistemi operativi, dai mi crocomputer sino ai mainframe. Svolge inoltre attività di considenza per importanti enti di ricerca statali, società produttrici e utilizzatrici nel campo dell’informatica e aziende che sviluppano software. Ha creato e cura il Computer Scicncc Student Resource Site all’indirizzo h t t p :/ / w w w .W illia m S t a llin g s .c o m / S t u d e n tS u p p o rt .h t m l
Questo sito fornisce documenti e link relativi ad argomenti di interesse generale per stu denti di informatica (e professionisti). E inoltre redattore della rivista “Cryptologia”, de dicata a tutti gli aspetti della crittologia. W illiam Stallings ha conseguito il Ph.D. in informatica presso il M IT e il B.S. in in gegneria elettronica presso la Notre Dame University.
Capitolo 0
Guida alla lettura
Q uesto libro, insieme al sito web che lo integra, tratta una grande vastità di argomenti, la wui panoramica viene delineata nel presente capitolo.
0.1
Profilo del testo
Il libro è organizzato in cinque parti. Parte 1: fornisce una panoram ica dell organizzazione e dellarchitcttura del calcolatore e riguarda il m odo in cui la progettazione dell’elaboratore si è evoluta. Parte 2: esamina i com ponenti principali di un calcolatore e le loro interconnessioni, sia reciproche sia con il m ondo esterno. Q uesta parte include anche una discussione dettagliata della memoria interna ed esterna e d e ll!/O . Infine viene esaminata la re lazione tra l’architettura di un calcolatore e il sistema operativo che si esegue su tale architettura. Parte 3: prende in esame larchitettura interna e l’organizzazione del processore. La se zione inizia con una discussione approfondita dell'aritmetica del calcolatore e p ro segue analizzando l’insieme di istruzioni (instruction set). La parte restante si occupa della stru ttu ra e della funzione del processore, includendo una trattazione degli ap procci RISC e superscalari. Parte 4: discute la struttura interna dell’unità di controllo del processore e l’uso della microprogram m azionc. Parte 5: tratta l’organizzazione in parallelo, incluso il multiprocessing simmetrico e i cluster. Alcuni capitoli c appendici disponibili online sul sito wTeb del libro si occupano di ulteriori argomenti di rilievo per il testo. U n sommario più dettagliato, capitolo per capitolo, è presente all’inizio di ogni parte.
Capitolo 0 - Guida alla lettura
Questo testo si propone di familiarizzare il lettore con i principi della progettazione e con le tematiche di implementazione della moderna organizzazione e architettura degli elaboratori. Per questo, una trattazione puramente concettuale o teorica sarebbe inade guata. Per chiarire e rafforzare i concetti presentati vengono quindi utilizzati esempi di macchine di diverso tipo. Molti esempi, ma non tutti, sono tratti da due famiglie di ela boratori: la famiglia Intel x86 e la famiglia ARM [advancedRISC machine). Insieme, que sti due sistemi rappresentano gran parte delle tendenze attuali dell’architettura degli ela boratori- Intel x86 è essenzialmente un elaboratore con set di istruzioni complesso (CISC, complex instruction set computer) con alcune caratteristiche RISC (reduced instruction set computer), mentre ARM è sostanzialmente un sistema RISC. Entrambi i sistemi adottano principi di progettazione superscalare e supportano configurazioni a processore multiplo.
0.2
Percorso per lettori e docenti
Questo libro presenta il materiale con un approccio top-down. Come discuteremo più det tagliatamente nel Paragrafo 1.2 un elaboratore può essere visto come una struttura gerar chica. Al livello più alto si trovano i componenti principali degli elaboratori: processore, I/O , memoria, periferiche. La Parte 2 esamina queste componenti e le analizza nel detta glio, fatta eccezione per il processore. Questo approccio permette di intuire quali sono i requisiti funzionali esterni che dettano l’architettura del processore, introducendo così il passaggio alla Parte 3, in cui il processore viene esaminato in dettaglio. La Parte 2 costrui sce il contesto che permette di comprendere perché nella progettazione devono essere prese le decisioni che perm ettono al processore di supportare il funzionamento comples sivo del sistema. In seguito, nella Parte 4, ci soffermiamo sull’unità di controllo, ovvero il cuore del processore. Anche la progettazione di questa unità può essere spiegata al meglio nel contesto della funzione che esplica nell’ambito del processore. Infine, la Parte 5 pren de in considerazione sistemi con processori multipli, inclusi cluster, computer multiprocessore e computer multicore.
0.3
Internet e risorse web
Su Internet e nel Web si trovano molte risorse a supporto di questo libro e per aiutare i let tori a mantenersi aggiornati sugli sviluppi di questa materia.
Siti web per questo libro Per q u e sto
lib ro è s ta ta p re d is p o s ta u n ’a p p o s ita p a g in a w eb a ll’in d iriz z o h ttp ://w w w .W illiam S tallin g s.co m /C O A 8 e.h tm l. All in te rn o del sito w eb sarà p re se n tata e all’o c co rren z a a g g io rn ata l’erra ta corrige. Il le tto re è p re g a to di seg n alare v ia e-m ail o g n i e rro re ris c o n tra to . Sempre all’in d iriz zo http ://w w w .W illiam S tallin g s.co m si trova l’errata co rrig e d ei m ici altri libri.
L’A utore è anche responsabile del C om puter Science Student Resource Site Lo scopo di tale sito è forni re documenti, informazioni e link utili per studenti di informatica c professionisti. ( h t tp :/ / w w w .W illia m S t a llin g s .c o m / S t u d e n t S u p p o r t .h t m l) .
0.3 Internet e risorse web
I collegamenti sono organizzati in sei categorie. ♦ Matematica: include un ripasso della matematica di base, un manuale sintetico sul la teoria delle code, un elementare trattato di sistemi numerici e utili collegamenti a siti web di natura matematica. ♦ Come fare: consigli e suggerimenti per risolvere gli esercizi, scrivere rapporti tecni ci e approntare presentazioni tecniche. ♦ Risorse di ricerca: collegamenti a im portanti raccolte di documenti, rapporti tec nici e fonti bibliografiche. ♦ Miscellanea: ima serie di documenti e collegamenti utili. ♦ Carriere in ambito informatico: link e documenti utili per coloro che desiderano intraprendere una carriera nel settore informatico. ♦ Umorismo e altre disgressioni: è un bene distrarsi dal lavoro di tanto in tanto.
Altri siti web Airinterno dei capitoli, nel paragrafo Letture e siti web consigliati, verranno segnalati spe cifici siti che forniscono informazioni relative agli argomenti del libro. Poiché gli indiriz zi web tendono a cambiare frequentemente, non sono stati inclusi nel libro, ma sono di sponibili nel sito web del testo. Altri link, non citati nel libro, verranno aggiunti sul sito web a tempo debito. Ecco un elenco di siti web di interesse generale, collegati al tema dell’organizzazione e dell’architettura del calcolatore. ♦ W W W Com puterArchitecture Home Page: un esauriente indice di informazio
ni rilevanti per ricerche nel campo dell’architettura, inclusi gruppi e progetti, orga nizzazioni tecniche, letteratura, lavoro e informazioni commerciali. ♦ CPU Info Center: informazioni su processori specifici, compresi documenti tecni ci, informazioni sul prodotto e ultime novità. ♦ Processor Emporium: raccolta di informazioni interessanti e utili. ♦ ACM Special Interest Group on Computer Architecture: informazioni su atti vità e pubblicazioni del gruppo SIGARCH. ♦ IEEE Technical Com m ittee 011 Computer Architecture: la newsletter T C AA.
Newsgroup USENET Molti newsgroup U SEN ET si occupano di aspetti dellorganizzazione e dell’architettura del calcolatore. Com e in tutti i gruppi di questo tipo, si riscontra un alto rapporto segna le-rumore, ma vale la pena cercare un gruppo che soddisfi le proprie esigenze.
Capitolo 0 - G uida alla lettura
I newsgroup più interessanti sono: ♦ comp.arch. : un interessante newsgroup sul l’architettura dei calcolatori; ♦ comp.arch.arithmetic: dove sono affrontati gli standard e gli algoritmi numerici-del calcolatore; ♦ comp.arch.storage: tratta specifici prodotti e problemi pratici legati al loro uso; ♦ comp.parallel: dedicato alle applicazioni parallele.
Parte 1
Panoramica Argomenti La Parte 1 fornisce basi e contesto degli argomenti affrontati nel libro. Vengono presen tati i concetti fondamentali dell’organizzazione e dell’architetturadel calcolatore.
Percorso Capitolo 1 - Introduzione U capitolo affronta il concetto di calcolatore come sistema gerarchico. Un elaboratore può essere visto come una struttura di componenti e la sua funzione descritta nei termini della funzione globale dei suoi com ponenti in cooperazione. Ogni componente, a sua vol ta, può essere descritto nei termini della propria struttura interna e funzione.
Capitolo 2 - Evoluzione e prestazioni del calcolatore La storia della tecnologia informatica costituisce un interessante percorso per introdurre i concetti basilari di organizzazione e architettura del calcolatore. Inoltre, vengono qui de scritte le tendenze tecnologiche che hanno reso le prestazioni il principale obiettivo nella progettazione dei sistemi di elaborazione e presentate in anteprima le varie tecniche e stra tegie adottate per ottenere prestazioni bilanciate ed efficienti.
8
Panoramica ♦ Capitolo 1 - Introduzione
Esempi di attributi architetturali sono il repertorio delle istruzioni, il numero di bit usati per rappresentare i vari tipi di dato (come numeri interi o caratteri), i meccanismi di I /O e le tecniche di indirizzamento della memoria. Gli attributi organizzativi includono gli aspetti hardware trasparenti al programmatore (come i segnali di controllo, le interfacce tra il calcolatore e le periferiche e la tecnologia delle memorie). Per esempio, decidere se un modello debba o non debba avere un’istruzione di m ol tiplicazione è un problema di progettazione architetturale, mentre è un problema di or ganizzazione decidere se quell’istruzione venga implementata da un circuito dedicato o tra mite somme ripetute. La decisione in m erito può essere basata sulla previsione della frequenza d’uso dell’istruzione di moltiplicazione, sulla velocità comparata dei due ap procci, sul costo c sulla dimensione fisica di un’unità di moltiplicazione. La distinzione tra architettura e organizzazione c stata ed è di fondamentale rilevan za. Molti produttori di calcolatori offrono una famiglia di modelli, tutti caratterizzati dal la stessa architettura ma con differenti organizzazioni. D i conseguenza, i vari modelli pre sentano prezzi differenti e diverse prestazioni. Inoltre, una particolare architettura può perdurare per m olti anni e caratterizzare un buon numero di modelli, mentre la sua orga nizzazione cambia al variare della tecnologia. Un esempio importante è rappresentato dal l’architettura àeìYlBM System/370, introdotta per la prima volta nel 1970, che ha caratte rizzato svariati modelli. L’acquirente con modeste pretese poteva comprare un modello più lento ed economico, ma al crescere delle esigenze poteva passare a modelli più costosi e ve loci senza dover abbandonare il software già sviluppato. Nel corso degli anni IBM ha in trodotto svariati nuovi modelli basati su tecnologie superiori, offrendo all’acquirente mag giore velocità, minor costo o entrambe le cose. I modelli più recenti hanno mantenuto la stessa architettura, in m odo da proteggere gli investimenti software da parte degli utenti. Incrcdibilmente, larchitettura del System/370 è sopravvissuta, con qualche ritocco, fino a oggi come architettura della linea di prodotti mainframe di IBM. Nella classe dei microcomputer la relazione tra architettura e organizzazione è molto stretta. I cambiamenti tecnologici non solo influenzano l’organizzazione, ma implicano l’introduzione di architetture più potenti e complesse. In questo caso il vincolo di com patibilità tra generazioni successive è meno stringente. Dunque, esiste una maggiore inte razione tra le decisioni di progettazione architetturale e organizzativa. Un interessante esempio a tale riguardo è dato dai sistemi RISC, che esamineremo nel Capitolo 13. Questo libro analizza sia l’organizzazione sia l’architettura dei calcolatori, ma l’at tenzione si concentra maggiormente sul primo aspetto. Tuttavia, poiché l’organizzazione di un elaboratore deve essere progettata per implementare particolari specifiche architet turali, una trattazione completa dell’organizzazione richiede anche un dettagliato esame del l’archi tettura.
1.2
Struttura e funzione
Un calcolatore è un sistema complesso: gli odierni elaboratori contengono milioni di componenti elettronici elementari. Come è possibile descriverli con chiarezza? La chiave risiede nel riconoscere la natura gerarchica dei calcolatori [SIMÜ96]. Un sistema gerar chico è un insieme di sottosistemi correlati, ciascuno dei quali, a sua volta, è di struttura gerarchica, fino a quando non si giunge al livello più basso dei sottosistemi elementari.
1.2 Struttura e funzione
Questa natura gerarchica dei sistemi complessi è essenziale sia per la loro progetta zione sia per la loro descrizione. Il progettista ha bisogno, di volta in volta, di trattare con un particolare livello del sistema. Il com portam ento a ogni livello dipende solo da una ca ratterizzazione semplificata c astratta del sistema al livello immediatamente più basso. A ogni livello il progettista ha a che fare con struttura e funzione. ♦ Struttura: il modo in cui i com ponenti sono correlati. ♦ Funzione: Fazione di ciascun singolo componente come parte della struttura. In termini di descrizione si può partire dal basso e costruire una descrizione completa, op pure partire da una visione d’insieme e scomporre il sistema nei suoi sottocomponcnti. Esperienze compiute in molti campi suggeriscono che il m etodo top-down è il più chiaro ed efficace [WE1N75]. Pertanto, in questo libro il sistema rappresentato dal calcolatore sarà descritto dalI alco verso il basso: dai componenti principali di un elaboratore (descrivendone struttu ra e funzione) via via verso i livelli inferiori della gerarchia. La parte restante del paragrafo fornisce ima succinta panoramica di questo programma.
Funzione Sia la struttura sia il funzionamento di un calcolatore sono essenzialmente semplici. La Figura 1.1 illustra le funzioni basilari che un elaboratore può eseguire. In termini genera li, esse sono quattro: ♦ elaborazione dei dati {data processing) ♦ memorizzazione dei dati (data storage) ♦ trasmissione dei dati (data movement) ♦ controllo (contro!) II calcolatore, ovviamente, deve essere in grado di elaborare i dati. Qiiesti ultimi si posso no presentare in ima grande varietà di forme, e la gamma di requisiti per il loro trattamento è vasta. Tuttavia, vedremo che esistono solo pochi, fondamentali metodi (o tipi) di ela borazione dati. Risulta, inoltre, fondamentale che un calcolatore memorizzi i dati. Anche se l’elabo ratore sta trattando i dati “al volo” (ad esempio, i dati entranti vengono elaborati e gene rano un risultato immediatamente disponibile), il calcolatore deve immagazzinare tem poraneamente quelle parti di dati che di volta in volta vengono elaborate. Dunque, ci deve essere quanto meno una funzione di memorizzazione a breve termine dei dati. Fatto ugual mente importante, il calcolatore esegue una funzione di memorizzazione a lungo termi ne. I file di dati vengono immagazzinati nell’elaboratore per successivi reperimenti e ag giornamenti. Il calcolatore deve essere in grado di trasferire dati con il mondo esterno. L’ambiente operativo dell’elaboratore consiste in meccanismi che operano sia come sorgenti sia come destinazioni dei dati. Quando questi vengono ricevuti o trasmessi a un dispositivo (devi ce) direttam ente connesso al calcolatore, il processo è detto di input-output (I/O ) e il di-
Panoramica ♦ Capitolo 1 - Introduzione
Ambiente operativo (origine e destinazione dei dati)
Figura 1.1
V isio n e fu n z io n a le del calco la to re.
spositivo è detto periferica [peripheral). Quando i dati vengono trasmessi su lunghe di stanze, da o verso un dispositivo remoto, il processo viene chiamato comunicazione di da ti (data communication) . Infine, ci deve essere il controllo di queste tre funzioni. In definitiva, questo control lo viene esercitato da chi determina le istruzioni del calcolatore. Airinterno dell’elaboratore è presente un’unità di controllo che, in risposta alle istruzioni, ne amministra le risor se c orchestra le prestazioni delle sue parti funzionali. A questo livello generale di trattazione, il numero di possibili operazioni che posso no essere effettuate è esiguo. La Figura 1.2 illustra i quattro possibili tipi di operazioni. Il calcolatore può funzionare come dispositivo di trasferimento dati (Figura 1.2a), sempli cemente spostando i dati da una periferica o da una linea di comunicazione a un’altra, e può anche lavorare come dispositivo di memorizzazione (Figura 1.2b), con dati trasferiti dal l’esterno verso la memoria dell’elaboratore (scrittura), e viceversa (lettura). Gli ultimi due diagrammi m ostrano operazioni inerenti all’elaborazione dei dati, sia immagazzinati (Figura 1.2c) sia in circolazione tra memoria e ambiente esterno (Figura 1.2d).
1.2 Struttura e funzione
Figura 1.2
O p erazio ni del calco latore.
Panoramica ♦ Capitolo 1 - Introduzione
Figura 1.3
II calco latore.
La precedente discussione può sembrare eccessivamente generica. È certamente possibi le, perfino al livello più alto della struttura del calcolatore, differenziare una varietà di fun zioni ma, per citare [SIEW82] : C e ben poco da fare per adattare un calcolatore al compito da eseguire. Il mo tivo profondo risiede nella natura assolutamente generale dei calcolatori in cui Tunica forma di specializzazione funzionale avviene al momento della pro grammazione e non del progetto. Struttura
La Figura 1.3 costituisce la rappresentazione più semplice possibile di un calcolatore. L’elaboratore interagisce in qualche modo con il proprio ambiente esterno. In generale, tut ti i collegamenti con l’ambiente esterno possono essere classificati come dispositivi peri ferici o linee di comunicazione. In seguito tratteremo entrambi i tipi di collegamento. Tuttavia, l’interesse del libro è incentrato sulla struttura interna del calcolatore, che è mostrata al livello più alto nella Figura 1.4. Si riconoscono quattro componenti strutturali principali: ♦ unità centrale di elaborazione (CPU), che controlla l’operato del calcolatore e ne esegue le funzioni di elaborazione (spesso è identificata con il processore); ♦ memoria centrale, che immagazzina i dati; ♦ I / O, che trasferisce i dati tra calcolatore c ambiente esterno; ♦ interconnessioni di sistema, che si occupano della comunicazione tra CPU, me moria centrale e I /O. Un esempio comune di interconnessione di sistema è il bus di sistema, composto da una serie di conduttori ai quali si collegano tutti gli altri com ponenti. Di ciascuno dei componenti citati se ne trovano imo o più esemplari. Tradizionalmente troviamo una singola CPU, ma nella Parte 5 del testo verranno presentati e discussi alcu ni problemi di progettazione relativi ai sistemi multiprocessore.
1.2 Struttura e funzione
'X \ UNITA DI 7 Logica di \ CONTROLLO scqucnzializ- ] /azione
I----_
/^ R eg istri ' Idi controllo e ^decodificatori
Memoria di controllo
Figura 1.4
II calco la to re: struttura di livello superiore.
Tutti questi componenti saranno esaminati in dettaglio nella Parte 2. Tuttavia, per i no stri scopi, l’oggetto più interessante, e per certi versi più complesso, è la CPU, i cui princi pali componenti sono: ♦ unità di controllo, che controlla il susseguirsi delle operazioni; ♦ unità aritmetico-logica (ALU), responsabile della elaborazione dei dati; ♦ registri, che costituiscono la memoria interna della CPU; ♦ interconnessioni, meccanismi che attuano la comunicazione tra unità di control lo, ALU e registri.
Panoramica ♦ Capitolo 1 - Introduzione
Ciascuno di questi componenti sarà esaminato in dettaglio nella Parte 3, dove vedremo che la complessità viene incrementata dall’uso di tecniche di parallelismo e pipelining. Infine, evidenziamo che tra i vari approcci all’implementazione dell’unità di controllo, il più co mune è la microprogrammazione. In sostanza, un’unità di controllo microprogrammata opera eseguendo microistruzioni che ne definiscono la funzionalità. Con questo approc cio la struttura dell’unità di controllo (che verrà esaminata nella Parte 4) può essere rap presentata come nella Figura 1.4.
1.3
Parole chiave, domande di revisione
Parole chiave
architettura di un calcolatore bus di sistema input-output (I/O) memoria centrale
organizzazione di un elaboratore processore registri
unità aritmetico-logica (ALU) unità centrale di elaborazione (CPU) unità di controllo
Domande di revisione 1. 1 Qual è in termini generici la distinzione tra Iorganizzazionc di un calcolatore e la sua architettura? 1.2 Qual è la differenza tra struttura e funzione di un calcolatore? 1.3 Quali sono le quattro funzioni principali di un calcolatore? 1.4 Elencate e descrivete brevemente le principali componenti della struttura di un cal colatore. 1.5 Elencate e descrivete brevemente le principali componenti strutturali di un pro cessore.
Capitolo 2
Evoluzione e prestazioni del calcolatore
Punti chiave ♦
L’evoluzione dei Evoluzione e prestazioni del calcolatorecalcolatori è stata carat terizzata Hallaum ento della velocità del processore, dalla dim inuzione delle di m ensioni dei com ponenti e dall’aum ento della dimensione della m em oria e del la velocità di I/O .
♦
Un fattore responsabile del grande increm ento di velocità del processore è rap presentato dalle m inori dimensioni dei suoi com ponenti. Tuttavia, il vero guada gno in velocità degli ultimi anni deriva dall’organizzazione del processore, con l’in tenso uso di tecniche di pipelining, di esecuzione parallela e di esecuzione speculativa, che anticipa l’esecuzione di istruzioni che potrebbero essere successi vamente richieste. Queste tecniche m irano a m antenere il processore im pegnato per il m aggior tem po possibile.
♦
Un problem a critico nella progettazione dei sistemi di elaborazione è il bilancia m ento delle prestazioni dei vari elementi, di m odo che i guadagni di prestazione in un'area non siano penalizzati da un ritardo in altre. Per compensare questo sfa sam ento vengono utilizzate varie tecniche, tra cui cache, bus di m em oria più lar ghi e chip di m em oria più sofisticati.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
I
niziam o il nostro studio sui calcolatori presentandone brevemente la storia che, oltre a risidtarc interessante di per se stessa, fornisce anche una panoramica della struttura e del la funzione del calcolatore. Affronteremo, in seguito, il problema delle prestazioni. La constatazione che è necessario un utilizzo bilanciato delle risorse del calcolatore fornisce un contesto utile in tutto il libro. Infine, daremo un rapido sguardo all’evoluzione dei due sistemi adottati nel testo come esempi chiave: le famiglie Intel x86 e ARM.
2.1
Breve storia dei calcolatori
La prima generazione: i tubi a vuoto EN lAC
Il Breve storia dei calcolatoriprimo calcolatore elettronico digitale al m ondo è stato ENIAC (Electronic Numerical IntegratorAnd Computer), progettato e costruito presso la University o f Pennsylvania. Il progetto ha avuto origine in risposta alle necessità belliche degli Stati Uniti durante la Seconda Guerra Mondiale. Il Ballistics Research Laboratory (BRL)1responsabile dello studio della gittata e delle tabelle di tiro delle nuove armi, ave va difficoltà nel produrre tali tabelle con precisione e in tempi ragionevoli. Senza le tabel le di tiro, le nuove armi erano del tutto inutili. Il BRL assunse oltre duecento persone per risolvere le equazioni balistiche necessarie usando calcolatrici da scrivania, ma la prepara zione delle tabelle per ima singola arma avrebbe occupato una persona per molte ore, per fino per giorni. John Mauchly, un professore di ingegneria elettrica presso la University o f Pennsylvania, e John Eckert, un suo allievo, proposero di costruire per queste applicazio ni un calcolatore usando la tecnologia dei tubi a vuoto. Nel 1943 l’esercito accettò la proposta: iniziò così il lavoro su E N IAC. La macchina risultante era enorme: pesava 30 tonnellate, occupava un’area di circa 450 m 2, conteneva più di 18000 tubi a vuoto e consumava 140 Kilowatt di energia. ENIAC era però più rapida di qualsiasi altro elaboratore elettromeccanico, essendo capace di 5000 addizioni al secondo. EN IA C era una macchina decimale e non binaria, nel senso che i numeri erano rap presentati e manipolati in forma decimale. La sua memoria consisteva di 20 “accumulatori”, capaci di contenere un numero decimale a 10 cifre. Ciascuna cifra era rappresentata da un anello di 10 tubi a vuoto. In ogni dato istante, solo un tubo a vuoto era nello stato ON, rappresentando così una delle 10 cifre. L’inconveniente principale consisteva nella neces sità di dover procedere a una programmazione manuale, impostando interruttori e con nettendo e disconnettendo cavi. Completato nel 1946, troppo tardi per essere utilizzato a scopi bellici, il suo primo compito fu l’esecuzione di complessi calcoli per determinare la fattibilità della bomba a idrogeno. L’adozione con finalità diverse da quelle per cui era stato costruito ne evidenziò, però, la versatilità di applicazione. ENIAC continuò a operare sotto la direzione del BRL fino al 1955. La macchina di von Neumann
Il compito di predisporre e modificare i programmi per ENIAC era estremamente tedio so. Il processo di programmazione avrebbe potuto essere semplificato se il programma fos-
2.1 Breve storia dei calcolatori
CPU Unità centrale di elaborazione
Figura 2.1
Struttura del calco la to re IAS.
se stato rappresentato in una forma adatta per la memorizzazione come per i dati. Così un calcolatore avrebbe potuto prelevare le proprie istruzioni dalla memoria e i programmi avrebbero potuto essere avviati o modificati impostando semplicemente i valori di una por zione di memoria. Questa idea, nota come concetto di programma memorizzato (storcd-progt'am concept), viene solitamente attribuita ai progettisti di ENIAC, c in particolare al matematico John von Neumann, un consulente del progetto ENIAC. Alan Turing sviluppò l’idea quasi contem poraneamente. La prima pubblicazione in merito (1945) contiene la proposta di von Neumann per un nuovo calcolatore: EDVAC (Electronic Disarte Variable Computer). Nel 1946 von Neumann c i suoi colleghi cominciarono la progettazione di un nuo vo elaboratore a programma memorizzato, IAS, presso FInstitute for Advanced Studies di Princeton. Questa macchina, seppure non completata fino al 1952, rappresenta il proto tipo di tutti i successivi calcolatori a uso generale. La Figura 2.1 mostra la struttura generale dell’elaboratore IAS (si confronti con la par te centrale della Figura 1.4). Tale struttura consiste di: ♦ memoria centrale, che contiene dati e istruzioni,1 ♦ unità aritmetico-logica (ALU), in grado di operare su dati binari, ♦ unità di controllo, che interpreta le istruzioni in memoria e le manda in esecuzione, ♦ dispositivi di I /O, azionati dall’unità di controllo.
1 In questo libro, se non altrimenti specificato, il termine istruzione indica un’istruzione macchina che viene diret tamente interpretata ed eseguita da un processore e non un’istruzione in un linguaggio ad alto livello come Ada o C++, che prima di essere eseguita deve essere compilata in una sequenza di istruzioni macchina.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
Questa struttura fu descritta, nelle sue linee generali, nella prima proposta di von Neumann, che riportiamo di seguito [VONN45J. 2.2 Primo. Dato che il dispositivo e principalmente un calcolatore, dovrà eseguire con maggiore frequenza elementari operazioni di aritmetica quali: addizione, sottrazio ne, moltiplicazione e divisione. Dunque, e ragionevole che esso debba contenere or gani specializzati proprio per queste operazioni. Tuttavia, si deve osservare che, mentre questo principio sembra ragionevole, il mo do specifico di realizzarlo richiede un esame più minuzioso [...]. In ogni caso, il di spositivo dovrà presumibilmente avere una parte centrale aritmetica che costituisca la prima parte specifica: CA. 2.3 Secondo. Il controllo logico del dispositivo, ossia la corretta sequenza con cui ese guire le operazioni, può essere effettuato in modo più efficiente da un organo centrale. Se questo dispositivo deve essereflessibile, cioè il più possibile generico, allora occor re fare una distinzione tra le istruzioni specifiche relative a un particolare problema e gli organi di controllo che assicurano che le istruzioni (qualunque esse siano) ven gano eseguite nell’ordine corretto. Le prime devono essere in qualche modo memo rizzate; i secondi sono rappresentati da ben definite parti operative del dispositivo. Tramite la locuzione controllo centrale intendiamo solo questa seconda funzione, e gli organi che la eseguono formano la seconda parte specifica: CC. 2.4 Terzo. Ciascun dispositivo che deve eseguire sequenze di operazioni lunghe e com plesse (e in particolare calcoli) deve avere una memoria considerevole [...]. (b) Le istruzioni che governano un problema delicato possono costituire materiale importante, soprattutto se il codice è specifico, come avviene nella maggior parte dei casi. Questo materiale deve essere memorizzato [...]. In ogni caso, la memoria costituisce la terza parte specifica del dispositivo: M. 2.6 Le tre parti specifiche CA, C C (che insieme formano C) e M corrispondono ai neu roni associativi nel sistema nervoso umano. Rimangono da discutere gli equivalenti dei neuroni sensoriali (afferenti) e motorii (efferenti). Qiiesti rappresentano gli organi di ingresso e uscita del dispositivo [...]. Il dispositivo deve essere dotato della capacità di mantenere contatti in ingresso e uscita (sensoriali e motorii) tramite circuiti dedicati. Questi saranno chiamati mez z i di registrazione esterna del dispositivo: R [...]. 2.7 Quarto. Il dispositivo deve avere organi per trasferire [informazioni] da R alle par ti C e M. Questi organi formano il suo sistema di ingresso, la quarta parte specifica: I. Si vedrà che è meglio eseguire tutti i trasferimenti da R (attraverso I) a M e mai di rettamente da C [...]. 2.8 Q uinto. Ihdispositivo deve avere organi per i trasferimenti [...] dalle sue parti speci fiche C e M a R . Questi organi formano la sua uscita, la quinta parte specifica: 0. Si vedrà ancora una volta che è meglio eseguire tutti i trasferimenti da M (attraverso O) a R e mai direttamente da C. Con rare eccezioni, tutti i calcolatori odierni hanno questa stessa struttura e sono pertan to detti macchine di von Neumann. A questo punto, vale quindi la pena descrivere breve mente le operazioni del calcolatore IAS [BURK46]. Seguendo [HAYE98], terminologia e notazione di von Neumann verranno quindi mutate per adeguarle più strettamente al-
2.1 Breve storia dei calcolatori
Opcode
Indirizzo
Opcode
Indirizzo
(b) Piirola di memoria di tipo istruzione
Figura 2 .2
Formati di m emoria del Tl AS.
I uso moderno; gli esempi e le illustrazioni che accompagnano la trattazione sono basati su quest’ultimo testo. La memoria di IAS consiste di 1000 locazioni, chiamate parole (words), ciascuna di 40 cifre binarie (bit).2 In queste celle sono memorizzati sia i dati sia le istruzioni. I nume ri sono rappresentati in notazione binaria e ogni istruzione è un sequenza di bit. I loro for mati sono mostrati nella Figura 2.2.1numeri sono rappresentati da un bit di segno e da un valore di 39 bit. Una parola di memoria può anche contenere due istruzioni da 20 bit, cia scuna comprendente un codice operativo (opcode) di 8 bit che specifica l’operazione da ese guire e un indirizzo a 12 bit che punta a una delle parole di memoria (numerate da 0 a 999). L’unità di controllo preleva le istruzioni dalla memoria e le esegue una alla volta. Per spiegare quanto detto, è necessario un diagramma strutturale più dettagliato, mostrato nel la Figura 2.3. Questa figura illustra che sia l’unità di controllo sia la ALU contengono cir cuiti di memorizzazione, i registri, definiti come segue. ♦ Memory buffer register (MBR) : contiene une parola che deve essere immagazzinata in memoria, o che è pervenuta alla memoria. ♦ Memory address register (MAR): specifica l’indirizzo della parola di memoria in cui scrivere il contenuto di MBR o che deve essere trasferita in MBR. ♦ Instruction register (IR): contiene gli 8 bit del codice operativo dell’istruzione cor rentemente in esecuzione. ♦ Instruction buffer register (IBR) : contiene temporaneamente l’istruzione destra di una parola di memoria.
2 Non esiste una definizione universale del termine parola. In generale, una parola è una sequenza ordinata di byte o bit che rappresenta l’unità di informazione che può essere memorizzata, trasmessa o elaborata all’interno di un dato computer. Solitamente, se il processore ha mi set di istruzioni a lunghezza fissa, la lunghezza delle istruzioni equivale alla lunghezza di una parola.
F1Snoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
U nità aritm etico-logica (A L U )
U n ità di controllo
Figura 2.3
Struttura esplosa del calco latore IAS.
♦ Program counter (PC): contiene l’indirizzo della prossima coppia di istruzioni da caricare dalla memoria. ♦ Accumulator (AC) e multiplier quotient (M Q): contengono temporaneamente gli operandi e i risultati parziali delle operazioni della ALU. Per esempio, il risultato della moltiplicazione di due numeri da 40 bit c un numero da 80 bit; i 40 bit più si gnificativi vengono memorizzati nell’AC e i meno significativi nel registro M Q l Come mostrato nella Figura 2.4, IAS continua a ripetere il ciclo esecutivo delle istruzioni che consta di due fasi. Durante il ciclo di prelievo (jetch cycle), il codice operativo della suc cessiva istruzione viene caricato nell’IR c la porzione di indirizzo viene caricata nel MAR.
2.1 Breve storia dei calcolatori
M(X) = contenuto della locazione di memoria di indirizzo X (i : j) = bit da i a j
Figura 2.4
D iag ram m a di flusso p a rzia le di un'operazion e del calco la to re IAS.
QiLesta istruzione può essere letta da IBR o può essere ottenuta dalla memoria caricando una parola nel MBR e poi a seguire nell’IBR, nell’IR e nel MAR. Per comprendere la necessità deirindirizzamento indiretto bisogna pensare che que ste operazioni vengono controllate da circuiti elettronici e hanno come effetto l’uso di li nee dati (datapath). Per semplificare l’elettronica, viene usato un solo registro per specifi care gli indirizzi di lettura o scrittura, e un solo registro per contenere il dato da trasferire da o verso la memoria. Qiiando il codice operativo è stato registrato ncll’IR, ha inizio il ciclo di esecuzione (exe cute cycle). Il circuito di controllo interpreta il codice operativo ed esegue l’istruzione, im postando i segnali di controllo appropriati per trasferire i dati o per fare eseguire un’ope razione dalla ALU.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
Tabella 2.1
Istruzioni IAS.
T ipo di istruzione
Codice operativo
R appresentazione sim bolica
D escrizione
Trasferimento dati
00001010
LOAD M Q .
Scrive il contenuto del registro M Q jiell’accuihulatore AC
00001001
LOAD M Q 1M (X)
Scrive il contenuto di M (X) in MQ_
00100001
S T O R M (X )
Scrive il contenuto dcllaccumulatorc in M(X)
00000001
LOAD M (X)
Scrive M (X) nell’accumulatore
00000010
LOAD - M ( X )
Scrive -M (X ) nell’accumulatore
00000011
LOAD |M (X )|
Scrive |M (X )| nell’accumulatore
00000100
LOAD - |M (X )|
Scrive -jM (X )| nell accumulatore
Salto incondizionato
00001101
JU M P M(X,0:19)
Carica l’istruzione dalla metà sinistra di M (X)
00001110
JU M P M (X,20:39)
Carica l’istruzione dalla metà destra di M (X)
Salto condizionato
00001111
JU M P+M (X ,0:19)
Se il numero nellaccum ulatorcè non negativo, carica l’istruzione dalla metà sinistra di M (X)
00010000
JU M P + M (X,20:39)
Se il numero nell accumulatore è non negativo, carica l’istruzione dalla metà destra di M (X)
00000101
A D D M (X )
Somma M (X) ad AC; pone il risultato in AC
00000111
A DD |M (X )|
Somma |M (X )| ad AC; pone il risultato in AC
00000110
SUB M (X)
Sottrae M (X ) da AC; pone il risultato in AC
00001000
SUB |M (X )|
Sottrae [M (X )| da AC; pone il risultato in AC
00001011
M U LM (X )
Moltiplica M (X) per M Qj pone i bit più significativi del risultato in AC e i meno significativi in MQ_
00001100
DIV M (X)
Divide AC per M (X); pone il quoziente in MQ^e il re sto in AC
00010100
LSH
Moltiplica l’accumulatore per 2 (cioè fa scorrere i bit di una posizione verso sinistra)
00010101
RSH
Divide l’accumulatore per 2 (cioè fa scorrere i bit di una posizione verso destra)
00010010
ST O R M (X ,8:19)
Rimpiazza il campo indirizzo sinistro di M (X) con i 12 bit più a destra di AC
00010011
STO R M (X,28:39)
Rimpiazza il campo indirizzo destro di M (X ) con i 12 bit più a destra di AC
Aritmetica
Modifica di indirizzo
Il calcolatore IAS aveva un totale di 21 istruzioni (vedi Tabella 2.1) che possono essere rag' gruppate come segue. ♦ Trasferimento dati: per spostare dati dalla memoria ai registri della A lL U versa) o tra due registri della ALU.
(o
vice
♦ Salto incondizionato: normalmente, l’unità di controllo esegue istruzioni nell or dine con cui sono registrate in memoria. Tale ordine può essere cambiato tramite un’i struzione di salto, il che facilita la ripetizione di operazioni.
2.1 Breve storia dei calcolatori
♦ Salto condizionato : lefFcttuazionc del salto può dipendere da una condizione, il che consente la presenza di punti di decisione. ♦ Aritmetiche: operazioni eseguite dallALU. ♦ Modifica di indirizzo: consente di manipolare gli indirizzi nellALU e poi inserirli in istruzioni da registrare in memoria. Ciò conferisce ai programmi una considere vole flessibilità di indirizzamento. La Tabella 2.1 presenta le istruzioni in forma simbolica, ma in realtà ogni istruzione si uniforma al formato della Figura 2.2b. I primi 8 bit del codice operativo specificano qua le delle 21 operazioni debba essere eseguita. I restanti bit indicano quale delle 1000 loca zioni di memoria debba essere coinvolta nell’esecuzione. La Figura 2.4 mostra esempi di esecuzione di alcune di queste istruzioni. Si noti che ogni operazione richiede un certo numero di passi, alcuni dei quali sono piuttosto elabo rati. La moltiplicazione richiede 39 sotto-operazioni, una per ciascun bit, eccetto quella del bit di segno. Calcolatori commerciali
Gli anni Cinquanta videro la nascita dell'industria dei calcolatori, con due società a do minare il mercato: Sperrv e IBM. Nel 1947 Eckert e Mauchly costituirono la Eckert-Mauchly Computer Corporation, allo scopo di produrre calcolatori. La loro prima macchina di successo fu UNIVAC I (Universal Automatic Computer), che fu com m issionata dall’Ufficio Anagrafe per il Censimento del 1950. La Eckert-Mauehly Com puter Corporation divenne parte della di visione UNIVAC della Sperry-Rand Corporation, che continuò a costruire una serie di successori di UNIVAC I. Questa macchina fu il primo calcolatore commerciale di successo. Come dice il no me stesso, UNIVAC era concepito tanto per applicazioni scientifiche quanto commerciali. Il primo documento di descrizione del sistema elencava - come esempi dei compiti ese guibili - calcoli matriciali, problemi statistici, fatturazioni dei premi per le compagnie di assicurazioni e problemi logistici. U N IV A C II, che presentava una memoria più ampia c prestazioni più elevate rispet to a UNIVAC I, fu immesso sul mercato alla fine degli anni Cinquanta, e mostrava carat teristiche diventate tipiche nell’industria dei calcolatori. Innanzitutto, lo sviluppo della tec nologia consente la costruzione di elaboratori sempre più grandi e potenti. Secondo, i nuovi modelli hanno la proprietà della cosiddetta backward compatibility? Questo signi fica che i programmi scritti per le macchine più vecchie possono essere eseguiti anche su quelle nuove. Tale strategia mira a conservare la propria fetta di mercato: quando un clien te decide di comprare un nuovo calcolatore sarà invogliato a rivolgersi alla stessa società se potrà evitare di gettare al vento i precedenti investimenti sostenuti per il software. La divisione UNIVAC intraprese anche lo sviluppo della serie 1100, che avrebbe do vuto costituire la sua principale fonte di guadagno. Questa serie evidenzia una significati va distinzione per quel periodo. Il primo modello, UNIVAC 1103, e i suoi successori fu
3 Dal punto di vista dei vecchi sistemi lo stesso concetto viene definito upward compatibility.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
rono per molci anni pensaci principalmente per applicazioni scientifiche, caratterizzate da lunghi e complessi calcoli. Altre società si concentrarono su applicazioni commerciali che richiedevano l’elaborazione di un elevato numero di dati testuali. Tale distinzione, ora in larga parte scomparsa, rimase evidente per un ragguardevole numero di anni. IBM, che era il principale produttore di macchine per schede perforate, propose nel 1953 il suo prim o calcolatore elettronico a programma memorizzato: 701, concepito fon damentalmente per applicazioni scientifiche [BASH81]. Nel 1955 IBM introdusse un prodotto affine, 702, che aveva molte caratteristiche adatte alle applicazioni commerciali. Questi furono i primi esemplari della longeva serie di calcolatori 700/7000, con cui IBM divenne il principale produttore di calcolatori.
La seconda generazione: i transistor La prima rivoluzione nel m ondo dei calcolatori elettronici è dovuta alla sostituzione dei tubi a vuoto con i transistor. Il transistor è più piccolo, più economico, dissipa meno ca lore delle valvole, e può essere usato esattamente come le valvole per costruire elaborato ri. A differenza dei tubi a vuoto, il transistor è un dispositivo allo stato solido, fatto di silicio. Il transistor fu inventato nei laboratori di ricerca della Bell nel 1947 e nel decennio successivo provocò una vera e propria rivoluzione elettronica. I primi calcolatori total mente funzionanti a transistor furono immessi sul m ercato verso la fine degli anni Cinquanta. Ancora una volta, IBM non fu la prima società a sfruttare la nuova tecnolo gia. I pionieri furono N C R e, con più successo, RCA, grazie ad alcune piccole macchine a transistor. IBM li seguì a breve con la serie 7000. L’uso del transistor caratterizza la seconda generazione di calcolatori. E prassi con sueta classificare i calcolatori in generazioni, basandosi sulla tecnologia hardware di base adottata (Tabella 2.2). Ogni nuova generazione è caratterizzata da migliori prestazioni computazionali, memorie più capaci e dimensioni inferiori rispetto alla precedente. Ma ci sono anche altre differenze. La seconda generazione vide l’introduzione di unità aritmeti co-logiche e di unità di controllo più complesse, l’uso di linguaggi di programmazione ad alto livello e la fornitura di software di sistema a corredo del calcolatore. La seconda generazione è degna di nota anche per la comparsa della Digital Equipment Corporation (DEC). Fondata nel 1957, D EC proprio in quell anno produsse il suo primo modello: PD P-1. Qiiesto calcolatore diede inizio al fenomeno dei minicom puter, che sarebbero diventati così importanti nella terza generazione. Tabella 2.2 G enerazione
G en e ra zio n i di calco la to ri. D ate approssim ative
Tecnologia
Velocità caratteristica (operazioni al secondo)
1
1946-1957
Tubi a vuoto
40.000
2
1958-1964
Transistor
200.000
3
1965-1971
Piccola e media scala di integrazione
1.000.000
4
1972-1977
Larga scala di integrazione
10.000.000
5
1978-1991
Grande scala di integrazione
100.000.000
6
1991-
Scala ultra-larga di integrazione
1.000.000.000
2.1 Breve storia dei calcolatori
IBM 7094 Dairincroduzione della serie 700 (nel 1952) alla creazione dell’ultimo esemplare della serie 7000 (nel 1964), questa linea di prodotti IBM subì l’evoluzione tipica dei prodotti infor matici. Gli esemplari successivi presentano migliori prestazioni, migliori capacità e/o prezzi più bassi. La Tabella 2.3 mostra questa tendenza. Le dimensioni della memoria centrale, in multipli di 210 parole a 36 bit, crebbe da 2K a 32K parole,* mentre il tempo per accedere a una parola di memoria (memory cycle time) scese da 30 fis a 1,4 με. Il numero di istruzioni macchina aumentò da un modesto 24 a 185. L’ultima colonna indica la velocità della CPU. I miglioramenti nella velocità vengono raggiunti tramite una migliore elettronica (i transistor sono più veloci dei tubi a vuoto) e la maggiore complessità dei circuiti. Ad esempio, IBM 7094 include un registro di backup delle istruzioni, usato per bufferizzare l’istruzione successiva. A ogni ciclo esecutivo l’unità di controllo preleva dalla memoria due parole adiacenti. QiLindi, a parte la rara occorrcnza di un’istruzione di salto, il numero di accessi alla memoria per il prelievo delle istruzioni risulta dimezzato. Questo prefetching (caricamento anticipato) riduce in m odo significa tivo il tempo medio di esecuzione delle istruzioni. Le restanti colonne della Tabella 2.3 diventeranno chiare nel seguito. La Figura 2.5 mostra un’elaborata configurazione (con molte periferiche) di un IBM 7094, macchina rappresentativa della seconda generazione di calcolatori [BELL71]. Tra le molte differenze rispetto al calcolatore IAS la più im portante e l’uso dei cosiddetti canali di dati (data channels). Un canale di dati è un modulo di I / O indipendente, con un suo processore c uno spe cifico insieme di istruzioni. In un sistema di elaborazione dotato di tale dispositivo, la CPU non esegue direttamente le istruzioni di I/O . Qpeste infatti sono immagazzinate nella memoria del canale per poi essere eseguite dal suo processore. La C PU dà inizio all’ope razione di I /O inviando lu i segnale di controllo al canale, ordinandogli così di eseguire una sequenza di istruzioni. Il canale esegue il suo compito indipendentemente dalla C PU e le segnala il completamento dell’operazione. Tale accorgimento solleva la C PU da un con siderevole carico di lavoro. Un’altra nuova caratteristica è il multiplexor, che rappresenta il punto di raccordo per i canali di dati, per la C PU e per la memoria. Il multiplexor governa l’accesso alla memoria da parte della C PU e dei canali di dati, permettendo a questi dispositivi di ope rare indipendentemente.
La terza generazione: circuiti integrati I transistor sono chiamati componenti discreti. Per tutti gli anni Cinquanta e i primi anni Sessanta gli apparecchi elettronici erano costituiti in larga misura da componenti discre ti: transistor, rcsistori, condensatori e così via. I componenti discreti venivano prodotti se-
4 Lucilizzo di prefissi numerici come kilo (in italiano Kilo) e giga (in italiano Giga) viene discusso nel documento di supporto (in lingua inglese) sul sito Com puter Science Student Resource, all’indirizzo: W illiam Stallings.com /StudentSupport.htm l.
26 Panoramica
Membri della Serie IBM 700/7000.
704
Tubi a v u o to
T ubi elettrostatici
30
2 -4
24
0
No
No
No
1
1955
Tubi a v u o to
N uclei
12
4 -3 2
80
3
Si
No
No
2,5
709
1958
'Tubi a v u o to
N uclei
12
32
140
Si
No
4
7090
1960
T ransistor
N uclei
2,18
32
169
UJ :
1952
Cielo m acchina
Si
No
25
70941
1962
T ran sistor
N uclei
2
32
185
7
Si (precisione doppia)
Si
Si
30
7 0 9 4 II
1964
T ransistor
N uclei
1,4
32
185
7
Si (precisione doppia)
Si
Si
50
( ·)
Dimensione Numero della di codici m em oria (K) operativi
N um ero di registri indice
Virgola Sovrapposi/ioni Sovrapposizioni Velocità m obile nell’I/O nel prelievo (com parata cablata (canali) di istruzioni al 701)
e prestazioni del calco la to re
701
Tecnologia della m emoria
j 35
Tecnologia della CPU
ΓΛ
Data di prim a consegna
2 - Evoluzione
Num ero del m odello
♦ Capitolo
Tabella 2.3
2.1 Breve storia dei calcolatori
Figura 2 .5
C o n fig u razio n e d e ll'IB M 70 9 4 .
paratamente e poi fissati su schede di masonite, note come schede stampate, che venivano poi installate nei calcolatori e in altre apparecchiature elettroniche. La posa in opera di ogni singolo transistor richiedeva il posizionamento dei tre contatti di un tubicino metallico contenente un pezzo di silicio delle dimensioni di una capocchia di spillo sulla piastra del circuito. L’intero ciclo produttivo era costoso e poco pratico. Questo iniziava a creare problemi nell’industria dei calcolatori. Infatti, i primi ela boratori della seconda generazione contenevano circa 10000 transistor, un numero che crebbe fino alle centinaia di migliaia, rendendo sempre più difficile la produzione di nuo ve e più potenti macchine. Nel 1958 avvenne la scoperta che rivoluzionò l’elettronica e che diede inizio all’era del la microelettronica: l’invenzione del circuito integrato. D opo una breve panoramica su questa tecnologia ci soffermeremo su quelli che sono forse i due più importanti esempla ri della terza generazione, entrambi introdotti ai suoi albori: IBM System/360 c D EC PDP-8. M icroelettronica
Microelettronica significa letteralmente “elettronica microscopica”. Fin dagli albori dell elettronica digitale c dell’industria dei calcolatori ce stata tuia consistente e continua ten denza verso la miniaturizzazione dei circuiti digitali. Prima di esaminare le implicazioni e i benefici di questa tendenza, dobbiamo dire qualcosa sulla natura dcllclettronica digitale.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
Ingressi
► Uscite
Celia di memoria (binaria)
Ingressi
ik
i
Lettura Segnale di attivazione
Scrittura
(a) Porta logica
Figura 2.6
(b) Cella di memoria
Elem enti fondam entali di un calco latore.
Gli elementi fondamentali di un calcolatore digitale, come sappiamo, eseguono la me morizzazione, il trasferimento, l’elaborazione dei dati e varie funzioni di controllo. I com ponenti fondamentali sono di due tipi (Figura 2.6): porte logiche [gate) e celle di memo ria (memory celt). Una porta (logica) è un dispositivo che esegue una semplice funzione booleana o logica, come ad esempio: SEyfE B SO N O VERI ALLORA CE VERO (por ta AND). Tali dispositivi sono chiamati porte perche controllano il flusso di dati esatta mente come le chiuse di un corso d’acqua. La cella di memoria è un dispositivo in grado di memorizzare un bit; in altre parole essa si può trovare in ogni momento in uno dei suoi due stati stabili. I calcolatori sono costruiti mediante la interconnessione di un grandissi mo numero di questi dispositivi fondamentali. Possiamo correlare questo discorso alle no stre quattro funzioni di base. ♦ Memorizzazione dati: fornita dalle celle di memoria. ♦ Elaborazione dati: eseguita dalle porte logiche. ♦ Trasferimento dati : le connessioni tra i componenti vengono usati per i trasferimenti da memoria a memoria, sia in modo diretto sia attraverso porte logiche. ♦ Controllo: le connessioni tra componenti possono trasportare segnali di controllo. Per esempio, una porta logica avrà uno o due ingressi per i dati più un segnale di con trollo che la attiva. Quando il segnale di controllo è ON, la porta esegue la sua fun zione sugli ingressi e produce un’uscita. In modo simile, la cella di memoria imma gazzinerà il bit che si trova sul suo ingresso quando il segnale di scrittura e O N e invierà sulla sua connessione d’uscita il bit presente nella cella quando il segnale di let tura è ON. Dunque un calcolatore consiste di porte logiche, celle di memoria e mutue interconnessioni. A loro volta le porte c le celle sono costituite da semplici componenti elettronici digitali. Il circuito integrato si basa sul fatto che i transistor, i rcsistori e i conduttori possono essere realizzati a partire da un semiconduttore come il silicio. Fabbricare un intero circuito su un unico pezzo di silicio piuttosto che assemblare componenti discreti, costituiti da pez zi di silicio separati, in uno stesso circuito c una mera estensione dello stato dell’arte. Su una sola piastrina di silicio possono essere realizzati molti transistor. Fatto altrettanto impor tante, questi transistor possono essere connessi tramite un processo di metallizzazione per formare circuiti.
2.1 Breve storia dei calcolatori
Figura 2 .7
R elazio n e tra wafer, chip e porta.
La Figura 2.7 mostra i concetti chiave di un circuito integrato. U n sottile dischetto di si licio, detto wafer, viene suddiviso in tante piccole superfici di pochi millimetri quadrati su cui viene realizzato lo stesso circuito. Quando separate, ognuna di queste piccole superfi ci costituisce un chip. Ogni chip è composto da molte porte e/o celle di memoria più un certo numero di contatti esterni (pin) che sono chiamati in gergo piedini. Il chip viene im ballato in un alloggiamento di protezione da cui escono i contatti per il collegamento ai dispositivi esterni. Per produrre circuiti più grandi e complessi è possibile interconnette re un certo numero di questi componenti sulla piastra di un circuito stampato. Inizialmente, solo poche porte e celle di memoria potevano essere prodotte in mo do affidabile e assemblate assieme. QiLesti primi circuiti integrati sono generalmente in dicati dalfacronimo SSI (small-scale integration) che significa integrazione a piccola scala. Col passare del tempo divenne possibile integrare nello stesso chip sempre più componenti. Questa crescita di densità è illustrata nella Figura 2.8: si tratta di una delle tendenze tec nologiche di maggiore rilievo.5La figura riflette la famosa legge di Moorc. Gordon Moore, uno dei fondatori di Intel, nel 1965 [M OOR65], osservò che il numero di transistor che
5 Si noci che per gli assi verticali è utilizzata una scala logaritmica. Per un’introduzione alle scale logaritmiche si ve da il documento di ripasso della matematica elementare sul sito Com puter Science Student Support, all’indirizzo: W illiam Stallings.com /StudentSupport.htm l.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
1 miliardo di transistor
Figura 2 .8
C rescita del num ero di transistor nella C P U [B O H R 0 3 ].
potevano essere integrati in un singolo chip stava raddoppiando ogni anno e previde cor rettamente che questo ritmo di crescita sarebbe continuato nel l’immediato futuro. Nella sorpresa generale, Moore incluso, tale ritmo continuò anno dopo anno, decennio dopo de cennio. Nel 1970 il fenomeno rallentò e da allora il raddoppio avviene ogni 18 mesi. Le conseguenze della legge di Moore sono profonde. 1. Durante questo periodo di rapida crescita della densità, il prezzo dei chip è rimasto virtualmente inalterato. Ciò significa che i costi dei circuiti logici di memoria sono crollati drasticamente. 2. Poiché gli clementi logici e di memoria su chip più densamente integrati sono più vi cini, la lunghezza dei percorsi elettrici risulta abbreviata, il che implica un incre mento della velocità operativa. 3. Il calcolatore diventa più piccolo, rendendone più agevole il posizionamento in una grande varietà di ambienti. 4. Si ha una riduzione nei requisiti di alimentazione c di raffreddamento. 5. Le interconnessioni dei circuiti integrati sono molto più affidabili delle saldature. Disporre di più circuiti all'interno dello stesso chip significa avere meno intercon nessioni tra i chip.
2.1 Breve storia dei calcolatori
IBM System/360
Fino al 1964, grazie alla sua serie 7000, IBM ebbe una salda presa sul mercato dei calcola tori. In quell anno la società annunciò la nuova famiglia di elaboratori System/360. La no tizia, seppur di per sé non sorprendente, conteneva alcune novità spiacevoli per i clienti IBM: la linea di prodotti 360 era incompatibile con le precedenti macchine IBM c la tran sizione alla serie 360 sarebbe stata difficile per i vecchi clienti. Questo fu un passo ardito da parte di IBM, ma la società ritenne necessario rompere con alcuni vincoli dellarchitettura 7000 e produrre un sistema al passo con la nuova tecnologia dei circuiti integrati [PADE81, GIFF87]. La strategia ebbe successo sia da un punto di vista economico sia tecnico. Il 360 rap presentò il successo del decennio e consolidò IBM nella posizione di produttore domi nante, con una quota di mercato superiore al 70 per cento. Con alcune modifiche ed esten sioni, larchitettura dei mainframe6 IBM è tuttora quella del System/360. Esempi d ’uso di questa architettura possono essere ritrovati in tutto il testo. Il System/360 fu la prima famiglia di computer pianificata a livello industriale. La fa miglia copriva un vasto campo di prestazioni e prezzi. La Tabella 2.4 mostra alcune delle caratteristiche chiave dei vari modelli nel 1965 (ciascun membro della famiglia viene con traddistinto da un numero di modello). I modelli erano tra loro compatibili, nel senso che un programma scritto per un modello poteva essere eseguito da un altro modello della se rie, con la sola differenza dei tempi di esecuzione. Il concetto di famiglia di calcolatori compatibili fu innovativo c di enorme succes so. Un cliente con richieste modeste e lui budget lim itato poteva iniziare con il poco co stoso Modello 30. In seguito poteva passare a una macchina più potente senza sacrificare Tinvestimento nel software già sviluppato. Tabella 2.4
C aratteristiche salienti della fam iglia System /360.
C aratteristiche
M odello 30
M odello 40
M odello 50
M odello 65
M odello 75
Dimensione massima della memoria (byte)
64K
256K
256K
512K
512K
Tasso di trasferimento dalla memoria (Mbyte/s)
0,5
0,8
2,0
8,0
16,0
Ciclo del processore ( s)
1,0
0,625
0,5
0,25
0,2
Velocità relativa
1
3,5
10
21
50
Numero massimo di canali per i dati
3
3
4
6
6
Tasso di trasferimento dati su un canale (Kbyte/ s)
250
400
800
1250
1250
' Il termine mainframe viene utilizzato per i calcolatori più grandi e potenti che non siano supercomputer. Le loro caratteristiche tipiche sono il supporto di un grande database, un elaborato hardware di I/O e l’uso in una strut tura centrale di elaborazione dati.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
Ecco le caratteristiche di una famiglia di calcolatori. ♦ Istruzioni macchina. L’insieme di istruzioni macchina supportato dai membri del la famiglia è molto simile e in molti casi è esattamente lo stesso. In tal modo un pro gramma eseguibile su un dispositivo lo sarà anche su ogni altro. In alcuni casi, i m o delli di fascia bassa dispongono di un sottoinsieme delle istruzioni dei modelli di fascia alta. Qiiesto significa che i programmi sono compatibili verso l’alto ma non ver so il basso. ♦ Sistema operativo. Lo stesso sistema operativo di base c disponibile per tutti i mem bri della famiglia. In alcuni casi, ai membri di fascia più alta vengono aggiunte ulte riori caratteristiche. ♦ Velocità. La frequenza di esecuzione delle istruzioni cresce dalla fascia più bassa a quella più alta. ♦ I/O . Il numero di porte di I / O cresce dalla fascia più bassa a quella più alta. ♦ Dim ensione della memoria. La dimensione della memoria centrale cresce al pas sare dalle fasce più basse a quelle più alte. ♦ Prezzo. In uno stesso periodo temporale il costo dei sistemi incrementa al crescere della fascia. Come si può realizzare tale concetto? Le differenze si basano su tre fattori: velocità di base, dimensione e grado di simultaneità [STEV64]. Ad esempio, si possono ottenere maggiori velocità di esecuzione di una data istruzione tramite l’uso di circuiti più complessi ncll’ALU, consentendo così di eseguire in parallelo le sotto-operazioni. Un altro metodo per aumen tare la velocità consiste nell’incrcmcntarc la larghezza di banda del bus di memoria (il colle gamento tra la memoria centrale e la CPU). Nel Modello 30 poteva essere prelevato dalla me moria centrale solo un byte (8 bit) alla volta, mentre nel Modello 75 i byte diventano 8. Il System/360 non solo dettò il futuro di IBM, ma ebbe anche un profondo impat to sull’intero comparto industriale. Molte delle sue caratteristiche sono diventate standard su altri grandi calcolatori.
DEC PDP-8 Nello stesso anno in cui IBM consegnò il primo System/360, vi fu un altro esordio di gran de importanza: PDP-8. Nell’epoca in cui un calcolatore medio richiedeva un’intera stan za climatizzata, PDP-8 (soprannominato minicomputer dalla stessa DEC, in omaggio alla creazione della minigonna) era abbastanza piccolo da poter stare su un banco di labora torio. Il PDP-8 non era in grado di svolgere tutte le funzioni dei mainframe ma, costando solo 16000 dollari, era abbastanza economico da poter essere acquistato da ogni labora torio. Al contrario, i System/360 costavano centinaia di migliaia di dollari. Tra l’altro, il basso prezzo e le piccole dimensioni del PDP-8 consentirono ad altre im prese di realizzare e commercializzare sistemi di elaborazione più complessi, imperniati sul calcolatore della DEC. Nacque così un importante settore deH’industria dei calcolatori, il cosiddetto mercato O EM {original equipment manufacturers, manifattura di prodotti ori ginali). Il PDP-8 fu un immediato successo e fece la fortuna di DEC. Questa macchina c i successivi membri della famiglia (vedi Tabella 2.5) raggiunsero il livello di produzione precedentemente riservato ai calcolatori IBM, con circa 50000 esemplari venduti ncll’ar-
2.1 B revesto riad eica lco lato ri
Tabella 2.5
Evo luzio n i del PD P-8 [V O EL881.
________
Costo del processore + Tasso Consegnato 4K parole di trasferimento laprim a di memoria a 12 bit dati dalla memoria Modello volta (in migliaia di dollari) (parole/ s)
Volume (in piedi Innovazioni cubi) e migliorie
PDP-8
4/65
16,2
1,26
8,0
Produzione automatica ad av volgimento di cavo
PDP-8/5
9/66
8,79
0,08
3,2
Implementazione seriale delle istruzioni
P D P -8/1
4/68
11,6
1,34
8,0
Integrazione su media scala
PDP-8/L
11/68
7,0
1,26
2,0
M inor ingombro
PDP-8/E
3/71
4,99
1,52
2,2
Omnibus
PDP-8/M
6/72
3,69
1,52
1,8
Ingombro dimezzato
PDP-8/A
1/75
2,6
1,34
1,2
Memoria a semiconduttori; processore in virgola mobile
co di 12 anni. Come afferma la storia ufficiale di D E C 1il PDP-8 “stabilì il concetto di mi nicomputer, segnando la strada per un’industria multimiliardaria” Esso impose DEC co me principale venditore di minicomputer, e, al tempo in cui PDP-8 raggiunse il termine della propria vita utile, D EC era il secondo produttore di calcolatori, dopo IBM. In contrasto con l’architettura a commutatore centrale (Figura 2.5) usata da IBM sui propri sistemi 700/7000 e 360, i più recenti modelli di PDP-8 adottavano una struttura che è ora praticamente universale per minicomputer c microcalcolatori: la struttura a bus (ve di Figura 2.9). Il bus del PDP-8, chiamato Omnibus, consiste di 96 linee separate, usate per trasportare segnali di controllo, indirizzi c dati. Poiché tutti i componenti del sistema condividono un insieme comune di lince per i segnali, il loro uso deve essere controllato dalla CPU. Questa architettura è molto flessibile, in quanto consente di inserire moduli sul bus per creare varie configurazioni.
Le successive generazioni La definizione delle successive generazioni di calcolatori c più controversa. La Tabella 2.2 suggerisce una quarta e una quinta generazione, basate sui progressi nella tecnologia dei cir cuiti integrati. C on l’introduzione dell’integrazione su larga scala (LSI, large-scale integration), su un chip si possono ottenere più di 1000 componenti. L’integrazione su lar ghissima scala (VLSI, very-large-scale integration) raggiunge il traguardo dei 10000 com ponenti per chip, ma oggi l’integrazione su scala ultra-larga (ULSI, ultra-large-scale inte gration) può alloggiare oltre un milione di componenti su un singolo chip.
Figura 2.9
Struttura del bus in un calco latore PD P-8.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
Con la rapida evoluzione della tecnologia, la frequente immissione di nuovi prodot ti sid mercato e l’importanza crescente del software e delle comunicazioni rispetto alThardware, la classificazione in generazioni si fa meno chiara e significativa. Menzioniamo qui due tra i più importanti risultati. Memorie a semiconduttori
La prima applicazione della tecnologia dei circuiti integrati nel campo dei calcolatori fu la costruzione del processore a partire dai chip integrati, ma ben presto la stessa tecnolo gia fu adottata per costruire le memorie. Negli anni Cinquanta e Sessanta, la maggior parte delle memorie dei calcolatori ve niva costruita a partire da minuscoli anelli di materiale ferromagnetico, del diametro di cir ca I /16 di pollice. Qticsti anelli venivano appesi a griglie di sottili fili sospesi aUmtemo del calcolatore. Magnetizzato in un senso, l’anello (chiamato nucleo o core) rappresentava un 1; magnetizzato nell’altro verso, indicava uno 0. Le memorie a nuclei magnetici erano piuttosto veloci; la lettura di un bit richiedeva circa un milionesimo di secondo. Ma era no costose, ingombranti ed erano soggette alla cosiddetta lettura distruttiva: la semplice azione di lettura cancellava il dato memorizzato nel nucleo. Era dunque necessario instal lare circuiti per ripristinare i dati immediatamente dopo la loro estrazione. Così, nel 1970, la Fairchild produsse la prima memoria a semiconduttori relativa mente capiente. Questi chip potevano contenere 256 bit di memoria. La lettura non era distruttiva ed era molto più veloce: soltanto 70 miliardesimi di secondo per la lettura di un bit. Tuttavia il costo per bit era più alto rispetto alle memorie a nucleo. Nel 1974 avvenne un fenomeno degno di nota: il prezzo per bit delle memorie a se miconduttore scese al di sotto di quello delle memorie a nucleo. Negli anni successivi il prezzo delle memorie continuò a diminuire c la loro densità ad aumentare. Ciò ha permesso la costruzione di macchine più piccole, più veloci, c con tanta memoria quanta ne aveva no i calcolatori più grandi e costosi di appena pochi anni prima. Gli sviluppi nella tecno logia delle memorie, così come nella tecnologia dei processori, cambiarono la natura dei calcolatori in meno di dieci anni. Sebbene gli elaboratori ingombranti e costosi rimanga no una parte del panorama, il calcolatore è ora alla portata dell’utente finale, nella forma di macchina da ufficio e personal computer (PC). Dal 1970 a oggi le memorie a semiconduttori sono passate attraverso 13 generazio ni: 1K, 4K, 16K, 64K, 256K, 1M, 4M, 16M, 64M, 256M, I G, 4G e, al momento della pre sente pubblicazione, 16Gbit su un unico chip (IK = 210, IM = 220, IG = 230). Ogni gene razione presenta il quadruplo della densità rispetto alla precedente, e costi unitari e tempi d’accesso via via inferiori. Microprocessori
Proprio come per i chip di memoria, la densità nei chip del processore ha continuato a cre scere. Con il passare del tempo, fu possibile posizionare su ciascun chip un numero sem pre crescente di clementi. Di conseguenza, per costruire un singolo processore furono ri chiesti sempre meno chip. Nel 1971, quando la Intel sviluppò il suo 4004, si ebbe un importante passo avanti. Si trattava del primo chip singolo che conteneva tu tti i componenti di una CPU: fu la na scita del microprocessore. Il 4004 può sommare due numeri da 4 bit ed esegue le moltiplicazioni tramite addi
2.1 Brevestoria dei calcolatori
zioni ripetute. Per gli standard odierni, il 4004 è senza dubbio rudimentale, ma segnò l'i nizio della continua evoluzione dei microprocessori. Qpesto processo può essere apprezzato più facilmente considerando il numero di bit che il processore tratta alla volta. Non esistendo una precisa determinazione di tale valo re, forse la migliore misura è l’ampiezza del bus dati: il numero di bit di dati che possono essere immessi o emessi dal processore in un dato istante. Un’altra misura è data dal numero di bit neH’accumulatore o nei registri a uso generale. Spesso, ma non sempre, tali misure coincidono: ad esempio, vennero sviluppati microprocessori che operavano su numeri a l é bit presenti nei registri, ma che potevano leggere c scrivere solo 8 bit per volta. Un ulteriore, importante passo nell evoluzione dei microprocessori fu la nascita, nel 1972, dell’Intel 8008. Si trattava del primo microprocessore a 8 bit. Nessimo di questi passi avrebbe comunque avuto l’impatto del successivo evento: l’introduzione nel 1974 dell’Intel 8080, il primo microprocessore dutilizzo generale. Mentre il 4004 e 8008 erano stati proget tati per applicazioni specifiche, 8080 era stato progettato per essere la CPU di un generico mi crocalcolatore. Esso era, come 8008, un microprocessore a 8 bit; però era più veloce, presen tava un repertorio di istruzioni più ricco e aveva una vasta capacità di indirizzamento. Contemporancamcntevennero sviluppati i primi microprocessori a 16 bit. Tuttavia mi croprocessori a 16 bit potenti e generali apparvero solo alla fine degli anni Settanta. Uno di questi era 8086. Il gradino successivo in quest evoluzione si ebbe nel 1981, quando sia i la boratori Bell sia la Hewlett-Packard svilupparono un microprocessore a chip singolo e a 32 bit. E nel 1985 l’Intel lanciò sul mercato il suo microprocessore a 32 bit, 80386 (Tabella 2.6).
Tabella 2 .6
E vo lu zio n e dei m icroprocessori Intel (co ntinua).
Processori degli anni ’70 4004
8008
8080
8086
8088
1971
1972
1974
1978
1979
108 KHz
108 KHz
2 MHz
5 M H z, 8 M Hz, 10 M Hz
5 MHz, 8 MHz
Anno di introduzione Clock
4 bit
OO
.— —.N>
Ampiezza del bus
'—O
(a)
Numero di transistor (micron)
8 bit
8 bit
16 bit
8 bit
3500
6000
29.000
29.000
(0
(3)
6
3
6
64Kbvce
IM B
IM B
Dimensione dei transistor ([■un) 10 Memoria indirizzabile
640 byte
16 Kbyte
(3)
(b) Processori degli anni ’80 386T M DX
386T M SX
486T M DX C P U
1982
1985
1988
1989
6 M H z12,5 M H z
16 M H z-3 3 M H z
16 M H z-3 3 M H z
25 M H z-5 0 M H z
80286 Anno di introduzione Clock Ampiezza del bus Numero di transistor
16 bit
32 bit
16 bit
32 bit
134.000
275.000
275.000
1.200.000
1
1
0,8-1
16 MB
4 GB
16 MB
4 GB
IG B
64 TB
64 TB
64 TB
—
—
—
8 KB
Dimensione dei transistor ([¿m) 1,5 Memoria indirizzabile Memoria virtuale Cache
36
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
Tabella 2.6
Evo luzio n e dei m icroprocessori Intel.
(c) Processori degli anni ’90 486T M SX Anno di introduzione Clock
Pentium Pro
Pentium II
1991
1993
1995
1997
16 M H z33 M Hz
60 M H z166 M Hz
150 M H z200 M H z
200 M H z300 M Hz
32 bit
32 bit
64 bit
64 bit
1,185 milioni
3,1 milioni
5,5 milioni
7,5 milioni
Ampiezza del bus Numero di transistor
Pentium
Dimensione dei transistor (μιη) 1
0,8
0,6
0,35
Memoria indirizzabile
4 GB
4 GB
64 GB
64 GB
Memoria virtuale
64 TB
64 TB
64 TB
64 TB
8 KB
8KB
512 KB LI e I MB L2
512K B L 2
P entium III
Pentium 4
C ore 2 D uo
C ore 2 Q iiad
1999
2000
2006
2008
450-660 M Hz
1,3-1,8 G H z
1,06-1,2 G H z
3 G Hz
64 bit
64 bit
64 bit
64 bit
95 milioni
42 milioni
167 milioni
820 milioni
180
65
45
64 GB
64 GB
64 GB
Cache (d) Processori recenti Anno di introduzione Clock Ampiezza del bus Niunero di transistor
Dimensione dei transistor (nm) 250 Memoria indirizzabile Memoria virtuale Cache
2.2
64 GB 64 TB
64 TB
64 TB
64 TB
512KB L2
256 KB L2
2 MB L I
6 MB L2
Progettazione in funzione delle prestazioni
Anno Progettazione in funzione delle prcstazionidopo anno, il prezzo dei calcolatori con tinua a calare drasticamente, di pari passo con laum cnto delle loro prestazioni. Oggi, per meno di 1000 euro, è possibile acquistare al supermercato un personal computer che sur classa le prestazioni di un mainframe IBM di dicci anni fa. Pertanto disponiamo di potenza di elaborazione virtualmente “illimitata”. Qiicsta continua rivoluzione tecnologica ha per messo lo sviluppo di applicazioni di stupefacente complessità e potenza. Per citare alcuni esempi, le applicazioni da scrivania che richiedono la grande potenza degli odierni mi croprocessori includono: ♦ elaborazione di immagini ♦ riconoscimento vocale ♦ videoconfercnza ♦ authoring multimediale ♦ memorizzazione di documenti audio-video ♦ modelli di simulazione
2.2 Progettazione in funzione delle prestazioni
Le odierne workstation (stazioni di lavoro da ufficio) supportano applicazioni scientifiche e ingegneristiche altamente sofisticate, sistemi di simulazione e applicazioni grafiche e vi deo. Inoltre, quasi tutte le transazioni commerciali si basano su server sempre più potenti che supportano le imponenti reti chc hanno rimpiazzato i vasti centri di calcolo degli an ni passati. Dal punto di vista del l’organizzazione e dell’architettura dei calcolatori, la cosa affa scinante è chc da un lato i blocchi costitutivi di base dei “miracolosi” elaboratori moder ni sono praticamente gli stessi di IAS. D ’altro canto le tecniche per ottenere le massime pre stazioni dai materiali sono diventate sempre più sofisticate. Questa osservazione serve come linea guida nella presentazione di questo libro. Nel trat tare i vari elementi e componenti di un calcolatore si perseguono due obicttivi. Primo, il te sto spiega le fondamentali funzionalità nelle aree considerate e, secondo, il libro esplora le tec niche richieste per ottenere le massime prestazioni. Nella parte restante di questa sezione sottolineiamo alcuni dei fattori basilari per la progettazione in funzione delle prestazioni.
Velocità del microprocessore Ciò che conferisce ai processori Intel x86 o ai mainframe IBM la loro sbalorditiva potenza computazionale è !’implacabile sfida in termini di velocità tra i produttori di processori. L’evoluzione di queste macchine continua a rispettare la legge di Moore, per cui i co struttori possono approntare ogni tre anni una generazione di chip con il quadruplo dei transistor. Nei chip di memoria ciò ha quadruplicato ogni triennio la capacità della me moria dinamica ad accesso casuale (DRAM, dynamic raìidom-access memory), chc c anco ra la tecnologia fondamentale per la memoria centrale dei calcolatori. Nei microproces sori, l’introduzione di nuovi circuiti e l’aumento di velocità dovuto alla loro ridotta distanza ha migliorato le prestazioni di quattro o cinque volte ogni tre anni, c questo fin dal lancio della famiglia Intel x86 nel 1978. Ma la velocità grezza del microprocessore non può essere sfruttata a pieno se non è alimentata con un costante flusso di lavoro, cioè di istruzioni macchina. Tutto ciò che in tralcia lo scorrimento di questo flusso mina la potenza del processore. Di conseguenza, mentre i produttori di chip apprendevano come realizzare processori di densità sempre cre scente, i progettisti ideavano tecniche più elaborate per “nutrire il mostro”. Tra le tecniche implementate nei moderni processori citiamo le seguenti. ♦ Predizione dei salti: il processore guarda avanti tra le istruzioni prelevate dalla me moria e decide quali diramazioni o gruppi di istruzioni saranno elaborati con mag gior probabilità. Se la predizione si avvera, il processore può prelevare in anticipo le istruzioni corrette e memorizzarle in modo da rimanere occupato. Gli esempi più so fisticati di questa strategia predicono non solo la prossima diramazione ma i salti mul tipli. Dunque, la predizione dei salti incrementa il carico di lavoro disponibile per l’e secuzione da parte del processore. ♦ Analisi del flusso di dati: il processore analizza la dipendenza delle istruzioni dai ri sultati di altre istruzioni o dai dati, al fine di creare una schedulazionc ottimizzata del le istruzioni. Queste ultime vengono organizzate in modo da essere eseguite appena possibile, indipendentemente dall'originario ordine nel programma. Ciò previene ritardi non necessari.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
MH/
Figura 2 .1 0
V ariazio n e d e lle prestazioni di C ircu iti logici e M em oria [B O R K 0 3 ].
♦ Esecuzione speculativa: utilizzando queste due tecniche, alcuni processori eseguo no in modo speculativo alcune istruzioni che si trovano più avanti nel codice, salvan do i risultati in locazioni temporanee. Ciò consente al processore di essere il più oc cupato possibile, eseguendo istruzioni chc in seguito saranno probabilm ente necessarie. QirLeste e altre sofisticate tecniche consentono di sfruttare la velocità grez za del processore.
Bilanciamento delle prestazioni M entrela potenza del processore è cresciuta rapidamente, altri componenti critici del cal colatore non hanno seguito lo stesso ritmo di sviluppo. Ne risultata la necessità di trova re un equilibrio nelle prestazioni per compensare uno scarto tra le potenzialità dei vari componenti. Fra tutti, il problema più delicato si manifesta nell’interfaccia tra il processore c la me moria centrale. Si consideri quanto mostrato nella Figura 2.10. Mentre la velocità del pro cessore e la capacità della memoria sono cresciute rapidamente, la velocità di trasferi mento dati tra loro si è notevolmente attardata. L’interfaccia tra processore e memoria centrale è il percorso più cruciale nell’intero calcolatore, dato che è responsabile del tra sporto di un flusso costante di istruzioni macchina e di dati. Se la memoria o il collega mento non riescono a tenere il ritm o delle insistenti domande del processore, qucstultimo si trova in uno stato di attesa, perdendo prezioso tempo di elaborazione.
2.2 Progettazione in funzione delle prestazioni
Esistono varie alternative per affrontare questo problema. Riportiamo alcuni esempi. ♦ Incrementare il numero di bit che di volta in volta vengono letti rendendo le DRAM “più ampie” anziché “più profonde” e usando bus più larghi. ♦ Cambiare l’interfaccia con la DRAM per renderla più efficiente, includendo una ca che7 o altri schemi di buffering sul chip della DRAM. ♦ Ridurre la frequenza degli accessi alla memoria, incorporando strutture cachc sem pre più complesse ed efficienti tra il processore e la memoria centrale. Ciò include l’in troduzione di una o più cache sul chip del processore e una cache esterna. ♦ Incrementare la larghezza di banda della connessione tra processori e memoria, usan do bus a velocità più elevata e una gerarchia di bus per bufferizzare e strutturare il flus so di dati. Un’altra area di particolare interesse nella progettazione c la gestione dei dispositivi di I/O . Con l’incremento di velocità e potenza dei calcolatori, si sviluppano applicazioni più sofisticate che supportano l’uso di periferiche con pesanti richieste di operazioni di I /O. La Figura 2.11 fornisce alcuni esempi di periferiche tipicamente in uso su PC e work station. Le attuali generazioni di processori sono in grado di gestire i dati forniti da que
Gigabit Kthernet Display grafici Dischi fìssi Ethernet Dischi ottici Scanner Stampanti laser Floppy disk Modem Mouse
1
_____________________ _______
Tastiere IO 4
IO 5
IO6
IO 7
IO 8
IO 9
Tasso trasmissivo (bps)
Figura 2.11
T ip ic i lassi trasm issivi dei dispositivi di I/O.
7 Una cachc è una memoria velocc piuttosto piccola posta tra una memoria più grande c i circuiti che guidano 1ac cesso a quest ultima. Le cache (trattate nel Capitolo 4) contengono dati letti di recente e hanno lo scopo di rende re più veloce l’accesso a questi dati.
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
sti dispositivi, ma rimane il problema del loro trasferimento tra il processore e la periferi ca. Qui le strategie possibili includono schemi di caching e buffering, oltre alluso di bus più veloci e strutture più elaborate. Inoltre, Fuso di configurazioni a processore multiplo può aiutare a soddisfare le richieste di I/O . La chiave di tutto questo è l’equilibrio. I progettisti si sforzano costantemente di bi lanciare il throughput e le richieste di elaborazione da parte dei componenti del processo re, della memoria centrale, dei dispositivi di I/O e delle strutture di interconnessione. Per tener testa ai due seguenti fattori di costante evoluzione, la progettazione deve continua mente essere ripensata. ♦ L’indice di cambiamento delle prestazioni nei vari sottosistemi (processore, bus, me moria, periferiche) differisce enormemente da un tipo di elemento all’altro. ♦ Le nuove applicazioni e le nuove periferiche cambiano costantemente la natura del le richieste al sistema in termini di profilo tipico delle istruzioni c di linee di accesso ai dati. Quindi, la progettazione dei calcolatori è una forma d’arte in continua evoluzione. Il te sto cerca di presentare le basi su cui essa si fonda e fornisce un colpo d’occhio sullo stato dell’arte.
Miglioramento dell'architettura e dell'organizzazione dei chip Mentre i progettisti si scontrano con il problema di bilanciare le prestazioni del processore e quelle delle memoria centrale e degli altri componenti, permane la necessità di incre mentare la velocità del processore. Per ottenere tale aumento si possono seguire tre ap procci diversi. ♦ Aumentare la velocità dell’hardware del processore. Questo incremento è fonda mentalmente ottenuto riducendo la dimensione delle porte logiche nel chip del pro cessore, così che più porte possano essere contenute in uno spazio più ristretto, e au mentando la velocità di clock. Con l’awicinam ento delle porte logiche, il segnale si propaga più velocemente, permettendo l’incremento di velocità del processore. Un clock più veloce permette che ogni singola istruzione sia eseguita più rapidamente. ♦ Aumentare la dimensione c la velocità della cache interposta tra processore e me moria centrale. In particolare, dedicando una porzione del chip del processore alla memoria cachc, il tempo di accesso a tale memoria si riduce in maniera significativa. ♦ Modificare !’organizzazione del processore e la sua architettura in modo da aumen tare la velocità effettiva di esecuzione delle istruzioni. Tipicamente, ciò implica l’u tilizzo di una ccrta forma di parallelismo. I fattori dominanti nel miglioramento delle prestazioni sono tradizionalmente l’aumento della velocità di clock e della densità dei circuiti logici. La Figura 2.12 illustra il trend dei processori Intel. Va osservato chc allaumentare della velocità di clock c della densità dei circuiti cresce il numero di ostacoli chc si incontrano [INTE()4b]. ♦ Potenza: al crescere della velocità di clock e della densità dei circuiti cresce la den sità di potenza (W att/cm2). La difficoltà di dissipare il calore generato in circuiti ad
2.2 Progettazione in funzione delle prestazioni
Hypcrthreading (multicore)
Figura 2.12
Prestazioni dei processori Intel [G IB B 0 4 J.
alta densità e alta velocità sta diventando un problema sempre più rilevante in fase di progettazione ([GIBB04], [BORK03]). ♦ Ritardo RC: la velocità con cui gli elettroni passano tra i transistor all'interno di un chip c limitata dalla resistenza e dalla capacitanza delle connessioni metalliche; in par ticolare, il ritardo cresce man mano aumenta l’effetto RC. Al diminuire delle di mensioni dei chip le connessioni diventano più sottili, aumentando la resistenza, e più vicine tra loro, aumentando la capacitanza. ♦ Latenza di memoria: la velocità della memoria influisce negativamente sulla velo cità del processore, come descritto in precedenza. Per queste ragioni, al fine di migliorare le prestazioni, sarà posta sempre più attenzione al l’organizzazione e all’architettura del processore. La Figura 2.12 mette in evidenza i prin cipali cambiamenti effettuati nel corso degli anni per aumentare il parallelismo e di con seguenza l’efficienza computazionale dei processori. Le tecniche utilizzate saranno discusse nei prossimi capitoli.
41
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
A partire dalla fine degli anni ’80 e durante i 15 anni successivi, oltre al semplice au mento della velocità di clock, sono state adottate principalmente due strategie per il mi glioramento delle prestazioni. Per prima cosa c’c stato im incremento della capacità della cachc. Al giorno d’oggi tra il processore c la memoria principale ci sono due o tre livelli di cache. Al crescere della densità dei circuiti nei chip sempre più memoria cache è stata in corporata nel chip del processore, permettendo un accesso alla memoria molto più velo ce. Per esempio, nei primi processori Pentium il 10% dell’area del chip era dedicato alla me moria cache, mentre nei chip dei più recenti Pentium 4 lo spazio per la cache corrisponde a circa la metà del chip. In secondo luogo, la logica di esecuzione delle istruzioni all’interno del processore è diventata sempre più complessa, così da permettere Icscciizionc parallela delle istruzioni. Due approcci degni di nota sono stati il pipelining e le architetture supcrscalari. Una pi peline lavora in m odo simile alla catena di montaggio di una fabbrica, permettendo cioè Icsecuzione contemporanca di diverse fasi dcll’csccuzionc di istruzioni distinte. Un pro getto superscalare permette essenzialmente pipeline multiple all’interno di un singolo pro cessore, in m odo che le istruzioni che non dipendono le une dalle altre possano essere ese guite in parallelo. Queste soluzioni hanno ormai raggiunto il punto di evoluzione in cui il vantaggio che è possibile ottenere in termini di prestazioni non è più proporzionato alle modifiche necessarie per ottenerlo. L’organizzazione interna dei processori attuali è estre mamente complessa e in grado di realizzare un notevole parallelismo nel flusso di istru zioni. Sembra verosimile che ulteriori migliorie in questa direzione sarebbero relativa mente modeste [GIBB04]. Con tre livelli di cache sul chip del processore, ognuno dei quali con una notevole capacità, anche i benefici ottenibili dalla cache sembrano aver raggiun to un limite. Nonostante ciò, affidarsi semplicemente all’incremento della frequenza di clock per ottenere un miglioramento delle prestazioni porta al problema della dissipazione di po tenza di cui già abbiamo parlato. Più grande è la frequenza di clock, maggiore è la poten za chc occorre dissipare, e più ci si avvicina ai limiti fisici. Avendo presenti tutte queste difficoltà, i progettisti si sono diretti verso un approc cio completamente nuovo: mettere sullo stesso chip più processori e una memoria cache più grande e condivisa. L’utilizzo di più processori sullo stesso chip (detti anche sistemi a core multipli o, più comunemente, multicore) dà la possibilità di migliorare le prestazio ni senza aumentare la frequenza di clock. Alcuni studi hanno mostrato che all’interno di un processore Tincremento delle prestazioni è proporzionale alla radice quadrata dellaumento della complessità [BORKÓ3]; se però i programmi sono in grado di supportare l’u tilizzo effettivo di più processori, raddoppiando il numero di processori anche le presta zioni raddoppiano. La strategia è dunque quella di usare due processori più semplici piuttosto chc aumentare la complessità di un singolo processore. Inoltre, l’impiego di due processori giustifica !’utilizzo di memorie cache più capien ti. Un fatto chc vale la pena notare è che il consumo di potenza delle memorie è molto mi nore rispetto a quello del processore. Per il prossimo futuro possiamo aspettarci che la mag gior parte dei nuovi chip sarà di tipo multicore.
2.3 Evoluzione dell'architettura Intel x86
2.3
Evoluzione dell'architettura Intel x86
In rutto il testo, per illustrare i concetti e per evidenziare i compromessi, ci riferiamo a mol ti esempi concreti. La maggior parte di questi è tratta da due famiglie di calcolatori: la Intclx86 e l’architettura ARM. L’attuale offerta x86 rappresenta il risultato di decenni di sforzi nella progettazione di sistemi CISC. La famiglia x86 incorpora i sofisticati principi di progettazione un tempo riservati ai mainframe e ai supercomputer e offre un esempio eccellente dell’architettura CISC. Larchitcttura ARM c utilizzata in un’ampia gamma di sistemi embedded ed è una delle architetture più potenti c meglio progettate presenti sul mercato. Una breve panoramica di questi due sistemi viene presentata in questo paragrafo c nel successivo. In termini di quote di mercato, Intel è stata per decenni il principale produttore di microprocessori di sistemi non embedded, posizione che difficilmente cederà nell’imme diato futuro. L’evoluzione del suo più importante microprocessore rappresenta un buon indicatore dell’evoluzione tecnologica dei calcolatori. La Tabella 2.6 mostra questa evoluzione. Intel era solita produrre un nuovo micro processore ogni quattro anni ma, per tenere a distanza i rivali, conta di abbreviare di uno o due anni i tempi di sviluppo. Così ha fatto con la più recente generazione x86. Vale la pena di elencare alcuni dei capisaldi dell’evoluzione della linea dei prodotti Intel. ♦ 8080: il primo microprocessore ad uso generale. Si trattava di una macchina a 8 bit con bus dati a 8 bit. Fu usato nel primo personal computer, FAltair. ♦ 8086: molto più potente, a 16 bit. O ltre a un bus dati e registri più larghi, dispone va di una cachc per accodare istruzioni prima che fossero eseguite. Una variante di questo processore, il modello 8088, venne impiegata nel primo personal computer IBM, assicurando il successo di Intel. Il modello 8086 c il primo esemplare con ar chitettura x86. ♦ 80286: questa estensione del modello 8086 consentiva l’indirizzamento di ima me moria da 16 Mbyte invece chc da 1 Mbyte. ♦ 80386: la prima macchina Intel a 32 bit fu una sostanziale revisione del prodotto. Grazie all’architettura a 32 bit, raggiunse la complessità e la potenza dei minicom puter e dei mainframe in uso solo pochi anni prima. Fu il primo processore Intel a sup portare il multitasking. ♦ 80486: in questa versione furono utilizzate tecnologie cache più sofisticate e un raffi nato pipelining delle istruzioni. Offriva anche un coprocessorc matematico incor porato, che liberava la C PU principale dalle complesse operazioni matematiche. ♦ Pentium: con il Pentium vennero introdotte tecniche superscalari che permettono l’esecuzione contemporanea di più istruzioni. ♦ Pentium Pro: questo modello sviluppò il concetto di organizzazione superscalarc iniziato col Pentium, tramite l’uso intensivo di rinominazionc di registri, predizione dei salti, analisi del flusso di dati ed esecuzione speculativa.
44
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
♦ Pentium II : incorporava la tecnologia Intel M M X, per l’elaborazione efficiente di da ti video, audio e grafici. ♦ Pentium III: il linguaggio macchina del Pentium III contiene istruzioni aggiuntive in virgola mobile per supportare il software grafico 3D. ♦ Pentium 4: il Pentium 4 include ulteriori istruzioni in virgola mobile e altri miglio ramenti per la multimedialità.8 ♦ Core: e il primo microprocessore Intel x86 di tipo dual core, cioè con due proces sori su un singolo chip. ♦ Core 2: il Core 2 implementa l’architettura a 64 bit. Il Core 2 Qiiad dispone di quat tro processori su un singolo chip. Oltre 30 anni dopo la sua introduzione nel 1978, l’architettura x86 continua a dominare il mercato dei processori per sistemi non embedded. Anche se l’organizzazione e la tecno logia dei modelli x86 è drasticamente cambiata in questi decenni, l’architettura del set di istruzioni ha mantenuto la compatibilità con le prime versioni. Un programma scritto per le versioni più vecchie di questa architettura può quindi essere eseguito anche sulle nuo ve. Le modifiche al set di istruzioni hanno riguardato nuove aggiunte, ma nessuna istru zione è stata eliminata. Nel corso di questi ultimi 30 anni sono state aggiunte circa un’i struzione al mese [ANTH08] e ora il set di istruzioni ne comprende circa 500. L’architettura x86 ci dà una visione eccellente dell’cvoluzionc dcll’hardware dei com puter negli ultimi 30 anni. L’8086, introdotto nel 1978, aveva 29000 transistor e una fre quenza di clock di 5 MHz. Un Intel Core 2 Quad del 2008 lavora a una frequenza di 3 GHz (incremento di un fattore 600) e ha 820 milioni di transistor (circa 28000 volte quanti ne aveva 18086). Ciononostante, l’involucro del Core 2 ha una dimensione di poco superio re a quello dell’8086 e i costi dei due processori sono simili.
2.4
Sistemi embedded e ARM
L’architettura ARM ha origine da principi di progetto di tipo RISC e viene utilizzata in sistemi embedded. Il Capitolo 13 esamina nel dettaglio le architetture RISC. In questo pa ragrafo daremo uno sguardo d’insieme al concetto di sistema embedded, per poi rivolge re la nostra attenzione ai sistemi ARM.
Sistemi embedded Quando parliamo di un sistema embedded ci riferiamo all’utilizzo di elettronica e software all’interno di un prodotto, in contrapposizione a sistemi a utilizzo generale (general-purpo se), come i desktop o i portatili. Una buona definizione di sistema embedded è la seguente.9
9 Con il Pentium 4 Intel passò dalla numerazione romana a quella araba per indicare il numero del modello. 9 Michael Barr, Embedded Systems Glossary. NetrinoTechnical Librar)7. http://w w w .netrino.com /Publications/ Glossa ry/index.php.
2.4 Sistemi embedded e ARM
Tabella 2 .7 Esem pi di sistemi em bedded e loro m ercato [N O ERQ 5). M ercato Automobilistico
Dispositivo Sistema di accensione Controllo del motore Sistema frenante
Elettronica di consumo
Televisione digitale e analogica DVD, videoregistratori, decoder Dispositivi palmari (PDA) Elettrodomestici (frigoriferi, tostapane, microonde) Automobili Giochi Telefoni/cellulari/cercapersone Macchine fotografiche GPS
Controllo industriale
Robotica e sistemi di controllo per la produzione industriale Sensori
Medicina
Pompe a infusione Macchine per dialisi Dispositivi protesici M onitor cardiaci
Office automation
Fax Fotocopiatrici Stampanti M onitor Scanner
Una combinazione di hardware e sofiware, ed eventualmente di altre componenti meccaniche, progettata per assolvere a un compito specifico. In molli casi i sistemi em bedded sono parte di un sistema o di un prodotto più grande, come nel caso del siste ma A B S di unautomobile. I sistemi embedded sono di gran lunga più diffusi dei computer general-purpose, perché vengono utilizzati in una vastissima gamma di applicazioni (Tabella 2.7). Tali sistemi pos sono avere una grande varietà di requisiti e vincoli, come nei casi seguenti [GRIM05J: ♦ sistemi piccoli e grandi implicano vincoli differenti in termini di costi di produzio ne, e quindi necessità diverse per quanto riguarda ottimizzazione e riutilizzo; ♦ sono soggetti a vincoli molto restrittivi e a combinazioni diverse di requisiti di qua lità, ad esempio in termini di sicurezza, affidabilità, risposta in tempo reale, flessibi lità e rispetto delle normative vigenti; ♦ tempo di vita da breve a lungo;
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
I
I
Software Sistemi ausiliari (alimentazione, raffreddamento)
Ambiente esterno
Figura 2.13
Possibile o rg an izzazio ne di un sistema em bedded.
♦ diverse condizioni ambientali in termini di radiazioni, vibrazioni e umidità, solo per citare alcuni esempi; ♦ differenti caratteristiche delle applicazioni, che possono essere statiche o dinamiche, lente o veloci, rivolte al calcolo o a un utilizzo intensivo dcll’in ter faccia, c/o combi nazioni di queste; ♦ diversi modelli di computazione (solitamente chiamati sistemi ibridi) chc variano dai sistemi a eventi discreti a sistemi con dinamiche a tempo continuo. Spesso i sistemi embedded sono strettamente relazionati al contesto di utilizzo. Questo può dare origine a vincoli di real-time imposti dalla necessità di interagire con il contesto. 1vin coli, come la velocità di movimento, la precisione delle misurazioni e il periodo di tempo richiesti impongono una precisa temporizzazione delle operazioni da eseguire. Se più at tività devono essere svolte simultaneamente, i vincoli di real-time saranno più restrittivi. La Figura 2.13, basata su [KOOP96], mostra in termini generali l’organizzazione di un sistema embedded. Oltre a processore c memoria vi e un certo numero di elementi chc normalmente non sono utilizzati nei computer desktop o portatili: ♦ tuia varietà di interfacce che permette al sistema di misurare, manipolare e interagi re con lambiente esterno; ♦ l’interfaccia con l’utente può essere molto semplice, come una spia lampeggiante, ma anche molto complicata, come una vista robotica in tempo reale;
2.4 Sistemi embedded e ARM
♦ la porca per la diagnostica c utilizzabile per esaminare il sistema che viene controlla to, non solo per la diagnosi del computer; ♦ dispositivi logici programmabili {¥VGK,field programmablegate array), specifici per applicazioni (ASIC, application specific integrated circuit) o hardware non digitale so no utilizzabili per migliorare prestazioni e sicurezza; ♦ il software ha spesso funzionalità prefissate ed è specifico per una data applicazione.
Evoluzione di ARM ARM è una famiglia di microprocessori e microcontrollori di tipo RISC, progettati da ARM Inc. di Cambridge (Inghilterra). ARM progetta processori e architetture multicore e dà in licenza i progetti ad aziende esterne che li producono. I chip ARM sono pro cessori ad alta velocità famosi per le piccole dimensioni e la bassa potenza richieste. Gli ARM vengono usati in maniera massiccia in computer palmari (PDA) e altri dispositivi portatili, inclusi videogiochi, telefoni e un’ampia varietà di prodotti di consumo. Ad esem pio, i ben noti dispositivi Apple iPod e iPhone contengono dei chip ARM. L’architettura ARNI e probabilmente la più diffusa nei sistemi embedded e dunque i chip ARM sono an che i processori più diffusi al mondo. Le origini della tecnologia ARJvI vanno ricondotte alla inglese Acorn Computers. All’inizio degli anni ’80 Acorn stipulò un accordo con British Broadcasting Corporation (BBC) per lo sviluppo di un nuovo microprocessore per il progetto BBC Computer Literacy. Il successo di questo accordo permise alla Acorn di continuare nello sviluppo e progettare il primo processore RISC commerciale, l’Acorn RISC Machine (ARM). La pri ma versione, A RM I, divenne operativa nel 1985 e fu utilizzata per ricerche interne e svi luppo, oltre a essere utilizzata come coprocessore nel progetto per la BBC. Sempre nel 1985, Acorn rilasciò TARM2, un processore delle stesse dimensioni del precedente, ma più veloce e con più funzioni. Ulteriori migliorie furono realizzate con il processore ARM3 (1989). Durante questo periodo Acorn affidò alla società VLSI Technology la fabbricazio ne dei suoi chip. VLSI poteva commercializzare i chip, ed ebbe un grande successo nel con vincere altre aziende a montare processori ARM nei loro prodotti, in particolare come pro cessori embedded. Il progetto ARM andava incontro alla domanda commerciale di processori per ap plicazioni embedded ad alte prestazioni, bassi consumi, piccole dimensioni e costi conte nuti, ma ulteriori sviluppi andavano oltre le capacità della Acorn. Fu così creata una nuo va società, la ARM Ltd., che vedeva la partecipazione di Acorn, VLSI e Apple Computer. Acorn RISC Machine fu rinominata Advanced RISC Machine.10 Il primo prodotto of ferto dalla nuova società fu ARM6, una versione migliorata di ARM3. In seguito, la società introdusse diverse nuove famiglie di processori, con sempre più numerose funzionalità e migliori prestazioni. La Tabella 2.8 mostra alcune caratteristiche delle diverse famiglie di
10 La società abbandonò la denominazione Advanced RISC Machine alla fine degli anni ’90. Al giorno d’oggi tale architettura è conosciuta semplicemente come ARM.
48
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
Tabella 2 .8
Evoluzione di ARM .
Famiglia
Funzionalità rilevanti
Cachc
ARMI
32-bit RISC
No
ARM 2
Istruzioni di moltiplicazione e scambio; unità di ge stione della memoria, grafica e processore I/O inte grati
No
MIPS tipico (5> MHz
"M IPS @ 12 M Hz
ARM3
Primo utilizzo della cache del processore
4KB unificata
12 MIPS @ 25 MHz
ARM6
Primo a supportare indirizzi a 32 bit; unità floating point (virgola mobile)
4KB imificata
28 MIPS @ 33 M Hz
ARM7
SoC integrato
8KB unificata
60 MIPS @ 60 M Hz
ARM8
Pipeline a 5 stadi; predizione statica dei salti
8KB unificata
84 MIPS @ 72 MHz
16 KB/16 KB
300 MIPS @ 300 M Hz
ARM9E
Istruzioni DSP migliorate
16K B/16K B
220 MIPS @ 200 M Hz
ARMlOE
Pipeline a 6 stadi
32 KB/32 KB
ARJvll 1
Pipe-line a 9 stadi
Variabile
740 MIPS @ 665 M H z
Cortex
Pipeline supcrscalare a 13 stadi
Variabile
2000 MIPS @ I GHz
XScale
Processore per le applicazioni; pipeline a 7 stadi
32 KB/32 KB LI 512KBL2
1000 MIPS @1,25 GHz
ARM9
Nota: DSP =Processore del segnale digitale (digirai signal processor); SoC = sistema su chip (system on a chip)
architetture ARM. I numeri della tabella sono solamente indicativi; i valori reali variano a seconda delle differenti implementazioni. Conformemente a quanto descritto sul sito web di ARM (arm.com), i processori ARM sono progettati per soddisfare tre diverse categorie di sistemi: ♦ sistemi embedded real-time: sistemi di memorizzazione, comparto automobilisti co e industriale, applicazioni di rete; ♦ piattaforme applicative: dispositivi chc utilizzano sistemi operativi come Linux, Palm OS, Symbian OS e Windows CE per applicazioni wireless e di intrattenimen to digitale; ♦ applicazioni per la sicurezza: smart card, SlM card e terminali Bancomat.
2.5
Valutazione delle prestazioni
Nella valutazione dcll’hardware di un processore e nella definizione dei requisiti di un nuovo sistema le prestazioni sono tra i fattori chiave da tenere in considerazione, insieme a costo, dimensioni, sicurezza, affidabilità e, in alcuni casi, ai consumi. È difficile effettuare confronti significativi tra diversi processori, anche tra processo ri di ima stessa famiglia. La velocità pura è molto meno importante del modo in cui un pro-
2.5 Valutazione delle prestazioni
ccssore si comporta con una data applicazione. Sfortunatamente le prestazioni rispetto al le applicazioni non dipendono solo dalla velocità del processore, ma anche dal set di istru zioni, dalla scelta del linguaggio di programmazione, dall efficienza del compilatore e dal l’abilità del programmatore chc ha implementato l’applicazione. Incominciamo questo paragrafo con uno sguardo rivolto ai metodi tradizionali di mi surazione della velocità del processore. Esamineremo poi gli approcci più comuni per va lutare le prestazioni di un calcolatore c di un sistema di calcolo. Continueremo quindi con una discussione su come unire i risultati ottenuti in diversi test. Infine, vedremo che cosa si ottiene considerando la legge di Amdahl.
Velocità di clock e numero di istruzioni al secondo Il clock di sistema. Le operazioni effettuate da un processore, come il fetch di un’istru zione, la sua decodifica, l’esecuzione di operazioni aritmetiche e così via sono governate dal clock di sistema. Tipicamente, ogni operazione inizia con l’impulso del clock. La velocità di un processore è quindi dettata, prima di tutto, dalla frequenza degli impulsi prodotti dal clock, misurata in cicli al secondo, o in Hertz (H z). Di solito i segnali del clock sono generati da un cristallo di quarzo in grado di pro durre un segnale d ’onda costante. Tale onda viene convertita in un flusso di impulsi digi tali che alimentano costantemente la circuiteria del processore (Figura 2.14). Ad esempio, un processore a I G H z riceve 1 miliardo di impulsi al secondo. La frequenza degli impul si è chiamatafrequenza di clock (clock rate) o velocità di clock (clock speed). Un incremen to, o un impulso, del clock è chiamato ciclo di clock (clock cycle) o clock tick. Il tempo tra due impulsi consecutivi è la durata di un ciclo (cycle time). La frequenza di clock non è arbitraria, ma deve essere adeguata alle caratteristiche fi siche del processore. Le azioni all’interno del processore richiedono l’invio di segnali da un
Figura 2.14
O ro lo g io di sistem a (clo ck).
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
elemento del processore a un altro. Quando viene inviato un segnale all'interno del pro cessore è necessario un intervallo di tempo prima che la tensione si assesti e renda possi bile la lettura accurata di un valore (1 oppure 0). Inoltre, a seconda delle caratteristiche fi siche del processore, alcuni segnali possono cambiare più rapidam ente di altri. Le operazioni vanno quindi sincronizzate e calibrate affinché siano disponibili i valori elettrici (la tensione elettrica) appropriati per ogni operazione. L’esecuzione di un’istruzione richiede un certo numero di passi distinti, come il fetch dell’istruzione dalla memoria, la decodifica delle varie parti dell’istruzione, il caricamen to e/o la memorizzazione di dati e l’esecuzione di operazioni aritmetiche e logiche. Alcune istruzioni hanno bisogno di pochi cicli, altre ne richiedono dozzine. Inoltre, con l’utilizzo di pipeline, diverse istruzioni vengono eseguite contemporaneamente. Se ne deduce che un mero confronto tra velocità di clock di diversi processori non sarà in grado di dire tu t to quello che serve sulle prestazioni. Frequenza di esecuzione delle istruzioni. Un processore è guidato da un clock a fre quenza costanteJ ot equivalentemente, a cycle time costante r, dove τ = H f Definiamo / per un dato programma, come il numero di istruzioni macchina eseguite dal programma fino al suo completamento (o per un intervallo di tempo fissato). Si noti che tale numero e il numero di istruzioni eseguite, non il numero di istruzioni chc costituiscono il codice oggetto del programma. Un parametro importante è il numero medio di cicli per istru zione di un programma, indicato con CPI. Se ogni istruzione richiedesse lo stesso nume ro di cicli di clock, allora C P Isarebbe un valore costante. Invece, in generale, il numero di cicli di clock per istruzione varia a seconda del tipo di istruzione (istruzioni di load, sto re, branch e così via). Sia CTY il numero di cicli richiesti per il tipo di istruzione /, e sia / il numero di istruzioni di tipo / eseguite da un dato programma. Possiamo allora calcolare il valore CPI come segue:
C Pl - Σ - - (7 ' X
(2.0
Ac U tempo T richiesto da un processore per eseguire un programma è dato da: T = Ic X C P I X τ Possiamo raffinare questa espressione considerando che durante l’esecuzione di un’istru zione una parte del lavoro è svolta dal processore e una parte del tempo è richiesta dal tra sferimento di parole tra processore e memoria. In quest’ultimo caso il tempo di trasferi mento dipende dal cycle time della memoria, chc può essere maggiore rispetto a quello del processore. Riscriviamo dunque la precedente formula come:
P = h x [p + (m X £)] x T dove p è il numero di cicli necessario per decodificare ed eseguire un’istruzione, m il nu mero di riferimenti alla memoria e k il rapporto tra il cycle time della memoria c quello del processore. I cinque fattori di prestazione nella precedente relazione (/,/>, m, k, r) sono in fluenzati da quattro caratteristiche del sistema: il progetto del set di istruzioni (noto co me l’architettura del set di istruzioni), la tecnologia del compilatore (l’efficienza del com-
2.5 Valutazione delle prestazioni
Tabella 2 .9
Fattori di prestazione e attributi del sistem a. /C
P
A rch itettu ra del set d i istruzioni
X
X
Tecnologia del com pilatore
X
X
Im plem entazione del processore
k
?n
r
X
X
X X
Cache e gerarchia di m em oria
X
pilatorc nella generazione del codice in linguaggio macchina partendo dal codice ad alto livello), Timplcmcntazione del processore e la gerarchia di memoria e cache. La Tabella 2.9, basata su [HWAN93], è una matrice in cui una dimensione mostra i cinque fattori di pre stazione e l’altra le quattro caratteristiche del sistema. Una X in una cella indica una ca ratteristica di sistema chc ha effetto su un dato fattore. Una misura comune delle perfor mance di un processore è la frequenza con cui le istruzioni sono eseguite, espressa in milioni di operazioni al secondo (MIPS, millions ofinstructions per second) e chiamata M IP S rate. Possiamo esprimere il MIPS rate in termini di frequenza di clock e C P Icome segue: / f MIPS rate = ----- — - = ------ -------7 T X IO6 C P I X IO6
(2.2)
Si consideri ad esempio una esecuzione di un programma che consiste nell esecuzione di 2 milioni di istruzioni su un processore a 400 M Hz. Il programma è composto da quattro tipologie principali di istruzioni. La frequenza delle diverse istruzioni e il CPI di ogni istruzione, ottenuti mediante un esperimento di tracciamento del !esecuzione, sono: CPI
Frequenza
Aritmetico/logica
1
60%
Load/store dati nella cache
2
18%
Branch
4
12%
Riferimenti a memoria (cache miss)
8
10%
T ip o d i istruzione
II CPI medio ottenuto con i dati della tabella e con il programma eseguito su un sistema monoprocessore e CPI = 0,6 + (2 X O118) + (4 X 0,12) + (8 x 0 ,1 ) = 2,24. Il MIPS rate cor rispondente c (400 X IO6) / (2,24 x IO6) « 178. Un altro comune strumento per misurare le prestazioni è dedicato alle istruzioni in virgola mobile (floating-point). Tali istruzioni sono frequentemente utilizzate in molte ap plicazioni scientifiche c nei vidcogiochi. La prestazione in virgola mobile è espressa in mi lioni di istruzioni in virgola mobile al secondo (MFLOPS, millions o f floating-point opera tions per second) cd c definita dalla seguente formula: Numero di operazioni in virgola mobile eseguite MFLOPS rate = -------------------------------------- ----------- --------£------Tempo di esecuzione X IO 6
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
Benchmark Misure comc MIPS e MFLOPS si sono dimostrate inadeguate per la valutazione delle pre stazioni dei processori. A causa delle differenze tra set di istruzioni, la frequenza di esecu zione delle istruzioni non è uno strumento valido per confrontare le prestazioni di archi tetture diverse. Per esempio, si consideri l’istruzione ad alto livello: A = B + C / * s i
a s s u m a che i d a t i s i a n o in m e m o r i a c e n t r a l e */
Con un set di istruzioni tradizionale, cioè in un calcolatore di tipo CISC questa istruzio ne può corrispondere a una singola istruzione macchina: add
m e m (B ),
m e m (C ), m e m (A )
In una tipica macchina RISC, la compilazione darebbe pressapoco questo risultato: load m e m (B), reg(l); load mem(C), reg(2); add r e g (1 ), reg(2), reg(3); store reg(3), m e m (A)
Grazie alla natura delle architetture RISC (discusse nel Capitolo 13), i due calcolatori pos sono eseguire l’originale istruzione ad alto livello circa nello stesso tempo. Supponendo che l’esempio sia significativo per i due calcolatori, se la macchina CISC avesse una frequenza di 1 MIPS, la RISC dovrebbe avere una frequenza di 4 MIPS, nonostante le due macchi ne eseguano lo stesso numero di istruzioni ad alto livello nello stesso tempo. Inoltre, le prestazioni di un dato processore su un dato programma potrebbero non essere utili per determinare quale sarà il comportamento del processore su applicazioni molto diverse. Per le ragioni sin qui esposte, a partire dalla fine degli anni ’80 e dai primi anni ’90, le attenzioni delle industrie c delle istituzioni accademiche si spostarono sulla mi surazione delle prestazioni dei sistemi tramite specifici programmi di test, detti benchmark. Lo stesso benchmark può essere eseguito su diverse macchine c i risultati delle ese cuzioni possono essere confrontati. [^$^IC90] elenca le caratteristiche ideali di un benchmark: 1. essere scritto in un linguaggio ad alto livello, in modo che sia portabile su macchine diverse; 2. essere rappresentativo di un particolare stile di programmazione, come ad esempio programmazione di sistema, scientifico/numerica o commerciale; 3. poter essere facilmente misurato; 4. avere una vasta distribuzione. B enchm ark SPEC. Le esigenze comuni di industria, mondo accademico c comunità di ricerca di uno strumento di misurazione delle prestazioni dei computer che sia general mente accettato hanno portato allo sviluppo di collezioni (suite) di programmi di benchmark standard. Una suite di benchmark è una collezione di programmi scritti in un linguaggio ad alto livello che ha lo scopo di offrire un test significativo per un computer in una particolare arca di programmazione applicativa o di sistema.
2.5 Valutazione delle prestazioni
La miglior collezione di tali programmi è definita c mantenuta dal consorzio indu striale SPEC (system performance evaluation corporation). Le misure di performance SPEC sono largamente utilizzate per effettuare confronti e a scopi di ricerca. La più conosciuta suite di benchmark SPEC e la SPEC CPU2006, la suite standard per le applicazioni che utilizzano il processore in maniera intensiva. SPEC CPU2006 è quindi appropriata per mi surare le prestazioni rispetto ad applicazioni che impiegano la maggior parte del loro tem po effettuando computazioni, invece chc operazioni di I/O . La suite CPU2006 e basata su applicazioni che i membri della SPEC hanno già portato su una grande varietà di piat taforme e consiste in 17 programmi in virgola mobile scritti in C, C++ e Fortran, c in 12 programmi in C e C++ chc operano su interi. L’intera suite contiene oltre 3 milioni di li nee di codice. SPEC CPU2006 è la quinta generazione della suite per applicazioni a uso intensivo del processore e sostituisce le precedenti SPEC CPU2000, SPEC CPU95, SPEC CPU92 e SPEC CPU89 [HENN07]. Tra le altre suite SPEC vi sono: ♦ SPECj vm98 : per valutare le prestazioni dcllmsicmc degli aspetti hardware e softwa re della piattaforma client Java Virtual Machine (JVM). ♦ SPEC jbb2000 (Java Business B enchm ark): per valutare applicazioni di e-com merce lato server basate su Java. ♦ SPECweb99: valuta le performance di server WWW. ♦ SPECm ail2001 : per misurare le prestazioni di server mail.
Raggruppare i risultati Per ottenere un confronto affidabile delle prestazioni di diversi computer c preferibile ese guire un certo numero di benchmark differenti su ogni macchina e raggruppare poi i ri sultati ottenuti. Ad esempio, se vengono utilizzati m benchmark diversi basterà calcolare la media aritmetica come segue: R* = ~m I= Z 1R·
(2·3)
dove Rj è il valore calcolato dall’i-csimo benchmark per l’esecuzione di un’istruzione di lin guaggio ad alto livello. Un’alternativa è l’utilizzo della media armonica : (2.4)
L’interesse deH’utente è rivolto fondamentalmente al tempo di esecuzione di un sistema c non alla frequenza di esecuzione delle istruzioni. Se prendiamo la media aritmetica delle frequenze ottenute con vari benchmark otteniamo un risultato chc c proporzionale alla somma degli inversi dei tempi d’esecuzione, ma non necessariamente inversamente pro porzionale alla somma dei tempi. In altre parole, non e sufficientemente chiara la relazio
Panoramica ♦ Capitolo 2 - Evoluzione e prestazioni del calcolatore
ne tra la media aritmcnica delle frequenze e il tempo di esecuzione. D ’altro canto, la me dia armonica è l’inverso del tempo medio di esecuzione. I benchmark SPEC non si preoccupano della frequenza di esecuzione delle istruzio ni. Piuttosto, ! interesse è rivolto a due metriche fondamentali: una basata sulla velocità e l’altra sulla frequenza. La metrica basata sulla velocità misura labilità di un computer nel portare a termine un singolo compito. SPEC definisce un tempo di esecuzione per ogni benchmark utilizzando una macchina di riferimento. I risultati per un sistema che viene testato sono espressi come rapporto tra il tempo di esecuzione di riferimento e il tempo di esecuzione sul sistema oggetto del test. Il rapporto è calcolato come segue: r, =
T refi
(2.5)
TSUI;
dove Trefj e il tempo di esecuzione del benchmark i sul sistema di riferimento e Tsutj è il tempo di esecuzione del benchmark i sul sistema testato. Come esempio, consideriamo il Sun Biade 6250, dotato di 2 chip con quattro core per chip. Uno dei benchmark SPEC CPU2006 per gli interi e 464.h264ref, implementazione di riferimento di H.264/AVC (· : ■ : · ·'■ ·■:■· · W -AfA 'λ / ' ' ' ν'Λ', 'Mt,·. ·>/ / W R ITE / '
"
W R IT E /
I » I
, 1 1 / / i
Com ando di I/ O
W R IT E
y / ^
/ / / / / / / /
1
/
/ /
fi / I
U t'
I1
' Λ / 1
/ /
Program m a di I/O
/ '/ " I
X W R ITE
Program m a utente
I
^
C om ando di I/O
^
/ / / ' / / / ' /
«s.
/ / / / / /
G estore ^dell’interrupt
s \/l
I
/ V
1
/ / / /
G estore del I’interrupt
!/r' " - / r i
W R IT E - I
/ I
/ / / / / / / / / / / / / / //
END
1 END
(/ W RITE (a) S en za interrupt
Figura 3 .7
W R ITE
W R IT E
(b) C on interrupt; b reve attesa di I/O
(c) C on interrupt; lunga attesa d i I/O
Flusso di co n tro llo di un program m a co n e se n z a interrupt.
►
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
comando di I/O . Dopo l’esccuzionc di queste poche istruzioni, il processore torna a ese guire il programma utente. Nel frattempo, il dispositivo esterno e occupato ad accettare i dati dalla memoria del calcolatore e a stamparli. Questa operazione di I/O è condotta in maniera concorrente all’esecuzione delle istruzioni del programma utente. Quando il dispositivo esterno è pronto ad accettare altri dati dal processore, il rela tivo modulo di I/O manda al processore un segnale di richiesta di interrupt. Il processore risponde sospendendo le operazioni del programma corrente, saltando a un programma per servire quel particolare dispositivo di I/O , noto come gestore di interrupt (interrupt handler), e riprendendo Tcsecuzione originaria dopo chc la richiesta del dispositivo è sta ta soddisfatta. Nella Figura 3.7b i punti nei quali avvengono le interruzioni sono indicati con un asterisco. Dal punto di vista del programma utente, un interrupt è solo un’interruzione del nor male flusso esecutivo. Qiiando la routine di interrupt è completata, viene ripresa l’esecu zione del programma utente (Figura 3.8). Dunque i programmi utente non devono con tenere alcun codice speciale per gestire gli interrupt; il processore e il sistema operativo sono responsabili della sua sospensione e della sua ripresa a partire dallo stesso punto. Per agevolare gli interrupt, viene aggiunto al ciclo di istruzione un ciclo di interrupt (interrupt cycle), come mostrato nella Figura 3.9. In esso, il processore controlla se e avve nuto qualche interrupt, il che e indicato dalla presenza di un segnale di interrupt. Se non vi sono interrupt pendenti, il processore procede al ciclo di prelievo e legge la successiva istruzione del programma corrente. Se invece c’è un interrupt pendente, il processore ope ra come segue. ♦ Sospende l’esecuzione del programma attualmente in esecuzione e salva il suo con testo. Questo significa memorizzare l’indirizzo della prossima istruzione da eseguire Program m a utente
O ccorrenza d ell'in terru p t
Figura 3 .8
/+ 1
Trasferimento di controllo via interrupt.
G estore d ell'interrupt
3.2 Funzione del calcolatore
F a s e d i fe tc h
Figura 3.9
F a s e e s e c u tiv a
C ic lo d i in te r r u p t
C iclo istruzione con interrupt.
(l’attuale contenuto del program counter) c ogni altro dato rilevante per l’attività cor rente del processore. ♦ Imposta il program counter al l’indirizzo di partenza di una routine per la gestione dell’interrupt. Il processore procede poi al ciclo di fetch e legge la prima istruzione del programma di ge stione dcll’intcrrupt (che di solito fa parte del sistema operativo). Generalmente determi na la natura dell’interrupt ed esegue le azioni necessarie. Nell’esempio chc abbiamo utiliz zato, il gestore determina quale periferica ha generato l’intcrrupt c può saltare a un programma chc scriverà dati sulla periferica. Qiiando la routine di gestione termina, il pro cessore riprendeIcsccuzionc del programma utente dal punto dell’interruzione. È chiaro chc in questo processo si verifichi dell 'overhead, nel senso che il gestore dcll’interrupt deve eseguire istruzioni extra per determinare la natura dell’interrupt e per de cidere lazionc appropriata. Ciononostante, a causa del tempo relativamente abbondante che si sarebbe perso nell’attesa di un’operazione di I/O , l’uso degli interrupt garantisce un più intenso utilizzo del processore. Per apprezzare il guadagno in efficienza, si consideri la Figura 3.10, chc rappresenta un diagramma temporale basato sul flusso di controllo delle Figure 3.7a c 3.7b. Si assuma an che chc il tempo richiesto per l’operazione di I /O sia relativamente breve: meno del tem po richiesto per completare l’esecuzione delle istruzioni tra le operazioni di scrittura nel pro gramma utente. Il caso più tipico, specialmente per un dispositivo lento quale una stampante, è chc le operazioni di I/O impieghino molto più tempo dell’esecuzione di una sequenza di istruzioni utente. La Figura 3.7c indica questo stato di cose. In tal caso, il pro gramma utente raggiunge la seconda chiamata W RITE prima che l’operazione di I /O in vocata precedentemente sia stata completata. Il risultato è che il programma utente viene bloccato in quel punto. Solo quando la precedente operazione di I/O viene completata può essere trattata la nuova chiamata W RITE e può iniziare una nuova operazione di I / O. La Figura 3.11 mostra la temporizzazione di questa situazione con e senza l’uso di interrupt. Possiamo vedere chc si ottiene ancora un guadagno in efficienza, dato che parte del tempo in cui l’operazione di I/O c in corso si sovrappone all’esecuzione delle istruzioni utente.
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
Tempo
©
Θ
©
A tte sa d el
O perazione di I/O
p ro c e ss o re
©
© Attesa del processore
Figura 3.10
O perazione di I/O
©
©
(a)
(2 a)
©
©
© ©
_
t
,3 a )
O perazione di I/O
© ©
O perazione di I/O
(b) C on interrupt
Senza interrupt Temporizzazione del programma: breve attesa di I/O.
La Figura 3.12 mostra un diagramma di stato del ciclo macchina rivisto, che ora include lelaborazione degli interrupt. Interrupt multipli
La discussione fin qui si è concentrata sull’occorrenza di un solo interrupt. Si supponga, invece, chc possano avvenire interrupt multipli. Ad esempio, un programma potrebbe ri cevere dati da una linea di comunicazioni e stampare i risultati. La stampante genererà un interrupt ogni volta che completa un operazione di stampa. Il controllore della linea di co municazioni genererà un interrupt ogni volta che arriva un’unità di dati. L’unità potrebbe essere sia un carattere sia un blocco di caratteri, a seconda del tipo di comunicazione. In ogni caso, mentre viene gestito un interrupt di stampa c possibile che avvenga un interrupt di comunicazione.
3.2 Funzione del calcolatore
©
Tem po
©
©
® t
Attesa del processore
O perazione di I/O
©
O perazione di I/O
© ©
© ©
© >' :
«SS n
‘
A tte sa d el p ro c e ss o re '
© Figura 3 .1 1
A ttesa del processore
©
©
(a)
O perazione di I/O
O perazione di I/O
(b) Con interrupt
Senza interrupt
Tem porizzazione del programma: lunga attesa di I/O.
Per trattare gli interrupt multipli si possono usare due approcci. Il primo c disabilitare gli interrupt durante l’elaborazione di un interrupt. Un interrupt disabilitato implica sempli cemente che il processore può e deve ignorare il segnale di richiesta di interrupt. Se durante questo tempo avviene un interrupt, generalmente esso rimane pendente c sarà controlla to dal processore dopo la riabilitazione degli interrupt. Dunque, gli interrupt che si veri ficano durante !’esecuzione di un programma vengono immediatamente disabilitati. Dopo il termine della routine di gestione relativa, essi vengono abilitati prima della ripresa del programma utente, e il processore controlla se ne siano avvenuti altri. Qiicsto approccio
L e ttu ra o p era n d o
A ltri o p eran d i
C a lc o lo in d irizzo istru zio n e
Fig u ra 3 .1 2
D eco d ifica istru zio n e
C a lc o lo in d irizzo o p era n d o
O p era zio n e su d ati
Istru z io n e co m p letata,
R ito rn o per
fc tc h d ella su c cessiv a istru zio n e
strin g h e e vettori
D iag ra m m a di stato del c ic lo m a c c h in a , co n interrupt.
82 Sistema di elaborazione ♦ Capitolo
C a lco lo in d irizzo risu lta to
N essu n interrupt
C o n tro llo
In terru p t
3 - Visione ad alto livello delle funzioni
A ltri risu ltati
3.2 Funzione del calcolatore
P ro g ram m a utente
Gestione d e ll'in te rru p t X
(a) E laborazione sequenziale degli in terru p t
P ro g ram m a utente
Gestione dell’in te rru p t X
■a Gestione dell’in te rru p t Y
\ \
(b) E laborazione an n id ata degli in te rru p t
Figura 3.13
Trasferimento di controllo con interrupt multipli.
è semplice e pulito, dato che gli interrupt sono gestiti in ordine strettamente sequenziale (Figura 3.13a). Lo svantaggio però è che non si tiene conto di fattori di priorità o di tempistica. Per esempio, Tinput dalla linea di comunicazioni potrebbe richiedere di essere assorbito rapi damente per fare posto ad altro input. Sc il primo lotto non è stato elaborato prima del l’arrivo del secondo, i dati potrebbero venire smarriti. Un secondo approccio consiste nel definire le priorità per gli interrupt e consentire a un interrupt di priorità più alta di interrompere il trattamento di un interrupt a priorità inferiore (Figura 3.13b). Come esempio, si consideri un sistema con tre dispositivi di I/O : ima stampante, un disco e una linea di comunicazione, con priorità rispettivamente di va lore 2,4 e 5. La Figura 3.14 illustra una possibile sequenza. Un programma utente inizia al l’istante / = 0 . A r = 10 si verifica un interrupt di stampa; l’informazione utente viene posi zionata sulla pila di sistema e l’esecuzione procede con la routine di servizio dcH’interrupt
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
P rogram m a utente
Figura 3.14
ISR della stam pante
della linea di com unicazione
Esempio di sequenza temporale di interrupt multipli.
(ISR) di scampa. Mentre questa routine è ancora in esecuzione, a / = 15, avviene un inter rupt di comunicazione. Poiché la linea di comunicazioni ha una priorità più alta della stampante, viene gestito tale interrupt. L’ISR della stampante viene interrotto, il suo stato viene memorizzato sulla pila e l’esecuzione procede con I ISR di comunicazione. Mentre questa routine e in esecuzione, avviene lui interrupt di disco (/ = 20). Poiché questo inter rupt ha una priorità più bassa, esso viene semplicemente mantenuto e viene completata la procedura dell’interrupt di comunicazione. Q uando ciò avviene (/= 2 5 ), viene ripristinato il precedente stato del processore, os sia Icsecuzionc dcll’ISR di stampa. Tuttavia, prima ancora di eseguire anche solo un’istru zione di tale routine, il processore onora l’interrupt del disco, che ha priorità superiore, e il controllo passa all’ISR del disco. L’ISR di stampa viene ripresa solo quando la routine del disco c stata completata (/ = 35). Quando anche quest’ultima routine finisce (t = 40), il con trollo finalmente ritorna al programma utente.
Funzioni di I/O Finora abbiamo trattato le operazioni del calcolatore controllate dal processore, conside rando principalmente l’interazione tra processore e memoria. Ora conviene riportare un breve riassunto del ruolo dei componenti di I/O (chc saranno trattati in modo approfon dito nel Capitolo 7). Un modulo di I/O (ad esempio il controllore del disco) può scambiare dati diretta mente con il processore. Proprio come il processore, esso può innescare una lettiua in me moria, designando l’indirizzo di una specifica locazione. A sua volta il processore può an che scambiare dati con un modulo di I /O. In quest’idtimo caso, il processore identifica una
3.3 Strutture di interconnessione
periferica gestita dal proprio driver. Dunque, si può verificare una sequenza di istruzioni simile a quella della Figura 3.5, con istruzioni di I/O anziché riferimenti alla memoria. In alcuni casi è conveniente chc ci siano scambi diretti tra I/O e memoria. In tali si tuazioni, il processore assegna a un modulo di I/O l’autorità di leggere da o scrivere in me moria, cosicché il trasferimento dati possa avvenire senza l’intervento del processore. Durante tale trasferimento, il modulo di I/O emette comandi di lettiua o scrittura verso la memoria, liberando il processore dalla responsabilità dello scambio. Qiiesta operazio ne, nota come accesso diretto alla memoria (DM A, direct memory access) verrà esaminata nel Capitolo 7.
3.3
Strutture di interconnessione
Un calcolatore consiste in un insieme di componenti o moduli di tre tipi fondamentali (processore, memoria, I / O) che comunicano tra loro. Dunque, devono esserci percorsi di collegamento che costituiscono la cosiddetta struttura d i interconnessione. La Figura 3.15 suggerisce i tipi di scambio necessari, indicando le principali forme di input e output per ogni tipo di modulo.2 ♦ Memoria: tipicamente, un banco di memoria consiste di un certo numero di loca zioni (celle o parole), diciamo A7, tutte della stessa lunghezza. A ognuna di queste vie ne assegnato un indirizzo numerico univoco, che va da 0 a.N - I. Il contenuto di una locazione di memoria può essere letto o scritto. La natura dell’operazione c indicata dai segnali di controllo di lettura e scrittura. La locazione interessata e specificata da un indirizzo. ♦ Moduli di I/O : da un punto di vista interno al sistema, ΓΙ/O e funzionalmente si mile alla memoria. Sono possibili due operazioni, la lettura e la scrittura. Inoltre, un modulo di I/O può controllare più di un dispositivo periferico. Le interfacce di que sti dispositivi sono considerate come porte e viene loro assegnato un indirizzo uni voco, chc va da 0 a M - 1. Inoltre, ci sono linee dati esterne per l’input e l’output dei dati. Infine, i moduli di I/O possono mandare segnali di interrupt al processore. ♦ Processore: legge le istruzioni e i dati, scrive i dati dopo l’elaborazione, usa segnali di controllo per gestire le operazioni del sistema c può ricevere segnali di interrupt. L’elenco precedente definisce i dati da scambiare. Le interconnessioni garantiscono i se guenti tipi di trasferimento. ♦ Dalla memoria al processore: il processore legge un’istruzione o un dato dalla memoria. ♦ Dal processore alla memoria: il processore scrive un dato in memoria. ♦ D all’! / O al processore: il processore legge i dati da una periferica.
2 Lc frecce grandi rappresentano linee di segnale che trasportano bit in parallelo. Qiielle sottili sono linee (seriali) da un bit.
85
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
L e ttu ra
Figura 3.15
Moduli del calcolatore.
♦ Dal processore all’I/O : il processore invia dati alla periferica. ♦ DaU’I/O alla memoria o viceversa: in questi due casi, i moduli di I/O possono scambiare dati direttamente con la memoria, senza passare per il processore, usando laccesso diretto alla memoria (DMA). Nel corso degli anni sono state tentate molte strutture di interconnessione. Le più comu ni tra queste sono il bus e le varie strutture a bus multiplo. La parte restante del capitolo è dedicata a questo argomento.
3.4 Interconnessione a bus
3.4
Interconnessione a bus
Il bus c un mezzo di comunicazione chc collega due o più dispositivi. Sua caratteristica pe culiare c quella di essere un mezzo di trasmissione condiviso. Al bus si collegano più di spositivi, c l u i segnale trasmesso da uno di essi è disponibile per la ricezione da parte di tut ti gli altri dispositivi connessi al bus. Sc due dispositivi trasmettono nello stesso periodo di tempo, il loro segnale si sovrapporrà c verrà mascherato. Così, solo un dispositivo per volta può trasmettere con successo. Generalmente, un bus consiste di più percorsi di comunicazione, detti linee. O gni li nea è in grado di trasmettere segnali chc rappresentano i bit: 0 ο 1. Considerate assieme, le linee possono trasmettere cifre binarie simultaneamente (in parallelo). Per esempio, un dato da 8 bit può essere trasmesso in parallelo da un bus a 8 linee. I sistemi di elaborazione contengono svariati bus chc forniscono un collegamento tra i componenti dei vari livelli gerarchici del calcolatore. U n bus chc collega i componenti principali di un elaboratore (processore, memoria, I/O ) c detto bus d i sistema (system bus). Le strutture di interconnessione più comuni sono basate sull’uso di uno o più bus.
Struttura dei bus Il bus di sistema consiste tipicamente di un numero di linee che va da circa 50 a qualche centinaio. A ogni linea viene assegnato un particolare significato o funzione. Sebbene esi stano vari schemi, le lince dei bus possono essere classificate in tre gruppi funzionali (Figura 3.16): dati, indirizzi c controllo. Inoltre, possono esserci linee per l’alimentazio ne elettrica. Le linee dati forniscono il percorso su cui viaggiano i dati tra i moduli di sistema, e considerate collettivamente, sono chiamate bus dati, chc consistono di un numero di linee separate che va da 32 a qualche centinaio. Il numero di linee viene detto am piezza del bus dati. Poiché ogni linea può trasportare solo un bit alla volta, il numero di lince determina quanti bit possano essere trasportati contemporaneamente. L’ampiezza del bus dati è un fattore chiave per le prestazioni complessive del sistema. Ad esempio, se il bus dati e largo 8 bit e ciascuna istruzione e lunga 16 bit, il processore deve accedere alla memoria due vol te per ogni istruzione.
F ig u ra 3 .1 6
Schema di interconnessione a bus.
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
Le linee indirizzi vengono impiegate per designare la destinazione dei dati presenti sul bus dati (o la locazione da cui prelevarli). Ad esempio, se il processore intende leggere un dato (8,16 o 32 bit) da una locazione di memoria, ne pone l’indirizzo sulla linea degli in dirizzi. Chiaramente, l’ampiezza del bus degli indirizzi determina la massima quantità di memoria di un sistema. Inoltre, le lince indirizzi vengono generalmente utilizzate per in dicare le porte di I/O . In genere, i bit più significativi vengono usati per selezionare una par ticolare periferica, e quelli di ordine più basso individuano una locazione d i memoria o una porta di I/O all’interno del modulo. Ad esempio, su un bus indirizzi a 8 bit, gli indirizzi O l l l l l l l e inferiori possono riferirsi a locazioni di un modulo di memoria (il modulo 0) con 128 parole, e gli indirizzi 10000000 c superiori ai dispositivi collegati a un modulo di I/O (il modulo 1). Lc linee di controllo vengono utilizzate per controllare l’accesso e l’uso delle linee da ti c indirizzi. Poiché queste ultime sono condivise da tutti i componenti, ci deve essere un mezzo per controllare il loro uso. I segnali di controllo trasmettono sia comandi sia infor mazioni di tcmporizzazionc tra i moduli del sistema. I segnali di temporizzazione indica no la validità delle informazioni di dati e indirizzi. I segnali di comando specificano le ope razioni da compiere. Le tipiche linee di controllo includono le seguenti. ♦ Memory write: provoca la scrittura dei dati sul bus alla locazione specificata. ♦ Memory read: posiziona sul bus i dati della locazione specificata. ♦ I/O write: determina l’invio dei dati (lungo il bus) alla porta di I /O specificata. ♦ I/O read: posiziona sul bus i dati della porta di I/O specificata. ♦ Transfer ACK: indica che i dati sono stati accettati in uscita dal bus o scritti sul bus stesso. ♦ Bus request: significa che un modulo vuole prendere controllo del bus. ♦ Bus grant: indica che a un modulo richiedente è stato concesso il controllo del bus. ♦ Interrupt request: testimonia la presenza di un interrupt pendente. ♦ Interrupt ACK: prende atto chc !’interrupt pendente e stato riconosciuto. ♦ Clock: usato per sincronizzare le operazioni. ♦ Reset: inizializza tutti i moduli. • J i. ‘ Il bus òpera come segue. Se un modulo desidera inviare dati a un altro, deve ottenere l’u so del bus e poi trasferire i dati sul bus. Se un modulo desidera richiedere dati da un altro modulo, deve ottenere l’uso del bus, trasferire una richiesta all’altro modulo sulle appro priate linee di controllo e di indirizzo, e poi deve attendere l’invio dei dati. Da un punto di vista fisico, il bus di sistema è costituito da vari conduttori elettrici in parallelo. Nella sua disposizione classica, questi conduttori costituiscono un circuito stampato. Il bus si estende lungo tutte le componenti del sistema, che si collegano a qual cuna o a tutte le sue linee. La tipica disposizione fisica è mostrata nella Figura 3.17. Nell’esempio, il bus consiste di due colonne verticali di conduttori. Lungo le colon ne, a intervalli regolari, sono presenti dei punti di attacco (slot) che si estendono orizzon talmente per sostenere una scheda di circuito stampato. 1 principali componenti occupa no una o più piastre e si inseriscono nel bus in corrispondenza di opportune fessure. L’intera disposizione viene ospitata in un telaio. I sistemi moderni tendono invece ad avere tutti i
3.4 Interconnessione a bus
Bus
Figura 3.17
Tipica realizzazione di un'architettura a bus.
componenti principali sulla stessa piastra con più elementi sullo stesso chip, come avvie ne per il processore. Dunque, un bus interno al chip può connettere il processore c la me moria cache, mentre un bus interno alla scheda può connettere il processore alla memo ria centrale e ad altri componenti. Qiiesta disposizione è la più conveniente. Un piccolo sistema di elaborazione può es sere acquistato e poi espanso (più memoria, più I /O) aggiungendo ulteriori schede. Se il componente di una scheda si guasta, questa può essere rimossa e sostituita con facilità.
Gerarchie a bus multiplo Se al bus è connesso un gran numero di dispositivi, le prestazioni ne soffriranno, per due motivi principali. 1. In generale, più dispositivi sono collegati al bus, più il bus è lungo e il ritardo di pro pagazione aumenta. Tale ritardo determina il tempo necessario ai dispositivi per coordinare l’uso del bus. Quando il controllo del bus passa con frequenza da un di spositivo a un altro, tali ritardi di propagazione possono influenzare notevolmente le prestazioni. 2. Il bus può diventare un collo di bottiglia quando la domanda di trasferimento di da ti aggregati si avvicina alla capacità del bus. Questo problema può essere neutraliz zato in qualche modo incrementando la velocità di trasferimento dei dati sul bus e usando bus più ampli (ad esempio passando da 32 a 64 bit). Tuttavia, poiché i tassi di generazione dati dei dispositivi collegati (ad esempio, controllori grafici e video o interfacce di rete) stanno crescendo rapidamente, la struttura a bus singolo è desti nata a perdere la sfida. In realtà, la maggior parte dei sistemi di elaborazione fa uso di bus multipli, generalmen te disposti gerarchicamente. Una tipica struttura tradizionale c quella mostrata nella Figura 3.18a. C e un bus, detto bus di memoria , che collega il processore a una memoria cache e
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
M em oria centrale Bus locale
Processore
SCSI
I
Cache/ bridge
FireW ire
Bus di sistem a
G rafica
Interfaccia del bus di espansione
FAX
—.... -........-............... (b) Figura 3.18
Video
LAN
Seriale M odem
ί_ _ _ i_ _ _ _ _ _ _ _ _ _ S_ _ _ _ _ _ _ _ _ _ _ Í_ _ _ _ _ _ _ _ ;
Aichitettura ad alte prestazioni
Esempi di configurazioni di bus.
che può supportare uno o più dispositivi locali. Il controllore della cache connette que st ultima al bus locale e al bus di sistema al quale sono attaccati i banchi della memoria cen trale. Come si vedrà nel Capitolo 4, luso di una cachc evita al processore di accedere con
3.4 Interconnessione a bus
eccessiva frequenza alla memoria centrale. Ne deriva chc la memoria centrale può essere po sta sul bus di sistema. In questo modo, ΓΙ/Ο scambia dati con la memoria centrale attra verso il bus di sistema senza interferire con l’attività del processore. I controllori di I/O possono essere collegati direttamente al bus di sistema. Una so luzione più efficiente consiste nel fare uso di uno o più bus di espansione. L’interfaccia di un bus di espansione bufferizza i trasferimenti di dati tra il bus di sistema c i controllori di I/O sul bus di espansione. Questa disposizione consente al sistema di supportare un’am pia gamma di dispositivi di I/O , isolando allo stesso tempo il traffico dalla memoria al pro cessore dal traffico di I/O . La Figura 3.1 Ba mostra alcuni esempi di dispositivi di I/O che dovrebbero essere collegati al bus di espansione. Lc connessioni di rete includono le reti locali (LAN, locai area network) quali Ethernet, c le connessioni alle reti geografiche (WAN, wide area network) quali le reti a commutazione di pacchetto. SCSI (small computer system interface) è un tipo di bus usato per collegarc i dischi c altre periferiche. Le porte se riali sono tipicamente utilizzate per stampanti e scanner. Questa architettura è piuttosto efficiente, ma comincia a vacillare col crescere delle prestazioni dei dispositivi di I/O . Per affrontare questa situazione Tindustria tende a co struire bus ad alta velocità strettam ente integrati con il resto del sistema. La Figura 3.18b mostra una tipica realizzazione di questo approccio. Ancora una volta, il bus di memoria connette il processore al controllore della cache ed è a sua volta collegato a un bus di sistema chc supporta la memoria centrale. Il controllore della cache è integrato in un bridge, o dispositivo di buffering, che lo connette al bus ad alta velocità. Quest’ultimo realizza le connessioni alle LAN veloci, quali Fast Ethernet a 100 Mbps, controllori delle workstation video e grafiche, controllori di interfaccia verso bus locali di periferica quali SCSI c FireWire. Qiicst’ultimo è uno schema di bus ad alta velocità pro gettato specificamente per i dispositivi di I/O ad alta capacità. I dispositivi più lenti sono ancora collegati a un’interfaccia chc bufferizza il traffico tra il bus di espansione e il bus ad alta velocità. In questo schema, il bus ad alta velocità porta i dispositivi veloci a un’integrazione più stretta con il processore e allo stesso tempo il bus rimane indipendente dal processore medesimo. In tal modo, vengono compensate le differenze tra le velocità del processore c del bus c le definizioni della linea di segnale. I cambiamenti nell’architettura del processo re non influenzano il bus ad alta velocità, e viceversa.
Elementi di progettazione del bus Sebbene esistano varie implementazioni del bus, sono pochi i parametri fondamentali o gli elementi di progettazione che servono a classificare c differenziare i bus. La Tabella 3.2 elenca gli elementi chiave.
Tipi di bus Le linee dei bus possono essere di due tipi: dedicate e multiplexate. Una linea dedicata è assegnata in m odo permanente a una funzione o a un sottoinsieme fisico di componenti. Un esempio di ciò c l’uso di linee dedicate separate per indirizzi e dati, cosa comune in molti bus, ma non essenziale. Ad esempio, le informazioni di indirizzo e dati possono essere trasmesse sullo stesso insieme di linee usando una linea di controllo Address Valid.
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
Tabella 3.2
Elementi di progettazione del bus.
T ipo
Ampiezza
Dedicano
Indirizzi
Mulciplexato
Dati
M etodo di arbitraggio
T ip o di trasferim ento dati
Centralizzato
Lettura
Distribuito
Scrittura
Tem porizzazione
L ettura-m odifica-scrittura
Sincrona
Lettura dopo scrittura
Asincrona
Blocco
All’inizio del trasferimento dati, l’indirizzo è posto sul bus e viene attivata la linea Address Valid. A questo punto, ogni modulo ha un periodo di tempo definito per copiare l’indirizzo e determinare se esso sia il modulo destinatario. L’indirizzo viene quindi rimosso dal bus, e le stesse connessioni sono usate per i successivi trasferimenti di lettura o scrittura dati. Questo metodo di uso delle stesse linee per scopi diversi è noto come time multiplexing. Il vantaggio di questa tecnica consiste nell utilizzo di un numero inferiore di linee, con conseguente risparmio di spazio ed eventuale abbattimento dei costi. Lo svantaggio c che all’intcrno di ogni modulo sono richiesti circuiti più complessi. Inoltre, si ha una poten ziale riduzione delle prestazioni perché certi eventi che condividono le stesse linee non pos sono aver luogo in parallelo. L’uso di più bus, ciascuno dei quali connette solo un sottoinsicme di moduli, è det to physical dedication. Un tipico esempio è l’uso di un bus di I / O per connettere tutti i mo duli di I/O ; questo bus viene poi connesso al bus principale tramite qualche tipo di mo dulo adattatore. Il vantaggio potenziale di questo schema è l’alto throughput, conseguenza di una minore contesa del bus. Gli svantaggi sono rappresentati dalle dimensioni e dai mag giori costi del sistema. Metodo di arbitraggio
In tutti i sistemi, tranne i più semplici, più di un modulo può avere necessità del control lo del bus. Per esempio, un modulo di I/O può dover leggere o scrivere direttamente in me moria, senza inviare i dati al processore. Poiché, di volta in volta, solo un’unità può tra smettere con successo sul bus, sono necessari metodi di arbitraggio. Questi possono essere classificati approssimativamente in centralizzati o distribuiti. In uno schema centralizza to, un dispositivo - detto controllore del bus (bus controller) o arbitro (arbiter) - decide a chi assegnare il bus. Il dispositivo può essere un modulo separato o una parte del pro cessore. Negli schemi distribuiti invece non esiste un controllore centrale. Al contrario, i moduli seguono un algoritmo di controllo d’accesso e cooperano nella condivisione del bus. Entrambi i metodi di arbitraggio, hanno lo scopo di designare un dispositivo, sia es so il processore o un modulo di I/O , come gestore (master). Il gestore può dunque inizia re un trasferimento dati verso un altro dispositivo che agisce con ruolo subalterno (slave) per quel particolare scambio.
3.4 Interconnessione a bus
Clock Linee di stato
—
Linee indirizzi -----
Attivazione degli indirizzi
Ciclo di lettu ra
+
/
> I
Indirizzo stabilizzato
> -
V ~^J)ati validi i n ^ —
I I
/
Linee dati S crittu ra
Figura 3.19
<
Segnali di stato
Linee dati L ettura
Ciclo di sc rittu ra
<
Dati validi out
i
/
I
\
Temporizzazione delle operaz oni con bus sincrono.
Temporizzazione La temporizzazione, che può essere sincrona o asincrona, si riferisce al modo in cui gli even ti sono coordinati sul bus. Con la tem porizzazione sincrona, Ioccorrenza degli eventi sul bus c determinata da un clock. Il bus ha una linea di clock sulla quale trasmette una sequenza alternata di I e O di uguale durata. La trasmissione della coppia 1-0 viene detta ciclo di clock (clock cycle) o ciclo di bus (bus cycle) e definisce un intervallo di tempo. Tutti gli altri dispositivi sul bus sono in grado di leggere la linea di clock, c tutti gli eventi partono all'inizio di un ciclo di clock. La Figura 3.19 mostra un tipico diagramma di temporizzazione semplificato per le operazioni di lettura e scrittura sincrone (si veda l’Appendice 3A per una descrizione dei diagrammi di temporizzazione). Sul fronte di guida del segnale di clock (con un leggero ritardo di reazione) potrebbero cambiare altri segnali del bus. La maggior parte degli even ti ha la durata di un singolo ciclo di clock. In questo semplice esempio il processore pone un indirizzo di memoria sulle linee di indirizzo durante il primo ciclo di clock (e può as serire varie linee di stato). Quando le linee di indirizzo sono state stabilizzate, il processo re emette il segnale di abilitazione dclTindirizzo. Per un’operazione di lettura, il processo re emette all’inizio del secondo ciclo un comando di lettura. Un blocco di memoria riconosce Tindirizzo e, dopo un ritardo di un ciclo, posiziona i dati sulle lince dati. Per un’o perazione di scrittura, il processore pone i dati sulle linee dati all’inizio del secondo ciclo ed emette un comando di scrittura dopo che le linee dati si sono stabilizzate. Il blocco di memoria copia l’informazione dalle lince dati durante il terzo ciclo di clock.
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
L in ee di stato
Linee indirizzi
Lettura
Segnali di stato
— ^
Indirizzo stabilizzato
------- S_____________________ /
L inee dati Acknow ledge
Dati validi
--------------- \ _____________ / (a ) C ic lo d i le ttu ra d e l b u s di s iste m a
L in ee di stato
Segnali di stato
L in ee indirizzi
In d irizzostab ilizzato
Linee dati Scrittura
A cknow ledge
^
Dati validi
.....—
--------- S________________/
-------- \___
r
(b) Figura 3.20
Ciclo di scrittura del bus di sistema
Temporizzazione delle operazioni con bus asincrono.
Con la temporizzazione asincrona, l’occorrenza di un evento sul bus dipende dall’oceorrenza di un evento precedente. Nel semplice esempio di lettura della Figura 3.20a, il pro cessore pone sul bus i segnali di indirizzo c di stato. D opo aver atteso che questi segnali si stabilizzino, emette un comando di lettura, indicando la presenza di segnali di indirizzo c di controllo validi. La memoria appropriata decodifica l’indirizzo e risponde mettendo i dati sulla linea dati. Una volta che le lince dati si sono stabilizzate, il modulo di memoria asserisce la linea di avvenuto acknowledge per segnalare al processore che i dati sono di sponibili. D opo che il gestore ha letto i dati dalle linee relative, annulla il segnale di lettu ra. Ciò comporta che il blocco di memoria rinunci al possesso del bus. Infine, una volta li berata la linea di acknowledge, il gestore rimuove l’informazione di indirizzo.
3.4 Interconnessioneabus
La Figura 3.20b mostra una semplice operazione di scrittura asincrona. In questo ca so, il gestore posiziona i dati sulla linea dati nello stesso m omento in cui pone i segnali sul le linee di stato e di indirizzo. Il blocco di memoria risponde al comando di scrittura co piando i dati dalle linee dati e poi asserendo la linea di acknowledge. Il gestore annulla il segnale di scrittura e il modulo di memoria annulla il segnale di acknowledge. La prima strategia c più semplice da implementare e da collaudare, ma è meno fles sibile rispetto alla temporizzazione asincrona. Poiché tutti i dispositivi su un bus sincro no sono legati a una frequenza di clock fissa, il sistema non può avvantaggiarsi delle mi gliorie nelle prestazioni dei dispositivi. Con la temporizzazione asincrona, un bus può essere condiviso da dispositivi lenti e veloci. Am piezza del bus
Lampiczza del bus dati ha impatto sulle prestazioni del sistema: più è ampio il bus, più grande è il numero di bit trasferibili contemporaneamente. L’ampiezza del bus indirizzi ha im patto sulla capacità del sistema: più ampio è il bus di indirizzo, maggiore è il numero di locazioni indirizzabili. Tipo di trasferimento dati Infine, com e m ostrato nella Figura 3.21, i bus supportano vari tipi di trasferim ento dati. T utti i bus supportano sia la scrittura (dal gestore al subordinato) sia la lettura (dal su b ordinato al gestore). I bus multiplexati, prim a sono utilizzati per specificare l’indirizzo e poi per trasferire i dati. In LLn’operazione di lettura, si manifesta tipicam ente una pausa m en tre i dati vengono prelevati dal subordinato per essere posti sul bus. Per una lettura o una scrittura, si potrebbe verificare Lin ritardo se fosse necessario passare attraverso l’arbitrag gio per ottenere il controllo del bus per il resto dell’operazione (ad esempio, prendere il con trollo del bus per richiedere una lettura o una scrittura, e poi riprenderlo per eseguire una lettura o una scrittura).
Nel caso di bus dedicati, l’indirizzo viene posto sul bus indirizzi e lì rimane mentre i dati vengono posti sul bus dati. Per un’operazione di scrittura, il gestore pone i dati sul bus dati non appena Tindirizzo si è stabilizzato e il subordinato ha avtito l’opportunità di ri conoscere il proprio indirizzo. Per un’operazione di lettura, il subordinato pone i dati sul bus dati non appena ha riconosciuto il proprio indirizzo e ha prelevato i dati. Alcuni bus possono anche svolgere operazioni combinate. Un’operazione di read-modify-write e scmpliccmcntc una lettura seguita immediatamente da una scrittura allo stes so indirizzo chc viene trasmesso solo una volta all’inizio dell’operazione. L’intera operazione è generalmente indivisibile per evitare interferenze da parte di altri potenziali gestori del bus. Il principale scopo di questa operazione è la protezione delle risorse di memoria con divise nei sistemi multiprogrammati (vedi Capitolo 8). Read-after-ivrite c un’operazione indivisibile, che consiste in una scrittura seguita im m ediatam ente da una IettLira dallo stesso indirizzo. L’operazione di lettura può essere ese guita a scopo di verifica.
Alcuni bus supportano anche il trasferimento di blocchi di dati. In questo caso, un in dirizzo è seguito da n dati. Il primo elemento di dati è trasferito verso l’indirizzo specificato o a partire da esso; gli altri elementi sono trasferiti verso o a partire dai successivi indirizzi.
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
Tempo
Tempo Indirizzo (secondo ciclo)
' Indirizzo (prim o ciclo)
Indirizzo
Scrittura (m ultiplexata)
Dati e indirizzi inviati dal gestore n ello stesso ciclo su linee di bus separate.
S crittura (non m ultiplexata) Tempo di accesso
Indirizzo
Dati
Lettura (m ultiplexata)
Tempo Indirizzo
—..
dati
Scrivi dati
read-m odify-w rite
Scrivi dati
Indirizzo
_— Dati
Lettura (non m ultiplexata)
Leggi dati
read after write
Indirizzo
Dati
Dati
Dati
Trasferim ento di un blocco di dati Figura 3.21
3.5
Tipi di trasferimento dati sul bus.
PCI
L’interconnessione di componenti periferici (PCI ,peripheral component interconnect) è un diffuso bus ad alta ampiezza di banda e indipendente dal processore chc può funzionare come bus di periferica. Rispetto ad altri bus, il PCI induce migliori prestazioni nei sotto sistemi di I/O ad alta velocità (adattatori grafici, controllori di interfaccia di rete, con trollori di disco c così via). Lo standard corrente permette l’uso di linee dati a 66 M H z fi no a un numero di 64, per una frequenza di trasferimento grezza di 528 Mbyte/s o 4,224 Gbps. Ma non c solo l’alta velocità a rendere attraente il PCI. Esso è specificamente pro gettato pervenire incontro, da un punto di vista economico, alle richieste di I/O dei mo derni sistemi e richiede un numero estremamente ridotto di chip per implementare e sup portare altri bus collegati al bus PCI. Intel iniziò a lavorare sul PCI nel 1990, per i suoi sistemi basati su Pentium. L’azienda, quindi, rese pubblici tutti i brevetti e incoraggiò la creazione di un’associazione industria-
3.5 PCI
le, la PCI SIG1per sviluppare e mantenere la compatibilità delle specifiche PCI. Il risulta to e chc PCI c stato ampiamente adottato e sta trovando un crescente impiego all’interno di personal computer, workstation e server. Poiché le specifiche sono di pubblico domi nio e sono supportate da una vasta sezione nell’industria dei microprocessori e delle peri feriche, i prodotti PCI costruiti da differenti produttori sono compatibili. PCI è progettato per supportare varie configurazioni di sistema, includendo i siste mi sia a singolo processore sia a processore multiplo. Di conseguenza, fornisce un insieme di funzioni generiche, c fa uso di temporizzazione sincrona e di uno schema di arbitraggio centralizzato. La Figura 3.22a mostra un tipico uso di PCI in un sistema monoproccssorc. Un con trollore DRAM e un bridge verso il bus PCI forniscono un accoppiamento stretto con il processore e la capacità di trasportare dati ad alta velocità. Il bridge agisce come un buffer dati, di modo chc la velocità del bus PCI possa differire da quella di I/O del processore. In un sistema multiproccssorc (Figura 3.22b), una o più configurazioni PCI possono es sere connesse tramite bridge al bus di sistema del processore. Il bus di sistema supporta so lo le unità processore/cache, la memoria centrale e i bridge PCI. Ancora una volta, fuso di bridge mantiene il PCI indipendente dalla velocità del processore e può ricevere e tra sportare rapidamente i dati.
Struttura del bus Il PCI può essere configurato a 32 o 64 bit. La Tabella 3.3 definisce le 49 linee di segnale obbligatorie per il PCI. Queste sono divise nei seguenti gruppi funzionali. ♦ Contatti di sistema: includono i contatti di clock c reset. ♦ Contatti di indirizzo e di dati: comprendono 32 lince multiplexate per gli indiriz zi e i dati. Le altre linee di questo gruppo sono usate per interpretare c validare le li nee di segnale chc trasportano indirizzi e dati. ♦ Contatti di controllo deH’interfaccia: controllano la temporizzazione delle transa zioni c forniscono coordinamento tra chi dà inizio alle transazioni e le destinazioni. ♦ Contatti di arbitraggio: a differenza delle altre linee di segnale del PCI, queste non sono condivise: ogni gestore PCI ha una propria copia di linee di arbitraggio che lo connettono direttamente all’arbitro del bus PCI. ♦ Contatti di comunicazione degli errori: usati per comunicare errori di parità o altro. Inoltre, le specifiche PCI definiscono 51 linee di segnale opzionali (Tabella 3.4), suddivi se nei seguenti gruppi funzionali. ♦ Contatti di interrupt: servono per i dispositivi PCI che devono generare richieste di servizio. Anche queste linee non sono condivise: ogni dispositivo PCI possiede una propria linea di interrupt o linee verso un controllore di interrupt. ♦ Contatti di supporto alla cache: sono necessari per supportare una memoria sul PCI (di cui può esistere una copia cache nel processore o in un altro dispositivo). Qpcsti contatti supportano protocolli snoopy cache (Capitolo 18).
97
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
Processore Cache Controllo del bridge
Audio
A nim azione
DRAM
Bus PCI
LAN
SCST
Bridge del bus di espansione
G rafica Dispositivi di I/O di base
Ί (a) Desktop
F igura 3 .2 2
Esem pi di c o n fig u ra z io n i PCI.
♦ Contatti di estensione del bus a 64 bit: includono 32 linee multiplexate tra indirizzi e dati e combinate con le linee indirizzi/dati obbligatorie a formare un bus indiriz zi/dati a 64 bit. Altre linee di questo gruppo sono usate per interpretare e validare le linee di segnale chc trasportano indirizzi e dati. Infine, ci sono due linee che attivano due dispositivi PCI per concordare l’uso della capacità di 64 bit. ♦ Contatti di scansione JTAG/boundary: supportano le procedure di testing definite nello standard IEEE 1149.1.
3.5 PCI
Tabella 3.3
Linee di segnale PCI standard.
Designazione
T ip o
D escrizione
CLK
in
Fornisce la temporizzazione per tutte le transazioni ed è campionato dagli input sul fron te di salita. Sono supportati clock fino alla frequenza di 33 M Hz.
RST#
in
Inizializza i registri PCI, i sequencer c i segnali.
AD [31::0]
t/s
Linee multiplexate per indirizzi e dati
C/BE[3::0]#
t/s
Comando di bus multiplexato e segnali di abilitazione dei byte. Durante la tase dati, le linee indicano quali delle quattro corsie dei byte trasportino dati significativi.
PAR
t/s
Parità pari per Ic linee AD e C /B E dopo un ciclo di clock. PAR è impostato dal gestore, nelle fasi di scrittura, e dal destinatario nella fase di lettura.
FRAME#
s/t/s
Impostato dal gestore corrente per indicare l’inizio e la durata di una transazione. È asse rito all’inizio e negato quando l’iniziatore è pronto a dare il via alla fase dati finale.
1RDY#
s/t/s
Initiator Ready. Impostato dal gestore corrente (iniziatore della transazione). Durante una lettura, indica che il gestore è pronto ad accettare i dati; durante una scrittura, indica che su A D sono presenti dati validi.
TRDY#
s /t/s
Target Ready. Impostato dal destinatario (dispositivo selezionato). Durante una lettura, indica che su AD sono presenti dati validi; durante una scrittura, indica che il destinatario è pronto ad accettare i dati.
STOP#
s /t/s
Indica che l’attuale destinatario desidera che l’iniziatore ponga termine alla transazione corrente.
IDSEL
in
Initialization Device Select. Usato come un selettore di chip (ch ip select).
DEVSEL
in
Selezione periferica. Asserito dal dispositivo che ha riconosciuto il proprio indirizzo.
REQ#
t/s
Indica all’arbitro che il dispositivo richiede l’uso del bus.
G N T#
t/s
Indica al dispositivo che l’arbitro ha concesso l’accesso al bus.
PERR#
s /t/s
Parity Error. Indica il rilevamento di un errore di parità sui dati da parte di un destinatario (in scrittura) o da parte di un iniziatore (in lettura).
SERR#
o /d
System Error. Può essere attivato da ogni dispositivo per riportare errori di parità sugli indirizzi e altri errori critici.
fiM
K
S È
m
m
m
C ontatti di controllo di interfaccia
M H ttM lI I
C o n tatti di arbitraggio
:·.·'."···:·:■··.·:··"·:*·:*·'
lliÌli!P liÌÌliÌlj|Ì | I I H Ι1Ι|§||Ρ||
C ontatti di resoconto degli errori
Comandi PCI L’attività del bus si esplica nella forma di transazioni tra un iniziatore (initiator ), o gestore (master), c un destinatario (target). Quando un gestore del bus ne acquisisce il controllo, esso determina il tipo della prossima transazione. D urante la fase di indirizzamento della transazione, le linee C /B E vengono utilizzate per segnalare il tipo di transazione. I co mandi sono: ♦ Interrupt Acknowledge ♦ Special Cycle
99
100
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
T ab ella 3 .4
Linee di segnale PCI opzionali.
D esigna/ione
T ipo
Descrizione
_________
MH
jpOOOOOÜCCBBtBOOQPOwW OwC INTA#
C o n tatti di im e n ttp t
o /d
Usato per richiedere un interrupt.
INTB#
o /d
Usato per richiedere un interrupt (solo su dispositivi multifunzione).
IN TC*
o /d
Usato per richiedere un interrupt (solo su dispositivi multifunzione).
IN TI)#
o /d
Usato per richiedere un interrupt (solo su dispositivi multifunzione). ■
C o n ta ttid isu p p o rto a U a c a c h e
SBO*
in/out Snoop Backoft. Indica che una linea è stata modificata.
SD O N E
in,/out Snoop Done. Indica lo stato dell’indagine [snoop) corrente. Asserito quando la ricerca è completata.
!IIiIiJB
H
C o n tatti di estensione del bus a 64 bit
;:: 9 Η Η Η Η Η Ι Η ·
AD[63::32]
t/s
Linee multiplexatc per indirizzi e dati usate per estendere il bus a 64 bit.
C/BE[7::4]#
t/s
Comando di bus multiplexato e segnali di abilitazione dei byte. Durante la fase indirizzi, le linee forniscono ulteriori comandi di bus. Durante la fase dati, le linee indicano quali delle quattro corsie estese dei byte trasportino dati significativi.
REQ64#
s/t/s
Usato per richiedere trasferimenti a 64 bit.
ACK64#
s /t/s
Indica che il destinatario desidera eseguire un trasferimento a 64 bit.
PAR64
t/s
Fornisce parità pari per le linee A l) e C /B E dopo un ciclo di clock.
TCK
in
Test clock. Usato per temporizzarc le informazioni di stato e per testare dati in ingresso e uscita.
Pin JTAGVBoumfary Scan
SSftfIllll \
TDI
in
Test input. Usato per acquisire serialmente dati e istruzioni.
TDO
out
Test output. Usato per emettere serialmente dati e istruzioni.
TM S
in
Test Mode Select. Usato per controllare lo stato del controllore di porta.
TRST*
in
Test Reset. Usato per iniziaiizzare il controllore di porta.
in out t/ s s /t/s o/ d ¿
S egnale di so lo ingresso. S egnale di sola uscita. S egnale d i I / O bid ire zio n a le e tri-stato . S egnale tri-s ta to so ste n u to , g e stito d a u n u n ico p ro p rie ta rio p e r volta, O p e n d ra in : c o n sen te la con d iv isio n c. L o sta to attiv o del segnale c o rrisp o n d e alla bassa tensione.
♦ I/O Read ♦ I/O Write ♦ Memory Read ♦ Memory Read Line ♦ Memory Read Multiple ♦ Memory Write ♦ Memory Write and Invalidate ♦ Configuration Read ♦ Configuration Write ♦ Dual Address Cycle
JJj
3.5 PCI
Tabella 3.5
Interpretazione dei comandi di scrittura PCI._________________________________________
T ip o d i com ando
Per m em oria con cachc____________Per m em oria senza cache
Memory Read
Legge mezza linea di cache (o meno) Due trasferimenti (o meno)
Memory Read Line
Legge da 1,5 a 3 linee di cache
Memory Read Multiple Legge più di 3 linee di cache
Esegue da 3 a 12 trasferimenti dati consecutivi Esegue più di 12 trasferimenti dati consecutivi
Interrupt Acknowledge è un comando di lettura destinato al dispositivo che funziona co me controllore di interrupt sul bus PCI. Durante la fase di indirizzamento, le linee indi rizzo non sono usate e le linee di abilitazione del byte indicano la dimensione dell’identi ficatore di interrupt che verrà restituito. Il com ando Special Cycle viene usato dall’iniziatore per trasmettere un messaggio a uno o più destinatari. Con i comandi I/O Read c W rite vengono trasferiti i dati tra l’iniziatore e un con trollore di I/O . I dispositivi di I/O hanno il loro spazio di indirizzamento, e le linee indi rizzo indicano un particolare dispositivo e specificano i dati da trasferire da o verso quel dispositivo. Il concetto di indirizzi di I/O sarà affrontato nel Capitolo 7. I comandi M emory Read e Write sono utilizzati per il trasferimento di un blocco da ti (che occupa uno o più cicli di clock). L’interpretazione di questi comandi dipende dal fatto che il controllore della memoria sul bus PCI sia in grado di supportare il protocollo PCI per i trasferimenti tra memoria e cache. In caso positivo, il trasferimento dati con la memoria avviene in termini di interi blocchi (o linee) di cache.3 L’uso dei tre comandi Memory Read c riportato nella Tabella 3.5. Il comando Memory Write e usato per trasfe rire i dati in memoria. Il comando Memory Write and Invalidate trasferisce i dati in me moria e garantisce chc sia scritto almeno un blocco di cache. Qiiesto comando esegue la copia di un blocco di cachc nella memoria centrale (write back). Due altri comandi consentono la lettura e l’aggiornamento dei parametri di confi gurazione, che avviene utilizzando appositi registri interni. II comando Dual Address Cycle viene impiegato per indicare l’indirizzamcnto a 64 bit.
Trasferimento dati Ogni trasferimento dati sul bus PCI è una singola transazione consistente in una fase di indi rizzo e una o più fasi di dati. In questo paragrafo affrontiamo una tipica operazione di lettura. La Figura 3.23 mostra la temporizzazione della transazione di lettura. Tutti gli even ti sono sincronizzati con il fronte di discesa del clock, chc avviene a metà di ogni ciclo di clock. I dispositivi sul bus campionano le linee del bus sul fronte di salita all’inizio del ci clo di bus. Seguono gli eventi significativi, con le loro etichette sul diagramma. a. Una volta che il gestore del bus ne ha preso il controllo, può iniziare la transazione asserendo FRAME. Qiiesta linea rimane asserita finché l’iniziatore è pronto a com pletare l’ultima fase di dati. L’iniziatore pone anche !’indirizzo di partenza sul bus in dirizzi, e il comando di lettura sulle linee C/BE. b. All’inizio del secondo ciclo di clock il destinatario riconosce il proprio indirizzo sul le linee AD. 31 principi fondamentali della memoria cache sono descritti nel Capitolo 4; i protocolli di cachc basata sul bus so no descritti nel Capitolo 17.
101
FRAME#
AD
C/BE#
IRDY#
TRDY#
DEVSEL# F ase indirizzi
F ase dati S tato di attesa
F ase dati
F ase d ati
S tato d i attesa
S ta to di attesa
-T ransazione su l b u s---------
Figura 3 .2 3
O p erazio ne di lettura PCI.
3.5 PCI
c. L’iniziatore smette di utilizzare il bus AD. Un ciclo di inversione (indicato dalle due frcccc circolari) è richiesto su tutte le linee di segnale che possono essere utilizzate da più di un dispositivo, cosicché la caduta del segnale di indirizzo prepara il bus per l’u so da parte del dispositivo di destinazione. L’iniziatore cambia l’informazione sulle li nee C /B E per designare quali linee AD vanno usate per il trasferimento dei dati at tualmente indirizzati (da 1 a 4 byte). L’iniziatore asserisce anche IRDY per indicare chc c pronto per il primo elemento di dati. d. Il destinatario selezionato asserisce DEVSEL per indicare che ha riconosciuto il suo indirizzo e chc risponderà. Posiziona i dati richiesti sulle linee AD e asserisce TRDY per indicare chc sul bus sono presenti dati validi. e. L’iniziatore legge i dati all’inizio del quarto ciclo di clock e cambia le lince di abilita zione del byte come richiesto per la preparazione della prossima lettura. f. In questo esempio, il destinatario necessita di lui certo tempo per preparare il secon do blocco di dati da trasmettere. Quindi, annulla TRD Y per segnalare all’iniziatore che nel prossimo ciclo non ci saranno nuovi dati. Di conseguenza, l’iniziatore non leg ge le lince dati all’inizio del quinto ciclo di clock c non cambia l’abilitazione del by te durante tale ciclo. Il blocco di dati viene letto all’inizio del sesto ciclo di clock. g. Li questo ciclo, il destinatario posiziona il terzo elemento di dati sul bus. Tuttavia, ncll’cscmpio, l’iniziatore ancora non è pronto per leggerli (potrebbe trovarsi in tuia con dizione temporanea di buffer pieno). Dopo di che, annulla IRDY. Di conseguenza, il destinatario manterrà il terzo elemento di dati sul bus per un ciclo di clock extra. h. L’iniziatore sa chc il terzo trasferimento di dati è l’ultimo, c dunque annulla FRAME per segnalare al destinatario che si tratta dell’ultimo trasferimento. Asserisce, inoltre, IRDY per segnalare di essere pronto a completare tale trasferimento. i. L’iniziatore annulla IRDY, riportando il bus allo stato inattivo, e il destinatario an nulla TR D Y c DEVSEL.
Arbitraggio U PCI fa uso di uno schema di arbitraggio centralizzato e sincrono, nel quale ciascun ge store presenta un unico segnale di richiesta (REQ request) e di concessione (G N T)(p « i ) . Queste linee di segnale sono connesse a un arbitro centrale (Figura 3.24) e per concedere l’accesso al bus viene usato un semplice handshake tra richiesta e concessione.
F ig u ra 3.24
Arbitro del bus PCI.
103
104
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
CLK
REQ#-A
(à i
/
REQ#-B
/
GNT#-A
Θ GNT#-B
I I
I I
Λ .
J----------------U FRAM E#
IRDY#
TRDY#
I I I
I I I Λ____ ! _ /
Al) -Accesso A-
Fìgura 3 .2 5
-Accesso B-
A rb itrag g io d el b u s PCI tra d u e gestori
Le specifiche PCI non impongono un particolare algoritmo di arbitraggio. Larbitro può usare un approccio first-come-firsl-served, un approccio round-robin o uno schema di prio rità. Un gestore PCI deve arbitrare ciascuna transazione che desidera eseguire, dove una singola transazione consiste di una fase indirizzo seguita da una o più fasi dati contigue. Riportiamo la sequenza di eventi relativi allesempio della Figura 3.25. a. In qualche punto che precede il primo ciclo di clock, A ha asserito il proprio segna le PlEQ1L’arbitro campiona questo segnale all’inizio del ciclo. b. Durante questo ciclo, B richiede l’uso del bus asserendo il proprio segnale R E Q c. Nello stesso tempo, l’arbitro asserisce GNT-A per concedere l’accesso del bus ad A. d. Il gestore A del bus campiona GNT-A all’inizio del secondo clock e apprende chc gli è stato concesso l’accesso al bus. Trova, inoltre, IRDY c TRDY annullati, il chc indica che il bus c inattivo. Di conseguenza, asserisce FRAME e posiziona l’indirizzo sul bus indirizzi c il comando sul bus C /B E (non mostrato). Continua anche ad as serire REQ-A, poiché dopo questa transazione nc deve eseguire una seconda. e. All’inizio del terzo clock l’arbitro del bus campiona tutte le linee REQ e decide di con cedere il bus a B nella prossima transazione. Poi, asserisce GNT-B e annulla GNT-A. B non potrà usare il bus finché quest’ultimo non ritornerà a uno stato inattivo.
3.7 Parole chiave, domande di revisione e problemi
f. A annulla FRAxME per indicare che è in corso Tulcimo (e unico) trasferimento dati. Pone i dati sul bus dati e segnala la destinazione con IRDY. Il destinatario legge i da ti all'inizio del successivo ciclo di clock. g. All’inizio del quinto ciclo di clock, B trova IRDY e FRAME annullati c così è in gra do di prendere il controllo del bus asserendo FRAME. Inoltre, annulla la propria li nea REQ1dato che vuole eseguire una sola transazione. In seguito, al gestore A viene concesso l’accesso al bus per la sua successiva transazione. Si noti che l’arbitraggio può aver luogo nello stesso istante in cui l’attuale gestore del bus sta eseguendo un trasferimento dati. Dunque, nessun ciclo di bus viene perso nellcscguirc l’arbitraggio. Questo fenomeno viene detto arbitraggio nascosto (hidden arbitration).
3.6
Letture e siti web consigliati____________________
Il testo più chiaro dedicato al PCI è [SHAN99]. [ABB004] contiene anche molte infor mazioni concrete sul PCI. A B B 0 04 D. Abbot, P C I Bus Demystified, New York: Elsevier, 2004. SHAN99 T. Shanley e D. Anderson, P C I Systems Architecture, Richardson (TX), Mindsharc Press, 1999.
Siti web consigliati: ♦ P C I Special Interest G roup: informazioni su specifiche e prodotti PCI. ♦ P C I Pointers: collegamenti a produttori PCI e ad altre fonti informative.
3.7
Parole chiave, domande di revisione e problemi
ampiezza del bus arbitraggio centralizzato arbitraggio del bus arbitraggio distribuito bus bus degli indirizzi bus dei dati bus di sistema ciclo di istruzione
esecuzione dell'istruzione gestore di interrupt interconnessione di periferiche (PCI) interrupt interrupt disabilitato memory address register (MAR)
memory buffer register (MBR) prelievo dell'istruzione routine di servizio del !'interrupt temporizzazione asincrona temporizzazione sincrona
105
106
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
Domande di revisione 3 .1 Quali categorie generali di funzioni vengono specificate tramite le istruzioni di un calcolatore? 3.2 Quali sono i possibili stati che definiscono !’esecuzione di un’istruzione? 3.3 Elencate e definite brevemente due approcci per il trattam ento degli interrupt 3.4 Qiiali tipi di trasferimento deve supportare una struttura di interconnessione (ad esempio, il bus)? 3.5 Qiial è il vantaggio di usare un’architcttura a bus multipli rispetto a una a bus singolo? 3.6 Elencate e definite brevemente i gruppi funzionali delle linee di segnale per il PCI.
Problemi 3.1 L’elaboratore ipotizzato nella Figura 3.4 ha anche due istruzioni di I/O : 0011 = carica AC dal I l/O 0 1 11 = memorizza AC nell’I/O In questi casi, l’indirizzo a 12 bit identifica un particolare dispositivo di I/O . Mostrate l’esecuzione del programma (usando il formato della Figura 3.5) per il se guente programma. 1. Carica AC dalla periferica 5. 2. Somma i contenuti della locazione di memoria 940. 3. Memorizza AC nella periferica 6. Assumete chc il successivo valore recuperato dalla periferica 5 sia 3 c che la locazione 940 contenga il valore 2. 3.2 L’esecuzione del programma della Figura 3.5 viene descritta nel testo usando sei pas si. Estendete questa descrizione per mostrare l’uso di MAR e MBR. 3.3 Si consideri un ipotetico microprocessore a 32 bit con istruzioni di 32 bit compo ste di due campi: il primo byte contiene il codice operativo e il secondo l’operando immediato o un indirizzo di operando. a. Qual è la massima capacità di memoria direttamente indirizzabile (in byte)? b. Descrivete le prestazioni del sistema nei due casi in cui il bus di memoria del pro cessore abbia 32 linee per gli indirizzi e 16 linee per i dati, oppure abbia 16 linee per gli indirizzi e 16 linee per i dati. c. Qiianti bit sono necessari per il program counter e per !’instruction register? 3.4 Considerate un ipotetico microprocessore che genera un indirizzo a 16 bit (ad esempio, si assuma che il program counter e gli address register siano larghi 16 bit) e abbia un bus dati a 16 bit.
3.7 Parole chiave, domande di revisione e problemi
a. Qual è il massimo spazio di indirizzamento della memoria cui il processore può accedere direttam ente se c connesso a una “memoria a l 6 bit”? b. Qual è il massimo spazio di indirizzamento della memoria cui il processore può accedere direttam ente se c connesso a una “memoria a 8 bit”? c. Quali caratteristiche architetturali consentiranno a questo processore di accedere a uno “spazio di I /O ” separato? d. Sc un’istruzione di I/O può specificare un numero di porta di I/O a 8 bit, quan te porte di I/O a 8 bit può supportare il microprocessore? Q uante a 16 bit? Fornite la spiegazione. 3.5 Considerate un microprocessore a 32 bit, con un bus dati esterno a 16 bit, pilotato da un clock di input a 8 MHz. Si assuma che questo microprocessore presenti un ciclo di bus la cui durata minima equivale a quattro cicli di clock di input. Qiial c la massima velocità di trasferimento dati che questo processore può sostenere? Per migliorare le sue prestazioni, sarebbe meglio rendere il suo bus dati esterno a 32 bit o raddoppiare la frequenza di clock esterno fornita al microprocessore? Specificate ogni assunzione fatta e fornite la spiegazione. Suggerimento: Determinate il num e ro di byte trasferibile per ogni ciclo di bus. 3.6 Considerate un sistema di elaborazione contenente un modulo di I /O che controlla un semplice sistema tastiera/tclcscrivcntc. I seguenti registri sono contenuti nel processore c collegati direttam ente al bus di sistema: INPR: OUTR: FGI : FG O : IEN:
Input Register, 8 bit O u tp u t Register, 8 bit InputFlag1I b i t O u tp u t Flag, 1 bit Interrupt Enable, 1 bit
La battitura di un tasto dalla telescrivente c l’output della stampante verso la tele scrivente sono controllati dal modulo di I/O . La tclcscrivcntc c in grado di codifi care un simbolo alfanumerico in una parola di 8 bit c dccodificarc una parola a 8 bit in un simbolo alfanumerico. a. Descrivete come il processore può scambiare dati con la telescrivente usando i re gistri INPR, O U T R , FG I c FGO. b. Descrivete come tale funzione può essere resa più efficiente utilizzando anche IEN. 3 .7 Considerate due microprocessori con bus di dati esterni da 8 e da 16 bit. In tutto il resto i processori sono identici, anche nella durata dei cicli di bus. a. Supponete che tutte le istruzioni e gli operandi siano lunghi due byte. D i quale fattore differiscono le due velocità massime di trasferimento dati? b. Assumete ora che metà degli operandi e delle istruzioni sia lunga un byte e rie saminate le vostre considerazioni. 3.8 La Figura 3.26 indica uno schema di arbitraggio distribuito che può essere usato con uno schema di bus obsoleto noto come Multibus I. Gli agenti sono fisicamente col-
107
108
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
Figura 3.26
Arbitraggio distribuito del Multibus I.
legaci in modo circolare {daisy-ehairi) e hanno priorità diverse. L’agente più a sini stra nel diagramma riceve un segnale costante buspriority in (BPRN) che indica che nessun agente a priorità più alta desidera il controllo del bus. Sc l’agente non vuole il bu s, asserisce la propria linea bus priority out (BPRO). All’inizio di un ciclo di clock, ciascun agente può richiedere il controllo del bus abbassando la propria li nea BPRO. Questo abbassa la linea BPRN del successivo agente nella catena, il che è necessario per abbassare la propria linea BPRO. Così, il segnale viene propagato per tutta la catena. Alla fine della reazione a catena, ci dovrebbe essere solo un agen te il cui BPRN è asserito e il cui BPRO non lo è. Questo agente ha la priorità. Se al l’inizio di un ciclo di bus il bus non è occupato (BUSY inattivo), l’agente chc ha la priorità può prendere il controllo del bus asserendo la linea BUSY. E necessario un certo tempo perché il segnale BPR si propaghi dall’agente a massi ma priorità fino a quello a minima priorità. Questo tempo deve essere inferiore a un ciclo di clock? Fornite una spiegazione. 3.9 II bus VAX SBl utilizza uno schema di arbitraggio distribuito e sincrono. Ciascun dispositivo SBI (il processore, la memoria, i moduli di I/O ) possiede una priorità unica ed è associato a una singola linea di richiesta di trasferimento (TR). SBI ha 16 di tali lince (TRO, T R I ,... TR IS), con TRO chc ha la massima priorità. Quando un dispositivo vuole usare il bus, prenota un certo periodo di tempo asserendo la propria linca TR. Alla fine del ciclo in cui c stata emessa la prenotazione, ciascun dispositivo con una prenotazione pendente esamina le linee TR; il dispositivo a maggiore priorità con una prenotazione utilizza il successivo periodo di tempo. Al bus possono essere collegati un massimo di 17 dispositivi. Il dispositivo con priorità 16 non ha una linea TR. Perché? 3.10 II dispositivo a priorità inferiore solitamente presenta il tempo di attesa medio più basso. Per questa ragione, al processore viene in genere assegnata la priorità più bas sa su SBI. Perché il dispositivo con priorità 16 presenta di solito il tempo d’attesa me dio più basso? In quali circostanze questo non sarebbe vero? 3.11 Per un’operazione di lettura sincrona (Figura 3.19), il modulo di memoria deve po sizionare i dati sul bus in modo che siano sufficientemente lontani dal fronte di di scesa del segnale di Lettura per permettere la stabilizzazione del segnale. Assumete
3.7 Parole chiave, domande di revisione e problemi
che il bus di un microprocessore abbia una frequenza di clock di 10 M Hz e che il segnale di Lettura cominci a finire a metà della seconda metà del Ty a. Determinate la lunghezza del ciclo di istruzioni di lettura della memoria. b. Quando, al più tardi, dovrebbero essere posizionati sul bus i dati della memoria? Assumete 20 ns per la stabilizzazione delle linee di dati. 3.12 Considerate un microprocessore con ima temporizzazione di lettura della memo ria come indicato nella Figura 3.19. Dopo alcune analisi, un progettista definisce chc la memoria finisca di fornire dati di lettura puntualmente in circa 180 ns. a. Qiianti stati di attesa (cicli di clock) devono essere inseriti per una corretta ope razione di sistema se la frequenza di clock del bus è di 8 MHz? b. Per rafforzare gli stati di attesa, viene utilizzata una linea di stato Ready (Pronto). Qiiando il processore ha emesso un comando di Read (Lettura), deve attendere chc venga attivata la linea di Ready prima di tentare di leggere i dati. A quale in tervallo di tempo deve essere tenuta bassa la linea di Ready per forzare il proces sore a inserire il numero di stati di attesa richiesto? 3.13 Un microprocessore ha una temporizzazione di scrittura della memoria come mo strato nella Figura 3.19. Il produttore stabilisce che l’ampiezza del segnale di Write (Scrittura) possa essere determinato da T - 50, dove T c il periodo di clock (in ns). a. Quale ampiezza dobbiamo aspettarci per il segnale di Write se la frequenza di clock del bus è di 5 MHz? b. Il data sheet del microprocessore specifica che i dati siano validi per 20 ns dopo l’estremità in discesa del segnale di Write. Qiial è la durata totale della presenta zione di dati validi alla memoria? c. Qiianti stati di attesa dovrebbero essere inseriti se la memoria richiede una pre sentazione di dati validi per almeno 190 ns? 3.14 Un microprocessore presenta un’istruzione diretta d’incremento della memoria, che somma 1 al valore in una locazione di memoria. L’istruzione ha cinque stadi: fetch del codice operativo (quattro cicli di clock del bus), fetch degli indirizzi de gli operandi (tre cicli), fetch dell’operando (tre cicli), incremento di 1 dell’operan do (tre cicli) e memorizzazione dell’operando (tre cicli). a. Di quale percentuale aumenterà la durata dell’operazione se dobbiamo inserire due stati di attesa (bus) in ogni operazione di lettura e di scrittura in memoria? b. Riconsiderate il caso assumendo che l’operazione di somma comporti 13 cicli an ziché 3 cicli. 3.15 II microprocessore Intel 8088 ha una temporizzazione del bus di lettura simile a quel lo della Figura 3.19, ma richiede quattro cicli di clock del processore. I dati validi re stano sul bus per una quantità di tempo chc comprende anche il quarto ciclo di clock del processore. Assumete che la frequenza di clock del processore sia di 8 MHz. a. Qual è la velocità massima di trasferimento dei dati? b. Riesaminate il caso assumendo chc sia necessario inserire uno stato di attesa per ogni byte trasferito.
109
110
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
3.16 L’Intel 8086 e un processore a 16 bit simile per molti aspetti all’8088 a 8 bit. L’8086 utilizza un bus a 16 bit in grado di trasferire 2 byte alla volta, ammesso che il byte più basso abbia un indirizzo pari. Tuttavia, Γ8086 permette chc le parole siano alli neate sia sui pari sia sui dispari. Sc viene presa come riferimento una parola con al lineamento dispari, per trasferire la parola vengono richiesti due cicli di memoria, ognuno composto da quattro cicli di bus. Considerate un’istruzione sull’8086 che coinvolga due operandi da 16 bit. Qiianto tempo richiede il fetch degli operandi? Elencate le risposte possibili. Prendete in considerazione una frequenza di clock di 4 iMHz e ipotizzate che non ci siano stati di attesa. 3.17 Considerate un microprocessore a 32 bit il cui ciclo di bus abbia la stessa durata di quello di un microprocessore a 16 bit. Assumete che in media il 20% degli operan di c delle istruzioni sia lungo 32 bit, che il 40% sia 16 bit e che il restante 40% sia lungo solo 8 bit. Calcolate il miglioramento che si ottiene nel fetch delle istruzio ni e degli operandi nel microprocessore a 32 bit. 3.18 II microprocessore considerato nel Problema 3.14 inizia la fase di fetch degli ope randi dell’istruzione nel momento esatto in cui la tastiera attiva una linea di richie sta di interruzione. Dopo quanto tempo il processore entra nel ciclo di processo del l’interruzione? Prendete in considerazione una frequenza di clock del bus di 10 MHz. 3.19 Disegnate e spiegate un diagramma di temporizzazione per un’operazione PCI di scrittura (simile alla Figura 3.23).
Appendice 3A
Diagrammi di temporizzazione
In questo capitolo i diagrammi di temporizzazione vengono utilizzati per illustrare se quenze di eventi e loro dipendenze. Per il lettore che non ha familiarità con questi dia grammi, l’appendice fornisce una breve spiegazione. La comunicazione tra dispositivi collegati a un bus ha luogo lungo un insieme di li nee in grado di trasportare segnali. Possono essere trasmessi due differenti livelli di segna le (livelli di tensione), che rappresentano gli stati logici: 0 e I. Un diagramma di tempo rizzazione mostra il livello di segnale su una linea in funzione del tempo (Figura 3.27a). Per convenzione, il livello di segnale corrispondente a 1 viene mostrato con un livello più al to rispetto a quello corrispondente a 0. Solitamente, lo 0 è il valore di default. Ciò signifi ca chc, se non viene trasmesso alcun dato o segnale, allora il livello sulla linea è quello che rappresenta lo 0. La transizione del segnale da 0 a 1 viene spesso chiamata fronte di salita (o leading edge) e la transizione da Ia O viene detta fronte di discesa (o trailing edge). Tali transizioni non sono istantanee, ma hanno una certa durata, anche se molto piccola. Per chiarezza, la transizione viene solitamente disegnata come una linea obliqua che esagera il tempo richiesto. Occasionalmente, il lettore vedrà diagrammi che utilizzano linee verti cali, il che suggerisce erroneamente che la transizione sia istantanea. Su un diagramma di temporizzazione può accadere chc tra gli eventi di interesse trascorra una quantità di tem po variabile o quasi irrilevante. Qiicsta eventualità viene raffigurata tramite un’intcrruzionc nella linea temporale.
Appendice 3A Diagrammiditemporizzazione
Alto Basso F ro n te di salita
F ro n te di discesa
In terv allo
lem p o
(a) Seg n ali in fu n zio n e d el tem po
L inee basse
L inee basse o alte
Linee basse
(b) Gruppi di linee
C o m an d o
R isposta
(c) Dipendenza causa-effetto
(d) Segnale di clock Figura 3.27
Diagrammi di temporizzazione.
Talvolta i segnali sono rappresentati a gruppi (Figura 3.27b). Ad esempio, se i dati sono trasferiti un byte alla volta, allora sono richieste otto linee. Generalmente, non è impor tante sapere l’esatto valore trasferito su tale gruppo, ma piuttosto se i segnali siano pre senti o meno. Una transizione di segnale su una linea può far scattare un dispositivo connesso per far cambiare il segnale su altre linee. Ad esempio, se un modulo di memoria rileva un se gnale di controllo di lettura, posizionerà i segnali dei dati sulle linee dati. Tale relazione cau sa-effetto produce sequenze di eventi. Per mostrare queste dipendenze sui diagrammi di temporizzazione si ricorre a frecce (Figura 3.27c).
111
Sistema di elaborazione ♦ Capitolo 3 - Visione ad alto livello delle funzioni
Nella Figura 3.27c, se il nome del segnale e barrato, allora quel segnale è attivo quan do è basso. Ad esempio, Command è attivo, o asserito, a 0 Volt. Ciò significa che Command = 0 viene interpretato come un valore logico vero (1). Spesso i bus hanno anche una linea di clock cui c connesso un orologio elettronico chc fornisce una regolare, ripetitiva sequenza di transizioni (Figura 3.27d). Il segnale di clock può servire a sincronizzare altri eventi.
Capitolo 4
Memoria cache
Punti chiave Φ La memòria dei calcolatori è organizzata in modo gerarchico. Al livello più alto, più vicino al processore, troviamo i registri. A seguire, esistono uno o più livelli di cache. Qiiandovengono utilizzati più livelli, li indicheremo con LI, LI, e così via. Poi troviamo la memoria centrale, che è solitamente una RAM dinamica, DRAM (dynamic random-access memory). Tutti questi livelli sono considerati interni al si stema di elaborazione. La gerarchia continua poi con la memoria esterna, e il suc cessivo livello c generalmente il disco fisso. Ulteriori livelli sono costituiti dai sup porti removibili quali i dischi ottici c i nastri. ♦
Scendendo lungo la gerarchia di memoria, si riscontra uri costo per bit inferiore, una capacità superiore e tempi di accesso più lenti. Sarebbe bello poter usare so lo la memoria più veloce ma, poiché è anche la più costosa, si scende a compro messi tra tempi di accesso c costi, utilizzando più memoria lenta. Lo stratagem ma consiste nellorgariizzarc in memoria i dati e i programmi di modo che le informazioni man mano richieste si trovino, il più frequentemente possibile, nel la memoria più veloce.
❖ In generale, e probabile che la maggior parte degli accessi alla memoria centrale da parte del processore avvenga in locazioni referenziate di rcccntc. Per questo mo tivo, la cachc mantiene una copia di alcune delle locazioni di memoria appena uti lizzate. Sc la cache è progettata bene, allora per la maggior parte delle volte le pa role di memoria richieste dal processore si troveranno già nella cache.
114
Sistema di elaborazione ♦ Capitolo 4 - Memoria cachc
S
ebbene semplici da un punto di vista concettuale, più di ogni altro componente le me morie dei calcolatori esibiscono il più ampio spettro di tipologie, tecnologie, organiz zazioni, prestazioni c costi. Nessuna tecnologia soddisfa in assoluto i requisiti di memoria di un calcolatore. Pertanto, il tipico sistema di elaborazione è equipaggiato con una ge rarchia di sottosistemi di memoria, alcuni interni (direttamente accessibili da parte del pro cessore) e altri esterni (accessibili al processore tramite un modulo di I/O). Qiicsto e il prossimo capitolo si concentrano sugli elementi della memoria interna, il Capitolo 6 sarà quindi dedicato alla memoria esterna. In particolare, il primo paragrafo esamina le caratteristiche salienti delle memorie mentre i successivi sono dedicati a un ele mento essenziale per tutti i moderni sistemi di elaborazione: la memoria cache.
4.1
Panoramica dei sistemi di memoria di un calcolatore
Caratteristiche dei sistemi di memoria Il complesso argomento delle memorie dei calcolatori può essere affrontato più agevol mente classificando i sistemi di memoria in base alle loro specifiche caratteristiche ; le più importanti sono elencate nella Tabella 4.1. Il termine l o c a z i o n e nella Tabella 4.1 è riferito al fatto chc la memoria sia interna o esterna al calcolatore. La memoria interna viene spesso identificata con la memoria cen trale, ma ne esistono altre forme. Il processore dispone di una propria memoria locale, sot to forma di registri (si veda, ad esempio, la Figura 2.3). Inoltre, come vedremo, la parte del processore che costituisce l’unità di controllo può a sua volta richiedere una propria mcTabella 4.1
Caratteristiche salienti dei sistemi di memoria del calcolatore.
Locazione
Prestazioni
Processore
Tempo di accesso
Interna (principale)
Tempo di ciclo
Esterna (secondaria) Capacità
Velocità di traserimento Modello fìsico
Dimensione della parola
A semiconduttore
Numero di parole
Magnetico
Unità di trasferim ento Parola Blocco M etodo di accesso Sequenziale Diretto Casuale Associativo
Ottico Magneto'ottico C aratteristiche fìsiche Volatile/non volatile Riscrivibile/non riscrivibile Organizzazione Moduli di memoria
4.1 Panoramicadcisistemidimem oriadiuncalcolatore
moria interna. La cache rappresenta un altra forma di memoria interna. La memoria ester na è costituita dai dispositivi periferici di memorizzazione, quali dischi e nastri, accessibi li al processore tramite controllori di I/O. Unowia caratteristica della memoria è la sua capacità. Per le memorie interne, essa è tipicamente espressa in byte (1 byte = 8 bit) o in parole. Le lunghezze di parola più co muni sono 8,16 e 32 bit. La capacità delle memorie esterne è tipicamente espressa in byte. Un concetto correlato è 1unità di trasferimento. Per la memoria interna, l’unità di trasferimento è uguale al numero di linee dati in ingresso c in uscita dal modulo di me moria. Tale numero può essere uguale alla lunghezza della parola, ma c spesso maggiore (64, 128 o 256 bit). Per chiarire questo punto, consideriamo tre concetti reciprocamente cor relati per la memoria interna. ♦ Parola: l’unità “naturale” di organizzazione della memoria, La dimensione della pa
rola corrisponde generalmente al numero di bit utilizzati per rappresentare un nu mero e alla dimensione delle istruzioni. Sfortunatamente, esistono molte eccezioni. Ad esempio, il CRAY C90 (un vecchio modello di supercomputer CRAY) ha una lunghezza di parola di 64 bit, ma rappresenta gli interi con 46 bit. NcH’architettura Intel x86 la lunghezza delle istruzioni, espressa in numero di byte, è molto varia, c la dimensione di una parola e 32 bit. ♦ Unità indirizzabili: in alcuni sistemi l’unità indirizzabile è la parola. Altri, invece, am
mettono !’indirizzamento a livello di byte. In ogni caso, la relazione tra la lunghezza in bit A di un indirizzo e il numero N di unità indirizzabili è 2A = N. ♦ Unità di trasferimento: per la memoria centrale, questo è il numero di bit letti o
scritti contemporaneamente, e non equivale necessariamente a ima parola o a un’u nità indirizzabile. Per la memoria esterna, i dati vengono spesso trasferiti in unità molto più larghe di una parola, dette blocchi. Un’altra distinzione tra i tipi di memoria è il metodo di accesso ai dati. ♦ Accesso sequenziale: la memoria è organizzata in unità, chiamate record. L’accesso deve avvenire in uno specifico ordine. Le informazioni di indirizzamento memoriz zate vengono usate per separare i record e sono d’aiuto per il loro reperimento. Si adot ta un’unica unità di lettura/scrittura. In questo modo, il tempo d’accesso al generico record è altamente variabile. Le unità a nastro, trattate nel Capitolo 6, sono ad accesso sequenziale. ♦ Accesso diretto: come per l’accesso sequenziale, l’accesso diretto implica un’unica
unità di lettura/scrittura. Qui, i singoli blocchi (o record) presentano un indirizzo univoco basato sulla locazione fisica. L’accesso al blocco avviene direttamente ed è se guito da una ricerca sequenziale, un conteggio o un attesa per raggiungere la locazione finale. Ancora una volta, il tempo di accesso e variabile. Le unità disco, trattate nel Capitolo 6, sono ad accesso diretto. ♦ Accesso casuale: ogni locazione indirizzabile in memoria ha il proprio circuito di in
dirizzamento. Il tempo per accedere a una locazione e costante e non dipende dalla sequenza dei precedenti accessi. Così, qualunque locazione può essere indirizzata e raggiunta direttamente. La memoria centrale e certe cache sono ad accesso casuale.
115
116
Sistema di elaborazione ♦ Capitolo 4 - Memoria cache
♦ Accesso associativo: si tratta di un tipo di memoria ad accesso casuale in cui una cer
ta configurazione di bit può essere confrontata simultaneamente con gli indirizzi di tutte le locazioni. Così, le parole di memoria sono identificate sulla base di una par te dei loro contenuti piuttosto che del loro indirizzo. Anche in questo caso ogni lo cazione dispone del proprio circuito di indirizzamento, e il tempo d’accesso e costante e non dipende dagli accessi precedenti. Le memorie cache spesso hanno accesso as sociativo. Dal punto di vista dell’utente, le due caratteristiche più importanti sono la capacità e le pre stazioni. I tre parametri di prestazione usati sono i seguenti. ♦ Tempo d accesso (latenza) : per la memoria ad accesso casuale, questo è il tempo im
piegato per eseguire un’operazione di lettura o scrittura. Si tratta cioè del tempo chc intercorre tra l’istante in cui un indirizzo viene presentato alla memoria e l’istante in cui i dati sono stati memorizzati o resi disponibili per l’uso. Per le altre memorie, il tempo d’accesso è quello chc serve per posizionare l’unità di lettura/scrittura nella lo cazione desiderata. ♦ Durata del ciclo di memoria: questo concetto si applica principalmente alla me
moria ad accesso casuale e consiste del tempo di accesso più qualsiasi tempo addi zionale richiesto prima che possa cominciare un secondo accesso. Tale tempo addi zionale può essere richiesto per motivi elettrici o per rigenerare i dati se questi vengono letti in maniera distruttiva. Si noti chc il tempo di ciclo di memoria riguar da il bus di sistema, non il processore. ♦ Tasso di trasferimento: è la frequenza alla quale i dati possono essere trasferiti nella
o dalla unità di memoria. Per la memoria ad accesso casuale, è l’inverso della durata del ciclo di memoria. Per la memoria ad accesso non casuale, vale la seguente relazione: τ
1N
= j
+ rI R
dove T n = tempo medio per leggere o scrivere N b it Ta = tempo medio di accesso n = numero di bit R = tasso di trasferimento, in bit per secondo (bps) Dal punto di vista fisico esistono svariati tipi di memoria. I più comuni al giorno d’oggi so no le memorie a semiconduttore, le memorie magnetiche (dischi c nastri) e quelle ottiche e magneto-ottiche. Numerose caratteristiche fisiche della memorizzazione dei dati sono importanti. In una memoria volatile, le informazioni decadono naturalmente o sono perse quando viene a mancare l’alimentazione. In una memoria non volatile, le informazioni memorizzate per mangono senza deterioramenti fino a quando non vengono deliberatamente modificate, e per mantenerle non è richiesta energia elettrica. Le memorie magnetiche sono di tipo non volatile. La memoria a semiconduttore può essere sia volatile sia non volatile. Le memorie incancellabili non possono essere alterate, se non distruggendo l’unità di memorizzazio ne. Lc memorie a semiconduttore di questo tipo sono note come memorie di sola lettura
4.1 Panoram icadeisistem idim em oriadiuncalcolatore
(ROM, read-only memory). Necessariamente, una memoria incancellabile deve anche es sere non volatile. Per la memoria ad accesso casuale, l’organizzazione è un elemento chiave di pro gettazione. Intendiamo, cioè, la disposizione fisica dei bit della parola. Come vedremo fra poco, non sempre si usa la disposizione più ovvia, come spiegato nel Capitolo 5.
La gerarchia di memoria I vincoli di progettazione sulla memoria di un calcolatore possono essere riassunti da tre domande. Qiiante grande? Quante veloce? Qiianto costa? La domanda sulla dimensione è in qualche modo aperta. Se c’è la capacità, non man cheranno certo applicazioni chc la utilizzino. Alla domanda sulla velocità è, in un certo sen so, più facile rispondere. Per ottenere le migliori prestazioni, la memoria deve essere in gra do di stare al passo con il processore. In altre parole, non vorremmo che il processore dovesse fermarsi in attesa di istruzioni o operandi. Va tenuta in considerazione anche l’ul tima domanda. In un sistema reale, il costo della memoria deve essere ragionevole in rela zione a quello degli altri componenti. Come ci si potrebbe aspettare, ce un compromesso tra le tre caratteristiche chiave: costo, capacità e tempo di accesso. Rispetto alle svariate tecnologie che sono utilizzate per i sistemi di memoria sussistono le seguenti relazioni: ♦ minore è il tempo di accesso, maggiore c il costo per bit ♦ maggiore è la capacità, più basso è il costo per bit ♦ maggiore è la capacità, più lungo è il tempo di accesso. L’imbarazzo del progettista e chiaro. Questi vorrebbe tecnologie che consentono una gran de capacità, sia perché la capacità è richiesta sia perché il costo per bit è basso. D’altro can to, per rispettare i requisiti di prestazione, il progettista deve usare memorie costose, di ca pacità relativamente più bassa e con brevi tempi di accesso. La soluzione risiede nel non fare affidamento su un unico componente di memoria o su un’unica tecnologia, bensì nclladottare una gerarchia di memoria. Una tipica ge rarchia c mostrata nella Figura 4.1. Scendendo lungo la gerarchia si riscontra: a. un decrescente costo per bit b. una capacità crescente c. un tempo di accesso crescente d. una decrescente frequenza di accesso da parte del processore. In questo modo, le memorie più piccole, più costose e più veloci, sono integrate da me morie più grandi, più economiche e più lente. La chiave del successo di questa organizza zione è il punto (d): la minor frequenza di accesso. Esamineremo più dettagliatamente que sto concetto quando tratteremo la cache e la memoria virtuale (Capitolo 8). Ora forniamo una breve spiegazione.
117
118
Sistema di elaborazione ♦ Capitolo 4 - Memoria cache
Figura 4.1
Gerarchia della memoria.
Esempio 4 . 1 Supponiamo chc il processore acceda a due livelli di memoria. Il livello 1 con
tiene 1.000 parole e ha un tempo di accesso di 0,01 jUs; il livello 2 contiene 100.000 paro le e ha un tempo di accesso di 0,1 /Xs. Si assuma che se la parola è localizzata nel livello 1, il processore vi accede direttamente. Se si trova nel livello 2, allora viene prima trasferita al livello 1 e poi il processore vi accede. Per semplicità, ignoriamo il tempo richiesto dal pro cessore per determinare in quale livello si trovi la parola. La Figura 4.2 illustra il tipico an damento di una situazione come questa. La figura indica il tempo di accesso medio a tuia memoria a due livelli in funzione della frequenza di successo H (hit), dove:1 H = rapporto tra gli accessi chc vengono soddisfatti nella memoria più veloce (ad esem pio, nella cachc) e il numero totale T x = tempo di accesso al livello 1 T1 = tempo di accesso al livello 2 Come si può vedere, per alte percentuali di accessi al livello 1, il tempo di accesso to tale medio è molto più vicino a quello del livello 1 chc a quello del livello 2. 1 Parliamo di successo (hit) quando la parola alla quale si accede si trova nella memoria più veloce; parliamo di fal limento (miss) in caso contrario.
4.1 Panoramica dei sistemi di memoria di un calcolatore
Ti + T 2
h
0
1
Frazione di accessi chc coinvolge solo il livello 1 (hit ratio)
Figura 4.2
Prestazioni degli accessi che coinvolgono solo ¡I livello 1 (hit ratio).
Se nel nostro esempio supponiamo che il 95 per cento degli accessi in memoria siano sod disfatti nella cache, allora il tempo di accesso medio a una parola può essere espresso scrivendo: (0,95)(0,01 μϊ) + (0,05)(0,01 μ s + 0,1 με) = 0,0095 + 0,0055 = 0,015 jUs. Dunque, il tempo di accesso medio c molto più vicino a 0,01 /Is che a 0,1 /is, come auspi cato.
Luso di due livelli di memoria per ridurre il tempo medio d’accesso in linea di principio funziona, ma solo se si verificano le condizioni dalla (a) alla (d). Nella stragrande mag gioranza dei casi le prime tre condizioni lo sono. Fortunatamente, anche la condizione (d) e generalmente valida. La base per la validità della condizione (d) è un principio noto come località dei ri ferimenti [DENN68]. Durante Icsccuzionc di un programma, i riferimenti alla memo ria da parte del processore, sia per i dati sia per le istruzioni, tendono a raggrupparsi. 1pro grammi contengono generalmente molti cicli iterativi c subroutine. Qiumdo si entra in un ciclo o in un sottoprogramma, si riscontrano ripetuti riferimenti a un piccolo insieme di istruzioni. Analogamente, le operazioni su tabelle c array implicano l’accesso a un insieme di dati contigui. Nel lungo periodo, i raggruppamenti cambiano, ma nel breve periodo il processore lavora principalmente con raggruppamenti fissi di riferimenti alla memoria. Di conseguenza, è possibile organizzare i dati nella gerarchia in modo che la percen tuale di accessi a ciascun livello immediatamente più basso risulti sostanzialmente mino re di quella al livello sovrastante. Rispetto allcscmpio precedente si supponga che il livel lo 2 contenga tutte le istruzioni di un programma e i suoi dati. Il raggruppamento corrente
119
120
Sistema di elaborazione ♦ Capitolo 4 - Memoria cache
può essere temporaneamente posto nel livello 1 e, occasionalmente, uno dei raggruppa menti nel livello 1 dovrà essere spostato al livello 2 per fare posto a un nuovo gruppo di ri ferimenti. In media, tuttavia, la maggior parte dei riferimenti avverrà verso istruzioni e da ti contenuti nel livello 1. Qiicsto principio può essere applicato anche su più livelli di memoria, come suggeri to dalla gerarchia mostrata nella Figura 4.1. Il tipo di memoria più veloce, più piccola e più costosa, consiste nei registri interni al processore. Generalmente, i processori contengono dozzine di questi registri, sebbene alcune macchine ne abbiano centinaia. Scendendo di due livelli, la memoria centrale è il principale sistema di memoria interna del calcolatore. Ciascuna locazione nella memoria centrale ha un indirizzo univoco. La memoria centrale viene solitamente estesa con una cachc più piccola e più veloce. La cache non è solitamen te visibile al programmatore o al processore. E un dispositivo per gestire il movimento di dati tra la memoria centrale e i registri del processore in modo da migliorare le prestazioni. Le tre forme di memoria appena descritte sono tipicamente volatili e adottano la tec nologia a semiconduttore. Luso di tre livelli sfrutta il fatto che tali memorie siano dispo nibili in una varietà di tipi differenti per velocità e costo. I dati vengono memorizzati in mo do duraturo sulle memorie di massa (dischi fissi e supporti removibili quali dischi, nastri e supporti ottici). La memoria esterna e non volatile, detta anche memoria secondaria o ausiliaria, è utilizzata per memorizzare i file di dati e programmi, ed è solitamente visibi le al programmatore in termini di file e record, anziché di singoli byte o parole. Il disco vie ne anche impiegato per fornire uncstensionc alla memoria centrale, nota come memoria virtuale, che verrà trattata nel Capitolo 8. Nella gerarchia si possono includere altre forme di memoria. Ad esempio, i grandi mainframe IBM includono una memoria interna nota come Expanded Storage. Quest’ultima utilizza una tecnologia a semiconduttore più lenta e meno costosa di quella della memoria centrale. Tale memoria non si inserisce nella gerarchia ma è un ramo late rale: i dati possono essere spostati tra la memoria centrale e quella espansa ma non tra la memoria espansa e quella esterna. Altre forme di memoria secondaria includono i dischi ottici e magncto-ottici. Infine, alla gerarchia si possono aggiungere livelli software. Una porzione della memoria centrale può essere usata come buffer per mantenere tempora neamente i dati da leggere dal disco. Tale tecnica, talvolta definita cachc del disco,2migliora le prestazioni in due modi. ♦ Le scritture su disco sono raggruppate. Invece di numerosi piccoli trasferimenti di da ti, ne abbiamo pochi e grandi. Questo migliora le prestazioni del disco c minimizza il coinvolgimento del processore. ♦ Alciuii dati da scrivere possono essere stati referenziati da un programma prima di es sere scaricati su disco. In questo caso, i dati vengono recuperati rapidamente dalla ca che software piuttosto che dal disco. L’Appendice 4A esamina le implicazioni sulle prestazioni delle strutture di memoria multilivello.
2 La cache del disco è generalmente una tecnica puramente software e non viene esaminata in questo libro. Per una trattazione si veda [STAL09J.
4.2 Principidellememoriecache
Trafcrimcnto blocco
(b) Organizzazione della cachc a tre livelli
Figura 4.3
4.2
Cachc e memoria centrale.
Principi delle memorie cache
La memoria cache è progettata per avere una velocità assimilabile a quella delle memorie più veloci, fornendo allo stesso tempo una vasta capacità al prezzo delle memorie a semicondut tore meno costose. Il concetto è mostrato nella Figura 4.3a in cui compare una memoria rela tivamente grande e lenta assieme a una memoria più piccola e veloce. La cache contiene una copia di parti della memoria centrale. Quando il processore tenta di leggere una parola di me moria, si effettua un controllo per determinare se la parola sia nella cache. In caso affermativo, la parola viene consegnata al processore. In caso contrario, bisogna portare nella cache un nu mero fisso di parole di memoria centrale (un blocco) e poi la parola viene trasferita nel pro cessore. Per il fenomeno di località dei riferimenti, quando l u i blocco di dati viene prelevato e, posto nella cache per soddisfare un singolo riferimento alla memoria, è probabile che ci saranno riferimenti futuri a quella stessa locazione di memoria o ad altre parole nel blocco. La Figura 4.3b mostra l’utilizzo di più livelli di cache. La cache L2 è più lenta e tipi camente più grande della cache LI e la cache L3 è più lenta e tipicamente più grande del la cache L2. La FigLira 4.4 mostra Ia struttura di un sistema cache/memoria centrale. La memo ria centrale è costituita da 2" parole indirizzabili, ognuna delle quali ha il proprio indiriz zo di «-bit. Per spiegare Imdirizzamento, si SLLpponga che le parole della memoria centra le siano raggruppate in blocchi di ATparole ciascuno. Ci sono, cioè, M = 2n/ K blocchi. La cache consiste di C l in e e 3 di K parole ciascuna, e il numero di linee è radicalmente in3 Quando ci si riferisce all’unità di base di una cachc si preferisce utilizzare il termine linea anziché il termine bloc co per due ragioni: (1 ) per evitare confusione con il blocco della memoria principale contenente lo stesso numero di parole di dati di una linea di cache; (2) perché ima linea di cache non contiene soltanto parole, come un blocco della memoria principale, ma anche tag e bit di controllo.
121
122
Sistema di elaborazione ♦ Capitolo 4 - Memoria cachc
Numero Etichetta di linea ( t a g )
Blocco
0 1
0 1 2 • •
C - I
Indirizzo di memoria
Ü
2 3
Blocco (K parole)
• Lunghezza del blocco (K parole)
■
(a) Cachc
Blocco
In - 1 Lunghezza ·*■ di parola (b) Memoria centrale
Figura 4.4
Struttura cache/memoria centrale.
feriore al numero di blocchi di memoria centrale (C > C2, questo richiede Sx
2352 byte
Figura 6.11
Formato dei blocchi del CD-ROM.
errore di 288 byte e 2048 byte di dati; il modo 2 specifica 2336 byte di dati utente sen za codice a correzione di errore. ♦ Data: dati utente. ♦ Auxiliary: dati utente aggiuntivi nel modo 2, in luogo del codice a correzione di er rore. A causa della velocità lineare costante, gli accessi casuali diventano più difficili. Individuare uno specifico indirizzo implica il movimento della testina in una generica arca, aggiu stando la velocità di rotazione e leggendo l’indirizzo, eseguendo poi altri aggiustamenti per trovare e accedere allo specifico settore. Il CD-ROM risulta appropriato per la distribuzione di grandi quantità di dati a un gran numero di utenti. Poiché la spesa del processo iniziale di scrittura è elevata, non è ade guato alle applicazioni individuali. Rispetto ai tradizionali dischi fissi, il CD-ROM pre senta due vantaggi. ♦ Il disco ottico insieme alle informazioni memorizzate può essere massicciamente re plicato con una spesa modesta, a differenza del disco magnetico. 1dati di un disco ma gnetico devono essere riprodotti copiando un disco alla volta utilizzando due drive. ♦ Il disco ottico e rimovibile, quindi utilizzabile per gli archivi. La maggior parte dei di schi magnetici non è rimovibile. Le informazioni sui dischi fissi devono essere copiate su nastro prima chc il disco possa essere usato per memorizzare nuove informazioni. Gli svantaggi del CD-ROM sono i seguenti. ♦ E un dispositivo di sola lettura e non può essere aggiornato. ♦ Il suo tempo d’accesso, circa mezzo secondo, è molto superiore rispetto ai dischi ma gnetici. CD registrabili
Per applicazioni nelle quali è richiesta una o poche copie di un insieme di dati è stato svi luppato il CD wrile-once read-many, noto come CD registrabile, CD-R [CD recordable). Qiiesti dischi sono preparati in modo da poter essere riscritti una volta mediante un rag
6.3 Mem orie ottiche
215
gio laser di modesta intensità. Così, tramite un controllore di disco leggermente più co stoso rispetto a quello del CD-ROM, !utente può tanto scrivere, una sola volta, sul disco quanto leggerlo. Il supporto dei CD-R è simile ma non identico a quello di CD o CD-ROM. In que sti ultimi, le informazioni sono registrate incidendo dei pozzetti sulla superficie del mez zo, che cambia le sue caratteristiche riflettenti. Nei CD-R, il supporto include uno strato di colorante che viene usato per cambiare le proprietà di riflessione ed e attivato da un la ser ad alta intensità. Il disco risultante può essere letto dalle unità CD-R o CD-ROM. Il disco ottico CD-R è utile per la memorizzazione di archivi di documenti e file, e fornisce una registrazione permanente di grandi volumi di dati. CD N s c r ì v i b i l i
Il disco ottico CD-RW può essere ripetutamente scritto e sovrascritto, così come un di sco magnetico. Tra i vari tentativi, l’unico approccio puramente ottico che si è dimostra to interessante e detto cambiamento di fase. Il disco a cambiamento di fase utilizza un ma teriale che presenta diverse caratteristiche di riflessione nelle due fasi: uno stato amorfo, nel quale le molecole hanno una disposizione casuale che riflette poco la luce, e uno stato cri stallino, nel quale il supporto ha una superficie liscia molto riflettente. Un raggio laser può cambiare la fase del materiale. Il principale svantaggio di questi dischi è che, a lungo an dare, il materiale perde permanentemente le sue proprietà. Gli attuali materiali possono es sere cancellati anche un milione di volte. Il CD-RW ha l’ovvio vantaggio di poter essere riscritto e dunque usato come un ve ro supporto di memorizzazione secondario. In questo senso, è in competizione con il di sco magnetico. Inoltre il disco ottico ha tolleranze costruttive molto meno severe di quel le per i dischi magnetici ad alta capacità. Dunque, presentano un’affidabilità più elevata e un tempo di vita più lungo.
DVD (Digital Versatile Disk) Con il capace DVD, l’industria elettronica ha finalmente trovato un sostituto accettabile del nastro analogico VHS. Il DVD ha di fatto sostituito il nastro utilizzato nei videoregi stratori, VCR (video cassette recorder) e, cosa più importante in questa trattazione, sostituirà il CD-ROM nei personal computer e nei server. Il DVD porta il video nell’era digitale. Esso contiene film con incredibile qualità di immagine e come i CD audio, che le unità DVD possono comunque leggere, supporta l’accesso casuale. I DVD sono fino a sette volte più capienti di un CD-ROM, quindi i giochi per PC diventano più realistici e il software edu cativo incorpora informazioni. La maggiore capacità dei DVD rispetto ai CD è dovuta a tre differenze (Figura 6.12). 1. I bit sono impacchettati più fittamente. La spaziatura tra i cicli della spirale di un CD è di 1,6 |Im e la minima distanza tra i pit lungo la spirale è di 0,834 |Im. U DVD uti lizza un laser con una lunghezza d’onda più breve e raggiunge una spaziatura tra i ci cli di 0,74 μ η ι e una distanza tra pit di 0,4 μ η ι. Il risultato è l’incremento della capa cità che raggiunge 4,7 GB. 2. Il DVD adotta un secondo strato di pit e land posto sopra il primo strato. Un DVD doppio strato presenta uno strato semiriflettente al di sopra dello strato riflettente e,
216
Sistema di elaborazione ♦ Capitolo 6 - M emoria esterna
E tic h e tta
S tra to p ro te ttiv o (acrilico) S tra to rifle tte n te (allum inio)
Tl laser si concentra sui pit di policarbonato di fronte allo strato riflettente
S u b s tra to di p o licarb o n ato (plastica)
(a) CD-ROM - Capacità 682 MB S u b stra to d i c a rb o n a to , lato 2 S tra to sem irifle tten te. Iato 2 S u b stra to di c a rb o n a to , lato 2 S tra to co m p letam en te rifle tte n te , Iato 2 S tra to c o m p letam en te rifletten te, lato I S u b stra to di ca rb o n a to , lato 1
Il laser si concentra sui pit di uno strato un lato per volta. II disco va girato per leggere l’altro lato.
S tra to s em irifle tten te, lato 1 S u b stra to di c a rb o n a to , lato 1
(b) DVD-ROM, doppio lato, doppio strato - Capacità 17 GB
Figura 6 .1 2
C D -R O M c D V D -R O M .
variando la messa a fuoco, i laser dei DVD possono leggere separatamente i due stra ti. In pratica questa tecnica raddoppia la capacità del disco, portandola a circa 8,5 GB. La riflessività più bassa del secondo strato limita la sua capacità e pertanto non si ot tiene un vero e proprio raddoppio. 3. Il DVD-ROM può essere a doppio lato, mentre i dati su un CD sono registrati su un solo lato. La sua capacità sale fino a 17 GB. Così come per i CD, ci sono DVD versione registrabile c di sola lettura (Tabella 6.5).
Dischi ottici ad alta definizione I dischi ottici ad alta definizione sono stati progettati per memorizzare video ad alta defi nizione e contenere moiri più dati rispetto ai normali DVD. Grazie a un laser con una lun ghezza d’onda più corra, nella gamma blu-viola, è stato possibile raggiungere una densità di bit molto più elevata. I pit di dati, che costituiscono gli 1 e gli 0 digitali, sono più pie-
6.4 Nastri magnetici
2,11 //ni
CD
:
m à m Y; ;X;■·???!•xv'ÍSSBBSé' φίβ i I P i f ·.■,·■, WM 'm S trato di dati lam pada I -and >■»·■· SmbeS P » % m m .. >.. 's■: * 1.2uni >< ,■ - . P it —^ « « ■ '· · rP -' /flmwm, /xo Jraecir
n
0,58 μνη Blu-ray
m m m ,l | *
"y-y >'y'
Χ·^>.?·>!·
lunghezza d ’onda del laser = 780 nm
«Η.**·-*» » ' — — · · · ■ · .W ». « ·
/ » * < < ■ » ·» *: »* -v*·» i* > ♦*·;♦.•‘♦v··».+.♦.*».
1,32 uni
« .» « « «-.«* »
'«e«.«*.«·.
T 0,1 «m
-«v - ~·
>β*»Χ«.>**ΛΛ.ν*«ν.
. « t > w « ■ «. < 4K*. « r . i r ' · * · * * » j» < 4» « Λί * » * * « » · . » m .ii Mi··»*»·* M* «» « « 4*··«*>* ’V-Hi-X-Ht-*** K M mi'·* ■ ft»» V.. A < m v . y CPU
Non pronto
Istruzione successiva Condizione d ’errore
Veritlca stato. Pronto
Condizione d ’errore
(c) A ccesso diretto alla m em oria (DM A)
Pronlo
Uggi
Leggi la parola del m odulo
la parola del m odulo
Scrivi la parola in m em oria
Scrivi CPU -» M emoria
Fatto?
la parola in m em oria
Fatto?
Istruzione successiva (a) I/O da programma
Figura 7.4
Verifica siato.
Istruzione successiva (b) I/O interrupt-driven
Tre tecniche per l'in pu t di un blocco di dati.
pure 1024 indirizzi di I/O. Poiché gli indirizzi di memoria sono discinti da quelli di I/O, si parla di I/O separato. La Figura 7.5 mette a confronto queste due versioni di I/O da programma. La Figura 7.5a mostra come l’interfaccia di un singolo dispositivo di input, quale una tastiera, possa apparire a un programmatore che utilizza ΓΙ/O memory mapped. Si assuma un indirizzo a 10 bit, una memoria a 512 bit (locazioni da 0 a 511) e (non oltre) 512 indirizzi di I/O (lo cazioni da 512 a 1023). Due indirizzi sono dedicati agli input da tastiera da un particolare terminale. L’indirizzo 516 si riferisce al registro dati e l’indirizzo 517 si riferisce al registro di stato, che funge anche da registro di controllo per ricevere i comandi del processore. Il programma dell’esempio legge un byte dalla tastiera e lo pone in un registro del processore. Si noti che il processore rimane in loop fino a quando il byte del dato e disponibile. Con l’I/O separato (Figura 7.5b), le porte di I/O sono accessibili solo tramite spe ciali comandi di I/O che attivano le linee di comando di I/O del bus. La maggior parte dei processori dispone di svariate istruzioni di riferimento alla me moria, ma nel caso di I/O separato, ci possono essere solo poche istruzioni di I/O. Dunque, lui vantaggio dell’I/O memory mapped consiste nel poter utilizzare questo vasto repertorio di istruzioni, consentendo una programmazione più efficiente. Uno svantaggio consiste in vece nel maggior utilizzo di prezioso spazio d’indirizzamento in memoria. Entrambe le ver sioni sono di uso comune.
7.4 I/O interrupt driven
7
6
5
4
3
2
1
0 Registro d i in p u t d a ti da tastiera
516
7
6
5
4
3
2
1
0 Registro di stato e controllo della testiera
517 t — 1 = P ronto 0 = O ccupato
IN D IR IZ Z O
200 202
L
Im postato a 1 per iniziare la lettu ra
ISTR U ZIO N E OPERA NDO I» Il Load AC 517 Store AC 517 Load AC B ranch if Sign = 0 202 Load AC 516
C O M M EN TO C arica neU’accum ulatore Inizia la lettu ra della tastiera Legge il byte di stato Sta in loop fino a quando è pronto C arica un byte di dati
(a) I/O m em ory m apped
IN D IR IZZ O 200 201
ISTR U ZIO N E OPERA NDO Load I/O 5 5 Test I/O B ranch Not Ready 201 5 In
CO M M EN TO Inizia la lettu ra della tastiera C ontrolla il com pletam ento Sta in loop fino al com pletam ento C arica un byte di dati
(b) I/O separato
Figura 7.5
7.4
I/O memory mapped e separato.
I/O interrupt driven
Il problema d ell!/O da programma c chc il processore deve attendere per un lungo periodo di tempo prima chc il modulo di competenza sia pronto per la ricezione o la trasmissione dei dati. Frattanto, il processore deve verificare ripetutamente lo stato del modulo di I/O, con conseguente, netto degrado delle prestazioni deUmtero sistema. L’alternativa e che il processore invii un comando di I/O a un modulo e poi prose gua nello svolgimento di altro lavoro. Il modulo di I/O interromperà il processore quan do è pronto allo scambio di dati. Il processore esegue poi il trasferimento dei dati c quin di riprende l’elaborazione interrotta. Vediamo come questo avviene. Per l’input, dal punto di vista del modulo di I/O, il modulo di I/O riceve un comando READ dal processore e procede quindi alla lettura dei dati provenienti da una delle sue periferiche. Una volta che i dati sono depositati nei suoi registri, il modulo invia al processore un interrupt tramite il bus di controllo e poi atten-
235
236
Sistema di elaborazione ♦ Capitolo 7 - Input/Output
de finche il processore gli richiede i dati. Qiiando viene effettuata la richiesta, il modulo scrive i dati sul bus dati ed è quindi pronto per un’altra operazione. Dal punto di vista del processore, per l’input il processore invia un comando READ e poi prosegue facendo qualcos’altro (ad esempio, potrebbe eseguire istruzioni di un altro programma). Al completamento di ogni istruzione, il processore controllalcventuale pre senza di interrupt (Figura 3.9). Qiiando rileva un interrupt inviato dal modulo di I/O, il processore salva il contesto esecutivo (program counter e registri) del programma cor rente ed elabora linterrupt. In questo caso, il processore legge i dati provenienti dal mo dulo di I/O e li scrive in memoria. Poi il processore ripristina il contesto esecutivo e ri prende !esecuzione interrotta. Si osservi la Figura 7.4b che mostra l’uso di I/O guidato da interrupt per la lettura di un blocco di dati e la si confronti con la Figura 7.4a. Pur risultando maggiormente effi ciente rispetto all’I/O da programma, in quanto elimina le attese non necessarie, anche questa strategia richiede molto tempo al processore, attraverso il quale devono comunque passare i dati che vanno dalla memoria al modulo di I/O o viceversa.
Elaborazione degli interrupt Si consideri più dettagliatam ente il ruolo del processore nelFl/O interrupt driven. Loccorrenza di un interrupt scatena un certo numero di eventi, sia nell’hardware del pro cessore sia nel software. La Figura 7.6 mostra una tipica sequenza. Quando una periferica completa un’operazione di I/O, avviene la seguente sequenza di eventi hardware. 1. Il dispositivo invia un interrupt al processore. 2. Il processore conclude l’esecuzione dell’istruzione corrente prima di rispondere all interrupt, come indicato nella Figura 3.9. 3. Il processore controlla gli interrupt determinandone lcventuale presenza e invia un segnale di riconoscimento al dispositivo chc ha inviato linterrupt. Il riconoscimen to consente al dispositivo di rimuovere il proprio segnale di interrupt. 4. Il processore si prepara a trasferire il controllo alla routine di interrupt. Per iniziare, deve salvare le informazioni che saranno necessarie per riprendere l’esecuzione del programma corrente dal punto in cui è sopraggiunto !’interrupt. Informazioni mi nime richieste sono: (a) lo stato del processore, contenuto in un registro chiamato Program Status Word (PSW ) e (b) la locazione della prossima istruzione da esegui re, contenuta nel program counter (PC). Queste informazioni possono essere poste in cima alla pila di sistema.2 5. Il processore scrive nel PC l’indirizzo della prima istruzione della routine di gestio ne dell’intcrrupt considerato. A seconda del l'architettura del calcolatore e della pro gettazione del sistema operativo, ci può essere un singolo programma, un program ma per ciascun tipo di interrupt o un programma per ciascun dispositivo e ciascun tipo di interrupt. Se è presente più di una routine di gestione dcll’interrupt, il pro cessore deve determinare quale invocare. Questa informazione può essere inclusa nel
2L 'A ppendice IOA tra tta Ic op erazio ni su lle pile.
7.4 I/O interrupt driven
H ard w are
____Λ ____
r
Software Λ
,—
—
Λ
Il controllore di una periferica o un altro dispositivo hardw are solleva un interrupt Salvataggio delle restanti informazioni di stato del processo II processore completa ! ’esecuzione d ell’istruzione corrente Interrupt del processo
ra s Ripristino delle informazioni di stato del processo Il processore pone PSW e PC in cim a alla pila Ripristino dei vecchi PSW e PC Il processore scrive il nuovo valore nel PC a seconda d ell’interrupt
Figura 7.6
Semplice elaborazione di interrupt.
segnale di interrupt, oppure il processore può dover inviare una richiesta al disposi tivo che ha sollevato linterrupt per ottenere ima risposta contenente le informazio ni richieste. Dopo che il PC ha assunto l’indirizzo della routine di interrupt, il processore inizia ad ese guire la fase di fetch di un nuovo ciclo istruzione. Poiché il fetch c determinato dal conte nuto del PC, il risultato è che il controllo viene trasferito al programma di gestione dell’interrupt. L’esecuzione di questo programma dà i seguenti risultati. 6. Il PC e il PSW relativi al programma interrotto sono stati salvati sulla pila di siste ma. Comunque, esistono ulteriori informazioni considerate parte dello ‘‘stato” di un programma in esecuzione. In particolare è necessario conservare anche il contenuto dei registri del processore in quanto potrebbero essere utilizzati (e quindi modifica ti) dalla routine di interrupt. Tipicamente, questa routine comincerà a copiare i con-
237
238
Sistema di elaborazione ♦ Capitolo 7 - Input/Output
T - M
Pila di controllo
JV + 1
T -H Y - L t
mmz
counter
J Y
In iz io
Routine di servizio
dcll’inicmipi Y + L
Riiom o
./ " λ :·''^ x':¾: g I r - -V/1* 1 Stack
'··: -·:····>■>■>
Processore
N N +1
Programma utente
M em oria centrale
(a) L’ in te rru p t avviene dopo u n 'istru zio n e a ll’ ind irizzo N Figura 7.7
N. L’oucput della funzione hash è usa to com e indice nella tabella hash. Poiché ingressi diversi possono corrispondere alla stessa uscita, un elemento in ingresso può essere assegnato a una locazione già occupata. In questo caso, il nuovo elemento deve raggiungere un’al tra locazione d ella tabella. T ipicam ente, il nuovo elem ento è posto nel prim o spazio vuoto successivo e, per con catenare i cam pi, viene fornito un puntatore che parte dalla locazione originale.
8.3 G estionedellam em oria
297
concatenazione che consente, in genere, di ottenere liste piuttosto corte, costituite da uno o due clementi. La struttura della tabella delle pagine viene chiamata invertita perché in dicizza le voci della tabella in base al numero di frame e non al numero di pagina virtuale. Translation lookaside buffer In linea di principio, ogni riferimento alla memoria virtuale può causare due accessi alla me moria fisica: uno per andare a leggere l’elemento della tabella delle pagine c uno per anda re a prendere il dato desiderato. Perciò, un semplice schema di memoria virtuale avrebbe l’effetto di raddoppiare il tempo di accesso alla memoria. Per evitare questo problema, la maggior parte degli schemi di memoria virtuale fa uso di una speciale cache per i valori del la tabella delle pagine, solitamente chiamata translation lookaside buffer (TLB). Questa ca che funziona nello stesso modo della cache di memoria e contiene gli clementi della tabella delle pagine, usati più di recente. La Figura 8.18 rappresenta un diagramma di flusso che mostra l’uso del TLB. Per il principio di località, la maggior parte dei riferimenti alla me moria virtuale avverrà verso locazioni di pagine usate recentemente. Di conseguenza, la maggior parte dei riferimenti alla memoria virtuale riguarderà elementi di tabelle delle pa gine presenti nella cache. Studi sul TLB del VAX hanno mostrato chc questo schema può migliorare in modo significativo le prestazioni [CLAR85, SATY81]. Si noti chc il meccanismo della memoria virtuale deve interagire con il sistema di ca che (non la cache TLB bensì quella della memoria centrale), come mostrato nella Figura 8.19. Un indirizzo virtuale sarà generalmente nella forma: numero di pagina, spiazzamen to. Per prima cosa, il sistema di memoria consulta il TLB per controllare se sia presente il valore corrispondcntc della tabella delle pagine. Se così è, viene generato l’indirizzo reale (fisico) combinando il numero del frame con lo spiazzamento. In caso contrario, si acce de alla tabella delle pagine. Una volta generato l’indirizzo reale, nella forma di un’etichet ta e di un riferimento si consulta la cache per vedere se è presente il blocco contenente quel la parola (si veda la Figiua 4.5). In caso affermativo, il blocco viene restituito al processore; altrimenti, la parola viene recuperata dalla memoria centrale. Il lettore dovrebbe essere in grado di apprezzare la complessità dell’hardware che rea lizza gli accessi alla memoria. La traduzione di un indirizzo virtuale in un indirizzo reale implica un riferimento alla tabella delle pagine, che si può trovare nel TLB, nella memo ria centrale o su disco. La parola referenziata può essere nella cache, nella memoria centrale 0 su disco. In quest’ultimo caso, la pagina che contiene la parola deve essere caricata nella memoria centrale e l’indirizzo del suo blocco deve essere caricato nella cache. Inoltre, bi sogna aggiornare la tabella delle pagine del processo.
Segmentazione Un altro modo di suddividere la memoria indirizzabile è noto come segmentazione. Mentre la paginazione risulta trasparente al programmatore, la segmentazione è solitamente visi bile al programmatore e costituisce un modo conveniente per organizzare i programmi e 1dati, e per associare gli attributi di privilegio e protezione alle istruzioni e ai dati. La segmentazione permette al programmatore di vedere la memoria come un insie me di segmenti o spazi di indirizzamento multipli. I segmenti possono avere varie dimen sioni, addirittura dinamiche. In genere, il programmatore o il sistema operativo scom-
298
Sistema di elaborazione ♦ Capitolo 8 - Supporto ai sistemi operativi
Il p r o g r a m m a chiede l’accesso a una pagina
Koutine per la gestione del page fault
k Figura 8.18
O perazione di paginazione e Translation Lookaside Buffer (TLB).
8.3 Gcstioncdellamem oria
O perazioni di TLB
:igura 8.19
Operazioni di cache e Translation Lookaside Buffer.
pongono i programmi e i dati in segmenti. A ciascun segmento possono essere assegnati iiritti di accesso e di uso. Gli indirizzi di memoria sono espressi da un numero di segmento : da uno spiazzamento. Qiiesta organizzazione offre al programmatore i seguenti vantaggi. 1. Sempl ifica lagestione di strutture dati dinamiche. Qiialora ilprogrammatore non co nosca in anticipo quanto diventerà grande una struttura dati, non sarà costretto a “ti rare a indovinare! Alla struttura verrà assegnato un proprio segmento, e il sistema ope rativo lo espanderà o restringerà come richiesto. 2. Permette la modifica e la ricompilazione indipendente dei programmi, senza dover ripetere il linking. Ancora una volta, questo è realizzabile usando segmenti multipli. 3. Si presta alla condivisione della memoria tra processi: un programmatore può allo care un programma di utilità o una tabella di dati in un segmento, che può essere ac cessibile agli altri processi. 4. Favorisce la protezione: poiché un segmento può contenere un insieme ben definito di programmi o dati, il programmatore (o l’amministratore di sistema) può assegna re privilegi in modo opportuno.
299
300
Sistema di elaborazione ♦ Capitolo 8 - Supporto ai sistemi operativi
Tali vantaggi non sono disponibili con la paginazione, chc non è visibile al programma tore. D ’altro canto, abbiamo visto che la paginazione fornisce un’efficiente forma di ge stione della memoria. Per combinare i vantaggi, alcuni sistemi sono equipaggiati con hardware c software di sistema operativo in grado di fornire una tecnica che combina le due le strategie.
8.4
Gestione della memoria nel processore Pentium
Fin dall'introduzione dell’architettura a 32 bit, i microprocessori hanno sviluppato sche mi sofisticati di gestione della memoria, basati sull’esperienza nel campo dei sistemi più grandi. E in molti casi, le versioni dei microprocessori sono addirittura superiori. Poiché tali schemi sono stati sviluppati dai produttori di microprocessori e possono essere sfrut tati da vari sistemi operativi, essi tendono a essere di uso generale. Un esempio rappresen tativo è dato dal Pentium II. L’hardware di gestione della memoria di questo processore è essenzialmente lo stesso usato nei processori Intel 80386 e 80486, con alcuni raffinamenti.
Spazio degli indirizzi Il Pentium II include hardware perla segmentazione e per la paginazione. Entrambi i mec canismi possono essere disabilitati, consentendo all’utente di scegliere tra quattro diverse visioni della memoria. ♦
M e m o ria n o n segmentata c non paginata: l’indirizzo virtuale coincide con quel
lo fisico. Qiiesto c utile, ad esempio, in applicazioni di semplici controllori ad alte prestazioni. ♦
M e m o ria n o n segmentata c paginata: la memoria viene vista come uno spazio di
indirizzamento lineare paginato. La protezione della memoria è basata sulla pagina zione. Qiicsto c favorito da determinati sistemi operativi (ad esempio, il Berkeley U N IX ). ♦
M e m o ria segmentata e n on paginata: la memoria c vista come una collezione di
spazi di indirizzamento logici. Rispetto alla paginazione questo approccio offre il van taggio di garantire la protezione fino al livello del singolo byte. Inoltre, a differenza della paginazione, garantisce che la tabella di traduzione richiesta (la tabella di seg menti) sia nel chip quando il segmento è in memoria. Dunque, la memoria segmen tata c non paginata presenta tempi di accesso prevedibili. ♦ M e m o ria segmentata e paginata: la segmentazione definisce partizioni logiche di
memoria ad accesso controllato, mentre la paginazione serve a gestire l’allocazione di memoria all’interno delle partizioni. Qiicsta visione è favorita da sistemi operati vi come lo U N I X System V.
8.4 Gestione della memoria nel processore Pentium
Segmentazione Quando si usa lasegmentazione, ciascun indirizzo virtuale (che nella documentazione del Pentium II è chiamato indirizzo logico) consiste in un riferimento di 16 bit al segmento e in uno spiazzamento di 32 bit. Due bit del riferimento al segmento riguardano il mecca nismo di protezione, e gli altri specificano il segmento. Dunque, con la memoria non seg mentata, la memoria virtuale dell’utente è di 232 = 4 Gbytc, mentre con la memoria seg mentata è di 246 = 64 terabyte (Tbyte). Lo spazio di indirizzamento fisico adotta un indirizzo a 32 bit per un massimo di 4 Gbytc. In realtà, la quantità di memoria virtuale può essere maggiore di 64 Tbyte. Infatti l’in terpretazione da parte del processore degli indirizzi virtuali dipende da quale processo sia attualmente attivo. Lo spazio di indirizzamento virtuale viene diviso in due parti: una metà (8K segmenti da 4 Gbytc) c globale, condivisa da tutti i processi, e la parte restante è locale e distinta per ciascun processo. Associate a ciascun segmento ci sono due forme di protezione: il livello di privilegio e l’attributo d’accesso. Esistono quattro livelli di privilegio, dal più protetto (livello 0) al me no protetto (livello 3). Il livello di privilegio associato a un segmento di dati rappresenta la sua “classificazione” ( 43
64
>79
8
>11
U
2:15
Polarizzazione
127
Non specificato
1023
Non specificato
Esponente massimo
127
>1023
1023
>16383
Esponente minimo
-12 6
s3;
10.25 Lc specifiche dell’architettura Power IBM non impongono come il processore debba implementare la modalità little-endian. Esse dettagliano solo la visione del la memoria che un processore deve avere quando opera in modalità little-endian. Convertendo una struttura dati da big a little-endian, i processori sono liberi di im plementare un vero meccanismo di scambio dei byte o di usare una qualche for ma di modifica dell’indirizzo. Gli attuali processori PowerPC sono tutte macchi ne big-endian di default , e usano la modifica degli indirizzi per trattare i dati come little-endian. Considerate la struttura s definita nella Figtua 10.18. Lo schema nella parte in basso a destra della figura mostra come la struttura s sia vista dal processore. Infatti, se la struttura s viene compilata in modalità little-endian, il suo schema in memo ria è mostrato nella Figura 10.12. Spiegatela mappatura che viene eseguita, descri vete un modo semplice per implementarla ed esponete l’efficacia di questo ap proccio. 10.26 Scrivete un piccolo programma per determinare se una macchina opera in moda lità little-endian e per mostrare i risultati. 10.27 II processore MIPS può essere impostato per operare sia in stile big-endian sia in stile little-endian. Considerate !’istruzione di Load Byte Unsigned (LBU, carica mento di byte senza segno), chc legge un byte dalla memoria c lo scrive negli 8 bit meno significativi di un registro e poi riempie i restanti 24 bit del registro con bit 0. La descrizione della LBU viene fornita nel manuale di MIPS utilizzando un lin guaggio di trasferimento di registro come: m e m 27 26 25
OC 23
to m m
22 2· 10 i B H
m m
m m
32 31 Ά* ’B' 'C ·η·
D W Em 14 '
14
® ΙΙΙΙ m m
18
■ η Έ·
18 ,p t
HGHi m m
IC m a m w rm
IC
52 .
5'
20 m m
20 m m
63
62
„4
(a) Big endian
Figura 1 0 .1 9
(b) Little cndian
U n 'altra vista d e lla Figura 1 0 .1 8 .
♦ L’ordinamento non influenza lordine degli elementi di dati all'interno di una strut tura. Pertanto, la parola c da 4 caratteri mostra un’inversione nei byte, ma l’array di byte d da 7 caratteri no. Di conseguenza, l’indirizzo di ciascun singolo elemento di d c lo stesso in entrambe le strutture. LcfFctto del l’ordinamento viene forse dimostrato più chiaramente considerando la me moria come una sequenza verticale di byte, così come mostra la Figura 10.19. Non esiste un accordo generale su quale sia il migliore stile di ordinamento.51 pun ti seguenti depongono in favore dello stile big-endian. ♦ Ordinamento di stringhe di caratteri: i processori big-endian eseguono più rapi
damente il confronto di stringhe di caratteri allineate per interi; la ALU intera può confrontare più byte in parallelo. ♦ Trasferimento IRA/decimale: tutti i valori possono essere stampati da sinistra ver
so destra senza causare confusione.
415
416
CPU ♦ Capitolo 10 - Linguaggi macchina: caratteristiche e funzioni
♦ O rdine coerente: i processori big-endian memorizzano interi e stringhe di caratte ri nello stesso ordine (il byte più significativo viene per primo). I punti seguenti depongono in favore dello stile little-endian. ♦ I processori big-endian devono eseguire una somma per convertire un indirizzo a 32 bit in un indirizzo a 16 bit, per usare i byte meno significativi. ♦ E più facile eseguire operazioni aritmetiche a precisione supcriore: non è necessario determinare il byte meno significativo e muoversi all’indietro. Le differenze sono secondarie e la scelta dello stile di ordinamento deriva più dal proble ma di supportare le vecchie macchine che da ogni altra considerazione. Il PowerPC c un processore bi-endian che supporta le modalità big-endian e littleendian. Larchitettura bi-cndian consente ai progettisti del software di scegliere uno dei due modi per la migrazione di sistemi operativi e applicazioni. Il sistema operativo stabilisce il modo di ordinamento per Fcsccuzionc dei processi. Una volta selezionato un modo, tutti i successivi caricamenti e salvataggi in memoria sono determinati dal modello di indiriz zamento proprio di quel modo. Per supportare questa caratteristica hardware, il sistema operativo mantiene come parte dello stato del processo due bit nel registro di stato della macchina (MSR). Un bit specifica il modo di ordinamento nel quale viene eseguito il ker nel; l’altro specifica Fattuale modo operativo del processore. Quindi, il modo può essere cambiato in base al processo.
Ordinamento dei bit Ncll’ordinarc i bit all’interno di un byte, ci troviamo immediatamente ad affrontare due domande. 1. Il primo bit viene contato come bit zero o bit uno ? 2. Il numero di bit più basso viene assegnato al bit meno significativo del byte (littleendian) o a quello più significativo (big-endian)? A queste domande non si risponde nello stesso modo su tutte le macchine. Su alcune le ri sposte sono diverse a seconda delle circostanze. Inoltre, la scelta dellordinamcnto dei bit all'interno di un byte non è sempre coerente con l’ordinamento dei byte airintcrno di uno scalare a più byte. I programmatori devono essere a conoscenza di questi problemi quan do manipolano i singoli bit. Un’altra area di interesse riguarda la trasmissione su una linea seriale. Quando viene trasmesso lui singolo byte il sistema trasmette per primo il bit più significativo o quello me no significativo? Il progettista deve essere certo che i bit in arrivo vengono gestiti corret tamente. Per una trattazione dell’argomento, si veda [James90].
Capitolo 11
Linguaggi macchina: modi di indirizzamento e formati
Punti chiave ♦
Nelle istruzioni, il riferimento a un operando contiene il valore effettivo (imme diato) dell operando o un riferimento al suo indirizzo. I linguaggi macchina adot tano una vasta gamma di m odi di indirizzamento. Tra questi, Tindirizzamcnto di retto (Findirizzo d cllop cran do c nel cam po indirizzo), indiretto (il campo indirizzo punta a una locazione chc contiene Tindirizzo dcllopcrando), registro, registro indiretto e altre forme di spiazzamento, nelle quali il contenuto di un re gistro viene sommato a un indirizzo per produrre Tindirizzo dcllopcrando.
♦
La progettazione dei campi del form ato delle istruzioni è un com pito complesso, che include considerazioni sulla lunghezza delTistruzione (fissa o variabile), sul nu mero di bit del codice operativo, al riferimento agli operandi e su come venga de terminato il m odo di indirizzamento. . i .··> i o ν· ν .,v .v .y . .·,. ν ΐν .ν .γ .'ί i λ ν λ ν . X -ν Λ .-.'‘λ /· V / v X v i /*. X v.> vi λ . .X v > v. ! '
•lv.\.
418
CPU ♦ C apitolo 11 - Linguaggi macchina: m odi di indirizzam ento e formati
entre nel Capitolo 10 ci siamo concentrati su che cosa faccia un linguaggio macchi na, qui ci occupiamo di come specificare gli operandi e le operazioni delle istruzioni. Esistono due problemi: come viene specificato l’indirizzo di un operando e come sono uti lizzati i bit dell’istruzione per definire Ibperazione c gli indirizzi degli operandi.
M
11.1
Indirizzamento
Il campo o i campi indirizzo nei tipici formati delle istruzioni sono relativamente piccoli. Sarebbe auspicabile poter referenziare un ampio intervallo di locazioni di memoria (fisica o virtuale). Tutte le tecniche adottate per raggiungere questo obiettivo implicano dei com promessi tra l’intervallo degli indirizzi e/o la flessibilità dcll’indirizzamento da un lato, c il numero di riferimenti alla memoria e/o la complessità del calcolo degli indirizzi dall’altro. In questo paragrafo esaminiamo le più comuni tecniche d’indirizzamento (Figura 11.1). ♦ Immediato ♦ Diretto ♦ Indiretto ♦ Registro ♦ Registro indiretto ♦ Spiazzamento ♦ Pila In questo paragrafo useremo la seguente notazione: A
= contenuto di un campo indirizzo di un’istruzione
R
= contenuto di un campo indirizzo di un’istruzione chc si riferisce a un registro
EA = indirizzo attuale (effettivo) della locazione che contiene l’operando referenziato (X ) = contenuto della cella di memoria X o del registro X La Tabella 11.1 indica il calcolo degli indirizzi eseguito per ciascun modo d’indirizzamento. Prima di proseguire è necessario commentare due aspetti. Innanzitutto, praticamen te tutte Ie architetture per i calcolatori forniscono vari modi d’indirizzamento. Sorge per tanto la domanda su come l’unità di controllo possa determinare quale sia il modo usato in una particolare istruzione. Sono possibili svariati approcci. Ad esempio, l’indirizzamento potrebbe essere specificato nel codice operativo; oppure, si potrebbero impiegare dei bit dell’istruzione come campo del m odo : il loro valore determinerebbe il modo d’indi rizzamento usato. Il secondo aspetto concerne l’interpretazione dell’indirizzo effettivo, EA [effective ad dress). In un sistema privo di memoria virtuale, l’indirizzo effettivo è un indirizzo della me moria centrale o un registro. In un sistema con memoria virtuale, l’indirizzo effettivo è un indirizzo virtuale o un registro. L’effettiva corrispondenza con un indirizzo fisico è assicu rata dal meccanismo di paginazione ed è trasparente al programmatore.
11.1 Indirizzam ento
Istru zio n e
Istruzione Operando
mm Memoria
(b) Diretto
(a) Immediato
Istruzione
Istruzione
I..I.....A...,
n o
Memoria Operando
-Operando
Registri
(d) Registro
(c) Indiretto
Istruzione
Istruzione
__ L
i....m " ~ Memoria
Memoria
~*Φ Operando
Registri
(e) Registro indiretto Istruzione
Implicito
Registro cima della pila
(g) Pila Figura 11.1
M o d i di in d irizza m e n to .
Òpcrando
Registri
(0 Spiazzamento
419
420
CPU ♦ C apitolo 11 - Linguaggi macchina: modi di indirizzam ento e formati
Tabella 11.1 Modo
M odi di indirizzam ento fondamentali. Algoritmo
Principale vantaggio
Principale svantaggio
Immediato
Operando = A
Nessun accesso alla memoria
Modulo limitato per l’operando
Diretto
EA = A
Semplicità
Spazio di indirizzamento limitato
Indiretto
EA = (A)
Grande spazio di indirizzamento
Più accessi alla memoria
Registro
EA = R
Nessun accesso alla memoria
Spazio di indirizzamento limitato
Registro indiretto EA = (R)
Grande spazio di indirizzamento
Accessi extra alla memoria
Spiazzamento
EA = A + (R)
Flessibilità
Pila
EA ==cima della pila Nessun accesso alla memoria
Complessità Applicabilità limitata
Indirizzamento immediato Nella più semplice forma dindirizzamento, quella immediata, l’operando è esplicitamen te presente nell’istruzione: OPERANDO = A Qiiesta modalità può essere adottata per definire e usare costanti o valori iniziali delle va riabili. Generalmente, il valore sarà memorizzato in complemento a due. Quando l’ope rando viene caricato in un registro dati, il bit di segno viene esteso verso sinistra. In alcu ni casi il valore binario immediato viene interpretato come intero non negativo senza segno. Il vantaggio ddl'indirizzamento immediato è che per ottenere l’operando non c ne cessario alcun riferimento alla memoria oltre al prelievo dell’istruzione, risparmiando co sì un ciclo di memoria. Lo svantaggio è che il valore dell’indirizzo c limitato dalla dimen sione del campo indirizzo che, in molti linguaggi macchina, c piccolo rispetto alla lunghezza della parola.
Indirizzamento diretto Una forma molto semplice d indirizzamento è quello diretto, in cui il campo indirizzo con tiene l’indirizzo effettivo dellopcrando: EA = A Tale tecnica, comune nelle prime generazioni di calcolatori, ma desueta sulle architetture odierne, richiede un solo riferimento in memoria e nessun calcolo particolare. L’ovvia li mitazione è chc fornisce uno spazio dindirizzamento limitato.
Indirizzamento indiretto NcU’indirizzamento diretto, la lunghezza del campo indirizzo è solitamente minore della lunghezza della parola, il chc lim ita !’intervallo di indirizzi. Una soluzione prevede chc il campo indirizzo punti all’indirizzo di una parola in memoria, la quale a sua volta contie ne l’intero indirizzo dell’operando. Questa tecnica è nota come indirizzamento indiretto : EA = (A)
11.1 Indirizzam ento
421
L’ovvio vantaggio di questo approccio c che parole di IunghezzaArrendono disponibile uno spazio d’indirizzamento di 2 . Lo svantaggio è che l’esecuzione di tale istruzione richiede due riferimenti alla memoria per prelevare l’operando: uno per estrarne l’indirizzo e l’altro per ottenerne il valore. Sebbene il numero di parole ora indirizzabili sia 2N, il numero di differenti indirizzi ef fettivi che possono essere referenziati in un dato istante è limitato a 2A, dove K rappresen ta la lunghezza del campo indirizzo. Generalmente, non si tratta di una pesante restrizione, e può rappresentare un vantaggio. In un ambiente di memoria virtuale, tutte le locazioni di indirizzi effettivi possono essere confinate alla pagina () di ogni processo. Poiché il campo indirizzo di un’istruzione è piccolo, esso produrrà naturalmente indirizzi rappresentati da numeri relativamente piccoli che apparirebbero nella pagina 0. L’unica restrizione è che la dimensione della pagina non sia inferiore a 2A. Qiiando un processo è attivo, presenterà ri petuti riferimenti alla pagina 0, forzandone la permanenza nella memoria centrale. Quindi, un riferimento indiretto alla memoria implicherà, al più, un page fault anziché due. Una variante poco usata di indirizzamento indiretto è Tindirizzamento multilivello o indiretto a cascata: EA= (...(A)...) In questo caso, un bit delTindirizzo a tutta parola è un flag, I, di indirettezza. Se I è 0, allo ra la parola contiene TEA. Viceversa, viene invocato un altro livello di indirettezza. Non sembra esserci alcun vantaggio particolare in questo approccio, mentre lo svantaggio de riva dal fatto che il prelievo di un operando potrebbe richiedere tre o più riferimenti alla memoria.
Indirizzamento registro L’indirizzamento registro è simile a quello diretto. La sola differenza è che il campo indi rizzo si riferisce a un registro anziché a un indirizzo di memoria centrale: EA = R Per chiarire, se il contenuto del campo indirizzo di registro in una istruzione è 5, allora l'in dirizzo desiderato è il registro RS c il valore dell’operando e contenuto in R5. General mente, i campi indirizzo chc referenziano i registri hanno 3 ,4 o 5 bit. Questo indirizzamento ha il vantaggio di richiedere un piccolo campo indirizzo nel l’istruzione e di non accedere alla memoria. Comc detto nel Capitolo 4, il tempo di lettu ra dei registri è molto inferiore rispetto a quello di una locazione della memoria. Lo svan taggio di questa tecnica è che lo spazio di indirizzamento risulta molto limitato. Il frequente impiego dclTindirizzamcnto registro implica chc i registri della CPU siano utilizzati intensivamente. Dato chc il numero di registri c fortemente limitato (ri spetto alle locazioni di memoria centrale), il loro uso a pieno ritmo ha senso solo se effet tuato in modo efficiente. Sc ciascun operando c trasferito dalla memoria in un registro, ela borato dall’ALU e poi riportato in memoria centrale, si aggiunge un passo intermedio dispendioso. Viceversa, se un operando rimane nel processore per più operazioni, allora si ottiene un effettivo risparmio. Un esempio e dato dei risultati intermedi dei calcoli. In par ticolare, supponiamo di eseguire un algoritmo di moltiplicazione in complemento due. La locazione etichettata con A nel diagramma di flusso della Figura 9.12 c referenziata mol te volte e dovrebbe trovarsi in un registro anziché in una cella di memoria.
422
CPU ♦ Capitolo 11 - Linguaggi macchina: modi di indirizzam ento e formati
Spetta al programmatore decidere quali valori debbano essere allocati nei registri c quali in memoria centrale. Le CPU più moderne utilizzano più registri di uso generale, spo stando la responsabilità delleffìcicnza dellesecuzione sul programmatore in linguaggio assembly o sul progettista del compilatore o dell’assemblatore.
Indirizzamento registro indiretto Così conic Tindirizzamento registro è analogo alTindirizzamento diretto, Tindirizzamento registro indiretto è simile alTindirizzamento indiretto. Lc due modalità differiscono per il fatto che il campo indirizzo si riferisce a una locazione di memoria o a un registro. Pertanto, per Tindirizzamento registro indiretto, E A=(R) Vantaggi e limitazioni di questa tecnica sono fondamentalmente gli stessi delTindirizzamento indiretto. Entrambi, superano la limitazione dello spazio dindirizzamento facendo puntare il campo indirizzo a una cella contenente un intero indirizzo. Inoltre, Tindirizzamento registro indiretto accede alla memoria una volta in meno rispetto alTindirizzamcnto indiretto.
Indirizzamento con spiazzamento Un metodo molto potente d’indirizzamento combina le capacità delTindirizzamcnto di retto c quelle del registro indiretto. E noto con vari nomi, a seconda del contesto, ma il meccanismo di base è lo stesso. Noi lo chiameremo indirizzamento con spiazzamento ( di splacement addressing ) : EA = A + (R) Tale tecnica richiede chc l’istruzione abbia due campi indirizzo, c chc almeno uno sia espli cito. Il valore, A, di l u i campo indirizzo è usato direttamente. LaItro campo indirizzo, o un riferimento implicito basato sul codice operativo, si riferisce a un registro il cui contenu to viene sommato ad A per produrre l’indirizzo effettivo. Descriveremo ora tre dei più comuni utilizzi delTindirizzamcnto con spiazzamento: ♦ indirizzamento relativo ♦ indirizzamento base-registro ♦ indicizzazione Indirizzam ento relativo
NclTindirizzamento relativo, il registro implicitamente referenziato c il program counter (PC). In altre parole, !’indirizzo dell'istruzione corrente viene sommato al campo indiriz zo per produrre TEA. Qui il campo indirizzo viene trattato come un numero in comple mento a due. Pertanto, Tindirizzo effettivo c uno spiazzamento relativo rispetto all’indirizzo dclTistruzione. L’indirizzamcnto relativo sfrutta il concetto di località trattato nei Capitoli 4 e 8. Sc la maggior parte dei riferimenti alla memoria sono relativamente vicini all’istruzione in ese cuzione, allora l’uso delTindirizzamcnto relativo risparmia bit di indirizzo nelTistruzionc.
11.1 Indirizzam ento
Indirizzam ento registro-base
L’interpretazione di questa tecnica è la seguente: il registro referenziato contiene un indirizzo di memoria e il campo indirizzo contiene uno spiazzamento (solitamente un intero senza segno) rispetto a tale indirizzo. Il riferimento al registro può essere esplicito o implicito. L’indirizzamento registro-base sfrutta anch esso la località degli accessi alla memoria. Si tratta di un metodo adatto aH’implemcntazione della segmentazione (Capitolo 8). In al cune implementazioni, si utilizza implicitamente un registro segmento-base. In altre, il pro grammatore può scegliere un registro per contenere l’indirizzo base di un segmento, e l’i struzione deve fare riferimento esplicito a tale registro. In quest’ultimo caso, se la lunghezza del campo indirizzo è A" e il numero di registri possibili e N , allora un’istruzione può ac cedere a ciascuna delle Naree delle 2k parole. Indicizzazione
Nell’indicizzazione il campo indirizzo rappresenta un indirizzo di memoria centrale e il re gistro referenziato contiene uno spiazzamento positivo da tale indirizzo. Si noti che que sta descrizione è l’opposto dell’interpretazione dell’indirizzamcnto base-registro. Ovviamente, e ben più che un punto di vista dell’utente. Nell’indicizzazione il campo in dirizzo c considerato un indirizzo di memoria, e dovrà quindi essere più lungo di un cam po indirizzo di un’istruzione. Inoltre, vedremo che esistono alcuni raffinamenti all’indicizzazione che non sarebbero utili nel contesto base-registro. Ciò nondimeno, il metodo per calcolare ΓΕΑ è lo stesso, e in entrambi i casi il riferimento al registro è talvolta espli cito e talvolta implicito. Un utilizzo importante dell’indicizzazione consiste nel fornire un meccanismo effi ciente per eseguire operazioni iterative. Consideriamo, ad esempio, un elenco di numeri memorizzati a partire dalla locazione A, e supponiamo di voler sommare 1 agli elementi della lista. Dobbiamo prelevare ciascun valore, sommargli 1 e memorizzarlo nuovamen te. La sequenza degli indirizzi effettivi richiesti è A, A + I, A + 2 , ..., fino all’ultima loca zione della lista. Con l’indicizzazione, ciò viene fatto facilmente. Il valore A viene memo rizzato nel campo indirizzo dell’istruzione, e al registro scelto, detto registro indice , viene inizialmente assegnato il valore 0. Dopo ciascuna operazione, il registro indice e incre mentato di 1. Dato che i registri indice sono comunemente impiegati per questi compiti, si mani festa generalmente la necessità di incrementare o decrementare il registro indice dopo ogni accesso. Poiché si tratta di un’operazione comune, alcuni sistemi la eseguono come parte dello stesso ciclo di istruzione. Qiiesto viene detto autoindicizzazione. Se alcuni re gistri sono dedicati esclusivamente a questa funzione, allora l’autoindicizzazionc può es sere invocata in modo implicito e automatico. Se invece si usano registri generici, l’opera zione può essere segnalata con un bit nell’istruzione. L’autoindicizzazione con incremento può essere descritta comc segue: EA = A + (R) (R) ^ (R )+ 1 Alcune macchine ammettono sia l’indirizzamento indiretto sia l’indicizzazione, ed è pos sibile utilizzare entrambi per la stessa istruzione. Esistono due possibilità:postindicizzazione e preindicizzazione.
423
424
CPU ♦ Capitolo 11 - Linguaggi macchina: modi di indirizzam ento e formati
Nel primo caso si ha: EA = (A) + (R) Innanzitutto, il contenuto del campo indirizzo viene utilizzato per accedere alla locazio ne di memoria chc contiene un indirizzo diretto. Qiiesto indirizzo è poi indicizzato dal va lore del registro. Tale tecnica c utile per accedere a un blocco di dati a formato fisso. Ad esempio, nel Capitolo 8 abbiamo visto come il sistema operativo debba impiegare un bloc co di controllo del processo per ciascun processo. Le operazioni eseguite sono le stesse, in dipendentemente dal blocco manipolato. Di conseguenza, gli indirizzi nelle istruzioni che referenziano il blocco potrebbero puntare a una locazione (valore = A) che contiene un puntatore variabile all’inizio di un blocco di controllo del processo. Il registro indice contiene lo spiazzamento interno al blocco. Con la preindicizzazione , l’operazione di indicizzazione viene eseguita prima di ri solvere Findircttczza : EA= (A +(R)) L’indirizzo viene calcolato come nel l’indicizzazione semplice, ma in questo caso non con tiene l’operando, ma il suo indirizzo. Un esempio d’utilizzo di questa tecnica c la costru zione di una tabella di salto a più vie. In un particolare punto di un programma, si può ri scontrare un salto a locazioni diverse a seconda di certe condizioni. Si può impostare una tabella di indirizzi a partire dalla cella A. Indicizzando questa tabella, si può trovare la lo cazione richiesta. Solitamente, i linguaggi macchina non includono prcindicizzazionc c postindiciz zazione.
Indirizzamento a pila L’ultimo modo di indirizzamento che consideriamo è quello a pila. Come visto nclFAppcndicc 9A, una pila c una sequenza lineare di locazioni riservate di memoria. Associato alla pila troviamo un puntatore (contenuto nel registro SP, stack pointer) il cui valore è l’indirizzo della cima della pila. In alternativa, i due elementi più in alto nella pila si possono trovare nei registri della CPU. In tal caso SP referenzia il terzo elemento della pila (Figura 10.14b). Pertanto, i riferimenti alle locazioni della pila nella memoria sono di fatto indirizzi a registro indiretto. Qiiesta tecnica è una forma di indirizzamento implicito. Le istruzioni macchina ope rano implicitamente sulla cima della pila senza accedere alla memoria.
11.2
Modi di indirizzamento di x86 e ARM
Modi dì indirizzamento di x86 e ARM Considerando la Figura 8.21, ricordiamo che il meccanismo di traduzione degli indirizzi del processore x86 produce un indirizzo, detto indirizzo virtuale o effettivo, che rappre senta uno spiazzamento all’interno di un segmento. La somma delFindirizzo di partenza del segmento c delFindirizzo effettivo produce un indirizzo lineare. Se è in uso la pagina zione, questo indirizzo lineare deve passare attraverso un meccanismo di traduzione delle
11.2 M odi di indirizzam ento di x86 e ARM
Figura 11.2
Calcolo del modo d'indirizzam ento in x86.
pagine chc genera un indirizzo fisico. Nella parte seguente, trascureremo questo passo, in quanto trasparente al linguaggio macchina e al programmatore. L’x86 prevede vari modi di indirizzamento. La Figura 11.2 indica la logica implicata. Il registro di segmento determina il segmento soggetto al riferimento. Esistono 6 registri di segmento; quello di volta in volta utilizzato dipende dal contesto dellcsecuziòne e dal l'istruzione. Ogni registro di segmento contiene l’indirizzo di partenza del corrisponden te segmento. Associato a ciascun registro di segmento visibile all’utente, troviamo un re gistro descrittore di segmento (non visibile al programmatore) chc memorizza i diritti di accesso, l’indirizzo di partenza e il limite (lunghezza) del segmento. Inoltre, esistono due registri chc possono essere utilizzati per costruire un indirizzo: il registro base e il registro indice.
425
426
CPU ♦ Capitolo 11 - Linguaggi macchina: m odi di indirizzam ento e formati
Tabella 11.2
Modi di indirizzamento di x86.
M odo
A lg o ritm o
Immediato
Operando = A
Operando registro
LA = R
Spiazzamento
L A = (SR) + A
Base
L A = (SR) + (B)
Base con spiazzamento
LA = (SR) + (B) + A
Indice scalato con spiazzamento
L A = (SR) + (I) X S + A
Base con indice e spiazzamento
LA = (SR) + (B) + (I) + A
Base con indice scalato e spiazzamento
LA = (SR) + (I) X S + (B) + A
Relativo
L A = (P C ) + A
LA = indirizzo lineare (X ) = contenuto d i X SR = registro segmento P C = program co l u i ter A
= contenuto di un campo indirizzo nell'istruzione
R
= registro
B
= registro base
1
= registro indice
S
= fattore d i scala
Vediamo ora i dodici modi di indirizzamento dcllx86 (elencati nella Tabella 11.2). Nel modo immediato, l’operando è incluso nell’istruzione. Lopcrando può essere un byte, una parola o una parola doppia. Nel m odo operando registro, l’operando c collocato in un registro. Nelle istruzio ni di trasferimento dati, aritmetiche e logiche, l’operando può essere uno dei registri a 32 bit (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP), a 16 bit (AX, BX, CX, DX, SI, DI, SP, BP) o a 8 bit (AH, BH, CH, DH, AL, BL, CL, DL). Nelle operazioni in virgola mo bile, gli operandi da 64 bit sono formati utilizzando coppie di registri da 32 bit. Esistono anche istruzioni che accedono ai registri di segmento (CS, DS, ES, SS, FS, CS). Gli altri modi di indirizzamento referenziano locazioni in memoria. La locazione de ve essere specificata in termini del segmento che contiene la cella e dello spiazzamento ri spetto all’inizio del segmento. In alcuni casi, il segmento è specificato esplicitamente, in al tri tramite semplici regole chc assegnano un segmento di default. Nel m odo spiazzamento, lo spiazzamento dell’operando (l’indirizzo effettivo della Figura 11.2) è contenuto ncH’istruzione come spiazzamento a 8, 16 o 32 bit. Con la seg mentazione, tutti gli indirizzi nelle istruzioni si riferiscono puramente a uno spiazzamen to in un segmento. Il modo di indirizzamento con spiazzamento è presente su poche mac chine poiché, come detto precedentemente, comporta istruzioni lunghe. Nel caso dell’x86, il valore di spiazzamento può raggiungere i 32 bit, nelle istruzioni di 6 byte. L’indirizzamcnto con spiazzamento può rivelarsi utile per referenziare variabili globali. I restanti modi di indirizzamento sono indiretti, nel senso che la porzione di indirizzo all’interno dell’istruzione specifica al processore dove cercare !’indirizzo. Il modo base
11.2 M odi di indirizzam ento di x86 e ARM
(equivalente a quello che abbiamo chiamato indirizzamento registro indiretto) indica che !’indirizzo effettivo è contenuto in uno dei registri da 8,16 o 32 bit. Nel modo base con spiazzamento, l’istruzione include uno spiazzamento da som mare a un registro base, che può essere uno qualsiasi dei registri generici. Questa modalità può essere utilizzata nei casi seguenti. ♦ Da un compilatore per puntare a variabili locali. Ad esempio, il registro base po trebbe puntare all’inizio del record di attivazione di una procedura. ♦ Come indice in un array i cui elementi hanno dimensione diversa da 1, 2, 4 o 8 byte. Infatti questo array non può essere indicizzato con un registro indice. In questo ca so, Io spiazzamento punta all’inizio dell array, e il registro base contiene il risultato di un calcolo che determina lo spiazzamento di un dato elemento all'interno dell array. ♦ Per accedere al campo di un record. Il registro base punta all’inizio del record, e lo spiazzamento si riferisce al campo. Nel modo a indice scalato con spiazzamento, l’istruzione include uno spiazzamento da sommare a un registro, chiamato in questo caso registro indice. Qiiest’ultimo può essere uno qualsiasi dei registri generici, a eccezione di quello chiamato ESP che viene general mente utilizzato per la pila. Nel calcolo dell’indirizzo effettivo, il contenuto del registro in dice viene moltiplicato per un fattore di scala di 1, 2, 4 o 8 e quindi sommato allo spiaz zamento. Qiiesta modalità è molto conveniente per indicizzare gli array. Il fattore 2 può essere usato per array di interi da 16 bit. Il fattore 4 per interi da 32 bit o per numeri in vir gola mobile. Infine, il fattore 8 può essere usato per array di numeri in virgola mobile a pre cisione doppia. Il modo base con indice e spiazzamento somma i contenuti del registro base, del registro indice e uno spiazzamento per ottenere l’indirizzo effettivo. Ancora volta, registro base e registro indice possono essere un qualunque registro generico, ma il registro indice non può essere ESP. Ad esempio, questo modo di indirizzamento potrebbe essere adotta to per l’accesso a un array in un record di attivazione di procedura; oppure per supporta re un array bidimensionale; in questo caso, lo spiazzamento punta all’inizio dellarray, c cia scun registro contiene una dimensione dellarray. Il modo a indice scalato con base e spiazzamento somma i contenuti del registro indice moltiplicato per un fattore di scala, i contenuti del registro base e lo spiazzamento. Esso si rivela utile nel caso di array memorizzati nella pila; in questo caso, gli elementi dell’array sarebbero di lunghezza 2, 4 o 8 byte ciascuno. Tale modo fornisce anche un’indi cizzazione efficiente delle matrici con clementi da 2, 4 o 8 byte. Infine, Iindirizzamento relativo può essere adottato nelle istruzioni di trasferimento di controllo. Al valore del program counter, che punta alla successiva istruzione da eseguire, viene sommato uno spiazzamento. In questo caso, lo spiazzamento è trattato comc un va lore da un byte, una parola o una doppia parola con segno.
Modi di indirizzamento di ARM A differenza delle CISC, le macchine RISC utilizzano in genere modi di indirizzamento semplici e relativamente diretti. L’architettura ARM si discosta un po’ da questa tradizio ne, offrendo un insieme piuttosto ricco di modi di indirizzamento. Tali modi vengono clas sificati in maniera più conveniente in relazione al tipo di istruzione.
427
428
CPU ♦ Capitolo 11 - Linguaggi macchina: modi di indirizzam ento c formati
Indirizzam ento load/store
Le istruzioni di load e store sono le uniche chc fanno riferimento alla memoria, in modo indiretto, tramite un registro base sommato a uno spiazzamento.1 Le alternative di indicizzazione sono le seguenti tre (Figura 11.3). ♦ Spiazzamento {offset), Qiiesto indirizzamento non prevede indicizzazione. Lo spiaz
zamento viene sommato o sottratto al valore del registro base per formare l’indi riz zo di memoria. La Figura 11.3a mostra un esempio di questo metodo con l’istruzio ne STRB rO, [ri, #12], che è l’istruzione di memorizzazione di un byte. In questo caso Tindirizzo di base è nel registro ri e lo spiazzamento c il valore immediato 12. L’indirizzo risultante (base più spiazzamento) c la locazione di memoria in cui regi strare il byte meno significativo di rO. ♦ Preindicizzazione (preindex). L’indirizzo di memoria è formato come nel caso pre
cedente, ma viene riscritto anche nel registro base. In altre parole, il valore del regi stro base viene incrementato o dccrementato del valore dello spiazzamento. La Figiua 11.3b illustra questo metodo con l’istruzione S TRB rO, [ri, # 1 2]·.Il punto esclamativo sta proprio a significare la preindicizzazione. ♦ Postindicizzazione {postindex). L’indirizzo di memoria è il valore del registro ba
se. Uno spiazzamento viene aggiunto o sottratto al valore del registro base e il risul tato viene scritto nel registro base. La Figura 11.3c illustra questo metodo con l’i struzione STRB rO, [ri], #12. Si noti comc ciò a cui ARM fa riferimento come registro base si comporta poi da registro indice per la preindicizzazione e la postindicizzazione. Il valore di spiazzamento può esse re sia un valore immediato contenuto nelTistruzione sia il valore di un altro registro. Se il valore di spiazzamento è un registro, è disponibile un’altra caratteristica utile: Tindirizzamento di registro scalare. Il valore nel registro di spiazzamento viene scalato da uno degli operatori di shift: shift logico a sinistra, shift logico a destra, shift aritmetico a sinistra, shift aritmetico a destra, rotazione verso destra oppure rotazione estesa verso destra (che include il bit di riporto nella rotazione). L’entità di uno shift è specificata come valore immediato nelTistruzione. Indirizzam ento di istruzioni di processamento dati
Qiicste istruzioni possono utilizzare Tindirizzamcnto con registro o quello immediato. Nel primo caso, il valore di uno degli operandi può essere scalato utilizzando uno degli ope ratori di shift definiti nel paragrafo precedente. Istruzioni di salto
Per queste istruzioni esiste solo Tindirizzamento immediato. L’istruzione di salto contie ne un valore a 24 bit. Per il calcolo degli indirizzi il valore viene spostato a sinistra di 2 bit, in modo chc Tindirizzo sia allineato comc una parola. In questo modo, la gamma degli in dirizzi effettivi raggiungibili si estende a ±32 MB dal program counter.
1 Anche in questo caso, come nella discussione relativa a x86, tralasceremo la traduzione da indirizzo virtuale a in dirizzo fisico.
11.2 M odi di indirizzam ento di x86 e ARM
ST RB rO,
[ri, #12] Spiazzam ento
(a) Spiaz/amento
ST RB rO,
[ri, # 1 2 ] l
(b) Preindicizzazione
ST RB v rO,
[ri], #12
(c) Postindicizzazione
Figura 11.3
Metodi di indicizzazione di ARM.
Indirizzam ento load/store m ultiplo
Lc istruzioni di caricamento multiplo portano dati dalla memoria a un sottoinsieme dei registri a uso generale (o a tutti). Lc istruzioni di store multiplo memorizzano i dati di un sottoinsieme dei registri a uso generale (o di tutti). La lista dei registri da caricare e salva re viene specificata in un campo a 16 bit dell’istruzione dove ogni bit corrisponde a uno dei 16 registri. Qiicstc modalità di indirizzamento producono una sequenza di indirizzi di memoria. Il registro numericamente più basso viene salvato all’indirizzo di memoria più
429
430
CPU ♦ Capitolo 11 - Linguaggi macchina: modi di indirizzam ento e formati
LDMxx r i o , {rO, r i , r4> STMxx r i o , {rO, r i , r4> incremento antecedente
decremento successivo
decremento antecedente
MBR
Bus in d irizzi
Bus Bus di d a ti controllo
MBR = Memory buffer register MAR = Mcmoiy address register IR = Instruction register PC = Program counter
Figura 12.6
Flusso di dati, ciclo di prelievo.
Una volta completata la fase di fetch, l’unità di controllo esamina il contenuto dcll’IR per determinare se contiene un operando chc utilizza l’indirizzamcnto indiretto. In tal caso, vie ne eseguito un ciclo indiretto (Figura 12.7). G liiV bit più a destra dell’MBR, che conten gono il riferimento all’indirizzo, vengono trasferiti nel MAR. Qiiindi l’unità di controllo richiede una lettura in memoria, al fine di ottenere l’indirizzo desiderato dell’operando al l’interno dell’MBR. CPU MAR
F = O
V-O v
'
te = =>
IJn ità
I ------
di nntrollo
=O
M BR
..... . Bus Bus in d irizz i d a ti Figura 12.7
Flusso d i dati, c ic lo indiretto.
Bus di controllo
12.4 Pipelining delle istruzioni
B us Bus in d irizz i d a ti Figura 12.8
Bus d i controllo
Flusso di dati, ciclo di interrupt.
Il ciclo di prelievo c quello indiretto sono semplici e prevedibili. Lafase esecutiva può as sumere molte forme che dipendono dalla specifica istruzione. QLLesto ciclo può implica re il trasferimento di dati tra registri, accessi alla memoria o a moduli di I/O, c/o utilizzo dell’ALU. Anche il ciclo di interrupt (Figura 12.8) è semplice e prevedibile. Il contenuto corrente del PC deve essere salvato di modo chc il processore possa riprendere l’attività dopo l’in terrupt. Qpindi, il contenuto del PC viene trasferito nell’MBR per essere scritto in me moria. La locazione di memoria riservata a questo scopo (per esempio, lui puntatore alla pila) viene caricata nel MAR a partire dallunità di controllo. Nel PC viene scritto l’indi rizzo della routine di interrupt. Ne consegue che il successivo fetch preleverà l’istruzione appropriata.
12.4
Pipelining delle istruzioni_____________________
I sistemi di elaborazione possono raggiungere prestazioni più spinte traendo vantaggio dai miglioramenti della tecnologia e dall’evoluzione dell’organizzazione del processore. Abbiamo già visto alcuni esempi: l’impiego di più registri piuttosto che del solo accumu latore e l’utilizzo della memoria cache. Un altro approccio organizzativo, piuttosto co mune, è il pipelining delle istruzioni.
Strategia del pipelining II pipelining delle istruzioni ricalca la struttura della catena di montaggio di un impianto industriale in cui i semilavorati passano attraverso vari stadi di produzione. Utilizzando una catena di montaggio, prodotti di stadi diversi possono essere lavorati simLiitancamcnte.
463
464
CPU ♦ C apitolo 12 - Struttura e funzione del processore
(a) Vista semplificata
Attesa
Nuovo indirizzo
Attesa
(b) Vista espansa Figura 12.9
Pipeline a due stadi.
Tale processo è anche detto pipelining dato che, comc in un condotto, i nuovi input ven gono immessi a un’estremità prima che quelli precedentemente inseriti escano dall’altra. Per applicare questo concetto allesecuzionc delle istruzioni, dobbiamo riconoscere che, di fatto, le istruzioni presentano un certo numero di stadi. La Figura 12.5, ad esem pio, spezza il ciclo esecutivo in una sequenza di 10 fasi. Chiaramente, deve esistere una qual che possibilità di pipelining. Per un approccio semplice, si consideri di suddividere lelaborazione dell’istruzione in due stadi: prelievo ed esecuzione. Esistono momenti durante l’esecuzione di un’istru zione in cui non si fa riferimento alla memoria centrale. Qticsto tempo può essere utiliz zato per prelevare la successiva istruzione contemporáneamente all’esecuzione dellistruzione corrente. La Figura 12.9a mostra questo approccio. La pipeline presenta due stadi indipendenti. Il primo preleva un’istruzione e la deposita in un buffer. Qiiando il secondo stadio è libero, il primo stadio gli passa l’istruzione bufferizzata. Mentre il secondo stadio sta eseguendo l’istruzione, il primo trae vantaggio da ogni ciclo di memoria non utilizza to per prelevare e bufferizzare l’istruzione successiva. Ομΰ$ίο fenomeno viene detto pre fetch delle istruzioni (instruction prefetch) o fetch overlap. Dovrebbe essere chiaro che questo processo velocizza l’esecuzione delle istruzioni. Se gli stadi di prelievo e di esecuzione fossero di uguale durata, il ciclo istruzione risultereb be dimezzato. Tuttavia, se guardiamo più da vicino la pipeline (Figura 12.9b), vedremo che tale raddoppio del tasso di esecuzione è improbabile per due ragioni. I. Il tempo di esecuzione risulterà generalmente più lungo del tempo di prelievo. L’csccuzione implicherà la lettura e la memorizzazione degli operandi c Tcffettuazionc di qualche operazione. Pertanto, lo stadio di prelievo potrebbe dover attendere per un certo periodo di tempo prima di poter svuotare il proprio buffer.
12.4 P ip clining d e lle istru zion i
2. Nelle istruzioni di salto condizionato, l’indirizzo della successiva istruzione da pre levare non è noto all’inizio della loro esecuzione. Quindi, lo stadio di prelievo deve attendere finché riceve dallo stadio di esecuzione l’indirizzo della successiva istru zione. Quest’ultimo, poi, può dover attendere fino a quando questa viene prelevata. Una scelta casuale può ridurre il tempo perso a causa del secondo motivo. Una regola semplice è la seguente: quando un’istruzione di salto condizionato passa dalla fase di pre lievo a quella di esecuzione, si preleva !’istruzione successiva a quella di salto in memoria. Di conseguenza, se il salto non dovrà essere effettuato, non avremo perso tempo. In caso contrario, occorre eliminare l’istruzione prelevata e si deve eseguire il fetch di una nuova istruzione. Anche se questi fattori riducono l’efficacia potenziale di una pipeline a due stadi, si ottiene una certa, velocizzazione. Per incrementare ulteriormente la velocità del processo, la pipeline deve avere più stadi. Si consideri la seguente scomposizione dell’elaborazione di un’istruzione. ♦ Fetch (FI): legge l’istruzione da seguire e la pone in un buffer. ♦ Decodifica (DI): determina il codice operativo e gli identificatori degli operandi. ♦ Calcolo indirizzi operandi (CO): calcola l’indirizzo effettivo degli operandi. ♦ Fetch operandi (FO) : legge gli operandi in memoria. ♦ Esecuzione (EI) : effettua l’operazione indicata e memorizza il risultato, ammesso che
ci sia, nella locazione specificata per l’operando destinazione. ♦ Scrittura (W O) : memorizza il risultato.
Con questa scomposizione, i diversi stadi saranno circa della stessa durata. A scopo di mostrativo, assumiamo una durata perfettamente uguale. Secondo questa ipotesi, la Figura 12.10 mostra chc una pipeline a 6 stadi può ridurre il tempo di esecuzione di nove istru zioni da 54 a 14 unità di tempo. Si possono effettuare diversi commenti. Il diagramma presuppone che ciascuna istru zione passi attraverso i sci stadi della pipeline, ma non sarà sempre questo il caso. Ad esem pio, un’istruzione di load non richiede lo stadio WO. Tuttavia, per semplificare !’hardwa re della pipeline, la temporizzazione viene effettuata assumendo che ogni istruzione richieda tutti i sei stadi. Inoltre, il diagramma assume che tutti gli stadi siano effettuati in parallelo. In particolare, si ipotizza chc non esistano conflitti di memoria. Ad esempio, gli stadi FI, FO e W O implicano un accesso alla memoria. Il diagramma assume che questi accessi possano avvenire simultaneamente, anche se la maggior parte dei sistemi di me moria non lo consentirebbe. Tuttavia, il valore desiderato potrebbe trovarsi nella cache, o gli stadi FO e W O potrebbero essere nulli. Pertanto, nella maggior parte dei casi, i con flitti in memoria non rallenteranno la pipeline. Numerosi altri fattori limitano il miglioramento delle prestazioni. Se i sei stadi non hanno la stessa durata, in qualche stadio si riscontrerà del tempo di attesa, come già det to per la pipeline a due stadi. Un altro elemento critico sono le istruzioni di salto condi zionato, chc possono invalidare svariati prelievi di istruzione. Un altro evento imprevedi bile e Tinterrupt. La Figura 12.11 mostra gli effetti del salto condizionato, utilizzando lo stesso programma della Figura 12.10. Assumiamo chc l’istruzione 3 rappresenti un salto condizionato all’istruzione 15. Fino a quando Tistruzionc viene eseguita, non ce modo di
465
466
CPU ♦ Capitolo 12 - Struttura e funzione del processore
Tempo
I I I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11 I 12 I 13 I 14 I Istruzione I Istruzione 2
Fi
DI I CO
FO
* -v -> FI 1 DI
EI I W Ol
I
•-V -h
I
CO
FO 1 BI 1 WO
DI
C O . FO
I I I I I
I Istruzione 3 Istruzione 4 Istruzione 5 Istruzione 6 Istruzione 7 Istruzione 8 Istruzione 9 Figura 12.10
FI
W O.
FI
EI I WOl
H -V “ *l FI ' DI ' CO
FI
FO 1 EI 1 WO
I I CO. I —I DI I— I I I FI
DI I
I4 1 I I I
FI
I
I
I FO i EI
WO
I col DI
I
FO
EI
WC
CO
FO
EI
FO
WO
—► EI
WO
I Diagramma di temporizzazione per la pipeline.
sapere quale sarà quella successiva. La pipeline, in questo esempio, carica semplicemente la successiva istruzione nella sequenza del codice (Istruzione 4) c procede. Nella Figura 12.10 il salto non viene intrapreso con massimo beneficio in termini di prestazioni. Viceversa, nella Figura 12.11 il salto viene effettuato, ma ciò non può essere determinato fino alla fine dell’unità di tempo 7. A questo punto, la pipeline deve essere svuotata delle istruzioni inutili. Durante l’unità di tempo 8, I istruzione 15 entra nella pipeline. Nelle unità di tempo da 9 a 12 nessuna istruzione viene completata; si tratta della penalità di pre stazioni dovuta all’impossibilità di anticipare il salto. La Figura 12.12 indica la logica ri chiesta dal pipelining per tener conto di salti e interrupt. Sorgono altri problemi che non apparivano nella nostra semplice organizzazione a due stadi. Lo stadio CO può dipendere dal contenuto di un registro che potrebbe essere stato alterato da una precedente istruzione ancora presente nella pipeline. Ulteriori con flitti di questo tipo potrebbero verificarsi tra registri c memoria. Il sistema deve quindi con tenere una logica per la loro gestione. Per chiarire le operazioni della pipeline c utile considerarne una visione alternativa. Nelle Figure 12.10 e 12.11 il tempo procede in senso orizzontale e le colonne illustrano il progresso delle istruzioni. La Figura 12.13 mostra la stessa sequenza di eventi, ma il tem-
12.4 P ipeliningdelle istruzioni
Tempo
I I I 2
I 5 I 6 I 7 I 8
1
1 FI 1 DI 1 CO 1 FO 1 EI 1 WO 1
1
Istruzione 3
I I I
I I I
I I I I I I I ι / ν / \ ι / % ι / 0, ι / \ Ο I I I I I I I
Istruzione 4
1
1
1
Istruzione 2
Istruzione 5 Istruzione 6 Istruzione 7 Istruzione
15
Istruzione
16
Figura 12.11
1
I I I I I I I I I I
,
DI
I CO I FO I V rIt V
1
l
I WO I V ri
y V i Dy « ccy< F V
Q _ - S -> V
V
M oltiplica
FL
FS
BI
V X V -> V
V X V -» V
Q_X V —> V
Q_X S —» V
D ividi
FL
FS
—
V / V -» V
V / S -> V
q
/ v -> V
Q / S -> V
Confronta
FL
FS
BI
V -V -^ V
V -S -^ V
Q_· V —» V
M oltiplica e somma
FL
FS
—
V + V X S -» V
V + Q_X V
V
V + Q_X S - > V
M oltiplica e sottrai
FL
FS
—
V - V X S -» V
V - Q _X V -> V
V — QJX S —» V
M oltiplica e accumula
FL
FS
—
P + . V -> V
Com plem enta
FL
FS
BI
—V —>V
Valore assoluto positivo
FL
FS
BI
IV H V
Valore assoluto negativo
FL
FS
BI
-| V | -> V
Massimo
FL
FS
- —
Massimo assoluto
FL
FS
■ —
(I - V - > Q _
M inim o
FL
FS
—
ο _ ·ν-> α
Traslazione logica a sinistra
·—
—
LO
• V - » .V
Traslazione logica a destra
—
—
LO
■V-> V
And
—
—.
LO
V & V -» V
OR
—
—
LO
V| V -> V
O R esclusivo
—
—
LO
V Θ V -> V
.
P + .S - V
Q_· V —>
V & S -* V
M em oria Scalare (registro generico o in virgola mobile) Som m a parziale nel registro veccore Operazione speciale
Q & S -* V
QJ V
a is - > v
V
0 _ θ v —» V
Q 0 s-»v
Elaborazione vettoriale
QP
Q _ & V -> V
17.7
C o llo cazio n e d eg li o p eran d i V Registro vettore S
> T
>
v e s-> v
Spiegazione: T ip i di d ato FL Lungo in virgola mobile FS Breve in virgola mobile BI Binario intero LO Logico
Q _ -S -* V
703
704
Organizzazione parallela ♦ Capitolo 17 - Elaborazione parallela
do tale da produrre quattro somme parziali. In particolare, gli elementi 0, 4, 8 , 12,..., 124 vengono sommati in quest’ordine per produrre la somma parziale 0; gli elementi 1,5,9,13, ..., 125 per la somma parziale 1 ; gli elementi 2 , 6 , 10,14,.... 126 per la somma parziale 2; gli elementi 3 ,7 ,1 1 ,1 5 ,..., 127 perla somma parziale 3. Ciascuna di queste somme parziali può procedere attraverso la pipeline alla massima velocità, dato che il ritardo nella pipeline è ap prossimativamente di quattro cicli. Si usa un registro vettore separato per contenere le som me parziali. Quando tutti gli elementi del vettore originario sono stati elaborati, le quattro somme parziali vengono sommate e producono il risultato finale. Le prestazioni di questa seconda fase non sono critiche, essendo coinvolti solo quattro elementi vettoriali.
17.8
Letture raccomandate
[CATA94] prende in esame i principi dei multiprocessor! ed esamina in dettaglio gli SMP basati su SPARC. Gli SMP sono trattati anche in [STON93] e [HWAN93]. [MILE00] fornisce una panoramica degli algoritmi e delle tecniche di coerenza del la cachc per i multiprocessori, con particolare enfasi sui problemi legati alle prestazioni. Un altro esame del problema della coerenza della cachc nei multiprocessori si trova in [LILJ93]. [TOMA93] contiene le ristampe di molti articoli chiave sullargomento. [UNGE02] offre un’ecccllcntc panoramica dei processori multithread e chip multiprocessore. [UNGE03] tratta dei processori multithread cha fanno uso del multithreading esplicito, soffermandosi sia su quelli proposti sia su quelli attualmente utilizzati. In [BUYY99a] e [BUYY99bJ si trova una trattazione esaustiva dei eluster. [WEYGOl ] analizza i eluster in modo meno tecnico, con commenti su diversi pro dotti commerciali. [DESA05] descrive l’architettura biade server IBM. Un’interessante di scussione sul calcolo vettoriale c presente in [STON93] e [HWAN93]. BUYY99a R. Buyya, High Performance Cluster Computing: Architectures and Systems, Upper Saddle River (NJ), Prentice Hall, 1999. BUYY99b R. Buyya, High Performance Cluster Computing: Programmingand Applications, Upper Saddle River (NJ), Prentice Hall, 1999. CATA94 B. Catanzaro, Multiprocessor System Architectures, Mountain View (CA), Sunsoft Press, 1994. DESAOS D. Desai et al., “BladcCcntcr System Overview” in IBM Journal o f Research and Development, 2005. HWAN93 K. Hwang 1Advanced Computer Architecture, New York, McGrawHill, 1993. LILJ93 D. Lilja, “Cache Coherence in Large-Scale Shared-Memory Multiprocessors: Issues and Comparisons”, A C M Computing Surveys, settembre 1993. MILEOO A. Milcnkovie, “Achieving High Performance in Bus-Based SharedMemory Multiprocessors”, IEEE Concurrency, luglio-settembre 2000. STON93 H. Stone, High-Performance Computer Architecture, MA: AddisonWesley, 1993.
17.9 Parole chiave, domande di revisione e problemi
TOMA93 M. Tomasevic e V. Milutinovie, Ihe Cache Coherence Problem in Shared-Memory Multiprocessors: Hardware Solutions, Los Alamicos (CA), IEEE Computer Society Press, 1993. UNGE02 T. Ungerer, B. Rubie, e J. Silc, “Multithreaded Processors” in 7he ComputerJournal, 3, 2002. UNGE03 T. Ungerer, B. Rubic, c J. Silc, uA Survey of Processors with Explicit Multithreading”,ACM ComputiiigSurveys, 2003. WEYGOl P. Weygant, Clustersfo r High Availability, Saddle River, NJ : Prentice Hall, 2001.
Sito Internet consigliato: IEEE Computer Society Task Force on C luster C om puting: Un forum internaziona le che promuove la ricerca e !’istruzione relativa ai eluster.
17.9
Parole chiave, domande di revisione e problemi
Parole chiave eluster coerenza della cache fallback failover multiprocessore NUM A, nonuniform memory access protocollo di directory
protocollo MESI protocollo snoopy SMP, symmetric multiprocessor standby attivo standby passivo UMA, uniform memory access vector facility
Domande di revisione 17.1 Elencate e fornite una definizione sintetica di tre tipi di organizzazione dei siste mi di elaborazione. 17.2 Quali sono le caratteristiche principali di un SMP? 17.3 Qμali sono i vantaggi potenziali di un SMP rispetto a un sistema monoprocessore? 17.4 Quali sono alcuni dei problemi progettuali chiave per i sistemi operativi degli SMP? 17.5 Qual è la differenza tra gli schemi software c hardware di coerenza della cachc? 17.6 Qual è il significato di ciascuno dei quattro stati nel protocollo MESI? 17.7 Quali sono i principali benefici del clustering} 17.8 Qiial e la differenza trafailover efailbackì 17.9 Quali sono le differenze tra UMA, NUMA e CC-NUMA?
705
706
Organizzazione parallela ♦ Capitolo 17 - Elaborazione parallela
Problemi 17.1 Sia a la percentuale di codice di programma che può essere eseguita simultanea mente da n processori in un sistema di elaborazione. Si ipotizzi che il codice re stante debba essere eseguito sequenzialmente da un processore. I processori han no tasso esecutivo di * MIPS. a. Derivate un’espressione per il MIPS effettivo usando il sistema per l’esecuzione esclusiva di questo programma, in termini di n, Cl ex. b. Se n = 16 e x = 4 MIPS, si determini il valore di a per ottenere una prestazione del sistema di 40 MIPS. 17.2 Un multiprocessore dotato di otto processori è connesso a 20 unità nastro. Vengono sottoposti al sistema numerosi job, ciascimo dei quali richiede al massi mo 4 unità nastro per essere completato. Si ipotizzi che ogni job inizi l’esecuzione con solo 3 unità nastro per un lungo periodo prima di richiedere il quarto per un breve periodo, verso la fine dell’operazione. Si assuma anche un rifornimento infi nito di tali job. a. Si ipotizzi che lo scheduler del sistema operativo non awierà un job a meno che ci siano quattro unità nastro disponibili. Quando un job inizia ad essere ese guito, gli vengono assegnate immediatamente quattro unità nastro, che non sono rilasciate fino a quando il job termina. Qiial c il numero massimo di job attivi contemporaneamente? Quali sono il numero massimo e minimo di unità nastro che possono essere lasciate inattive come risultato di questa politica? b. Suggerite una politica alternativa per migliorare l’utilizzo delle unità nastro c al lo stesso tempo evitare i deadlock di sistema. Qual è il numero massimo di job attivi contemporaneamente? Quali sono i limiti per il numero di job inattivi? 17.3 Si può prevedere un problema con l’approccio write-once cache sui multiprocessori basati su bus? In tal caso, suggerite una soluzione. 17.4 Considerate una situazione nella quale due processori in una configurazione SMP richiedono l’accesso alla stessa linea dati dalla memoria centrale. Entrambi i pro cessori hanno una cache e adottano il protocollo MESI. Inizialmente, le cache pos siedono una copia non valida della linea. La Figura 17.22 mostra la conseguenza di una lettura della linea x da parte del processore PI. Se questa rappresenta l’ini zio di una sequenza d’accessi, si disegnino le figure conseguenti per la sequenza: 1. P2 legge x 2. Pl scrive in x (per chiarezza, si etichetti x la linea nella cache di P i) 3. P l scrive in x (si etichetti x la linea nella cache di PI) 4. P2 legge x. 17.5 La Figura 17.23 mostra i diagrammi di stato di due possibili protocolli di coerenza della cache. Deducete e spiegate ciascun protocollo, e confrontatelo con il MESI. 17.6 Si consideri un SMP dotato di cache sia LI sia L2 con protocollo MESI. Come spiegato nel Paragrafo 17.3, a ogni linea della cachc L2 è associato uno dei quat tro stati. Tutti i quattro stati sono richiesti anche per ogni linea della cache LI? Perché? Altrimenti, spiegate quale o quali stati possono essere eliminati.
17.9 Parole chiave, domande di revisione e problemi
© -*© Figura 17.22
(¾
Esempio MESI: il Processore 1 legge la linea x.
m
W (i) = scrittura nella linea da parte del processore i R (i) = lettura della linea da parte del processore i Z(0 = rimozione della linea da parte della cache i W(/) = scrittura nella linea da parte del processore j (j Φi) R(J) = lettura della linea da parte del processore j ( j * i ) Z(J) = rimozione della linea da parte della cache j (j Φ i)
Nota: i diagrammi di stato valgono per una data linea nella cache /
Figura 17.23
W(i)
Protocolli di coerenza per 2 cache.
17.7 Una delle prime versioni del mainframe IBM, S/390 G4, utilizzava 3 livelli di ca chc. Come per lo z990, solo il primo livello era sul chip del processore [chiamato unità del processore (PU)] ; la cache L2 era simile allo z990, mentre la cache L3 era su un chip separato chc funzionava da controllore di memoria ed era interposto tra la cache L2 e le schede di memoria. La Tabella 17.4 mostra le prestazioni di
707
708
Organizzazione parallela ♦ Capitolo 17 - Elaborazione parallela
Tabella 17.4
Percentuale tipica di successo della cache in una configurazione S/390 SM P
[MAK97J. S o tto sistem a d i m em o ria
D im en sio n e d ella cache
P ercen tuale d i successo (%)
1
32 KB
89
C ache L2
5
256 KB
5
C ache L3
14
2 MB
3
M em oria
32
8 GB
3
C achc LI
P en a lità d i accesso (cicli P U )
un’architettura di cache a tre livelli per ΓΙΒΜ S/390. Lo scopo di questo proble ma è di verificare se l’inclusione di un terzo livello di cache sia utile o meno. Determinate la penalità di accesso (numero medio di cicli PU) per un sistema do tato di una sola cache LI e normalizzate quel valore a 1,0. Determinate poi la pe nalità di accesso normalizzata utilizzando le cache LI e L2 e poi nel caso vengano utilizzate tutte e tre le cachc. Osservate il miglioramento in ogni caso ed esprime te la vostra opinione sull’importanza della cache L3. 17.8 a. Considerate un processore singolo, con cache separate per dati e istruzioni e con percentuali di successo rispettivamente Hd e Hr II tempo di accesso dal processo re alla cache è di c cicli di clock e il tempo a i trasferimento di un blocco dalla me moria alla cache è pari a b cicli di clock. Sia f . la frazione di accessi alla memoria utilizzati per le istruzioni e siaJ d la frazione di linee dirty della cache dati tra le ri ghe sostituite. Assumete una politica writc-back e determinate gli accessi di me moria effettivi in funzione dei parametri. b. Assumete ora un SMP basato su bus nel quale ogni processore abbia le caratte ristiche descritte nella parte (a). Ogni processore deve trattare l’invalidazione del la cachc oltre alle letture e scritture della memoria, condizionando così il tempo effettivo di accesso di memoria. Siaf . v la frazione di riferimenti ai dati chc causa l’invio di segnali di invalidazione ad altre cachc di dati. Il processore che manda il segnale richiede t cicli di clock per completare l’operazione di invalidazione. Gli altri processori non sono coinvolti nell’operazione. Determinate il tempo effetti vo di accesso alla memoria. 17.9 Quali alternative organizzative sono offerte dai diagrammi illustrati nella Figura 17.24? 17.10 Nella Figura 17.8 alcuni dei diagrammi mostrano righe orizzontali in parte piene. In altri casi, invece, le righe appaiono completamente vuote. Entrambe rappre sentano due diversi tipi di perdita di efficienza. Spiegate il motivo. 17.11 Considerate la rappresentazione della pipeline della Figiua 12.13b (riproposta an che nella Figura 17.25a, dove gli stadi di fetch e decodifica vengono ignorati) per rap presentare l’esecuzione del thread A. La Figura 17.25b mostra l’esecuzione di un th read B separato. In entrambi i casi viene utilizzato un processore a pipeline semplice. a. Mostrate un diagramma di emissione delle istruzioni (come nella Figura 17.8a) per ognuno dei due thread. b. Assumete che i due thread siano eseguiti in parallelo su di un chip multipro cessore, nel quale ciascuno dei due processori usa una pipeline semplice.
17.9 Parole chiave, domande di revisione e problemi
m (a)
Figura 17.24
(b)
(c)
Diagramma relativo al Problema 17.9.
CO FO
EI W O
C O FO
1
Al
2
Λ2
Al
3
A3
A2
Al
4
A4
A3
A2
Al
5
A5
A4
A3
A2
5
A3
6
6 7
EI W O
1
BI
2
B2
BI
3
B3
B2
BI
4
B4
B3
B2
7
B3
BI B2 B3
B5
B4
8
A15
8
B6
B5
B4
9
A16 A15
9
B7
B6
B5
B4
B7
B6
B5
B7
B6
10
Λ 16 A15
10
11
A16 A 15
11
12
A16
12
(a)
Figura 17.25
(d)
B7
(b)
Due thread di esecuzione.
Elaborate un diagramma di emissione delle istruzioni (come nella Figura 17.8k) e un diagramma di esecuzione della pipeline sul modello della Figura 17.25. c. Assumete un’architettura superscalare a doppia emissione. Ripetete la parte (b) in caso di implementazione scalare multithreading interlacciata, assumendo che non ci siano dipendenze di dati. Si noti che non esiste un’unica risposta, ma è necessario fare delle ipotesi su priorità e latenze.
709
710
Organizzazione parallela ♦ Capitolo 17 - Elaborazione parallela
d. Ripetete la parte (e) in caso di implementazione superscalare multithreading a grana grossa. e. Ripetete assumendo di avere un architettura SM T a quattro emissioni. 17.12 II seguente segmento di codice deve essere eseguito 64 volte per valutare l’espres sione aritmetica vettoriale D(I) = A(I) + B(I) X C(I) per 0 < I < 63. Load RI, B(I) /Rl Memory ( a + I)/ Load R2. C(I) /R2 Memory ( β +1)/ Multiply RI, R2 /Rl
View more...
Comments