Le infrastrutture HardWare
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Capitolo 6 Le infrastrutture HardWare L’architettura di riferimento Architettura dei calcolatori - Un calcolatore è un sistema composto da un numero elevato di componenti. - Il suo funzionamento può essere descritto se lo si considera come un sistema strutturato in forma gerarchica, come un insieme di elementi che interagiscono l'uno con l'altro. -Ogni livello di descrizione è caratterizzato dalla sua struttura, ossia dall' organizzazione dei componenti propri di quel livello. - Ogni componente è contraddistinto da una funzione, cioè dal compito da esso svolto nell' ambito della struttura complessiva del sistema. 1
Architettura dei calcolatori (II) - In termini generali, le funzioni svolte da un calcolatore sono classificabili in quattro tipologie: 1- elaborazione di dati; 2- memorizzazione di dati; 3- trasferimento di dati da o verso l'esterno; 4- controllo. Funzionalità di un calcolatore Trasferimento Ambiente esterno Controllo Elaboraz ione Memorizzazione Elaborazione 2
Architettura di elaborazione - Il mercato ha spinto i progettisti a definire un’architettura di elaborazione il più possibile generale in grado di coniugare i seguenti aspetti: • Flessibilità nel calcolo • modularità della struttura • scalabilità dei componenti • standardizzazione dei componenti • abbattimento dei costi • semplicità di installazione e di esercizio del sistema • disponibilità di applicazioni a basso prezzo di vendita - L'architettura degli attuali calcolatori è quindi il risultato di un insieme di compromessi riguardanti versatilità, efficienza computazionale e costi. Memorizzazione - Una seconda funzione generale svolta dai calcolatori è la memorizzazione dei dati, sia per brevi periodi (ad es. risultati intermedi di una computazione) sia per tempi più lunghi. - Gli esempi di memorizzazione persistente dei dati in formato elettronico sono ormai innumerevoli: dalla gestione dei magazzini delle aziende agli archivi delle banche, degli uffici anagrafici e del catasto. 3
Trasferimento dei dati - Un calcolatore deve essere in grado di comunicare con l'ambiente esterno sia per acquisire dati da elaborare memorizzare sia per trasferire i risultati dell' elaborazione. - Questi compiti normalmente vengono svolti da dispositivi ausiliari direttamente connessi al calcolatore, detti periferiche, con funzioni di sorgenti o destinatari dei dati. Trasferimento dei dati (II) - Le operazioni di trasferimento dei dati tra ambiente e calcolatore da parte delle periferiche sono chiamate operazioni di ingresso/uscita (I/O). - Tipiche unità di ingresso sono la tastiera e il mouse, mentre lo schermo e la stampante sono esempi di periferiche di uscita. - Il trasferimento dei dati su lunghe distanze, per esempio tramite linee telefoniche, è chiamato trasmissione dei dati. - Un esempio al riguardo è il collegamento in rete di calcolatori posti a distanze variabili da qualche metro a migliaia di chilometri. 4
Controllo - Le operazioni di elaborazione, memorizzazione e trasferimento dei dati devono essere sottoposte a un opportuno controllo. - Tale funzione è spesso deputata all'utente del calcolatore, che la realizza impartendo comandi al calcolatore stesso. - Internamente a ogni calcolatore è comunque presente un'unità di controllo che coordina le risorse del calcolatore al fine di svolgere le operazioni corrispondenti ai comandi dell’utente. L’architettura di riferimento - Consideremo come modello di architettura quello di Von Neumann. - Elementi fondamentali sono la CPU (singola), la memoria e il bus di sistema. -Il collegamento con il mondo esterno è assicurato da periferiche di I/O quali il terminale, le stampanti, etc., ciascuna collegata al bus di sistema attraverso opportune interfacce di I/O. 5
Il calcolatore: modello architetturale 1. 2. Memoria Memorizzazione Elaborazione Memoria Magnetica Elettronica Unità Centrale di Elaborazione Interconnessione Collegamenti (BUS/Cavi) 3. Comunicazione (interfaccia) Periferiche Un moderno sistema di calcolo 6
CPU - Il componente principale all'interno del calcolatore è l'unità di elaborazione centrale (Central Processing Unit: CPU). - Alla CPU sono affidate le operazioni di controllo e di elaborazione. - Da tempo, le CPU vengono realizzate tipicamente con tecnologie microelettroniche e sono chiamate anche microprocessori (o anche, più brevemente, processori) Memoria centrale - Per la memorizzazione dell'informazione (dati e programmi) è presente un'unità chiamata memoria centrale. - La memoria centrale ospita sia i dati necessari per le elaborazioni svolte dalla CPU sia i dati trasferiti attraverso le unità di ingresso/uscita. - La memoria può essere vista come un insieme di celle adiacenti, ognuna caratterizzata da un proprio identificatore univoco, chiamato indirizzo (memory address), e in cui possono essere scritti o letti dati in formato binario. 7
Bus - Il bus è una linea alla quale sono contemporaneamente connesse le unità del calcolatore e che consente il trasferimento di dati tra tali unità. - La CPU ha la gestione dell'intero sistema (un ruolo detto master) e in particolare dell' accesso al bus, impedendo alle unità periferiche (che assumono il ruolo di slave) la possibilità di accedervi autonomamente. - Ogni trasferimento di dati attraverso il bus avviene sotto la supervisione della CPU, che identifica, mediante il loro indirizzo la sorgente e la destinazione dei dati, e sincronizza con segnali di controllo i dispositivi che devono colloquiare. - In questo modo nel bus si evita qualsiasi collisione fra dati di competenza delle diverse periferiche. Bus e motherboard Il bus viene integrato nella scheda madre (motherboard) del calcolatore: una superficie di materiale plastico su cui sono spesso montati, oltre al bus, la CPU, la memoria centrale e alcune interfacce di ingresso/uscita, per esempio quelle della tastiera e del mouse. 8
Motherboard Connettori per schede di I/O aggiuntive Zoccolo per la CPU Connettori per la memoria Connettori per dischi fissi Lo schema di riferimento RAM CPU Scheda madre (motherboard) Bus dati Bus indirizzi Bus di controllo Interfacce Interfacce Interfaccia di di I/O di I/O I/O Tastiera e mouse Memoria di massa Altoparlanti Schermo 9
Pregi di un collegamento a bus ☺ Semplicità – un’unica linea di connessione costi ridotti di produzione ☺ Estendibilità – aggiunta di nuovi dispositivi molto semplice ☺ Standardizzabilità – regole per la comunicazione da parte di dispositivi diversi Difetti di un collegamento a bus Lentezza – utilizzo in mutua esclusione del bus Limitatà capacità – al crescere del numero di dispositivi collegati Sovraccarico del processore (CPU) – perchè funge da master sul controllo del bus 10
Bus: suddivisione funzionale - Il bus può essere suddiviso funzionalmente in tre componenti: • il bus dati, utilizzato per trasferire i dati, tipicamente fra memoria e CPU ma anche fra CPU e interfacce di ingresso/uscita; • il bus indirizzi, che identifica la posizione delle celle di memoria in cui la CPU va a scrivere o leggere; • il bus di controllo, in cui transitano i segnali di controllo che consentono di volta in volta di selezionare le unità coinvolte in un trasferimento di dati (sorgente e destinatario), di definire la direzione dello scambio (lettura o scrittura) e in generale di coordinare il sistema. L’ “esecutore” - Un calcolatore basato sull’architettura di Von Neumann 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. 11
Linguaggio macchina - Il linguaggio per cui la CPU si comporta da esecutore è detto linguaggio macchina. - Le istruzioni scritte in linguaggio macchina sono piuttosto rudimentali: – il concetto di tipo di dato è quasi assente, – il numero di operandi è limitato (in genere non più di due), – il numero di operazioni previste è ridotto. Istruzione che effettua la somma di due operandi Struttura istruzione codice operativo dest src1 src2 Linguaggio add R01 R02 R03 assemblatore Linguaggio 000000 00000 100000 00001 00010 00011 macchina 12
Linguaggio macchina - Ogni istruzione è identificata da un codice operativo - Gli operandi indicano gli indirizzi dove recuperare i dati su cui operare e dove copiare i risultati. - Ogni CPU e’ caratterizzata funzionalmente da suo linguaggio macchina - cioé l’insieme delle istruzioni che è in grado di eseguire e le modalità di rappresentazione degli operandi. Fetch, decode, execute La CPU può essere intesa come un dispositivo che opera in modo ciclico, ripetendo per ogni istruzione le seguenti tre fasi: - lettura (fetch): acquisizione dalla memoria di una istruzione - decodifica (decode): identificazione dell’istruzione e delle operazioni che devono essere svolte. - esecuzione (execute): effettuazione delle operazioni corrispondenti all’istruzione. 13
Le parti di una CPU (I) All’interno di un processore si identificano due parti principali: data path ed unità di controllo. - Data path (o percorso dei dati) – è la parte che si occupa dell’effettiva elaborazione dei dati; – comprende dispositivi diversi • una o più unità aritmetico-logiche, dette ALU (Arithmetic Logic Unit); • alcune unità di memorizzazione temporanea, i registri, memoria ad alta velocità usata per risultati temporanei e informazioni di controllo (il valore massimo memorizzabile in un registro è determinato dalle dimensioni del registro). Le parti di una CPU (II) - Unità di controllo – coordina le operazioni di tutto il processore (anche quelle del data path!); – regola il flusso dei dati e indica quali registri debbano essere collegati agli ingressi e all’uscita dell’ALU; – invia all’ALU il codice dell’operazione da eseguire; – riceve indicazioni sull’esito dell’operazione appena eseguita dall’ALU e gestisce opportunamente queste informazioni; – comprende alcuni registri di uso specifico • Program Counter (PC) – qual è l’istruzione successiva; • Instruction Register (IR) – istruzione in corso d’esecuzione; • … 14
Program Counter - Uno dei compiti dell’unità di controllo è di provvedere al prelievo in memoria (fetch) delle istruzioni da eseguire. - L’indirizzo dell’istruzione corrente viene conservato all’interno di un registro detto Program Counter. Fase di fetch - All’inizio della fase di fetch il contenuto del PC viene trasferito sul bus indirizzi e trasmesso alla memoria indicando sul bus di controllo che si tratta di una operazione di lettura. - La memoria legge il contenuto della locazione indicata e lo trasferisce sul bus dati. - All’interno della CPU il contenuto del bus dati viene copiato nell’IR (Intruction Register). - Il contenuto del PC viene aggiornato 15
Ciclo Fetch – Decode - Execute 1. Prendi l’istruzione corrente dalla memoria (individuata dal contenuto del PC) e mettila nell’IR (Instruction Register), contemporaneamente incrementa il Program Counter (PC) in modo che contenga l’indirizzo dell’istruzione successiva (fetch) 2. Determina il tipo di istruzione da eseguire (decode) 3. Se l’istruzione usa dei dati presenti in memoria, determinane la posizione; 4. Carica la parola, se necessario, in un registro della CPU; 5. Esegui l’istruzione (execute) 6. Torna al punto 1 e inizia a eseguire l’istruzione successiva. Tipologie di istruzioni (I) - Architettura di riferimento: load/store – le operazioni aritmetico-logiche possono essere eseguite solo su dati che siano già stati caricati nei registri; – le operazioni di caricamento dei dati dalla memoria nei registri (load) e di archiviazione dei risultati dai registri nella memoria (store) debbono essere previste esplicitamente. 16
Tipologie di istruzioni (II) Un processore in architettura load/store dovrà quindi essere in grado di eseguire le seguenti categorie di istruzioni: – Istruzioni aritmetico-logiche (Elaborazione dati) • Somma, Sottrazione, Divisione, … • And, Or, Xor, … • Maggiore, Minore, Uguale, Minore o uguale, … – Controllo del flusso delle istruzioni • Sequenza • Salto condizionato o non condizionato (per realizzare selezioni e cicli) – Trasferimento di informazione • Trasferimento dati e istruzioni tra CPU e memoria • Trasferimento dati e istruzioni tra CPU e dispositivi di ingresso/uscita (attraverso le relative interfacce) Esempi di istruzioni Istruzione Significato Categoria add R01,R02,R03 R01 ← R02 + R03 aritmetico-logica addi R01,R02,421 R01 ← R02 + 421 aritmetico-logica lw R01,R02,421 R01 ← M[R02 + 421] trasferimento sw R01,R02,421 M[R02 + 421] ← R01 trasferimento beq R01,R02,–421 se (R01 == R02) vai a PC– salto (condizionato) 421 j 84210 vai a 84210 salto (non condizionato) 17
Istruzioni aritmetico-logiche • Un’istruzione aritmetico-logica, come add RZ,RX,RY, viene eseguita in quattro passi: 1. l’istruzione viene prelevata dalla memoria e scritta nell’IR mentre il PC viene incrementato (fasefase di fetch); fetch 2. viene letto il contenuto dei due registri RX e RY (l’unità di controllo attiva i collegamenti tra i registri RX e RY, individuati dal contenuto dell’IR, e i registri di ingresso all’ALU e provvede a effettuare il trasferimento dei dati); 3. la ALU opera sui dati letti dal banco dei registri, eseguendo l’operazione indicata dal codice compreso nell’istruzione (l’unità di controllo attiva il collegamento di un pezzo dell’IR con l’ingresso di controllo dell’ALU); 4. il risultato calcolato dall’ALU viene scritto nel registro RZ (anche il registro destinazione viene individuato a partire dal contenuto dell’IR). Istruzioni di trasferimento - Un’istruzione di trasferimento, come lw RY,RX,base, viene eseguita in cinque passi: 1. l’istruzione viene prelevata dalla memoria e scritta nell’IR mentre il PC viene incrementato; 2. viene letto il contenuto del registro RX; 3. la ALU opera sui dati letti dal banco dei registri e sulla base scritta nell’IR; 4. il risultato calcolato dall’ALU viene utilizzato come indirizzo per la memoria dati; 5. il dato proveniente dalla memoria viene scritto nel registro RY. 18
Istruzioni di controllo - Un’istruzione di controllo, come beq RX,RY,salto, viene eseguita in quattro passi: 1. l’istruzione viene prelevata dalla memoria e scritta nell’IR mentre il PC viene incrementato; 2. viene letto il contenuto dei due registri RX e RY; 3. la ALU opera sui dati letti dal banco dei registri, eseguendo l’operazione indicata dal codice compreso nell’istruzione (nel caso dell’esempio si tratta di una sottrazione, per verificare poi se il risultato è uguale o diverso da zero); contemporaneamente il contenuto del PC viene sommato al valore del salto per calcolare l’eventuale destinazione del salto; 4. l’esito dell’operazione viene utilizzato per decidere quale valore debba essere memorizzato nel PC. Unità funzionali richieste dai diversi tipi di istruzioni Tipo di istruzione Unità funzionali utilizzate Aritmetico-logico Memoria Banco ALU Banco (istruzioni) registri registri Trasferimento Memoria Banco ALU Memoria Banco (registri memoria) (istruzioni) registri (dati) Salto Memoria Banco ALU (condizionato) (istruzioni) registri Salto Memoria (non condizionato) (istruzioni) 19
Durata indicativa di ogni categoria di istruzione (tempi in ns). Tipo di istruzione Memoria Lettura ALU Memori Scrittura Totale istruzioni registro a registro (MI) (LR) (AL) dati (SR) (MD) Aritmetico- Aritmetico-logico 10 5 10 – 5 30 Trasferimento 10 5 10 10 5 40 (registri ← memoria) Trasferimento 10 5 10 10 – 35 (registri → memoria) Salto 10 5 10 – – 25 (condizionato) Salto 10 – – – – 10 (non condizionato) Un esempio (I) - Esecuzione di una successione di quattro istruzioni per il caricamento di due dati dalla memoria nei registri R01 e R02, la loro somma e la registrazione in memoria del risultato. 20
Un esempio (II) l w R01,R11,421 MI LR AL MD SR Tempo 40 ns lw R02,R11,842 MI LR AL MD SR 30 ns 40 ns add R03,R01,R02 MI LR AL SR 35 ns sw R03,R11,421 MI LR AL MD 145 ns Ordine di esecuzione delle istruzioni Primi due passi dell’esecuzione - Molte delle operazioni che devono essere effettuate per completare l'esecuzione di un'istruzione non dipendono dall'istruzione stessa ma sono uguali per tutte le istruzioni. - In particolare, i primi due passi dell' esecuzione sono sempre: 1- l'invio del contenuto del PC alla memoria che contiene le istruzioni per prelevare quella corrente e trasferirla nell'IR (fase di fetch); 2- la lettura del contenuto di uno o due registri utilizzando pezzi dell'istruzione registrata nell'IR per selezionare i registri ai quali accedere. - Dopo questi due passi, le istruzioni comprese nella stessa categoria (aritmetico-logica, di trasferimento o di salto) richiedono il completamento delle stesse azioni, indipendentemente dall' esatto codice operativo. 21
Categorie di istruzioni (I) - Anche tra le diverse categorie di istruzioni ci sono delle similitudini. - Tutte le istruzioni, dopo aver letto i registri, usano l’ ALU: - le istruzioni aritmetico-logiche la usano per l'esecuzione del codice operativo; - le istruzioni di trasferimento per calcolare l'indirizzo effettivo; - i salti condizionati per valutare l'esito dei confronti. Categorie di istruzioni (II) - Dopo aver utilizzato l'ALU, le azioni richieste per completare le varie istruzioni si differenziano: - un'istruzione aritmetico-logica deve accedere ai registri per scrivere il risultato proveniente dall'ALU; - un'istruzione di trasferimento richiede l'accesso alla memoria dati; - infine, per un'istruzione di salto potrebbe essere necessario cambiare l'indirizzo dell'istruzione successiva sulla base dell' esito del confronto. 22
Architettura del processore: fase di fetch - Per definire l'architettura complessiva del processore, partiamo dai componenti che servono per completare l'esecuzione delle diverse fasi di ciascuna istruzione. - Innanzitutto si consideri la fase di fetch, comune a tutte le istruzioni, che consiste nel prelievo dell’ istruzione corrente (il cui indirizzo si trova nel PC) e nel suo caricamento nell'IR. - Oltre ai due registri coinvolti (PC e IR) è necessario disporre di una memoria per le istruzioni e di un sommatore capace di incrementare il PC senza richiedere l'intervento dell'ALD. - Per semplicità, dividiamo logicamente la memoria in due parti, una per le istruzioni e una per i dati: Elementi dell'unità di centrale elaborazione necessari per prelevare le istruzioni dalla memoria e incrementare il PC. 23
Architettura del processore: istruzioni aritmetico-logiche (I) - Le istruzioni aritmetico-logiche leggono in genere 2 registri ed effettuano un' operazione che coinvolge l'ALU. Quindi scrivono il risultato in 1 registro. - Se si considerano i registri come un unico blocco funzionale, si può prevedere che ogni lettura richieda 1 ingresso (il numero del registro da leggere) e 1 uscita (il valore letto), - mentre una scrittura richiede 2 ingressi (il numero del registro destinazione e il valore da scrivervi). Architettura del processore: istruzioni aritmetico-logiche (II) - Per eseguire le istruzioni aritmetico-logiche servono quindi in totale 4 ingressi (2 per i due registri sorgente, per la lettura, e 2 per il registro destinazione, per la scrittura) e 2 uscite (per i due registri sorgente). - Il banco di registri fornisce sempre in uscita il contenuto dei registri i cui numeri sono specificati sugli ingressi del registro di lettura. - Le scritture, invece, sono controllate da un apposito segnale che proviene dall'unità di controllo, - la quale provvede anche a indicare all'ALU quale operazione eseguire. 24
Elementi dell'unità di centrale elaborazione necessari per eseguire le istruzioni aritmetico-logiche. Architettura del processore: istruzioni di trasferimento dati - Si considerino ora le istruzioni di trasferimento dei dati da e verso la memoria. - In entrambi i casi si deve calcolare l'indirizzo della cella di memoria cui si vuole accedere, - quindi si deve leggere dalla memoria dati il valore da scrivere nei registri (load) oppure si deve leggere dal banco dei registri il valore da scrivere nella memoria (store) 25
Elementi dell'unità dì centrale elaborazione per eseguire le istruzioni di trasferimento sia dalla memoria ai registri sia dai registri alla memoria Salto condizionato e non condizionato (I) - Rimangono infine da considerare le istruzioni di salto, condizionato e non condizionato. - Nel caso dei salti condizionati, l'esecuzione dell'istruzione deve prevedere due azioni: 1- il calcolo dell'indirizzo di destinazione del salto e 2- il confronto del contenuto dei registri indicati dall'istruzione per capire se effettivamente il salto deve essere effettuato. - Per calcolare l'indirizzo di destinazione è necessario un sommatore aggiuntivo cui inviare il risultato ottenuto dall'incremento del PC durante la fase di fetch. 26
Salto condizionato e non condizionato (II) - Per quanto riguarda invece il confronto degli operandi, basta seguire il procedimento già adottato in precedenza per le istruzioni aritmetico-logiche. - In questo caso, però, il risultato non deve essere salvato in un registro ma solo esaminato per valutare l'esito dell' operazione. - L'istruzione di salto non condizionato è molto più semplice e viene effettuata sostituendo una parte del PC con alcuni dei bit contenuti nell'IR. Elementi dell'unità di centrale elaborazione necessari per eseguire le istruzioni di salto condizionato - l'ALU confronta gli operandi mentre un sommatore ad hoc calcola l'indirizzo di destinazione sommando al PC (già incrementato) il valore contenuto nell'istruzione. L'unità di controllo decide, in base all'esito del confronto, il nuovo valore del Pc. 27
Unità centrale di elaborazione (I) - A questo punto, combinando i diversi elementi che sono stati presentati finora, è possibile realizzare un'unità centrale di elaborazione completa. - Per semplificare la struttura finale, ci si basa sull’ ipotesi che nessuna risorsa dell'unità di calcolo possa essere utilizzata più di una volta dalla stessa istruzione. - Quindi qualsiasi elemento di cui si ha bisogno più di una volta dovrà essere replicato: - questa è un'ulteriore ipotesi che impone la separazione tra la memoria in cui sono contenute le istruzioni e la memoria che contiene i dati Unità centrale di elaborazione (II) - Se lo stesso elemento dell'unità di calcolo deve essere utilizzato in modo diverso da due diverse categorie di istruzioni, è necessario prevedere connessioni multiple all'ingresso di questo elemento e avere segnali di selezione tra gli ingressi governati dall'unità di controllo. - Questo viene generalmente realizzato mediante un elemento chiamato multiplexer (selezionatore di dati) e indicato in figura con un piccolo cerchio: - il multiplexer seleziona uno tra i vari ingressi in base alla configurazione delle linee di controllo (non riportate nelle figure). 28
Combinazione di tutti gli elementi dell'unità di elaborazione richiesti dalle diverse istruzioni. - Questa unità di calcolo può eseguire le istruzioni elementari (caricamento/memorizzazione dati, operazioni aritmetico-logiche e salti condizionati) in un unico ciclo di clock. 29
Puoi anche leggere