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