Appunti di informatica 2012 Indice 1. Cos'è l'informatica ...........................................................................................................................1 2. Dati ed informazioni ........................................................................................................................2 3. Che cosa è un Elaboratore ...............................................................................................................2 4. CONCETTI DI BASE DELLE ARCHITETTURE DEGLI ELABORATORI ...............................3 4.1. CPU (Central Processing Unit)............................................................................................4 4.2. La Memoria Centrale...........................................................................................................4 4.3. Memorie di massa (o ausiliarie )..........................................................................................6 4.4. Ciclo CPU (CICLO FETCH-DECODE-EXECUTE)..........................................................6 4.5. Architettura di von Neumann ..............................................................................................7 5. CPU (per approfondire, senza entrare troppo nei dettagli)..............................................................8 5.1. Set di istruzioni macchina (per approfondire, facoltativo)................................................10 5.2. Ciclo del processore ..........................................................................................................10 5.3. CPU cache..........................................................................................................................11 5.4. Architettura di un processore basato su registri generali (facoltativo, per i più curiosi)...11 6. Analogico e digitale........................................................................................................................15 7. Riferimenti bibliografici.................................................................................................................16 1. Cos'è l'informatica [1] La parola informatica deriva da due termini: informazione automatica. Con questo termine si indica l’insieme dei processi e delle tecnologie che rendono possibile la creazione, la raccolta, l’elaborazione, l’immagazzinamento e la diffusione dell’informazione. Si occupa dello sviluppo e della ricerca nell’automatizzazione dell’informazione: ciò racchiude tutte le attività che in qualsiasi modo riguardano lo studio, la progettazione, la fabbricazione e l’impiego degli elaboratori. Queste tecnologie hanno tre funzioni principali 1. Elaborare dati per ottenere informazioni significative 2. Conservare le informazioni elaborate per utilizzarle in combinazioni con altre come dati di un nuovo processo di elaborazione 3. Organizzare le informazioni in una nuova forma in modo da renderle più comprensibili, più accattivanti o più utili Appunti di informatica, 1 2. Dati ed informazioni [1] Il concetto di informazione viene qui usato nel senso di “ciò che viene comunicato”. Le forme più importanti in cui si possono comunicare gli eventi nella vita dell’uomo solo la lingua e la scrittura; le informazioni sono quindi legate a simboli. Le informazioni possono essere vere o false, importanti o banali, utili od inutili… I dati invece hanno un significato molto più preciso se sono informazioni codificate, in forma adatta ad essere immesse e trattate da un sistema di elaborazione: i dati sono cioè una rappresentazione di informazioni I dati in se stessi non hanno significato e solo quando vengono interpretati acquistano significato: dati + interpretazione = informazione significativa Gli elaboratori non sono in grado di interpretare i dati: soltanto le persone sono capaci di ciò … 3. Che cosa è un Elaboratore [1] Macchina elettronica automatica digitale per il trattamento di informazioni Macchina indica che gli elaboratori appartengono alla stessa categoria delle macchine per stampa, delle locomotive, degli elettrodomestici Elettronica indica che il computer utilizza componenti elettronici per elaborare le informazioni Automatica significa che un elaboratore effettua in modo automatico tutte le fasi per lo svolgimento di un compito. Per far questo deve aver ricevuto una serie di istruzioni che determinano passo passo il funzionamento Digitale significa che le informazioni vengono elaborate e memorizzate in quantità discrete. Al livello più semplice le informazioni sono rappresentate dalla presenza o assenza di un impulso di elettricità simbolizzate da uno 0 (zero) o da un 1 (uno). Il computer elabora e memorizza segnali digitali basati sulle cifre binarie 0 e 1; con queste due cifre usate in combinazioni diverse si possono rappresentare tutti i dati siano essi parole, numeri, suoni o immagini Trattamento delle informazioni termine generale per indicare il lavoro che gli elaboratori sono in grado di svolgere. L’elaborazione dei dati è soltanto una fase di un procedimento più complesso chiamato ciclo di elaborazione dell’informazione. Questo ciclo comprende cinque fasi 1. Ingresso dei dati (Input) 2. Uscita dei dati (Output) 3. Memorizzazione (e recupero) 4. Elaborazione 5. Distribuzione e comunicazione Anche se l’elaborazione dei informazioni comprende compiti che richiedono una certa dose di intelligenza quando vengono svolti da una persona umana, i calcolatori odierni possono essere definiti intelligenti solo in modo molto limitato. Ad esempio un calcolatore non può prendere iniziative, fronteggiare imprevisti o dare giudizi morali. Tuttavia l’intelligenza artificiale è un’area in rapido sviluppo. Software e Hardware Un elaboratore è costituito da una parte software ed una hardware. Il software è un programma o un insieme di programmi in grado di funzionare su un computer o qualsiasi altro apparato con capacità di elaborazione (smartphone, console, navigatori satellitari e così via). Il termine è un vocabolo della lingua inglese costituito dall’unione di due parole, soft Appunti di informatica, 2 (morbido) e ware (manufatto, componente, oggetto, cosa). Il termine si contrappone tradizionalmente a hardware (traducibile con ferramenta in italiano) ovvero a tutte le componenti fisiche (visibili etoccabili con mano) di un sistema di calcolo. Le parti catalogate come componenti hardware comprenderanno quindi tutte le componenti “visibili” di un calcolatore: periferiche di input/output (stampanti, video, tastiera, disco fisso,..), e le componenti interne (CPU, RAM, ROM, scheda madre...). Alcune componenti software sono invece il sistema operativo, tutti i programmi installati, il BIOS installato nella ROM. 4. CONCETTI DI BASE DELLE ARCHITETTURE DEGLI ELABORATORI Nella schema seguente sono illustrati i principali componenti di un sistema di elaborazione. Architettura di Von Neumann CPU = Central Processing Unit (Unità centrale di elaborazione) ALU = Arithmetic Logic Unit (Unità aritmetico-logica) CU = Control Unit (Unità di controllo) I/O = Input/Output BUS = un insieme di fili per trasferire dati da un’unità all’altra (percorso dell'informazione) Il BUS consente il trasferimento dei dati da un'unità all'altra. Ve ne sono essenzialmente di tre tipi: bus dati : per trasferire i dati tra CPU e memoria e tra CPU e unità di I/O bus indirizzi : per identificare la posizione delle celle di memoria bus di controllo : per far transitare i segnali di controllo (selezionare le unità coinvolte nel trasferimento, definire la direzione) Appunti di informatica, 3 4.1. CPU (Central Processing Unit) La CPU, detta anche processore, è l’unità più importante del sistema di elaborazione, che svolge le principali operazioni di calcolo e di controllo del sistema. Nei grandi sistemi ci possono essere anche più processori. In un personal computer la CPU è collocata su un singolo chip e viene chiamata microprocessore. Le due principali componenti della CPU sono unità aritmetico-logica (ALU, Arithmetic Logic Unit) svolge operazioni aritmetiche e logiche unità di controllo (CU, Control Unit) che estrae le istruzioni dalla memoria, le decodifica e le esegue. I Registri sono le memorie di lavoro della CPU. Tra i principali registri che utilizza la CPU ricordiamo: Il Program Counter (PC) o contatore di programma: contiene l’indirizzo di memoria centrale in cui la CPU potrà trovare l’istruzione che deve essere eseguita Il registro delle istruzioni Instruction Register (IR) : contiene l’istruzione da eseguire I registri accumulatori: utilizzati come deposito temporaneo dei dati Il registro di stato :contiene informazioni riguardanti lo stato del sistema. Il Program Counter deve essere inizializzato dall’esterno con l’indirizzo della prima istruzione da eseguire per poi essere aggiornato automaticamente dall’unità centrale in modo da contenere sempre l’indirizzo dell’istruzione successiva. Nell’IR ogni istruzione del programma, dopo essere stata letta dalla memoria centrale, rimane depositata per il tempo necessario alla sua esecuzione. 4.2. La Memoria Centrale La memoria Centrale è formata da una matrice di celle identificate da un indirizzo (address) . Il contenuto delle celle si chiama word (parola) ed è l’unità logica elaborabile . Le parole possono essere di 8, 16, 32, 64 bit . Gli indirizzi sono numeri da 0...n . Appunti di informatica, 4 Le principali caratteristiche della memoria centrale sono: misura della capacità : Mbyte o GByte velocità di accesso : 10-20 ns uniformità di accesso, memoria di tipo RAM (Random Access Memory): memoria ad accesso diretto, il tempo di ritrovamento del dato non dipende dalla sua posizione è una memoria di tipo volatile, perde il suo contenuto allo spegnimento del computer l'operazione di lettura non è distruttiva l'operazione di scrittura è distruttiva, viene perso il contenuto precedente. C'è anche una memoria di tipo ROM (Read Only Memory), di sola lettura, adatta per i programmi di inizializzazione del computer (BIOS). Il BIOS è l'insieme dei programmi per far funzionare gli elementi indispensabili del computer, quali disco fisso, video e tastiera. Al boot (= all'accensione) il BIOS viene letto dalla ROM caricato in memoria RAM; sono così a disposizione le istruzioni necessarie per iniziare a caricare il sistema operativo. Ricordiamo che i computer di oggi utilizzano anche la memoria cache che è' una memoria piccola e veloce (e più costosa) che serve a compensare la differenza di velocità tra CPU e memoria RAM e tra memoria RAM e disco. Infatti... Velocità di esecuzione delle istruzioni della CPU: 1 ns ( ns= nano secondi = 0,000 000 0001 s = un miliardesimo di secondo) Tempo di accesso alla memoria RAM: 50 ns Tempo di accesso al disco: alcuni ms ( ms= milli secondo = 0,000 0001 s) Appunti di informatica, 5 4.3. Memorie di massa (o ausiliarie ) Le memorie centrali (RAM) sono molto veloci, ma sono volatili, relativamente costose e poco capienti . Le memorie di massa (disco fisso, DVD, CD ) sono caratterizzate da: basso costo elevata capacità permanenza dei dati velocità bassa (tempo di accesso ~ 10-2 sec) Illustrazione 1: Disco fisso Illustrazione 2: Schema di un cilindro del disco fisso: settori e tracce I Dischi magnetici , dischi fissi (hard disk) e dischetti (floppy), sono unità di memoria di massa ad accesso diretto. Sono organizzati in cilindri, superfici, tracce. La traccia è l'intersezione di Cilindro e Superficie ed è suddivisa in settori (10 - 100). La capacità di un settore è di generalmente 512 byte o 1 Kbyte. La ricerca (seek) richiede il tempo di posizionamento sul cilindro (3 ms per posizionamenti vicini oppure 20-100 ms per posizionamenti non contigui) e il tempo di latenza rotazionale, cioè il tempo di posizionamento sul settore (0-8 ms) per dischi che hanno velocità di 7200 giri/min. La capacità di un disco attuale(2011) varia dalle centinaia di GB (giga byte = miliardi di byte) a qualche TB (tera byte = mille miliardi di byte). I Dischi ottici (CD) hanno una capacità di 650 MB circa. Mediante un laser vengono incisi sul disco dei buchi di 1 micron (pit) che possono essere letti sempre con l'uso un laser. I DVD ed i dischi Blu Ray sono basati grossomodo sulla stessa idea dei CD, ma grazie a dei miglioramenti della tecnologia possono contenere molti più dati (4.7 GB oppure 9.5 GB per i DVD, e 54 GB per i dischi Blu Ray) . 4.4. Ciclo CPU (CICLO FETCH-DECODE-EXECUTE) L'elaborazione avviene con il reperimento da parte della Control Unit dell'istruzione da eseguire dalla memoria centrale all'indirizzo contenuto nel registro Program Counter. L'istruzione viene Appunti di informatica, 6 trasferita nel registro Instruction Register e il Program Counter viene incrementato in modo da puntare all'istruzione successiva. La CPU, dopo aver interpretato l'istruzione, emette segnali che producono la sua esecuzione. Se sono necessari calcoli, interviene l'ALU. Il procedimento appena descritto attraverso il quale la CPU esegue un'istruzione prende il nome di ciclo macchina (ciclo di CPU o ciclo Fetch-Decode-Execute), che può essere idealmente suddiviso in tre parti: Nella fase di fetch la Control Unit reperisce l'istruzione dalla memoria e viene incrementato il valore del Program Counter in modo da puntare all'istruzione successiva. Nella fase di decode l'istruzione viene interpretata Nella fase di execute la Control Unit invia segnali che rappresentano opportuni comandi per l'esecuzione. Il ciclo macchina è scandito da un temporizzatore o clock: un oscillatore al quarzo che emette segnali a intervalli di tempo regolari, all'interno di ciascuno del quale si svolge un passo elementare di funzionamento. La frequenza di oscillazione del clock determina la velocità della macchina. Tale velocità è misurata in Ghz (gigahertzz, ovvero milliardi di oscillazioni al secondo). Dato che ogni singola istruzione elementare richiede generalmente più di un ciclo di clock, la velocità dell'unità centrale può essere misurata anche in MIPS (Millions Instruction Per Second, milioni di istruzioni al secondo). 4.5. Architettura di von Neumann Con l'espressione architettura di von Neumann (o macchina di von Neumann) ci si riferisce a uno schema di progettazione di calcolatori elettronici che prende nome dal matematico John von Neumann e che fu sviluppato per il sistema IAS machine dell'Institute for Advanced Study. Illustrazione 3: Schema dell'architettura di Von Neumann: l'Unità di Controllo (CU) e l'unità aritmetica e logica (ALU) rappresentano i principali componenti dell'unità centrale di elaborazione (CPU). La memoria (RAM) e le unità di input/output sono connesse alla CPU tramite il BUS. Lo schema si basa su cinque componenti fondamentali: 1. CPU o unità di lavoro che si divide a sua volta in Appunti di informatica, 7 2. 3. 4. 5. 1. Unità operativa, nella quale uno dei sottosistemi più rilevanti è l'ALU (Arithmetic Logic Unit) 2. Unità di controllo Unità di memoria, intesa come memoria di lavoro o memoria principale (RAM, Random Access Memory) Unità di input, tramite la quale i dati vengono inseriti nel calcolatore per essere elaborati Unità di output, necessaria affinché i dati elaborati possano essere restituiti all'operatore Bus, un canale che collega tutti i componenti fra loro È importante sottolineare che tale architettura, a differenza di altre, si distingue per la caratteristica di immagazzinare all'interno dell'unità di memoria, sia i dati dei programmi in esecuzione che il codice di questi ultimi. Bisogna comunque precisare che questa è una schematizzazione molto sintetica, sebbene molto potente: basti pensare che i moderni computer di uso comune sono progettati secondo l'architettura Von Neumann. Difatti essa regola non solo gli insiemi, ma l'intera architettura logica interna degli stessi, ovvero la disposizione delle porte logiche, perlomeno per quanto riguarda la parte elementare, sulla quale si sono sviluppate le successive progressioni. Inoltre, quando si parla di unità di memoria si intende la memoria principale, mentre le memorie di massa sono considerate dispositivi di I/O. Il motivo di ciò è innanzitutto storico, in quanto negli anni quaranta, epoca a cui risale questa architettura, la tecnologia non lasciava neanche presupporre dispositivi come hard disk, CD-ROM, DVD-ROM o anche solo nastri magnetici, ma anche tecnico, se si considera che in effetti i dati da elaborare devono comunque essere caricati in RAM, siano essi provenienti da tastiera o da harddisk. 5. CPU [3] (per approfondire, senza entrare troppo nei dettagli) L'unità centrale di elaborazione, più conosciuta come CPU, è anche chiamata processore, o microprocessore, è uno dei due componenti principali della macchina a programma memorizzato di von Neumann, il modello su cui è basata la maggior parte dei moderni computer. Il compito della CPU è quello di eseguire le istruzioni di un programma (che deve essere presente in memoria). Durante l'esecuzione del programma, la CPU legge o scrive dati in memoria; il risultato dell'esecuzione dipende dal dato su cui si opera e dallo stato interno in cui la CPU stessa si trova, è può mantenere la traccia delle operazioni passate. Una generica CPU contiene: una Unità di controllo CU (Control Unit) che legge dalla memoria le istruzioni, se occorre legge anche i dati per l'istruzione letta, esegue l'istruzione e memorizza il risultato se c'è, scrivendolo in memoria o in un registro della CPU. una ALU (Arithmetic Logic Unit) che si occupa di eseguire le operazioni logiche e aritmetiche; dei registri, speciali locazioni di memoria interne alla CPU, molto veloci, a cui è possibile accedere molto più rapidamente che alla memoria: il valore complessivo di tutti i registri della CPU costituisce lo stato in cui essa si trova attualmente. Due registri sempre presenti sono: ◦ il registro IP (Instruction Pointer) o PC (Program Counter), che contiene l'indirizzo in memoria della prossima istruzione da eseguire; Appunti di informatica, 8 ◦ il registro dei flag: questo registro non contiene valori numerici convenzionali, ma è piuttosto un insieme di bit, detti appunto flag, che segnalano stati particolari della CPU e alcune informazioni sul risultato dell'ultima operazione eseguita. I flag più importanti sono: ▪ Flag di stato: Overflow: indica se il risultato dell'operazione precedente era troppo grande per il campo risultato: 0 assenza di overflow, 1 overflow Zero: vale 1 se l'ultima operazione ha avuto risultato zero, altrimenti vale 0. Carry: vale 1 se l'ultima operazione ha ecceduto la capacità del registro che contiene il risultato, altrimenti vale 0 (esempio: in un registro a 8 bit, che può rappresentare solo numeri da 0 a 255, la somma 178+250 darebbe come risultato 172, cioè 428 - 256, e il carry verrebbe posto a 1 insieme al flag di overflow). Segno: indica il segno del risultato dell'operazione precedente: 0 risultato positivo, 1 risultato negativo ▪ Flag di controllo: Interrupt: se a questo flag viene assegnato valore 1, la CPU smette di rispondere alle richieste di servizio esterne delle periferiche (i segnali delle linee IRQ) finché non viene ripristinato al valore 0, o finché non arriva dall'esterno un segnale di RESET. Oltre a queste unità possono esserne presenti altre, per esempio: una FPU (Floating Point Unit) che si occupa di eseguire calcoli in virgola mobile; una MMU (Memory Management Unit) che si occupa di tradurre gli indirizzi di memoria logici in indirizzi fisici, supportando la protezione della memoria e/o uno o più meccanismi di memoria virtuale. Una generica CPU deve eseguire i suoi compiti sincronizzandoli con il resto del sistema: perciò è dotata, oltre a quanto sopra elencato, anche di uno o più bus interni che si occupano di collegare registri, ALU, unità di controllo e memoria: inoltre all'unità di controllo interna della CPU fanno capo una serie di segnali elettrici esterni che si occupano di tenere la CPU al corrente dello stato del resto del sistema e di agire su di esso. Il tipo e il numero di segnali esterni gestiti possono variare ma alcuni, come il RESET, le linee di IRQ e il CLOCK sono sempre presenti. Una CPU è un circuito digitale sincrono: vale a dire che il suo stato cambia ogni volta che riceve un impulso da un segnale di sincronismo detto clock, che ne determina di conseguenza la velocità operativa, detta velocità di clock: quindi il tempo di esecuzione di una istruzione si misura in cicli di clock, cioè in quanti impulsi di clock sono necessari perché la CPU la completi. In effetti, una parte importante e delicata di ogni CPU è il sistema di distribuzione che porta il segnale di clock alle varie unità e sottounità di cui è composta, per fare in modo che siano sempre in sincronia: tale sistema si dirama in una struttura ad albero con divisori e ripetitori che giunge ovunque nella CPU. Nei processori più moderni (Pentium, Athlon, PowerPC) questa "catena di ingranaggi" elettronica arriva ad impiegare circa il 30% di tutti i transistor disponibili. La velocità di questa distribuzione determina in maniera diretta la massima frequenza operativa di una CPU: nessuna CPU può essere più veloce del suo critical path, cioè del tempo che impiega il clock per percorrere il tratto più lungo in tutto l'albero di distribuzione del clock. Per esempio, se il segnale di clock di una data CPU impiega un nanosecondo per attraversare tutto il chip ed arrivare fino all'ultima sottounità, questa CPU potrà operare a non più di 1 GHz, perché altrimenti le sue componenti interne perderebbero la sincronizzazione, con risultati imprevedibili (per avere un margine di sicurezza, il limite pratico sarà anzi ben minore di 1GHz). Appunti di informatica, 9 5.1. Set di istruzioni macchina (per approfondire, facoltativo) Le istruzioni di una CPU (instruction set) sono semplicemente dei numeri, detti opcode o codici operativi: in base al loro valore l'unità di controllo intraprende delle azioni predefinite, come per esempio leggere la successiva locazione di memoria per caricare un dato, oppure attivare la ALU per eseguire un calcolo, oppure scrivere il contenuto di un registro in una certa locazione di memoria o in un altro registro, oppure una combinazione di queste. Per una persona, stendere programmi scrivendo direttamente gli opcode è estremamente noioso e prono all'errore. Per questo motivo si utilizza l'assembly, che associa un simbolo mnemonico ad ogni istruzione della CPU e introduce una sintassi che permette di esprimere i vari metodi di indirizzamento in modo più intuitivo. Una caratteristica importante dell'insieme (set) delle istruzioni di una CPU è la sua ortogonalità: vale a dire, il fatto che ogni istruzione che usi i registri possa usarli tutti indifferentemente (tranne quelli "speciali" come l'IP) e che nessun registro sia in qualche modo privilegiato rispetto agli altri perché su di esso si possono compiere operazioni particolari: è stato dimostrato che un set di istruzioni ortogonali, a parità di tempo di esecuzione delle istruzioni e di numero dei registri, è più efficiente di uno non ortogonale. 5.2. Ciclo del processore Tipicamente la CPU è l'Interprete del linguaggio macchina. Come tutti gli interpreti, si basa sul seguente ciclo: Acquisizione dell'istruzione (Instruction Fetch): il processore preleva l'istruzione dalla memoria, presente nell'indirizzo (tipicamente logico) specificato da un registro "speciale" ("speciale" opposto di "generico"), il PC Decodifica (Operand Assembly o Decode): una volta che la word è stata prelevata, viene determinata quale operazione debba essere eseguita e come ottenere gli operandi, in base ad una funzione il cui dominio è costituito dai codici operativi (tipicamente i bit alti delle word) ed il codominio consiste nei brani di microprogramma da eseguire Esecuzione (Execute): viene eseguita la computazione desiderata. Nell'ultimo passo dell'esecuzione viene incrementato il PC: tipicamente di uno se l'istruzione non era un salto condizionale, altrimenti l'incremento dipende dall'istruzione e dall'esito di questa Illustrazione 4: Ciclo del processore Questo ciclo elementare può essere migliorato in vari modi: per esempio, la decodifica di una istruzione può essere fatta contemporaneamente all'esecuzione della precedente e alla lettura dalla memoria della prossima (instruction prefetch) e lo stesso può essere fatto con i dati che si prevede saranno necessari alle istruzioni (data prefetch). La stessa esecuzione delle istruzioni può essere suddivisa in passi più semplici, da eseguire in stadi successivi, organizzando la unità di controllo e la ALU in stadi consecutivi, come delle catene di montaggio (pipeline''): in questo modo più istruzioni possono essere eseguite "quasi contemporaneamente", ciascuna occupando ad un certo istante uno stadio diverso della pipeline. Il problema di questo approccio sono le istruzioni di salto condizionato: la CPU non può sapere a Appunti di informatica, 10 priori se dovrà eseguire o no il salto prima di aver eseguito quelle precedenti, così deve decidere se impostare la pipeline tenendo conto del salto o no: e in caso di previsione errata la pipeline va svuotata completamente e le istruzioni in corso di decodifica rilette da capo, perdendo un numero di cicli di clock direttamente proporzionale al numero di stadi della pipeline. Per evitare questo i processori moderni hanno unità interne (“Branch prediction unit”) il cui scopo è tentare di prevedere se, data una istruzione di salto condizionato e quelle eseguite in precedenza, il salto dovrà essere eseguito o no. Inoltre i processori possono implementare al loro interno più unità di esecuzione per eseguire più operazioni contemporaneamente. Questo approccio incrementa le prestazioni delle CPU ma ne complica notevolmente l'esecuzione, dato che per poter eseguire in modo efficiente più operazioni in parallelo la CPU deve poter organizzare le istruzioni in modo diverso da come sono organizzate dal programmatore (esecuzione fuori ordine). Una ulteriore evoluzione di questo concetto è stata implementata nei processori multicore Itanium, che implementano delle istruzioni predicative che possono o meno essere eseguite a seconda del risultato di altre, eseguite in precedenza o contemporaneamente. 5.3. CPU cache [4] La CPU cache è la cache utilizzata dalla CPU di un computer per ridurre il tempo medio d'accesso alla memoria. La cache è un tipo di memoria piccola, ma molto veloce, che mantiene copie dei dati ai quali si fa più frequentemente accesso in memoria principale. Finché la maggior parte degli accessi alla memoria avviene su dati caricati nella cache, la latenza media dell'accesso alla memoria sarà più vicina alla latenza della cache piuttosto che a quella della memoria principale. Quando il processore vuole leggere o scrivere in una data collocazione in memoria principale, inizialmente controlla se il contenuto di questa posizione è caricato in cache. Questa operazione viene effettuata confrontando l'indirizzo della posizione di memoria con tutte le etichette nella cache che potrebbero contenere quell'indirizzo. Se il processore trova che la posizione di memoria è in cache, si parla di cache hit (accesso avvenuto con successo), altrimenti di cache miss (fallimento d'accesso). Nel caso di un cache hit, il processore legge o scrive immediatamente il dato sulla linea di cache. Il rapporto tra cache hit e accessi totali è chiamato anche hit rate ed è una misura dell'efficacia della cache stessa. Nel caso di un cache miss, la maggior parte delle cache crea una nuova entità, che comprende l'etichetta appena richiesta dal processore ed una copia del dato dalla memoria. Un fallimento del genere è relativamente lento, in quanto richiede il trasferimento del dato dalla memoria principale, il cui tempo di risposta è molto maggiore di quello della memoria cache. 5.4. Architettura di un processore basato su registri generali [5] (facoltativo, per i più curiosi) In informatica l'architettura di un processore basata sui registri generali rappresenta lo schema logico di funzionamento più diffuso nella realizzazione hardware di processori per computer. In generale il processore (CPU), secondo la classica Architettura di von Neumann, comunica con gli altri dispositivi o periferiche quali le memorie non volatili e i dispositivi di input-output (I/O) tramite i Bus di collegamento, tipicamente in modalità parallela. In particolare il processore, che è un dispositivo programmabile dall'esterno dall'utente, opera richiedendo in primis le istruzioni del programma da eseguire (in linguaggio macchina) e i dati su cui operare direttamente dalla memoria non volatile per poi eseguire le operazioni di elaborazione richieste sui dati stessi; dal suo punto di Appunti di informatica, 11 vista esso quindi vede solo indirizzi o locazioni di memoria. Lo schema di principio dell'architettura di un processore basata su registri generali è riportato in Figura 1. Illustrazione 5: Un esempio di architettura basata su registri generali. Nella figura si notano una serie di componenti: la Control Unit (CU); l'Arithmetic Logic Unit (ALU); la Memoria; l'Internal Bus, il Data Bus e l'Address Bus; i registri del processore (o interni): il Program Counter (PC); il Memory Address Register (MAR); il Memory Data Register (MDR); l'Instruction Register (IR); lo Status Register (SR); i cosiddetti registri generali R1..Rn. I registri sono organi di memoria atti a memorizzare una serie di bit, che possono essere dati, indirizzi di memoria o istruzioni di programma prelevati dalla memoria del processore ed espresse in linguaggio macchina. Valori tipici del numero di bit che essi possono memorizzare sono 8, 16, 32 o 64 e il loro numero definisce la particolare architettura del processore. L'uso dei registri è giustificato dal fatto che, poiché la memoria non volatile è in genere lenta, il ricorso a locazioni di memoria aggiuntive (i registri appunto) su cui appoggiare provvisoriamente i dati è in generale cosa molto utile per il funzionamento efficiente del processore stesso. Nel seguito si descrivono nel dettaglio i vari componenti raffigurati in figura ovvero cosa fanno i dispositivi principali del processore e cosa memorizzano in particolare i registri. L'Unità di Controllo. è l'organo o unità che gestisce, controlla o presiede l'esecuzione di tutte le operazioni di elaborazione per il particolare programma da eseguire ovvero comanda tutte le altre Appunti di informatica, 12 parti del processore attraverso il pilotaggio dei componenti stessi (ALU ecc..) impartendo a questi comandi di input e facendo da supervisore; rappresenta la parte a logica sequenziale della macchina a stati generale che, a sua volta, rappresenta la logica elettronica generale del processore stesso. Ad essa spetta, ad esempio, l'interpretazione dell'istruzione che si trova di volta in volta nel registro IR; ad esso spetta abilitare alla lettura ed alla scrittura due registri tra i quali deve avvenire uno scambio di informazione. L'unità di controllo comprende una sottounità detta sequencer che altro non è che una macchina a stati che scandisce i passi o stati di un'istruzione, cominciando da una fase di fetch in cui viene recuperata e caricata una parte dell’istruzione o codice operativo che deve essere eseguita e proseguendo con la sequenza di operazioni da eseguire una volta ottenuta la decodifica dell'istruzione da parte del decodificatore di istruzione (instruction decoder). Terminata l’esecuzione dell’operazione lo stato del sequencer torna alla fase di fetch per l'esecuzione della successiva istruzione secondo il consueto ciclo del processore. Tutte le fasi del ciclo del processore avvengono attraverso l'invio ai vari componenti di un insieme di impulsi di controllo, in una sequenza temporale ben precisa. Più precisamente, ad ogni colpo di clock le linee di controllo assumono un particolare stato; il susseguirsi dei diversi stati contribuisce all'esecuzione completa di un'istruzione. Per questo motivo si può dire che una singola istruzione in linguaggio macchina viene eseguita attraverso la opportuna composizione di più micro-operazioni. La ALU., l'unità logico-aritmetica, è l'organo deputato allo svolgimento delle operazioni aritmetiche e dei confronti logici. Essa preleva gli operandi tipicamente dai registri generali, così come nei registri generali depone i risultati dei calcoli. Nelle architetture più semplici e generali è composta da blocchi che eseguono tutte le operazioni (Somma, Xor, And, Shift, Test) sugli input di dati ricevuti con un selettore in uscita che decide quale operazione desiderata selezionare sull'output, anche se tutto ciò comporta inevitabilmente un certo spreco di potenza rispetto ad implementazioni più efficienti. Essa è accoppiata ad un accumulatore che è una sorta di registro in cui viene memorizzato un dato prima di essere elaborato dall'ALU stessa. In seguito ad un calcolo l'ALU ha anche il compito di impostare alcuni dei flags del SR (Status Register) in modo da tenere traccia di determinati eventi (es. riporto di una somma). Essa una parte della logica combinatoria della macchina a stati che rappresenta a sua volta la logica di funzionamento generale del processore. La Memoria. Contiene un numero in genere molto elevato di registri nei quali vengono memorizzati i dati e le istruzioni di un programma (sottoinsieme del set completo di istruzioni in linguaggio macchina del processore) attraverso uno spazio di indirizzamento. Il tempo impiegato per accedere ad un registro di memoria è generalmente molto superiore a quello impiegato per l'accesso ad uno dei registri del processore. È per questo motivo che, per quanto possibile, si tenta di utilizzare i registri interni per effettuare le operazioni, limitando gli accessi in memoria allo stretto necessario. Pur contenendo la memoria un numero molto elevato di registri, in ciascun istante temporale solo uno di questi è abilitato a partecipare ad operazioni di lettura o scrittura: quello il cui indirizzo è contenuto nel registro MAR. Per sopperire alla lentezza della memoria RAM storicamente è stata inventata anche la memoria cache. L'Internal Bus. È un canale di comunicazione principale condiviso dai suddetti componenti ed attraverso il quale essi possono dialogare scambiandosi informazioni quali comandi di input, output ecc.. In questo contesto, il dialogo consiste nello scambio di dati binari tra registri secondo una modalità parallela. Ciò significa che un certo numero di bit viene contemporaneamente trasferito attraverso il bus da un registro mittente ad un registro destinatario. Durante un'operazione di trasferimento, i due registri implicati nella comunicazione si trovano in uno stato di lettura (destinatario) e scrittura (mittente) in modo tale da poter acquisire il dato presente sul bus e da potercelo scrivere, rispettivamente. Tutti gli altri registri sono in uno stato di “riposo” nel quale non Appunti di informatica, 13 possono né leggere i dati che circolano sul bus né influenzare lo stato del bus con i dati che contengono. Il numero di bit contemporaneamente trasferiti indica il parallelismo del bus ed è pari al numero di bit contenuti in un singolo registro. Esso caratterizza anche il parallelismo interno del processore. Il Data Bus e il registro MDR. Il Data Bus è un bus che collega la memoria con il registro MDR (Memory Data Register). Esso serve a trasferire dati in entrambi i sensi, sempre secondo una modalità parallela. Tutti i dati e le istruzioni che dalla memoria devono essere elaborati nel processore, transitano inoltre attraverso il registro MDR e solo successivamente da questo raggiungono gli opportuni registri per l'elaborazione vera e propria. Analogamente, tutti i risultati (output) di un'elaborazione che devono essere immagazzinati in memoria transitano prima per il registro MDR e solo successivamente da esso raggiungono l'esatta posizione (cella) di memoria. L'Address Bus e il registro MAR. Durante un accesso alla memoria, sia in fase di lettura che in fase di scrittura, il registro MAR (Memory Address Register) contiene l'indirizzo della posizione di memoria che viene acceduta. Questo indirizzo, trasferito all'organo memoria attraverso l'Address Bus, abilita alla comunicazione una sola tra tutte le locazioni di memoria (celle) disponibili (tipicamente in numero molto elevato). Queste funzioni di indirizzamento sono gestite generalmente da un'unità del processore detta Address Logic. Il registro PC. (Program Counter). Il valore memorizzato nel registro PC rappresenta per definizione l'indirizzo della locazione di memoria contenente la successiva istruzione da eseguire. Esso viene interrogato tipicamente all'inizio di ogni fase di fetch ed immediatamente dopo viene aggiornato alla posizione di memoria “seguente” preparandolo così per il prelievo dell'istruzione successiva. Può accadere comunque che l'istruzione prelevata rientri nella categoria delle istruzioni di salto: in questo caso si procede ad un ulteriore aggiornamento del PC durante la fase di execute dell'istruzione. Da questo deriva che lo scopo di un'istruzione di salto (condizionato) è esclusivamente quello di alterare (eventualmente) il valore del PC. Spesso il registro PC è chiamato anche IP (Instruction Pointer). Il registro IR.(Instruction Register). Questo registro ha il compito di accogliere dalla memoria (attraverso il MDR), durante una fase di fetch, l'istruzione da eseguire, quella cioè puntata dal PC. Una volta in questo registro, l'istruzione deve essere interpretata dall'unità di controllo per procedere alla eventuale fase di preparazione degli operandi ed alla fase di esecuzione. Il registro SR. Lo Status Register è un registro che memorizza una serie di bit indicativi dello stato corrente del processore. Può indicare, ad esempio, se il risultato dell'ultima operazione aritmetica effettuata dall'ALU ha dato risultato nullo, o se ha generato un riporto. I registri generali. I registri generali non hanno un preciso ruolo come gli altri, e da ciò scaturisce il loro nome. Sono utilizzati per contenere i dati in transito per un'elaborazione: gli addendi di un'addizione che l'ALU sta per effettuare, il risultato di un calcolo che l'ALU ha effettuato, un indirizzo di memoria in cui si trova un dato che dovrà essere acceduto in seguito, ecc. Un numero elevato di tali registri conferisce maggiore flessibilità nella programmazione, ma complica la struttura del processore dal punto di vista architetturale. Appunti di informatica, 14 6. Analogico e digitale In informatica ed elettronica con digitale ci si riferisce a tutto ciò che viene rappresentato con numeri discreti o che opera manipolando numeri interi. Il termine deriva dall'inglese digit, che significa cifra, che a sua volta deriva dal latino digitus, che significa dito. Si contrappone ad analogico, ovvero tutto ciò che manipola quantità continue. Di seguito l'esempio di un segnale analogico in ingresso, di come viene digitalizzato, e di come può essere distorto da una serie di passaggi analogici. Illustrazione 6: Segnale analogico di partenza Illustrazione 7: Il segnale della figura precedente digitalizzato: i valori in uscita possono assumere solo valori discreti; in altre parole possono venire rappresentati solo con dei valori interi (1,2,3,4,... etc) ma non con dei valori continui intermedi (es: 1.8756) . Appunti di informatica, 15 Illustrazione 8: Il segnale dell prim figura, se manipolato in modo analogico, può portare ad una più o meno controllata distorsione del segnale originario. Per capire meglio la differenza facciamo un esempio. State ascoltando della musica con il vostro lettore mp3. Ora volete attaccarlo allo stereo per ascoltarlo senza cuffie. Attaccate quindi con un cavetto l'uscita audio all'ingreso del vostro stereo. Il segnale in uscita dal vostro lettore sarà come quello della prima figura. Lo stereo dovrà amplificare il segnale per aumentarne la potenza (il volume). Solitamente questo viene fatto con un circuito analogico. Per motvi intrinseci al circuito di amplificazione avremo una leggera distorsione del segnale come raffigurato nella terza figura. Più è buono lo stereo, minore sarà la distorsione, ma, per quanto piccola, sarà sempre presente. Se invece il segnale in entrata viene digitalizzato (overo convertito a valoi discreti come nella seconda figura), siamo in grado di amplificare senza distorsioni il segnale della seconda figura. Facciamo un altro esempio. Analogico: se disegnate la prima figura e volete disegnarne una simile su un altro foglio, per quanto bravi non sarete mai capaci di farla uguale. Digitale: se prendete disegnate la prima figura seguendo i quadrettini di un foglio di carta millimetrata, siete in grado di riprodurne quante copie volete tutte esattamente identiche. E' evidente i quadretti del vostro foglio sono troppo grandi, un approccio analogico probabilmente è migliore. Riuscendo ad usare dei quadretti molto piccoli, al contrario, l'approcio digitale sarà sicuramente più comodo e sicuro. Nelle figure riportate sopra è evidente che il segnale analogico, seppur sporco, è più vicino a quello di partenza. Se però migliorate la vostra digitalizzazione (“usate una carta con quadretti più piccoli”, per tornare alla metafora precedente), otterrete un disegno molto più simile alla prima figura. 7. Unità di misura Prefissi: T=1012 (tera) G=109 (giga) M=106 (mega) K=103 (kilo) 1 bit= 1 binary digit = 1 carattere binario, può assumere i soli valori 0 o 1 Byte = 8 bit Hz = Hertz = 1/s unità di misura della frequenza, ovvero numero di …. al secondo Appunti di informatica, 16 8. Riferimenti bibliografici [1] Appunti di Laboratorio di Programmazione e Calcolo per Applicazioni Chimiche, A. M. Ferrari, E. Venturino 2003 [2] http://it.wikipedia.org/wiki/Architettura_di_von_Neumann [3] http://it.wikipedia.org/wiki/CPU [4] http://it.wikipedia.org/wiki/CPU_cache [5] http://it.wikipedia.org/wiki/Architettura_di_un_processore_basato_su_registri_generali Appunti di informatica, 17