Generalità Software1Luglio 2004 Generalità Software Luglio 2004
Generalità Software2Luglio 2004 IL PROGRAMMA Sia che sia fatto “ad hoc” dal programmatore o che sia acquistato, serve a risolvere il problema della comunicazione con il calcolatore Si comunica la modalità con cui risolvere un problema (cioè l’algoritmo) Il programma è quindi un insieme di istruzioni: –spostamenti di informazioni –scelte (fra diverse sequenze di istruzioni in base alla modalità con cui si è evoluto il programma) –operazioni aritmetiche e logiche –richiesta o presentazione di informazioni –salti (ad altri punti del programma)
Generalità Software3Luglio 2004 IL PROGRAMMA (Cont. 1) L’insieme delle istruzioni definite dalla CPU costituisce il linguaggio macchina Nel linguaggio macchina ogni istruzione (statement) è rappresentabile con una sequenza di cifre binarie ………. (32 se si sta lavorando con un processore a 32 bits) La difficoltà nel programmare in linguaggio macchina è ovviamente enorme.
Generalità Software4Luglio 2004 v = v(1), v(2), …. v(k), v(k+1), … Programma scritto in linguaggio ad alto livello (C) Programma in linguaggio assemblatore (per il MIPS) Programma nel linguaggio binario della macchina (per il MIPS) Swap (int v , int k) {int temp; temp = v k ; v k = v k+1 ; v k+1 = temp; } Swap: mult $2, S5, 4 add $2, S4, S2 lw $15, 0 (S2) lw $16, 4 (S2) sw $16, 4 (S2) sw $15, 0 (S2) jr $ Compilatore C Assemblatore
Generalità Software5Luglio 2004 ASSEMBLATORE Per ovviare alle difficoltà di programmazione in linguaggio macchina si inventarono programmi in grado di tradurre notazioni simboliche in linguaggio macchina (codice binario) usando la macchina stessa. Questo facilita molto la programmazione add A, B, C L’insieme delle notazione simboliche costituisce il linguaggio Assembler. L’Assembler è un linguaggio “machine oriented”, per il quale è quindi necessario “pensare” come la macchina Anche il “programma traduttore” prende il nome di Assembler (più propriamente detto Assemblatore)
Generalità Software6Luglio 2004 LINGUAGGI AD ALTO LIVELLO (HIGH LEVEL LANGUAGE) Se è possibile scrivere un programma che traduce il linguaggio assembler in istruzioni binarie, perché non fare altrettanto considerando notazioni a livello più elevato, cioè il più possibile vicine alle “espressioni” usate nella vita di tutti i giorni Sono quindi consentite notazioni del tipo: C=A+ B Il programma che traduce le notazioni scritte in linguaggio ad alto livello in codice binario si chiama compilatore I linguaggi HLL sono orientati all'utente (user oriented)
Generalità Software7Luglio 2004 LINGUAGGIO AD ALTO LIVELLO (HIGH LEVEL LANGUAGE) (Cont. 1) Benefici: –poter ragionare con un linguaggio più vicino a quello naturale (anche se in inglese) –incrementare la produttività dei programmatori –essere indipendenti dalle caratteristiche del calcolatore per il quale si sta scrivendo il programma (portability)
Generalità Software8Luglio 2004 STRUMENTI DI PROGRAMMAZIONE Generazioni: macchina basso livello 1 : linguaggi macchina 2 : linguaggi assembler 3 : linguaggi di alto livello 4 : linguaggi di 4° generazione 5 : pacchetti personalizzabili uomo alto livello
Generalità Software9Luglio 2004 PARADIGMI DI LINGUAGGI DI PROGRAMMAZIONE LISP MLScheme Funzionali SIMULA C ++ Ada95 A oggetti Smalltalk Java Linguaggi FORTRAN BASIC C Ada Imperativi Macchina COBOL ALGOL APL Pascal GPSS Prolog Dichiarativi Visual BasicVisual C Visuali
Generalità Software10Luglio 2004 Grammatica definizione degli elementi costitutivi di un linguaggio Sintassi relazione fra le parole che compongono una frase e l’insieme delle norme che regolano queste relazioni Semantica significato della frase ELEMENTI DI UN LINGUAGGIO
Generalità Software11Luglio 2004 SINTASSI E SEMANTICA sintassi semantica Il cane mangia la melacorrettocorretto la cane mangia il melascorretto corretto la mela mangia il canecorrettoscorretto il mela mangia la canescorrettoscorretto
Generalità Software12Luglio 2004 SINTASSI E SEMANTICA (CONT. 1) Sintassi SI programma oggetto programma sorgente in L NO (mostra errori) Semantica programma corretto oggetto output input scorretto C Compilatore (grammatica di L Esecutore
Generalità Software13Luglio 2004 GESTIRE I PROGRAMMI Rendere riutilizzabili i programmi già scritti (reusability), organizzandoli opportunamente in librerie –librerie di sistema –librerie dell’utente Necessità di un programma particolare per la supervisione dell’esecuzione dei programmi, a sua volta scomposto in diverse funzioni (allocazione della memoria, schedulazione dei programmi, ecc.): il sistema operativo Sistemi operativi (operating systems - O.S.) –proprietari –standardizzati –open source
Generalità Software14Luglio 2004 SOFTWARE software applicativo per controllo di apparati per funzioni organizzative per produttività personale, ecc. Software di base (Sistema Operativo e ambienti di sviluppo) Software di Comunicazione hardware
Generalità Software15Luglio 2004 Software Programmi applicativi Programmi di sistema Utente Pacchetti standard Compilatori Ambienti di sviluppo Sistemi operativi Sistemi di comunicazione Assemblatori …… …… Gestione dei file Memoria virtuale Gestione dispositivo di ingresso/uscita …… …… …… LinkerLoader Job management InitiatorTerminator Supervisore programmi applicativi programmi di sistema firmware macchina fisica
Generalità Software16Luglio 2004 SISTEMI OPERATIVI SUNSolaris HPHP- UX IBMAIX MICROSOFTWINDOWS LINUXLinux Altri S.O. proprietari
Generalità Software17Luglio 2004 CICLO DI SVILUPPO progettistautente prototipo specifiche componenti da sviluppare o riusare Definizione e specifica del problema progetto realizzazione integrazione e verifica di sistema installazione e verifica in campo manutenzione Verifica di ogni componente
Generalità Software18Luglio 2004 PROGRAMMAZIONE In piccolo (singoli) problema algoritmo programma In grande (gruppi) programma- … programma-n software applicativo sistema h/w-s/w sistemista progettista programmatore
Generalità Software19Luglio 2004 SVILUPPO DI UN PROGRAMMA compilatore Digitazione Verifca debuggin Sistema runtime compilazione correzione esecuzione Listato ed Errori di sintassi Listato ed Errori di esecuzione
Generalità Software20Luglio 2004 PROCESSO DI PREPARAZIONE DI UN PROGRAMMA PER L’ESECUZIONE CON IL CALCOLATORE 1.Il programma scritto dal programmatore (Codice Sorgente o Source Code) viene memorizzato nell’Archivio dei Codici Sorgenti (o Source Code File). 2.Se il programma è scritto in linguaggio ad alto livello viene preso in carico dal relativo Compilatore, mentre se è scritto in Assembler viene preso in carico dall’Assemblatore. Se vengono riscontrati errori grammaticali il programmatore deve correggerli e tornare alla fase 1. Se il programma è corretto viene tradotto in linguaggio macchina e memorizzato nell’Archivio dei Codici Oggetto (o Object Code File).
Generalità Software21Luglio 2004 PROCESSO DI PREPARAZIONE DI UN PROGRAMMA PER L’ESECUZIONE CON IL CALCOLATORE (1) Sia l’Assemblatore che il Compilatore sono strutturati in 3 fasi: - analizzatore lessicale - analizzatore sintattico - generatore del codice 3.L’utente richiede quindi l’intervento del Linker. Questo ha il compito di mettere insieme i programmi (o codici) oggetto con cui l’utente intende costituire un unico Codice Caricabile (Loadable Code)
Generalità Software22Luglio 2004 PROCESSO DI PREPARAZIONE DI UN PROGRAMMA PER L’ESECUZIONE CON IL CALCOLATORE (2) Naturalmente può non riuscire o perché non trova tutti i programmi oggetto, oppure perché non riesce a risolvere i collegamenti fra gli stessi. In tal caso lo segnala all’utente. Se invece va tutto bene, il programma ottenuto unendo gli oggetti viene caricato nell’Archivio dei Codici Caricabili (Loadable Code File ) 4.L’utente richiede infine l’intervento del Loader che provvede a richiedere la memoria necessaria per eseguire il programma e ad attualizzare. nell’Archivio dei Codici Caricabili, gli indirizzi in base alla parte di memoria che sarà occupata dal programma.
Generalità Software23Luglio 2004 PROCESSO DI PREPARAZIONE DI UN PROGRAMMA PER L’ESECUZIONE CON IL CALCOLATORE (3) Carica il programma, a questo punto detto codice eseguibile o executable code, nella memoria principale e cede il controllo al programma di sistema (Initiator) che avvierà il programma utente all’indirizzo specificato come prima istruzione da eseguire. (Alla fine dell’esecuzione viene avviato il programma di sistema Terminator)