Scarica Architettura di Von Neumann: Introduzione ai Concetti Fondamentali dell'Informatica e più Appunti in PDF di Elementi di Informatica solo su Docsity!
Il problema L’informazione è oggi oggetto di grande interesse: infatti si parla per esempio di società dell’informazione o di tecnologia dell’informazione. Però ci si accorge immediatamente che quello di informazione è un concetto diversificato e molto complesso. Una transizione L’evoluzione economico-industriale della società occidentale può essere interpretata secondo tre fasi:
- Società pre-industriale, gestione della materia attenzione rivolta alla produzione di beni materiali
- Società industriale, gestione dell’energia producendo beni materiali, ci si è anche resi conto dell’importanza di produrre in maniera efficiente
- Società post-industriale, gestione dell’informazione impiegando energia ci si è resi conto dell’importanza di controllare adeguatamente la produzione Un’altra transizione Da sempre le reti costituiscono per la società uno strumento indispensabile di trasporto, scambio e comunicazione. Dapprima reti per il trasferimento di persone e beni materiali:
- Reti stradali
- Reti fluviali
- Acquedotti Quindi anche reti infrastrutturali per il trasferimento di energia:
- Reti elettriche
- Gasdotti
- Reti petrolifere Infine anche reti per il trasferimento di informazione:
- Reti telegrafiche
- Reti telefoniche
- Reti informatiche
- Reti televisive Il problema rimane Cosa significa informazione? Un esempio: lampioni e semafori. Al di là delle differenza materiali, abbiamo una differenza funzionale. Il semaforo attraverso la luce trasmette un’informazione. Tre mondi Alcuni stadi dell’evoluzione cosmica (da K. R. Popper) Mondo 3 (il mondo dei prodotti della mente umana):
- Opere d’arte e di scienza (compresa la tecnologia)
- Il linguaggio umano. Teorie dell’io e della morte
Mondo 2 (il mondo delle esperienze soggettive):
- Coscienza di sé e della morte
- Sensibilità (coscienza animale) Mondo 1 (il mondo degli oggetti fisici):
- Organismi viventi
- Gli elementi più pesanti; liquidi e cristalli
- Idrogeno ed elio I calcolatori: cos’hanno di speciale? Molti strumenti sono stati progettati e realizzati per trattare informazione:
- Le matite servono per scrivere (non per trasferire grafite su carta)
- I violini servono per suonare (non per produrre onde sonore) A differenza di questi i calcolatori sono dispositivi programmabili. Ma cosa significa programmabile? Elaborazione dell’informazione La programmabilità di un dispositivo attiene alle modalità con cui esso gestisce informazione. Per esempio, per risolvere un problema, si può:
- Provare e riprovare (= operare nel mondo fisico)
- Fare i conti a mente (= operare nel “mondo 2”)
- Fare i conti con carta e penna (= operare con supporti passivi)
- Fare i conti con una calcolatrice (= operare con supporti rigidi)
- Oppure si può operare su dati mediante istruzioni Elaborazione dell’informazione Ogni essere umano elabora quotidianamente informazione in grande quantità senza la necessità di strumenti particolarmente sofisticati. Due situazioni possono rendere difficile questa attività:
- Quando il problema supera un certo grado di complessità
- Quando è necessario elaborare informazione con particolare rapidità Nel corso della storia, l’uomo ha creato molti strumenti in grado di supportarlo nell’elaborazione dell’informazione:
- Strumenti formali (per es. il sillogismo) che consentono di trattare entità di informazione dotate di una certa struttura, ricavandone delle conclusioni per via puramente elaborativa
- Strumenti materiali (modelli in scala, galleria del vento, …) che “materializzando” le entità di informazione su cui si opera ne facilitano l’elaborazione. I primi calcolatori meccanici Blaise Pascal (1623- 166 2)
- Dispositivo meccanico (ingranaggi azionati da una manovella) per l’esecuzione di somme e sottrazioni Gottfried Wilhelm von Leibniz (1646-1716)
- Introduce anche moltiplicazioni e divisioni (- calcolatrice a quattro funzioni)
John von Neumann Partecipa al progetto ENIAC. Due intuizioni fondamentali:
- Memorizzare i programmi in forma digitale nella stessa memoria dei dati per rendere più semplice la programmazione (rispetto all’utilizzo di cavi e interruttori)
- Utilizzare l’aritmetica binaria invece di quella decimale (due valvole per bit invece di dieci per cifra) Il suo progetto (macchina di von Neumann) è ancora oggi alla base di quasi tutti i calcolatori digitali. L’architettura di von Neumann Un calcolatore deve essere in grado di:
- Eseguire istruzioni sui dati
- Controllare il flusso dell’esecuzione
- Memorizzare i dati su cui operare
- Memorizzare successioni di istruzioni
- Interagire con gli utenti e con eventuali altri sistemi. Il Transistor Inventato ai Bell Labs nel 1948 da John Bardeen, Walter Brattain e William Shockley:
- Nel giro di dieci anni rivoluziona la ricerca sui calcolatori
- Alla fine degli anni ’50 i calcolatori a valvole sono già obsoleti Digital Equipment Corporation (DEC):
- Fondata nel 1957 da Kenneth Olsen
- Nel 1961 realizza il PDP-1, il primo minicalcolatore Sviluppo della tecnologia d’integrazione:
- Decine (SSI), centinaia (MSI) e migliaia (LSI) di transistor sono integrati sullo stesso pezzo di silicio (chip)
- Possibilità di creare calcolatori più piccoli, più veloci e meno costosi dei loro predecessori Due famiglie di calcolatori rappresentative:
- 360 di IBM
- PDP-11 di DEC Very Large Scale Integrator (VLSI) 105 - 107 transistor integrati per chip. Passaggio dai minicalcolatori, alle workstation, ai Personal Computer (PC):
- Usati per applicazioni fortemente interattive (elaborazione dei testi, fogli elettronici, …)
- In origine proposti come kit da assemblare, senza software Due architetture principali: Apple (basato su CPU Motorola e PowerPC)
- Primo PC, progettato da Steve Jobs e Steve Wozniak nel ‘
- Architettura proprietaria IBM e compatibili (CPU Intel e SW Microsoft – “Wintel”)
- Realizzato utilizzando componenti “off the shelf”
- Architettura di dominio pubblico, quindi replicabile da altri (cloni).
Il calcolatore in un sistema Vedi slide 20 di “introduzione” Interazione tra utenti e calcolatori Ciclo a-f
- Interazione tra un utente e un calcolatore
- Esecuzione locale di un programma o accesso a documentazione locale Ciclo a-b-e-f
- Interazione tra un utente e un calcolatore remoto, mediata da un secondo calcolatore in rete con il primo
- Esecuzione remota o distribuita di un programma o accesso a documentazione remota Ciclo a-b-c-d-e-f
- Interazione tra utenti mediata da calcolatori
- Esecuzione distribuita o cooperativa di un programma o scambio di documentazione Interazione uomo-macchina
- Input: dati e istruzioni
- Elaborazione
- Output: dati (risultati dall’elaborazione) Quindi il calcolatore si può intendere come una black box. Il calcolatore: interprete ed esecutore Ricevendo una richiesta dall’utente, il calcolatore svolge in successione due attività:
- Controlla di essere in grado di interpretare il comando, cioè di riconoscere il comando come corretto e corrispondente a un’azione che è in grado di eseguire
- Se il controllo ha dato esito positivo, esegue l’azione associata al comando e, quando richiesto, presenta il risultato all’utente Invece di inviare al calcolatore un comando per volta, l’utente può creare una successione di comandi (programma) e inviarla al calcolatore, che autonomamente è in grado di interpretare ed eseguire il programma stesso, un’istruzione per volta. La comunicazione con il calcolatore L’utente-programmatore e il calcolatore devono parlare uno stesso linguaggio. Un’ opzione potrebbe essere di “insegnare al calcolatore” a comprendere (= interpretare ed eseguire comandi espressi in) una lingua storico-naturale come l’italiano o l’inglese. Vantaggi:
- Lingue semanticamente ricche, e quindi sicuramente in grado di esprimere i comandi
- Lingue già note all’utente Svantaggi:
- lingue semanticamente ricche, e quindi a rischio di ambiguità
- lingue complesse da imparare/insegnare
Un esempio Comando:
- Se la condizione A è vera esegui l’istruzione B e poi esegui l’istruzione C Ambiguità:
- C deve essere eseguito comunque o solo se A è vera? Lo stesso comando riscritto in un linguaggio di programmazione non è più ambiguo:
- Se A è vero eseguii B; poi, in ogni caso, esegui C if(A) { B; } C;
- Se A è vero esegui sia B che C if(A) { B; C; } Calcolatori: strumenti di calcolo? Sebbene si consideri abitualmente che oggetto del calcolo sono i numeri, i calcolatori operano anche su dati non numerici, come testi, immagini, musica. Un problema di elaborazione di dati non numerici è riconducibile a calcolo numerico se per prima cosa i dati vengono codificati nella forma di numeri. Esempio:
- Un testo può essere convertito in una successione di numeri grazie al codice ASCII Data questa codifica , un problema come trasformare una frase scrivendo con l’iniziale maiuscola tutte le parole che la compongono (per cui “ciao mondo” dovrebbe diventare “Ciao Mondo” è effettivamente un problema di calcolo. Un esempio di calcolo Se il linguaggio di programmazione contiene un’istruzione words_uppercase(), il problema si risolve semplicemente: words_uppercase(“ciao mondo”). Altrimenti, è il programmatore a dover scomporre il problema in sotto problemi più semplici. Data la successione 99 105 97 111 32 109 111 110 100 111 la prima istruzione corrisponde a individuare le sotto successioni di numeri separate dal numero 32. La seconda istruzione corrisponde a sottrarre 32 al primo elemento di ogni sotto successione. Una volta codificati numericamente i dati in ingresso, il problema viene dunque risolto mediante semplici istruzioni come “ se … è uguale a … allora”, “somma … a …”, e così via. I problemi del calcolo Non ogni problema ammette una soluzione calcolabile.
- Quali problemi ammettono una soluzione calcolabile?
- Esistono problemi calcolabili che i calcolatori non sono in grado di risolvere?
- Esistono problemi che solo certi calcolatori sono in grado di risolvere? Cioè: esistono tipi diversi di calcolatori in relazione alla loro capacità di risolvere problemi?
La macchina di Turing Sistema di calcolo molto semplice:
- Nastro organizzato in celle, ognuna delle quali può essere vuota ([ ]) oppure piena ([#]) o nulla e con codifica unaria 1 – [#] 2 – [#][#] 3 – [#][#][#] …
- Un sistema di lettura e scrittura che opera in base a regole della forma: se sei nello stato … e nella cella hai letto …, allora nella cella scrivi ..., passa nello stato … e spostati nella cella … Per esempio il nastro …[][#][#][][#][#][#][]… codifica i numeri 2 e 3, e il calcolo della funzione x+y si può realizzare in questo modo: …[][#][#][][#][#][#][]… …[][#][#][#][#][#][][_]… La tesi di Church-Turing Intorno al 1930 l’inglese Alan Turing e lo statunitense Alonso Church proposero la seguente tesi:
- Ogni funzione “naturalmente considerata calcolabile” è calcolabile da una macchina di Turing La conseguenza è calcolabile:
- l’insieme delle funzioni calcolabili è lo stesso per tutti i calcolatori;
- le differenze di capacità tra diversi calcolatori sono solo quantitative (= tempo di calcolo) e non qualitative(=tipo di funzioni calcolabili)
Per interpretare le diverse configurazioni del supporto in termini di informazione è dunque necessario un codice, la cui validità è concordata per convenzione tra tutti coloro che debbano usare quell’informazione con quel supporto. Il codice associa a ogni configurazione ammessa un’entità di informazione. Configurazioni e configurazioni elementari, simboli e messaggi Generalmente si adottano supporti fisici le cui configurazioni sono costituite da insiemi ordinati di configurazioni più semplici, o “configurazioni elementari”. In questi casi, ben noti all’esperienza comune si applica dunque un principio di composizionalità: come la configurazione del costituito, così l’informazione complessivamente portata dal supporto, chiamata messaggio, si ricava dall’insieme ordinato dei simboli, cioè delle entità di informazione che corrispondono alle singole configurazioni elementari. Livelli di informazione e significato Le relazioni tra questi livelli sono basate ognuna su un codice che interpreta il significato delle entità che compaiono al livello precedente in termini delle entità del livello successivo: possono perciò essere intese come relazioni di significazione. Informazione sintattica, semantica e pragmatica Si è visto come il concetto di informazione intervenga ad almeno due livelli distinti: un livello fisico, in cui l’informazione è connessa alla selezione di una specifica configurazione da un insieme di configurazioni possibili, e un livello logico, in cui per ogni configurazione si stabilisce un significato in termini di entità di informazione, o messaggi. In sintesi, questi tre livelli possono essere caratterizzati come segue:
- Si tratta di informazione quando ci si chiede se un certo supporto fisico è adatto, in base alle configurazioni che può assumere, a mantenere un certo messaggio; ci si pone dunque un problema di relazione tra segni, cioè tra configurazioni del supporto fisico. A questo livello si parla di Informazione sintattica;
- Si tratta di informazione quando ci si chiede quale significato sia da attribuire a una certa configurazione del supporto fisico; ci si pone dunque un problema di relazioni tra segni e significati. A questo livello si parla di Informazione semantica;
- Si tratta infine di informazione quando ci si chiede quale valore sia da attribuire a una certa configurazione del supporto fisico; ci si pone dunque un problema di relazioni tra segni e valori. A questo livello si parla di informazione pragmatica. Informazione e riduzione dell’incertezza La quantità di informazione che si ottiene selezionando una configurazione da un insieme che ne contiene due assume il ruolo di “unità elementare” di informazione ed è chiamata bit.
La codifica dei dati e delle informazioni
Introdotto il concetto di informazione, è ora possibile esaminare le modalità di codifica dell’informazione che sono più frequentemente utilizzate nelle tecnologie dell’informazione e della comunicazione. È utile a questo punto far riferimento alla macchina di von Neumann: l’unità di elaborazione manipola i dati ed esegue le istruzioni contenute nell’unità di memorizzazione. Per
questo motivo le istruzioni e i dati devono essere rappresentati in un formato adatto alla memorizzazione e alla manipolazione da parte di un esecutore automatico. Si consideri come esempio la formalizzazione dei valori numerici che viene comunemente adottata: per rappresentare i numeri si utilizzano successioni di simboli, scelti da un insieme finito detto alfabeto. A ogni alfabeto è quindi associato un insieme di regole di composizione che definiscono le successioni ben formate, cioè quelle che appunto consentono di identificare dei dati. Per dati numerici una di tali regole stabilisce per esempio che può essere presente al più un separatore decimale, mentre una frase in lingua italiana è ben formata se, tra l’altro, non include due segni di punteggiatura contigui. Come si è visto, successioni ben formate di simboli di un alfabeto sono associate a dati mediante codici. In generale, dato un alfabeto di n simboli, si ottengono nk^ diverse successioni di lunghezza k, non tutte necessariamente ben formate La codifica binaria L’alfabeto più semplice che si possa adottare per la codifica di dati e istruzioni è costituito da due soli simboli, di solito indicati convenzionalmente come ‘0’ e ‘1’. Gli attuali calcolatori impiegano per memorizzazione dei dati e delle istruzioni proprio dei dispositivi, detti bistabili, in grado di assumere stabilmente una configurazione scelta tra due differenti: un alfabeto di questo genere, chiamato binario, è alla base dell’elaborazione automatica dell’informazione. I dispositivi bistabili sono usualmente chiamati bit, da binary digit: come le cifre decimali degli elementi base nella rappresentazione usuale dei numeri decimali, i bit sono dunque gli elementi dei codici utilizzati dai calcolatori. Nell’ipotesi che una qualsiasi successione di bit sia ben formata, con k bit si possono ottenere 2 k successioni diverse. A una successione di 8 bit si da il nome di byte, e di questo si considerano i multipli kilobyte, megabyte, gigabyte, terabyte. La codifica dei dati non numerici Nella gran parte delle applicazioni informatiche è necessario trattare con i dati non numerici, come singoli caratteri alfanumerici e loro successioni, che vengono generalmente denominate stringhe. In riferimento ai giorni della settimana, con un bit si possono distinguere per esempio i giorni che si trovano nella prima metà della settimana, associati al valore 0, dai successivi, associati al valore
- Essendo l’insieme composto da un numero dispari di elementi, si ipotizzi per esempio che i primi quattro giorni appartengano al primo sottoinsieme e i tre successivi al secondo. L’identificazione viene resa univoca introducendo un terzo bit, così che la posizione del giovedì all’interno della settimana viene codificata dalla successione 011. Per identificare un qualunque altro giorno non servono più di tre alternative: tre bit è quindi la quantità di informazione sufficiente per identificare univocamente un giorno della settimana. Si è già detto come una successione di k bit consenta di identificare n = 2 k elementi diversi; il problema posto è inverso: dato il numero #S di elementi da identificare, occorre ora determinare la lunghezza k delle successioni richieste. Dunque: k = élog 2 #Sù Dove éxù denota l’operazione che associa a un numero x il minimo intero maggiore o uguale a x. Il sistema di codifica più diffuso nella rappresentazione di caratteri alfanumerici è il cosiddetto codice ASCII che nella sua versione originaria prevede proprio successione di lunghezza k = 7.
Codifica binaria dei numeri interi Il modo più semplice per codificare in binario i numeri interi, dunque positivi e negativi, consiste nell’indicarne il segno (0 positivo e 1 negativo) e i restanti per la rappresentazione del valore assoluto del numero. Quando si hanno a disposizione n bit questa codifica consente di rappresentare i numeri interi compresi tra - 2 n-^1 +1 e 2n-1. La codifica con modulo e segno ha il difetto di duplicare la rappresentazione del numero 0, come se - 0 fosse diverso da +0, riducendo di fatto di uno il numero dei valori rappresentabili.
Codifica analogica e codifica digitale
La codifica è stata definita come l’operazione con cui l’informazione viene scritta su un supporto fisico. Tale operazione viene compiuta in 2 fasi:
- Dapprima l’entità di informazione da codificare viene convertita in una seconda entità di informazione;
- Quindi l’entità di informazione così ottenuta viene scritta sul supporto fisico. L’unico requisito del supporto è la capacità di mantenere distinte le configurazioni che identificano entità di informazione diverse. La presenza di un ordine o una metrica arricchisce l’insieme delle entità di informazione di una struttura, cioè di informazione sul “cosa si può fare” con le entità di informazione dell’insieme, in termini di relazioni di confronto e operazioni di combinazione. Si tratta di informazione sull’informazione, che potrebbe essere chiamata meta-informazione, e in presenza della quale l’insieme delle entità di informazione diventa un sistema, cioè appunto un insieme-con-struttura. Per risolvere il problema di come fare in modo che le configurazioni siano in grado di portare anche questa meta-informazione, sono possibili due strategie generali:
- Prima strategia: meta-informazione esplicita nel supporto. in questo caso si sceglie un supporto in modo che sull’insieme delle sue configurazioni sia definita una relazione analoga a quella che è presente tra entità di informazione.
- Seconda strategia: meta-informazione implicita nella regola di codifica. in questo caso si impiega un supporto cui si impone solo di assumere configurazioni molteplici e distinguibili l’una dall’altra. Le due strategie di codifica vengono definite rispettivamente analogica e digitale. Una codifica è realizzata in modo analogico quando stabilisce una relazione di analogia tra struttura delle configurazioni e struttura delle entità di informazione; la meta-informazione è rappresentata dal supporto. Una codifica è invece realizzata in modo digitale quando la meta-informazione è rappresentata solo implicitamente nella codifica. La digitalizzazione Per codificare in modo digitale una grandezza fisica i cui valori si assumono variabili in un intervallo continuo è necessario effettuare un’operazione di discretizzazione di tali valori, attraverso un procedimento di approssimazione con uno dei valori compresi nell’insieme di quelli previsti. Un esempio di questo procedimento, chiamato quantizzazione, è questo: l’insieme dei valori che la grandezza in esame può assumere viene suddiviso in un numero finito di sottoinsiemi, ognuno dei quali viene quindi rappresentato mediante una codifica digitale. L’operazione di quantizzazione deve essere ripetuta per tutti gli istanti di tempo durante i quali si vuole mantenere l’informazione sulla grandezza. Occorre perciò effettuare un’operazione di
campionamento della grandezza: si suddivide l’intervallo di tempo considerato in sottointervalli e per ciascuno di essi si sceglie un istante di riferimento; il valore che la grandezza assume in quell’istante viene considerato come rappresentativo del valore di tutto l’intervallo. Mentre il parametro che qualifica la quantizzazione è il numero di bit, il campionamento è caratterizzato dalla frequenza di campionamento. Se con la quantizzazione si discretizza il valore della grandezza, con il campionamento si discretizza il tempo in cui la grandezza viene osservata. Come accade per la quantizzazione, anche nel caso del campionamento la discretizzazione provoca, in generale, una perdita di informazione, dovuta al fatto che si considera un campione come rappresentativo di tutti i valori che la grandezza assume in un intervallo di tempo.
Algebra di Boole L’algebra di Boole (dal suo inventore G. Boole) serve a descrivere le operazioni logiche. Componenti dell’algebra di Boole:
- Operatori booleani
- Regole di trasformazione ed equivalenza tra operatori booleani Gli operandi booleani assumono solo due valori:
- Vero/Falso True/False 1/0 Si/No Operatori e tavole di verità Vedi slide 3. Notazione esistono convenzioni diverse:
- Negazione o Not A o ¬ A o! A@@ o – A
- Congiunzione disgiunzione o A and B o A Ù B o A & B o A ´ B
- Disgiunzione esclusiva (equivale a (A and (not B)) or ((not A) and B) o A xor B o A ^ B o A Å B
- Implicazione o A ® B o A Ì B o A Þ B
- Doppia implicazione o A « B o A @ B o A Û B Tabelle della verità Vedi slide 5 e 6. Espressioni booleane Equivalenza:
- Due espressioni booleane sono equivalenti se hanno la medesima tavola di verità. Tautologia:
- Un’espressione booleana è una tautologia sempre se è vera. Esempio: A OR (NOT A).
Contraddizione:
- Un’espressione booleana è una contraddizione se è sempre falsa. Esempio: A AND (NOT A). Proprietà degli operatori booleani Vedi slide 8. Dalla tabella all’espressione Conosciamo la tabella, ma non sappiamo qual è l’espressione. Ci basta trovare una delle espressioni equivalenti che hanno questa tabella della verità. VEDI TABELLA DELLA SLIDE 9.
- Identificazione di tutte le righe che hanno valore T;
- Per ogni riga identificata si costruisce una sottoespressione prodotto (and) di tutte le lettere che sono prese nella loro forma naturale o complementata seguendo i seguenti principi: a. Le lettere che nella riga in esame hanno valore T sono prese nella forma naturale; b. Le lettere che nella riga in esame hanno valore F sono prese nella forma complementata;
- Le sottoespressioni prodotto così ottenute vengono sommate (or) tra loro per realizzare l’espressione desiderata. Vedi slide 11, 12 e 13. Verifica Vedi slide 14. Un’altra espressione equivalente Vedi slide 15. Dalla tabella all’espressione – bisestile Cosa indicano le variabili a, b, c:
- A = il valore è divisibile per 4
- B = il valore è divisibile per 100
- C = il valore è divisibile per 400 Costruiamo la tabella e dobbiamo individuare l’espressione. Ci basta trovare una delle espressioni compatibili con questa tabella della verità. VEDI TABELLA SLIDE 17 Dalla tabella all’espressione Expr = m 4 + m 7 Expr = (a * (-b) * (-c)) + (a * b * c) = a * ((-b) * (-c) + (b * c)) Un’altra espressione compatibile Vedi slide 19.
Le infrastrutture hardware La memoria può essere vista come un insieme di celle adiacenti, ognuna caratterizzata da un proprio identificatore univoco, chiamato indirizzo, e in cui possono essere scritti o letti dati in formato binario. Il collegamento tra queste unità può essere organizzato in modi diversi, ma si è romai affermata una struttura standard basata sui concetti di bus e master-slave. Il bus è una linea alla quale sono contemporaneamente connesse le unità del calcolatore e che consente il trasferimento di dati tra tali unità. Ogni trasferimento di dati attraverso il bus avviene sotto la supervisione della CPU. Nel bus si evita qualsiasi collisione fra dati di competenza delle diverse periferiche. Il bus viene di solito integrato nella scheda madre del calcolatore, una superficie di materiale plastico su cui sono spesso montati, oltre al bus, la CPU, la memoria centrale e alcune interfacce di ingresso/uscita. Pregi e difetti di un collegamento a bus sono i seguenti:
- Semplicità;
- Estendibilità;
- Standardizzabilità;
- Lentezza;
- Limitata capacità;
- Sovraccarico della CPU. Il bus può essere suddiviso funzionalmente in tre componenti:
- Il bus dati, utilizzato per trasferire i dati;
- Il bus indirizzi, che identifica la posizione delle celle di memoria in cui la CPU va a scrivere o leggere;
- Il bus di controllo, in cui transitano i segnali di controllo. L’esecutore In un programma eseguito da un calcolatore basato sull’architettura di Von Neumann:
- Dati e istruzioni sono memorizzati in una memoria unica, che permette sia la scrittura sia la lettura;
- I contenuti della memoria sono indirizzati in base alla loro posizione, indipendentemente dal tipo di dato o istruzione ivi registrato;
- Le istruzioni vengono eseguite in modo sequenziale. Il linguaggio per cui la CPU si comporta da esecutore è detto linguaggio macchina. Ogni istruzione è identificata da un codice operativo, mentre gli operandi indicano gli indirizzi dove recuperare i dati su cui operare e dove copiare i risultati. Ogni CPU è caratterizzata funzionalmente dal suo linguaggio macchina, cioè dall’insieme delle istruzioni che è in grado di eseguire e dalle modalità di rappresentazione degli operandi. La struttura del processore La CPU può essere intesa come un dispositivo che opera in modo ciclico, ripetendo fino all’esecuzione dell’ultima istruzione, quindi alla terminazione del programma, le seguenti tre fasi:
- Lettura
- Decodifica
- Esecuzione All’interno di un processore si identificano in genere due parti principali: l’unità di controllo e il data path. Il data path comprende i dispositivi in grado di elaborare i dati e alcune unità di
Le infrastrutture hardware memorizzazione temporanea, i registri, in cui i dati da elaborare e i risultati dell’elaborazione vengono conservati per renderne più agevole la gestione. L’unità di controllo coordina le operazioni di tutto il processore. In particolare regola il flusso dei dati e indica quali registri debbano essere collegati agli ingressi e all’uscita dell’ALU, invia all’ALU il codice dell’operazione da eseguire e riceve indicazioni sull’esito dell’operazione appena eseguita dall’ALU. Uno dei compiti principali dell’unità di controllo è di provvedere al prelievo dalla memoria delle istruzioni da eseguire. Il ciclo di funzionamento della CPU:
- Prendi l’istruzione corrente dalla memoria e mettila nel registro IR, contemporaneamente incrementa il PC in modo che contenga l’indirizzo dell’istruzione successiva;
- Determina il tipo dell’istruzione corrente;
- Se l’istruzione usa dei dati presenti in memoria, determinare la posizione;
- Carica i dati, in un registro della CPU;
- Esegui l’istruzione;
- Torna al punto 1 e inizia a eseguire l’istruzione successiva. Esiste un tipo di architettura chiamata load/store, a indicare rispettivamente operazioni di caricamento dei dati dalla memoria nei registri e di archiviazione dei risultati dei registri nella memoria. Le CPU pipeline Per migliorare le prestazioni di un processore si possono seguire due strade: ridurre il tempo necessario per l’esecuzione delle singole istruzioni oppure aumentare il numero delle istruzioni che sono eseguite contemporaneamente. Per sfruttare in maniera più efficiente le diverse unità che compongono la CPU, è possibile adottare una modalità operativa che richiama il funzionamento della catena di montaggio nell’industria automobilistica: ogni stazione è specializzata nel completare una particolare fase della lavorazione e, in ogni istante, lavora su un solo prodotto. Il vantaggio della catena di montaggio deriva dal fatto che le diverse stazioni di montaggio sono attrezzate per svolgere ciascuna un piccolo compito, e tutte concorrono in modo ordinato all’obiettivo di produrre collettivamente tante automobili in poco tempo. In una catena di montaggio non vi sono tempi morti. Questa modalità di parallelizzazione si chiama pipelining, un nome che richiama la possibilità delle istruzioni di scorrere all’interno della CPU come il petrolio scorre nelle tubature di un oleodotto. Il lavoro che deve essere complessivamente svolto in una CPU pipeline per eseguire un’istruzione viene suddiviso in parti. Ciascuno di tali passi viene eseguito da un pezzo della CPU, che corrisponde quindi a uno stadio della pipeline. La durata di un ciclo di clock è dunque determinata dal tempo richiesto dallo stadio più lento della pipeline. Se gli stadi sono perfettamente bilanciati, l’incremento di velocità di esecuzione dovuta al pipelining è pari al numero di stadi di pipeline: una CPU pipeline a cinque stadi può arrivare a essere cinque volte più veloce della stessa CPU senza pipeline. Tutti gli stadi hanno una durata prefissata, che deve essere sufficientemente lunga da consentire l’esecuzione dell’operazione più lenta.