Architettura dell`elaboratore (modello di Von Neumann)
Transcript
Architettura dell`elaboratore (modello di Von Neumann)
Architettura dell'elaboratore (modello di Von Neumann) La struttura (hardware) di un elaboratore comprende una Unità Centrale e delle Unità Periferiche. L'Unità Centrale comprende una Memoria Centrale (che immagazzina informazioni) e un Processore (che elabora le informazioni eseguendo le istruzioni di un programma). Le Unità Periferiche o di Input/Output (I/O) consentono la comunicazione tra l'unità centrale e l'ambiente esterno. Può trattarsi di: Unità di interazione utente-sistema (es: mouse, tastiera, schermo, stampante, ecc.) Unità di memoria di massa (dischi magnetici, dischi ottici, nastri, ecc.) Unità di comunicazione (modem, schede di rete, ecc.). L'architettura di Von Neumann è caratterizzata dal fatto che sia il programma in esecuzione (codice eseguibile) che i dati su cu esso lavora devono essere memorizzati nella memoria centrale. Il PROCESSORE (o CPU = Central Processing Unit) è a sua volta costituito da: Una Unità di Controllo (CU: Control Unit). Essa sovrintende al funzionamento dell'intero processore dirigendone le operazioni. Una Unità Aritmetico-Logica (ALU: Arithmetic Logic Unit). L'ALU è in grado di eseguire semplici operazioni aritmetiche (somma, prodotto, ecc.), logiche (AND, OR, ecc) e di confronto (uguale, maggiore, ecc.). I dati su cui opera la ALU devono essere contenuti nei registri del processore. Un insieme di Registri. I registri sono delle memorie di piccole dimensioni (normalmente da 8 a 64 bit ciascuno) ma ad accesso molto veloce: essi contengono informazioni (dati, indirizzi o istruzioni) che la CPU preleva dalla memoria centrale oppure informazioni che la CPU deve registrare nella memoria centrale. Alcuni registri sono di uso generale e sono utilizzabili da un programma scritto da un utente programmatore. Di solito sono indicati con sigle come R1, R2, R3, ecc. oppure AX, BX, CX, ecc. Altri registri hanno invece delle funzionalità speciali (es: Program Counter, Instruction Register, Status Register, ecc.). La MEMORIA CENTRALE (o anche: Working Memory o Short Term Memory,) è costituita da una sequenza di di locazioni (o celle) di memoria, tutte di uguale dimensione. La dimensione di una cella è detta parola di memoria (memory word). Può essere di 1 byte oppure di 2, 4, 8 ecc. Ognuna di queste locazioni è distinta mediante un numero progressivo chiamato indirizzo di memoria. L'indirizzo viene utilizzato dalla CPU per specificare in quale locazione deve essere effettuata una operazione di lettura o di scrittura. Attenzione: non bisogna confondere l'indirizzo di una locazione di memoria con il suo contenuto. Ad esempio la cella di indirizzo 213 può contenere in un certo momento il valore 25. Il contenuto può essere cambiato con una operazione di scrittura. L'indirizzo di una cella è invece fisso. La memoria centrale è realizzata in generale mediante moduli di RAM (Random Access Memory) ed è una memoria volatile. Una piccola parte della memoria centrale è costituita da una ROM (Read Only Memory), che ha un funzionamento analogo a quello della RAM, ma che immagazzina informazioni in modo permanente e non può essere scritta (modificata): tale memoria è destinata a contenere le istruzioni ed i dati che devono essere sempre presenti nella memoria centrale e non devono mai essere modificati (ad esempio le istruzioni da eseguire al momento dell'accensione dell'elaboratore). Varianti evolute della ROM sono le memorie PROM, EPROM, EEROM, ecc. Il tempo di accesso ad un dato presente in una memoria RAM è sempre uguale indipendentemente da quale è la cella in cui il dato si trova. Ciò non è vero per memorie di massa come dischi magnetici, dischi ottici, nastri magnetici. Inoltre la velocità di accesso alla memoria centrale è molto superiore a quella dei dischi. I registri interni della CPU hanno un accesso a loro volta molto più veloce rispetto alla RAM. I computer di oggi utilizzano anche la memoria cache, che è una memoria di transito piccola e veloce (più veloce ma anche più costosa della RAM) che serve per rendere mediamente più rapido l’accesso ai dati contenuti nella memoria centrale. La tabella seguente riassume le caratteristiche tipiche di alcune tipologie di memoria utilizzate nei personal computer. Tipo di memoria Registri della CPU Memoria centrale Dischi magnetci Nastri magnetici Tempo di accesso < 10 ns 20 - 200 ns 20 – 30 ms Diversi secondi Capacità < 1 KB 1 - 4 GB 50 – 500 GB > 100 GB Volatile Sì Sì No No Nota: ms = millisecondi = millesimi di secondo = 10-3 sec s = microsecondi = milionesimi di secondo = 10-6 sec ns = nanosecondi = miliardesimi di secondo = 10-9 sec KB = KiloByte = 210 Byte (1024 byte, cioè circa mille) MB = MegaByte = 220 Byte (circa 1 milione) GB = GigaByte = 230 Byte (circa 1 miliardo) BUS La comunicazione tra le diverse componenti di un elaboratore avviene attraverso un insieme di linee di collegamento dette BUS. In base alla funzione svolta si possono distinguere tre tipi di bus: Bus Dati, Bus Indirizzi, Bus di controllo. Il Bus Dati, bidirezionale, trasporta i dati che devono essere trasmessi tra il processore e la memoria centrale oppure tra il processore ed una unità periferica (ad es: un disco). La dimensione (numero di linee) del bus dati determina la dimensione in bit del dato che può essere scritto o letto con una singola operazione di lettura/scrittura (es: se il bus dati ha 16 linee si scrivono/leggono due byte per volta). Il Bus Indirizzi, unidirezionale, viene utilizzato per trasmettere l'indirizzo di una locazione di memoria centrale in cui il processore deve scrivere o leggere un dato. L'indirizzo trasmesso può anche identificare una periferica con la quale il processore deve comunicare. La dimensione del bus indirizzi determina lo spazio di memoria indirizzabile (es: se il bus indirizzi ha 20 linee, lo spazio indirizzabile è di 220 celle, quindi se le celle sono di 1 Byte il totale è 1 MB). Il Bus di Controllo, bidirezionale, trasporta informazioni di controllo necessarie per la gestione dell'attività elaborativa. Ad esempio il bus di controllo contiene una linea indicata in genere con R/W il cui valore (0 o 1) indica se si deve effettuare una operazione di lettura (R=Read) o di scrittura (W= Write). LETTURA / SCRITTURA in memoria centrale Per effettuare una operazione di lettura o scrittura di un dato in memoria centrale si utilizza un Registro Dati (o MBR=Memory Buffer Register) e un Registro Indirizzi (o MAR=Memory Address Register). Le operazioni di lettura e scrittura avvengono nel modo seguente. Lettura: La CU pone nel registro indirizzi (MAR) l'indirizzo della locazione di memoria da cui si deve leggere il dato. La CU invia l’indirizzo alla memoria tramite il bus indirizzi. Un dispositivo apposito (selettore) attiva la linea collegata alla locazione indirizzata. La CU invia alla memoria sulla linea R/W del bus di controllo un bit che indica il tipo di operazione da eseguire (R=Read). Il dato presente nella cella di memoria specificata viene inviato alla CPU tramite il bus dati e viene copiato nel Registro Dati (MBR). Scrittura: La CU pone nel Registro Dati (MBR) il dato da scrivere in memoria. La CU pone nel Registro Indirizzi (MAR) l'indirizzo della locazione in cui si deve scrivere il dato. La CU invia l’indirizzo alla memoria tramite il bus indirizzi. Un dispositivo apposito (selettore) attiva la linea collegata alla locazione indirizzata. La CU invia alla memoria sulla linea R/W del bus di controllo un bit che indica il tipo di operazione da eseguire (W=Write). Il dato presente nel Registro Dati (MBR) viene inviato alla memoria tramite il bus dati e viene copiato nella cella specificata. Attenzione: il trasferimento di un dato avviene sempre mediante copia. Pertanto, ad esempio, una operazione di lettura non modifica mai la cella di memoria letta. Funzionamento del processore (ciclo di FETCH - EXECUTE) Un processore esegue dei programmi. Un programma (codice eseguibile) è costituito da una sequenza di istruzioni macchina che il processore è in grado di eseguire una per volta. Le istruzioni devono essere eseguite nell'ordine in cui si trovano, tranne quando si incontrano alcune speciali istruzioni che alterano la sequenza, causando ad esempio un salto ad un dato punto del programma. Per intraprendere l'esecuzione di un programma è necessario che questo risieda in un'area della memoria centrale. Lo stesso vale per i dati che devono essere elaborati dal programma. Programma e dati vengono caricati in memoria da un apposito modulo (programma) del Sistema Operativo, detto loader (caricatore), che li preleva di solito da una memoria di massa (ad esempio dal disco fisso). Per eseguire un programma la CPU preleva una per una le istruzioni che compongono il programma e le esegue fino a quando il programma non è terminato. Il ciclo di operazioni svolte dalla CPU per eseguire un programma è detto ciclo di FETCH-EXECUTE (preleva - esegui) e costituisce la normale attività svolta sempre e continuamente dal processore, dal momento dell'accensione fino allo spegnimento della macchina. Il ciclo Fetch-Execute fa uso di due speciali registri: Program Counter (PC): contiene l'indirizzo della cella di memoria in cui si trova l'istruzione da prelevare (se l'istruzione occupa più celle consecutive, contiene l'indirizzo della prima di queste celle ). Instruction Register (IR): contiene il codice dell'istruzione prelevata dalla memoria. Il ciclo Fetch-Execute avviene ripetendo in successione le seguenti operazioni: Fase di Fetch. Viene prelevata dalla memoria centrale (all'indirizzo indicato dal PC) l'istruzione da eseguire. Tale istruzione viene copiata nel Registro Istruzione (IR). Subito dopo aver prelevato l'istruzione, il PC viene incrementato in modo da puntare all'istruzione successiva (l'incremento deve essere pari al numero di celle occupate dall'istruzione). Fase di Execute. Viene decodificata l'istruzione presente nell'IR (fase di Decode) e viene impartita la sequenza di comandi elementari necessari per eseguire l'istruzione stessa. L'esecuzione dell'istruzione può modificare il contenuto di uno o più registri della CPU oppure di una o più locazioni di memoria centrale. In alcuni casi l'istruzione può modificare il contenuto del registro PC (es: istruzioni di JUMP) causando così un salto ad un'istruzione specifica. Le condizioni che si verificano durante l'esecuzione dell'istruzione vengono memorizzate come flag (unità di informazione binaria, cioè 0=falso o 1=vero) in un apposito registro della CPU detto Status Register (SR) o Registro dei Flag. Ad esempio ci sono flag per indicare il verificarsi di condizioni di overflow (traboccamento), carry (riporto), zero (l'istruzione ha avuto 0 come risultato), negatività (il risultato è stato negativo), ecc. Attenzione: non bisogna confondere la funzione svolta dai registri Program Counter e Instruction Register. Il Program Counter contiene l'indirizzo di una locazione di memoria nella quale si trova una istruzione del programma. Nella fase di fetch l'istruzione puntata viene copiata nel registro Instruction Register. Pertanto il PC contiene sempre l'indirizzo (puntatore) di una istruzione, mentre l'IR contiene invece una istruzione vera e propria. INTERRUZIONI (Interrupt) Il ciclo di esecuzione di un programma può subire delle interruzioni (interrupt) causate da richieste provenienti da dispositivi periferici (unità di I/O, dischi, ecc.) o anche da programma. Ciò avviene ad esempio quando si preme un tasto della tastiera oppure si fa un click con il mouse. La periferica invia una richiesta di interrupt alla CPU su una apposita linea del bus di controllo. La CPU di norma interrompe momentaneamente l'esecuzione del programma attuale per passare ad eseguire le istruzioni necessarie per servire l'interrupt (es: acquisire un carattere digitato, rilevare la posizione del mouse, ecc). Successivamente tornerà ad eseguire il programma interrotto (il meccanismo degli interrupt sarà approfondito il prossimo anno). CLOCK Il lavoro della CPU è cadenzato da un apposito dispositivo detto clock che fornisce un segnale elettrico ciclico di temporizzazione (onda quadra). La velocità di clock si misura in Hertz (1HZ = un ciclo al secondo) o multipli di Hertz (es: 1 Mhz = 1 milione di cicli al secondo, 1 GHz = 1 miliardo di cicli al secondo) e fornisce un'indicazione della velocità di lavoro di una CPU. Ogni istruzione macchina viene eseguita in un numero ben preciso di cicli di clock. Un'altra misura utilizzata per i processori è il MIPS (milioni di istruzioni per secondo).