Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Introduzione all'Architettura dei Computer: Istruzioni, Memoria e Processore, Appunti di Fondamenti di informatica

Una panoramica introduttiva all'architettura dei computer, esplorando i concetti fondamentali di istruzioni, memoria e processore. Viene illustrato come le istruzioni vengono codificate e come il processore le esegue, evidenziando il ruolo della memoria cache e dei registri. Il documento utilizza analogie intuitive per rendere comprensibili i concetti complessi, come il paragone tra il processore e un cuoco che segue una ricetta.

Tipologia: Appunti

2022/2023

Caricato il 23/12/2024

BeaBlumetti
BeaBlumetti 🇮🇹

11 documenti

1 / 25

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Corso di informatica
Lezione 1, 14/11/24
Come rappresenta le info un computer?
- Rappresentazione UNARIA: per rappresentare le quantità si usavano IIII
(bastoncini)
- Rappresentazione ADITTIVA: si combinano insieme diversi simboli associando a
ciascun simbolo una certa quantità. Per esempio gli egizi usavano una sorta di
ARCO per indicare la quantità 10, oppure un altro simbolo simile alla M, per
rappr la quantità 100: per rappresentare allora 320 si scriveva: MMMUU.
Questa notazione per gli egizi era uguale a UUMMM: posizione additiva ma non
posizionale.
I babilonesi avevano inventato una forma di numerazione un po’ scomoda, perché
usava 60 simboli, notazione SESSAGESIMALE: questo modo di contare si considerava
scomodo se scritto, ma nell’antichità la notazione scritta era rara perché si usavano le
mani per contare. Esiste un altro sistema che ha a che fare con il sistema
sessagesimale in cui si contava con le falangi.
Un altro sistema antico arrivato fino a noi è il sistema di numerazione romano, che non
è posizionale ed è sia additivo che sottrattivo: ogni simbolo è associato ad una certa
quantità.
Il sistema decimale che usiamo noi deriva dall’India messo a punto nel 500 D.C. e un
aspetto fondamentale è che tra i simboli usati per indicare le quantità c’è lo 0. Lo 0 è
fondamentale per una rappresentazione comoda delle quantità numeriche. Il sistema
di nunmeraizone decimale nasce in india e si trasferisce nelal cultura araba, dove
nell’800 un matematico arabo ALGURAVIBZI (la parola algoritmo deriva dal suo nome)
scrive alcuni trattai di algebra. Grazie al passaggio della cultura araba in Europa questi
trattati vengono riscritti e analizzati da Leonardo Pisano (FIBONACCI). Lui è stato
fondamentale per la storia della matematica: definisce nel 1200 le 4 operazioni basata
sul sistema di numerazione araba e definisce uno standard rimasto tale fino ad oggi,
ed è il modo di contare che usiamo noi.
LA NUMERAZIONE IN BASE 10: ADDITTIVA E POSIZIONALE
Posizionale: il peso delle cifre usate dipende dalla loro posizione all’interno del numero
in cui sono state usate. in numerazione base 10 usiamo dieci simboli: 0,1,2,3,ecc fino
a 9, così possiamo rappresentare una quantità fino a 9. Per rappresentare oltre il 9
mettiamo due numeri vicini: 10,11,12… 20,21,22… il secondo 2 ha un valore diverso
rispetto a quello davanti, che vuol dire due volte 10. Un numero come 50 vuol dire 5
decine + 4 unità.
123 1 centinaio, 2 decine, 3 unità.
Se conto la posizione di ciascuna cifra partendo da 0 e muovendomi dalla cifra meno
significativa da quella più significativa: 123 il 3 si trova in posizione zeresima, il 2 in
posizione unesima, 1 in posizione duesima. Questa posizione ci dice quale è il peso di
ciascuna delle cifre 123 all’interno del sistema di numerazione in base 10, tramite le
potenze di 10. Si può infatti scrivere che 123 è uguale a: 1X10^2 + 2X10^1 +
3X10^0 ^ (ELEVAZIONE A POTENZA)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19

Anteprima parziale del testo

Scarica Introduzione all'Architettura dei Computer: Istruzioni, Memoria e Processore e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

Corso di informatica

Lezione 1, 14/11/

Come rappresenta le info un computer?

  • Rappresentazione UNARIA: per rappresentare le quantità si usavano IIII (bastoncini)
  • Rappresentazione ADITTIVA: si combinano insieme diversi simboli associando a ciascun simbolo una certa quantità. Per esempio gli egizi usavano una sorta di ARCO per indicare la quantità 10, oppure un altro simbolo simile alla M, per rappr la quantità 100: per rappresentare allora 320 si scriveva: MMMUU. Questa notazione per gli egizi era uguale a UUMMM: posizione additiva ma non posizionale. I babilonesi avevano inventato una forma di numerazione un po’ scomoda, perché usava 60 simboli, notazione SESSAGESIMALE: questo modo di contare si considerava scomodo se scritto, ma nell’antichità la notazione scritta era rara perché si usavano le mani per contare. Esiste un altro sistema che ha a che fare con il sistema sessagesimale in cui si contava con le falangi. Un altro sistema antico arrivato fino a noi è il sistema di numerazione romano, che non è posizionale ed è sia additivo che sottrattivo: ogni simbolo è associato ad una certa quantità. Il sistema decimale che usiamo noi deriva dall’India messo a punto nel 500 D.C. e un aspetto fondamentale è che tra i simboli usati per indicare le quantità c’è lo 0. Lo 0 è fondamentale per una rappresentazione comoda delle quantità numeriche. Il sistema di nunmeraizone decimale nasce in india e si trasferisce nelal cultura araba, dove nell’800 un matematico arabo ALGURAVIBZI (la parola algoritmo deriva dal suo nome) scrive alcuni trattai di algebra. Grazie al passaggio della cultura araba in Europa questi trattati vengono riscritti e analizzati da Leonardo Pisano (FIBONACCI). Lui è stato fondamentale per la storia della matematica: definisce nel 1200 le 4 operazioni basata sul sistema di numerazione araba e definisce uno standard rimasto tale fino ad oggi, ed è il modo di contare che usiamo noi.

LA NUMERAZIONE IN BASE 10: ADDITTIVA E POSIZIONALE

Posizionale: il peso delle cifre usate dipende dalla loro posizione all’interno del numero in cui sono state usate. in numerazione base 10 usiamo dieci simboli: 0,1,2,3,ecc fino a 9, così possiamo rappresentare una quantità fino a 9. Per rappresentare oltre il 9 mettiamo due numeri vicini: 10,11,12… 20,21,22… il secondo 2 ha un valore diverso rispetto a quello davanti, che vuol dire due volte 10. Un numero come 50 vuol dire 5 decine + 4 unità. 123  1 centinaio, 2 decine, 3 unità. Se conto la posizione di ciascuna cifra partendo da 0 e muovendomi dalla cifra meno significativa da quella più significativa: 123  il 3 si trova in posizione zeresima, il 2 in posizione unesima, 1 in posizione duesima. Questa posizione ci dice quale è il peso di ciascuna delle cifre 123 all’interno del sistema di numerazione in base 10, tramite le potenze di 10. Si può infatti scrivere che 123 è uguale a: 1X10^2 + 2X10^1 + 3X10^0  ^ (ELEVAZIONE A POTENZA)

Il fatto che una numerazione sia additiva e posizionale significa che in base alle cifre hanno un peso diverso. Questo significa che: 0123 <> 1230 hanno quantità diverse. Se sviluppo in potenza di 10 il numero 0123  0x10^2 + 1x10^2 + 2X10^1 + 3X10^0 = 123 1230  1x10^3 + 2x10^2 + 3x10^1 + 0x10^

NUMERAZIONE BINARIA

In un pc ci sono centinaia di miliardi di transistor, ognuno si comporta come un interruttore che può essere aperto o chiuso con un segnale elettrico. Con miliardi di transistor si piò rappresentare un numero infinito di configurazioni diverse, che è quello che fa un pc. Nel sistema binario usiamo solo due simboli: 0 e 1. Se 0 rappresenta 0 in qualsiasi sistema e 1 stessa cosa, il 2 come lo rappresentiamo nel sistema binario? Facciamo la stessa cosa della numerazione in base 10: 2= 3= 11 4=1^20100 =12^2 + 02^1 +02^0 = 5= 6=110 = 12^2 + 12^1 +02^0 7= 8=1000= 123+020+020+0 9= 10= Invece di usare le potenze di 10, devo usare le potenze di 2.

  • 0111 è uguale o diverso da 1110? Sono diversi. 123+122+1+21+020= COME SI PASSA DA UN NUMERO IN BASE DECIMALE AD UNO IN BASE 2? 123 in binario= si prende il numero e si divide per 2, prendendo solo la parte intera del risultato e guardando se c’è un resto  123:2= 61 resto 1 61:2 = 30 resto 1 30:2=15 resto 0 15:2=7 resto 1 7:2=3 resto 1 3:2=1 resto 1 1:2=0 resto 1 123= 1^6151413021110 = 12^6 +12^5 +12^4 +12^3 +02^2 +12^1 +12^1

VEDI FOGLI

OPERAZIONI TRA BIT E BITE

Queste operazioni prendono IN INFORMATICA il nome di LOGICA BULEANA, OPERAZIONI BULEANE. Un matematico inglese, George Boole, della metà dell’800 che definì formalmente queste operazioni logiche che sono diventate la base concettuale del funzionamento del pc. I due bit 0 e1 sono fatti indicare da FALSO (0) e VERO(1). Si possono fare operazioni di base con questi:

  • OPERAZIONE DI NEGAZIONE, NOT 0: NOT falso = vero = NOT0 = NOT1=0 (il contrario).

OPERAZIONE NUMERO 2

Falso  0 Vero  1 OR : x y  X OR Y 0 0 = 0 1 = 1 0= 1 1 = Se almeno una dei due valori è vero allora OR dei due valori è VERO.

OPERAZIONE 3

X AND y: dati due valori di verità, perché AND restituisca vero occorre che entrambi siano VERO X Y 0 0 0 0 1 0 1 1 X AND Y : SOLO QUANDO SONO ENTRAMBI VERI IL RISULTATO DELL’AND SARà 1 0 0 0 1

OPERAZIONE 4

  • x XOR y : OPERAZIONE 4 OR ESCLUSIVO. Questa operazione restituisce VERO SE E SOLO SE uno solo dei due valori combinati tra loro sono VERI, se entrambi sono falsi o veri, il risultato sarà FALSO. X XOR Y: 0 1 1 0

OPERAZIONE 5

Nulla esclude che queste operazioni possano essere combinate tra di loro: (NOTx) AND(xORy)=

Lezione 2 - 21/11/

ESEMPI UN PO’ SEMPLIFICATI DELLA VITA REALE IN CUI POSSIAMO APPLICARE LA

LOGICA BOOLEANA:

0= FALSO

1= VERO

OR:

X= ho preso il sole all’aperto Y= ho fatto la lampada abbronzante X OR y= mi sono abbronzato AND: X= ho studiato per l’esame Y= mi sono iscritto all’appello X AND y= ho superato l’esame XOR: X= imbocco la corsia del pagamento in contanti Y= imbocco la corsia del Telepass X XOR y = posso uscire dall’autostrada

LE OPERAZIONI DI BASE BOOLEANE POSSONO ESSERE

COMPOSTE TRA LORO.

PER RISPONDERE ALLA DOMANDA CONVIENE INCOMINCIARE DAL NUMERO Più ALTO, TRASFORMARLO IN BINARIO E VEDERE SE I 4 BIT RENDONO VERA L’EQUAZIONE. 15= 1111; xyxz= 1111 (1AND 1 ) XOR (1 OR 1)= 1 XOR 1= 0 - NO 13=1101  yxyz =??? Y non può valere allo stesso tempo 1 e 0  NO 1110 =1011 2  yxyz= (0 AND 1) XOR (0 OR 1 )= 0 XOR 1 = 1  SI Quante combinazioni di X,Y,Z,W rendono vera l’espressione= (x OR z) XOR (NOT y) AND (w XOR x))?

- Devo valutare le singole espressioni e poi metterle insieme: X Y Z W xORz NOTy wXOR x (Ny)A(w Xx) Expr 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 0 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 IL FILE Il file è un oggetto memorizzato sul pc che si può scambiare, che si può spedire, che si può ricevere. Per un pc il file è una SEQUENZA DI BITE, una sequenza di blocchetti di 8 BIT: un file, dal pdv del pc, si vede una sequenza di 100101010 e così via. Questa sequenza può essere interpretata dal pc in una miriade di modi diversi: per rendere la vita più semplice spesso invece di rappr le sequenze di bit o bite in binario, si rappr in esadecimale: un bite corrisponde in 8 bit in esadecimale lo posso rappr con due cifre. L’ordine con cui i bite sono memorizzati in un file è importante: di solito i file sono memorizzati permanentemente sul disco o una memoria in stato solido. Dentro al file ci sono informazioni diverse: il file è sempre una sequenza di bite ma adottando convenzioni dentro al file si possono rappr info di natura diversa: testo o immagini per

esempio, suoni, filmati, programmi eseguibili (app o programma: non sono file di testo, non è un file di immagini o di suoni, è una cosa ancora diversa). A seconda del tipo di info di un file, questa info è codificata in un certo modo:

  • Quella dei testi (delle lettere, dei numeri, della punteggiatura)
  • Codifica delle immagini (ce ne sono 2-3 di tipo diverso, noi ne vediamo una) Di solito, il nome di un file è associato ad una estensione: quest’ultima dà info al pc, al sistema operativo (windows e LINUX per i pc). Di fatto è il sistema operativo che ha bisogno di sapere cosa ce nel file per sapere come usarlo: un modo per aiutare il sistema operativo è attaccare al nome del file (quello che mettiamo noi) un’estensione di 3 lettere, queste servono per manipolare in maniera opportuna il file, per usarlo nella maniera giusta:
  • TXT, file di testo con codifica ASCII
  • Pdf, documenti con codifica PDF (Portable Document Format)
  • Htm, pagina web
  • ZIP, file compresso con metodo ZIP: un file id testo, con un processo molto complicato, viene ridotto di dimensioni senza però perdere nulla del suo contenuto. Lo possiamo così inviare più velocemente per essere inviato in rete
  • Exe, eseguibile su macchine windows: restringe il tipo di uso.
  • Jpg, immagine con codifica JPG ( Joint Photographic expertGroup)
  • Gif, immagine con codifica GIF (Graphics Interchange Format) Queste convenzioni, chiamare i file con un determinato nome, aiuta il sistema operativo a sapere come usare quel file, visualizzarlo come file di testo, come immagine, o un programma che deve essere eseguito su quel pc. Come vengono codificati due tipi di file: FILE DI TESTO E IMMAGINI. CODIFICA ASCII (american standard code for information interchange): questa forma di codifica è stata formalizzata da un altro organismo di standardizzazione di qualsiasi livello ANSI (american national standard institute): questa codifica dice che ogni singolo bite viene usata per rappr uno dei simboli alfanumerici che usiamo quando scriviamo. In realtà, con 8 bit possiamo rappr 2^8 , 256 info diverse. La codifica ASCII usa solo 128 possibili configurazioni, da 0 a 127: in un qualsiasi bite codificato secondo lo standard ASCII il bit più significativo rimane sempre a 0, questo per ragioni storiche/pratiche. ci basterebbero 7 bit. CODICE ASCII: come è fatto? Tabella: questa tabella, nasce negli anni ’60 quando al posto dei terminali video c’erano le telescriventi: una macchina da scrivere ma con qyalche capacità in più: trasmette su una rete, su un pc remoto, e riceve l’info. Fa un po’ come un terminale video moderno ma con la diff che invece di rappr su uno schermo lo fa su carta. I primi carattere del codice ASCII erano istruzioni date alla telescrivente per, per esempio, andare a capo, suonare un piccolo campanello per far capire di essere arrivati alla fine della riga. Qualsiasi file di testo usa questa tabella, le prime 3 colonne di destra, per rappresentare i testi che compaiono sul nostro schermo. Ad esempio, una parola come “RITROVAI” viene rappr con una sequenza di bite: R= 72

Fine È la sequenza di byte (in esadecimale): 72 75 73 73 6F 3A ( : ) 20 D0 8A D0 B4 D1 89 0A 66 69 6E 65 D0 > 7F devo guardare anche il byte successivo 8A UTF8 :D08A (a questo corrisponde la lettera cirillica) D0 > 7F D0B D1 (uso la tavella UTF8, perché maggiore di 7F) > 7F D 0A = VAI A CAPO 66= 7F QUALSIASI VALORE SUPERIORE A 7F DEL PRIMO BYTE COMBINATO CON TUTTI I VALORI POSSIBILI DEL SECONDO BYTE NELLA CODIFICA UTF8. Questo è il modo in cui codifichiamo i caratteri in un file di testo, anche quelli utilizzati nella specifica lingua in cui parliamo (accenti, virgole, cedille).

CODIFICA DELLE IMMAGINI

Per codificare le immagini dobbiamo trovare uno strumento per rappresentare il più possibile in maniera fedele un’immagine. Alcune sono sgranate perché si è scelta una rappr grossolana che non riesce a riprodurla bene. Per riprodurre un immagine si fa: si prende un immagine e si sovrappone ad una griglia, fatta da un certo numero di righe e colonne, più o meno fitta. IMMAGINE DEL TRIANGOLO NELLA TABELLA (file su moodle): abbiamo due colori, il bianco e il nero, quanti bit ci servono per rappresentare il bianco o nero? 0=bianco, 1=nero. Suddividano l’immagine usando una griglia, in questo caso 7 colonne e 4 righe, e associamo ad ogni quadratino un bit, il cui valore ci dice se quel quadratino deve essere associato al bianco o al nero. Dobbiamo anche decidere in che ordine considerare i vari quadratini, dal basso verso l’alto, da sinistra a destra. Dentro ogni quadratino scriviamo 0 se è bianco, 1 se è nero. In caso di quadrati un po’ e un po’ si può dire che se c’è più bianco mettiamo 1, se più nero 0. Per il pc quest’immagine è stata trasformata in una tabella BITMAT. I quadratini delle foto prendono il nome di PIXEL.

CODIFICA DELLE IMMAGINI COLORATE: codifica RGB (red, green,

blu): il colore di un pixel veniva fatto combinando questi 3 colori di base. Codifica CMYKB: viene usata nelle stampanti ad inchiostro, oppure HSV. Ad ogni colore è associato un byte, che ha un valore da 0 a 255: il valore di quel byte ci dice quanto quel colore è presente in un pixel che vogliamo colorare in un certo modo.

RGB (RED, GREEN, BLU): possiamo rappresentare 256256256= 2^24 un po’ più di 16 milioni di colori diversi. BIANCO: TUTTE LE COMPONENTI PRESENTI NERO: TUTTE LE COMPONENTI ASSENTI GRIGIO: TUTTE LE COMPONENTI A META’ GIALLO: ROSSO E VERDE ARANCIONE: ROSSO E METà DOSE VERDE MAGENTA: ROSSO E BLU CIANO: VERDE E BLU TABELLA DEI COLORI NEL FILE SU MOODLE: (F è SEMPRE IL MASSIMO DI QUEL COLORE: ES: arancione: FF (massimo del rosso) 80 (metà del verde) e 00 (niente blu). ROSS O

VERD

E

BIANC

O

NERO GRIGI

O

GIALL

O

ARANCIO

NE

MAGEN

TA

AZZUR

RO

BLU

FF

00FF

FFFFF

F

FFFF

FF8000 FF00FF 00FFFF 0000

FF

LEZIONE 3 - 28/11/

- COME SI CODIFICA L’IMMAGINE DEL QUADRATO ARANCIONE E GIALLO NEL FILE? Usando la tabella dei colori del file di prima, ci dice che la prima riga di immagine fosse codificata da 8 gruppi ciascuno da 3 byte, che ci permettono di codificare secondo la codifica RGB, la quantità di colore presente nel pixel che vogliamo rappresentare: PRIMA RIGA: FFFFFF FFFFFFF FF0000 FFFFFF FF0000 FFFFFF FF0000 FFFFFF RIASSUNTO: usiamo un byte che avrà valore tra 0 e 255 in decimale, e tra 0 e FF in esadecimale, per rappr la quantità di uno dei tre colori di base nella rappr RGB. 0 = colore assente, FF= colore completamente presente. Se i 3 colori sono rappr nello stesso ordine da 3 byte, il rosso verrà rappr da un gruppo di tre byte dove l’unica componente presente è il rosso e sarà rappr da FF, gli altri due colori sono assenti e quindi FF0000. Stesa cosa vale per gli altri colori (VEDI TABELLA SOPRA). QUARTA RIGA: FF0000 FF0000 FFFF00 FF8000 FF80000 FFFF00 FF0000 FFFFFFF Questo modo di rappr un’immagine sovrapponendo una griglia, che determina la risoluzione dell’immagine quanto maggiore è il numero di quadratini (quanti più pixel ha l’immagine), è molto occupazionalmente molto pesante: per ogni pixel ci vogliono 3 byte per codificare il colore associato a quel pixel. Se l’immagine è di piccole dimensioni la quantità di byte è piccola, ma dato che le immagini che usiamo sono di milioni di pixel, la corrispondente rappresentazione bitmat è grande qualche milione di byte. La semplice immagine della tabella arancione e gialla, fatta da 8x8 = 64 pixel, occupa il numero di pixel per il numero di byte (3) = 192 byte.

moderni sanno fare; per fare ciò si deve avere una codifica delle istruzioni, un modo per raprr quello che vogliamo far fare quello che vogliamo. Alla fine quella codifica dovrà finire in una sequenza ben precisa di bit. Un programma è costituito da una sequenza di byte (sequenze di 8 bit). In un programma queste sono suddivise in istruzioni: immagine linea colorata: OA 62 B1 76 C2 9D 7F 01 84 67 (NUMERI CHE NON SI VEDONO SUL BLU) Le istruzioni possono avere lunghezza diversa, di solito 2-3-4-5 byte. Ogni istruzione è fatta da:

  • Codice operativo: rappr da un byte, può avere un valore tra 0 e FF in esadecimale. Ci dice cosa quell’istruzione ci chiede di fare: devo eseguire l’operazionie END? Il codice operativo dice cosa fare.
  • Operandi: rapprsentanto da 1 byte. Sono i dati su si opera. Per convenzione se si guarda la prima istruzione dell’ipotetico programma della slide del file che stavamo guardando (la linea colorata), il primo byte sarà sempre il codice operativo e i due byte successivi sono gli operandi, su cosa operare. Il codice operativo indica il tipo di operazione da compiere sugli operandi, di solito sono operazioni semplici come addizioni, sottrazioni, oppure END, OR, XOR e così via. Possiamo usare l’analogia del cuoco per capire come il processore esegue i programmi: cuoco  processore ricetta programma passo della ricetta istruzioni ingredienti  operandi codice Istruzione Lun. (bytes) 00 x y z Versare y grammi di un ingrediente x in un recipiente z

01 x y Versare contenuto del recipiente x in recipiente y

02 x Spostare recipiente x sul fuoco

03 x Togliere recipiente x sul fuoco

04 x Spostare recipiente x sul lavandino

05 x Mescolare recipiente x 2 06 x Aspettare x minuti 2 07 x Mangiare/bere contenuto del recpiente x

gli ingredienti e i recipienti su cui operano le istruzioni sono rappr da un ben preciso e univoco codice numerico:

cod Ingrediente 00 Acqua 01 Olio 02 Sale 03 Pasta 04 Passata di pomodoro 05 Aglio Cod Recipiente 00 Pentola 01 Padella 02 Scolapasta ESEMPIO: 00 02 20 01 CODICE OPERATIVO: 00 Versare y grammi di ingrediente X in recipiente Z Operando x= 04  passata di pomodoro Operando y: 20 esadecimale: (32 decimale)  32 grammi di pomodoro Operando z= 01  padella Istruzione codificata: versare 32 grammi di pomodoro in padella. Abbiamo usato un codice operativo per l’operazione “versa y grammi ecc” , usando il codice 04 per il pomodoro, usando il numero esadecimale 20 per indicare una quantità della sostanza e il codice operativo 01 per indicare un recipiente. Quindi, il cuoco in possesso di queste tre tabelle se legge l’istruzione “00 02 20 01” sa cosa deve fare. Cosa fa il cuore di un computer? Preleva le istruzioni di un programma da eseguire una dopo l’altra dalla memoria principale e le esegue rispettando le info scritte in ciascuna istruzione. Cosa dovrò fare il processore nel prelevare ogni singola istruzione del programma che deve eseguire? Dovrà esaminare il primo byte dell’istruzione che gli dice cosa fare. Come ho suddiviso queste sequenze di byte: 00 00 FF 00 00 00 FF 00 02 00 06 0A 00 02 0A 00 00 03 64 00 06 0A 0 4 02 01 00 02 07 02 IL PROCESSORE CUOCO CHE RICEVE UN PROGRAMMA SCRITTO CON LA CODIFICA “ X YZ “ ecc sarà in grado di eseguire il programma ricetta. Sono suddivise in istruzioni, so che il primo byte di qualsiasi istruzione è il codice operativo. Una volta che conosco quest’ultimo so anche quanto è lunga quell’istruzione perché, se vedo codice operativo 0 so che i successivi 3 byte sono gli operandi, gli argomenti di quell’istruzione. Se vedo 01 so che i prossimi 2 byte sono gli operandi dell’istruzione, per tutti gli altri codici so che se c’è 05 il byte successivo è l’unico operando di quell’operazione. Il

MEMORIA CACHE

PROCESSORE : l’unica parte del pc che capisce le tabelle viste in precedenza ed è capace di eseguire le sequenze di istruzioni. Queste componenti comunicano tra loro tramite il BUS DI COMUNICAZIONE: passano da qui segnali elettrici convertiti in byte ( 010101010). Cosa succede quando lanciamo un programma? Tramite il sistema operativo, tutto succede grazie a questo, il file che contiene il programma (corrispondente, per esempio, a power point), risiede in un file memorizzato sul disco, viene recuperato e tramite il BUS copiato in memoria principale e fatta una copia con i dati di cui quel file ha bisogno per lavorare. Durante l’esecuzione del programma questo risiede in un pezzo della memoria principale: questa per esempio è grossa 16 milioni di byte, il programma magari occupa 1 milione di byte, e quindi occuperà una piccola porzione. Durante l’esecuzione del programma una parte dei dati e delle istruzioni del programma vengono copiate nella memoria CACHE: per eseguire ogni singola istruzione, il processore, accede dentro la memoria CACHE e una dopo l’altra legge le singole istruzioni da eseguire. Quindi prende il primo byte, capire quanti altri byte fanno parte della stessa istruzione e così via…come prima con la tabella azzurra e gialla. La prima istruzione, quindi, viene portata nel processore, poi in piccole memorie che si chiamano REGISTRI DELLA CPU, qui viene depositata l’istruzione in attesa di essere prima analizzata, leggendone il codice operativo e poi portata a termine. Quanod un’istruzione è stata eseguita, il processore passa a prelevare dalla memoria cache l’istruzione successiva e ripete. Un processore non fa altro che eseguire istruzioni una dopo l’altra. Quando il programma è finito, è finita la sequenza di istruzioni da eseguire, è possibile che il programma produca un risultato, un OUTPUT, che potrà essere o registrato sul disco o inviato sullo schermo o inviato in rete, a seconda di cosa stiano facendo. Abbiamo all’interno del PC diversi tipi di dispositivi che memorizzano: UN DISCO, capienza enorme e che riesce a conservare le info anche quanod lo spegniamo, UNA MEMORIA PRINCIPALE, in cui viene caricato un programma quando vogliamo usarlo, UNA MEMORIA CACHE, che sta tra la memoria principale e il processore, e poi PICCOLE MEMORIE (REGISTRI): abbiamo bisogno di queste gerarchie di memoria perché ognuna ha caratteristiche diverse e svolge funzioni leggermente diverse. Queste memorie lavorano a velocità diverse:

  • La memoria principale è molto più lenta della CPU: il processore dove le istruzioni vengono eseguite è capace di elaborare più o meno alla velocità di un milione di byte al secondo, invece la memoria RAM è capace di erogare info molto più lentamente, 20 milioni di byte al secondo. Facciamo un ANALOGIA: leggiamo sul kindle una pagina al minuto, ma questo kindle è molto lento e per voltare pagina ci mette 10 minuti. Noi potremmo leggere 60 pag. al minuto ma a causa della lentezza ne leggiamo solo 6. Noi saremmo molto più veloci di quello che ci permetterebbe di fare il kindle. L’analogia è: il processore sarebbe capace di elaborare i dati alla velocità di un miliardo al secondo ma gli arrivano + lentamente perché la RAM riesce a dargli i dati solo circa 20 milioni di byte al secondo. Ovviamente non ha senso comprare un processore veloce se poi il processore aspetta. Per questa ragione i

progettisti del pc hanno pensato di inserire tra la memoria principale e il processore una memoria CACHE: quest’ultima è più piccola della memoria principale ma è più veloce. Se copiamo una parte dei dati e istruzioni nella memoria cache la vita del processore migliora, riesce ad elaborare più info al secondo, magari non il massimo ma sicuro meglio che se lo strato intermedio di memoria cache non fosse presente, si migliora la velocità di esecuzione dei programmi. È un po’ come se il nostro kindle fosse in grado di erogare le sue pagine non più una ogni 10 minuti ma ogni 2 minuti.

  • Il DISCO è il dispositivo con maggior capacità di memorizzazione, centinaia di miliardi di byte; ma anche il dispositivo più lento: leggere una qualsiasi info memorizzata sul disco richiede un tempo che è nell’ordine delle centinaia di microsecondi o millisecondi, sono tempi alti per un pc. La memoria PRINCIPALE: è meno capiente del disco ma questa memoria ha dei tempi di accesso migliori dei tempi di accesso del DISCO. Se voglio leggere un info che è scritta in un byte della memoria principale il processore ci mette 50- 60 miliardesimo di secondo. Una relazione analoga a quella tra la memoria principale e il disco c’è tra la memoria cache e la memoria principale: quella cache è più piccola, poniamo che posa memorizzare 12,24,36 milioni di byte, per contro se voglio leggere un info scritta in un byte memorizzata nella memoria cache ci vogliono 5,10 nano secondi. I registri nel processore sono piccole memorie ma molto veloci: per leggere il contenuto di una delle celle di memoria del processore di vogliono 500 picosecondi. C’è una gerarchia di memoria che dall’alto verso il basso sono sempre più capienti ma sempre più lente. Nella metafora della cucina la MEMORIA PRINCIPALE DEL PC possiamo farla corrispondere al supermercato in cui andiamo a prendere degli ingredienti: se ad ogni ingrediente il cuoco/il processore dovrebbe andare a prendere i singoli ingredienti ci metterebbe un sacco di tempo. Quindi cosa fa il cuoco quanod va al super? Compra tutti gli ingredienti che gli servono e qualcosa in più e li mette nella sua dispensa, che nell’analogia è la MEMORIA CACHE; la cache (dispensa) è meno capiente del super ma è più immediata, più veloce di andare ogni volta al super. Il processore che accede alla memoria cache per prelevare ogni singola istruzione e portarli nel processore in piccole memorie (registri) in cui quell’istruzione può essere eseguita, corrisponde all’analogia del cuoco che va in dispensa e prende cosa gli serve per ottenere il risultato dell’esecuzione della ricetta. Il cuoco (il processore) ora ha gli ingredienti per la sua ricetta. Perché abbiamo bisogno di diversi livelli di memoria?
  • Il disco è molto capiente ma lentissimo
  • La memoria principale è più veloce del disco ma ha una capienza inferiore
  • La memoria cache è più veloce della memoria principale, ma può contenere pochi dati e istruzioni. Qui viene copiata il programma o porzione di programma che il processore sta eseguendo
  • I registri della CPU sono più veloci della cache, ma possono solo contenere le istruzioni in esecuzione e i dati che usa.

FASI DI ESECUZIONE

L’esecuzione di un istrzuone viene sudddivisa in 3 fasi, uguali per qualsiasi processore:

  • Fase di fetch: la parte dell’esecuzione dell’istruzione, quanod viene letta, è messa nell’instruction register.
  • Fase di decode: la control unit guarda il contenuto dell’instruction register e cerca di capire cosa è richiesto.
  • Fase di execute: quello che è stato richiesto dal codice operativo viene eseguito. Ad esempio usando la ALU. Nell’elenco delle istruzioni (prima tabella di questa lezione) il codice operativo serve per codificare che tipo di operazione si deve far fare se troviamo quest’istruzione da eseguire: 00 vorrà dire versa, ecc.. è uyna convenzione che scegliamo ma una volta scelta la convenzione si usano questi codici per scrivere le nostre ricette. Questo è un modo per codificare le istruzioni. Ne avremmo potuto scegliere un altro ma si doveva essere d’accordo.

Tra i pc esistono due grandi famiglie di codifiche:

  • Codifica CISC : complex instruction set computer: sta ad indicare le istruzioni che richiedono ciascuna ci fare lavoro sofisticato. Ogni singola istruzone contiene una gran quantità di lavoro, non solo di spostare un recipiente ma qualcosa tipo: apri il gas, accendi il fornello, sposta l’acqua sul terzo fornello, si usano molte info le devo codificare in una sola istruzione.
  • CODIFICA RISC: reduced instruction set computer: ci sono semplici istruzioni come es: apri il gas, la seconda poi accendi il fornello, la quarta mettere le presine, e poi la quinta spostare la pentola sul fuoco. Si usano più istruzioni semplici, invece della CISC si usa un’istruzione complicata. Tutti i processori si dividono in due grandi famiglie a seconda che usino istruzioni complesse che codificano tanto lavoro o istruzioni semplici che codificano poco lavoro. L’analogia che viene fatta è tra due tipi di notazione testuale: nell’alfabeto cinese si codificano tante info in un simbolo solo, e viene fatto corrispondere alla codifica CISC; invece, il nostro alfabeto corrisponde alla codifica delle istruzioni RISC, pochi simboli semplici che usiamo per produrre le parole. L’insieme delle istruzioni che capisce un certo processore si chiama INSTRUCTION SET ARCHITECTURE: il processore cuoco capisce quella prima tabella di questa lezione. Per ragioni storiche la INTEL ha costituito un monopolio nel decidere quale fosse l’instruction set dei processori da usare nei pc. La INTEL ha parzialmente costruito come si devono evolvere il mercato dei processori, ormai scardinato dai processori apple, dalla ARM computer, ecc.. La codifica delle istruzioni è chiamata LINGUAGGIO MACCHINA: un modo semplice per esprimere un programma è attraverso l’uso dei linguaggi di programmazione di alto livello. Il compilatore svolge un lavoro di traduzione dal linguaggio ad alto livello al linguaggio macchina costituito da byte. In linea teorica, è possibile scrivere un programma direttamente in linguaggio macchina. In pratica si ricorre ad un linguaggio di alto livello (C, PASCAL, JAVA, FORTAN) che permette di descrivere le operazioni in un modo più naturale e vicino all’uomo. la creazione del codice in linguaggio macchina è delegata al compilatore.

Lezione 4, 5/12/ L’idea di un linguaggio di programmazione è quella di poter dare ordini a un pc usando un formalismo che sia più vicino al linguaggio umano. C’è stato almeno un linguaggio di programmazione, il dogol, che aveva la forma id frase che potrebbe dire l’uomo quando comunica con un’altra persona, ora è abbandonato. Ci vuole qualcosa che permetta di passare da un linguaggio ad alto livello, che abbia l’aspetto simile alla lingua normale ma con molto formale a queste sequenze di 01. Questa cosa la fa il COMPILATORE: il programmatore esprime le sue idee nel linguaggio ad alto livello (JAVA o PAITON): nel linguaggio ad alto livello il programma che si vuole implementare ha un aspetto che ha la forma del linguaggio umano (class, triangle, float, surface) (slide: levels of programming languages). Un compilatore poi produce una sequenza di 010101 che non è ne più ne meno corrispondente alla sequenza della tabella azzurra e gialla sopra. Questo codice macchina genera prima un codice intermedio, codice ASSEMBLER, in cui ogni riga è un’istruzione macchina trasformata in qualcosa di mnemonica, qualcosa di più o meno comprensibile dall’essere umano (LOAD R1, b; LOAD r2, h). Il compilatore è se stesso un programma e quindi è anche lui fatto di sequenze di bit 0101 come il programma che deve generare: è un programma che manipola altri programmi ad alti livelli per generare programmi equivalenti scritti nel linguaggio macchina. VELOCITA’ DEL PROCESSORE: “frequenza del clock” , GIGAHERTZ è una misura della frequenza con la quale un segnale oscilla nel tempo, in particolare i processori moderni hanno un clock che detta il tempo all’esecuzione delle istruzioni, che va alla velocità di 3-4 gigahertz. Se ogni singola oscillazione corrisponde ad un operazione di base del pc, se in un secondo ce ne sono 3-4 miliardi, allora il processore moderno riesce a compiere 3- miliardi di operazione di base in un secondo. Non è nemmeno un risultato recentissimo, perché i processori degli anni ’90 andavano a questa velocità, e per ragioni fisiche non è possibile salire sopra una velocità di 4-4,5 hertz, 4,5 miliardi di oscillazioni al secondo perché poi non si riusciva a far funzionare il processore, questo perché

  1. Scaldava troppo
  2. Quando si sale a frequenze superiori gli elettroni danno di matto e saltano da un punto all’altro e quindi il processore non funge più. La velocità con cui riusciamo ad eseguire i programmi dipende dalla velocità del clock, dal n. di oscillazioni che l’orologio interno del processore detta le operazioni che vanno compiute. L’esecuzione delle istruzioni viene suddivisa in 3 fasi (l’abbiamo già detto in precedenza) che possono essere fatte corrispondere a 3 oscillazioni successive del clock. Supponiamo che il processore deve eseguire: ADD R1,R2,R3 che significa “prendi il contenuto del registro R2 e quello del registro (piccole celle di memoria interne al processore che contengono i dati dell’istruzione in esecuzione) R3, sommali e metti il risultati in un altro registro R1. Possiamo ipotizzare che questa istruzione viene eseguita in 3 cicli di clock: