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