|
|
| << | < | > | >> |IndicePrefazione XV Unità di misura XXI 1 Introduzione 1 1.1 Qualche cenno storico 1 1.1.1 I microprocessori 3 1.2 Uno sguardo all'evoluzione tecnologica 9 1.2.1 I costi 13 1.3 Architettura e organizzazione 14 1.4 Livelli e astrazioni 15 1.5 Le unità funzionali 17 1.5.1 Organizzazione 19 1.6 Siti web 21 1.7 Esercizi 22 2 Rappresentazione dell'informazione 23 2.1 Numerazione posizionale 23 2.1.1 Esempi di numeri in basi diverse 24 2.2 Conversione di base 25 2.2.1 Conversione tra base 10 e base 2 25 2.2.2 Conversione tra base B^k e base B 26 2.2.3 Conversione tra generiche basi 27 2.3 Aritmetica binaria 27 2.4 Numeri negativi 29 2.4.1 Rappresentazione in complemento dei numeri decimali 30 2.4.2 Rappresentazione in complemento dei numeri binari 32 2.5 Numeri frazionari 34 2.5.1 Numeri in virgola fissa 35 2.6 Numeri in virgola mobile 35 2.6.1 Rappresentazione normalizzata 35 2.6.2 Convenzione IBM 37 2.6.3 Convenzione Digital 38 2.7 Standard IEEE 754-1985 per l'aritmetica binaria in virgola mobile 39 2.7.1 Formato base 40 2.7.2 Precisione 41 2.7.3 Eccezioni 43 2.8 Operazioni in virgola mobile 43 2.9 Informazioni di carattere alfanumerico 44 2.9.1 Codifica ASCII 45 2.9.2 BCD 46 2.10 Esercizi 46 3 Logica combinatoria 51 3.1 Introduzione 51 3.2 Algebra delle reti 54 3.2.1 Esempi di circuiti che realizzano le operazioni dell'algebra 55 3.2.2 Proprietà dell'algebra 57 3.3 Forme canoniche 59 3.3.1 Prima forma canonica 59 3.3.2 Seconda forma canonica 60 3.3.3 Proprietà delle forme canoniche 61 3.4 Minimizzazione 62 3.4.1 Mappe di Karnaugh 63 3.4.2 Metodi algoritmici 66 3.4.3 Funzioni non completamente specificate – Condizioni di indifferenza 67 3.5 Altri operatori e altri tipi di porta 68 3.5.1 NAND e NOR 69 3.5.2 Reti con sole porte NAND o sole porte NOR 70 3.5.3 Una tecnica grafica per la trasformazione 71 3.5.4 XOR e NXOR 71 3.6 Notazione per i segnali 72 3.7 Qualche osservazione sulle porte logiche 74 3.8 Alcuni moduli combinatori 79 3.8.1 Decodificatori 79 3.8.2 Codificatori 79 3.8.3 Selettori 80 3.8.4 Arbitro di priorità 82 3.8.5 Memorie ROM 83 3.8.6 Matrici di logica programmabili 86 3.8.7 Controllore di parità 88 3.8.8 Comparatore digitale 89 3.9 Unità aritmetiche e logiche 91 3.9.1 Semisommatore 92 3.9.2 Somma di due numeri interi 92 3.9.3 Sommatore completo 93 3.9.4 Somma con calcolo anticipato del riporto 94 3.9.5 Una semplice unità aritmetica e logica 96 3.9.6 Esempio di costruzione di un'unità aritmetica 96 3.9.7 Aggiunta di operazioni logiche 100 3.10 Esercizi 102 4 Logica sequenziale 105 4.1 Reti sequenziali 105 4.1.1 Modello generale 108 4.1.2 Rappresentazione delle funzioni di stato e di uscita 110 4.2 Reti sequenziali sincrone 113 4.2.1 Sincronizzazione 113 4.2.2 I flip-flop 114 4.2.3 Modello di rete sequenziale sincrona 116 4.2.4 Flip-flop Master-Slave 117 4.2.5 Differenze tra reti sincrone e asincrone 119 4.2.6 Flip-flop a commutazione sul fronte 120 4.2.7 Ingressi asincroni dei flip-flop 122 4.2.8 Modello di Mealy e modello di Moore 123 4.2.9 Ancora sulle reti sequenziali sincrone 125 4.3 Registri 126 4.4 Trasferimento dell'informazione 131 4.4.1 Struttura a bus 132 4.4.2 Tempificazione 134 4.5 Appendice - Progetto di reti sequenziali 135 4.5.1 Esempio di progetto n.1: generazione di un segnale di WAIT 138 4.5.2 Esempio di progetto n.2: rete per l'adattamento della temporizzazione dei segnali 142 4.6 Esercizi 146 5 Il repertorio delle istruzioni 151 5.1 La memoria 151 5.2 La codifica delle istruzioni 152 5.3 Programmi e processo di esecuzione 155 5.4 Istruzioni e architettura 157 5.4.1 Esecuzione e sequenzializzazione delle istruzioni 159 5.5 Il controllo del flusso 161 5.5.1 Salto incondizionato 161 5.5.2 Salto condizionato 161 5.5.3 Codici di condizione e registro di stato 162 5.6 Verso il repertorio delle istruzioni 163 5.6.1 Osservazione 167 5.7 Lo stack 168 5.8 Sottoprogrammi 169 5.8.1 Collegamento dei sottoprogrammi 169 5.8.2 Passaggio dei parametri 172 5.9 Le interruzioni 177 5.9.1 Classificazione 177 5.10 Il repertorio delle istruzioni 178 5.10.1 Repertorio stile RISC 178 5.10.2 Repertorio stile CISC 181 5.11 Criteri di classificazione delle architetture 183 5.12 Indirizzamento 186 5.12.1 Ordinamento 186 5.12.2 Allineamento 187 5.12.3 Indirizzamento dei dati 189 5.12.4 Memoria lineare 190 5.12.5 Memoria segmentata 191 5.13 Indirizzamento dei dati 191 5.14 Indirizzamento nei trasferimenti del controllo 193 5.15 Appendice - Le finestre dei registri 194 5.15.1 Gestione automatica delle finestre dei registri 196 5.15.2 Singolo insieme di registri 198 5.16 Esercizi 199 6 La CPU 203 6.1 Il sistema CPU-memoria 203 6.2 La CPU 205 6.2.1 Elementi componenti la CPU 207 6.2.2 Struttura interna 208 6.3 Esecuzione delle istruzioni 210 6.3.1 Fase di fetch 211 6.3.2 Fase di esecuzione 212 6.3.3 Discussione 214 6.4 Unità di controllo a logica cablata 216 6.4.1 Temporizzazione dei comandi 217 6.4.2 Lo stato del processore 218 6.4.3 Esame delle condizioni di stato 219 6.5 Unità di controllo microprogrammata 221 6.6 Cablata o microprogrammata? 224 6.7 Appendice — Prestazioni della CPU 226 6.7.1 La valutazione delle prestazioni 227 6.7.2 Legge di Amdahl 229 6.7.3 Popolari indici di prestazioni 229 6.7.4 Programmi campione 230 6.8 Esercizi 232 7 La memoria principale 235 7.1 Classificazione 235 7.2 Parametri di valutazione 237 7.3 Le memorie RAM 237 7.3.1 Le memorie statiche 238 7.3.2 Le memorie dinamiche 238 7.4 Organizzazione della memoria principale 240 7.4.1 Interlacciamento 242 7.5 Relazione tra la velocità della CPU e la velocità della memoria principale 243 7.5.1 Caso di studio: evoluzione della velocità della famiglia 8086 in rapporto a quella delle DRAM 244 7.6 Dischi magnetici 247 7.7 Località, organizzazione gerarchica 249 7.7.1 Località 250 7.7.2 Gerarchia 250 7.7.3 Un esempio di gerarchia 252 7.8 Appendice - Esempi di integrati di memoria SRAM e DRAM 253 7.8.1 Un esempio di SRAM 253 7.8.2 Un esempio di DRAM 256 7.8.3 Confronto d'uso tra SRAM e DRAM 258 7.9 Esercizi 259 8 Il sottosistema di ingresso/uscita 261 8.1 Elementi di base del sottosistema di ingresso/uscita 261 8.2 Gestione a controllo di programma 265 8.2.1 Il sottoprogramma di gestione 267 8.3 Gestione sotto controllo di interruzione 269 8.4 Esempio semplificato di sistema di interruzione 270 8.4.1 Esempio di routine di servizio 271 8.4.2 Le interruzioni non mascherabili 274 8.5 Interruzione da parte di più periferiche 275 8.5.1 Discriminazione da programma 276 8.6 Interruzioni vettorizzate 277 8.6.1 Linee di richiesta indipendenti 278 8.6.2 Vettorizzazione esterna 279 8.6.3 Interruzioni annidate 284 8.7 Interruzioni vettorizzate con daisy chain 284 8.7.1 Daisy chain asincrona 285 8.7.2 Daisy chain sincrona 290 8.8 L'accesso diretto alla memoria 291 8.8.1 Struttura e funzionamento del controllore DMA 293 8.8.2 Modalità di trasferimento singolo 293 8.8.3 Modalità di trasferimento a blocchi 294 8.9 Il bus di sistema 295 8.9.1 Standardizzazione 295 8.9.2 Operazioni sul bus del PC 296 8.9.3 Allocazione del bus 297 8.10 Appendice I - Il controllore di interruzioni 8259A 298 8.10.1 Vettorizzazione delle interruzioni 300 8.10.2 Mascheramento 300 8.10.3 Priorità 300 8.10.4 Riconoscimento dei livelli o dei fronti 301 8.10.5 Schema di esecuzione della routine di servizio 302 8.10.6 Esempio di trattamento di una sequenza di interruzioni nidificate 303 8.11 Appendice II - Il DMAC 8237A 305 8.11.1 Funzionamento 306 8.12 Esercizi 308 9 L'architettura x86 325 9.1 Le ragioni di un grande successo 326 9.2 Il micro 8086 328 9.2.1 Il modello di programmazione 329 9.2.2 Organizzazione della memoria 332 9.2.3 Accesso alla memoria 335 9.2.4 Osservazioni sull'organizzazione di memoria dell'8086 337 9.2.5 Struttura interna 337 9.2.6 Cicli di bus 339 9.2.7 Modalità di funzionamento 339 9.2.8 La fase di partenza 340 9.3 Il repertorio delle istruzioni 341 9.4 Modalità di indirizzamento 343 9.4.1 Indirizzamento degli operandi 343 9.4.2 Indirizzamento nei salti 345 9.5 Formati delle istruzioni 346 9.6 Esercizi 347 10 Il linguaggio assembler 351 10.1 Generalità 352 10.1.1 Sintassi 354 10.2 Segmenti e moduli 357 10.2.1 Direttive per la gestione dei segmenti 357 10.2.2 Generazione dei riferimenti: la direttiva ASSUME 360 10.2.3 Relazione tra segmenti e moduli 362 10.2.4 Una nota sulla segmentazione 365 10.3 I simboli definiti dal programmatore 366 10.3.1 Etichette 366 10.3.2 Variabili 367 10.3.3 Variabili strutturate 369 10.3.4 Costanti 369 10.3.5 Procedure 371 10.4 Direttive per il collegamento dei moduli 371 10.4.1 Direttive per la programmazione modulare 371 10.4.2 La direttiva END 372 10.4.3 La direttiva INCLUDE 372 10.4.4 Le macro 373 10.5 Il processo di traduzione 374 10.5.1 Assemblatore: primo passo 377 10.5.2 Assemblatore: secondo passo 378 10.6 Collegamento e caricamento 379 10.6.1 Caricamento in memoria ed esecuzione 380 10.7 Esecuzione sotto DOS 380 10.7.1 Funzioni DOS 381 10.7.2 Il PSP 381 10.7.3 Passaggio del controllo dal DOS 381 10.7.4 Restituzione del controllo al DOS 382 10.8 Appendice - Esempi di programmi assembler 383 10.8.1 Il programma PRIMO 383 10.8.2 Il programma SECONDO 387 10.8.3 Il programma TERZO 392 10.9 Esercizi 398 Bibliografia 404 Indice analitico 409 Sigle usate nel testo 415 |
| << | < | > | >> |Pagina XVIIContenutiIl capitolo introduttivo ricostruisce la storia del turbinoso sviluppo dei calcolatori elettronici e mostra il contesto entro cui si collocano gli argomenti trattati nel volume. Sono consapevole del fatto che, per un lettore privo di conoscenze iniziali, alcuni argomenti possono essere difficilmente apprezzati in prima lettura. Nondimeno, non ho saputo sottrarmi alla tentazione di fornire un'inquadratura di ampio respiro. Invito il lettore a una seconda lettura, magari verso la fine del corso, quando avrà familiarizzato con la disciplina. Il Capitolo 2 è dedicato alla rappresentazione dell'informazione. Viene discussa la rappresentazione dei numeri, l'aritmetica in forma intera e in virgola mobile. Per quest'ultima vengono presentati alcuni standard industriali di rappresentazione. Viene, ovviamente, anche illustrata la rappresentazione delle informazioni di carattere testuale. Il Capitolo 3 è dedicato alle reti combinatorie. Esso inizia con l'algebra delle reti e prosegue illustrando i circuiti elementari e il loro impiego nella costruzione di reti complesse. Viene fatta una breve digressione di carattere tecnologico per spiegare le caratteristiche elettroniche delle porte logiche. Successivamente vengono presentate alcune importanti reti combinatorie. L'attenzione è rivolta ai moduli di cui si fa frequente uso all'interno dei calcolatori (codificatori, decodificatori, selettori, arbitri di priorità, memorie ROM ecc.). La parte finale del capitolo riguarda le unità aritmetiche e logiche. Il Capitolo 4 è dedicato alle reti sequenziali. La prima parte espone i concetti fondamentali (elementi di memoria, flip-flop, reti sincrone e asincrone, modelli di Mealy e Moore). Successivamente, vengono affrontate le problematiche di maggior rilevanza rispetto all'organizzazione dei calcolatori elettronici: i registri e il trasferimento delle informazioni. In particolare viene illustrato il trasferimento attraverso un bus, ricavando i vincoli che esso impone sul periodo di clock. La parte finale del capitolo contiene un'appendice nella quale si tratta, in forma generale, del progetto delle reti sequenziali. Il Capitolo 5 è dedicato al repertorio delle istruzioni. È questo il primo capitolo che entra specificamente in questioni di carattere architetturale. Si illustra la codifica delle istruzioni e il processo di esecuzione. Si discutono le implicazioni tra il repertorio delle istruzioni e l'architettura della macchina. In questo contesto vengono trattati argomenti essenziali quali le chiamate ai sottoprogrammi, l'impiego dello stack, l'impiego dei registri, le interruzioni, l'organizzazione della memoria e l'indirizzamento. Vengono esaminati i criteri per la classificazione delle architetture, trattando in maggior dettaglio le macchine tipo CISC e RISC. Il capitolo presenta gli argomenti nell'ottica del programmatore, ovvero di chi guarda all'architettura dall'esterno, senza badare alla sottostante organizzazione. Il Capitolo 6 è dedicato alla CPU. Gli argomenti svolti nel capitolo precedente vengono tradotti in strutture organizzative che permettono la sequenzializzazione e l'esecuzione delle istruzioni. Partendo da un sottoinsieme di un possibile repertorio di istruzioni e da una specifica organizzazione interna della CPU, viene ricavata la rete corrispondente all'unità di controllo. La parte finale del capitolo è dedicata alla valutazione delle prestazioni della CPU, presentando una semplice, quanto espressiva formula che mette in relazione i principali fattori che influenzano le prestazioni. Vengono introdotti alcuni popolari indici delle prestazioni e viene tatto un accenno ai programmi di benchmark. Il Capitolo 7 è dedicato alla memoria principale e a una rapida illustrazione delle memorie a disco. Vengono presentati un certo numero di criteri per classificare e valutare i componenti di memoria; viene illustrata l'evoluzione della memoria in riferimento al caso pratico dell'architettura Intel e della corrispondente successione di modelli di CPU. Il capitolo introduce il concetto di località nei riferimenti e se ne mostrano le implicazioni. Per motivi di concretezza, l'appendice illustra le caratteristiche di due componenti di memoria disponibili sul mercato. Il Capitolo 8 è dedicato alle operazioni di ingresso/uscita. Viene svolta una approfondita analisi sulle modalità di gestione del sottosistema di i/o, dando il dovuto rilievo al trattamento delle interruzioni esterne. Al termine del capitolo viene dato un nutrito numero di esercizi, rivolti essenzialmente alla progettazione di interfacce e alla stesura del relativo software di gestione. Ho ritenuto di dare rilievo a questa parte proprio perché, nel contesto produttivo nazionale, è questa l'area in cui è più probabile che si troverà a operare il progettista di sistemi. Il Capitolo 9 è dedicato all'architettura 80x86. Esso ha la funzione di illustrare la più diffusa architettura corrente, con la quale il lettore dovrà sicuramente confrontarsi nel corso della sua carriera professionale. Poiché, come ampiamente discusso, il libro mira a illustrare i concetti architetturali di base, l'esposizione dell'architettura Intel è volutamente limitata alla CPU 8086, che di tale architettura costituisce il primo e più semplice modello. Il Capitolo 10 è dedicato al linguaggio assembler. Sempre per motivi di concretezza ci si riferisce all'assembler 8086. Oltre alla discussione sul linguaggio, vengono presentate le convenzioni per l'esecuzione dei programmi sotto DOS. Nella parte finale vengono costruiti tre programmi assembler di crescente complessità, mirati a tradurre in pratica i concetti precedentemente esposti. Il lettore è invitato a sperimentare la programmazione assembler dotandosi del relativo traduttore. Da questa sperimentazione ricaverà non solo un livello di comprensione della programmazione assembler difficilmente raggiungibile studiando un libro di testo, ma anche una miglior comprensione dell'architettura 8086. | << | < | > | >> |Pagina 141.3 Architettura e organizzazioneQuando si parla di calcolatori elettronici spesso si usa distinguere tra architettura e organizzazione. L' architettura di un calcolatore riguarda le caratteristiche del sistema che sono visibili al programmatore. Fanno parte dell'architettura i seguenti aspetti: il numero di bit utilizzato per rappresentare i dati (numerici e testuali), il numero di registri di macchina, le modalità di indirizzamento, il repertorio delle istruzioni. L' organizzazione di un calcolatore riguarda le relazioni strutturali tra le unità funzionali e il modo in cui esse realizzano una data architettura. L'organizzazione di un calcolatore è tendenzialmente non visibile al programmatore. Di essa fanno parte aspetti quali la tecnologia impiegata, la frequenza di clock e il modo in cui viene eseguita una data istruzione. Per esempio, decidere se l'istruzione di moltiplicazione farà parte del repertorio di istruzioni è una questione architetturale, mentre decidere se per l'esecuzione di questa istruzione è prevista una specifica unità di moltiplicazione o se questa è ottenuta attraverso l'impiego dell'unità di somma comunque presente nella macchina è una decisione organizzativa. Decidere il numero di registri di uso generale di cui sarà provvista la macchina fa parte della progettazione architetturale, mentre decidere se l'unità di controllo sarà in logica cablata o microprogrammata fa parte dell'organizzazione. Abbiamo già osservato che il concetto di architettura venne introdotto per la prima volta con il sistema IBM S/360. Per la prima volta il cliente poteva passare da un modello meno potente (e quindi meno costoso) a un modello più potente mantenendo (quasi) inalterato il software. Il concetto di architettura avvantaggia il cliente in quanto l'investimento per il software viene salvaguardato, avvantaggia il costruttore in quanto gli consente di adottare nuove tecnologie e nuove soluzioni organizzative fornendo prodotti più appetibili. La compatibilità architetturale è stata una delle chiavi del successo dei sistemi Intel. Con il microprocessore 8086, introdotto nel 1978, è stata definita un'architettura, denominata x86, che, seppure con aggiunte e miglioramenti, è arrivata al tempo presente e a quella che oggi viene chiamata IA32. Lungo questo percorso sono state impiegate nuove tecnologie microelettroniche e nuove strutture organizzative. Ma è stata mantenuta la compatibilità, nel senso che programmi eseguibili su un 8086 sono tendenzialmente eseguibili su un Pentium 4.
Nel testo viene anche usato il termine
modello di programmazione.
Con esso ci si riferisce a ciò che vede il programmatore assembler, ovvero
all'insieme dei registri che egli può manipolare e al repertorio di istruzioni.
In sostanza, il modello di programmazione è la traduzione in termini di
programmazione dell'architettura.
In questo libro si trattano sia gli aspetti architetturali sia quelli
organizzativi (con esclusione delle tecnologie, che vengono appena nominate di
passaggio). È ormai diventato costume generalizzato usare la parola architettura
anche quando si dovrebbe parlare di organizzazione. Questo libro non fa
eccezione. Di preferenza useremo il termine architettura, ma il lettore riuscirà
presto a distinguere tra i due aspetti anche quando non saranno espressamente
differenziati.
1.4 Livelli e astrazioni Nelle scienze esatte la realtà viene rappresentata attraverso modelli. Un modello costituisce sempre un'astrazione della realtà che intende rappresentare. Con esso si evidenziano gli aspetti di interesse e si sopprimono i dettagli non necessari. Un moderno calcolatore costituisce un sistema estremamente complesso. Per poterne comprendere il funzionamento occorre far ricorso a metodi di descrizione appropriati, costruendo modelli che siano funzionali alla rappresentazione degli aspetti che si intende analizzare. Nello studio delle architetture dei calcolatori, come del resto in larga parte dei sistemi informatici, risulta conveniente una rappresentazione secondo livelli (di astrazione) come in Figura 1.5. La suddivisione in livelli consente di affrontare l'analisi e il progetto in modo ordinato. Ogni livello nasconde i dettagli non necessari e costruisce l'insieme di astrazioni rilevanti per il livello superiore. Ogni livello è costituito da un insieme di componenti e da un insieme di modi per combinare i componenti in strutture. Le strutture così costruite rappresentano l'astrazione realizzata dal livello e costituiscono le entità su cui si opera a livello superiore. Questo, a sua volta, le aggrega in modo da formare entità ancora più astratte per il livello soprastante. Ogni livello è caratterizzato da linguaggi descrittivi e metodi analitici caratteristici del livello stesso. Le astrazioni coincidono frequentemente con gli effettivi confini fisici del sistema, proprio perché esse vengono utilizzate dal progettista per poterne gestire la complessità.
Nello schema di Figura 1.5, il livello più basso è il livello che
corrisponde ai circuiti. Qui si trovano componenti come transistori, resistenze,
capacità ecc. Il livello struttura questi componenti in modo da formare entità
come porte logiche, driver, amplificatori ecc.
Livello Strutture: programmi applicativi delle Componenti: sistema operativo, applicazioni librerie, file system +-----> | Livello Strutture: programmi | linguaggio Componenti: modello di programmazione, | macchina repertorio istruzioni | | ARCHITETTURA Livello Strutture: unità di controllo, E funzionale modello di programmazione ORGANIZZAZIONE (RTL) Componenti: registri, bus, memorie | | | Livello Strutture: registri, contatori, | della unità aritmetiche, memorie | logica Componenti: porte, flip-flop, clock +-----> Livello Strutture: porte logiche, flip-flop, dei driver circuiti Componenti: transistori, resistenze, capacità Figura 1.5 Schematizzazione a livelli di un sistema di elaborazione. Vengono evidenziati i livelli che interessano l'architettura e l'organizzazione dei calcolatori. Il livello soprastante è quello della logica. I componenti di questo livello sono le porte, gli elementi di memoria (flip-flop), gli elementi di ritardo ecc. Cioè le astrazioni realizzate dal livello dei circuiti. I componenti vengono strutturati in entità quali selettori (multiplexer), codificatori, decodificatori, registri contatori, unità aritmetiche, memorie elementari. Il successivo livello è quello relativo ai trasferimenti tra registri. Il livello è perciò denominato RTL (Register Transfer Level). Qui gli elementi componenti sono le entità appena menzionate e la loro strutturazione corrisponde alla logica di controllo sia essa in forma cablata o in forma microprogrammata. Il livello realizza l'astrazione corrispondente al modello di programmazione (formato dei dati, repertorio di istruzioni, indirizzamento ecc.). Il livello seguente è quello del linguaggio di programmazione assembler. La macchina viene vista attraverso il suo modello di programmazione. La struttura è data dalla aggregazione delle istruzioni in modo da formare dei programmi. Il livello più alto è quello che corrisponde ai programmi applicativi. Questo livello si appoggia sulle astrazioni ottenute attraverso il livello precedente e cioè il sistema operativo, il file system e tutti i servizi resi disponibili per i programmi di utente.
La schematizzazione di Figura 1.5 è alquanto arbitraria ed è essenzialmente
mirata a mettere in mostra, in modo sintetico, gli aspetti di interesse di
questo libro. Se, per esempio, l'interesse fosse rivolto agli aspetti
programmativi, la schematizzazione di figura può risultare troppo grossolana e
sarebbe più logico suddividere il livello più alto in più livelli. Del resto, la
suddivisione di figura potrebbe essere ulteriormente rifinita, identificando,
tra il livello delle porte e quello del linguaggio macchina, molti più livelli
di quelli rappresentati.
1.5 Le unità funzionali In modo molto schematico un computer è una macchina calcolatrice che accetta in ingresso informazioni codificate in forma digitale, le elabora attraverso un programma memorizzato e produce informazioni in uscita. I dati di ingresso costituiscono gli argomenti dell'elaborazione, i dati prodotti costituiscono i risultati (dell'elaborazione). Un programma è un insieme ordinato di istruzioni che la macchina è in grado di interpretare ed eseguire. All'esecuzione di un'istruzione corrisponde una qualche azione. Un'azione ha durata finita e un ben determinato effetto, che si osserva nel cambiamento di stato degli oggetti su cui agisce. Anche le istruzioni sono in forma codificata binaria. La differenza essenziale tra un calcolatore elettronico e una macchina calcolatrice convenzionale sta nel programma memorizzato. L'idea di programma memorizzato è attribuita a Von Neumann. In suo onore si usa parlare di modello di Von Neumann. Di esso viene data una schematizzazione in Figura 1.6, nella quale si individuano tre componenti fondamentali: • L'unità di elaborazione e controllo. È la parte responsabile dell'interpretazione ed esecuzione delle istruzioni. Gli anglosassoni chiamano questa unità Central Processing Unit e la designano con la sigla CPU, sigla della quale faremo costantemente uso nel seguito, anche se talvolta verranno usati i termini processore ed elaboratore. La CPU si divide in due parti: una parte operativa e una parte di controllo. La parte operativa è composta dai circuiti deputati alla manipolazione delle informazioni. Di essa fanno parte la cosiddetta unità aritmetica e logica, ALU (Arithmetic and Logic Unit), un certo numero di registri e un insieme di percorsi tra questi elementi. La parte di controllo è responsabile del coordinamento di tutte le attività che si svolgono nella macchina, comandando non solo la parte operativa, ma anche l'ingresso, l'uscita e la memoria. L'elaborazione avviene per passi, attraverso l'esecuzione di sequenze di istruzioni componenti un programma. Il programma risiede in memoria in forma codificata. • La memoria. È il contenitore delle istruzioni e dei dati (gli oggetti dell'elaborazione). Istruzioni e dati sono codificati in forma binaria. Le istruzioni vengono lette in memoria principale dalla CPU e interpretate. L'interpretazione dà luogo all'esecuzione dell'azione corrispondente allo specifico codice di istruzione. Le istruzioni non sono di per sé distinguibili dagli altri tipi di informazioni in memoria. Tutto dipende dal modo in cui un gruppo di bit viene letto e interpretato. Il fatto che dati e istruzioni siano di per sé indistinguibili permette di costruire programmi che generano dati che, in un secondo tempo, possono essere interpretati come istruzioni. Tipico esempio è un compilatore. Di norma si hanno differenti livelli di memoria. Si parla di memoria principale quando ci si riferisce alla memoria elettronica direttamente connessa alla CPU, si parla di memoria ausiliaria o di massa quando ci si riferisce, per esempio, alla memoria dei dischi magnetici.
• Il sistema di ingresso/uscita.
È l'insieme dei dispositivi che servono, da un lato, a comunicare con il mondo
esterno e con l'utente (video, tastiere, stampanti), dall'altro, ad aggiungere
funzionalità al sistema di elaborazione stesso (memorie ausiliarie, linee di
comunicazione ecc.). L'informazione che fluisce in ingresso o in uscita è sempre
in forma codificata. Quando l'informazione è presentata all'operatore umano essa
viene riprodotta in modo intellegibile (testo, grafici, figure).
Del sistema di ingresso/uscita fanno parte le
interfacce,
ovvero i componenti che fanno da ponte tra i dispositivi periferici e il
calcolatore stesso.
|