
















































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti di informatica A, corso seguito al politecnico di Milano con sede a Lecco. Basi dell'informatica, linguaggio C e utilizzo di Access (SQL)
Tipologia: Appunti
1 / 56
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!

















































L’informatica si occupa della rappresentazione e dell’ elaborazione dell’informazione. Quindi l’informatica esiste da parecchio tempo: le prime macchine in grado di elaborare le informazioni risalgono al ’600 (pascal costruì una calcolatrice in grado di svolgere le operazioni di somma e sottrazione, poi ampliata da Leibnitz nel 1670 che la rese in grado di eseguire anche moltiplicazioni e divisioni). Negli ultimi anni ’30 si passò da metodi meccanici a metodi pneumatici (in funzione della pressione nei tubuli si rappresentavano ed elaboravano informazioni). Ora ci sono i calcolatori elettronici, che una volta svolgevano compiti di natura bellica, per esempio venivano utilizzati per calcolare le traiettorie dei missili. Con una codifica di natura elettronica (tensione e corrente) abbiamo 2 meccanismi: analogico e digitale. Analogico : per rappresentare un valore devo immettere una tensione corrispondente () Digitale : l’informazione è una giustapposizione di cifre ( visto come l’insieme di 4 cifre simbolo: cifra simbolo “3”, cifra simbolo “.” ecc.) Nel digitale non c’è corrente o tensione che corrisponde alla rappresentazione, ma cifre giustapposte. Le rappresentazioni analogiche sono affette da rumore, da effetti del mondo esterno, quindi oggi si utilizza soprattutto il mondo digitale.
RAPPRESENTAZIONE DELL’INFORMAZIONE
Vogliamo rappresentare un’informazione che poi andrà elaborata, quindi informazioni di tipo:
Byte: una codifica di informazioni che giustappone 8 simboli binari.
Voglio realizzare una macchina fisica che, ricevuti due numeri a e b in base 10, possa eseguire almeno qualche operazione e fornisca un risultato. La macchina fisica (transistor) opera in modo efficiente in base 2, quindi dovrò convertire e anticonvertire il risultato
Poniamo C : fase di codifica delle informazioni; : fase di decodifica delle informazioni. Consideriamo un numero Supponiamo di disporre di un’elettronica in grado di codificare n cifre in binario.
Se dispongo di un numero finito n di cifre rappresenterò un sottoinsieme di. Per ciascun numero rappresentato potrò creare un’associazione biunivoca tra codifica e numero. La rappresentazione dovrà essere posizionale e pesata.
è il resto della divisione tra e 2 e la parte restante ne è il quoziente. Ho determinato , devo generare :
è il resto della divisione tra e 2 e la parte restante ne è il quoziente. Questo procedimento si dice algoritmo di lunga divisione. Si dice algoritmo un procedimento che risolve un problema con un numero finito di passaggi in un tempo finito.
Es.
Ora bisogna decodificare il risultato:
Se deve essere soddisfatta la relazione e quindi : serve un byte.
ELABORAZIONE DELL’INFORMAZIONE
Per elaborare l’informazione devo essere in grado di compiere operazioni.
Sommare 3 significa spostarsi verso destra 3 volte. Quindi
Se l’alfabeto, così com’è, non basta, allora si genera un riporto, quindi
Ma per Dedekind potrei usare il complemento a 10.
Fissato l’operatore +, esiste una codifica per a , b e c che mi restituisca un risultato corretto? dove è l’opposto di. In uno spazio algebrico non ci sono più le sottrazioni, ma le somme algebriche. Devo introdurre il concetto di opposto. dove si legge “bi complementare” e significa che inverto gli 1 con gli 0 e viceversa: Operazione di complementazione : può essere rappresentato su n bit. Quindi In si utilizzano metà delle codifiche per rappresentare i positivi e metà per i negativi, quindi i positivi rappresentabili saranno come i negativi. Se Avendo rappresento un sottoinsieme di , se il numero in base 10 è positivo, allora la rappresentazione in CP coincide con il modulo in binario naturale su n bit. Se Perché c’è ancora la sottrazione in fase di codifica? Il è qualcosa che sta all’esterno del nostro sistema di riferimento poiché il peso massimo che può essere assunto da una cifra della codifica è. Questa sottrazione introduce dunque l’effetto specchio.
ES.? ?
Ho bisogno di almeno , perché quindi devo continuare l’algoritmo e aggiungo uno 0.
PREMESSA
Il CP2 permette di rappresentare i numeri interi ed esiste una sola codifica per rappresentare ogni numero intero, quindi è una rappresentazione non ridondante. Ciò permette una simmetria di rappresentazione: lo spazio di rappresentazione è. Dato e avendo n bit posso definire codifiche che staranno in uno spazio C avente base 2. Con queste codifiche creo delle corrispondenze biunivoche con gli elementi di. La trasformazione diretta di codifica si dice “ c ” e l’inversa di decodifica “”. Il nostro obiettivo è quello di realizzare una macchina fisica in grado di eseguire almeno le operazioni di addizione e sottrazione e che, accettando input decimali codifichi un codice binario e restituisca un risultato decimale.
L’INSIEME
Il punto chiave della definizione del CP2 è il calcolo del CP2 opposto, tale che Se dove sta a significare “in binario naturale su n bit” Se Considero e : l’unica differenza strutturale è la sottrazione di. Si dimostra che
ES. devo calcolare n ho bisogno di 5 bit
procedimento 1:
procedimento 2: procedimento 3:
Si dimostra che le codifiche che derivano dalla trasformazione di numeri positivi hanno, come bit in posizione più significativa uno 0, per i negativi è 1. Questo bit sarà il bit di segno.
1011: è un numero. Se fosse un binario naturale varrebbe 11. Se fosse un CP2 sarebbe un numero negativo. Se voglio sapere quanto vale bisogna decodificarlo generando l’opposto con il complemento bit a bit e sommando 1, otterremmo 0101=5 quindi 1011= -5. Questo per dire che l’elaborazione di un’informazione dipende dal contesto nel quale la si pone.
OPERAZIONI IN CP
Dati come svolgere la somma?
Osserviamo che la codifica del numero 2 in binario naturale coincide con la codifica del numero -2 in complemento a 2. Questo non ha nessuna implicazione: è semplicemente una coincidenza, infatti la codifica in binario naturale è un sistema di riferimento diverso dalla codifica in complemento a 2 e non ci sono relazioni immediate o intuitive tra di esse. Svolgiamo l’operazione Non si possono sommare due elementi, che potrebbero essere vettori, di dimensioni diverse. Come portare 10 a 4 bit? Basta dire che, se è il numero minimo di bit necessari è sufficiente estendere con due zeri il binario naturale, che diverrà 0010. Poi utilizzerò questa codifica per i calcoli in CP2. A riguardo, esiste questa regola: si considera il bit di segno e si ripropone alla sinistra tante volte quante sono necessarie a completare la codifica in bit.
Ora però sorge un problema: noi disponiamo di soli 4 bit, mentre il risultato ottenuto ne necessita 5 per essere rappresentato. Sulla nostra macchina fisica, che dispone di una rappresentazione a 4 bit visualizzeremo il risultato 1001, che è la codifica di un numero negativo e quindi potrebbe essere il risultato corretto. Genero l’opposto e sommo 1:. Questo è un numero positivo, ma io so che la rappresentazione in CP2 di un numero positivo coincide con la rappresentazione in binario naturale del modulo (svolgiamo così l’antitrasformazione, cioè la decodifica), quindi. Quindi il risultato complessivo è -7.
Svolgere la sottrazione
Devo generare ora genero l’opposto per decodificarlo:. Quindi.
Es.
7=4+2+ 3=2+ che è un numero negativo. Questo risultato è impossibile. Ciò significa che il risultato non può essere rappresentato su 4 bit. Si dice che è avvenuto un trabocco o overflow. (un esempio in base dieci potrebbe essere: 999 + 002 in 3 bit decimali).
Può esserci overflow quando la somma algebrica genera un risultato che non può essere rappresentato attraverso il numero di bit stabilito: questa situazione si manifesta solo quando ho delle operazioni che compongono segni concordi. Abbiamo overflow quando i segno concordi degli operandi sono discordi da quello del risultato. Se si verifica l’overflow il risultato su n bit non è corretto.
Se invece considerassi di sottrarre la parte intera al numero considerato otterrei. Ma se la rappresentazione è posizionale e pesata possiamo riscrivere questo numero come somma di finiti termini:
Quindi ma qui è la parte intera, il resto è la parte frazionaria. Quindi iterando il procedimento ottengo gli altri bit frazionari. Questo procedimento si dice algoritmo di lunga moltiplicazione. Se ora moltiplicassi per otterrei un numero intero e ridurrei il campo a. Se k è scelto in modo sufficiente a rappresentare il numero intero allora q rappresenta l’errore:
Quindi l’errore diminuisce molto rapidamente, in modo esponenziale.
Es. è un numero razionale. voglio rappresentarlo in virgola fissa. Rappresento 15 poi rappresento 33. Pongo.
0.33 2 0.66 0 1.28 1 0.56 0 1.12 1
L’errore è inferiore a
La rappresentazione in virgola fissa viene utilizzata su sistemi dedicati (cip di lavatrici, centraline delle auto ecc.) e non sui computer poiché questi devono poter lavorare su numeri molto piccoli o molto grandi, che necessiterebbero di moltissimi bit con una rappresentazione in virgola fissa. Per questo motivo è stato pensato un’altra rappresentazione, per spiegarla dobbiamo tornare ai numeri. Vogliamo mantenere un errore relativo costante. Si usa la cosiddetta notazione scientifica. dove sta per mantissa, per base ed per esponente. Per rappresentare un numero in modo univoco si rappresenta una tripletta. Osserviamo che la base non è necessaria ai fini dell’univocità, poiché la macchina fisica lavora solo in base 2, quindi la tripletta si riduce alla coppia. Questo tipo di rappresentazione di dice “in virgola mobile” o “floating point”. Pensiamo di dover rappresentare in virgola mobile. Ho infinite possibilità: potrei trascriverlo come ma in infiniti altri modi cambiando l’esponente. Dovendo rappresentare solo m ed e nella coppia è necessario scrivere il numero in forma canonica: L’esponente e la mantissa sono numeri interi, per i quali uso il complemento a 2: Un numero in virgola mobile su macchine a 32 bit ha 8 bit per rappresentare l’esponente e i restanti 24 (23 + 1 di segno) per la mantissa. In questo caso si parla di precisione singola. La doppia precisione rappresenta i numeri su 64 bit di cui 12 bit per l’esponente. L’elettronica soffre di questa rappresentazione: sommare due numeri significa portarli allo stesso esponente e poi sommare le mantisse. Chiaramente è dispendioso. All’interno dei computer c’è quindi la ALU, che lavora in virgola fissa, e la FPU, che lavora in virgola mobile. In fisica, pur avendo a che fare con numeri molto grandi, si usa la virgola fissa per la sua rapidità, perché le misurazioni richiedono immediatezza di calcoli. Si usano macchine quindi molto grosse, in grado di lavorare su un grande numero di bit.
RAPPRESENTAZIONI NON NUMERICHE
Informazioni di natura alfanumerica Le nostre tastiere ci permettono di rappresentare simboli distinti, avremo quindi uno spazio di informazioni che contiene dei caratteri. Per rappresentare 256 informazioni distinte servono 8 bit poiché
. La corrispondenza “” si chiama ASCI (American Standard Code for Information exchange). Nel controllore di tastiera ci sarà una tabella con 256 codifiche (da 0 a 255) in cui a ciascuna codifica sarà assegnato un carattere.
Informazioni di natura multimediale Si tratta dei segnali (audio), le immagini e i video. Un segnale è una grandezza scalare che evolve nel tempo. La funzione acustica, per esempio, sarà continua, ma la macchina non può rappresentare una funzione continua. Dovrà esservi una trasformazione che trasformi l’informazione continua in codifica digitale (discreta). Esisteono, sotto alcune ipotesi forti sulla struttura del segnale, delle teorie che permettono questa trasformazione. Esse dicono che la funzione continua può essere considerata una funzione a tratti. Si parla di campionamento, cioè un intervallo continuo viene suddiviso in un numero di sottointervalli, dove si dice periodo di campionamento e si dice frequenza di campionamento. Il teorema di Shannon dice che possiamo dimensionare esattamente sulla base di alcune caratteristiche matematiche sulla funzione continua. Più è ridotto migliore è l’approssimazione. In realtà il teorema dice che esiste un numero finito che ricostruisca esattamente la funzione continua. Avrò quindi costruito la successione degli elementi campionati:
Queste codifiche vengono rappresentate generalmente in virgola fissa. Il teorema di Shannon può essere interpretato pensando al fatto che, per la nostra natura di essere esseri umani, abbiamo dei vincoli associati alla struttura dell’orecchio, che acquisisce un sottoinsieme del mondo dei segnali che potremmo percepire (si pensi agli ultrasuoni). Il teorema sfrutta il fatto che l’orecchio non sarebbe in grado di apprezzare un campionamento con un periodo tendente a zero, quindi è conveniente usare un periodo proporzionato alla nostra capacità percettiva. Si parla appunto di trasformazioni di natura percettiva. Per quanto riguarda le immagini , esse sono matrici composte da righe ed colonne, che quindi individuano celle, in ciascuna delle quali risiede un’informazione di colore detta pixel , che è una codifica in bit. Se un pixel occupa byte, allora la dimensione dell’immagine sarà byte. Perché a 5 Mpixel non corrispondono 5 Mb, ma a volte molto meno? Questo è il frutto dell’utilizzo di algoritmi di compressione dell’informazione. Essi memorizzano una posizione (un vertice), la dimensione di un rettangolo e la codifica di un colore che sia comune a tutto il rettangolo, questo permette di utilizzare solo 4 informazioni (posizione del vertice, 2 dimensioni del rettangolo, codifica del colore) per sintetizzare il contenuto di molte celle. Anche il nostro occhio ha vincoli strutturali. Mentre osserviamo una scena, prima di tutto la osserviamo in bianco e nero, poi interviene il colore, questo ci porta a dire che nei nostri meccanismi visuali prima di tutto si osserva il contrasto in bianco e nero. Ma allora perché non inserire trasformazioni di natura percettiva? Queste trasformazioni sono note con il termine di luminanza (le scale di grigio) e crominanza (l’informazione sul colore). Tutti i colori possono essere generati da 3 colori di base: R, G, B (rosso verde e blu). Luminanza e crominanza sono delle funzioni di R,G,B. Volendo rappresentare un pixel rappresenterò la luminanza e la crominanza: in questo modo, rappresentando solo 2 informazini, ottengo lo stesso risultato che prima ottenevo rappresentandone 3. Se avessi una disponibilità ridotta di bit, dato che la luminanza è prioritaria, potrei assegnarle più bit. Il video è un’immagine che evolve con continuità nel tempo. Avrò quindi una struttura dimensionale che evolve nel tempo. Dovrò campionare con lo stesso metodo di campionamento dei suoni, ogni campione si chiamerà frame. Se i frame sono molto ravvicinati l’approssimazione è migliore, ma non ha senso avere molto piccoli: dovranno essere associati alla nostra capacità percettiva.
Si indica con “H”. Nel mondo dei calcolatori si usa la base esadecimale perché ha una capacità espressiva maggiore della base 10. La base 16 comprime le informazioni scritte in base 2. Il problema di una base troppo ampia sarebbe la necessità di memorizzare nella macchina molti simboli. La base sedici si compone di questi simboli:
Simbolo:
Questa porta logica riceve 1 input, quindi può formulare codifiche, organizzate nella tabella della verità:
Simbolo:
Questa porta logica riceve 2 input, quindi può formulare codifiche, organizzate nella tabella della verità:
Immaginiamo di connettere questi dispositivi creando un piccolo circuito.
Il circuito rappresentato è un circuito binario, quindi avrà una tabella della verità, che andremo a comporre inserendo una alla volta le 4 codifiche possibili. La tabella risultante è la seguente:
Notiamo che corrisponde alla tabella della verità della porta logica EX-OR, quindi il circuito rappresentato corrisponde a questa porta logica.
Fase di sintesi Ora che conosciamo le tipologie delle porte logiche possiamo adoperarle per costruire una calcolatrice tascabile che svolga le 4 operazioni. Andiamo per gradi. Avendo a disposizione a e b definiti su n bit ed un operatore voglio ricavare Proviamo a porre il problema in una forma canonica.
Queste due relazioni si possono sintetizzare in una sola:
Quindi
Partiamo dalla somma: Si tratta di sommare dei numeri positivi, quindi è necessario allineare le cifre del primo operando e le cifre del secondo operando in modo che cifre di uguale peso siano incolonnate. … … + … =
Dove indica il resto. Come si può notare, l’operazione di addizione è abbastanza complessa, ma la si può suddividere in più operazioni semplici. Per esempio consideriamo la colonna di peso : essa contiene solamente due addendi e restituisce un risultato. In termini tecnologici, avremo bisogno di un dispositivo contenente un circuito di porte logiche che, dati due input binari, ci restituisca un risultato ed un riporto. Non sappiamo ancora come debba essere composto questo circuito, ma conosciamo le condizioni che deve soddisfare, quindi possiamo scrivere la tabella della verità per poi dedurre le componenti necessarie. Dato che si parla di somme, il numero nella tabella corrisponderà al risultato di , mentre rappresenterà il resto dell’addizione binaria.
0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1
Ci accorgiamo subito del fatto che il numero può essere restituito da una porta EX-OR mentre da una porta AND. Costruiamo quindi il circuito in modo che entrambi gli addendi siano input per entrambe le porte:
Il dispositivo in questione si dice Half-Adder (HA)
Ora che abbiamo ottenuto questo significativo risultato possiamo provare ad utilizzare lo stesso procedimento per risolvere le addizioni a tre addendi per tutti gli altri pesi. Costruiamo quindi la tabella della verità:
0 0 0 0 0
Dato che è uno scalare, non una codifica in bit, lo considereremo alla fine. Ora consideriamo la somma
Avrò la seguente somma in colonna: … … + … =
Che è assolutamente analoga alla somma già svolta precedentemente, quindi possiamo semplicemente dire che il circuito in grado di svolgerla correttamente è il seguente:
Ora però sorge un problema: come trasformare , cioè il numero che viene immesso nella calcolatrice, in? Abbiamo precedentemente detto che:
Ma allora si può dire che E inoltre anche è binaria, infatti Se quindi codifichiamo in binario l’operazione e il bit siamo in grado di ricorrere agli strumenti che conosciamo per svolgere la trasformazione. Per capire come costruire il circuito valutiamone la tabella della verità:
0 0 0 0 1 1 1 0 1 1 1 0
Risulta evidente che la tabella ottenuta è assolutamente equivalente alla tabella della verità della porta logica EX-OR, quindi, immettendo in una porta EX-OR un e un bit otterremo , che poi andremo ad utilizzare nel dispositivo di calcolo complessivo. Ora consideriamo il valore scalare : esso è dipendente dall’operazione in questo modo:
Quindi si può dire che il bit di sia lo stesso. A questo punto basterà sostituire l’Half-Adder della colonna di peso con un Full-Adder e porre come riporto su e. Abbiamo completato la conoscenza sul dispositivo (ALU) in grado di eseguire la sottrazione, cioè la somma algebrica, e quindi le quattro operazioni: CLOCK DI SISTEMA Il tempo, per il sistema è discreto: ad ogni unità di tempo il sistema svolge un’operazione. Questo porta ad una conseguenza: è necessario osservare il risultato di un’operazione dopo un certo tempo , detto periodo, affinchè il risultato osservato sia corretto; se invece osservassimo troppo presto la codifica risultato, essa non sarebbe
quella corretta. Questo è ciò che accade se si considera la ALU appena costruita: se all’istante pigiamo il tasto “=” della calcolatrice immettendo così i valori , il circuito della ALU fornirà un risultato che è frutto dell’iterazione di molti passaggi (vengono coinvolti tanti FA quanti sono i bit sui quali la calcolatrice svolge le operazioni). Avremo quindi un risultato corretto dopo un periodo , il risultato corretto dopo due periodi, infine il risultato corretto dopo periodi. Saremo in grado di leggere il risultato solo dopo un tempo pari a dove corrisponde al tempo impiegato dal potenziale per propagarsi all’interno di un FA. Chiaramente siamo nell’ordine dei nanosecondi. Per evitare eccessive lungaggini sono stati messi a punto dei dispositivi di anticipazione del riporto che prevedono, per ogni FA, il riporto che il FA precedente dovrà generare. In questo modo è come se i FA lavorassero in parallelo, e il tempo totale impiegato dalla ALU a svolgere l’operazione diventa dove è il tempo impiegato da un dispositivo di anticipazione del riporto per svolgere il suo compito.
Il Clock (così si chiama l’orologio di sistema) è un cristallo di quarzo, all’interno del quale viene iniettata un’onda che rimbalzerà all’interno del cristallo sino ad acquisire la giusta direzione per uscirne. Quando questo accade ecco che la macchina inizia un nuovo evento, è cioè passato un “secondo” per il sistema. Il comportamento della tensione nel tempo è interessante: infatti essa è un’onda quadra, i cui fronti di salita indicano l’inizio di un nuovo evento (quindi una micro operazione), cioè scandiscono i “secondi” del sistema. Quando si parla di “secondi” del sistema si è nell’ordine dei nanosecondi reali. Le micro operazioni svolte dalla calcolatrice che abbiamo costruito saranno, in sequenza:
Come notiamo dalla figura, il periodo dipende solo dal clock, quindi i componenti della calcolatrice devono essere progettati in modo da rispettare, per ogni micro operazione, questo limite di tempo. A questo punto si potrà calcolare il tempo totale di risoluzione dell’algoritmo e impostare un tempo dopo il quale il risultato osservato è corretto. Quindi si andrà a leggere il risultato al passaggio di. Frequenza di clock: inverso di tau
CONSUMO DI SISTEMA
Il consumo energetico di un sistema non dipende dal numero dei transistor implicativi, ma solamente dal modo in cui essi sono organizzati: nei computer portatili, per esempio, sono presenti molti transistor, così da ridurre i consumi lasciando inalterata la potenza di calcolo. Il consumo del sistema di calcola con la formula: dove è la frequenza di commutazione del Clock, ovvero il numero di volte che la tensione cambia stato (da a e viceversa) in un secondo. Per diminuire i consumi si può agire sulla frequenza di commutazione ma anche sul voltaggio: la tensione però non può essere diminuita sotto i poiché altrimenti si potrebbe incorrere ad errori di trasmissione a causa del rumore esterno (i disturbi dell’ambiente potrebbero convertire una corrente di in una di ).
PREMESSE
Abbiamo studiato il funzionamento della Aritmetic-Logic Unit e abbiamo capito come si costruisce un’unità in grado di restituire un risultato. Una volta che la ALU ha elaborato un risultato è necessario utilizzare alcuni bit di FLAG per interpretarlo. Questi bit saranno organizzati all’interno di un registro di FLAG, della dimensione di 32 bit. Ma cos’è un registro? Come dice la parola stessa, il registro è un’unità di allocazione dei dati che conserva le informazioni, le salva, all’interno di celle. Ogni cella è costituita di un circuito di 3 porte logiche (due NOR e un NOT) disposti in questo modo: Questo dispositivo di memoria è detto Flip-Flop, è molto veloce ma anche costoso. È contenuto nelle CPU, che necessitano di molta velocità per eseguire i programmi.
cioè possono essere riscritte intorno al milione di volte, dopodiché si guastano.
necessario che sia presente un dispositivo controllore della DRAM che legga e riscriva periodicamente le celle di memoria.
Riassumiamo quindi quali sono i compiti della CPU:
Ecco una rappresentazione schematica della CPU: Internamente alla CPU vi sono dei BUS che collegano le varie componenti
Lettura della MEM Per poter accedere alla MEM la CPU ha bisogno di conoscere l’indirizzo della cella da cui prelevare il dato. Questo indirizzo è contenuto nel registro degli indirizzi della memoria MAR, mentre nel registro dati della memoria MDR è presente il dato che è già stato letto dalla MEM stessa. A collegare questi due registri con la MEM ci sono due BUS preposti: il BUS IND che collega unidirezionalmente il MAR alla MEM; il BUS DATI che collega bidirezionalmente il MDR alla MEM. Inoltre c’è un BUS di controllo bidirezionale che collega l’unità di controllo e decodifica UCD alla MEM. L’operazione di lettura si articola nei seguenti passaggi:
Scrittura della MEM Poiché i dati ricevuti o da inviare alla MEM si trovano nel MDR, la scrittura si articolerà nei seguenti passaggi:
Nella figura sopra notiamo la presenza di alcuni elementi mai visti prima, ecco le loro funzioni:
I/O Il dispositivo di Input/Output è un dispositivo elettronico in grado di interfacciare le periferiche con il mondo interno alla macchina. Il registro RDP contiene i dati in entrata e in uscita dalle periferiche, mentre il registro di stato definisce il modus operandi dell’interfaccia verso l’esterno, per esempio gestisce l’invio in parallelo o in serie dei bit a seconda della periferica collegata. Un problema molto diffuso nel campo delle comunicazioni tra dispositivi è quello del rumore: esistono particolari dispositivi che permettono di correggere errori di trasmissione derivanti dal rumore esterno.
Un programma non è altro che un processo di formalizzazione di un algoritmo, che si appoggia ad una grammatica. Questa grammatica è costituita da istruzioni, ciascuna avente il proprio compito specifico. Avremo quindi uno spazio delle istruzioni, così suddiviso:
biunivoca con lo spazio delle possibili codifiche, quindi a ciascuna istruzione in Assembler corrisponde una precisa codifica interpretabile dalla macchina in modo univoco. Il meccanismo di esecuzione di un programma può essere descritto da 3 fasi:
Fetch L’istruzione presente in MEM (di profondità 1 byte) deve essere portata all’interno della CPU. Per poter accedere alla MEM si richiede l’intervento del registro indirizzi MAR (che conterrà l’indirizzo della cella da cui prelevare il dato) e del registro dati MDR (che riceverà dalla MEM il dato stesso). Una volta prelevata la prima istruzione, il Program Counter punterà all’indirizzo della cella contenente la seconda istruzione, allora si farà un accesso a memoria tramite MAR ed MDR, che si apriranno verso il BUS IND e il BUS DATI. Vediamo in modo più specifico le varie operazioni:
Le codifiche delle istruzioni nella MEM possono essere riscritte in esadecimale dato che la MEM ha profondità 1 byte, e allo stesso modo possono essere riscritti in esadecimale i suoi indirizzi.
Rivediamo il procedimento con l’aggiunta di alcuni dettagli:
Quando la macchina viene avviata il PC è resettato a un valore binario che corrisponde a 00 in base 16, a questo punto si avvia il FETCH per cominciare l’esecuzione del programma, il quale sarà memorizzato nelle celle della MEM a partire dalla cella di indirizzo esadecimale 00. Per accedere alla memoria centrale, per prima cosa il valore presente nel PC viene trasmesso al MAR così da poter accedere alla cella corrispondente. L’UCD quindi genererà il segnale di read che e apre il MAR verso il BUS IND così che il dato “indirizzo” possa fluire verso la MEM e interpellare la cella 00. La MEM, una volta ricevuta l’informazione, preleva il dato (binario riscritto in esadecimale, per esempio 32) presente nella cella 00 e lo trasmette al BUS DATI. La MEM invia all’UDC il segnale MFC e l’UCD a sua volta invia al MDR il segnale di apertura verso il BUS DATI, così che il MDR scriva il dato 32 al suo interno, per poi chiudersi al BUS DATI. 32 però non è un dato vero e proprio, ma è un’istruzione, quindi non deve restare nel MDR, ma va prelevata e copiata nell’IR, perché solo l’IR potrà permettere all’UCD di capire di che istruzione si tratta. L’UCD sposta il contenuto del MDR nell’IR. La CPU ora contiene un’istruzione che è la stessa già referenziata dal PC. Questo è inammissibile perché il PC deve puntare sempre all’istruzione successiva rispetto a quella corrente, quindi la ALU verrà attivata per addizionare 1 al valore presente nel PC. Ad operazione completata nel PC c’è l’indirizzo della cella contenente l’istruzione successiva, cioè PC+1. Grazie ad alcuni dispositivi c’è la possibilità di anticipare le operazioni nel tempo. Questo è conveniente perché, essendo la MEM più lenta rispetto alla CPU, nei momenti in cui la CPU attende il MFC dalla MEM, essa può eseguire altre operazioni, per esempio la fase 4 di FETCH può essere eseguita contemporaneamente alla fase 2.
Decode La fase di decodifica dell’istruzione viene svolta dall’UCD, che si attiva con un nuovo colpo di Clock. Essa preleva i bit relativi all’istruzione presenti nell’IR, li “osserva” e li elabora, trasformandoli in un risultato. La UCD è un insieme di porte logiche, quindi il dato presente nell’IR implica esso stesso una determinato risultato uscente dall’UCD. Ad ogni istruzione corrisponderà un’uscita diversa ed univoca dell’UCD e quindi l’avvio di diverse funzioni. Ecco quindi riassunta la fase di DECODE:
Execute Come è intuitivo capire, la fase di esecuzione dipende dalla specifica istruzione e quindi dalla specifica uscita che l’UCD avrà generato attivando le relative funzioni. Nel caso dell’istruzione read inda : RDP F 0E 0 ind a
Osservazioni:
Supponiamo ora di disporre di un programma P scritto in Assembler e di una Macchina Fisica che si caratterizza per una determinata CPU. Come possiamo passare da un mondo mnemonico ad una sequenza di 0 e 1 che verrà poi posta all’interno alla MEM della MF che abbiamo acquistato? Come abbiamo detto, la CPU avrà un insieme di istruzioni particolari. Supponiamo che sia una CPU dedicata che deve eseguire esattamente il programma scritto sopra: allora le istruzioni che la CPU sa eseguire vanno inserite nello spazio delle istruzioni. L’istruzione complessiva può essere divisa in due parti: la prima codifica il tipo di istruzione, la seconda specifica il dato, l’operando, al quale applicare l’istruzione. Per esempio read inda e read indb sono la stessa