Generalità Software Luglio 2004 Luglio 2004 Generalità Software 1 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) Luglio 2004 Generalità Software 2 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 00101110………. (32 se si sta lavorando con un processore a 32 bits) • La difficoltà nel programmare macchina è ovviamente enorme. Luglio 2004 Generalità Software in linguaggio 3 v = v(1), v(2), …. v(k), v(k+1), … Programma scritto in linguaggio ad alto livello (C) Swap (int v , int k) {int temp; temp = v k; v k = v k+1 ; v k+1 = temp; } Compilatore C Programma in linguaggio assemblatore (per il MIPS) 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 $31 Assemblatore Programma nel linguaggio binario della macchina (per il MIPS) Luglio 2004 00000000101000010000000000011000 00000000100011100001100000100001 10001100011000100000000000000000 10001100111100100000000000000100 10101100111100100000000000000000 10101100011000100000000000000100 00000011100000000000000000001000 Generalità Software 4 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) Luglio 2004 Generalità Software 5 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) Luglio 2004 Generalità Software 6 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) Luglio 2004 Generalità Software 7 STRUMENTI DI PROGRAMMAZIONE Generazioni: macchina 1 : linguaggi macchina basso livello 2 : linguaggi assembler 3 : linguaggi di alto livello 4 : linguaggi di 4° generazione 5 : pacchetti personalizzabili uomo Luglio 2004 alto livello Generalità Software 8 PARADIGMI DI LINGUAGGI DI PROGRAMMAZIONE LISP ML Scheme Funzionali SIMULA C++ Ada95 A oggetti Smalltalk Linguaggi FORTRAN BASIC Java C Ada Imperativi Macchina COBOL ALGOL APL GPSS Pascal Prolog Dichiarativi Visual Basic Visual C Visuali Luglio 2004 Generalità Software 9 ELEMENTI DI UN LINGUAGGIO 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 Luglio 2004 Generalità Software 10 SINTASSI E SEMANTICA Il cane mangia la mela la cane mangia il mela la mela mangia il cane il mela mangia la cane Luglio 2004 sintassi corretto scorretto corretto scorretto Generalità Software semantica corretto corretto scorretto scorretto 11 SINTASSI E SEMANTICA (CONT. 1) Sintassi SI programma oggetto NO (mostra errori) programma sorgente in L Compilatore (grammatica di L Semantica programma oggetto input Luglio 2004 corretto Esecutore Generalità Software output scorretto 12 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 Luglio 2004 Generalità Software 13 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 Luglio 2004 Generalità Software 14 programmi applicativi programmi di sistema firmware macchina fisica Software Programmi di sistema Programmi applicativi Utente Pacchetti standard Compilatori … … Memoria virtuale … Linker Luglio 2004 Ambienti di sviluppo Sistemi operativi Assemblatori Sistemi di comunicazione … … Gestione dispositivo di ingresso/uscita Gestione dei file … … … Loader … … Job management Supervisore Generalità Software Initiator Terminator 15 SISTEMI OPERATIVI SUN Solaris HP HP- UX IBM AIX MICROSOFT WINDOWS LINUX Linux Altri S.O. proprietari Luglio 2004 Generalità Software 16 CICLO DI SVILUPPO progettista utente Definizione e specifica del problema progetto realizzazione prototipo specifiche componenti da sviluppare o riusare Verifica di ogni componente integrazione e verifica di sistema installazione e verifica in campo Luglio 2004 manutenzione Generalità Software 17 PROGRAMMAZIONE In piccolo (singoli) problema algoritmo programma In grande (gruppi) sistemista sistema h/w-s/w progettista software applicativo programma- Luglio 2004 … programma-n Generalità Software programmatore 18 SVILUPPO DI UN PROGRAMMA correzione compilazione Listato ed Errori di sintassi compilatore Digitazione Verifca debuggin Luglio 2004 Sistema runtime esecuzione Generalità Software Listato ed Errori di esecuzione 19 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à Software Luglio 2004 20 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) Luglio 2004 Generalità Software 21 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. Luglio 2004 Generalità Software 22 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) Luglio 2004 Generalità Software 23