Parte VII
Traduzione e
Collegamento
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.1
Linguaggi di Programmazione
Linguaggi ad alto livello
– Maggiore espressività
– Maggiore produttività
– Migliore leggibilità
– Facilità di documentazione
– Minore controllo dell’efficienza
Linguaggi a basso livello
– Minore espressività
– Minore produttività
– Peggiore leggibilità
– Difficoltà di documentazione
– Pieno controllo dell’efficienza
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.2
Costi di Sviluppo ed
Efficienza del Software
• Approccio Misto: isolare le parti critiche
del programma e codificare solo quelle in
linguaggio assemblativo
• Il 10% del codice è responsabile del 90%
del tempo di esecuzione
• I tempi di esecuzione vengono abbattuti
nella fase di tuning, che riguarda ora solo
una piccola parte del codice
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.3
Traduzione
PROGRAMMA
SORGENTE
TRADUTTORE
• Compilatore
• Assemblatore
PROGRAMMA
OGGETTO
• Condotta una tantum in modo statico in
un tempo precedente all’esecuzione
• Il Programma Sorgente è scritto in un
linguaggio simbolico, orientato all’utente
• Il Programma Oggetto:
– Esegue le operazioni specificate dal
Programma Sorgente
– È scritto in linguaggio macchina e
quindi è direttamente eseguibile
• Il programma oggetto costituisce i dati
del programma traduttore, il programma
oggetto ne è il risultato dell’esecuzione
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.4
Interpretazione
PROGRAMMA SORGENTE
INTERPRETE
SISTEMA DI ELABORAZIONE
(Livello del Sistema Operativo)
• L’interpretazione viene effettuata ogni
volta che il programma viene eseguito
• Non viene generato nessun programma
oggetto
• L’interprete esegue direttamente le
istruzioni del programma sorgente
• Soluzione più semplice da realizzare
ma tipicamente inefficiente
• Esempi: BASIC, PROLOG, SQL,...
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.5
Linguaggi Assemblativi (es. Pentium II)
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.6
• Queste istruzioni calcolano N=I+J
• Corrispondenza uno ad uno con le istruzioni macchina
• Codici mnemonici ed etichette associate ad indirizzi
• Pseudoistruzioni dichiarative per la definizione di
etichette e l’associazione di valori iniziali
Pseudoistruzioni
• Utilizzate nella parte dichiarativa di un
programma in linguaggio asemblativo
• Dichiarano etichette, costrutti, o esprimono
direttive di assemblaggio
• Ad esse non corrispondono istruzioni nel
programma oggetto
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.7
Macro Definizioni
• Associano un nome ad un segmento di
codice (macro definizione)
• Il nome così definito può essere usato
(più volte) nel corso del programma
• Costituiscono una sorta di convenzione
stenografica (accettata dall’assemblatore)
• Servono a rendere il programma più
compatto (e più leggibile)
La sostituzione della macro avviene
staticamente in fase di assemblaggio
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.8
Macro con Parametri
• È possibile definire ed utilizzare anche
macro con parametri
• La sostituzione dei parametri formali
con gli argomenti attuali viene effettuata
staticamente in fase di assemblaggio
A valle dell’assemblaggio, a sostituzione
avvenuta, nel programma oggetto non
resta nessuna traccia delle macro, con o
senza parametri
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.9
Macro e Procedure
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.10
Il Processo di Assemblaggio
• L’assemblatore traduce da linguaggio
assemblativo a linguaggio macchina
• Processo molto semplice salvo per le
istruzioni con riferimenti a etichette non
ancora dichiarate (riferimenti in avanti)
Assemblatori ad una passata
– Traducono tutte le istruzioni tranne
quelle con riferimenti in avanti
– Mettono queste istruzioni in una lista
– Alla fine traduce anche queste
Assemblatori a due passate
Prima passata:
– Calcola la lunghezza delle istruzioni
– Genera una tavola dei riferimenti
Seconda passata:
– Tutti i riferimenti sono noti
– Può generare direttamente il codice
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.11
La Prima Passata
• Valuta la lunghezza di ciascuna istruzione
• Calcola il valore dell’ILC (Instruction
Location Counter)
• Inserisce tutte le etichette nella Tavola dei
Simboli, con i corrispondenti valori di ILC
• Alla fine della passata il problema dei
riferimenti in avanti non sussiste più
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.12
La Seconda Passata
• Sfrutta il prodotto della prima passata
• La Tavola dei Simboli fornisce l’indirizzo
di tutte le etichette
• Genera il codice, istruzione per istruzione,
appoggiandosi su apposite tavole (usate
anche nella prima passata) che forniscono:
– La lunghezza delle istruzioni
– I codici operativi
– La classe delle istruzioni (che dipende
dal tipo di operandi e dalle modalità di
indirizzamento)
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.13
Collegamento e Caricamento
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.14
• Procedure assemblate o compilate separatamente
• Il Collegatore (Linker) produce un unico modulo
assoluto pronto ad essere caricato
• Il Caricatore (Loader) finalizza gli indirizzi e carica
il modulo assoluto in memoria centrale
Collegamento (Linking)
• Ciascun modulo ha il suo spazio degli indirizzi
• Quando i moduli vengono collegati occorre
traslare i loro spazi degli indirizzi
• Occorre risolvere tutti i Riferimenti Esterni,
cioè le chiamate tra moduli
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.15
Aggiornamento degli Indirizzi
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.16
Struttura del Modulo Oggetto
Identification: nome, data, lunghezza
delle varie parti
Entry point table: simboli definiti nel
modulo e riferibili dall’esterno
External refrence table: simboli definiti
in altri moduli e riferiti dal modulo
Relocation dictionary: informazioni da
aggiornare all’atto della rilocazione
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.17
Collegamento Dinamico
• È spesso troppo costoso collegare staticamente
tutte le procedure
• Alcune sono chiamate solo in circostanze
inusuali (gestione di errori ed eccezioni)
• Il collegamento, viene effettuato a tempo di
chiamata (e solo se necessario)
• In Multics la chiamata fa un salto indiretto,
tramite il Linkage Segment
• La prima volta che una procedura viene
chiamata il salto provoca una trap
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.18
Collegamento Dinamico (2)
• La trap attiva il Dynamic Linker che alloca
in memoria virtuale la procedura chiamata
e scrive l’indirizzo nel linkage segment
• Alla ripresa la chiamata viene effettuata
regolarmente
• Tutte le successive chiamate si svolgono
normalmente
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.19
DLL (Dynamic Link Library)
• Soluzione adottata in ambiente Windows
• Una DLL contiene sia procedure che dati
• Più programmi condividono una DLL
• Risparmio di memoria centrale e di massa
• Semplicità di aggiornamento delle librerie
• Implicit linking: il programma è collegato
alla DLL tramite una tabella (import library),
le DLL necessarie sono caricate in memoria
• Explicit linking: la DLL viene richiesta e
caricata dinamicamente all’atto della chiamata
Calcolatori Elettronici, Proff. S. Salza e G. Santucci a.a. 00-01
VII.20