
































































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 dettagliata dell'architettura dei computer, concentrandosi sulla cpu, il ciclo fetch-decode-execute, le differenze tra risc e cisc e il parallelismo a livello di istruzioni. Include esempi pratici e spiegazioni chiare per comprendere i concetti chiave.
Tipologia: Sintesi del corso
1 / 72
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!

































































Cose mancanti Codice di Hamming (79-82) Da 2.3.7 a 2.3. Da 113 a 141 Cose da migliorare 2.1 PROCESSORI Intro CPU
La CPU comunica con memoria e disp I/O attraverso i bus, che sono cavi paralleli che trasmettono segnali di tipo dati, indirizzo e controllo
Struttura ALU, che svolge attività di tipo aritmetico-logico (addizioni oppure logiche tipo AND, OR..)
○ Control Unit, fa il fetch in memoria principale e determina il tipo di istruzione Registri, utilizzati per contenere una parola di lunghezza varia. Ogni CPU ha tot numero di registri, ciascuno con una funzione e con una lunghezza di parola massima Registri importanti: PC □ Contiene l'indirizzo della prossima istruzione da eseguire
□ Contiene l'istruzione che sta venendo eseguita
□ INPUT, contiene dati di INPUT dell'ALU, sono tanti quanti gli input dell'ALU □ OUTPUT, contiene un output dell'ALU Dopo aver finito le operazioni solitamente l'output dell'alu viene trasportato in un registro della CPU. Dopo essere stato riportato in un registro può essere ri-trasferito in memoria
2.1.1 Organizzazione di una CPU Data Path Registri + ALU + Bus che connettono i pezzi ALU (Arithmetic-Logic Unit) Dai registri un dato va in REGISTRI INPUT ALU, la quale poi elabora i dati e fornisce un output nel REGISTRO OUTPUT ALU. Poi questo dato verrà ri trasportato in un registro e successivamente in memoria (se non più necessario alla CPU) Le istruzioni possono essere di due tipi Registro - Memoria, cioè queste istruzioni trasferiscono parole dalla memoria nei registri (fetching memoria-registri)
Registro - Registro, cioè tipi di istruzioni che trasferiscono parole tra i registri prima di elabolarle
Ciclo di percorso dati Processo per cui due operandi vengono elaborati da ALU e il risultato viene memorizzato in un registro della CPU Solitamente le ALU sono molte e lavorano in parallelo
Tuesday, November 26, 2024 4:13 PM
Solitamente le ALU sono molte e lavorano in parallelo 2.1.2 Esecuzione delle istruzioni Passaggi CICLO FETCH-DECODE-EXECUTE L'istruzione è unica ed è composta dai seguenti passaggi (7 MICROISTRUZIONI) Mettere la prossima istruzione da memoria nel IR (Instruction Register) (fetch memoria-registro)
Cambia il PC per puntare alla prossima istruzione (quindi contiene indirizzo di memoria) Determinare il tipo di istruzione nell'IR DECODE Se l'istruzione vuole una parola in memoria, determinare l'indirizzo della parola Fare fetch da memoria a registro CPU della parola necessaria (fetch memoria- registro) Esegui istruzione EXECUT E Ritorna allo step 1
Esempio ISTRUZIONE = ADD 3 MICROISTRUZIONI (non sono queste ma è per far capire) = FETCH DATI DA MEMORIA A REGISTRI (1) UTILIZZA ALU x ADDIZIONE (2) METTI I RISULTATI NEI REGISTRI (3) Programma interprete: Un programma che fa fetch - decode - execute per altri programmi Permette di utilizzare il livello software per eseguire un programma anziché aggiungere componenti elettroniche aggiuntive !! The state of a process running on this machine consists of the memory, the // program counter, the run bit, and the AC !! Esempio in Java di Fetch, Decode, Execute
software senza troppe spese Aggiungere istruzioni significa creare nuovi programmi anziché stare a modificare il livello hardware
□ Istruzioni complesse possono essere testate e documentate senza danni Poi negli anni 70 il mercato ha voluto sempre più computer con interprete I microprocessori contenevano sempre più processori, ma negli anni 70 con gli intepreti bastava affiancare un processore semplice che avesse complessità pari alle dimensioni dell'interprete Control Stores Memorie adatte alla sola lettura che aiutano gli interpreti I control stores contengono le MICROISTRUZIONI (uno dei passaggi di fetch - decode- execute) ESEMPIO con conti
2.1.3 RISC vs CISC Inizio pag 62 RISC stands for Reduced Instruction Set Computer. Meno istruzioni a livello ISA, ciascuna eseguita in un singolo ciclo di clock Il processore possiede un semplice set di istruzioni molto lontano da quello dei linguaggi di alto livello. Serve meno interpretazione, perché opera sui registri Ad esempio si portano gli operandi nei registri, si svolge l'istruzione e poi si trasferisce il risultato in un altro registro. In questo caso il processore svolge solo la somma CISC which stands for Complex Instruction Set Computer. Più istruzioni a livello ISA, ciascuna eseguita anche su più cicli di clock Il processore è stato progettato in modo tale da avere molte istruzioni quindi serve meno interpretazione. Serve più interpretazione, perché la riga è un comando Si scrive solo l'istruzione e al massimo l'indirizzo degli operandi, poi sta al processore svolgere tutto il resto In questo caso il processore svolge sia il trasferimento che la somma 2.1.4 Principi di design RISC
Instructions Should Be Easy to Decode. I formati di un'istruzione ne determinano le caratteristiche, quindi quali risorse necessitano. Utilizzare pochi formati aiuta a completare più istruzioni a ciclo
Tutte le istruzioni (eccetto LOAD e STORE) devono operare sui registri. Questo perché accedere alla memoria comporterebbe sprechi di tempo e ritardi non prevedibili. LOAD e STORE possono essere overlapped da altre istruzioni che invece operino sui registri
Premessa Per incrementare le performance di una macchina è bene Aumetnare il clock In un determinato periodo storico determinate tecnologie impongono dei limiti per il clock i.
Migliorare parallelismo i. Numero di operazioni svolte in una volta
Esistono due tipi di parallelismo Parallelismo a livello ISTRUZIONI, cioè svolgere più istruzioni individualmente per aumentare il rate di Istruzioni/secondo
2.1.6 Parallelismo a livello processore (data parallel processor) Premessa Problema con parallelismo a livello istruzioni Le CPU avranno problemi con la velocità, un segnale non può viaggiare a più della velocità della luce Quindi vengono introdotte più CPU Molti dei problemi computazionali in campi di grafica computer, fisica e ingegneria riguarda utilizzo di LOOP e ARRAY, o comunque calcoli che hanno una struttura regolare ripetuta SOLUZIONI SMID Processor (set di computer paralleli) Vector Processor (estensione di un singolo processore) SMID Single Instruction-stream Multiple Data-stream SIMD processor consists of a large number of identical processors that perform the same sequence of instructions on different sets of data
Esempio: ILLIAC IV (primo computer SMID al mondo) Contiene 4 quadranti ciascuno con una griglia 8x8 di memorie/processori Ogni quadrante ha la sua unità di controllo Ogni unità di controllo distruibisce una singola istruzione a tutti i processori del quadrante Ogni processore del quadrante svolge la propria istruzione con i dati nella propria memoria Esempio 2: Fermi GPU PROCESSORE SIMD della GPU fermi Contiene 16 multiprocessori streaming (MS) Ogni multiprocessore streaming contiene 32 processori SIMD Ogni processore SMD contiene 2 registri per OPERANDI ALU, 1 registro per OUTPUT ALU, Una ALU e Un unità virgola mobile. Ogni MS ottiene 2 thread, per ciascuno dei quali le istruzioni vengono eseguite fino a 16 processori SIMD x ciascun THREAD Quindi ogni SM si occupa di 2 thread, fornendo 32 operazioni/ciclo E ci sono 16 multiprocessori streaming, allora in totale ci sono 16 * 32 operazioni a ciclo = 512 operazioni a ciclo Processori Vettoriali La stessa cosa solo che anziché avere un sommatore per ogni SMID, si utilizza un unico processore con pipeline su un registro vettoriale Anziche svolgere le operazioni di somma per ogni elemento di un vettore per ciascun processore, con rispettivamente un sommatore per ogni unità, si utilizzano i vector register, facendo la somma con CPU utilizzando le pipeline e più unità funzionali per produrre più risultati
Multicomputer Costruire tante CPU con ciascuna accesso alla memoria condivisa risultava difficile, quindi si è deciso di cambiare Un multicomputer sono una serie di computer connessi tra loro, ciascuno con una memoria privata ma senza memoria in comune Ovviamente connettere ogni computer ad ogni altro computer è difficile, quindi si utilizzano sistemi come ad anello, ad albero ecc.. In questo modo due computer spesso non possono comunicare direttamente, ma passano i loro messaggi attraverso uno o tanti intermediari 2.2 Memoria principale Parte dove programmi e dati vengono conservati 2.2. Utilizza i bit (binary digit o cifra binaria), perché avendo solo 2 opzioni a disposizione è più facile dal punto di vista fisico associare la tensione. Più valori significherebbe maggiore probabilità di errore Alcuni sistemi "utilizzano" anche un sistema decimale, con cui dato un numero in forma decimale ad ogni cifra viene associato il corrispettivo rappresentato in 4 bit Esempio con 1944 Ovvio che con il primo si riesce a memorizzare fino a 1000 valori (9999 + lo zero) mentre con il secondo fino a 2 alla 16 valori ossia 65 mila. Se si utilizzasse il sistema decimale, con 4 bit ci sarebbero nel sistema decimale fino a 10000 combinazioni (n alla k) combinazioni mentre nel sistema binario 4 bit forniscono solo 16 combinazioni 2.2.2 Indirizzi di Memoria Memoria composta da celle Ogni cella contiene tot bits Se ci sono n celle, ci sono da 0 a n-1 indirizzi di memoria possibili Se ci sono k bit in ogni cella, ogni cella può contenere fino a 2k^ combinazioni Una cella che contiene 8 bit è chiamata byte Una cella è chiamata anche parola Se una parola ha 32 bit, possiede 4 byte (dal byte numero 0 al byte numero 3) Se un computer opera a parole di 32 bit, significa che svolge operazioni per manipolare tutti i 32 bit della parola 2.2.3 Ordinamento dei byte Big endian = i byte di una parola sono numerati da sinistra a destra (big endian = cifra più significativa)
significativa) Little Endian = byte della parola sono numerati da destra a sinistra (little endian = cifra meno significativa) In ogni caso la rappresentazione di un valore in un indirizzo è sempre la stessa: Il numero 6 in binario è 110 La rappresentazione in una parola di 16 bit sia per little che big endian sarà: 0000000000000110 Però considerando little endian 110 si troverà nel byte numero 0 Cosniderando big endian si troverà nel byte numero 3 Byte 0000 0000 0000 0110 Big Endian 0 1 2 3 Little Endian 3 2 1 0 Ovviamente trasferire dati tra una macchina big endian e una little endian è problematico. Siccome non ci sono solo interi e anche stringhe, per cui è difficile trovare una soluzione valida per entrambi, è opportuno pensarci Una soluzione è indicare subito prima del valore il tipo di dato che occupa quel determinato indirizzo, in modo da applicare uno specifico algoritmo per poter essere trattato per un trasferimento tra little endian e big endian Esempio: In Big Endian Primo Secondo Terzo Quarto J I M S M I T H 0 0 0 0 0 0 21 0 0 1 4 Ho nei primi 3 indirizzi di memoria il nome e cognome di un tizio Nel successivo indirizzo ho l'età del tizio Nell'ultima cella infine ho il numero di dipartimento a cui appartiene In questo caso JIM SMITH 21 anni Dipartimento 1x256 + 4x Trasferendo su little endian Quarto byte Terzo byte Secondo byte Primo byte M I J T I M S 0 0 0 H
Esempio Se progetto una lampadina perché si accenda con 11 e si spenga con 00 Questo significa che 00 e 11 sono le uniche parole riconosciute La distanza di Hamming vale 2 Quindi se arrivassero parole 01 o 10 l'errore viene riconosciuto (distanza consentita = 2-1) Se invece si accendesse con 1 e si spegnesse con 0, Se arriva un messaggio sbagliato (0 al posto di 1) il sistema comunque riceve lo spegnimento al posto dell'accensione quindi il messaggio viene riconosciuto Calcolo numero di bit di controllo per correzione errori singoli Se ho 4 bit (parola valida), e uso 3 bit di parità, il numero totale di possibili errori sarà 7: Per avere una parola errata basta invertire uno qualsiasi dei 7 bit che sto usando Esempio Parola valida : 1000 000 Parole non valide: 1000 001 1000 010 1000 100 1001 000 1010 000 1100 000 0000 000 Quindi on m bit di dati posso scrivere 2m^ parole Devo aggiungere r bit di bit di controllo Avrò possibilmente m + r parole sbaliate PER CIASCUNA PAROLA GIUSTA (un errore per ciascun bit variato) Inoltre una delle parole che non rientra in m + r sarà giusta In totale ho m + r + 1 parole totali ( m + r per ogni parola giusta + la parola giusta) Ovviamente se n = r + m Allora il numero totale di parole deve essere minore o uguale di quelle sbagliate x ciascuna parola + quella giusta 2 n^ >= 2m(n + 1) Dove 2 n^ numero di parole totali 2 m^ numero di parole GIUSTE possibili n numero di errori per ciascuna parola 1 parola giusta Questa formula serve per ricavare i numeri di bit di controllo necessari m + r + 1 < 2r Perché si e basta Dopo aver calcolato i bit di controllo utilizza il codice di Hamming per posizionare i bit di controllo correttamente nel messaggio
Memoria Cache Esiste uno squilibrio di velocità tra CPU e memoria. Pipeline e arch. Superscalari hanno si aumentato la velocità di CPU ma hanno contribuito ad aumentare il gap di velocità Quando si fa riferimento ad un x indirizzo di memoria, molto probabilmente il successivo riferimento sarà all'indirizzo di memoria successivo Ad esempio in un programma Le istruzioni sono probabilemente adiacenti Nei cicli probabilmente si svolge la stessa istruzione Quando si utilizzano matrici probabilmente si farà riferimento ad esse più volte per effettuare delle operazioni Per questi motivi è utilie creare un cache in cui registrare tutte le parole di memoria più utilizzate Pricipio di località Principio secondo cui se si tenta di accedere ad una parola in memoria, la parola stessa ed alcune parole adiacenti sono trasportate in memoria cache per poter essere riutilizzate Calcoli vari Sapendo che: In sintesi Tempo richiesto x accesso a memoria = c + (1-h)m Struttura delle cache Organizzate in linee di cache Se una linea di cache ha 64 byte e si sta facendo riferimento ad una parola all'indirizzo 260 allora si porteranno in linea di cache tra il byte 250 e byte 314 Problemi cache Quanto deve essere grande? (+ grande = + costo) Quanto devono essere le linee di cache? Con 16 KB di cache posso fare 1024 linee da 16 byte ciascuna oppure … Come tengo conto di cosa vado a mettere in cache? Utilizzo unica cache per istruzioni e dati o le suddivido? Se utilizzo pipeline, mentre la CPU sta facendo fetch istruzione deve fare anche fetch di eventuali operandi, quindi si preferisce suddividere cache di istruzioni e dati Utilizzo tante Cache o solo una? L1, L2, L3… 2.2.6 Assemblaggio e tipi di memoria Prima le memorie singole erano installate su Chip singoli. Ogni chip ha 16Mbit
2.3.2 Dischi magnetici Disco Magnetico Solenoide attraverso cui passa corrente che magnetizza le particelle magnetiche del disco Organizzazione del disco Suddiviso in tracce Ogni traccia possiede dei settori Ogni settore ha ▪ 512 byte di dati ▪ ECC (codice di correzione errore) ▪ Preambolo (x sincronizzazione testina-disco) Oggi i dischi sono organizzati in zone: procedendo verso l'esterno il numero di settori per zona aumenta (c = 2 pi raggio, aumenta la circonferenza quindi è possibile inserire più settori) Piatti = insieme di tracce ciascuno con la propria testina (contengono tracce da entrambi i lati, quindi 2 testine per 2 lati) Cilindro = tracce con stessa distanza dal centro Oggi solitamente i cilindri sono composti da 1 a 12 piatti (ciascuno può essere scritto da entrambi i lati, quindi 2 a 24 spazi di scrittura) Oggi dischi di alta qualità possono registrare fino a 1 TB su un piatto Lettura dal disco Tempo di SEEK (ricerca) Selezione del cilindro giusto con testina Tempo di Rotazione Selezione del giusto settore (più o meno la metà del tempo che ci mette per un giro) Tempo di trasferimento Con 150 MB/sec è un tempo irrilevante rispetto al tempo di Rotazione e di Seek Altri dati Burst rate, tempo con cui la testina legge una sequenza di bit dopo aver trovato il giusto settore Sustained rate, tempo con cui la testina legge più sequenze di bit (quindi burst rate + tempi di seek e rotazione) I venditori imborgliano fornendo 15% in meno della capacità di immagazzinare dati (perché ci sono ECC e preambolo) Controllore del disco ○ Un processore dedicato a ciascun disco ○ Accetta comandi software (READ, WRITE) per il disco ○ Converte 8 bit letti in sequenza di bit 2.3.3 Dischi IDE
Il BIOS comanda al controllore per iniziare il trasferimento dati dal Disco Nelle IDE il controllore è integrato con l'unità Selezione di un settore Scelgo tot bit per le testine (selezionare un lato di un piatto), tot bit per il cilindro, tot bit per il settore di un cilindro Esempio 2 bit x testine 3 bit x cilindro 5 bit x settore B = Byte di dati per settore Allora Posso selezionare massimo 4 testine, 8 cilindri e 32 dei settori in ogni traccia Capacità totale = 32 * 8 * 4 * B = 1024 * B Byte EIDE (cambia l'indirizzamento) Adesso si utilizza LBA Anziché usare diversi bit per testine, cilindro e settore si utilizzano 28 bit per numerare i vettori Poi il controllore del disco si occupava di convertire il tutto in indirizzi di testine, cilindro e settore Al massimo si possono indirizzare 2^28 settori Considerando 2 MB ~ 2 * 10^9 Byte per settore sono all'incirca 128 GB a disposizione 2.3.4 Dischi SCSI (pronuncia SCASI) SCSI sono come gli IDE ma hanno trasferimento dati molto elevato SCSI è un'interfaccia/bus composta da 1 controllore e 7 dispositivi scsi (hard disk, scanner, periferiche in generale) Ogni dispositivo connesso ha un ID tra 0 e 7 Ogni dispositivo ha 2 cavi, uno per input e uno per output. l'output di un disp. si collega all'input dell'altro. Il controllore è posizionato all'inizio Un cavo a 8 bit ha 50 contatti (25 per terra, 8 per dati, 1 per parità, 9 per controllo e il resto per alimentazione/altri usi) Il controllore invia comandi da 16 byte ai dispositivi per indicare cosa devono fare. I contatti per il controllo servono a gestire il bus ed evitare che venga usato più volte In questo modo tutti i dispositivi possono funzionare contemporaneamente (al contrario di IDE ed EIDE) 2.3.5 RAID Così come il parallelismo aiuta nelle CPU, si è pensato di fare lo stesso con i disp. I/O RAID = redundant array of inexpensive disks SLED = Single large expensive disk
Quindi aumenta anche barriera di elettroni di transistor Se applico elettroni canale non si attiva, quindi il canale = 0 Se applico elettroni canale si attiva, allora la barriera era bassa quindi in porta flottante c'era 0 e il canale vale 1 Ogni cella conserva il dato perché la porta flottante è isolata Scrittura Quando si vuole scrivere un dato si applica tensione che carica o scarica la porta flottante Letttura Si utilizza il transistor: Applico una tensione verso la sorgente del transistor Se il canale si attiva allora il bit è 1 (la porta flottante era scarica) Se il canale non si attiva allora il bit è 0 (la porta flottante era carica) Sorgente Canale Porta flottante Risultato Alta Alta 0 1 Alta Bassa 1 0 Vantaggi Tempo di lettura Svantaggi Costo Guasto dovuto al deterioramento degli isolanti (posti tra porta flottante e canale). Ogni cella può durare circa 100.000 volte Soluzione parziale: wear leveling Al costo di overhead suddivido la scrittura di dati lungo tutte le celle flash, in modo tale da prolungare la durata di un SSD 2.4 dispositivi I/O Generalmente un calcolatore è strutturato in questo modo Struttura fisica Un contenitore contiene una scheda madre in basso a cui sono attaccati ○ Chip della CPU ○ Slot in cui inserire modulo (come il SIMM o DIMM) ○ Bus lungo tutta la sua lunghezza ○ Prese in cui è possibile connettere schede di I/O (bus PCI) Struttura Logica
Un bus collega CPU, Memoria e disp. I/O Ogni dispositivo ha un controllore (contiene l'elettronica, può essere integrato su scheda madre) e il dispositivo stesso Controllore comunica con il proprio dispositivo con un cavo che porta alla parte posteriore del contenitore del calcolatore Controllore Gestisce il proprio dispositivo a l'accesso al bus Esempio: lettura da disco (DIRECT MEMORY ACCESS, DMA) Programma invia il comando al controllore, il quale manda le istruzioni al lettore. Il lettore individua traccia e settore e restituisce flusso seriale di bit Il controllore converte il flusso in una o più parole e scriverle in memoria Dopodichè controllore invia l'INTERRUPT che fa si che la CPU si interrompa e inizi la procedura INTERRUPT HANDLER che controlla se ci sono errori o fa altre azioni per gestire i dati ricevuti dal lettore. Dopo aver finito sto interrupt handler la CPU riprende a farsi i cavoli suoi Nel caso di conflitto tra CPU e controllore per l'utilizzo di bus si utilizza un arbiter 2.4.1 Bus I bus pre-esistenti iniziarono a diventare obsoleti, perché CPU, memorie e disp. I/O stavano diventando più veloci ma al contempo i disp. I/O continuavano a supportare un determinato modello di bus, che non poteva essere cambiato SOLUZIONE: bus PCI e PCIe di Intel PCI Struttura Un bus di memoria (per comunicazione efficiente CPU - Memoria) Un bus PCI dedicato esclusivamente alle periferiche I/O (quindi l'utente poteva mettere i propri disp. I/O con schede PCI negli slot)