Copertina
Autore Giacomo Bucci
Titolo Architettura e organizzazione dei calcolatori elettronici
SottotitoloFondamenti
EdizioneMcGraw-Hill, Milano, 2005, , pag. 418, ill., cop.fle., dim. 170x240x25 mm , Isbn 978-88-386-6217-1
LettoreCorrado Leonardo, 2005
Classe informatica: sistemi
PrimaPagina


al sito dell'editore


per l'acquisto su IBS.IT

per l'acquisto su BOL.IT

per l'acquisto su AMAZON.IT

 

| << |  <  |  >  | >> |

Indice

Prefazione                                                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 XVII

Contenuti

Il 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 14

1.3 Architettura e organizzazione

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

| << |  <  |