

















Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
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
1 / 25
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!


















Come rappresenta le info un computer?
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^
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.
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:
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.
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
Nulla esclude che queste operazioni possano essere combinate tra di loro: (NOTx) AND(xORy)=
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
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:
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).
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.
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
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:
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
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:
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.
L’esecuzione di un istrzuone viene sudddivisa in 3 fasi, uguali per qualsiasi processore:
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é