vuoi
o PayPal
tutte le volte che vuoi
ATTENZIONE!!!
Quando si parla di kilobyte, megabyte, etc. Si parla di potenze di 10 ma in realtà non si parla di un numero esatto.
3 3
Ad esempio 1 kilobyte = 1024 byte è calcolato con valore 10 ma notiamo che tra 1,024 KB e 10 KB si ha un errore del
2%.
Alle fondamenta del progetto dei moderni computer ci sono “8 grandi idee”:
1. Progetto per la Legge di Moore: la legge di Moore afferma che le risorse dei circuiti integrati
raddoppiano ogni 18 mesi (quindi quadruplicano ogni 3 anni). Poiché la progettazione dei
computer può richiedere anni durante i quali le risorse disponibili per chip possono
facilmente raddoppiare o addirittura quadruplicare tra l’inizio e la fine del progetto, gli
architetti informatici devono prevedere dove si troverà la tecnologia al termine del progetto,
piuttosto che progettare da dove iniziano.
2. Utilizzare l'astrazione per semplificare la progettazione: una delle principali tecniche di
produttività per hardware e software consiste nell'utilizzare astrazioni per caratterizzare il
progetto a diversi livelli di rappresentazione; i dettagli di livello inferiore sono nascosti per
offrire un modello più semplice ai livelli più alti.
3. Rendere veloce il caso comune: rendere veloce il caso comune tenderà a migliorare le
prestazioni più che ottimizzare il caso raro
4. Prestazioni tramite parallelismo: sin dagli albori dell'informatica, gli architetti informatici
hanno offerto progetti che ottengono di più prestazioni computando operazioni in parallelo.
5. Prestazioni tramite pipeline: la pipeline è un particolare modello di parallelismo che
consiste nel dividere le operazioni in piccole fasi, ad esempio recupero, decodifica,
esecuzione. Mentre viene eseguita l'istruzione i, i+1 viene decodificata e viene recuperata
i+2.
6. Prestazioni tramite previsione: in media, può essere più veloce indovinare e iniziare a
lavorare piuttosto che aspettare finché non si ha la certezza, presupponendo che il
meccanismo di recupero da una previsione errata non sia troppo costoso e che la previsione
sia relativamente accurata.
7. Gerarchia delle memorie: I programmatori desiderano che la memoria sia veloce, capiente
ed economica, poiché la velocità della memoria spesso influisce sulle prestazioni, la capacità
limita la dimensione dei problemi che possono essere risolti e il costo della memoria oggi
rappresenta spesso la maggior parte del costo del computer. Possiamo affrontare queste
richieste contrastanti con una gerarchia di memorie, con la memoria per bit più veloce, più
piccola e più costosa in cima alla gerarchia e quella più lenta, più grande ed economica per
bit in fondo. Le cache danno l'illusione che la memoria principale sia veloce quasi quanto il
vertice della gerarchia e grande ed economico quasi quanto il fondo della gerarchia.
8. Affidabilità tramite ridondanza: i computer non devono solo essere veloci; devono essere
affidabili. Poiché qualsiasi dispositivo fisico può guastarsi, rendiamo i sistemi affidabili
includendo componenti ridondanti che possono subentrare quando si verifica un guasto e
aiutare a rilevare i guasti.
Ogni programma è composto come segue
• Software applicativo: costituito da milioni di righe di codice
• Software di sistema: è composto da
- Software: esso fornisce servizi comunemente utili,
inclusi sistemi operativi, compilatori, caricatori e
assemblatori.
- Compilatore: traduce il codice HLL in codice macchina.
- Sistema Operativo: è un programma di supervisione
che gestisce le risorse di un computer a vantaggio dei
programmi eseguiti su quel computer; si occupa quindi
di gestire input/output, di gestione la memoria e
l'archiviazione, di pianificare le attività e condividere le
risorse.
• Hardware: processore, memoria, controller I/O
Un’istruzione è un comando che l'hardware del computer comprende e a cui obbedisce.
Un assembler è un programma che traduce una versione simbolica delle istruzioni in la versione binaria.
Un linguaggio di alto livello è un linguaggio che fornisce
produttività e portabilità e tratta un livello di astrazione più
vicino al dominio del problema
Un linguaggio assembly è una rappresentazione simbolica e
testuale delle istruzioni macchina.
Un linguaggio macchina è una rappresentazione con cifre
bianarie delle istruzioni macchina e dei dati codificati.
I cinque componenti classici di un computer sono input, output, memoria,
datapath e controllo, con gli ultimi due a volte combinati e chiamati
processore (o CPU) dell'unità di elaborazione centrale. Questa organizzazione
è indipendente dalla tecnologia hardware: puoi collocare ogni pezzo di ogni
computer, passato e presente, in una di queste cinque categorie.
La CPU (central processor unit), chiamato anche processore, è la parte attiva
del computer, che contiene il percorso dati e il controllo e che aggiunge
numeri, testa numeri, segnala ai dispositivi I/O da attivare e così via.
• datapath: è il componente del processore che esegue operazioni
aritmetiche.
• controllo: è il componente del processore che comanda il percorso dati,
la memoria e i dispositivi I/O secondo le istruzioni del programma.
La memoria è l'area di archiviazione in cui vengono conservati i programmi durante l'esecuzione e che contiene i dati
necessari ai programmi in esecuzione.
Ci sono però diverse tipologie di memoria:
• memoria ad accesso casuale dinamico (DRAM): è una memoria
costruita come un circuito integrato; fornisce accesso casuale a
qualsiasi posizione. I tempi di accesso sono di 50 nanosecondi
• memoria cache: è una memoria piccola e veloce che funge da
buffer per una memoria più lenta e più grande. Tipicamente SRAM.
• memoria statica ad accesso casuale (SRAM): anche la memoria è
costruita come circuito integrato, ma più veloce e meno densa della
DRAM.
SRAM e DRAM sono memorie volatili: vengono utilizzate per contenere
dati e programmi mentre sono in esecuzione; ma abbiamo bisogno di
memoria non volatile utilizzata per archiviare programmi e dati tra le
esecuzioni.
Le memorie sono classificabili come:
• la memoria primaria (o principale) è una memoria utilizzata per conservare i programmi mentre sono in esecuzione;
tipicamente è costituito da DRAM nei computer di oggi.
• la memoria secondaria è una memoria non volatile utilizzata per archiviare programmi e dati tra una corsa e l'altra;
tipicamente è costituito da
- il disco magnetico (o disco rigido) nei server è una forma di memoria secondaria non volatile composta da piatti
rotanti rivestiti con materiale di registrazione magnetico. Poiché si tratta di dispositivi meccanici rotanti, i tempi
di accesso sono compresi tra 5 e 20 millisecondi.
- la memoria flash nei PMD e SSD è una memoria a semiconduttore non volatile. È più economica e più lenta della
DRAM ma più costosa per bit e più veloce dei dischi magnetici. I tempi di accesso vanno dai 5 ai 50 microsecondi.
cos
cos = ×
1
= 2
(1 + ( × ))
2
≈
N.B. il costo e l’area del wafer sono fissi, mentre il tasso di difetti è determinato dall’architettura e dalla
progettazione del circuito. Il valore di dies per wafer è sempre maggiore di 1 in quanto i chip sono rettangolari
mentre il wafer ha forma circolare, per cui parte dell'area del wafer in corrispondenza del bordo è inutilizzata.
Una delle astrazioni più importanti è l'interfaccia tra l'hardware e il software di livello più basso: l'architettura del set di
istruzioni (ISA), o semplicemente l'architettura, di un computer. L'architettura del set di istruzioni include tutto ciò che i
programmatori devono sapere per far funzionare correttamente un programma in linguaggio macchina binario, comprese
le istruzioni, i dispositivi I/O e così via. In genere, il sistema operativo incapsulerà i dettagli relativi all'esecuzione dell'I/O,
all'allocazione della memoria e altre funzioni del sistema di basso livello.
L’interfaccia binaria dell'applicazione (ABI) è invece la parte utente del set di istruzioni più le interfacce del sistema
operativo utilizzate dai programmatori dell'applicazione; l’ABI definisce quindi uno standard per la portabilità binaria tra
computer. Si noti che distinguiamo l'architettura del set di istruzioni da un'implementazione dell'architettura:
un'implementazione è un hardware che obbedisce all'astrazione dell'architettura. Questa interfaccia astratta consente a
qualsiasi implementazione con costi e prestazioni variabili di eseguire software identici.
ABI = ISA + interfaccia SW di sistema
Il tempo è la misura delle prestazioni del computer: il computer che esegue la stessa quantità di lavoro nel minor tempo
è il più veloce.
La misurazione delle prestazioni di un computer si definisce in modalità diverse a seconda di cosa contiamo:
• il tempo di esecuzione (o tempo di risposta) è il tempo totale necessario al computer per completare un'attività, inclusi
accessi al disco, accessi alla memoria, attività di I/O, sovraccarico del sistema operativo, tempo di esecuzione della CPU
e così via. 1
=
> ⇔ >
⇔ = =
“X è n volte più veloce di Y”
• il tempo di esecuzione della CPU (tempo della CPU) è il tempo effettivo impiegato dalla CPU per eseguire un'attività
specifica, non includendo il tempo impiegato in attesa di I/O o nell'esecuzione di altri programmi. Esso può essere
suddiviso in
- tempo CPU dell'utente, cioè il tempo della CPU impiegato in un pr