appunti

Transcript

appunti
Scopo di questa lezione è la descrizione dell’architettura di una macchina di Von Neumann.
Alcune unità di misura che verranno impiegate:
- bit, unità fondamentale per il calcolo in informatica, può essere 0 o 1 (oppure VERO o FALSO… rappresenta
due diversi stati, non due numeri!);
- byte, stringa (vettore) di 8 bit, es. [10011100];
- tempo, si misura in secondi s;
- frequenza, si misura in Hertz, Hz = 1s; 1Hz = 1 evento al secondo, 10Hz = 10 eventi al secondo.
- Ampiezza di banda (di trasmissione) Æ bit/s (b/s).
I prefissi Kylo, Mega, Giga e Tera nell’informatica non rappresentano 103, 106, 109, 1012, come nel caso comune.
Avendo a disposizione 2 bit, posso codificare 4 livelli diversi: 00, 01, 10, 11, cioè 2^2 livelli.
Avendo a disposizione 3 bit, posso codificare 8 livelli diversi: 000, 001, 010, 011, 100, 101, 110, 111 cioè 2^3 livelli.
Avendo a disposizione N bit, posso codificare 2^N livelli diversi.
Kylo Æ 2^10 = 1024
Mega Æ 2^20 = 1048576
Giga Æ 2^30 = 1073741824
Tera Æ 2^40 = 1099511627776
Attenzione! 1 kylobyte = 1024 * (8 bit) = 8192 bit.
Una delle idee importanti da sottolineare è la superiorità del digitale rispetto all’analogico. Un processo di misura /
trasmissione di dati, che tipicamente avviene in un calcolatore, è un processo rumoroso, cioè: ripetendo più volte la
stessa misura, si ottengono risultati diversi. Ad esempio, la rete elettrica a 50Hz in Italia introduce delle oscillazioni a
50Hz nei segnali che misuriamo all’interno di una stanza. Dunque, una misura analogica è una misura intrinsecamente
rumorosa. Supponiamo però di misurare dei dati che possono essere solo 0 oppure 1, nella logica del PC possono
essere, ad esempio, 0V e 5V. Dal momento che l’influenza del rumore è piccola rispetto al segnale, è difficile scambiare
un uno per uno zero! Quindi la precisione iniziale si mantiene. La stessa cosa non può essere detta per un segnale
analogico: dopo che il segnale è stato trasmesso per un numero alto di volte, il rumore può avere completamente
alterato il segnale originale! Invece per un segnale digitale, ogni volta che viene ritrasmesso, il segnale può essere
rigenerato in maniera conforme all’originale.
Le componenti principali di un calcolatore sono: CPU (central processor unit, unità di calcolo principale), la memoria e
le periferiche. Tali elementi sono connessi attraverso un bus.
La piattaforma su cui sono montate alcune componenti del PC (processore, memorie, modem interno, bus di sistema) è
detta scheda madre (mother board). Sulla scheda è alloggiato un bus di sistema per la comunicazione tra le diverse
componenti.
Processore: è il vero cuore del sistema. Controlla le funzioni del computer, esegue le operazioni aritmico-logiche,
elabora i dati. All’interno della CPU, si individuano due diversi sottosistemi: il datapath, un insieme di circuiti in grado
di effettuare operazioni (es. addizione, operazioni logiche) sui dati; il controller, un insieme di circuiti in grado di
interpretare un programma e fare eseguire alle altre componenti del calcolatore le istruzioni del programma. Mentre una
volta venivano impiegati componenti discreti (cioè componenti elettronici singoli dalle dimensioni tali da poter essere
manipolati da un operatore umano) oggi si parli di circuiti integrati. Dal punto di vista fisico, i circuiti logici che
compongono una CPU sono costituiti da milioni di transistor (microscopici interruttori acceso/spento) collegati tra loro
da sottilissimi fili. I circuiti vengono “stampati” su una sottile lamina di silicio, senza che sia necessario impiegare
componenti discreti.
La legge di Moore, verificata almeno per il periodo dal 1970 ad oggi, dice che il numero di transistor inseribili in un
circuito integrato raddoppia ogni 18 mesi, grazie al progresso tecnologico in atto. La legge appare limitata solo da
alcuni limiti fisici della materia, per cui ci stiamo avvicinando al limite (fino ad ora si progettano circuiti con le leggi
dell’elettromagnetismo classico – tra non molto bisognerà considerare gli effetti quantistici, dal momento che le
dimensioni dei componenti elettronici saranno infinitesimali).
Ogni modello di microprocessore è in grado di riconoscere solo programmi scritti nel proprio linguaggio macchina.
Ogni modello di microprocessore, ha un proprio linguaggio macchina, diverso da quello di altri processori. Il linguaggio
macchina contiene tutte e sole le istruzioni che possono essere eseguite direttamente dal microprocessore.
Ogni istruzione del linguaggio macchina viene eseguita dal microprocessore svolgendo una serie di operazioni
elementari. Il numero di operazioni elementari necessario per completare l’esecuzione di un’istruzione in linguaggio
1
macchina è dell’ordine di 7-10. Una tipica istruzione del linguaggio macchina può essere, ad esempio, il prelievo di un
dato dalla memoria, oppure la somma di due numeri, …
Il tempo di clock è uno dei parametri caratteristici di un processore. E’ il tempo necessario per eseguire una singola
istruzione elementare. Oggi i PC arrivano a lavorare a frequenze di 3 GHz. Se due processori utilizzano lo stesso
linguaggio macchina (quindi i due processori effettuano le stesse operazioni elementari per eseguire una istruzione in
linguaggio macchina) è possibile confrontarli direttamente paragonando i loro tempi di clock. Ma se due processori
utilizzano linguaggi macchina diversi, il confronto non può essere fatto, dal momento, per eseguire la stessa opera
istruzione del linguaggio macchina, i due processori possono eseguire un numero di operazioni elementari diverso.
Quindi non è detto che un processore Intel a 2GHz sia più veloce di un processore Athlon a 1.7GHz!
Tra l’altro, le prestazioni di un PC non sono solo le prestazioni della CPU. Altri fattori (es. velocità del bus) influiscono
sulla velocità complessiva della macchina.
Per paragonare tra di loro diversi computer vengono allora utilizzati dei banchmark, ovvero dei compiti standard di
riferimento che si ritiene possano essere indicativi dell’attività caratteristica svolta da un PC. A seconda del compito da
svolgere (es. calcolo 2D, calcolo 3D, word processor, grafica, …) un PC può risultare più o meno veloce di un altro. Ciò
dipende, tra le altre cose, dal modo in cui è stato progettata la CPU (alcuni processori sono più indicati di altri, ad
esempio, per l’esecuzione di calcoli ad alta precisione; altri lo sono per applicazioni grafiche, etc…).
In una macchina di Von Neumann, un programma deve essere caricato in memoria per essere eseguito. Ciò che c’è in
memoria è il codice macchina, che può essere capito dalla CPU, ed è dunque pronto per l’esecuzione. Alla CPU verrà
dunque inoltrata la prima istruzione del programma. Per ogni istruzione, il processore esegue tre operazioni: fetch
(prelievo dalla memoria dell’istruzione da eseguire, caricamento della stessa all’interno della CPU); decode (la CPU
interpreta l’operazione); execute (il processore esegue le operazioni che sono indicate nell’istruzione).
Abbiamo dunque visto che il processore preleva l’istruzione dalla memoria e la mette da qualche parte… Ma dove?
All’interno del processore vi sono dei registri, ovvero dello spazio utilizzato come “memoria interna” del processore. Il
numero di registri è in genere limitato (24-36). La CPU utilizza i registri per memorizzare le istruzioni, i dati da
elaborare, i risultati parziali o finali delle elaborazioni.
Dal momento che esistono compiti molto specializzati che necessitano di architetture particolari per essere eseguiti con
efficienza, spesso i computer sono equipaggiati con co-processori. Questi sono processori specializzati per effettuare
determinati compiti (es. rendering di scene 3D, calcolo scientifico, …) a cui la CPU principale delega tali compiti. Il
coprocessore porta a dei miglioramenti delle prestazioni per il solo ambito per il quale è stato progettato.
Ad oggi vengono anche impiegati sistemi multiprocessore (o paralleli), nei quali due o più processori operano
“simultaneamente” sui dati. L’utilizzo di più processori può portare anche ad un risparmio energetico (due processori a
1GHz consumano meno di a processore a 2GHz), ma deve esserci una gestione intelligente della divisione dei compiti
tra i processori. Se questa non viene realizzata, ci possono essere dei problemi (es. due processori che cercano di
accedere contemporaneamente alla stessa area di memoria per scrivere un dato…).
Un altro componente fondamentale dell’architettura di Von Neumann è la memoria centrale nella quale vengono
immagazzinati due tipi diversi di informazione: i programmi ed i dati. La capacità della memoria si misura in byte (è la
quantità di informazione che può contenere). Ad. Esempio, 256MByte sono l’equivalente di otto enciclopedie da 1
volumi. Oggi è normale, per un PC, avere una memoria di 2GByte.
Per quanto riguarda i programmi, una parte della memoria centrala viene riservata ai programmi del sistema operativo,
che gestiscono le funzionalità di base del PC. Tale zona di memoria è riservata, cioè non viene modificata durante il
funzionamento dell’elaboratore. Dati e programmi occupano il resto della memoria centrale: vengono caricati in
memoria quando servono, mentre la memoria viene liberata al termine del loro utilizzo.
Abbiamo detto che la memoria è organizzata in bit, quindi in byte. In realtà, quando la CPU accede alla memoria, legge
una quantità di dati detta “word”, la cui dimensione tipica è di 4 byte (32 bit). La memoria viene dunque vista come un
insieme di “parole”. Ciascuna parola di 32 bit costituisce l’elemento che viene letto ad interpretato dalla CPU e può
essere un’istruzione o un dato. Esistono anche architetture con parole di diversa dimensione (la prossima generazione di
calcolatori sarà a 64 bit).
Tipicamente, la CPU identifica un dato o un istruzione in memoria per mezzo di un indirizzo. La minima entità
indirizzabile è 1 byte, ma spesso la CPU accede ai dati 1 word alla volta. Per ogni word, la CPU può identificare 4
diversi byte.
La memoria è caratterizzata da: tempo di accesso (tempo impiegato dal processore per accedere ad uno specificato
indirizzo), tempo di trasferimento (quantità di dati trasferita in una unità di tempo, anche ampiezza di banda). E’ inoltre
2
caratterizzata dalla dimensione e dal costo per byte. In generale, più una memoria è veloce, più è alto il suo costo. La
CPU può leggere dati o istruzioni dalla memoria, oppure può scrivere nella memoria.
Vi sono memorie volatili e memorie permanenti. Le prima conservano il loro contenuto fintanto che il computer è
attaccato alla presa elettrica, mentre le seconde lo conservano anche se non alimentate (per un tempo che può essere di
anni o decenni, e che, ai fini pratici, può essere considerato infinito). Non abbiamo particolare confidenza con la
memoria volatile, che spesso è nascosta all’interno del PC. Conosciamo bene le memorie non volatili (Hard disk, CD,
floppy, …).
La memoria principale del sistema è una memoria volatile. E’ detta RAM, Random Access Memory, perché il tempo di
accesso ad una cella di memoria non dipende dalla sua posizione fisica. Quando il PC si avvia, la RAM è azzerata. La
prima cosa che succede è che la RAM viene inizializzata con il SW del sistema operativo, che serve per l’accensione ed
il funzionamento del computer. Nella RAM vengono poi caricati e scaricati programmi e dati su richiesta dell’utente.
Viè anche una ROM (Read only memory), nella quale ci sono le informazioni di base, ad esempio, per l’avvi del
computer (BIOS).
Ovviamente, più una memoria è veloce e maggiormente performante è il computer in generale. Dal momento che il
costo della memoria è proporzionale alla velocità della stessa, nei sistemi moderni si realizza una gerarchia di memorie.
A livello più alto ci sono memorie più piccole, veloci e costose (registri, cache). A livello intermedio si colloca la RAM.
A livello più basso le memorie sono più lente, ma meno costose, e permettono l’archiviazione dei dati per lunghi periodi
di tempo (hard disk, CD, DVD, nastri, …).
La memoria è dunque organizzata in maniera gerarchicha. Si sfruttano i principi di località temporale e spaziale per
ottimizzare i tempi di accesso ai dati. Tali principi dicono che, se ho utilizzato un dato di recente, ho un’alta possibilità
di riutilizzarlo (località temporale). Inoltre, se uso un dato in una certa posizione, ho buone probabilità di utilizzare
anche i dati che gli sono vicini (località spaziale). Per analogia, si pensi ad una biblioteca, nella quale il bibliotecario ha
a disposizione la propria scrivania (poco capiente, ma di accesso immediato), gli scaffali della biblioteca, ed il deposito
della biblioteca (molto capiente, di accesso lento). Se un libro viene restituito da un utente, può darsi che sia un libro
interessante o alla moda; conviene allora tenerlo sulla scrivania per renderlo subito disponibile al prossimo utente che lo
richiederà (località temporale). Se un utente chiede il primo tomo dei “Fratelli Karamazov”, probabilmente sarà
interessato anche ai tomi due, tre, … dieci dello stesso libro. Quindi, quando si va a prelevare il primo tomo, conviene
prelevare anche gli altri dieci, in modo da averli disponibili sulla scrivania (località spaziale). Vediamo allora come
funziona la gerarchia della memoria in un moderno computer. Al vertice della gerarchia ci sono i registri della CPU
(circa 1KB di spazio). Al secondo livello c’è la cache, ovvero una memoria RAM progettata per avere tempi di accesso
ridotti e per lavorare a frequenze elevate (circa 1M di spazio). La cache è l’analogo della scrivania per il bibliotecario:
ci stanno pochi libri, ma la loro reperbilità è immediata. La cache si divide in primo livello (integrata direttamente sul
processore) e secondo livello (su un chip a parte). Vi è poi la memoria centrale del sistema (la RAM comunemente
detta), nella quale risiedono il sistema operativo, i programmi ed i dati durante il funzionamento del calcolatore. Nella
RAM, al momento dell’avvio, viene caricato il sistema operativo. La RAM è condivisa da tutti i programmi in
esecuzione sul calcolatore. A livello più basso si trovano poi Hard Disk, CD, DVD, nastri magnetici, etc… Le
informazioni che risiedono in tali supporti possono essere mantenute per un tempo indefinito. Man mano che un dato /
programma viene utilizzato, ne viene effettuata una copia verso le memorie di più alto livello, in modo che le
informazioni possano essere reperite alla svelta dalla CPU. Quando il programma / dato (o parti di esso) non serve più,
viene eliminato dalle memorie di alto livello, ma continua a risiedere nelle memorie di basso livello. Per un calcolatore
efficiente è dunque importante avere una cache di dimensioni adeguate, gestita in maniera ottimale secondo i principi di
località spaziale e temporale.
Un ulteriore componente di un calcolatore è il bus, in pratica il canale fisico che mette in comunicazione la CPU con la
memoria e le altre periferiche. Il bus è composto da n fili che trasportano n bit contemporaneamente. Ovviamente
l’ampiezza del bus influenza la velocità del computer (un bus più grande può trasportare una quantità maggiore di dati).
Per la memoria centrale, la velocità di lettura / scrittura è talmente elevata che c’è bisogno di un bus speciale per
metterla in comunicazione con la CPU. Inoltre, alcune periferiche possono utilizzare dei bus “personali” (locali) per
comunicare con la CPU. Sul bus, in ogni momento, possiamo trovare: un dato in fase di trasferimento; un indirizzo, che
identifica per esempio la posizione di memoria alla quale la CPU vuole accedere; un segnale di controllo, ad esempio
quello che dice che la CPU vuole comunicare con lo schermo per inviargli dei dati, oppure un segnale per definire la
direzione dello scambio (lettura o scrittura).
Altri componenti sono le periferiche di sistema (schermo, stampante, …); per ogni periferica si identificano tre
componenti: device (è il dispositivo fisico, es. la stampante); controller (è la scheda elettronica che si occupa di
controllare il device); device driver, è il software che si occupa del corretto funzionamento del controller: ovviamente
tale software deve essere caricato in memoria. Il controller è realizzato su un circuito stampato: riceve ordini dalla CPU,
3
sulla base di tali ordini controlla il dispositivo fisico (es. per la stampa di un carattere su carta). Il driver è il programma
che gestisce la periferica.
Le periferiche sono collegate attraverso il sistema tramite delle porte, che possono essere seriali o parallele. Una porta
seriale trasmette 1 bit alla volta, ed è utile in genere per dispositivi che non richiedono un elevata velocità di
trasmissione (es. modem). Una porta parallela trasmette invece n bit per volta (es. per le stampanti). Tra le altre porte
sono da ricordare: SCSI; USB (sono porte seriali con un’elevata capacità di trasmissione dei dati – consentono anche di
portare l’alimentazione alla periferica, e di collegare in serie fino a 127 dispositivi – permettono inoltre di mettere o
togliere i dispositivi con il PC acces, hot plugging); FireWire, hanno caratteristiche simile alla porta USB, ma sono più
veloci (fino a 800Mb/s), ma sono più costose; Wi-Fi, per la connessione senza cavi, via radio; infrarossi, la porte
devono essere allineate due porte all’infrarosso in quanto lo scambio dei dati avviene lungo la retta, usate ad esempio
per collegare cellulare e PC.
Le memorie di massa, ovvero le memorie a più basso livello nella scala gerarchica, sono gestite come periferiche (es.
hard disk, DVD, CD, chiavi USB, . Dimensioni tipiche sono: Floppy 1.4MB, Zip (nastri magnetici) 250MB, Hard disk
60GB, CD 600MB, DVD 6G.
Analizziamo un po’ più a fondo il disco fisso. E’ un supporto magnetico con capacità (oggi) di centinaia di GB. E’
costituito da una serie di dischi chiusi all’interno di una camera in assenza di aria, per fornire protezione dalla polvere.
Le informazioni sono memorizzate su ciascuno dei due lati del disco. I dischi possono ruotare attorno al perno. Un
insieme di testine, una per ciascun lato del disco, legge e scrive i dati muovendosi avanti / indietro in senso radiale.
Tradionalmente il disco viene diviso in tracce (concentriche) e settori (porzioni interne a ciascuna traccia). L’Hard disk
ruota a velocità costante. La modalità di accesso è casuale (per contrapposizione, una modalità sequenziale è quella che
obbliga a percorrere tutti i dati per arrivare alla posizione cercata, come avviene per un nastro), quindi dsi può decidere
di scrivere / leggere una qualsiasi zona del disco avendo un tempo di accesso praticamente costante. Per eseguire
un’operazione di lettura (o scrittura), la testina riceve l’indirizzo al quale leggere (scrivere), costituito dal numero di
traccia e di settore, e la quantità i byte da trasferire; si muove posizionandosi sulla traccia specificata nell’indirizzo;
aspetta che arrivi il settore specificato (il disco è in rotazione); esegue l’operazione di lettura o scrittura. All’accensione
del PC, il disco fisso si mette in rotazione (può essere “spento” in alcuni casi per risparmiare energia). I file possono
essere memorizzati sul disco fisso anche in posizioni non contigue (file frammentati). Il sistema operativo mantiene in
una zona del disco fisso una tabella dei file, dove sono memorizzate le informazioni relative ai vari frammenti di file
(dove si trovano sul disco fisso), le dimensioni dei file, etc…. Quindi, per leggere un file, bisogna fare riferimento a tale
informazione. Sistemi operativi diversi possono gestire il disco fisso in modo diverso. Nel caso in cui i file siano molto
frammentati (ciò può succedere quando si eseguono numerose operazioni di lettura / scrittura), la lettura di un filepuò
diventare lenta (bisogna recuperare l’informazione da zone diverse del disco fisso). E’ allora utile eseguire una
deframmentazione del disco.
Floppy disk, sono in via di estinzione (piccola capacità, lenti).
Nastri magnetici: grande capienza, accesso sequenziale. Sono usati per la loro affidabilità.
CD: dispositivi a lettura ottica di grande capacità. La superificie del CD è scolpita in modo da rappresentare 0 oppure 1
lungo una spirale concentrica. E’ possibile l’accesso casuale, ma è abbastanza lento; mlto meglio usare i CD per
ascoltare musica o vedere film, dove l’accesso ai dati è sequenziale.
DVD, simili ai CD ma con più strati scolpiti, ciò permette di incrementare la capacità di immagazzinazione dei dati. I
limiti sono simili a quelli dei CD.
Vi sono poi periferiche di input: tastiera, mouse, microfono, scanner, …
Mouse: meccanico, una pallina rotola e aziona due sensori di movimento ortogonali. Ottico: fotodiodo + raggio
luminoso per detettare gli spostamenti sulla superficie di appoggio.
Periferiche di uscita: schermo, stampante, casse audio.
Schermo: organizzazione a pixel (picture element). Ogni pixel ha tre componenti Red Green Blue (RGB), per sintesi
additiva della luce si ottengono gran parte dei colori. Dal momento che il numero di pixel da gestire è molto elevato,
ogni PC è oggi dotato di una scheda grafica che si occupa della gestione dello schermo (come il copreocessore).
Caratteristiche dello schermo: risoluzione (numero di pixel), è da correlare alla dimensione per definire la nitidezza
complessiva dello schermo. Schermi CRT (Catode Ray Tube) Æ stessa tecnologia dei vecchi televisori, un cannone
elettronico generara un fascio di elettroni che viene orientato grazie ad un campo magnetico. Il fascio di elettroni arriva
su dei fosfori R, G, B che si “accendono” in maniera proporzionale all’intensità del fascio. Il fascio deve muoversi
4
lungo tutta la direzione dello schermo per rinfrescarlo per intero. Oggi sono molto più diffusi gli schermi LCD (Liquid
Crystal Display), nei quali non viene utilizzato il cannone elettronico, quindi l’ingombro ed il consumo energetico sono
ridotti. I cristalli liquidi, per ogni celletta dello schermo, possono essere orientati mediante l’utilizzo di un campo
elettrico locale; a seconda dell’orientamento dei cristalli liquidi, questi lasciano passare più o meno luce, e modulano in
questo modo l’intensità della luce per il singolo pixel; anche in questo caso ogni pixel è diviso in componenti R, G, B.
Uno dei problemi per i primi schermi era l’angolo di visione ridotto. Schermi al plasma: ogni celletta contiene plasma, il
plasma è colpito da un raggio di elettroni che genera raggi ultravioletti che stimolano i fosfori R, G, B che si illuminano.
Per ora sono ancora costosi, hanno un angolo di visione più ampio rispetto agli LCD.
Per le stampanti, parametri significativi sono la risoluzione (punti per pollice, dot per inch) e la velocità (pagine al
minuto). Stampanti ad aghi Æ non più utilizzate. A getto d’inchiostro: ugelli spruzzano l’inchiostro, basso costo.
Stampanti laser: la modalità di stampa è simile a quella delle fotocopiatrici: l’inchiostro viene attirato da una superficie
che è stata caricata elettricamente da un raggio laser nelle zone contenenti l’immagine, e viene poi trasferito sulla carta
e fissato mediante riscaldamento il fascio laser può essere anche molto sottile, permettendo una ottima qualità di
stampa.
Modem (Modulator / Demodulator), converte il segnale digitale del PC in un segnale analogico per la trasmissione sulla
linea telefonica, principale parametro è la velocità (56kb/s tipica), può essere utilizzato come fax / segreteria telefonica
se integrato con un opportuno SW.
La “rete” ha bisogno di periferiche per funzionare: si può usare un modem, connettendosi via telefono ad un provider
(ente che eroga il serivizio di rete). Utilità della rete è proporzionale al quadrato del numero di utenti…
Bandwitdh scaling law: l’ampiezza di banda raddoppia ogni circa 2 anni, si applica a diversi componenti.
5