dati - programmazione A-L Corso di Laurea in Ingegneria e Scienze

ARCHITETTURA DI UN
CALCOLATORE - CENNI
«Informatica: arte e mestiere»
Ceri, Mandrioli, Sbattella, Mc Graw-Hill
cap.2
La storia dei dischi volanti
La storia dei dischi volanti inizia il 24 giugno del 1947.
Durante il pranzo, il discorso ritornò sulla recente ondata di dischi volanti ed Enrico Fermi
all’improvviso chiese: “Dove sono tutti quanti?” La domanda del fisico italiano non era per
nulla ingenua: egli infatti aveva calcolato che, poiché l’età dell’Universo è tre volte maggiore di
quella del nostro pianeta, se girassero per lo spazio tutti gli extraterrestri di cui si parla essi
avrebbero dovuto essere stati visti già da molto tempo ed anche più di una volta. La risposta
immediata al dubbio di Fermi venne dal fisico ungherese Leo Szilard: “Sono qui fra noi e si
fanno chiamare Ungheresi”.
Il più “marziano” di tutti fu però il matematico, fisico e tecnologo John von Neumann.
Americano di origine ungherese, John von Neumann è stata uno delle menti più brillanti e
straordinarie del secolo appena passato; mente che gli ha permesso di apportare contributi
significativi, e talora assolutamente nuovi, praticamene in ogni campo della ricerca, dalla
matematica alla meccanica statistica, dalla meccanica quantistica alla cibernetica,
dall'economia all'evoluzione biologica, dalla teoria dei giochi all'intelligenza artificiale. E,
naturalmente, alla bomba atomica.
La storia dei dischi volanti
Janos Neumann nasce a Budapest il 28 dicembre del 1903 da una ricca famiglia di banchieri ebraici. Già a
sei anni è una sorta di fenomeno da baraccone, e intrattiene gli ospiti di famiglia con la sua prodigiosa
memoria, imparando a mente pagine dell'elenco telefonico o eseguendo divisioni con numeri da otto
cifre. Inoltre si diverte con il padre conversando in greco antico, arrivando a padroneggiare, intorno ai
dieci anni, quattro lingue.
In questo ambiente ricco di stimoli culturali, di contatti con gli ambienti più colti e influenti della società,
Janos matura a poco a poco la convinzione che gli aspetti economici e sociali della società e le relazioni tra
individui possono essere trattati in termini matematici. Questa visione "pan matematica" del mondo
caratterizzerà il pensiero e la vita del giovane genio fino alla fine dei suoi giorni.
Viene nominato miglior studente di matematica dell'Ungheria.
A ventidue anni, infatti, si laurea in ingegneria chimica presso Zurigo e in matematica a Budapest, dopo
aver seguito a Berlino anche i corsi Albert Einstein.
Si trasferisce poi a Göttingen, dove si occupa dei fondamenti della matematica e della meccanica
quantistica che studia sotto la supervisione di Hilbert. In questo ambiente von Neumann entra nel pieno
della maturità scientifica e i lavori che qui produrrà lo eleveranno a uno dei massimi matematici di ogni
tempo.
L'approccio hilbertiano crolla con il teorema di incompletezza di Kurt Gödel, che dimostra l'impossibilità
di conseguire una dimostrazione completa della coerenza dell'aritmetica nel contesto del pensiero
metamatematico. Quando Gödel espone i suoi risultati, solo von Neumann ne capisce subito la portata e
nel giro di due mesi dimostra, parallelamente a Gödel, l'indimostrabilità della coerenza dell'aritmetica
come conseguenza del teorema di incompletezza.
La storia dei dischi volanti
Tra il 1930 e il 1933 viene invitato a Princeton, dove mette in luce una vena didattica non proprio
esemplare. Poco dopo, con l'arrivo dei nazisti al potere, abbandona la sua posizione accademica in
Germania, considerando l'avventura americana ben più promettente. Terrà la cattedra di Princeton fino
alla fine dei suoi giorni.
Negli anni successivi, von Neumann dà sfoggio del suo enorme talento nel campo della ricerca e si
interessa dei problemi legati alla turbolenza idrodinamica e quindi alla risoluzione delle equazioni
differenziali non lineari, che gli serviranno come stimolo per studiare nuove possibilità legate alla
computazione elettronica.
Alcuni anni più tardi Shannon, uno dei padri fondatori dell'intelligenza artificiale, si baserà sui lavori di
von Neumann per pubblicare il suo articolo Una macchina giocatrice di scacchi.
Il primo incontro con un calcolatore risale a poco tempo dopo, con la macchina Harvard Mark I
(ASCC) di Howard Aiken, costruita in collaborazione con l'IBM; poi conosce ENIAC (Electronic
Numerical Integrator and Computer), un ammasso enorme di valvole, condensatori e interruttori da
trenta tonnellate di peso, progettato per far fronte alla enorme complessità dei calcoli balistici richiesti per
le tavole di tiro di armamenti sempre più sofisticati (1943).
La storia dei dischi volanti
Questo mastodonte è utile per eseguire calcoli balistici, meteorologici o sulle reazioni nucleari, ma è
fondamentalmente una macchina molto limitata, quasi del tutto priva di memoria e di un briciolo di
elasticità.
Per migliorare un simile marchingegno c‘è bisogno di quell'intuizione che una decina d'anni prima aveva
avuto Turing nel suo articolo sui numeri computabili, e cioè permettere al computer di modificare il
proprio comportamento, o, in altre parole, imparare un software. Non appena ne venne a conoscenza,
nell'agosto 1944, von Neumann vi si buttò a capofitto: nel giro di quindici giorni dalla sua entrata in
scena, il progetto del calcolatore veniva modificato in modo da permettere la memorizzazione interna del
programma
Nel 1945 esce, così l'Edvac (Electronic Discrete Variables Automatic Computer) è la prima macchina
digitale programmabile tramite un software: è nata "l'architettura di von Neumann".
La programmazione, che fino ad allora richiedeva una manipolazione diretta ed esterna dei collegamenti,
era così ridotta ad un'operazione dello stesso tipo dell'inserimento dei dati, e l'ENIAC diveniva la prima
realizzazione della macchina universale inventata da Alan Turing nel 1936: in altre parole, un computer
programmabile nel senso moderno del termine.
La storia dei dischi volanti
MARK I – 1940-43
La storia dei dischi volanti
ENIAC - 1943
La storia dei dischi volanti
Il fervore con cui appoggia lo sviluppo degli ordigni atomici lo spinge a seguire di persona alcuni test sulle
armi nucleari nella seconda metà degli anni quaranta, che raggiungeranno l'apice con l'esplosione della
bomba H nelle Isole Marshall nel 1952. Probabilmente saranno proprio le radiazioni sprigionate da
questi test a condannarlo a morte, da lì a poco.
Il suo risultato più famoso nel campo degli armamenti, invece, fu la scoperta che le bombe di grandi
dimensioni sono più devastanti se scoppiano prima di toccare il suolo, a causa dell'effetto addizionale
delle onde di detonazione (i media sostennero più semplicemente che von Neumann aveva scoperto che è
meglio mancare il bersaglio che colpirlo). L'applicazione più infame del risultato si ebbe il 6 e 9 agosto del
1945, quando le più potenti bombe della storia detonarono sopra il suolo di Hiroshima e Nagasaki,
all'altezza calcolata da von Neumann (600 metri) affinché esse producessero il maggior danno aggiuntivo.
Nel pieno della Guerra Fredda, a metà degli anni Cinquanta, si impegna al massimo per appoggiare la
costruzione del missile balistico intercontinentale Atlas che, successivamente e per fortuna, servirà a
scopi ben più nobili della guerra; un Atlas modificato, infatti, porterà John Glenn nello spazio nel 1962.
Un tumore alle ossa lo costringe ben presto sulla sedia a rotelle, ma questo non gli impedisce di seguire di
persona le riunioni strategiche con i militari, mentre si dedica a nuovi studi che riguardano programmi
capaci di autoriprodursi e che lui chiama automi cellulari.
Muore l'otto febbraio del 1957.
"...soprattutto per aver conosciuto Jancsi von Neumann mi sono reso conto di quale sia la differenza tra
un matematico di primo livello e uno come me." (E. Wigner, premio Nobel per la fisica)
Vista funzionale di un calcolatore
Le funzioni svolte da un calcolatore possono essere classificate in quattro tipologie:
1.
2.
3.
4.
Elaborazione dati: architettura generale in grado di coniugare flessibilità nel
calcolo, scalabilità e standardizzazione dei componenti, abbattimento dei costi,
…
Memorizzazione dati: persistente e per brevi periodi
Trasferimento dati da o verso l’esterno: tramite periferiche e trasmissione dati
Controllo: coordina le risorse del calcolatore
Dispositivo polivalente e adattabile, ad applicazioni diversificate: le sue funzionalità
vengono specializzate mediante la programmazione.
L’hardware fornisce le funzionalità di base che consentono al software di realizzare
tale specializzazione.
Architettura di un calcolatore
Con il termine “architettura” di un calcolatore intenderemo l’insieme delle parti e
delle loro interconnessioni che consentono determinate funzionalità
“visibili” al programmatore
• Es. un calcolatore mette a disposizione un’operazione per fare la somma di
due numeri. Questa operazione fa parte dell’architettura del calcolatore e
potrà essere usata dal programmatore
L’architettura può essere vista a vari livelli di astrazione
• Livello puramente “fisico”: unità centrale, tastiera, monitor, disco, …
• Livello “logico” (nel senso “non fisico”) o delle istruzioni: architettura di Von
Neumann
Architettura di Von Neumann
L’architettura di von Neumann
(proposta dallo scienziato
ungherese/statunitense John
Von Neumann) è ancora
quella dei sistemi di elaborazione
di oggi
• dati in ingresso da trasformare
in dati in uscita
• un programma da eseguire per
effettuare la trasformazione
• una memoria in cui contenere
il programma e i dati intermedi
dei calcoli
• un agente che esegua le azioni
programmate
Programmi e dati vengono memorizzati allo
stesso modo nella stessa unità fisica, la memoria
Architettura di Von Neumann
Il modello di macchina di Von Neumann
Gli algoritmi che progetteremo si basano sulle caratteristiche e sulle capacità di base
di un calcolatore basato sulla Macchina di Von Neumann, cioè un modello di
calcolo ideale. Le componenti sono le seguenti:
•
Le unità di input tramite cui la macchina acquisisce informazioni dall’esterno
•
Le unità di output tramite cui la macchina produce (stampa) informazioni
all’esterno
•
L’unità centrale di elaborazione (CPU) che elabora le istruzioni del
programma (i passi dell’algoritmo), composta da due elementi:
•
•
Unità di controllo: stabilisce l’ordine con cui devono essere eseguite le
operazioni
•
Unità logico-aritmetica: esegue operazioni aritmetiche e risolve
espressioni logiche
La memoria in cui l’unità centrale deposita ed estrae le informazioni per
poterle elaborare
Schema di funzionamento
I programmi sono composti da istruzioni codificate in binario:
•
istruzioni di elaborazione (ad es. operazioni numeriche)
•
istruzioni di trasferimento di dati tra due componenti della macchina
Un calcolatore esegue un programma sulla base dei seguenti principi:
• Dati e istruzioni sono memorizzati in una memoria unica che permette sia la
scrittura che la lettura
• I contenuti della memoria sono indirizzati in base alla loro posizione,
indipendentemente dal tipo di dato o istruzione contenuto
• Le istruzioni vengono eseguite in modo sequenziale
Il funzionamento della macchina di Von Neumann è un ciclo continuo:
1. la CPU estrae le istruzioni dalla memoria principale (fetch) ...
2. ...le decodifica (decode) determinando l’operazione da eseguire e i gli operandi
...
3. ...e le esegue (execute)
Il modulo di memoria
Le prestazioni della memoria possono influenzare in modo rilevante le prestazioni
complessive di un calcolatore.
Per consentire un’efficiente esecuzione del programma, la memoria che contiene
dati e istruzioni dovrebbe essere veloce quanto la CPU e dovrebbe avere
dimensioni sufficienti a contenere sia il programma che i dati. Inoltre,
dovrebbe assicurare una memorizzazione persistente.
1.
Memoria centrale: ad elevata velocità di accesso, per programmi in esecuzione
e relativi dati, supporto alla CPU (tecnologie elettroniche)
2.
Memoria di massa: grandi moli di dati non utilizzati frequentemente,
memorizzati in modo stabile (non volatile) e dal costo non proibitivo
(tecnologie magnetiche, ottiche)
Il modulo di memoria
Quattro livelli:
•
•
•
•
Registri, (interni alla CPU) capaci di memorizzare parole singole
- Tipicamente dati “in transito” relativi ad un particolare dato o istruzione
in esecuzione
Memoria cache (integrata nella CPU)
- Area di memoria ad accesso rapido finalizzata a contenere istruzioni e
dati usati più frequentemente
Memoria centrale o primaria (esterna alla CPU ma interna al calcolatore)
- Contiene istruzioni e dati del programma in esecuzione
Memoria secondaria (esterna al calcolatore)
- Fa parte dei moduli periferici
Il modulo di memoria
La memoria centrale
Conserva le istruzioni e i dati dei programmi in esecuzione. Inevitabile
ingresso/uscita delle informazioni dalla memoria di massa alla memoria centrale e
viceversa.
Dati memorizzati in bit (binary digit): ogni unità elementare di memoria contiene
un’informazione di tipo binario: 1 oppure 0
• realizzazione mediante dispositivi fisici a due stati (transistor a
semiconduttori, due livelli di tensione)
E’ organizzata come sequenza di celle o parole:
•
Parola: insieme di più byte (una potenza di 2: tipicamente 1, 2, 4, 8)
•
Byte: insieme di 8 bit
Mentre il bit rappresenta l'unità elementare di informazione, la parola di memoria è
la più piccola quantità di memoria accessibile.
Le celle di memoria di un elaboratore hanno tutte la stessa capacità, mentre
elaboratori differenti possono avere parole di lunghezza differente.
La memoria centrale
Ogni cella è individuata da un indirizzo:
• numero che indica la posizione relativa rispetto alla prima cella, che ha
indirizzo 0
L’indirizzamento della memoria avviene tramite un opportuno registro, detto
registro degli indirizzi (MAR). Se il registro indirizzi ha k bit si possono quindi
indirizzare 2k (da 0 a 2k-1) celle di memoria. Quindi anche la dimensione della
memoria è una potenza di 2. In particolare, se il registro indirizzi è composto di:
• 10 bit vengono indirizzate 210 = 1024 celle (Kilo parole- K)
• 20 bit vengono indirizzate 220 = 1048576 celle (Mega parole-M)
• 30 bit vengono indirizzate 230 = 1024*M celle (Giga parole-G)
Dal punto di vista dell’esecuzione delle istruzioni, alla memoria centrale si accede
tramite le linee del bus:
• Il bus indirizzi trasferisce gli indirizzi delle celle cui si vuole accedere
• Sulle linee del bus dati vengono trasmessi i dati
• I segnali del bus di controllo specificano il tipo di operazione richiesta
Lettura/scrittura
Le operazioni che possono essere effettuate in memoria sono quelle di lettura e
scrittura; in entrambi i casi è necessario utilizzare un secondo registro (registro dati MDR) che possiede la stessa dimensione della parola e che viene utilizzato per
contenere il dato letto/scritto.
Lettura
La lettura di una locazione di memoria consiste nel trasferimento fisico dei byte che
costituiscono la locazione dalla memoria alla unità centrale di processo, senza
modificare la locazione di memoria
Una operazione di lettura consiste nei seguenti passi:
•
•
•
•
si scrive sul MAR l'indirizzo della locazione da leggere,
questo poi viene trasferito al bus degli indirizzi che trasporta l'indirizzo in
memoria,
la quale scrive a sua volta sul bus dei dati il contenuto della locazione di
memoria selezionata,
che successivamente viene inserita o caricata (load) nel registro dei dati
(MDR Memory Data Register) restando così disponibile alla CPU.
Scrittura
La scrittura in una locazione di memoria consiste nel trasferimento fisico del
contenuto del registro dei dati (MDR) nella cella di memoria selezionata tramite
il registro MAR.
Una operazione di scrittura consiste nei seguenti passi:
•
•
•
•
si scrive sul registro MDR il dato da inserire o immagazzinare (store),
si scrive sul MAR l'indirizzo della locazione da ricoprire (con il dato
contenuto nel registro MDR),
questo poi viene trasferito al bus che trasporta l'indirizzo in memoria,
la quale scrive il dato che arriva dal bus dati nella locazione di memoria
selezionata.
Schema di funzionamento della memoria
Caratteristiche della memoria centrale
Velocità di accesso elevata: decine di ns (10-9 sec)
Tempo di accesso indipendente dalla posizione del dato nella memoria
• RAM: Random Access Memory
• si contrappongono alle memorie ad accesso sequenziale, come i nastri
magnetici
Dimensione limitata: oggi alcuni GB
•
230 byte = 1073741824 byte ≈ 109 byte (un giga-byte)
L’informazione viene persa se si interrompe l’alimentazione elettrica (volatilità)
Memorie RAM e ROM
Un valore può essere memorizzato/recuperato dalla memoria specificando
l’indirizzo
• il tempo di accesso è indipendente dall’indirizzo (ecco perché il nome di
RAM)
Memorie ROM (Read Only Memory)
• sono memorie di sola lettura, pre-impostate dal fabbricante
• sono di fatto memorie RAM (ROM e RAM non sono termini
contrapposti!) ma non sono volatili
• tipicamente contengono le istruzioni per l’avvio del calcolatore (firmware)
• sono usate anche in auto, elettrodomestici, ecc.
Organizzazione gerarchica della memoria
Il sistema di memorizzazione sfrutta le caratteristiche delle diverse tecnologie
disponibili combinandole tra loro in modo da ottimizzare le prestazioni
riducendo i costi complessivi allo scopo di simulare illimitata quantità di memoria
velocemente accessibile.
L’organizzazione gerarchica della memoria crea l’illusione di una memoria grande,
accessibile alla stessa velocità di una memoria piccola, sfruttando il principio di
località:
Un programma non ha bisogno di accedere a tutti i dati o a tutte le istruzioni con la stessa
probabilità; in ogni istante di tempo, accederà a una porzione relativamente piccola del suo
spazio di memoria.
Gerarchia di memorie
Località spaziale: quando si accede all’indirizzo A, è molto probabile che gli
accessi successivi richiedano celle vicine ad A
• le istruzioni del codice vengono in genere lette da locazioni consecutive
della memoria;
• gli accessi ad array o a strutture dati sono “vicini”.
Località temporale: quando si accede all’indirizzo A, è molto probabile negli
accessi successivi si richieda di nuovo la cella A
• cicli di istruzioni accedono ripetutamente alle stesse locazioni di memoria;
• istruzioni vicine tendono ad utilizzare le stesse variabili.
Gerarchia di memorie
Consideriamo due livelli adiacenti:
Gerarchia di memorie
Memorie di gran capacità, relativamente lente, economiche ed accessibili tramite il
bus:
• „MGL ovvero Memoria Grande e Lenta
• Dimensioni pari a circa 10 unità
• tempo di accesso (TA) di circa 10 unità
Memorie veloci, integrate nello stesso chip della CPU, ma costose:
• „MPV ovvero Memoria Piccola e Veloce
• Dimensioni pari a circa 1 unità
• tempo di accesso pari a circa 1 unità
Obiettivo: realizzare una memoria grossa e veloce
• „dimensioni pari a circa quelle della memoria grossa
• Prestazioni pari a circa quelle della memoria veloce
Gerarchia di memorie
La MPV contiene una copia di alcune celle della MGL; quando la CPU chiede una
particolare cella di memoria la richiesta va ad entrambe le memorie:
• se il dato si trova nella MPV, viene passato direttamente alla CPU;
• †se il dato si trova nella MGL, viene anche caricato nella MPV
Ipotesi: distribuzione uniforme delle richieste
• „la frequenza con cui si trova il dato cercato nella MPV (hit ratio) sarà in media
il 10% (1/10), in questi casi il tempo di accesso (hit time) sarà pari a 1 unità;
• „la frequenza con cui è necessario accedere alla MGL (miss ratio) sarà in media
il 90% (9/10), in questi casi il tempo di accesso (miss penalty) sarà pari a 10
unità;
• „il tempo medio di accesso sarà 0.1*1+0.9*10=9.1 unità
Come si sfrutta la località
Diversi approcci a seconda del tipo di località:
• „Località temporale: i dati prelevati dalla MGL vengono conservati nella MPV il
più a lungo possibile
• Località spaziale: quando si copia un dato dalla MGL alla MPV, si copiano
anche i dati vicini (cache line o blocco).
La frequenza di successo (hit ratio, h) cresce fino a superare il 99%
in effetti h dipende da due caratteristiche contrastanti:
• †la dimensione dei blocchi: un blocco grande sfrutta meglio la località spaziale;
• †quanti sono i blocchi in memoria: se c’è spazio per tanti blocchi un dato
resta in memoria più a lungo e può sfruttare più a lungo la località temporale;
L’effetto della località
Effetto del principio di località sull’esempio di prima:
•
•
•
•
t„empo di accesso alla cache pari a 1 unità (TAC= 1);
„tempo di accesso alla memoria (miss penalty, penalità di fallimento) pari a 10
unità (TAM = 10);
„frequenza di successo (hit ratio, h = 0.99);
„frequenza di fallimento (miss ratio, m = 1–h =0.01);
„tempo di accesso medio pari a: TA = h * TAC+ m * TAM
TA = 0.99 * 1 + 0.01 * 10 = 1.09
Nella gerarchia di memoria a più livelli presenti in un sistema di elaborazione, ogni
coppia di memorie in livelli adiacenti può essere pensata come un sistema di
memorie a due livelli simile a quello appena descritto
Memorie cache
Possiamo trovare memorie cache:
• nella comunicazione tra memoria RAM e unità a disco,
• nel trasferimento dati tra memoria RAM e CPU quando la RAM non è in
grado di servire tempestivamente le richieste della CPU.
In commercio esistono infatti memorie RAM caratterizzate da velocità e costi
diversi, adatte quindi a operare con CPU funzionanti a frequenze diverse.
Prestazioni delle memorie
Si osservino i salti prestazionali quando si passa dalle forme di memoria interna con
tempi di accesso misurati in nanosecondi (miliardesimo di secondo), alle forme di
memoria esterna (rispetto all’unità centrale) che evidenziano tempi di accesso
dell’ordine dei millesimi di secondo, fino alle forme di memoria esterna fuori linea
con tempi di accesso misurati in secondi.
Il bus di sistema
Il bus di sistema è costituito da un insieme di connessioni lungo le quali viene
trasferita l’informazione. Esso collega fra di loro l’unità di elaborazione, la memoria
e le diverse interfacce di ingresso e di uscita.
Nelle implementazioni concrete il bus di sistema è costituito da tre parti distinte:
• Una mono-direzionale dal processore alla memoria detta bus degli
indirizzi. Serve per trasmettere il contenuto del registro indirizzi alla
memoria centrale selezionando così una specifica cella di memoria.
• Una bi-direzionale dal processore alla memoria e viceversa detta bus dei
dati. Trasferisce dati dall’unità master all’unità slave o viceversa. I dati
vengono trasferiti da una cella di memoria al registro dati a seguito di una
operazione di lettura oppure dal registro ad una cella a seguito di una
operazione di scrittura.
• Una bi-didirezionale dal processore alle altre unità funzionali e viceversa
detto bus dei controlli. Trasferisce un codice corrispondente alla
istruzione da eseguire dall’unità master all’unità slave e informazioni
relative all’avvenuto espletamento dell’operazione richiesta in flusso
contrario.
Il bus di sistema
Il bus è fisicamente realizzato tramite un insieme di conduttori elettrici
L’unità di elaborazione
L'unità centrale di elaborazione (CPU) è la parte del sistema che contiene gli
elementi circuitali necessari al funzionamento dell’elaboratore. Questa esegue i
programmi che risiedono nella memoria centrale, prelevando, decodificando ed
eseguendo le istruzioni in essi contenute e coordinando il trasferimento dei dati
tra le varie unità funzionali.
La CPU si compone di:
• una unità di controllo (CU Control Unit), che ha lo scopo di
interpretare e attivare le risorse necessarie alla esecuzione delle istruzioni
• una unità aritmetico-logica (ALU Arithmetic and Logic Unit) in cui
vengono effettuati i calcoli aritmetici e logici presenti nelle istruzioni
(aritmetiche/logiche) del programma
• alcuni dispositivi di memoria detti registri che possono essere letti e
scritti molto velocemente e che sono utilizzabili per memorizzare risultati
parziali delle operazioni e informazioni necessarie al controllo del flusso
del programma.
• l’orologio di sistema (clock) che sincronizza le operazioni rispetto ad
una data frequenza
L’unità di elaborazione
A livello “macroscopico”, ad ogni impulso di clock la CPU:
•
“legge” il suo stato interno (determinato dal contenuto dei registri di stato) e la
sequenza di ingresso (determinata dal contenuto dei registri istruzione e dati)
•
produce un nuovo stato “dipendente” dallo stato in cui si trovava originariamente
In pratica, la CPU realizza una complessa funzione logica, con decine di ingressi e di uscite
BIU
registri
Bus Interface
Unit
PC Contatore di programma
(Program Counter)
ALU
BUS
CU
IR
Registro Istruzione
(Instruction Register)
Lo stato della CPU è costituito da informazioni memorizzate negli opportuni registri sui
dati da elaborare, istruzione da eseguire, indirizzo in memoria della prossima istruzione da
eseguire, eventuali anomalie/eventi verificatisi durante l’elaborazione.
Registri
I registri fondamentali presenti nella CPU sono:
•
•
•
•
•
il registro degli indirizzi di memoria (MAR Memory Address Register),
indica l'indirizzo della locazione di memoria che si vuole selezionare;
il registro dei dati di memoria (MDR Memory Data Register), contiene il
dato proveniente dalla locazione di memoria selezionata o il dato che si
vuole memorizzare nella locazione di memoria selezionata;
il contatore di programma (PC Program Counter) ha la funzione di
guidare il flusso della esecuzione di un programma, infatti il suo contenuto
indica l'indirizzo della prossima istruzione da eseguire;
il registro della istruzione corrente (IR Instruction Register) che contiene
l'istruzione da decodificare e eseguire;
il registro delle interruzioni (INTR Interrupt Register) che contiene
informazioni sullo stato di funzionamento delle periferiche
Le interfacce di I/O
Le interfacce di ingresso/uscita costituiscono gli elementi circuitali che consentono il
collegamento dell’elaboratore con le varie periferiche. Esse tra loro sono molto diverse
ma possiamo raggrupparle in tre categorie:
•
Unità di interazione. Permettono all’utente di interagire con il sistema di calcolo
(tastiera, mouse, scanner, stampanti, video, webcam)
•
Unità di memorizzazione. Memorizzano in modo permanente le informazioni in
esso contenute ed è per questo che vengono chiamate anche memorie permanenti
(HD, CD, DVD, Floppy, ecc…)
•
Unità di comunicazione. Permettono di collegare sistemi di calcolo diversi in
modo da realizzare una rete (modem, schede di rete).
Una interfaccia contiene registri per inviare comandi alla periferica, scambiare dati, controllare
il funzionamento della periferica. Una interfaccia generica potrebbe contenere i seguenti
elementi:
•
Un registro dati per scambiare dati con la periferica sia in ingresso che in uscita
(PDR Peripherical Data Register)
•
Un registro comando per contenere il comando che la periferica dovrà eseguire
(PCR Peripherical Command Register)
•
Un registro di stato della periferica (PSR Peripherical Status Register)