Informatica Generale Susanna Pelagatti email: [email protected] Ricevimento: Mercoledì ore 14.30-17.30 presso Dipartimento di Informatica, Via Buonarroti, 2 stanza 346 DE Tel. 050.2212.772 o per posta elettronica Pagina web del corso: http://www.di.unipi.it/~susanna/IG02/ 1 La struttura hardware 2 Ritorniamo alla …. struttura generale di un calcolatore • Il calcolatore di Von Neumann Memoria (RAM,dischi, etc) Mantiene Dati e Programmi Processore (CPU) E’ un esecutore capace di interpretare i singoli passi richiesti dai programmi (istruzioni elementari) Sottosistema di Interfaccia Permette di comunicare dati e programmi alla macchina e di ottenere i risultati (tastiera, micr., stampante, schermo, ) 3 Struttura di un calcolatore (2) RAM (memoria centrale) Processore bus Linee dati, indirizzi e controllo Interfaccia di I/O Interfaccia di I/O Interfaccia di I/O Interfaccia di I/O schermo dischi mouse modem 4 Struttura di un calcolatore (3) Sequenza di parole (un array …) indirizzi 0 1 2 3 4 RAM (memoria centrale) Processore . . . bus Linee dati, indirizzi e controllo Interfaccia di I/O Interfaccia di I/O Interfaccia di I/O Interfaccia di I/O schermo dischi mouse modem 5 Struttura di un calcolatore (4) Sequenza di parole (un array …) indirizzi 0 1 2 3 4 Valore da trasferire RAM (memoria centrale) Processore Dove trasferirlo . . . Direzione di trasferimento, unità coinvolte etc. bus Linee dati, indirizzi e controllo Interfaccia di I/O Interfaccia di I/O Interfaccia di I/O Interfaccia di I/O schermo dischi mouse modem 6 Struttura di un calcolatore (5) RAM (memoria centrale) Processore bus Linee dati, indirizzi e controllo Interfaccia di I/O Interfaccia di I/O Interfaccia di I/O Interfaccia di I/O schermo dischi mouse modem 7 Operazioni elementari eseguibili da un processore • Dati numerici (binari) : – operazioni matematiche : +,-,divisione e moltiplicazione per potenze di due – confronti con 0 – operazioni logiche o booleane: AND, OR, XOR, NOT • Dati numerici e non – letture/scritture nella memoria, letture e scritture nei registri di controllo dei dispositivi – uguaglianza e disuguaglianza di due rappresentazioni 8 Operazioni elementari eseguibili da un processore (2) • Operazioni di ‘controllo di flusso’ : – salti condizionati (corrispondono alla combinazione di istruzioni di controllo se ( …) vai al passo X ) – salti incondizionati (corrispondono alla istruzioni di controllo vai al passo X ) – chiamate di un sottoprogramma (CALL) – terminazione del programma (RETURN) 9 Operazioni elementari eseguibili da un processore (3) • Abbiamo elencato le funzionalità tipiche, i loro nomi ed il funzionamento specifico variano da macchina a macchina • Esistono sul mercato processori ‘compatibili’ cioè in grado di eseguire lo stesso insieme di istruzioni (facilita la portabilità dei programmi in linguaggio macchina) – es : Intel Pentium, IBM-Cyrix, AMD 10 Operazioni booleane • Sono operazioni che lavorano su variabili che assumono valori di verità o boolani (vero, falso) : – es : se fuori piove e mi sposto a piedi allora apro l’ombrello – La due sotto-condizioni (fuori piove, mi sposto a piedi) avranno un valore vero/falso che dipende dalla situzione in cui mi trovo – l’operatore booleano ‘e’ permette di combinare fra loro due valori booleani – il risultato dell’operazione ‘e’ è il valore vero se entrambi gli operando sono veri e falso altrimenti 11 Operazioni booleane (2) • Con le operazioni booleane è possibile complicare arbitrariamente le condizioni delle strutture se…allora…altrimenti e finchè...ripeti • Anche i valori booleani si possono rappresentare in codifica binaria: generalmente – 1 rappresenta VERO – 0 rappresenta FALSO • La definizione di ciascuna operazione booleana si può dare sotto forma di tabellina (la tabella di verità) 12 Operazioni booleane (3) Le operazioni boolane più comuni sono : • Operazione di and () : – A and B : combina i valori di A e B in modo che il risultato sia vero solo se sono veri sia A che B • Operazione di or () : – A or B : combina i valori di A e B in modo che il risultato sia vero solo almeno uno fra A e B è vero • Operazione di not () : – not A : restituisce falso se A e vero e viceversa 13 Tabelle di verità delle operazioni and, or e not A B A and B A or B Not A 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 14 Operazioni logiche/booleane : perché sono importanti • Sono facili da realizzare utilizzando circuiti elementari • È possibile dimostrare che tutte le funzioni interessanti possono essere calcolate utilizzando una opportuna combinazione delle funzioni logiche • Esiste un procedimento automatico per trovare questa combinazione, che viene utilizzato per realizzare le funzioni disponibili nell’hw 15 Operazioni logiche : perché sono importanti (2) • Quando si scrivono programmi che ‘parlano’ con l’hw spesso dobbiamo manipolare sequenze binarie direttamente • Usando le funzioni logiche è sempre possibile costruire la manipolazione che ci interessa – es: mettere a 0 il terzo bit di una rappresentazione consideriamo la rappr. mi costruisco la ‘maschera’ e poi calcolo AND ‘bit a bit’ 0001001111111 1111111111011 0001001111011 AND 16 Linguaggio macchina e assembler • Linguaggio macchina : linguaggio comprensibile direttamente dal processore della macchina (binario) • Assembler : versione simbolica del linguaggio macchina in cui i nomi delle operazioni e degli operandi sono indicati con codici simbolici 17 Linguaggio macchina e assembler (2) • Per ‘parlare direttamente con la macchina’ si usa l’assembler • Assemblatori : programmi che traducono il codice simbolico in sequenze di 0 e 1 • Nei prossimi lucidi vediamo un esempio di un tipico programma assembler e i passi necessari per la sua traduzione in binario 18 Linguaggio macchina e assembler (3) • Esempio: come si realizza in assembler l’operazione x=y+2 : LOAD Y, R1 ADD 2, R1 STORE R1, X R1 Legge il valore in Y e lo scrive in R1 17 Registro interno del processore (variabile temporanea su cui lavorare) memoria Y 34 X 222 Indirizzi di due parole di memoria che rappresentano le variabili intere x e y 19 Linguaggio macchina e assembler (4) • Esempio x=y+2 (assembler) LOAD Y, R1 ADD 2, R1 STORE R1, X R1 memoria Aggiunge 2 a R1 34 Registro interno del processore (variabile temporanea su cui lavorare) Y 34 X 222 Indirizzi di due parole di memoria che rappresentano interi 20 Linguaggio macchina e assembler (5) • Esempio x=y+2 (assembler) LOAD Y, R1 ADD 2, R1 STORE R1, X R1 memoria Scrive il contenuto di R1 nella parola di indirizzo X 36 Registro interno del processore (variabile temporanea su cui lavorare) Y 34 X 222 Indirizzi di due parole di memoria che rappresentano interi 21 Linguaggio macchina e assembler (6) • Esempio x=y+2 (assembler) LOAD Y, R1 ADD 2, R1 STORE R1, X R1 36 memoria Y 34 X 36 Situazione finale della memoria 22 Linguaggio macchina e assembler (7) • Traduzione binaria (in linguaggio macchina) di memoria LOAD Y, R1 ADD 2, R1 STORE R1, X • Prima di tutto dobbiamo decidere quale è il vero indirizzo di X e Y Y 01101 11100 X 23 Linguaggio macchina e assembler (8) • Codifica binaria di LOAD 01101, R1 ADD 2, R1 STORE R1, 11100 • Ogni operazione si codifica secondo un formato stabilito da chi costruisce l’hw – un formato semplificato è Codice operativo Modo 1 Op1 Modo 2 Op2 24 Linguaggio macchina e assembler (9) • Vediamo i vari campi del formato : Codice operativo Modo1 Op1 Modo2 Op2 È la codifica dell’operazione da eseguire es: ADD LOAD STORE 0001 0110 0111 25 Linguaggio macchina e assembler (9) • Vediamo i vari campi del formato : Codice operativo Modo1 Op1 Modo2 Op2 È la codifica primo operando, MODO1 dice a cosa si riferisce OP1 es: se MODO1 = 00 l’operando è nel registro interno del processore (e OP1 è il numero del registro) se MODO1 = 01 l’operando è in memoria (e OP1 è l’indirizzo) se MODO1 = 10 l’operando è immediato, cioè OP1 è direttamente il valore dell’operando Lo stesso vale per il secondo operando! 26 Linguaggio macchina e assembler (10) • Tipicamente la codifica di una istruzione ‘ lunga come una parola o multipli della parola per poterla leggere dalla memoria in modo più efficiente : – es : con parole di 4 byte (32 bit) Codice operativo 4bit Modo1 2bit Op1 Modo2 Op2 12bit 2bit 12bit 27 Linguaggio macchina e assembler (11) • Problema ….. – es : con 12 bit posso indirizzare ‘solo’ 212 parole di memoria centrale (RAM) ! Codice operativo 4bit Modo1 2bit Op1 Modo2 Op2 12bit 2bit 12bit Cioè posso avere al massimo una RAM di 4K parole … se ne ho di più (oggi si arriva tranquillamente a 512K e siamo sempre in aumento …) devo inventarmi codifiche diverse…. 28 Linguaggio macchina e assembler (12) MODI 00 registro 01 memoria 10 immediato CODICI OPERATIVI ADD 0001 LOAD 0110 STORE 0111 • Codifica binaria di LOAD 01101, R1 ADD 2, R1 STORE R1, 11100 Codice operativo 4bit Modo1 2bit Op1 Modo2 Op2 12bit 2bit 12bit 0110 01 01101 00 00001 load 0001 10 00010 01 00001 add 0111 00 00001 01 11100 store 29 Il processore • Come è strutturato il processore per riuscire ad eseguire i programmi in linguaggio macchina che abbiamo appena visto …. • Dati e programmi sono codificati in binario e risiedono in Memoria Centrale (RAM) ad opportuni indirizzi 30 Il processore (2) • Esegue il seguente ciclo ininterrottamente : 1. (fetch) legge una nuova istruzione da eseguire dalla memoria centrale 2. (decode) risale alla operazione richiesta decodificando la rappresentazione binaria 3. (execute) porta a termine l’operazione richiesta 31 Il processore: struttura base M e m o r i a c e n t r a l e PC Bus controllo Bus indirizzo Bus dati M A R Operazione PSW Esegui IR Parte controllo Registro/i coinvolti M D R R0 R1 R2 ... R16 ALU Registri generali Esito Processore 32 Il processore struttura base (2) • PC (program counter) indica l’indirizzo di memoria della prossima istruzione da eseguire • IR (Instruction register) contiene copia della codifica dell’istruzione da eseguire • MAR, MDR (Memory Address Register, Memory Data Register) contengono l’indirizzo della cella di memoria che vogliamo leggere/scrivere (MAR) ed i dati da/per la memoria (MDR) 33 Il processore struttura base (3) • PSW (program status word) contiene informazioni, opportunamente codificate, sull’esito di operazioni aritmetico logiche o sull’esito di operazioni di confronto e informazioni sul funzionamento della macchina (le vedremo qundo parleremo dei sistemi operativi) • ALU (Arithmetic-Logic Unit) effettua operazioni di tipo aritmetico e logicobooleano (+,-,and,or …) 34 Un esempio : ADD 2, R1 (fetch 1) Indirizzo della istruzione memoria Bus controllo 000..01 40 Bus indirizzo Bus dati 40 M A R PSW Esegui IC Parte controllo Registro/i coinvolti M D R R0 R1 R2 ... R16 codifica PC Operazione ALU Registri generali Esito Processore 35 Un esempio : ADD 2, R1 (fetch 2) Indirizzo della istruzione memoria Leggi! 41 40 000..01 PC Operazione PSW Esegui IC Parte controllo 40 Bus indirizzo Bus dati MAR M D R Registro/i coinvolti R0 R1 R2 ... R16 codifica ALU Registri generali Esito Processore 36 Un esempio : ADD 2, R1 (fetch 3) memoria 41 40 000..01 PC Operazione PSW Esegui IC Parte controllo 000110000100100001 Bus indirizzo MAR Bus dati MDR Registro/i coinvolti R0 R1 R2 ... R16 ALU Registri generali Esito Processore 37 Un esempio : ADD 2, R1 (dec) memoria 41 40 000..01 PC add PSW Esegui IC Parte controllo 000110000100100001 Bus indirizzo MAR Bus dati MDR Registro/i coinvolti R0 R1 R2 ... R16 ALU Registri generali Esito Processore 38 Un esempio : ADD 2, R1 (exe 1) memoria 41 40 000..01 PC add PSW Esegui IC Parte controllo 000110000100100001 Bus indirizzo MAR Bus dati MDR Registro/i coinvolti 00010 R1 R2 ... R16 ALU Registri generali Esito Processore 39 Un esempio : ADD 2, R1 (exe 2) memoria 41 40 000..01 PC add PSW Esegui IC Parte controllo 000110000100100001 Bus indirizzo MAR Bus dati MDR Registro/i coinvolti 00010 34 R2 ... R16 ALU Registri generali Esito Processore 40 Un esempio : ADD 2, R1 (exe 3) memoria 41 40 000..01 PC PSW IC Parte controllo 000110000100100001 Bus indirizzo MAR Bus dati MDR Registro/i coinvolti 00010 36 R2 ... R16 ALU Registri generali Esito Processore 41 Il processore : il clock ed i GHz • I vari sotto-passi che compongono l’esecuzione di una istruzione seguono algoritmi cablati nei circuiti della macchina • L’esecuzione è sincrona, – cioè esiste un segnale di ‘inizio della sottooperazione’ (detto tick, in quanto generato da un clock) riconosciuto da tutti i componenti • La frequenza con cui viene inviato il tick è misurata in ‘numero di tick al secondo’ (Hz) – nei computer attuali 1Ghz (giga hertz), ovvero uno al nanosecondo, o più 42