Interfacce di comunicazione
PERIFERICA
CPU
INTERFACCIA
INTERFACCIA
Interfacce Parallele: veloci, pochi metri di distanza, cavi con molti fili. Standard:
– CENTRONICS
– IEEE 488 (HPIB) (più periferiche sullo stesso canale)
Interfacce Seriali: più lente, pochi fili, notevole distanza. Standard:
– Current Loop (1 km), 1200 bit per secondo (bps o baud);
– RS 232 -1212V (100 m), 19200 bps
–
RS422 1 km, 100.000 bps
– USB 1 e 2 (Universal Serial Bus) 3-5m, da 1.5 a 480 Mbit/s
Università di Pavia - corso di Fondamenti di Informatica
275
Cenni sulle architetture
CD/DVD
INTER.
RETE
DISCO
NASTRO
MASTERIZZATORE
CPU
MEMORIA
AGG.
SERIALE
PARALL.
BUS
MEMORIA
•
Bus: canale di comunicazione in comune gestito dalla CPU; estensione
esterna della linea di comunicazione tra CPU e memoria: ogni periferica è
vista dalla CPU come elemento di memoria a indirizzi prefissati
Università di Pavia - corso di Fondamenti di Informatica
276
BUS Standard
•
Sul bus transitano dati, indirizzi e segnali di controllo
•
Standard:
– ISA-EISA-PCI: Personal Computer
– NU-BUS: Macintosh
– MULTIBUS: Workstation
– VME-BUS: Workstation
– SCSI (SCSI-1, SCSI-2, …)
– AGP
– XPCI
– PCMCIA
Università di Pavia - corso di Fondamenti di Informatica
277
Evoluzione della macchina di Von Neumann
• L’evoluzione tecnologica aumenta la velocità di elaborazione,
producendo CPU sempre più rapide e con parallelismo di dati
e di indirizzamento maggiori, ma non può migliorare
drasticamente le prestazioni del calcolatore senza superare
un limite intrinseco della struttura di Von Neumann: la stretta
sequenzialità delle operazioni gestite dalla CPU
• Ogni attività viene tradotta in un’opportuna sequenza di
istruzioni macchina: una dopo l’altra vengono acquisite,
decodificate ed eseguite
Università di Pavia - corso di Fondamenti di Informatica
278
Evoluzione della macchina di Von Neumann
Esempi:
 due unità funzionalmente autonome, la CPU e un dispositivo di I/O, sono
costrette a sequenzializzare le proprie attività impiegando un tempo pari alla
somma dei singoli tempi di lavoro;
 acquisizione, decodifica ed esecuzione delle istruzioni da parte della CPU, pur
logicamente separate e quindi effettuabili in parallelo su istruzioni diverse,
vengono eseguite in modo strettamente sequenziale;
 accessi a memoria centrale: rigorosa sequenzialità di accesso senza prevedere
alcun meccanismo per anticipare le richieste della CPU e per effettuare accessi
a memoria in parallelo con le operazioni della CPU stessa;
 programma di calcolo, ad esempio su matrici, che richiede alla CPU di ripetere
le stesse istruzioni per eseguire gli stessi calcoli su dati diversi: spreco di
tempo per acquisire ed interpretare le stesse istruzioni, a causa del fatto che
l’unità logico-aritmetica opera solo su coppie di valori
Università di Pavia - corso di Fondamenti di Informatica
279
Evoluzione della macchina di Von Neumann
•
In conclusione, il limite intrinseco della struttura di Von Neumann è la totale
mancanza di parallelismo, che comporta un tempo globale di elaborazione
pari alla somma dei tempi richiesti da ogni singola attività
•
Le evoluzioni architetturali della macchina di Von Neumann tendono a
consentire diversi livelli di parallelismo
Colloquio CPU - periferiche
•
Un primo metodo prevede una efficiente gestione delle operazioni di
input/output mediante tre tecniche con diverso livello di parallelismo:
– l’interfaccia segnala la terminazione delle operazioni di I/O alla CPU
(interruzione);
– l’interfaccia trasferisce informazioni direttamente con la memoria senza
richiedere l’intervento della CPU (DMA = Direct Memory Access);
Università di Pavia - corso di Fondamenti di Informatica
280
Colloquio CPU - periferiche
– gestione tramite canale di input/output: si tratta di un dispositivo dedicato
a funzioni di scambio di informazioni con le periferiche che consente di
svincolare la CPU da operazioni di sincronizzazione, transcodifica,
formattazione dei dati, ecc.
CPU
MEMORIA
CENTRALE
CANALE 1
CANALE 2
PERIFERICA
PERIFERICA
Università di Pavia - corso di Fondamenti di Informatica
281
Pipeline
•
Una parallelizzazione del funzionamento della CPU si può ottenere con
l’utilizzo del concetto di pipeline con diverse sottounità dedicate alle varie
fasi di acquisizione, decodifica ed esecuzione delle istruzioni e collegate fra
loro secondo lo schema della catena di montaggio
•
Si sovrappone il tempo di esecuzione dell’istruzione i-ma, con il tempo di
decodifica relativo all’istruzione (i+1)-ma, con il tempo di fetch dell’operando
dell’istruzione (i+2)-ma e col tempo di fetch del codice operativo
dell’istruzione (i+3)-ma
•
La pipeline può essere anche di tipo aritmetico: si suddivide l’unità di calcolo
in più stadi in cascata per operare su più dati consecutivi in contemporanea,
eseguendo su ogni dato una parte del calcolo richiesto
Università di Pavia - corso di Fondamenti di Informatica
282
Fasi dell’unità di controllo
Esecuzione
Decodifica
Fetch Operando
Fetch Op. Code
Tempo
Fasi di una istruzione nella macchina di Von Neumann
Esecuzione
i-3
i-2
i-1
i
Decodifica
i-2
i-1
i
i+1
Fetch Operando
i-1
i
i+1
i+2
Fetch Op. Code
i
i+1
i+2
i+3
Tempo
Fasi in una soluzione pipeline
Università di Pavia - corso di Fondamenti di Informatica
283
Evoluzione della macchina di Von Neumann
•
In maniera più formale, si può definire il concetto di parallelismo in base ai
due flussi di informazione normalmente presenti in un calcolatore:
– flusso dei dati (data stream);
– flusso delle istruzioni (instruction stream)
•
Nella macchina di Von Neumann si ha un flusso di dati ed istruzioni singoli:
la macchina è classificata come SISD (Single Instruction stream, Single Data
stream)
•
La macchina SIMD (Single Instruction stream, Multiple Data stream) è
caratterizzata da una sola unità di controllo e da più unità aritmetiche
indipendenti che effettuano quindi le stesse operazioni su dati diversi
Università di Pavia - corso di Fondamenti di Informatica
284
Evoluzione della macchina di Von Neumann
•
È adatta, ad esempio, ad elaborazioni matriciali che richiedano la valutazione
di espressioni matematiche identiche su grandi quantità di numeri diversi
•
Le operazioni sui dati diversi avvengono nello stesso istante ed ogni unità di
elaborazione (PE: Processing Element) ha una memoria privata; i vari PE
sono collegati tra loro per scambiarsi le informazioni
•
Le macchine MIMD (Multiple Instruction stream, Multiple Data stream)
prevedono la replicazione dell’intera struttura della macchina di Von
Neumann per ottenere architetture multiprocessore
•
Si tratta di un calcolatore costituito da più unità di controllo e unità di calcolo
che operano in parallelo su flussi di dati diversi effettuando elaborazioni
anch’esse, a priori, diverse
Università di Pavia - corso di Fondamenti di Informatica
285
Architettura degli elaboratori: tassonomia generale
Elaborazione
Seriale
Parallela
SISD
MISD
SIMD
MIMD
Macchina di
Von Neumann
Strutture
pipeline
Strutture array
Sistemi
multiprocessore
Sistemi
multicomputer
Università di Pavia - corso di Fondamenti di Informatica
286
Classificazione delle architetture degli elaboratori
dati
dati
Memoria
istruzioni
Processore
SISD
dati
Memoria
dati
istruzioni
dati
Memoria
dati
istruzioni
dati
Memoria
dati
istruzioni
Processore
:
∙∙∙
Processori
Processori
SIMD
MISD
Processore
Processore
MIMD
Università di Pavia - corso di Fondamenti di Informatica
287
Evoluzione della macchina di Von Neumann
Sistema Multiprocessore
MEMORIA
COMUNE
I/O
COMUNE
MEMORIA
LOCALE
…
BUS LOCALE n
CPU
LOCALE
BUS LOCALE 2
BUS LOCALE 1
BUS COMUNE
…
I/O
LOCALE
Università di Pavia - corso di Fondamenti di Informatica
288
Evoluzione della macchina di Von Neumann
• N-cubo: 2N processori ai vertici di un N-cubo
• Ogni processore è connesso con N vicini
• Sono necessari al più N passi per portare dati da un
processore ad un altro.
1-cubo
2-cubo
3-cubo
Università di Pavia - corso di Fondamenti di Informatica
289
Sistemi operativi
• Definizione intuitiva: insieme di programmi che rendono
facilmente disponibile all’utente le potenzialità offerte dalla
macchina
• Sistema operativo = nucleo (kernel) + software di base
• Il sistema operativo è fornito dal costruttore della macchina
(non gratuitamente)
Università di Pavia - corso di Fondamenti di Informatica
290
Funzioni del sistema operativo
•
Gestione lavori
•
Gestione delle risorse
•
Ausili per la messa a punto dei programmi
•
Ausili per la gestione dei dati
•
Funzioni di:
– contabilità
– sicurezza
– recupero
Università di Pavia - corso di Fondamenti di Informatica
291
Funzioni del kernel
• Il kernel del sistema operativo è un programma che va in
esecuzione all’accensione della macchina (bootstrapping) e
svolge le funzioni:
– controllo dell’esecuzione dei programmi dell’utente
– amministrazione
delle
risorse
hardware
nei
sistemi
multiutente
• Il kernel impiega del tempo di CPU che viene sottratto
all’esecuzione dei programmi utente: sovraccarico (overhead)
Università di Pavia - corso di Fondamenti di Informatica
292
Funzioni del software di base
•
Il software di base è un insieme di programmi che servono a facilitare la
creazione di programmi da parte degli utenti della macchina
•
L’utente si serve del software di base per:
– editare un file (insieme ordinato di dati)
– compilare
– duplicare un file
– cancellare un file
– visualizzare un file
– trasferire un file
Università di Pavia - corso di Fondamenti di Informatica
293
Funzioni del software di base
– utilizzare le periferiche (nastri, stampanti, …)
– colloquiare con altri utenti
– utilizzare la rete locale
– inviare e ricevere posta
– giocare
– …
Università di Pavia - corso di Fondamenti di Informatica
294
Sistemi operativi
•
Sistema operativo come interfaccia tra macchina (hardware) e utente
HARDWARE
SISTEMA OPERATIVO
PROGRAMMI UTENTE
•
L’hardware della macchina è trasparente all’utente
•
Saper utilizzare una macchina significa saper utilizzare il suo sistema
operativo
•
Macchine molto diverse a livello hardware supportano lo stesso sistema
operativo: svolge le stesse funzioni e si presenta all’utente nello stesso
modo
Università di Pavia - corso di Fondamenti di Informatica
295
Classificazione dei sistemi operativi
•
Dedicati
•
A lotti (batch)
•
Multiprogrammazione
•
Interattivi (time-sharing)
•
Real-time
•
Per macchine multiprocessori (sistemi concorrenti)
•
L’ordine è cronologico
•
I sistemi operativi integrano funzioni per la gestione delle reti di
calcolatori
Università di Pavia - corso di Fondamenti di Informatica
296
Sistemi operativi dedicati
• I primi sistemi operativi (tornati in uso con i PC)
• La macchina viene utilizzata da un utente per volta che può
eseguire un solo programma per volta (applicativo o di base)
• Nucleo molto semplice
Università di Pavia - corso di Fondamenti di Informatica
297
Sistemi operativi per gestione a lotti (batch)
•
Nati per meglio sfruttare la velocità crescente delle macchine: eliminano i
tempi morti tra programmi successivi di utenti diversi
•
Un insieme di lavori (jobs) viene accorpato in un lotto (batch) e trasferito su
una unità di ingresso veloce (disco)
•
Ogni lavoro viene caricato ed eseguito in sequenza senza interruzioni fino al
termine
•
La CPU viene comunque sottoutilizzata perché, durante le operazione di I/O,
deve adeguarsi alla bassa velocità delle periferiche
Università di Pavia - corso di Fondamenti di Informatica
298
Multiprogrammazione
•
Più di un programma è caricato in memoria contemporaneamente
•
Le
operazione
di
I/O
di
un
programma
sono
sovrapposte
temporalmente all’esecuzione delle istruzioni di un altro programma
•
Ciò è possibile grazie al canale che gestisce l’I/O
CPU
MEMORIA
CANALE
PERIFERICHE
Università di Pavia - corso di Fondamenti di Informatica
299
Multiprogrammazione
•
Quando un processo in esecuzione (running) chiede un servizio di
I/O al sistema operativo si blocca in attesa del risultato
•
Il sistema operativo avvia l’operazione di I/O e manda in esecuzione
un altro processo che si trova in stato di pronto (ready)
•
Il sistema operativo mantiene una o più code di processi gestite
secondo la priorità assegnata a ciascuno di essi (scheduling)
•
CPU ben sfruttata
•
Multiprogrammazione incapace di differenziare fra programmi che
richiedono un uso frequente delle periferiche, da quelli che
richiedono l’utilizzo per lunghi tempi della CPU (es. programmi di
elaborazione matematica su dati ricevuti inizialmente). Quando uno
di questi programmi conquista la CPU non la rilascia, bloccando gli
altri programmi
Università di Pavia - corso di Fondamenti di Informatica
300
Sistemi operativi interattivi (time sharing)
• Il tempo di utilizzo della CPU viene suddiviso dal sistema
operativo in fette (time slice con durata di 100-800 ms)
• Ogni processo in memoria riceve a turno l’uso della CPU per
una fetta di tempo
• Usati soprattutto per lo sviluppo di software in ambiente
multiutente
Università di Pavia - corso di Fondamenti di Informatica
301
Sistemi operativi interattivi (time sharing)
•
L’utente lavora al terminale
RIFLETTE
SCRIVE
RIFLETTE
SCRIVE
…
ESEGUE
COMPILA
e ha l’impressione di avere la macchina a sua completa disposizione
•
Ogni processo ottiene ciclicamente l’utilizzo della CPU
•
Overhead per la gestione della CPU principalmente con molti processi
attivi
Università di Pavia - corso di Fondamenti di Informatica
302
Time sharing: Stati di un processo
•
Processo: sequenza di istruzioni eseguite dal processore per
eseguire un programma
Università di Pavia - corso di Fondamenti di Informatica
303
Time sharing: Stato dei programmi
Università di Pavia - corso di Fondamenti di Informatica
304
Time sharing: Stato dei programmi
Running
Blocked
S.O. Dedicato
t
S.O. Multi programmato
t
S.O. Time Sharing
t
Running
Ready
Blocked
Running
Ready
Blocked
Università di Pavia - corso di Fondamenti di Informatica
305
Sistemi operativi real time
•
Sistemi operativi al servizio di una specifica applicazione che ha dei vincoli
precisi nei tempi di risposta
•
Il sistema operativo deve garantire un tempo massimo entro il quale mandare
in esecuzione un programma a seguito di una richiesta in tal senso
– gestione di strumentazione
– controllo di processo
– gestione di allarme
– sistemi transazionali (banche, prenotazione)
•
In generale si ha un sistema real time quando il tempo che passa dalla
richiesta di esecuzione di un processo al completamento della stessa è
minore del tempo fissato
Università di Pavia - corso di Fondamenti di Informatica
306
Sistemi operativi per sistemi concorrenti
• Il sistema operativo si prende carico di assegnare le diverse
CPU a processori diversi nonché di gestire le risorse in
comune
tra
le
varie
CPU
(memoria
condivisa,
bus,
periferiche)
• A sua volta il sistema operativo può essere eseguito
contemporaneamente da più CPU oppure da una sola
(master)
• Nell’ultimo caso, le CPU hanno compiti differenti
Università di Pavia - corso di Fondamenti di Informatica
307
Sistemi operativi
•
UNIX: AIX (IBM), XENIX (IBM), HP-UX (HP), ULTRIX (Digital),
SOLARIS (SUN), SCO (PC), IRIX (Silicon Graphics)
•
LINUX (PC),
•
MAC OS (MAC)
•
WINDOWS (95/98/ME, NT, 2000, XP) (PC)
•
WINDOWS CE (Palmari e dispositivi portatili)
•
…
Università di Pavia - corso di Fondamenti di Informatica
308
La creazione di un programma compilato
•
Sono necessari alcuni strumenti contenuti nel software di base
•
Alcuni sistemi operativi dispongono di raffinati mezzi software per l’ausilio
della programmazione
•
L’insieme minimo necessario per lo sviluppo di software realizza le seguenti
funzioni:
– editing dei testi dei programmi (sorgenti)
– compilazione dei sorgenti  oggetti
– linking dei vari oggetti (alcuni dei quali forniti con il compilatore) 
eseguibile
– caricamento dell’eseguibile in memoria
– esecuzione del programma
– eventuale debugging
Università di Pavia - corso di Fondamenti di Informatica
309
La creazione di un programma compilato
•
I file sorgente, i file oggetto, i file eseguibili vengono memorizzati su
supporto di memoria magnetico (disco). Sono caratterizzati da nome ed
estensione:
– pippo.c
– pippo.o
– pippo
•
Ad ognuno viene inoltre associata la dimensione, i diritti di accesso, ecc.
•
Il sistema operativo tratta tutti i file allo stesso modo, a prescindere dalla
loro natura. Possono pertanto essere copiati, cancellati, spezzati, trasferiti
da un direttorio ad un altro, ecc.
Università di Pavia - corso di Fondamenti di Informatica
310
I programmi interpretati
•
I programmi scritti in alcuni linguaggi di programmazione (BASIC,
PROLOG ed altri) possono essere DIRETTAMENTE ESEGUITI da un
programma denominato INTERPRETE
•
L’interprete traduce ogni istruzione del linguaggio riportata nel file
sorgente e ne comanda l’esecuzione
•
Spesso all’interprete viene associato un programma di scrittura delle
istruzioni (EDITOR), in modo da creare un AMBIENTE DI SVILUPPO
UNICO
Università di Pavia - corso di Fondamenti di Informatica
311
Confronto fra Interpretazione e Compilazione
Università di Pavia - corso di Fondamenti di Informatica
312
Confronto fra Interpretazione e Compilazione
Università di Pavia - corso di Fondamenti di Informatica
313
Confronto fra Interpretazione e Compilazione
Università di Pavia - corso di Fondamenti di Informatica
314
Creazione del file sorgente: gli editor
•
Si tratta di programmi che interagiscono con il programmatore al terminale e
gli permettono di creare e modificare TESTI (file in cui compaiono solo
caratteri ASCII)
•
Funzioni principali degli editor
– INSERIRE caratteri
– CANCELLARE
– VISUALIZZARE
– RICERCARE
– SOSTITUIRE
– COPIARE
– ecc.
•
Gli EDITOR GUIDATI DALLA SINTASSI generano direttamente i COSTRUTTI
corretti, per un determinato linguaggio, con un unico comando: garantiscono
la correttezza sintattica del programma in corso di stesura
Università di Pavia - corso di Fondamenti di Informatica
315
Fasi della compilazione
Università di Pavia - corso di Fondamenti di Informatica
316
ANALISI LESSICALE
Scansione del testo e individuazione degli ELEMENTI DI BASE del
linguaggio: VARIABILI, COSTANTI, PAROLE CHIAVE, DELIMITATORI,
etc.
Viene creata una TAVOLA DEI SIMBOLI per le variabili
Il file sorgente viene trasformato in una STRINGA (successione) di
SIMBOLI
Esempio: Tavola dei simboli generata dall’equazione seguente
ALFA:=BETA+3.1415*DELTA;
ALFA
179,6505
BETA
32
DELTA
47
Università di Pavia - corso di Fondamenti di Informatica
317
ANALISI SINTATTICA
È guidata dalla DEFINIZIONE FORMALE del Linguaggio di
Programmazione (GRAMMATICA)
Viene riconosciuta la STRUTTURA del programma
Viene generata una forma intermedia (ALBERO, MATRICE)
corrispondente alla struttura sintattica del programma
Inoltre vengono generate TAVOLE DEI SIMBOLI con tutti gli
identificatori
Esempio di albero: ALFA:=BETA+3.1415*DELTA;
:=
+
ALFA
BETA
3.1415
*
DELTA
Università di Pavia - corso di Fondamenti di Informatica
318
ANALISI SEMANTICA
Oltre che essere lessicalmente e sintatticamente corretto, il programma
deve esserlo anche semanticamente
L’analisi semantica effettua i seguenti controlli:
Verifica la COMPATIBILITÀ DI TIPO di espressioni legate da operatori e
la CORRETTEZZA delle DICHIARAZIONI degli identificatori
Queste verifiche vengono effettuate sulla forma intermedia generata in
precedenza (ALBERO, MATRICE)
Questi controlli possono essere più o meno approfonditi a seconda
delle caratteristiche del linguaggio
Una vera analisi semantica permetterebbe di individuare il
SIGNIFICATO del programma, cioè il suo scopo
Università di Pavia - corso di Fondamenti di Informatica
319
GENERAZIONE del CODICE e OTTIMIZZAZIONE
Dalla forma intermedia prodotta precedentemente (ALBERO) si genera
un CODICE DI BASSO LIVELLO, ma ancora indipendente dalla CPU per
la quale si vuole che il codice macchina sia generato
Questo codice può essere ottimizzato con facilità e quindi può essere
tradotto nelle istruzioni della particolare CPU
Si può anche effettuare una POST-OTTIMIZZAZIONE
L’OTTIMIZZAZIONE, che può essere assente, riguarda la dimensione
del codice prodotto ed il relativo tempo di calcolo
La SEQUENZA delle varie fasi della compilazione ed il PESO di
ciascuna di esse dipendono dal tipo di compilatore (il numero di
passate specifica il numero di volte in cui gli statement del programma
sorgente vengono esaminati)
Università di Pavia - corso di Fondamenti di Informatica
320
Assemblatori
•
Come i compilatori traducono in codice eseguibile programmi scritti in un
linguaggio scritto ad alto livello, così gli ASSEMBLATORI traducono
programmi scritti nel linguaggio ASSEMBLY (di basso livello) proprio del
processore specifico
•
Mentre per i linguaggi ad alto livello ad ogni STATEMENT corrispondono più
istruzioni eseguibili da parte del microprocessore, per quelli a basso livello
si ha una corrispondenza UNO A UNO fra STATEMENT del file sorgente ed
ISTRUZIONI eseguibili
•
Gli assemblatori sono tipicamente a due passate: nella prima viene effettuata
l’analisi delle istruzioni e creata la tavola dei simboli; la seconda passata
produce il codice in linguaggio macchina per il processore
•
I MACROASSEMBLATORI ammettono MACROISTRUZIONI, istruzioni definite
dal programmatore a cui vengono fatte corrispondere più statement del
linguaggio ASSEMBLY
Università di Pavia - corso di Fondamenti di Informatica
321
Precompilatori - Metacompilatori
•
I precompilatori operano una traduzione SORGENTE - SORGENTE
•
Sono usati per trasformare un programma scritto in un linguaggio di ALTO
LIVELLO (codificato da una GRAMMATICA) in un programma scritto in un
linguaggio per cui esiste il compilatore
•
Realizzano prima l’ANALISI LESSICALE, SINTATTICA e SEMANTICA e poi la
traduzione nel linguaggio TARGET
•
I metacompilatori sono compilatori che, a partire dalla definizione formale di
un linguaggio (GRAMMATICA), creano un COMPILATORE per il linguaggio
stesso (più frequentemente un PRECOMPILATORE). Esempio: YACC (Yet
Another Compiler Compiler) di UNIX
Università di Pavia - corso di Fondamenti di Informatica
322
Linker e Loader
•
Il linker è un programma incaricato della fusione in un unico modulo
ESEGUIBILE di più moduli OGGETTO separatamente compilati
•
•
Permette l’uso di LIBRERIE preconfezionate
Permette di mettere insieme il lavoro svolto da più persone che collaborano allo
stesso progetto oppure di ricomporre un lavoro scomposto, in fase di progetto, in
più sottoparti
•
Permette infine di mettere insieme moduli creati utilizzando linguaggi di
programmazione diversi
Università di Pavia - corso di Fondamenti di Informatica
323
Linker e Loader
Il loader:
•
trasferisce in memoria il programma eseguibile
•
carica nel Program Counter l’indirizzo della prima istruzione eseguibile
•
Inizia l’esecuzione
Il linker può produrre:
– CODICE BINARIO ASSOLUTO: tutti gli indirizzi sono stabiliti in fase di
linking
– CODICE BINARIO RILOCABILE: gli indirizzi sono riferiti ad un’origine di
INDIRIZZO 0 (inizio del programma); successivamente tutti gli indirizzi
vengono riaggiornati per tener conto dell’indirizzo reale, oppure vengono
usate tecniche di indirizzamento indicizzato o con spostamento rispetto
al valore attuale del Program Counter; il LOADER provvede a caricare i
registri base con l’indirizzo di inizio reale
Università di Pavia - corso di Fondamenti di Informatica
324
Debugger
•
Il debugger permette di eseguire programmi da sottoporre a test
permettendo di controllare la correttezza dell’esecuzione
•
Si può, per esempio, far procedere l’esecuzione fino ad un punto di arresto
(BREAK-POINT) e poi far avanzare il programma PASSO-PASSO
•
Permette di leggere e, volendo, di modificare i contenuti dei registri della
CPU e della memoria
•
Segnala il verificarsi di eventi
•
I Debugger Simbolici permettono di operare sul CODICE SORGENTE
•
Per poter funzionare il debugger usa informazioni (tabelle) create dal
compilatore-assemblatore e dal linker
Università di Pavia - corso di Fondamenti di Informatica
325
Linguaggi
•
Linguaggio macchina (1a generazione)
– utilizzano la codifica binaria di codice operativo e operandi
– le istruzioni sono quelle direttamente eseguibili dalla CPU
– i programmi sono utilizzabili solo su elaboratori equipaggiati
con la CPU corrispondente al linguaggio (non trasportabilità)
– programmazione difficile
– pessima leggibilità
– facilità di errori
– alta efficienza (dipende dal programmatore)
Università di Pavia - corso di Fondamenti di Informatica
326
Linguaggi
•
Linguaggi assemblativi (2a generazione)
–
le istruzioni sono quelle eseguibili dalla CPU
–
rappresentazione simbolica, tramite brevi mnemonici, di codici operativi
e operandi
–
riferimento alle variabili tramite il nome
–
necessità di un traduttore in linguaggio macchina (assemblatore)
–
possibilità di definire ed utilizzare macroistruzioni
–
i programmi sono utilizzabili solo su elaboratori equipaggiati con la
CPU corrispondente al linguaggio (non trasportabilità)
–
programmazione abbastanza difficile
–
scarsa leggibilità
–
alta efficienza (dipende dal programmatore)
Università di Pavia - corso di Fondamenti di Informatica
327
Linguaggi
•
Linguaggi di alto livello (3a generazione)
– le istruzioni esprimono operazioni significative nella logica del
programmatore non coincidenti con quelle eseguite dalla CPU
– necessità di un traduttore (compilatore o interprete)
– la traduzione trasforma un’istruzione in una sequenza di
istruzioni macchina
– efficienza ridotta rispetto ai linguaggi assemblativi (dipende dal
compilatore), ma possibilità di ottimizzazioni
– trasportabilità di un programma su tutti gli elaboratori che
dispongono di un traduttore per il linguaggio
– introduzione di costrutti logici
– maggiore facilità d’uso
– buona leggibilità
Università di Pavia - corso di Fondamenti di Informatica
328
Linguaggi
•
I linguaggi ad alto livello vengono classificati in:
– procedurali
– funzionali
– basati sulla logica
– orientati agli oggetti
Università di Pavia - corso di Fondamenti di Informatica
329
Scelta di un linguaggio
•
Va fatta in funzione dei parametri seguenti:
– adattabilità al problema
– facilità di apprendimento
– facilità d’uso
– comprensibilità e modificabilità dei programmi
– portabilità dei programmi
– efficienza
– software di supporto
– esistenza di librerie
Università di Pavia - corso di Fondamenti di Informatica
330
Linguaggi procedurali
•
A differenza delle altre tre classi di linguaggi ad alto livello, sono basati sul
modello computazionale di Von Neumann, in cui un programma è visto come
una sequenza di istruzioni tendente a modificare il contenuto della memoria
(principalmente)
•
Caratteristiche:
– indipendenti dalla macchina
– possibile l’uso di nomi simbolici per i dati
– sintassi vicina al linguaggio naturale
– basati su istruzioni e assegnazioni
– permettono astrazioni sui dati: possibilità di definire tipi di dati e
operazioni sui tipi
Università di Pavia - corso di Fondamenti di Informatica
331
Linguaggi procedurali
– permettono astrazioni sul controllo: l’ordine di esecuzione delle
istruzioni è determinato dalle strutture di controllo (FOR, WHILE,
DO, …) o da moduli (FUNZIONI e PROCEDURE)
– permettono l’utilizzo dei Sottoprogrammi: definizione di nuove
istruzioni e operazioni
– buona leggibilità
•
Si dividono in tre categorie:
– d’uso generale (BASIC, C, C++, JAVA, FORTRAN, PASCAL,
COBOL, PL1, …)
– d’uso speciale (CHILL, SIMULA, APT, AED, SQL, …)
– per applicazioni Web (HTML, PHP)
Università di Pavia - corso di Fondamenti di Informatica
332
Linguaggi di programmazione: I Sottoprogrammi
Sottoprogramma:
– Sequenza di istruzioni che vengono eseguite a seguito di una chiamata.
Vantaggi:
– Scrivere una sola volta un codice utilizzato più volte;
– Creare programmi strutturati per raffinamenti successivi (e più leggibili);
– Utilizzare librerie preconfezionate (insieme di sottoprogrammi).
Programma senza chiamate
Programma con chiamate
Acquisizione dati A
Elaborazione dati A
Acquisizione dati B
Elaborazione dati B
Acquisizione dati C
Acquisizione dati A
Chiamate per
elaborazione
dati A, B, C
Acquisizione dati B
Acquisizione dati C
Elaborazione dati
Elaborazione dati C
Università di Pavia - corso di Fondamenti di Informatica
333
Chiamata del Sottoprogramma
Parametri formali: simboli che rappresentano i dati su cui il
sottoprogramma
opera
(specificati
nella
definizione
del
sottoprogramma stesso).
Parametri attuali (o Effettivi): i dati, corrispondenti ai parametri
formali, su cui il sottoprogramma effettivamente opera (specificati
nella chiamata al sottoprogramma).
Si definiscono due tipi di sottoprogrammi:
– Aperti;
– Chiusi.
Università di Pavia - corso di Fondamenti di Informatica
334
Sottoprogramma Aperto
Nei
vari
punti
del
programma
in
cui
viene
chiamato,
il
sottoprogramma aperto compare con tutte le istruzioni che
definiscono il sottoprogramma stesso.
Il sottoprogramma viene chiamato MACRODEFINIZIONE; la sua
chiamata MACRORICHIAMO.
Il meccanismo della MACROESPANSIONE provvede a sostituire i
singoli
richiami
con
le
istruzioni
che
costituiscono
il
sottoprogramma, e i parametri attuali a quelli formali.
Una
macroistruzione
può
contenere
richiami
ad
altre
macroistruzioni, si parla in tal caso di macroistruzioni nidificate.
Università di Pavia - corso di Fondamenti di Informatica
335
Esempio di Macroistruzioni
Programma Sorgente
Dopo le Macroespansioni
Chiamata
Macro 1
Macrodefinizione 1
Chiamata
Macro 2
Chiamata
Macro 4
Macrodefinizione 2
Macrodefinizione 2
Chiamata
Macro 3
Macrodefinizione 3
Macrodefinizione 4
Macrodefinizione 3
Chiamata
Macro 4
Macrodefinizione 4
Macrodefinizione 1
Macrodefinizione 4
Università di Pavia - corso di Fondamenti di Informatica
336
Sottoprogramma Chiuso
Compare una sola volta con tutte le sue istruzioni, ma viene
adoperato nei punti del programma in cui viene chiamato.
I sottoprogrammi possono essere nidificati: un sottoprogramma è
chiamato da un altro sottoprogramma.
Alcuni
linguaggi
di
programmazione
ammettono
chiamate
a
sottoprogrammi Ricorsive: il sottoprogramma richiama se stesso.
Problemi connessi con sottoprogrammi chiusi:
– determinazione dell’indirizzo di rientro al Programma Chiamante.
– Passaggio dei parametri in ingresso (da chiamante a chiamato) e
di uscita ( da chiamato a chiamante).
Università di Pavia - corso di Fondamenti di Informatica
337
Gestione delle Chiamate
Quando un sottoprogramma viene chiamato, l’indirizzo di rientro, cioè
quello dell’istruzione successiva a quella che ha effettuato la
chiamata, viene memorizzato nello STACK (zona di memoria gestita
in logica LIFO: pila).
Quando il sottoprogramma termina
Programma
l’esecuzione, viene letto dalla pila
è stato ancora prelevato e viene
Richiami
1
2
trasferito nel Program Counter.
3
l’ultimo indirizzo caricato che non
La gestione LIFO dello STACK
Sottoprogramma
permette di nidificare le chiamate
ai sottoprogrammi.
Università di Pavia - corso di Fondamenti di Informatica
338
Esempio di gestione delle chiamate 1/14
Inizio Main
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
Sottoprogramma 2
S2
S3
Sottoprogramma 3
Inizia l’esecuzione del Programma dalla prima istruzione del Main.
La pila è vuota
Università di Pavia - corso di Fondamenti di Informatica
339
Esempio di gestione delle chiamate 2/14
M
a
i
n
S1
Chiamata S1
Situazione della Pila
Sottoprogramma 1
I1
I1
Sottoprogramma 2
S2
S3
Sottoprogramma 3
L’indirizzo dell’istruzione successiva a quella che ha effettuato la
chiamata (I1), viene memorizzato nella pila
Università di Pavia - corso di Fondamenti di Informatica
340
Esempio di gestione delle chiamate 3/14
M
a
i
n
S1
Inizio S1
Sottoprogramma 1
Situazione della Pila
I1
Sottoprogramma 2
S2
S3
Sottoprogramma 3
Inizia l’esecuzione del sottoprogramma 1
Università di Pavia - corso di Fondamenti di Informatica
341
Esempio di gestione delle chiamate 4/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
Chiamata S2
I2
Sottoprogramma 2
S2
S3
I1
I2
Sottoprogramma 3
L’indirizzo dell’istruzione successiva a quella che ha effettuato la
chiamata (I2), viene memorizzato nella pila
Università di Pavia - corso di Fondamenti di Informatica
342
Esempio di gestione delle chiamate 5/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
I1
Inizio S2
Sottoprogramma 2
I2
S2
S3
Sottoprogramma 3
Inizia l’esecuzione del sottoprogramma 2
Università di Pavia - corso di Fondamenti di Informatica
343
Esempio di gestione delle chiamate 6/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
Sottoprogramma 2
S2
S3
I1
I2
Chiamata S3
I3
Sottoprogramma 3
I3
L’indirizzo dell’istruzione successiva a quella che ha effettuato la
chiamata (I3), viene memorizzato nella pila
Università di Pavia - corso di Fondamenti di Informatica
344
Esempio di gestione delle chiamate 7/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
I1
I2
Sottoprogramma 2
S2
I3
Inizio S3
S3
Sottoprogramma 3
Inizia l’esecuzione del sottoprogramma 3
Università di Pavia - corso di Fondamenti di Informatica
345
Esempio di gestione delle chiamate 8/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
Sottoprogramma 2
S2
S3
Sottoprogramma 3
I1
I2
Salto a I3
Fine S3
Si conclude l’esecuzione del sottoprogramma 3; l’ultimo indirizzo
caricato (I3) viene letto dalla pila e viene trasferito nel Program
Counter e l’esecuzione prosegue da I3
Università di Pavia - corso di Fondamenti di Informatica
346
Esempio di gestione delle chiamate 9/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
I1
I2
Sottoprogramma 2
S2
S3
Chiamata S3
I4
Sottoprogramma 3
I4
L’indirizzo dell’istruzione successiva a quella che ha effettuato la
chiamata (I4), viene memorizzato nella pila
Università di Pavia - corso di Fondamenti di Informatica
347
Esempio di gestione delle chiamate 10/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
I1
I2
Sottoprogramma 2
S2
I4
Inizio S3
S3
Sottoprogramma 3
Inizia l’esecuzione del sottoprogramma 3
Università di Pavia - corso di Fondamenti di Informatica
348
Esempio di gestione delle chiamate 11/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
I1
I2
Sottoprogramma 2
S2
S3
Salto a I4
Sottoprogramma 3
Fine S3
Si conclude l’esecuzione del sottoprogramma 3; l’ultimo indirizzo
caricato (I4) viene letto dalla pila e viene trasferito nel Program
Counter e l’esecuzione prosegue da I4
Università di Pavia - corso di Fondamenti di Informatica
349
Esempio di gestione delle chiamate 12/14
M
a
i
n
S1
Situazione della Pila
Sottoprogramma 1
Salto a I2
I1
Sottoprogramma 2
S2
Fine S2
S3
Sottoprogramma 3
Si conclude l’esecuzione del sottoprogramma 2; l’ultimo indirizzo
caricato (I2) viene letto dalla pila e viene trasferito nel Program
Counter e l’esecuzione prosegue da I2
Università di Pavia - corso di Fondamenti di Informatica
350
Esempio di gestione delle chiamate 13/14
M
a
i
n
S1
Salto a I1
Situazione della Pila
Sottoprogramma 1
Fine S1
Sottoprogramma 2
S2
S3
Sottoprogramma 3
Si conclude l’esecuzione del sottoprogramma 1; l’ultimo indirizzo
caricato (I1) viene letto dalla pila e viene trasferito nel Program
Counter e l’esecuzione prosegue da I1.
Università di Pavia - corso di Fondamenti di Informatica
351
Esempio di gestione delle chiamate 14/14
M
a
i
n
S1
Fine Main
Situazione della Pila
Sottoprogramma 1
Sottoprogramma 2
S2
S3
Sottoprogramma 3
Il programma termina l’esecuzione
Università di Pavia - corso di Fondamenti di Informatica
352
Scarica

slide-n-7