275 Università di Pavia - corso di Fondamenti di Informatica Interfacce di comunicazione 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 12V (100 m), bps – RS422 1 km, bps –USB 1 e 2 (Universal Serial Bus) 3-5m, da 1.5 a 480 Mbit/s PERIFERICACPU INTERFACCIA
276 Università di Pavia - corso di Fondamenti di Informatica 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 Cenni sulle architetture BUS MEMORIACPU MEMORIA AGG. SERIALEPARALL. INTER. RETE DISCONASTRO MASTERIZ- ZATORE CD/DVD
277 Università di Pavia - corso di Fondamenti di Informatica 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
278 Università di Pavia - corso di Fondamenti di Informatica 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
279 Università di Pavia - corso di Fondamenti di Informatica 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
280 Università di Pavia - corso di Fondamenti di Informatica 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);
281 Università di Pavia - corso di Fondamenti di Informatica 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. CANALE 1CANALE 2 PERIFERICA MEMORIA CENTRALE CPU
282 Università di Pavia - corso di Fondamenti di Informatica 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
283 Università di Pavia - corso di Fondamenti di Informatica Fasi dell’unità di controllo Esecuzione Decodifica Fetch Operando Fetch Op. Code i-3 i-2 i-1i i-2 i-1ii+1 i-1ii+1i+2 ii+1i+2i+3 Esecuzione Decodifica Fetch Operando Fetch Op. Code Tempo Fasi di una istruzione nella macchina di Von Neumann Fasi in una soluzione pipeline
284 Università di Pavia - corso di Fondamenti di Informatica 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
285 Università di Pavia - corso di Fondamenti di Informatica 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
286 Università di Pavia - corso di Fondamenti di Informatica Architettura degli elaboratori: tassonomia generale Elaborazione SISD Macchina di Von Neumann MISD Strutture pipeline SIMD Strutture array MIMD Sistemi multi- processore Sistemi multi- computer Seriale Parallela
287 Università di Pavia - corso di Fondamenti di Informatica Classificazione delle architetture degli elaboratori ∙∙∙ : Memoria istruzioni dati SIMD Processori Memoria Processore istruzioni dati SISD Memoria istruzioni dati Processori MISD Memoria istruzioni dati MIMD Processore
288 Università di Pavia - corso di Fondamenti di Informatica Evoluzione della macchina di Von Neumann CPU LOCALE MEMORIA COMUNE I/O COMUNE BUS COMUNE MEMORIA LOCALE I/O LOCALE BUS LOCALE 1 …… BUS LOCALE 2 BUS LOCALE n Sistema Multiprocessore
289 Università di Pavia - corso di Fondamenti di Informatica Evoluzione della macchina di Von Neumann N-cubo: 2 N 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
290 Università di Pavia - corso di Fondamenti di Informatica 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)
291 Università di Pavia - corso di Fondamenti di Informatica 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
292 Università di Pavia - corso di Fondamenti di Informatica 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) Funzioni del kernel
293 Università di Pavia - corso di Fondamenti di Informatica 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
294 Università di Pavia - corso di Fondamenti di Informatica Funzioni del software di base –utilizzare le periferiche (nastri, stampanti, …) –colloquiare con altri utenti –utilizzare la rete locale –inviare e ricevere posta –giocare –…–…
295 Università di Pavia - corso di Fondamenti di Informatica Sistemi operativi Sistema operativo come interfaccia tra macchina (hardware) e 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 HARDWARE PROGRAMMI UTENTE SISTEMA OPERATIVO
296 Università di Pavia - corso di Fondamenti di Informatica 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
297 Università di Pavia - corso di Fondamenti di Informatica 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
298 Università di Pavia - corso di Fondamenti di Informatica 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
299 Università di Pavia - corso di Fondamenti di Informatica 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 CANALE MEMORIA CPU PERIFERICHE
300 Università di Pavia - corso di Fondamenti di Informatica 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 Multiprogrammazione
301 Università di Pavia - corso di Fondamenti di Informatica Il tempo di utilizzo della CPU viene suddiviso dal sistema operativo in fette (time slice con durata di 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 Sistemi operativi interattivi (time sharing)
302 Università di Pavia - corso di Fondamenti di Informatica 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 Sistemi operativi interattivi (time sharing) RIFLETTESCRIVE COMPILA ESEGUE RIFLETTESCRIVE… L’utente lavora al terminale
303 Università di Pavia - corso di Fondamenti di Informatica Processo: sequenza di istruzioni eseguite dal processore per eseguire un programma Time sharing: Stati di un processo
304 Università di Pavia - corso di Fondamenti di Informatica Time sharing: Stato dei programmi
305 Università di Pavia - corso di Fondamenti di Informatica Time sharing: Stato dei programmi S.O. Dedicato S.O. Time Sharing S.O. Multi programmato Running Blocked Running Ready Blocked Running Ready Blocked t t t
306 Università di Pavia - corso di Fondamenti di Informatica 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
307 Università di Pavia - corso di Fondamenti di Informatica 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
308 Università di Pavia - corso di Fondamenti di Informatica 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) …
309 Università di Pavia - corso di Fondamenti di Informatica 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
310 Università di Pavia - corso di Fondamenti di Informatica 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.
311 Università di Pavia - corso di Fondamenti di Informatica 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 I programmi interpretati
312 Università di Pavia - corso di Fondamenti di Informatica Confronto fra Interpretazione e Compilazione
313 Università di Pavia - corso di Fondamenti di Informatica Confronto fra Interpretazione e Compilazione
314 Università di Pavia - corso di Fondamenti di Informatica Confronto fra Interpretazione e Compilazione
315 Università di Pavia - corso di Fondamenti di Informatica 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
316 Università di Pavia - corso di Fondamenti di Informatica Fasi della compilazione
317 Università di Pavia - corso di Fondamenti di Informatica 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 *DELTA; ALFA179,6505 BETA32 DELTA47
318 Università di Pavia - corso di Fondamenti di Informatica 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 *DELTA; := ALFA BETA + * DELTA
319 Università di Pavia - corso di Fondamenti di Informatica 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
320 Università di Pavia - corso di Fondamenti di Informatica 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)
321 Università di Pavia - corso di Fondamenti di Informatica 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
322 Università di Pavia - corso di Fondamenti di Informatica 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
323 Università di Pavia - corso di Fondamenti di Informatica 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
324 Università di Pavia - corso di Fondamenti di Informatica 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
325 Università di Pavia - corso di Fondamenti di Informatica 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
326 Università di Pavia - corso di Fondamenti di Informatica Linguaggio macchina (1 a 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) Linguaggi
327 Università di Pavia - corso di Fondamenti di Informatica Linguaggi assemblativi (2 a 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) Linguaggi
328 Università di Pavia - corso di Fondamenti di Informatica Linguaggi Linguaggi di alto livello (3 a 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à
329 Università di Pavia - corso di Fondamenti di Informatica Linguaggi I linguaggi ad alto livello vengono classificati in: –procedurali –funzionali –basati sulla logica –orientati agli oggetti
330 Università di Pavia - corso di Fondamenti di Informatica 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
331 Università di Pavia - corso di Fondamenti di Informatica 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
332 Università di Pavia - corso di Fondamenti di Informatica 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)
333 Università di Pavia - corso di Fondamenti di Informatica 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). Acquisizione dati A Elaborazione dati A Acquisizione dati B Elaborazione dati B Acquisizione dati C Elaborazione dati C Acquisizione dati A Acquisizione dati B Acquisizione dati C Elaborazione dati Programma senza chiamateProgramma con chiamate Chiamate per elaborazione dati A, B, C
334 Università di Pavia - corso di Fondamenti di Informatica 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.
335 Università di Pavia - corso di Fondamenti di Informatica 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.
336 Università di Pavia - corso di Fondamenti di Informatica Esempio di Macroistruzioni Macrodefinizione 2 Macrodefinizione 3 Macrodefinizione 4 Macrodefinizione 1 Macrodefinizione 2 Macrodefinizione 3 Macrodefinizione 4 Macrodefinizione 1 Macrodefinizione 4 Programma Sorgente Dopo le Macroespansioni Chiamata Macro 1 Chiamata Macro 2 Chiamata Macro 4 Chiamata Macro 3 Chiamata Macro 4
337 Università di Pavia - corso di Fondamenti di Informatica 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).
338 Università di Pavia - corso di Fondamenti di Informatica 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). Sottoprogramma Programma Richiami Quando il sottoprogramma termina l’esecuzione, viene letto dalla pila l’ultimo indirizzo caricato che non è stato ancora prelevato e viene trasferito nel Program Counter. La gestione LIFO dello STACK permette di nidificare le chiamate ai sottoprogrammi.
339 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 1/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Inizio Main Situazione della Pila Inizia l’esecuzione del Programma dalla prima istruzione del Main. La pila è vuota
340 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 2/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Chiamata S1 I1 Situazione della Pila I1 L’indirizzo dell’istruzione successiva a quella che ha effettuato la chiamata (I1), viene memorizzato nella pila
341 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 3/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Inizio S1 I1 Situazione della Pila Inizia l’esecuzione del sottoprogramma 1
342 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 4/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Chiamata S2 I1 I2 Situazione della Pila I2 L’indirizzo dell’istruzione successiva a quella che ha effettuato la chiamata (I2), viene memorizzato nella pila
343 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 5/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Inizio S2 I1 I2 Situazione della Pila Inizia l’esecuzione del sottoprogramma 2
344 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 6/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Chiamata S3 I1 I2 I3 Situazione della Pila I3 L’indirizzo dell’istruzione successiva a quella che ha effettuato la chiamata (I3), viene memorizzato nella pila
345 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 7/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Inizio S3 I1 I2 I3 Situazione della Pila Inizia l’esecuzione del sottoprogramma 3
346 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 8/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Fine S3 I1 I2 Situazione della Pila 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 Salto a I3
347 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 9/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Chiamata S3 I1 I2 I4 Situazione della Pila I4 L’indirizzo dell’istruzione successiva a quella che ha effettuato la chiamata (I4), viene memorizzato nella pila
348 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 10/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Inizio S3 I1 I2 I4 Situazione della Pila Inizia l’esecuzione del sottoprogramma 3
349 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 11/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Fine S3 I1 I2 Situazione della Pila 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 Salto a I4
350 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 12/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Fine S2 I1 Situazione della Pila 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 Salto a I2
351 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 13/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Fine S1 Situazione della Pila 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. Salto a I1
352 Università di Pavia - corso di Fondamenti di Informatica Esempio di gestione delle chiamate 14/14 Sottoprogramma 1 Sottoprogramma 2 Sottoprogramma 3 MainMain S1 S2 S3 Fine Main Situazione della Pila Il programma termina l’esecuzione