Il Software
La proprietà fondamentale dei calcolatori e` il fatto di
essere programmabile cioè in grado di svolgere compiti
diversi a seconda delle istruzioni fornite dall’ utente mediante
un programma cioè una sequenza di istruzioni eseguibili da
un calcolatore.
Per scrivere il programma occorre definire prima l’
algoritmo, cioè i dati e la sequenza di azioni elementari che
devono essere svolti per risolvere il problema.
ALGORITMI





Un algoritmo e` un insieme ordinato di passi che descrivono
i dati che devono essere utilizzati e determinano la
sequenza di azioni elementari che devono essere svolte per
risolvere il problema.
Un algoritmo puo` essere descritto in modo grafico da un
diagramma di flusso
Ogni azione dell’ algoritmo e` rappresentata da un blocco
Esistono convenzioni precise sulla forma dei blocchi
Le azioni all’interno dei blocchi possono essere specificate a
diversi livelli di dettaglio
Diagrammi di flusso
START
T
CONDIZIONE
F
END
VERA
FALSA
AZIONE
I/O
Algoritmi e diagrammi di flusso
massimo di due numeri
Dati
x, y, d: variabili
Algoritmo
1. Leggi il valore del primo numero e inseriscilo in x;
2. Leggi il valore del secondo numero e inseriscilo in
y;
3. Calcola la differenza d tra x e y
(d <= x - y)
4. Se d > 0 allora
stampa il contenuto di x
altrimenti
stampa il contenuto di y
5. Fine
START
leggi x
leggi y
d <= x - y
F
d>0?
Stampa y
T
Stampa x
END
Il Software

Programmare nel linguaggio della macchina hardware e`
difficile perché
 l’utente
dovrebbe conoscere l’organizzazione
dell'elaboratore e il suo linguaggio macchina;
 ogni
fisica
programma dovrebbe essere scritto utilizzando delle
sequenze di bit ed ogni piccola differenza hardware
comporterebbe una riscrittura del programma stesso.
Il Software

Questo non è accettabile ed è necessario fornire all’utente
un meccanismo per:
dall’organizzazione fisica della macchina;
 usare nello stesso modo, o comunque in modo molto
simile, macchine leggermente diverse dal punto di vista
hardware o, al limite, macchine con hardware
profondamente differente;
 avere un semplice linguaggio di interazione con la
macchina;
 avere un linguaggio semplice e ad alto livello per
programmare la macchina;
 avere un insieme di programmi applicativi per svolgere
diversi compiti
 astrarre
Il Software

Nei moderni sistemi di elaborazione questi obiettivi vengono
raggiunti grazie alla definizione di macchine virtuali che
vengono realizzate al di sopra della macchina hardware
reale
Utente
HW
macchina virtuale
Macchine Virtuali




Ogni macchina reale ha un suo linguaggio macchina L0 le
cui istruzioni sono direttamente eseguibili dai circuiti
elettronici (HW)
Al di sopra di questo linguaggio è possibile definire altri
linguaggi Li e fornire delle regole per tradurne le istruzioni in
opportune sequenze di istruzioni in linguaggio macchina
L’insieme di queste nuove istruzioni definisce una macchina
virtuale in quanto non esiste fisicamente ma viene
realizzata mediante il software
La macchina virtuale si preoccuperà della traduzione delle
istruzioni al livello Li nell'opportuna sequenza di istruzioni di
livello Li-1 che realizza la stessa funzione
Esempio: all’ insieme di istruzioni macchina L0 possiamo
aggiungere la funzione MULT(op1, op2) che non e`
realizzata dall’hardware, ma dall’ esecuzione del
programma
La macchina virtuale L1 è costituita da L0  {MULT}
Usando le istruzioni di L1 è possibile costruire livelli sempre
più sofisticati: L1  {ESP}
Esempio: supponiamo che l'utente voglia stampare un file. A
livello fisico questa operazione è complessa e richiede
operazioni di trasferimento dati dal disco alla stampante (via
memoria centrale)
La macchina virtuale fornisce all'utente un semplice
comando di stampa:
> print file1
mediante il quale si può richiedere la stampa delle
informazioni contenute nel file di nome file1





La macchina virtuale deve innanzitutto verificare se si tratta
di un comando valido
Poi tradurlo nell’opportuna sequenza di istruzioni a basso
livello per la macchina fisica
Una volta eseguito il comando, la macchina virtuale si pone
in attesa di un nuovo comando da parte dell'utente
Grazie a questo livello software si può astrarre dalle
caratteristiche fisiche della macchina Si può anche fare in
modo che macchine differenti siano usabili in modo simile: si
tratta, infatti, di costruire al di sopra delle diverse macchine
fisiche la stessa macchina virtuale
Per ogni comando della macchina virtuale si dovranno però
avere diversi programmi di traduzione, uno per ogni tipo di
hardware
Software di base

Strumenti per l’uso di linguaggi ad alto livello:
 Interpreti
e compilatori
 Strumenti

per l’esecuzione di programmi
Sistema operativo
 Configurazione
 Gestione
e accensione macchina
di informazione su memoria secondaria
=> FILE SYSTEM
 Gestione
delle risorse
 Comunicazione
tra utente e sistema
Software di base:
Linguaggi di Programmazione

Programmare in linguaggio macchina:



richiede conoscenza dell’hardware
produce programmi non portabili
Si può utilizzare il linguaggio assembler



linguaggio vicino al linguaggio macchina
usa mnemonici e simboli anziché codifiche e indirizzi
la traduzione da assembler a linguaggio macchina può
essere fatta dal calcolatore, mediante un assemblatore
Programma
P
in
Assembler
Traduttore assembler su
macchina M
Programma
P’
in linguaggio
macchina M
Software di base:
Linguaggi di Programmazione


Il linguaggio assembler però produce comunque programmi
lunghi e non portabili
Per superare queste difficoltà` sono nati i linguaggi di
programmazione ad alto livello
astraggono dalle caratteristiche hardware
 sono facile da usare
 sono portabili
 pero` non producono programmi direttamente
eseguibili e necessitano di una traduzione

Software di base:
Linguaggi di Programmazione
Un linguaggio di programmazione ad alto livello L definisce una
macchina virtuale; per poter eseguire su una macchina fisica
M un programma scritto nel linguaggio L occorre tradurlo nel
linguaggio macchina di M
Il meccanismo di traduzione permette di astrarre dalle
caratteristiche fisiche della macchina hardware, per cui
programmi scritti nello stesso linguaggio possono essere
eseguiti su macchine diverse

Portabilita`
Software di base:
Linguaggi di Programmazione
Esistono due diverse tecniche di traduzione per programmi
scritti in linguaggio di alto livello:

Compilazione: il programma P scritto nel linguaggio L
viene tradotto in un programma equivalente P’ scritto nel
linguaggio macchina, che viene poi eseguito

Interpretazione: sulla macchina M viene mandato in
esecuzione un programma interprete che per ogni istruzione
del programma P genera la sequenza corrispondente di
istruzioni macchina e le fa eseguire
COMPILAZIONE
es. PASCAL, C, FORTRAN, COBOL . . .
Programma P
in linguaggio
L
Compilatore
di L sulla
macchina M
Programma P’ in
linguaggio
macchina di M
Esecuzione di
P’ su M
INTERPRETAZIONE
es. : LISP, PROLOG, BASIC . . .
Programma P in
linguaggio L
Per ogni istruzione
Interprete per L
Istruzioni in linguaggio
macchina di M
Esecuzione di tali
istruzioni su M
Software di base:
Linguaggi di Programmazione
Ogni linguaggio di programmazione fornisce un insieme di costrutti
base per:

definire i dati su cui il programma opera

specificare le azioni elementari da eseguire sui dati

comporre istruzioni elementari in:
sequenze
 blocchi condizionali
 blocchi che devono essere ripetuti


interagire con l’utente per
l’acquisizione di dati (input)
 la produzione di dati (output)

Algoritmi e programmi
massimo di n numeri
Dati
a, b: variabili
Algoritmo
1. Leggi il valore del primo numero e
inseriscilo in a;
2. Finche` ci sono numeri da esaminare
ripeti:
leggi il numero e inseriscilo in b
a <= max(a,b)
5. Stampa a
6. Fine
Programma Basic
Function max as integer
dim a as integer
dim b as integer
input a
while not fine
input b
a = max(a, b)
wend
print a