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.
vuoi
o PayPal
tutte le volte che vuoi
CENTRALE.
Questo è lo schema logico da tenere in mente
quando si parla di dispositivo programmabile.
Chiamata RAM
ALGORITMO: un insieme di operazioni che devono essere seguite in un dato ordine al fine di risolvere il
problema dato di tipo più complesso.
Le operazioni elementari che possiamo utilizzare per definire il nostro algoritmo sono le istruzioni di base
che il nostro dispositivo elettronico è in grado di eseguire direttamente in hardware, il costruttore delle
CPU costruiscono l’hardware elettronico in grado di eseguire determinate operazioni, l’insieme di
operazioni di base si chiama INSTRUCTION SET.
L’ISTRUCTION SET sono l’insieme di istruzioni che il nostro dispositivo elettronico è in grado di eseguire
perché il costruttore ha già costruito esso in grado di poter eseguire quel tipo di operazioni.
L’elaborazione di un problema complesso richiede la scomposizione del problema in una sequenza di
istruzioni incluse nell’istruction set. La rappresentazione di un problema complesso può essere fatta con
diversi algoritmi ovvero l’algoritmo non è univoco.
Andrea De Dominicis andrea.dedominicis@studentiunisalento.it
Avendo più algoritmi che vanno a rappresentare il medesimo problema si presenta un problema di scelte,
la scelta avviene in base all’efficienza dell’algoritmo, l’EFFICIENZA dipende dai seguenti criteri:
• Capacità di scomporre il problema di partenza nelle operazioni base (più veloce e occupa meno
spazio);
• “Espressività” delle operazioni base messe a disposizione dall’elaboratore (in base all’istruction
set l’efficienza può cambiare).
Esistono due famiglie di CPU:
• CISC (Complex Instruction Set Computer);
• RISC (Reduced Instruction Set Computer).
Seguono due filosofie differenti, CISC utilizza un’istruction set molto ampio però le istruzioni
singolarmente sono più semplici e le singole operazioni sono più semplici, nell’architettura RISC invece
l’istruction set è più limitato, la singola operazione è più complessa e la CPU ha bisogno di più tempo per
eseguire ogni singola istruzione.
Una volta che abbiamo definito l’algoritmo ovvero abbiamo capito come scomporre il nostro problema
complesso in operazioni più semplici, dobbiamo in qualche modo esprimere il nostro algoritmo.
Questa descrizione/rappresentazione dell’algoritmo viene eseguita attraverso un LINGUAGGIO che deve
presentare alcune caratteristiche:
• Non deve presentare ambiguità perché il computer non ha capacità di dare un significato a
ciò che si sta dicendo;
• Ogni singola istruzione deve essere identificata in modo univoco, ciò viene fatto
attraverso un campo CODICE OPERATIVO;
• Ogni singola operazione deve comprendere uno o due operandi nel caso in cui
l’operazione debba essere svolta su un operando.
Alcune istruzioni sono:
ISTRUZIONI DI TRASFERIMENTO
READ legge i dati in input
WRITE scrive i dati in output
LOAD xxx legge dall’indirizzo xxx della memoria e copia nell’accumulatore
STORE xxx copia il valore all’interno dell’accumulatore all’interno della cella di memoria xxx
ISTRUZIONI ARITMETICHE
ADD xxx somma il valore dell’accumulatore con il valore nella cella xxx della memoria, il risultato
è nell’accumulatore
SUB xxx sottrae il valore dell’accumulatore con il valore nella cella xxx della memoria, il risultato
è nell’accumulatore;
MULT xxx moltiplica il valore dell’accumulatore con il valore nella cella xxx della memoria, il
risultato è nell’accumulatore;
DIV xxx divide il valore nell’accumulatore con il valore nella cella xxx della memoria, il risultato è
nell’accumulatore.
Andrea De Dominicis andrea.dedominicis@studentiunisalento.it
Una macchina astratta è un INSIEME DI STRUTTURE DATI e di ISTRUZIONI
.
Una macchina astratta può essere realizzata in due modi:
HARDWARE
Molto efficiente;
Poco flessibile come soluzione (perché non posso far evolvere il mio linguaggio a
piacimento);
Per macchine complesse i costi possono essere molto alti.
SIMULAZIONE SOFTWARE
Meno efficiente;
Costi ridotti (posso far evolvere il linguaggio a un livello più mantenendo i costi per
l’hardware fissi).
Dato un certo algoritmo A che si vuole eseguire sulla macchina M è necessario descrivere A utilizzando il
linguaggio Lm eseguibile direttamente dalla macchina M.
Gli approcci per passare da un linguaggio di livello più alto a un linguaggio di livello più basso possono
essere di due tipi:
APPROCCIO INTERPRETATIVO: durante l’esecuzione del nostro programma scritto in L1 (scritto
in un linguaggio più ad alto livello) viene effettuata l’interpretazione di ogni istruzione in una o
più istruzioni in L0 (Phython, invece Java utilizza entrambi gli approcci: linguaggio intermedio o
bytecode)
-L’interpretazione introduce INEFFICIENZA durante l’esecuzione del programma;
-L’interpretazione avviene ad ogni esecuzione del programma.
-Portabile (Posso usare il programma su macchina con linguaggio macchina diversa a patto
che l’interprete sia disponibile per quel dispositivo su cui vogliamo eseguire il programma)
APPROCCIO COMPILATIVO: prima dell’esecuzione del programma viene tradotto dal linguaggio
ad alto livello a un linguaggio interpretabile ed eseguibile direttamente dalla macchina(C ):
- La traduzione avviene solo una volta(quindi non si perde tempo a eseguire ogni volta
l’interpretazione però se si devono eseguire delle modifiche sul linguaggio L1 bisogna eseguire
di nuovo la compilazione) ;
- Una volta tradotto si ottiene il programma in linguaggio macchina eseguibile
direttamente dal nostro dispositivo elettronico;
- Portabilità ridotta(nell’approccio compilativo si produce un programma meno portabile, nel
caso in cui si voglia utilizzare il programma su una macchina con linguaggio macchina diverso, si
deve obbligatoriamente eseguire la compilazione del programma nel linguaggio L0 del
dispositivo elettronico su cui vogliamo eseguire la portabilità)
Andrea De Dominicis andrea.dedominicis@studentiunisalento.it
02/02/2021
RAPPRESENTARE L’INFORMAZIONE ovvero descrivere un oggetto (astratto o concreto) attraverso
l’uso di un simbolo o di una sequenza di simboli.
Per rappresentare l’informazione si necessita di:
ALFABETO ovvero l’insieme di simboli che possiamo utilizzare per rappresentare
l’informazione;
CODICE ovvero l’elenco di tutte le sequenze possibili che possiamo comporre utilizzando i
simboli dell’alfabeto (Un codice è ammissibile per rappresentare l’informazione solo se la
cardinalità dell’insieme del codice è maggiore o uguale alla cardinalità dell’insieme di
oggetti che si vogliono rappresentare) (ATTENZIONE: il codice deve essere maggiore/uguale
agli oggetti da rappresentare);
CODIFICA che indica l’associazione da una parola del codice e il suo significato o oggetto
che vogliamo rappresentare.
La rappresentazione di un oggetto può anche essere non univoca.
La rappresentazione dell’informazione può essere fatta attraverso due tipi di codici:
CODICE A LUNGHEZA FISSA (la stragrande maggioranza dei dispositivi elettronici utilizzano dei
codici a lunghezza fissa): in questo tipo di codice TUTTE LE PAROLE HANNO LA STESSA LUNGHEZZA
n.
Alcuni esempi di codice a lunghezza che si usano al di fuori del contesto informatico sono il codice
fiscale (16 simboli) o il Codice IBAN;
CODICE A LUNGHEZZA VARIABILE (ambiti applicativi più di nicchia):
- Le parole in questo tipo di codice possono avere lunghezza variabile;
- Una parola di codice non può comparire come prefisso di nessun’altra parola.
Alcuni esempi di codice a lunghezza variabile possono essere il numero di telefono, il codice Morse,
le diverse lingue.
CODICE A LUNGHEZZA FISSA: Quante differenti parole si hanno nel codice in base alla lunghezza
dell’alfabeto e di ogni parola? n
K
Sia A l’alfabeto ovvero l’insieme di simboli utilizzati nel codice con cardinalità e la lunghezza di ogni
parola nel codice, il numero di differenti parole che possiamo avere si può calcolare attraverso questa
formula:
NUMERO DI PAROLE CHE POSSIAMO COMPORRE=M
CARDINALITA’ DELL’INSIEME DELL’ALFABETO=K
NUMERO DI CARATTERI DI OGNI PAROLA=n
Andrea De Dominicis andrea.dedominicis@studentiunisalento.it
CODICE A LUNGHEZZA FISSA: quanti caratteri ci servono per rappresentare un certo numero di oggetti
avendo la lunghezza dell’alfabeto?
Definito N il numero complessivo di oggetti da rappresentare, un codice a lunghezza fissa con un alfabeto di
k simboli deve avere parole di dimensioni tali che:
NUMERO DI OGGETTI DA RAPPRESENTARE=N
CARDINALITA’ DELL’INSIEME DELL’ALFABETO=K
NUMERO DI CARATTERI DI OGNI PAROLA=n
>
≥
Utilizzando queste formule possiamo dimensionare adeguatamente il numero di caratteri da utilizzare
per rappresentare un certo numero di oggetti utilizzando un alfabeto x.
Analizzando la formula scritta sopra, possiamo ben capire come andando a prendere un alfabeto più vasto
possiamo andare a utilizzare parole più brevi per rappresentare un oggetto, un potenziale problema
collegato ad alfabeti molto vasti è la somiglianza tra diversi simboli, questo concetto si traduce in
diminuzione della distanza tra le diverse tensioni negli elaboratori elettronici e ciò li renderebbe soggetti a
interferenze ed errori, perciò utilizziamo un alfabeto con soli due simboli.
ATTENZIONE: n DEVE ESSERE UN NUMERO INTERO ! Quindi nel caso in cui il risultato del logaritmo non
sia un numero intero si prende il numero intero subito più grande.
CODICE USATO NEI CALCOLATORI ELETTRONICI
Il codice usato nei calcolatori elettronici è un codice a lunghezza fissa composto da due simboli {0,1}
(cerchietto e stanghetta, fino a quando sono all’interno di un alfabeto questi due simboli sono cerchietto e
stanghetta, quando chiamiamo questi valori 0/1 lo si fa solo per comodità) dove lo zero rappresenta la
tensione bassa e l’1 la tensione alta.
Come detto prima si utilizza un alfabeto di soli due simboli per aumentare la distanza tra le tensioni
riducendo errori dovuti a interferenza.
Ogni singola cifra nel codice è denominata BIT.
QUANTI OGGETTI POSSO RAPPRESENTARE CON N BIT IN CODICE BINARIO?
Adattando la formula sopra