Introduzione
Lezione del 26/09/07
I processori possono seguire due logiche distinte:
CISC
La logica CISC si riferisce ai calcolatori a set di istruzioni complesse. Ci sono tante istruzioni diverse per compiere una sola operazione (ad esempio nello Z80 ci sono più di 10 diverse istruzioni di add).
- Vantaggi: programmi più compatti.
- Svantaggi: effetto n+1 ⇒ un processore ha n istruzioni; ne aggiungo una, cioè progetto un supporto hardware in più per eseguire questa istruzione aggiuntiva. Purtroppo, però, le n istruzioni iniziali del mio calcolatore vengono penalizzate dall’aggiunta di questa istruzione, soprattutto nella fase di fetch e di decodifica dell’istruzione:
- Nella fase di fetch, l’aggiunta di un’istruzione implica conseguenze in quanto se ho poche istruzioni, queste si compongono di pochi bit e quindi trasferirli dalla memoria è più semplice che non se ho molti bit, cosa che accade se ho tante istruzioni;
- Decodificare un’istruzione, infatti, significa capire, date n linee in ingresso, qual è quella che realmente mi interessa; aggiungere delle istruzioni implica quindi un numero maggiore di possibilità di scelta e quindi un aumento del tempo per reperire quella di mio interesse.
RISC
La logica RISC si riferisce ai calcolatori a set di istruzioni ridotto. Una sola istruzione per compiere una sola operazione (nel MIPS una sola istruzione di add).
- Vantaggio: rapidità nell’esecuzione di una istruzione.
- Svantaggio: il programmatore si deve adeguare alle poche istruzioni rese disponibili dall’hardware.
Esempio di codice in linguaggio ad alto livello (HLL):
temp = v[k];v[k] = v[k+1];v[k+1] = temp;
Compilatore e linguaggio Assembly:
lw $15, 0($2)lw $16, 4($2)sw $16, 0($2)sw $15, 4($2)
Linguaggio macchina
Il linguaggio macchina è un insieme di numeri in base 2 dove ogni lettera è una cifra binaria detta bit. I calcolatori funzionano grazie alle istruzioni che il programmatore gli fa eseguire: le istruzioni sono semplicemente una serie di bit comprensibili al calcolatore.
Poiché comunicare con il calcolatore attraverso numeri binari è molto complicato per gli esseri umani, sono stati inventati dei programmi in grado di tradurre una notazione simbolica, comprensibile per l’uomo, in codice binario. Il primo di questi programmi aveva il nome di assemblatore e traduceva la versione simbolica delle istruzioni, detta assembly language, nella corrispondente forma binaria, cioè in linguaggio macchina.
Sono stati poi inventati i linguaggi ad alto livello, linguaggi cioè molto più simili alla logica del programmatore che a quella della macchina: tali linguaggi vengono tradotti da un compilatore in un linguaggio di tipo assemblatore, il quale a sua volta lo traduce in linguaggio macchina.
Commenti alle istruzioni
lw $15, 0($2): Istruzione che carica dalla memoria ciò che trova all’indirizzo contenuto in $2 nel registro $15. Per eseguire questa istruzione è dunque necessario:
- L’indirizzo di memoria al quale trovare l’informazione di mio interesse. Per identificare l’indirizzo di memoria di mio interesse servono 32 bit, in quanto il MIPS ha 32 bit sul bus degli indirizzi.
- La destinazione, cioè il registro nel quale porre l’informazione che arriva dalla memoria. MIPS ha a disposizione 32 registri. Servono 5 bit per identificare il registro di mio interesse.
ISTRUZIONE: 6 bit codice operativo, 5 bit destinazione = registro, 32 bit indirizzo di memoria. 6+5+32=43 bit! Sono troppi, poiché il MIPS ha il bus dati da 32 bit!
Si può notare che il dispendio maggiore di bit è utilizzato nell’identificare l’indirizzo di memoria da cui prelevare il dato. La soluzione è la seguente: nell’istruzione non specifico l’indirizzo di memoria a cui devo andare, ma un registro in cui è presente l’indirizzo di memoria a cui devo andare, precedentemente caricato in tale registro. 6+5+5=16 bit!
I 16 bit mancanti dei 32 trasferiti vengono utilizzati come offset, cioè come spostamento, rispetto all’indirizzo di memoria a cui punta il registro. Lo spostamento possibile è di -215 < S < 215 -1, poiché i numeri sono in complemento a 2.
6 bit codice operativo, 5 bit destinazione = registro, 5 bit registro con l’indirizzo, 16 bit spostamento.
sw $16, 0($2): Istruzione che scrive il contenuto del registro $16 all’indirizzo di memoria contenuto in $2.
6 bit codice operativo, 5 bit sorgente = registro, 5 bit registro con l’indirizzo, 16 bit spostamento.
Struttura del software
Il calcolatore può eseguire solo istruzioni di basso livello. Passare da una complessa applicazione descritta in un linguaggio ad alto livello più vicino a quello umano fino ad arrivare a semplici istruzioni comprese dalla macchina, coinvolge diversi strati di software che interpretano e traducono le operazioni di alto livello in operazioni semplici per il calcolatore.
Questi strati di software sono organizzati in maniera gerarchica:
- Nel cerchio più esterno compare l’applicazione software, cioè programmi utente o mirati all’utente (editor, spreadsheet);
- Nel cerchio intermedio compaiono delle componenti software, dette software di sistema, cioè l’insieme di programmi che forniscono servizi (Sistema Operativo, compilatori). Esistono molti tipi di software di sistema, ma i due essenziali sono:
- Il sistema operativo: opera come interfaccia tra il programma utente e l’hardware, provvedendo a funzioni di supervisione, di gestione delle operazioni base di I/O, di gestione di spazio sui dispositivi di immagazzinamento dati e memoria, di condivisione del calcolatore tra più applicazioni...
- Il compilatore: traduce un programma scritto in un linguaggio ad alto livello, come C o Java, in istruzioni che l’hardware può eseguire.
- Nella componente più interna è presente l’hardware.
I linguaggi HLL permettono:
- Progettazione in linguaggio simile a quello naturale;
- Una maggior concisione rispetto al linguaggio macchina;
- Indipendenza dal calcolatore ⇒ riutilizzo di routine frequentemente impiegate librerie di subroutine.
Architettura della macchina di Von Neumann
L'architettura della maggior parte dei calcolatori elettronici è organizzata secondo il modello della Macchina di Von Neumann. La Macchina di Von Neumann è costituita da tre elementi funzionali fondamentali:
- Unità di input: tramite la quale i dati e i programmi vengono inseriti nel calcolatore per essere elaborati.
- Unità centrale di elaborazione, composta da:
- Memoria centrale;
- CPU (che a sua volta comprende ALU e unità di controllo). È la parte attiva di un calcolatore, quella che esegue fedelmente le istruzioni di un programma, sommando numeri, eseguendo confronti su di essi, segnalando ai dispositivi di I/O di attivarsi…
- I bus di comunicazione.
- Unità di output: necessaria affinché i dati elaborati possano essere restituiti all'operatore.
In un computer la circuiteria che esegue le operazioni sui dati è isolata nella CPU che è composta da un’unità aritmetico-logica, che racchiude i circuiti che eseguono l’elaborazione dei dati vera e propria e l’unità di controllo, che contiene i circuiti necessari per coordinare le attività della macchina. Inoltre, per la memorizzazione temporanea delle informazioni, la CPU contiene dei registri.
I registri generici fungono da luoghi di memorizzazione temporanea per i dati che sono elaborati dalla CPU: conservano i dati in ingresso alla circuiteria della ALU e forniscono uno spazio di memorizzazione per i risultati ottenuti. Per eseguire un’operazione sui dati registrati nella memoria principale, l’unità di controllo deve prima trasferirli nei registri generici, informare la ALU della nuova collocazione, attivare la circuiteria appropriata e comunicarle il registro che deve ricevere i risultati.
Per trasferire i dati, l’unità centrale e la memoria principale sono collegate da un insieme di fili detti bus. Tramite i bus la CPU è in grado di estrarre, leggere, posizionare o scrivere i dati in memoria principale, specificando l’indirizzo della relativa cella di memoria che si vuole raggiungere o in cui si vogliono depositare i dati. Sui bus transitano dati, indirizzi, segnali di controllo.
Un programma eseguibile dalla macchina di Von Neumann consiste in una lista di istruzioni registrate in memoria centrale, che devono essere eseguite una alla volta secondo l'ordine specificato nel programma fino a quando non si incontra un’istruzione di controllo, la quale può alterare il flusso sequenziale stabilendo il numero d’ordine della successiva istruzione da eseguire.
Lezione del 8/10/07
Unità centrale
Nei circuiti elettronici digitali sono 3 le condizioni di funzionamento:
- Forzato a 0;
- Forzato a 1;
- Condizione di non interferenza, cioè di alta impedenza che esclude la linea dal circuito. Questa è determinata dal bus control, dal segnale di read o di write.
Bus control
- Linea di read (rd) e di write (wr) comandate dalla CPU, che controlla istante per istante che riceve e chi pilota le linee;
- Il calcolatore è una macchina sincrona, legata cioè ad una temporizzazione: è necessario quindi un segnale di temporizzazione sulle linee del bus control: segnale di clock;
- Linea di interrupt (int): interrompe l’esecuzione di un programma per dare priorità a eventi più importanti avvenuti eccezionalmente;
- Legata alla linea di interrupt è la linea di accettazione di interrupt (int ack), cioè un segnale che viene inviato da chi ha ricevuto il comando di interrupt, per accettarlo o rifiutarlo. È un segnale di conferma di accoglimento della richiesta dell’interrupt;
- La linea di wait.
Diagramma temporale
Diagramma temporale che rappresenta le componenti attivate dalla CPU per effettuare una scrittura in memoria.
- Vengono attivati:
- Il bus indirizzi, nel quale è specificato l’indirizzo della cella di memoria di mio interesse;
- Il bus dei dati, nel quale è presente il dato da salvare in memoria;
- Il segnale di write che rimane attivo finché la scrittura è terminata.
Diagramma temporale che rappresenta le componenti attivate dalla CPU per effettuare una lettura dalla memoria.
- Vengono attivati:
- Il bus indirizzi, nel quale è specificato l’indirizzo della cella di memoria in cui si trova il dato mio interesse;
- Il bus dei dati, nel quale è presente il dato che la CPU ha richiesto. Tuttavia ora il bus dati non può essere attivato contemporaneamente al bus indirizzi, in quanto è necessario del tempo per reperire l’informazione in memoria. Il dato non è subito reperibile sul bus, poiché prima bisogna raggiungere la casella in cui è presente il dato e poi inviarlo sul bus.
Tuttavia, la CPU è molto più veloce della memoria: il periodo di clock della CPU può essere ad esempio 2 GHz, mentre la memoria ha velocità dell’ordine dei MHz! C’è il rischio che la CPU legga il dato dalla memoria, ancora prima che questo sia pronto, con la conseguente lettura di bit casuali. Per questo è necessaria la linea del bus dei controlli di wait: il segnale di wait viene inviato dalla memoria alla CPU per comunicare che il dato richiesto non è ancora pronto. La CPU fa permanere il segnale di read finché permane il segnale di wait.
Lo svantaggio nell’adottare questa situazione consiste nel fatto che la CPU viene rallentata, poiché è costretta ad adeguarsi ai tempi di ricerca della memoria. Il ciclo si conclude quando il segnale di wait si interrompe e quindi anche il segnale di read cessa.
Le dimensioni del bus
- Bus indirizzi: influenza la massima dimensione di memoria raggiungibile, lo spazio di memorizzazione: ho 2m celle di memoria, se m è il numero dei bit del bus.
- Bus controlli: dipendono dal dispositivo e dalle peculiarità del sistema.
- Bus dati: influenza il numero di dati che il processore è in grado di elaborare parallelamente. I microprocessori attuali hanno bus dati a 8, 16, 32, 64 bit.
Lezione del 10/10/07
Esempio
Variazione nella precisione di misura di 1 Kg. in un sistema di pesatura basato su microprocessori con diversa dimensione del bus dati.
Il peso è una grandezza analogica: devo trasformarlo in una grandezza digitale con un Analog to Digital Converter. Divido l’intervallo di misurazione in tanti intervallini: il primo assume valore identicamente uguale a 0, l’ultimo uguale a 1. Il numero di intervallini influisce pesantemente sulla precisione di rappresentazione.
| Numero di bit bus dati | Dati rappresentabili | Precisione relativa | Precisione max. |
|---|---|---|---|
| 4 | 24 = 16 | 6.25% | 62.5 gr |
| 8 | 28 = 256 | ~3.9 ‰ | ~3.9 gr |
| 16 | 216 = 65,536 | ~0.015 ‰ | ~0.015 gr |
Dispositivi single chip
Racchiudono all’interno di un unico circuito integrato, memorie, bus, CPU.
- Vantaggio: occupazione di uno spazio minimo.
- Svantaggio: non è espandibile.
DSP
Digital Signal Processor. Sono CPU particolari per elaborare dati con particolare rapidità.
La CPU
CPU (Central Processing Unit) = processore. È il vero “cervello” di qualsiasi computer. È costituito da uno o più chip, circuiti integrati che sono in grado di eseguire istruzioni di programma, leggere e scrivere nella memoria. La CPU include tutti i circuiti logici che permettono di prelevare in memoria una istruzione con gli operandi, decodificarla, eseguirla e trasferire qualsiasi dato verso la memoria o altri dispositivi.
È formata da:
- Bus dati interno: permette alla CPU di scambiare dati tra le varie parti che la compongono e i dispositivi esterni (memorie). Entrano ed escono i dati.
- Bus indirizzi interno: permette alla CPU di identificare gli indirizzi dei dati e delle istruzioni di cui necessita per eseguire le operazioni richieste e per immagazzinare in dispositivi esterni i risultati ottenuti. Solo uscente: la CPU richiede tramite il bus indirizzi interno e poi quello esterno, alle memorie, gli indirizzi in cui sono contenuti i dati e le istruzioni di cui necessita. Questi entrano nella CPU attraverso il bus dati.
- Registri interni: sono un insieme di memorie ad altissima velocità della capacità di pochi byte.
- MBR (Memory Buffer Register): vi vengono temporaneamente collocati i dati provenienti dalla memoria a seguito di lettura, o da ricopiare in memoria in caso di scrittura.
- MAR (Memory Address Register): contiene l’indirizzo della locazione di memoria nella quale si trova il dato da leggere o da scrivere che transiterà nel MBR.
- Registri generici: sono destinati a contenere dati, risultati intermedi o indirizzi di memoria durante le elaborazioni.
- Entrante e uscente verso il bus dati: i dati intermedi possono essere memorizzati e riutilizzati dalla ALU.
- Uscente verso il bus indirizzi: i dati contenuti possono essere memorizzati in qualche dispositivo esterno all’indirizzo fornito dal registro.
- Program Counter –PC–: è un registro particolare in cui viene memorizzato l’indirizzo di memoria al quale il processore trova la prossima istruzione da caricare ed eseguire. Ogni programma, infatti, viene memorizzato come una sequenza ordinata di istruzioni, ciascuna delle quali possiede un proprio indirizzo. Un incremento del PC comporta, al ciclo successivo, il caricamento dell’istruzione immediatamente successiva a quella eseguita. È un registro che si auto-aggiorna. Tuttavia, alcune istruzioni di jump modificano il contenuto del PC in modo che una locazione diversa da quella immediatamente successiva divenga la prossima istruzione da eseguire. Perciò, se l’istruzione di jump, il PC salta all’indirizzo di memoria indicato nell’istruzione di jump. Verso il bus dati interno uscente: richiede informazioni alle memorie esterne se un’operazione va rifatta n° volte. Entrante: carica la successiva istruzione che il processore deve eseguire.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Calcolatori Elettronici
-
Appunti Calcolatori Elettronici
-
Appunti lezione Calcolatori elettronici
-
Appunti lezione Calcolatori elettronici