Anteprima
Vedrai una selezione di 4 pagine su 14
Informatica Pag. 1 Informatica Pag. 2
Anteprima di 4 pagg. su 14.
Scarica il documento per vederlo tutto.
Informatica Pag. 6
Anteprima di 4 pagg. su 14.
Scarica il documento per vederlo tutto.
Informatica Pag. 11
1 su 14
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

M tabelle di verità, ciascuna con N+1 colonne (N possibili valori delle variabili+ 1valore verità

risultato) si possono compattare tra di loro in una tabella a N+M colonne. rappresentano per tanto

una trasformazione da stringhe di N bit a M bit.

anche la rete ha bisogno di un certo tempo di commutazione per produrre sulle uscite il segnali

corrispondenti al bit del risultato.

reti sequenziali

le , calcolano non una singola funzione, ma una sequenza finita di funzioni

booleane.

una rete sequenziale ha come ingresso il contenuto del registro IR (registro istruzione corrente),

ovvero il codice operativo dell’istruzione corrente, e come uscita i segnali di abilitazione dei registri

e i segnali di selezione delle operazioni dell’ALU.

gli elementi della sequenza vengono generati uno dopo l’altro in corrispondenza di un segnale di

sincronizzazione detto clock.

alla fine di ciascuna sequenza l’unità di controllo genera la sequenza di segnali di abilitazione che

corrisponde alla fase di fetch.

la durata del periodo del clock deve essere sufficiente affinché la rete possa generare un nuovo

risultato prima del periodo successivo.

capitolo 10

nella strutturazione del programma si possono distinguere due aspetti:

la strutturazione logica: decomposizione in parti dell’algoritmo. un insieme di sottoprogrammi e

un insieme di variabili globali. non implica necessariamente la suddivisione del programma in più

file: il codice di un programma strutturato in sottoprogrammi potrebbe essere interamente

contenuto in un unico file.

il principale meccanismo di strutturazione logica è la possibilità di isolare un segmento di

sottoprogramma

codice in un .

le variabili di appoggio definite e utilizzate all’interno del sottoprogramma sono definite

locali.

le variabili che sono dichiarate all’esterno del sottoprogramma, ma usate e definite dal

corpo sono dette variabili globali o statiche. le variabili globali possono essere utilizzate da

più sottoprogrammi. poiché vengono usate e definite da sottoprogrammi diversi non è

sempre facilmente identificabile il codice che le manipola o la sequenza dinamica con cui

vengono usate o definite.

la strutturazione fisica: divisione in parti del testo del programma. (divisione in file del

programma)

esistono due meccanismi (che possono essere combinati) attraverso i quali è possibile

dividere un programma in file:

• meccanismo dell’inclusione (attraverso la direttiva #include): causa la sostituzione della riga di

testo che la contiene con l’intero contenuto del file ad argomento della direttiva. il processore

restituisce un unico file (non visibile) che viene compilato per produrre il programma

eseguibile. il meccanismo dell’inclusione viene usato per mettere in un file separato le

dichiarazioni di tipi o variabili globali che vanno ripetute in più di un’unità di compilazione.

es. #include <math.h>

inclusione del contenuto del file “math.h” al posto della direttiva.

• meccanismo della compilazione separata: i file vengono compilati separatamente

(indipendentemente l’uno dall’altro) e i prodotti delle compilazioni vengono ricambianti con un

linker

ulteriore strumento detto (collegatore). una porzione di codice che non sia un

programma completo, ma che possa essere compilato separatamente dal resto del

programma viene detta unità di compilazione. un’unità di compilazione deve rispettare alcune

regole: le istruzioni che definiscono singole componenti logiche del programma (variabili

globali o sottoprogrammi) devono essere interamente contenute in essa; devono essere

presenti le dichiarazioni di tutti gli identificatori che in essa compaiono. la definizione vera e

propria è quella contenuta nella prima unità, mentre la dichiarazione presente nella seconda

unità viene detta allusione e caratterizzata dall’uso della parola chiave extern, indica che essa

è definita in un’altra unità. questo modo di procedere comporta vantaggi pratici nel caso di

programmi di grosse dimensioni e sviluppo in parallelo di parti diverse ad opera di più

programmatori. tale possibilità permette di ricompilare solo una piccola parte del programma

quando si vogliono apportare modifiche limitate. macchina astratta

programma sorgente rende il programma

processore più maneggevole

attraverso la

sostituzione di

caratteri

compilatore

traduce dal

linguaggio sorgente

al linguaggio

macchina programma eseguibile

macchina dati di uscita

dati di ingresso reale

richiesta di esecuzione

macchina astratta

: realizzata mediante l’uso combinato di una macchina reale

basata sul modello di Von Neumann, e di programmi speciali che traducono il programma

formulato nel linguaggio ad alto livello in un equivalente programma formulato nel linguaggio

direttamente eseguibile dalla macchina reale.

durante l’esecuzione del programma il codice macchina e le variabili globali vengono memorizzati

in due porzioni contigue della memoria distinte dette rispettivamente area codice e area dati statici.

ogni istruzione e ogni variabile globale è associata a un indirizzo assoluto.

l’associazione di un indirizzo di memoria a un’istruzione o a un dato viene indicata con il termine

allocazione. binding

il procedimento attraverso cui si determina un indirizzo di un operando viene detto .

(quindi richiede che sia stata stabilita l’allocazione).

binding statico: le istruzioni contengono gli indirizzi completi dei suoi operandi (indirizzi assoluti)

binding dinamico: le istruzioni contengono indirizzi fittizi o incompleti dei loro operandi (indirizzi

relativi) {l’istruzione contiene l’indirizzo del vero indirizzo che quindi può essere modificato

durante l’esecuzione}.

il binding statico prevede alcuni inconvenienti tra cui che non possono essere eseguiti più

programmi contemporaneamente (a meno che l’insieme dei programmi da eseguire non sia deciso

a priori in modo da preallocarli in zone disgiunte della memoria) e lo spazio assegnato ai

programmi che provvedono alla gestione della macchina dovrebbe essere delimitato a priori.

per questo l’esecuzioni dei programmi sulle macchine reali impiega tecniche dinamiche di binding

basate sull’impiego delle istruzioni di indirizzi relativi (la posizione è relativa alla prima cella che

assume indirizzo ‘0’, la successiva ‘1’ e così via).

col termine rilocazione del codice si intende la traslazione del codice da una zona di memoria a

un’altra.

se il codice contiene indirizzi assoluti, la rilocazione viene detta rilocazione statica.

quando invece nel codice si fa uso di indirizzi relativi, un programma può essere allocato in una

zona qualsiasi della memoria, effettuando la rilocazione inizializzando opportunamente il contenuto

dei registri base. tale forma di rilocazione è detta rilocazione dinamica.

compilatore

il compito principale del compilatore è quello di tradurre il programma scritto dal programmatore in

linguaggio a alto livello (file sorgente) in un equivalente in linguaggio macchina. il prodotto della

traduzione viene detto file oggetto.

nell’effettuare la traduzione il compilatore assegna a istruzioni e dati indirizzi relativi a partire

dall’indirizzo 0. tale binding statico viene effettuato solo sugli operandi locali, cioè sulle istruzioni e

sui dati definiti nell’unità di compilazione in esame. nel caso siano presenti operandi per i quali non

è disponibile la definizione (sottoprogrammi o variabili globali definiti in un’altra unità di

compilazine) il compilatore non è in grado di determinare l’allocazione e quindi di effettuare il

binding. i riferimenti a tali operandi restano indefiniti e vengono detti riferimenti esterni.

collegatore

il ruolo del collegatore è quello di risolvere i riferimenti esterni di ciascun file oggetto.

per raggiungere il suo obbiettivo effettua alcune fasi:

identifica le unità di compilazione da collegare, disponendo i file oggetto uno dopo l’altro

separando l’aria codice dall’area dati statici. il contenuto dei file oggetto è unificato in due blocchi.

viene ripetuto il binding statico di tutti gli operandi (in quanto dopo l’unificazione l’allocazione

relativa di dati e istruzioni risulta modificata). effettua il binding dei riferimenti esterni.

al termine del collegamento viene prodotto un file in codice macchina in cui non sono più presenti

riferimenti esterni e quindi completamente tradotto.

il collegamento di più file oggetto può dare luogo a prodotti diversi: il file eseguibile, la libreria dati e

la libreria dinamica.

file eseguibile

il (caratterizzato dal suffisso “.exe”) è un file che contiene il codice e le

informazioni necessarie per l’esecuzione di un programma.

per produrre un file eseguibile occorre specificare tutti i file oggetto e le librerie che contengono il

codice necessario per il programma e informazioni necessarie per capire come allocare e come

caricare il programma in memoria. tra i simboli definiti deve esistere il simbolo globale “_main” che

indica il punto da cui iniziare l’esecuzione.

libreria statica

la (caratterizzata dal suffisso “.lib”) è una collezione di file oggetto e alcune

informazioni ausiliarie. la libreria deve contenere tutti i file oggetto in cui compare la definizione di

simboli (programmi e variabili globali) usati negli altri file oggetto appartenenti alla libreria. la lista

deve essere completa. non è necessario che sia presente il simbolo “_main” dal momento che

essa non rappresenta in alcun modo una porzione di codice eseguibile autonomamente. il

collegatore estrae in modo selettivo i file utili dalla libreria partendo dai riferimenti esterni

aggiungendo i file oggetto in modo incrementale fino a che tutti i riferimenti esterni siano risolti.

interprete

tuttavia è possibile un approccio diverso per realizzare la macchina astratta: invece di tradurre il il

programma sorgente in un programma eseguibile, viene utilizzato un interprete in grado di

ricostruire il significato del codice sorgente e di eseguire direttamente le operazioni della macchina

astratta che esso descrive. non viene quindi generata alcuna traduzione in linguaggio macchina

del file sorgente.

file compilati: traduzione del programma in una forma che l’hardware può direttamente eseguire.

richiede più tempo per iniziare l’esecuzione e ogni modifica richiede una nuova compilazione

• non portabili

file interpretati: l’hardware esegue un programma (l’interprete) che analizza il programma sorgente

e compie direttamente le corrispondenti azioni elaborative.

inizio immediato dell&rsq

Dettagli
A.A. 2014-2015
14 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher silviadalila16 di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università Campus Bio-medico di Roma o del prof Iannello Giulio.