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)