Sistemi_Terza_Dispensa n.4 - Cisc e Risc PDF
Document Details
Uploaded by Deleted User
Prof.ssa Rossella Berardi
Tags
Summary
This document is a computer science lecture or handout, likely for a university course. It discusses computer buses, CPU components, and the concepts of RISC and CISC architecture. It is not a past paper, but rather supplementary notes, or a chapter from a textbook.
Full Transcript
Dispensa n. 4 Bus, I/O Cpu e componenti Cisc e Risc Per approfondimenti Libro capitolo 1 1 Prof.ssa Rossella Berardi 3A Inf. 2022-23 Bus Fino a venti o trent’anni fa, i proce...
Dispensa n. 4 Bus, I/O Cpu e componenti Cisc e Risc Per approfondimenti Libro capitolo 1 1 Prof.ssa Rossella Berardi 3A Inf. 2022-23 Bus Fino a venti o trent’anni fa, i processori erano così lenti nell’elaborare le informazioni che i BUS, durante le operazioni di lettura e scrittura, erano sincronizzati al processore stesso ed era disponibile un solo BUS di collegamento, chiamato BUS di sistema. Attualmente i processori sono così veloci che in molte architetture moderne esistono due o più BUS, ciascuno specializzato in particolari tipi di traffico. 2 Bus Le principali tipologie di BUS sono: SystemBUS o local BUS BUS di espansione Il primo, collega la CPU alla memoria di sistema ed è molto veloce, il secondo, più lento, mette invece in comunicazione altri dispositivi quali per esempio il disco fisso oppure la scheda audio o la scheda video. Esistono diversi tipi di BUS di espansione, per esempio PCI, USB, AGP, PCI Express, FireWire e altri ancora I BUS di espansione sono circuiti elettrici che si occupano di far colloquiare le schede di espansione con la CPU, risolvendo i conflitti e le collisioni 3 Bus di sistema Esternamente la CPU è collegata al resto del sistema tramite un insieme di pin (piedini, in Figura), ciascuno dei quali ha una funzionalità diversa: a ogni pin fa capo un determinato segnale, che può essere direzionato dalla CPU verso l’esterno, dall’esterno verso la CPU, o può essere bidirezionale (il segnale può andare sia dalla CPU verso l’esterno sia dall’esterno verso la CPU). Il numero e il tipo di segnali varia al variare del modello di CPU. 4 Bus di sistema In base al modello di Von Neumann, come sappiamo, la CPU comunica con il resto del sistema attraverso i bus. Il numero di linee dei bus varia a seconda dell’architettura. Nel tempo, tale numero è aumentato notevolmente, favorendo il miglioramento delle prestazioni del sistema. Le linee del bus dati sono bidirezionali e servono per il trasferimento di dati e/o istruzioni dalla memoria alla CPU, e dalla CPU alla memoria. Ogni linea può trasportare un bit e può quindi assumere valore 0 o 1. In questo modo un bus dati a 16 linee, per esempio, può trasferire fino a 16 bit. Il trasferimento avviene in parallelo ed è sempre scandito dal clock. Il bus dati serve per trasferire il contenuto della memoria principale nella CPU, oppure per trasferire il risultato di un’operazione dalla CPU alla memoria principale. 5 Bus di sistema Le linee del bus indirizzi sono monodirezionali e collegano la CPU a dispositivi di decodifica. Compito del bus indirizzi è quello di trasportare l’indirizzo di una cella di memoria o di una periferica coinvolta in un’operazione di lettura/scrittura. Il numero delle linee del bus indirizzi determina la dimensione della memoria fisicamente indirizzabile. Per esempio, un bus indirizzi a 16 linee può fisicamente indirizzare fino a 216 locazioni di memoria; un bus a n linee può quindi indirizzare fino a 2n locazioni di memoria. Ogni linea del bus indirizzi trasporta un bit e può quindi essere associata al valore 0 o 1. La configurazione degli n bit rappresenta l’intero indirizzo 6 Bus di sistema 7 Bus di sistema Le linee del bus controllo trasportano ciascuna un segnale preciso, al quale è affidato un determinato compito. Ogni segnale può essere in entrata o in uscita, in base alla funzione che deve svolgere. A differenza degli altri bus, il bus controllo non può essere letto come configurazione di bit; i suoi bit non fanno parte di un medesimo “messaggio”, ma sono tutti indipendenti e con significato proprio. 8 Bus di sistema Vediamo alcuni segnali del bus controllo. Lettura (RD): è attivato quando la CPU deve fare un’operazione di lettura da memoria o da periferica; è in uscita dalla CPU. Scrittura (WR): è attivato quando la CPU deve fare un’operazione di scrittura da memoria o da periferica; è in uscita dalla CPU. Memoria (MEM): è attivato se la CPU deve effettuare un trasferimento (lettura o scrittura) che coinvolge una locazione di memoria; è in uscita dalla CPU. Input/Output (I/O): è attivato se la CPU deve effettuare un trasferimento (lettura o scrittura) che coinvolge una 9 periferica; è in uscita dalla CPU. Bus di sistema Clock: è il segnale di temporizzazione; è in ingresso alla CPU. Interrupt Request (INTR): è il segnale di richiesta interruzione da parte di una periferica; è in ingresso alla CPU. Interrupt Acknowledge (INTA): è attivato dalla CPU quando viene accettata la richiesta di interruzione; è in uscita dalla CPU. Interrupt Non Mascherabile (NMI): è il segnale di richiesta interruzione non mascherabile; è in ingresso alla CPU. Quando la CPU riceve questo segnale deve sospendere l’esecuzione del processo in esecuzione 10 Bus Nel trasferimento di bit tra i moduli del modello di Von Neumann, il processore è soggetto (Master), mentre memoria e I/O sono oggetti (Slave) e il bus è il veicolo. In generale, il dispositivo in grado di iniziare un trasferimento dei dati è denominato master, mentre un dispositivo che inizia la comunicazione solo su comando del master assume il nome di slave. Alcuni dispositivi sono in grado di comportarsi sia come master sia come slave 11 Bus Trasferimento dati da processore a memoria (o all’ I/O) operazione di scrittura (Write) Trasferimento dati da memoria (o I/O) a processore operazione di lettura (Read) 12 Bus Per gestire i trasferimenti sul bus si usano le seguenti linee di controllo (sul CBus): Wait (attesa)Trasferimento completato (1) o in corso (0) I/O – Memse c’è 0 il Trasferimento riguarda processore e memoria; se c’è 1, il Trasferimento riguarda processore e I/O; R/W se c’è 0 è di scrittura; se c’è 1 è un’operazione di lettura Per convenzione, la sigla sopralineata indica bit a zero 13 Bus La quantità delle linee dell’ABus e del Dbus, non per forza coincidenti, sono spesso potenze di 2 LineeABus Dimensione ABus=2 È lo spazio di indirizzamento (quantità di memoria raggiungibile dai programmi) Ad esempio, un sistema con un bus di indirizzi a 32 bit può indirizzare 232 (4.294.967.296) posizioni di memoria. Dimensione DBus=max quantità di dati che è in grado di elaborare il processore in un solo trasferimento di Bus 14 Bus Esempio Libro: 15 Input/Output I dispositivi esterni, o periferiche, si collegano al bus di un sistema a microprocessore attraverso circuiti specifici di controllo e pilotaggio, indicati con il nome di interfaccia. Le periferiche si possono classificare in vari modi, ma quella più diffusa riguarda la modalità di transito dei dati: Ingresso (In): i dati provengono dall’esterno del computer e transitano verso il sistema; sono periferiche di ingresso, per esempio, tastiera, mouse, touchscreen, microfono, ecc… Uscita (Out): i dati vengono emessi dal computer verso l’esterno; sono periferiche di uscita, per esempio, monitor, stampante, cassa audio, ecc… 16 Input/Output Nei comuni sistemi operativi presenti sui PC le periferiche necessitano di un dispositivo hardware (controller) e di software specifici (driver software) in grado di accettare i comandi e di controllare il funzionamento dell’hardware. Lo standard Plug&Play permette ai vari dispositivi di autoconfigurarsi: ogni dispositivo ha particolari informazioni che il software di controllo utilizza per accettare e configurare i dispositivi assegnando a essi le risorse necessarie al loro funzionamento. 17 Input/Output Ogni dispositivo di ingresso-uscita è collegato ad un insieme di circuiti elettronici (detto CONTROLLER) che gestisce il coordinamento tra processore, memoria e dispositivo in modo da garantire il corretto trasferimento di dati. Il controller: Riceve gli ordini dal microprocessore e li trasferisce al dispositivo fisico Risiede su un circuito stampato ed è solitamente esterno all’unità periferica ed all’interno del case Il collegamento tra il controller e la periferica avviene attraverso opportuni connettori 18 Input/Output (es.libro pag.9) 19 Input/Output L’interfacciamento delle periferiche al bus avviene tramite porte Seriali o Parallele. SERIALI in cui i dati transitano un bit dopo l’altro: USB (Universal Serial Bus), per il collegamento di periferiche, che possono essere collegate anche con il PC acceso; IrDA (Infrared Data Association), collegamento a infrarossi; porte PS2 per mouse e tastiere (ormai obsolete); porte FireWire (comunemente usate per collegare dispositivi di archiviazione o dispositivi di acquisizione audio-video); PARALLELE in cui i dati transitano come più bit in parallelo. 20 Originariamente nei PC sono state utilizzate per le stampanti. Input/Output Nella trasmissione seriale i bit vengono inviati uno dopo l’altro, determinando l’ordine con cui vengono trasmessi. Nella trasmissione seriale asincrona la sincronizzazione del trasmettitore e del ricevitore è garantita dai bit di start e stop che precedono e seguono il dato trasmesso. Nella trasmissione seriale sincrona, invece, i bit vengono trasmessi come un flusso continuo e il sincronismo è garantito da una frequenza di clock; pertanto, in questo caso, i bit di start e stop non servono. Nella trasmissione parallela più bit di dati vengono trasmessi su più linee contemporaneamente. Ciò significa che i dati possono essere inviati molto più 21 velocemente rispetto alla trasmissione seriale Input/Output Un’operazione di ingresso (input) comporta la lettura da parte della CPU del dato presente su una periferica di ingresso. Un’operazione di uscita (output) comporta la scrittura di un dato su una periferica di uscita. Il microprocessore effettua queste operazioni tramite istruzioni particolari di In e Out che determinano, da parte dell’unità centrale, l’emissione sui bus di sistema dell’indirizzo della periferica e del dato. Altri segnali di controllo determinano la scrittura oppure la lettura del dato. 22 Input/Output La sezione di Input/Output (I/O) è come una zona separata che contiene celle (memoria speciale) riservate per gestire i dispositivi di I/O (tastiere, stampanti, monitor, ecc.). È un contenitore di celle, con uno spazio di indirizzi di I/O più piccolo rispetto alla memoria. Ogni periferica di I/O ha un range di indirizzi di I/O riservato registri di I/O o porte di I/O Se un dispositivo ha bisogno di uno spazio maggiore per funzionare, allora può utilizzare la memoria generale del sistema, non solo l’area di I/O. In questo caso, si dice che è mappato in memoria. In pratica, il sistema operativo e la CPU usano questi indirizzi per comunicare in modo organizzato con ciascun dispositivo, 23 rendendo possibile l’interazione tra hardware e software. Tecniche per la gestione delle periferiche Per accedere ai registri della periferica e quindi effettuare un trasferimento di dati, la CPU può utilizzare tre tecniche di gestione. Una gestione prettamente software in polling, in cui la CPU “interroga” ciclicamente la periferica alla ricerca di nuovi dati da ricevere e inviare. Una gestione con interruzione (interrupt). Con questa tecnica, quando la periferica deve essere servita, invia alla CPU un segnale; la CPU interrompe quindi l’esecuzione del programma in corso e “salta” a eseguire un altro programma La tecnica del DMA (Direct Memory Access), in cui la CPU rimane bloccata nello stato di attesa (WAIT), fino a quando la periferica non esaurisce il trasferimento dei dati. Questa tecnica è comunemente utilizzata per il trasferimento di dati ad alta velocità, come quello tra disco e memoria centrale. 24 Tecnica del polling Consiste in un’interrogazione ciclica e sequenziale che la CPU effettua nei confronti delle periferiche. A ogni periferica sono associati dei Flag di stato che contengono informazioni relative allo stato in cui si trova il dispositivo. L’unità centrale legge i Flag per individuare, per esempio, quello che indica lo stato di “dato pronto e disponibile”. A questo punto viene eseguito il frammento di codice relativo al trasferimento del dato dalla periferica al bus dati. Schema del funzionamento della In questo modo è possibile, per gestione di periferica tramite polling. La CPU interroga ciclicamente le esempio, verificare quando un tasto periferiche viene premuto sulla tastiera ed effettuarne la lettura del codice. 25 Tecnica del polling Il limite maggiore di questa tecnica consiste nel fatto che la CPU è costretta a spendere gran parte del suo tempo solo per continuare a interrogare i Flag, anche quando le periferiche non hanno nulla da segnalare. È come se fossimo in ansia di ricevere una chiamata telefonica e, continuamente, guardassimo il display del telefono per controllare se è in arrivo una chiamata. Oppure è come se continuassimo a guardare l’orologio per essere sicuri di non perdere un appuntamento, sottraendo così del tempo ad altre attività 26 Tecnica dell’interrupt È una tecnica certamente più efficiente del polling, anche se meno semplice. Scopo dell’interrupt è quello di “interrompere” la CPU nell’esecuzione di istruzioni che sta eseguendo, per farle svolgere un programma (routine) diverso. Alla fine della routine la CPU deve riprendere il programma interrotto dal punto successivo Schema del funzionamento della gestione di periferica tramite interrupt. all’interruzione La periferica “chiama” la CPU, che passa all’esecuzione delle routine di 27 servizio. Tecnica dell’interrupt La CPU può rispondere immediatamente, posticipare di poco la risposta o, addirittura, ignorare l’interruzione. L’interrupt può essere paragonato a uno squillo del telefono che arriva mentre una persona si sta facendo una doccia. La persona può ignorare lo squillo e non rispondere affatto, può rispondere dopo essersi risciacquato di dosso il sapone, oppure può precipitarsi a rispondere così come si trova. 28 Tecnica del DMA I calcolatori prevedono speciali modalità di trasferimento di I/O che non occupano il processore veicolando i valori di I/O direttamente da e verso la memoria mediante tecniche dette DMA (Direct Memory Acces) A fronte di una richiesta di I/O, il processore invia al DMA controller Tipo di operazione richiesta Dispositivo di I/O Indirizzo di memoria da cui iniziare a leggere/scrivere i dati Numero di byte da leggere/scrivere Il DMA controller avvia l’operazione richiesta e trasferisce i dati da/verso la memoria Completato il trasferimento, il DMA controller invia un interrupt al processore per segnalare il completamento 29 dell’operazione richiesta Tecnica del DMA È il modo diretto per il trasferimento dei dati tra I/O e memoria, senza dover passare dalla CPU. Il dispositivo DMA si sostituisce alla CPU, prende in carico il bus al suo posto e fa transitare i dati direttamente dalla periferica (per esempio il disco) alla memoria centrale, e viceversa. La comunicazione tra le periferiche di interfaccia e la memoria centrale può avvenire secondo due modalità. Nel caso di accesso diretto alla memoria (DMA), la comunicazione tra interfaccia e memoria non ha intermediari e i dati passano direttamente dall’una all’altra. In questo caso la CPU “si stacca” dal bus rimanendo in attesa fino alla fine dell’operazione di trasferimento dei dati (percorso tracciato in azzurro). Senza DMA i dati transitano dalla periferica alla CPU e da questa alla 30 memoria (percorso tracciato in rosso). La CPU e le sue componenti La CPU (unità centrale di elaborazione), è suddivisa in 3 diversi componenti: L’unità aritmetico-logica (Arithmetic Logic Unit, ALU) che esegue i calcoli elementari e le operazioni logiche (AND, OR, NOT); L’unità di controllo (Control Unit), che governa e impartisce gli ordini di esecuzione all’unità aritmetico-logica; I registri di appoggio, piccole aree di memoria molto veloci, utilizzate per memorizzare provvisoriamente i dati usati per l’esecuzione dei calcoli 31 La CPU e le sue componenti L’unità di controllo è quella parte adibita al prelievo delle istruzioni dalla memoria principale, del loro riconoscimento. Si occupa inoltre del controllo generale del funzionamento del processore. L’unità aritmetico-logica è quella parte che esegue le operazioni elementari richieste dall’unità di controllo a seconda delle istruzioni ricevute. I registri interni sono invece delle celle di memoria ad altissima velocità su cui agisce direttamente la CPU e l’ALU. In questi registri vengono memorizzate le informazioni di controllo ed i risultati temporanei delle operazioni svolte dall’ALU. Esistono diverse tipologie di registri [vedi dispensa n.2] 32 La CPU e le sue componenti I registri di uso generale (RA e RB) contengono i dati per le operazioni che vengono svolte dall’ALU: il risultato delle operazioni è riposto in RA e, nel contempo, lo stato dei Flag varia in funzione del risultato ottenuto. Per esempio, il Flag Zero assume valore 1 se il risultato dell’operazione Gli elementi fondamentali che costituiscono aritmetica è zero. Nel caso in cui l’operazione sia una l’architettura interna di una generica CPU sono: sottrazione, questo indica 1. l’unità aritmetico-logica (ALU); che i due operandi sono 2. l’unità di controllo (CU); uguali. In questo caso il Flag Zero consente quindi 3. i registri; di confrontare gli operandi 4. i bus interni. L’Unità Aritmetico-Logica (ALU) Esegue le operazioni aritmetiche (somma, sottrazione, moltiplicazione e divisione se previste) e logiche (AND, OR, NOT). I dati su cui operare possono essere presenti nei registri oppure in memoria. Il risultato dell’operazione viene memo- rizzato in un registro e, nel contempo, viene influenzato il valore dei Flag. 34 L’Unità di Controllo (Control Unit, CU) L’Unità di Controllo coordina le operazioni svolte dalla CPU. I trasferimenti di dati o di istruzioni tra processore e memoria sono coordinati tramite segnali di temporizzazione. Mediante il bus controllo, la CU controlla il funzionamento dell’intero sistema. Per esempio, abilita la scrittura o la lettura da memoria o da I/O, inviando sul bus controllo determinati segnali: RD se lettura, WR se scrittura, I/O se è coinvolta una periferica, MEM se è coinvolta la memoria. I segnali sono ricevuti dalle componenti interessate al fine di eseguire il compito loro assegnato. 35 I registri generali I registri generali sono registri non specializzati, destinati a ospitare temporaneamente i dati in corso di elaborazione: i dati contenuti nei registri possono provenire dalla memoria o da altri registri, vanno all’ALU per l’elaborazione e da qui tornano ai registri dai quali vengono riportati in memoria. I registri generali sono accessibili al programmatore e ciascun processore possiede una propria architettura e di conseguenza una propria organizzazione dei registri: noi prenderemo come esempio l’ISA x86 dei processori Intel. 36 I registri generali I registri di uso generale, che in Figura (pag.33) abbiamo chiamato genericamente RA e RB, memorizzano temporaneamente gli operandi e i dati utilizzati per l’esecuzione di una istruzione. Ogni modello di microprocessore ne possiede in quantità diverse e usa nomi propri, per esempio AX, BX ecc. Di solito esiste un registro che è origine e termine di molte istruzioni e che prende il nome di accumulatore, indicato in genere con la lettera A. Il valore complessivo di tutti i registri della CPU costituisce lo stato in cui essa si trova in un determinato istante. Come vedremo, non tutti i registri sono direttamente accessibili dal programmatore. Per esempio, IR, MAR e MDR sono registri nascosti; per accedere a SP occorre utilizzare particolari 37 istruzioni; a PC si accede solo in modo indiretto. I registri interni Un registro è paragonabile a una lavagna sulla quale viene scritta un’informazione per un breve periodo di tempo. Per memorizzare un’informazione per un periodo più lungo può essere usata una cella di memoria, paragonabile a un quaderno o a un blocco note. Diversamente dalle celle di memoria, i registri non possiedono un indirizzo ma un nome specifico. È importante fare una distinzione tra i registri accessibili dal programmatore (modello di programmazione) e altri che invece risultano inaccessibili al programmatore, in quanto vengono usati direttamente dalla CPU per le proprie operazioni di controllo. Di seguito sono illustrati i registri interni non accessibili dal programmatore… 38 I registri interni MDR (Memory Data Register) È un registro interno collegato direttamente al BUS dati attraverso un buffer bidirezionale. Il registro non è visibile al programmatore e contiene i dati che la CPU vuole inviare o ricevere dalla memoria o dai dispositivi di I/O. Possiamo immaginare il registro MDR come una sorta di memoria di transito dove vengono immagazzinati temporaneamente tutti i dati scambiati con la memoria, prima di essere smistati presso gli altri registri interni. I registri interni MAR (Memory Address Register) È un registro interno collegato direttamente al BUS indirizzi. Non è visibile al programmatore e contiene gli indirizzi necessari alla selezione della cella di memoria oppure al dispositivo di I/O coinvolto nell’operazione. Durante la fase di fetch di un’istruzione il MAR contiene l’indirizzo della locazione di memoria in cui si trova l’istruzione che deve essere codificata, mentre durante la fase di execute, se si tratta di un’istruzione che fa riferimento alla memoria, contiene l’indirizzo dell’operando che deve essere letto dalla RAM IR (Instruction Register) È il registro interno che riceve il codice operativo dell’istruzione prelevata durante la fase di fetch. È invisibile al programmatore e contiene temporaneamente il codice operativo dell’istruzione durante la sua codifica Il modello di programmazione Il modello di programmazione è l’insieme degli elementi accessibili al programmatore, in generale tramite il linguaggio assembly e l’ambiente di debug. È formato dai registri accessibili e dall’ALU. Alcuni registri sono specializzati, cioè svolgono solo una specifica funzione mentre altri sono di uso generale, cioè possono essere usati dal programmatore per un qualsiasi scopo. Le trasformazioni dei dati contenuti nei registri vengono effettuate attraverso elaborazioni dell’ALU. 41 Il modello di programmazione PC (Program Counter) È un registro interno accessibile parzialmente dal programmatore che lo può usare per modificare il flusso sequenziale del programma. Il registro PC (nelle CPU Intel si chiama IP, Instruction Pointer) contiene, in ogni fase di avanzamento del programma, l’indirizzo di memoria in cui si trova l’istruzione successiva da eseguire. Una modifica del contenuto di questo registro provoca un “salto” all’indirizzo indicato. È un registro di tipo puntatore nel senso che il dato contenuto in esso si riferisce, quindi punta, a un dato che si trova in memoria all’indirizzo corrispondente al valore contenuto nel registro stesso. Normalmente il contenuto di questo registro viene incrementato automaticamente dalla CU ogni volta che l’esecuzione di un’istruzione è completata, in modo da potere leggere in memoria l’istruzione successiva. 42 Il modello di programmazione PSW (Process Status Word) Questo registro interno, chiamato anche registro dei flag (in italiano bandiere), non ha un significato nel suo complesso; ciascun bit che lo compone si comporta come una bandierina di segnalazione che fornisce informazioni sul risultato delle operazioni aritmetico-logiche L’ALU, a ogni operazione aritmetico-logica, aggiorna dell’ultima istruzione eseguita: il contenuto del registro PSW. Le informazioni per esempio il bit ZF (Zero contenute in questo registro sono essenziali per la Flag) segnala se il risultato costruzione degli algoritmi dei programmi. Grazie alle dell’ultima istruzione flag possiamo infatti realizzare le strutture aritmetico-logica era zero, fondamentali della programmazione (condizione, mentre il bit CF (Carry Flag) iterazione, sottoprogrammi): valutando il contenuto segnala se l’ultima istruzione dei bit del registro PSW, il codice di un programma aritmetico-logica aveva un può alterare il flusso sequenziale dello stesso per riporto realizzare i costrutti di scelta e iterazione e le chiamate 43 ai sottoprogrammi. Le istruzioni e il loro ciclo di esecuzione Come già visto, il normale ciclo di operazioni di una CPU è il seguente. 1. Fetch 2. Decode 3. Execute 4. Store 44 Le istruzioni e il loro ciclo di esecuzione 1. NELLA FASE DI FETCH Il PC viene copiato nel MAR. Il MAR viene copiato nel bus indirizzi. Il contenuto della cella indirizzata (l’istruzione) viene copiato sul bus dati. Il contenuto del bus dati viene copiato nell’MDR. Ora MDR contiene l’istruzione. Il contenuto di MDR viene copiato in IR per essere decodificato. 45 Le istruzioni e il loro ciclo di esecuzione 2.DECODE Il decoder decodifica l’istruzione. Se la decodifica indica che l’istruzione è più lunga di una locazione di memoria, la CPU legge anche il resto dell’istruzione e incrementa il PC del numero di locazioni lette. 3.EXECUTE L’istruzione viene eseguita e, di norma, il risultato viene salvato in un registro. In questa fase MAR potrebbe cambiare per leggere o scrivere valori in memoria. L’execute comporta l’invio di segnali di controllo a un certo numero di unità interne del computer, a seconda del significato dell’istruzione da eseguire. 46 Le istruzioni e il loro ciclo di esecuzione Quindi, riepilogando: Fetch. La CPU legge la nuova istruzione dalla memoria riferendosi all’indirizzo contenuto nel registro PC. Questa istruzione viene copiata poi nel registro IR. Il contenuto del registro PC viene riempito con l’indirizzo della istruzione seguente. Decode. La CPU analizza l’istruzione appena ricevuta e ne determina il tipo leggendo i primi bit del registro IR (questi bit rappresentano il codice operativo dell’istruzione). Se la nuova istruzione effettua un’operazione tra dati presenti in memoria, ne determina la posizione (gli indirizzi). Li preleva e li pone nei registri interni appositi. Execute. La CPU esegue l’istruzione con l’utilizzo dell’unità aritmetica logica (ALU) e ne memorizza il risultato in un registro o in una locazione di memoria, a seconda di quanto previsto dall’istruzione. Store Al termine della fase di Execute gli eventuali risultati, posti nei registri, vengono scritti sul bus dall’UC, o verso la memoria, o verso l’I/O Si riparte dal punto iniziale e si ripete il ciclo di esecuzione con l’istruzione seguente. 47 INSTRUCTION SET ARCHITECTURE Una ISA (Instruction Set Architecture) è un insieme di istruzioni (scritte in linguaggio macchina) che una CPU è capace di decodificare ed eseguire. Queste istruzioni sono caratterizzate da un Operation Code (Op.Code) e da alcuni parametri (operandi) che servono per l’esecuzione dell’istruzione stessa. A queste istruzioni è anche associato un codice mnemonico, ovvero un nome che ne ricorda la funzione. 48 INSTRUCTION SET ARCHITECTURE Una ISA di riferimento può essere, ad esempio: 49 INSTRUCTION SET ARCHITECTURE 50 INSTRUCTION SET ARCHITECTURE Libro pag. 11 INSTRUCTION SET ARCHITECTURE Libro pag. 11 INSTRUCTION SET ARCHITECTURE Le istruzioni di una ISA vengono eseguite dalla CPU grazie a dei microprogrammi che sono scritti a livello hardware (porte logiche, transistor etc.) all’interno del processore. Ogni processore ha un set di microprogrammi che permette di eseguire un preciso set di ISTRUZIONI. 53 Interazione tra RAM e CPU Cerchiamo di comprendere il legame tra CPU e memoria centrale. L’esempio seguente mostra come avviene l’esecuzione di un programma secondo l’architettura di Von Neumann. Consideriamo, per semplicità, una CPU con bus indirizzi a 16 linee e bus dati a 8 linee. Ipotizziamo che le locazioni di memoria siano di 1 Byte e i registri di uso generale a 1 Byte (la situazione è reale, ma oggi è applicata solo a CPU di piccolo taglio). Supponiamo che la CPU debba eseguire l’istruzione assembly: MOV R1,[0042h] che significa: «Trasferisci il contenuto della locazione di memoria di indirizzo 0042h, nel registro R1 54 Interazione tra RAM e CPU Supponiamo inoltre che l’istruzione sia codificata in binario con 3 Byte Questo significa che il programmatore scrive MOV R1,[0042h] e l’assemblatore (un apposito software) lo traduce in linguaggio binario: 001101100000000001000010. 55 Interazione tra RAM e CPU Supponiamo che nella locazione 0042h sia contenuto il valore F4h (11110100). Al termine dell’esecuzione dell’istruzione nel registro R1 sarà presente il valore F4h Il Program Counter (PC) punta alla locazione 0002h (in rosso).Il Program Counter è un registro di uso speciale che contiene l’indirizzo della locazione di memoria della prossima istruzione da eseguire. Nell’esempio, PC = 0002h, che è la locazione in cui ha inizio l’istruzione da 56 eseguire Interazione tra RAM e CPU Vediamo come avviene l’esecuzione dell’istruzione MOV R1, [0042h]. Fase di fetch La CPU pone sul bus indirizzi l’indirizzo 0002h. Viene attivata la locazione di indirizzo 0002h. Il contenuto della locazione 0002h viene posto sul bus dati (trasferimento in parallelo di un bit per ogni linea del bus). L’istruzione è posta nella 57 CPU nel registro istruzione corrente Interazione tra RAM e CPU Vediamo come avviene l’esecuzione dell’istruzione MOV R1, [0042h]. Fase di Decode L’unità di controllo decodifica il codice operativo dell’istruzione, ne “capisce il significato”. Nel nostro esempio, capisce che la CPU dovrà trasferire in R1 il dato posto alla locazione il cui indirizzo è nei successivi byte che costituiscono l’istruzione di cui sta interpretando il codice operativo. La CPU preleva, tramite il bus dati, i due byte rimanenti (indirizzo del dato) e pone l’indirizzo nel registro MAR. Il PC viene modificato e incrementato della lunghezza dell’istruzione appena letta; in questo caso l’istruzione è lunga 3 byte, quindi PC = 0002h + 3, cioè PC = 0005h. In questo modo sarà pronto per puntare alla prossima istruzione da eseguire (ricordiamo che un programma è una sequenza di istruzioni che devono essere eseguite nell’ordine in cui sono caricate in memoria. Il PC quindi deve sempre puntare alla prossima istruzione da eseguire) 58 Interazione tra RAM e CPU Vediamo come avviene l’esecuzione dell’istruzione MOV R1, [0042h]. Fase di Execute L’esecuzione dell’istruzione consiste nel trasferimento del dato. Viene posto sul bus indirizzi il contenuto di MAR (0042h). Viene attivata la cella 0042h. Tramite il bus dati viene prelevato il contenuto della locazione 0042h (F4h) e viene trasferito nel registro R1. A questo punto il ciclo riprende con la fetch dell’istruzione posta all’indirizzo 0005h (prossima istruzione) e continua fino a che l’istruzione letta viene interpretata come istruzione di HALT: il programma è terminato (il controllo passa al sistema operativo; significa che la prossima istruzione sarà di sistema operativo e non di programma utente. 59 L’insieme delle istruzioni: RISC e CISC Ad ogni determinato calcolatore (CPU) corrisponde uno specifico insieme di istruzioni, che andranno a costituire il livello base di programmazione: il linguaggio macchina. Questo linguaggio varia quindi da macchina a macchina essendo specifico dell’architettura interna del calcolatore. Esistono insiemi di istruzioni con tanti o pochi comandi: RISC CISC Le macchine con insiemi di istruzioni molto piccoli vengono dette macchine RISC (Reduced Instruction Set Computers), mentre dalla parte opposta esistono macchine con vasti insiemi di istruzioni chiamate CISC (Complex Instruction Set Computers). 60 CISC: Complex Instruction Set Computer Un’architettura CISC ha le seguenti caratteristiche: Una ISA complessa che richiede una struttura complessa del microprocessore (microprogrammi) che diventa quindi difficile da progettare. Le istruzioni sono lente da eseguire, sia perché i microprogrammi sono più complessi ma, soprattutto, perché accedono molto alla memoria (e con modalità complesse). I processori di una architettura CISC utilizzano molti transistor (necessari per eseguire i microprogrammi) e hanno dunque meno spazio per i registri. 61 CISC: Complex Instruction Set Computer Alcuni vantaggi di questa architettura sono: È facile compilare un software per queste architetture. Le istruzioni complesse sono già simili a quelle di alto livello. I programmi generati dal compilatore risultano più compatti (utilizzano meno istruzioni perché sono più potenti) e quindi occupano meno RAM. Questo tipo di architettura si è diffusa verso la fine degli anni ’70 quando la memoria RAM era molto costosa e il divario di velocità tra processore e bus non era molto elevato. Un tipico esempio di questa architettura è la INTEL X-86 nata con il processore 8086 62 RISC: Reduced Instruction Set Computer Le architettura RISC nascono successivamente alle CISC (fine anni ‘80) principalmente per due ragioni: I programmatori ignoravano le istruzioni particolarmente complesse delle CISC, preferendo utilizzare quelle più semplici Il divario di velocità tra CPU e RAM era diventato notevole e i progettisti cercano un modo per limitare l’accesso alla memoria 63 RISC: Reduced Instruction Set Computer Un’architettura RISC è composta da poche semplici istruzioni. Tipicamente l’accesso alla memoria RAM è consentito solo ad alcune istruzioni (ad esempio LOAD e STORE) mentre le altre elaborano i dati contenuti nei registri. 64 RISC: Reduced Instruction Set Computer Un set di istruzioni RISC ha diversi vantaggi: Le istruzioni richiedono pochi microprogrammi per essere eseguite: i microprocessori saranno molto più semplici da progettare (conterranno meno transistor, necessari per creare i circuiti che eseguono i microprogrammi). Sul chip del microprocessore ci sarà più spazio per i registri Le istruzioni semplici saranno più veloci da eseguire, sia perché accedono poco e in modo semplice alla RAM (non utilizzo molto il bus) sia perché i microprogrammi sono semplici. 65 RISC: Reduced Instruction Set Computer Gli svantaggi principali: Il programma risultante dalla compilazione era piuttosto lungo (tante istruzioni semplici) e occupava molta RAM Era difficile per i compilatori tradurre il linguaggio di alto livello in istruzioni RISC (troppo poco potenti) 66 RISC: Reduced Instruction Set Computer I processori RISC più noti sono: ARM utilizzati su alcuni palmari e smartphone; MIPS utilizzati sulle console Playstation e Nintendo; PowerPC utilizzati per i supercomputer IBM e, fino al 2006, da Apple, successivamente passata a Intel Core Duo 67 L’insieme delle istruzioni: RISC e CISC Il successo dei processori CISC dipende solo dalla predominanza sul mercato di Intel e AMD e dai loro processori con architettura CISC. Per i consumatori, infatti, è molto più importante ricercare la compatibilità software con le loro applicazioni piuttosto che ricercare processori a prestazioni più elevate. Nessuna architettura RISC ha una base utenti così ampia da competere con Intel e, dunque, nessun produttore di software investirebbe su questo tipo di architetture. Le moderne architetture Intel sono però un ibrido tra CISC e RISC. Le istruzioni più complesse delle architettura vengono infatti tradotte internamente in istruzioni più semplici. 68 IL PROCESSORE 8086 Primo processore Intel con architettura X-86, del 1976, aveva le seguenti caratteristiche principali: 69 IL PROCESSORE 8086 Le line del DBUS sono in comune con quelle del ABUS. Le linee in totale sono 20 e un segnale del CBUS determina se sono utilizzate per un indirizzo (tutte e 20) o per un dato (solo le prime 16) La ISA è composta da istruzioni lunghe da 1 a 4 byte (a seconda degli operandi). Essendo un’architettura di tipo CISC le istruzioni accedono spesso alla memoria per salvare i dati temporanei dei calcoli (non ci sono abbastanza registri) Questo processore è 400 volte più lento dei processori montati sugli attuali smartphone e ha 2000 volte meno RAM 70 Pipeline, principi e caratteristiche Ad ogni istruzione di tipo CISC corrispondono più istruzioni elementari di tipo RISC. Ciò significa che a livello circuitale un’Alu di un processore CISC è enormemente più complessa di un’Alu RISC. Quindi la maggior semplicità di programmazione si ripercuote in una maggior complessità circuitale. Di fatto, l’approccio di tipo RISC nasce dal tentativo di semplificare le architetture dei chip attraverso un modello che prevedesse lo spezzettamento delle macro istruzioni CISC in tante istruzioni elementari. Questo si traduceva anche nello spezzettamento delle unità preposte alle operazioni di lettura, decodifica e esecuzione delle istruzioni, in tante unità “elementari”, disposte serialmente, che svolgessero gli stessi compiti. Nasce così il concetto di pipeline 71