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