La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Fabio AiolliPROGRAMMAZIONE Introduzione 1 PARTE 4 La Macchina Software.

Presentazioni simili


Presentazione sul tema: "Fabio AiolliPROGRAMMAZIONE Introduzione 1 PARTE 4 La Macchina Software."— Transcript della presentazione:

1 Fabio AiolliPROGRAMMAZIONE Introduzione 1 PARTE 4 La Macchina Software

2 Fabio AiolliPROGRAMMAZIONE Introduzione 2 Macchina Hardware e Macchina Software macchina hardware Agli albori dell'informatica, si programmava in binario, cioe` in linguaggio macchina, "scrivendo" i programmi direttamente nella RAM sistema operativo applicativi Adesso ci sono vari livelli e ogni livello rappresenta il supporto alla programmazione per il livello sovrastante

3 Fabio AiolliPROGRAMMAZIONE Introduzione 3 Istruzioni (funzionalita) elementari Programmi complessi Istruzioni di alto livello

4 Fabio AiolliPROGRAMMAZIONE Introduzione 4 macchina hardware utente macchina software "traduce" per l'utente in linguaggio macchina

5 Fabio AiolliPROGRAMMAZIONE Introduzione 5 Software La CPU è in grado di interpretare ed eseguire istruzioni elementari espresse nel proprio Linguaggio Macchina, quali "leggi il dato presente in una locazione di memoria", "somma due valori", "scrivi questo dato in una locazione di memoria e poco altro! I mattoncini della LEGO ;-) Windows, Word ed Excel sono dei software (intere costruzioni della LEGO) –Windows e` un sistema operativo –Word ed Excel sono delle applicazioni (o programmi applicativi); esistono le versioni per Windows e per Mac

6 Fabio AiolliPROGRAMMAZIONE Introduzione 6 La macchina software: facilita l'input/output permette la programmazione in linguaggi ad alto livello, come C/C++/Java rende disponibili programmi applicativi per compiere operazioni molto complicate Tutto viene alla fine "eseguito" dalla macchina hardware!

7 Sistemi Operativi Sistema operativo: insieme di programmi (software di base) che gestiscono lhardware CPU Memoria RAM Memoria di massa (Hard Disk) Dispositivi di I/O Software applicativo: insieme dei programmi scritti da sviluppatori o dall'utente

8 Vari SO Fino agli anni 1980 molti SO (dedicati alle varie macchine) Successivamente convergenza su pochi SO anche portabili su architetture diverse: DOS (Microsoft), non esiste piu' Unix (Sun e altri), portabile Linux (open source), portabile Windows (Microsoft) Mac OS (Apple) SO dedicati, per macchine mainframe (es. IBM AS400)

9 Fabio AiolliPROGRAMMAZIONE Introduzione 9 SO mono/multitasking I primi SO erano monotasking: ovvero in grado di gestire lesecuzione di un solo programma per volta Solo alla terminazione di un programma era possibile eseguire un altro programma MS-DOS era monotasking Tutti i SO moderni sono multitasking: Windows, Linux, Unix, MacOSX, BSD,...

10 Fabio AiolliPROGRAMMAZIONE Introduzione 10 Gestione della memoria RAM Una parte della RAM viene riservata per il SO I programmi per poter essere eseguiti devono essere caricati -- almeno in parte -- in RAM assieme ai loro dati. Di questo compito se ne occupa un programma del kernel del SO detto caricatore (loader) Sappiamo che ci possono essere piu' processi concorrenti, cioe' piu' programmi simultaneamente in esecuzione che si contendono la CPU e si suddicidono la RAM La RAM e' una risorsa finita e generalmente "scarsa", quindi vi sono dei limiti al caricamento in RAM dei programmi

11 Fabio AiolliPROGRAMMAZIONE Introduzione 11 Il gestore della memoria deve essere in grado di suddividere la RAM per assegnarne delle porzioni a ciascun programma I programmi in linguaggio macchina fanno riferimento a degli indirizzi logici o virtuali di memoria e non ad indirizzi assoluti (cioe' fisici) Il caricatore deve quindi rilocare i programmi, cioe' trasformare gli indirizzi logici in indirizzi fisici, cioe' indirizzi delle locazioni di memoria ove il programma viene effettivamente caricato in RAM

12 Fabio AiolliPROGRAMMAZIONE Introduzione 12 Il gestore della memoria offre al programma la visione di una memoria virtuale, diversa da quella fisica: cio' rende in particolare possibile l'esecuzione di programmi che richiederebbero piu della memoria disponibile (tecnica delloverlay)

13 Fabio AiolliPROGRAMMAZIONE Introduzione 13 Registri Cache Memoria Principace (RAM) Memoria Secondaria (di massa) Gerarchia di Memoria

14 Fabio AiolliPROGRAMMAZIONE Introduzione 14 Gestore della memoria secondaria Il gestore della memoria di massa e' denominato file system. Si occupa di: –Fornire programmi per accedere e gestire i file –Rendere trasparente (cioe` nascondere) la struttura fisica della memoria di massa (dell'hard disk) –Ottimizzare loccupazione della memoria di massa (dell'hard disk)

15 Fabio AiolliPROGRAMMAZIONE Introduzione 15 File Un file e' l'unità logica di informazione di un file system Fisicamente: –e' una sequenza di byte che contiene informazioni tipicamente "omogenee" –Es.: programma, testo, immagine, … Tutti i dati del file system sono organizzati in file I file sono memorizzati nelle memorie di massa, tipicamente l'hard disk Per ogni file vengono memorizzate varie ulteriori informazioni –identificatore: nomefile.estensione –data di creazione e ultima modifica –dimensione –posizione effettiva dei dati nella memoria di massa –diritti di accesso –etc

16 Fabio AiolliPROGRAMMAZIONE Introduzione 16 Estensioni dei file.exe : programma eseguibile.txt : file di testo.doc : file di Microsoft Word.xls : file di Microsoft Excel.jpg,.gif : file di immagini.wav,.mp3 : file di suoni.mpg,.avi : file di filmati.c,.cpp,.java : file di programmi C, C++, Java

17 Fabio AiolliPROGRAMMAZIONE Introduzione 17 Organizzazione dei file I file sono organizzati logicamente in modo gerarchico E' una organizzazione logica che non e' in relazione con la loro organizzazione fisica, cioe' la loro posizione fisica nella memoria di massa Directory: e' un insieme di file e altre directory

18 Fabio AiolliPROGRAMMAZIONE Introduzione 18 Organizzazione ad albero I dischi fissi possono essere divisi in partizioni Una partizione e' organizzata gerarchicamente come un albero rovesciato (come quello genealogico) Nodi e collegamenti padre-figlio tra nodi Nodo dell'albero: file o directory Nodi divisi per livelli Collegamenti tra nodi di livelli vicini: nodo sopra = padre, nodo sotto = figlio Ogni nodo ha un solo padre Padre più in alto = radice I nodi che sono file non hanno figli Cammino assoluto o relativo (per file) directory file

19 Fabio AiolliPROGRAMMAZIONE Introduzione 19 Indirizzo (o percorso) dei file in Windows A ED CB F de a b c hgf partizione Z Directory corrente Z:\A\cZ:\aZ:\A\C\D\f f Z:\A\C\E\h..\E\h Z:

20 Fabio AiolliPROGRAMMAZIONE Introduzione 20 Indirizzo (o percorso) dei file in Unix/Linux A ED CB F de a bc hgf Directory corrente /A/c /a /A/C/D/f./f f /A/C/E/h../E/h /

21 Fabio AiolliPROGRAMMAZIONE Introduzione 21 Operazioni su file Creazione Apertura Chiusura Cancellazione Copia Rinomina Visualizzazione Scrittura Modifica …

22 Fabio AiolliPROGRAMMAZIONE Introduzione 22 PARTE 5 Il processo di programmazione

23 Fabio AiolliPROGRAMMAZIONE Introduzione 23 Problemi e algoritmi La programmazione e' la disciplina che si occupa della risoluzione di problemi tramite programmi scritti in qualche linguaggio di programmazione Il problema e' una definizione sintetica di cio' che il programma deve realizzare dal punto di vista dell'utente La soluzione fornisce un'idea dell'approccio che deve essere seguito per risolvere il problema, tenendo anche in considerazione quale software gia' esistente potrebbe essere riutilizzato L'algoritmo e' una descrizione precisa e non ambigua di una sequenza di passi da seguire per risolvere un problema. L'algoritmo e' quindi un raffinamento della soluzione. Gli algoritmi possono essere espressi in molti modi Il programma e' una (possibile) descrizione dell'algoritmo espressa usando un particolare linguaggio di programmazione. Si intende che il programma debba essere completo ed eseguibile Per i banali problemi che vedremo, useremo direttamente il linguaggio C per descrivere gli algoritmi. Quindi, per noi, algoritmi=programmi

24 Fabio AiolliPROGRAMMAZIONE Introduzione 24 Il processo di programmazione Il processo di programmazione comprende tutte le attivita' necessarie per sviluppare dei programmi in modo che siano memorizzati e preparati per l'esecuzione Per sviluppare programmi su un computer e' necessario un ambiente di sviluppo che almeno comprenda, oltre al sistema operativo, un editor ed un compilatore

25 Fabio AiolliPROGRAMMAZIONE Introduzione 25 Editor e compilatori Un programma e' un testo che consiste in una sequenza di istruzioni scritte in un particolare linguaggio di programmazione. Tale "testo" viene creato e salvato come un file su disco tramite un editor. Una volta che e' stato scritto e memorizzato, il (testo del) programma viene dato in input al compilatore Il compilatore ha una duplice funzione: –Controlla la validita' del programma: segnala gli errori di sintassi. Questi errori devono essere corretti tramite l'editor ed il programma corretto deve quindi essere nuovamente compilato –Se il programma non contiene errori, il compilatore traduce il programma in linguaggio macchina

26 Fabio AiolliPROGRAMMAZIONE Introduzione 26 Esecuzione dei programmi Il compilatore naturalmente non e' in grado di scoprire gli errori logici o di esecuzione (i ben noti bug) del programma: in tali casi, il programma risulta essere sintatticamente corretto ma non si comporta come ci si aspetta Il programma viene eseguito (o "fatto girare") attraverso un comando al sistema operativo che lo carica in memoria e quindi diventa un processo in esecuzione Gli errori logici possono essere prevenuti seguendo delle buone regole di programmazione Spesso gli errori logici si individuano mandando in esecuzione il programma ed osservandone il comportamento tramite degli insiemi di test affidabili Una volta rilevato e corretto un errore logico, si dovrebbero nuovamente eseguire i test sul suo comportamento, in quanto le presunte "correzioni" potrebbero aver introdotto nuovi errori Il processo di rilevazione e correzione degli errori logici di un programma viene chiamato debugging

27 Fabio AiolliPROGRAMMAZIONE Introduzione 27 HelloWorld in C #include main() { printf(Hello World!\n); } Nome file: helloword.c gcc helloword.c -o helloword.exe

28 Fabio AiolliPROGRAMMAZIONE Introduzione 28 Token I token sono unita sintattiche di base del C – Parole chiave – Identificatori – Costanti – Costanti stringa – Operatori – Simboli di interpunzione

29 Fabio AiolliPROGRAMMAZIONE Introduzione 29 Parole chiave (Keyword) del C autodoubleintstruct breakelselongswitch caseenumregistertypedef charexternreturnunion constfloatshortunsigned continueforsignedvoid defaultgotosizeofvolatile doifstaticwhile

30 Fabio AiolliPROGRAMMAZIONE Introduzione 30 La libreria standard Input e Output Test dei caratteri Funzioni su stringhe Funzioni Matematiche Funzioni Utilita Funzioni Diagnostiche Liste argiomenti variabile Salti non locali Segnali Funzioni Date e Ore Limiti dei tipi di variabile

31 Fabio AiolliPROGRAMMAZIONE Introduzione 31 Tipi di Dato Un singolo bytechar Numero Interoint Numero Intero cortoshort Numero Intero lungolong int Numero in virgola mobile (singola precisione)float Numero in virgola mobile (doppia precisione)double Numero in virgola mobile (precisione estesa)long double Interi con segnosigned {char/int} Interi senza segnounsigned {char/int}

32 Fabio AiolliPROGRAMMAZIONE Introduzione 32 Sequenze di Escape \a bell \\ backslash \b backspace \? punto interrogativo \f formfeed \' apice singolo \n a capo \ apice doppio \r ritorno carrello \ooo carattere ottale \t tabulazione orizzontale \xhh carattere esadecimale \v tabulazione verticale

33 Fabio AiolliPROGRAMMAZIONE Introduzione 33 Dichiarazioni di variabili tipo nome_della_variabile [ = inizializzazione]; Esempi: int a; int a = 2; int a, b; float f = 2.345; char c = 'X'; char messaggio[] = Questa e' una stringa; Facendo precedere il tipo dal qualificatore const, si ottiene una variabile costante, il cui valore non potrà essere cambiato const double pi = 3, ;

34 Fabio AiolliPROGRAMMAZIONE Introduzione 34 Operatori Aritmetici: +, -, *, /, % Relazionali: >, >=, <, <=, ==, != Logici: &&, ||, ! Incremento e decremento: ++, -- bitwise: &, |, ^, >, ~ Assegnazione: =, +=, -=, *=, ecc. Condizionale ternario: expr1 ? expr2 : expr

35 Fabio AiolliPROGRAMMAZIONE Introduzione 35 Conversioni di Tipo Quando un'espressione coinvolge valori di tipo diverso, essi vengono convertiti ad un tipo comune: automaticamente ad un tipo più grande, che quindi non fa perdere informazione esplicitamente, mediante un operazione di cast. Obbligatoria se non e' possibile una conversione implicita automatica.

36 Fabio AiolliPROGRAMMAZIONE Introduzione 36 If (else) if (condizione) { /* blocco eseguito se la condizione e' vera */ } else { /* blocco eseguito se la condizione e' falsa */ }

37 Fabio AiolliPROGRAMMAZIONE Introduzione 37 Operatori Logici Expr1Expr2Expr1 && Expr2Expr1 || Expr2! Expr1 Zero 001 Non Zero011 Zero010 Non Zero 110

38 Fabio AiolliPROGRAMMAZIONE Introduzione 38 Valutazione short-circuit La valutazione degli operatori logici && e || avviene in maniera short-circuit, cioè da sinistra verso destra e si interrompe non appena il risultato diventa noto. (a != 0) && (++i < 10) (a!=0) || (++i < 10)

39 Fabio AiolliPROGRAMMAZIONE Introduzione 39 Switch Case switch (espressione) { case espr-costante1: istruzioni1 case espr-costante2: istruzioni2 case espr-costante3: istruzioni3 case espr-costante4: istruzioni4... default: istruzioni_default }

40 Laboratorio I

41 Comandi principali di Linux (1) Sintassi: [comando] –[opzioni] [argomenti] ls mostra il contenuto di una director –l versione lunga –a mostra anche i files nascosti che iniziano con. –t presenta in ordine di modifica (dal piu recente al meno recente) man [comando] invoca il manuale con le infomazioni sul comando –per scorrere le pagine del manuale freccia in giu e in su –per uscire dal manuale: q Fabio AiolliPROGRAMMAZIONE Introduzione 41

42 Comandi principali di Linux(2) mkdir x crea una nuova directory con nome x rmdir x elimina la directory x –solo se e vuota cd x (change directory) mi porta allinterno della directory indicata dal path x –esempio cd /d1/d3/ mi porta dentro d3 che e una sottodirectory di d1 –path puo essere relativo da dove mi trovo a dove voglio andare assoluto dalla home a dove devo andare –./ indica la directory corrente (dove mi trovo) –../ indica le directory che contiene la directory corrente –cd da solo mi porta sempre alla home emacs nomefile & invoca leditor emacs aprendo un file chiamato nomefile Fabio AiolliPROGRAMMAZIONE Introduzione 42

43 Emacs Permette di scrivere dei testi e fornisce numerose funzionalita per la gestione dei testi Salvataggio Ricerca di una parola Rimpiazzamento di una parola Cambiare i font Visualizzazione della sintassi attraverso colori –importante per programmare –funziona solo se il file ha lestensione giusta –per i programmi in C lestensione e.c Fabio AiolliPROGRAMMAZIONE Introduzione 43

44 Comandi principali di Linux(3) cp x y crea una copia del file x chiamata y mv x y rinomina il file x chiamandolo y pwd (print working directory) stampa il cammino (path) dalla home alla directory in cui ci si trova rm x elimina il file x Alcune scorciatoie della shell –tasti con freccie in su e in giu per scorrere la storia dei comandi precedentemente inseriti –tasto tab per completare automaticamente comandi e nomi da inserire Fabio AiolliPROGRAMMAZIONE Introduzione 44

45 Esercizio 1 1.creare due directory, ad esempio d1 e d2 2.spostarsi dentro d1 3.creare il file dataoggi.txt dentro d1 4.scrivere la data di oggi nel file 5.salvare il file dataoggi.txt 6.copiare dataoggi.txt nella directory d2 Fabio AiolliPROGRAMMAZIONE Introduzione 45

46 Esercizio 2 Creare dentro d2 una directory d3 Spostarsi in d3 Aprire con emacs il file mese.txt dentro d3 Scrivere dentro il file il mese corrente Salvare il file Spostare il file mese.txt dentro d2 Eliminare d3 Fabio AiolliPROGRAMMAZIONE Introduzione 46

47 Il compilatore …in breve Il compilatore –input: progamma in C –output: programma il linguaggio macchina pronto per essere eseguito Fasi del compilatore 1.Analisi lessicale e sintattica: vengono riconosciute le parole chiave ei costrutti fondamentali del linguaggio 2.Analisi semnatica: viene dato un significato alle istruzioni del programma 3.Assembly: viene generato il codice assembler 4.Linking e loading: viene generato il codice in linguaggio macchina, vengono creati i collegamenti necessari e vengono caricati i dati in memoria necessari Fabio AiolliPROGRAMMAZIONE Introduzione 47

48 Compilatore per C gcc comando che invoca il compilatore per programmi scritti in C gcc x.c –o y compila x.c e mette leseguibile nel file y gcc –E x.c si ferma dopo la fase di preprocessing gcc –S x.c si ferma dopo la fase dellassemblaggio gcc –c x.c si ferma prima della fase del linking Fabio AiolliPROGRAMMAZIONE Introduzione 48

49 Cygwin Emulatore della shell di Linux per Windows Per scaricarlo: cliccare su Software di laboratorio poi su Contenuto del CD Software … con Cygwin potete usare i comandi visti in classe e il compilatore gcc per scrivere I programmi potete usare leditor che preferite Fabio AiolliPROGRAMMAZIONE Introduzione 49


Scaricare ppt "Fabio AiolliPROGRAMMAZIONE Introduzione 1 PARTE 4 La Macchina Software."

Presentazioni simili


Annunci Google