La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Sistemi Operativi … e altro. Susanna Pelagatti Dipartimento di Informatica, Via Buonarroti, 2 stanza 346 DE Tel. 050.2212.772.

Presentazioni simili


Presentazione sul tema: "1 Sistemi Operativi … e altro. Susanna Pelagatti Dipartimento di Informatica, Via Buonarroti, 2 stanza 346 DE Tel. 050.2212.772."— Transcript della presentazione:

1 1 Sistemi Operativi … e altro. Susanna Pelagatti email: susanna@di.unipi.it Dipartimento di Informatica, Via Buonarroti, 2 stanza 346 DE Tel. 050.2212.772 ricevimento prima o dopo le lezioni o per appuntamento oppure per posta elettronica sito web www.di.unipi.it/~susanna/masterSO

2 2 Materiale Didattico Copie Lucidi Testi Introduttivi (per non informatici) –Sciuto, Bonanno, Fornaciari, Mari Introduzione ai sistemi informatici (seconda ed) McGraw-Hill, 2002 –Tosoratti Introduzione all’informatica (seconda ed), Casa Editrice Ambrosiana

3 3 Materiale Didattico (2) Testi di approfondimento (specifici sui SO), in ordine di complessità –Sliberschatz et al. Sistemi Operativi, Addison Wesley Italia –Ancilotti et al., Sistemi Operativi, McGrowHill, 2004 –Tanenbaum, Modern Operating Systems, 2nd Edition, Prentice Hall, 2001 –Stallings, Operating Systems, Internals and Design Principles, Prentice Hall, 2004

4 4 Organizzazione del corso: Le basi (8) –Cosa è l’informatica? –Algoritmi e programmi –Eseguire un algoritmo sulla macchina –Hardware e software –Cosa è un Sistema Operativo –Cenni di rappresentazione dei dati L’hardware (4) –Il processore –Le memorie –Le periferiche

5 5 Organizzazione del corso (2) Il software (16) –Software applicativo e di sistema –Caratteristiche di un sistema operativo –Gestione del processore –Gestione della memoria –Gestione delle periferiche –File System

6 6 Introduzione

7 7 Una domanda di base... Cos’è l’informatica ?

8 8 Informatica Informazione+automatica Informazione insieme di entità astratte, che raccolgono ‘conoscenza’ derivata dallo sforzo di descrizione ed interpretazione del mondo (materiale o immateriale) –es.: un libro, una sinfonia, un quadro, un insieme di dati relativi agli studenti di un corso di laurea

9 9 Informatica Informazione+automatica (2) Rappresentazione dell’informazione trascrizione e registrazione dell’informazione su supporti materiali –es: la scrittura, un CD che registra un melodia, un insieme di schede che mantengono le informazioni relative agli studenti …..secondo una opportuna codifica… –es: le convenzioni di rappresentazione dei caratteri, il formato del CD, la struttura dei campi di una scheda studente

10 10 Informatica Informazione+automatica (3) Calcolatore : un supporto per la rappresentazione di informazione ‘attivo’ che può –(1) raccogliere grandi quantità di dati es: tutto l’archivio del British Museum –(2) rendere disponibili questi dati in modo istantaneo e con prospettive diverse a utenti diversi e in parti diverse del mondo es: permettendo a utenti di tutto il mondo di collegarsi a parti delle informazioni di BM via Internet, lasciando altre private (accesso ristretto all’amministrazione del museo)

11 11 Informatica Informazione+automatica (4) Calcolatore (continua) un supporto per la rappresentazione di informazione ‘attivo’ che può –(3) elaborare automaticamente la rappresentazione dei dati in modo da presentarli in modo diverso a diversi soggetti di prendere delle decisioni in base alle proprietà degli oggetti rappresentati esempi: stampare la lista delle opere acquisite del BM in un certo mese, decidere se una data statua passa o no per una data porta

12 12 Alcuni concetti base Informazione –l’idea di rosa Rappresentazione dell’informazione –rosa, [CAT: fiore, NOME: rosa],

13 13 Alcuni concetti base (2) Consideriamo un antenato del calcolatore : il pallottoliere … –informazione : due numeri da addizionare –rappresentazione dell’informazione : i gruppi di dischetti che rappresentano ciascun numero –elaborazione dell’informazione : manipolare i due gruppi di dischetti in modo da avere un gruppo unico che rappresenti correttamente il risultato finale

14 14 Alcuni concetti base (3) Consideriamo un antenato del calcolatore : il pallottoliere –algoritmo : insieme di operazioni da effettuare sulla rappresentazione dell’informazione per ottenere il risultato finale, nel nostro caso scegli una fila vuota F sposta un disco alla volta dal primo addendo a F sposta un disco alla volta dal secondo addendo a F termina

15 15 Alcuni concetti base (4) Peculiarità del Calcolatore –programmabilità : capacità di specializzare il dispositivo con algoritmi complessi di elaborazione dell’informazione

16 16 Alcuni concetti base (5) Quindi nei moderni calcolatori –Anche loro rappresentano informazione di natura estremamente più varia dati di vario tipo (immagini, numeri, suoni, testo, etc.) –… ma anche... gli algoritmi per elaborare questi dati (come sommare due numeri, come impaginare correttamente un testo etc) –La rappresentazione è uniforme : ogni cosa è rappresentata da una sequenza di zeri (0) e di uni (1) –La parte fisica (hardware) è in grado di interpretare e realizzare i passi richiesti dalle algoritmi

17 17 Alcuni concetti base (6) Per specializzare il calcolatore per un nuovo compito ‘basta’ immaginare una strategia di soluzione del compito (algoritmo) rappresentare l’algoritmo in modo che sia comprensibile alla macchina (cioè fornire il programma che realizza quell’algoritmo) chiedere alla macchina di decodificare il programma (cioè risalire dalla codifica ai passi di cui è composto) ed eseguirlo (cioè portare a termine i passi richiesti)

18 18 Sulla stessa macchina... elaborazione di dati medici : risonanza magnetica, TAC, presentazione progettazione di prodotti complessi editoria elettronica elaborazione di dati del territorio

19 19 Struttura di un calcolatore L’architettura di Von Neumann Memorie (RAM,dischi, etc) Mantiene Dati e Programmi Processore (CPU) E’ un esecutore capace di interpretare i singoli passi richiesti dai programmi (istruzioni elementari) Sottosistema di Interfaccia Permette di comunicare dati e programmi alla macchina e di ottenere i risultati (tastiera, micr., stampante, schermo, )

20 20 Struttura di un calcolatore (2) Memorie Processore Sottosistema di Interfaccia La comunicazione fra i tre sottosistemi viene effettuata attraverso un dispositivo fisico detto bus di interconnessione. Attraverso il bus la CPU - legge\scrive dati e programmi in memoria - trasferisce da\a la memoria al dispositivo di interfaccia - recupera la prossima istruzione da eseguire bus

21 21 Struttura di un calcolatore (3) Memorie Processore Sottosistema di Interfaccia Il sottosistema di interfaccia cura anche la comunicazione fra due calcolatori diversi (es. via telefono\modem, via ethernet\ con opportune schede di connessione) bus

22 22 Struttura di un calcolatore (4) Hw e sw Memorie Mantiene Dati e Programmi Processore Sottosistema di Interfaccia Software Hardware bus

23 23 Problemi, algoritmi e programmi Alcuni cenni su come progettare e scrivere nuovi algoritmi e programmi

24 24 Risolvere un problema Come viene risolto un problema : Dati di ingresso Descrivono il caso in esame Elaborazione Manipolazione dei dati di ingresso in modo da costruire la soluzione cercata Rappresentano la soluzione del caso in esame Dati di uscita

25 25 Risolvere un problema (2) es : riconoscere qualcuno fra la folla Dati di ingresso Immagine della folla Elaborazione Ricerca nell’immagine SI, NO, chi è la persona riconosciuta Dati di uscita

26 26 Risolvere un problema (3) es : torta di carote Dati di ingresso Ingredienti Elaborazione Combinazione degli ingredienti secondo una opportuna ricetta La torta ! Dati di uscita

27 27 Risolvere un problema (4) Una prima considerazione : essere capaci di risolvere un problema non significa essere capaci di spiegare esattamente come questo avviene Dati di ingresso Immagine della folla Elaborazione Ricerca nell’immagine SI, NO, chi è la persona riconosciuta Dati di uscita Come avviene la ricerca ??????

28 28 Risolvere un problema (6) Seconda considerazione : vogliamo essere capaci di specificare la strategia seguita dal passo di elaborazione in modo da farla eseguire ‘automaticamente’ dal computer quindi dobbiamo : –riuscire a descrivere accuratamente i vari passi della soluzione attraverso azioni che il calcolatore è in grado di effettuare e con un linguaggio che è in grado di comprendere

29 29 Risolvere un problema (7) Dati di ingresso Ingredienti Elaborazione Combinazione degli ingredienti secondo una opportuna ricetta La torta ! Dati di uscita Cuoco (che sa ‘come’) Descrizione del ‘come’ espressa attraverso la combinazione di azioni elementari Io (che conosco alcune azioni elementari: accendere il forno, sbattere le uova) ricetta

30 30 Algoritmi e programmi La situazione con il calcolatore è Dati di ingresso Codificati opportunamente Elaborazione Trasformazione dei dati di ingresso seguendo i passi specificati da un opportuno algoritmo Dati di uscita Umano (che conosce l’algoritmo) Ovvero la descrizione dell’algoritmo secondo un linguaggio comprensibile al calcolatore Calcolatore (che conosce alcune azioni elementari: es confrontare due numeri, eseguire semplici operazioni aritmetiche programma

31 31 Algoritmi e programmi (2) Algoritmo (def) : una sequenza di azioni non ambigue che trasformi i dati iniziali nel risultato finale utilizzando un insieme di azioni elementari che possono essere eseguite da un opportuno esecutore. Programma (def) specifica di un algoritmo utilizzando un linguaggio non ambiguo e direttamente comprensibile dal computer es: C, Java...

32 32 Algoritmi e programmi (3) Due punti importanti: –fissare in modo meno vago le azioni elementari eseguibili da un computer dipende dal livello di astrazione a cui operiamo es. in hw leggere-scrivere la memoria, addizionare, confrontare con 0 es in Java, interagire con schermo, tastiera, effettuare interazioni con computer remoti... –capire come passare dal problema all’algoritmo è generalmento lasciato all’intuizione e alla fantasia, vedremo degli esempi

33 33 Algoritmi e programmi (4) Ma insomma, una ricetta è proprio un algoritmo? … quasi, ovvero è molto simile ad un algoritmo con due importanti differenze: –La sequenza di azioni contiene spesso degli elementi di ambiguità risolti da un esecutore intelligente es: spesso non si specificano gli strumenti da utilizzare, confidando che l’esecutore umano sbatta le uova nel posto giusto –Non tutti i possibili casi vengono specificati es: è chiaro che se c’e’ puzza di bruciato conviene spegnere il forno, anche se la ricetta non lo specifica anche qua si confida nelle capacità deduttive dell’esecutore

34 34 Dal problema all’algoritmo Un esempio

35 35 Dal problema all’algoritmo: un esempio La biblioteca –Libri disposti sugli scaffali –La posizione di ogni libro è fissata dalle due coordinate (S,P) dove S è il numero dello scaffale dove si trova il libro P è la posizione all’interno dello scaffale –La biblioteca ha uno schedario con una scheda per ogni libro. Ogni scheda contiene, nell’ordine: cognome e nome dell’autore titolo del libro numero scaffale (S) e posizione nello scaffale (P)

36 36 Dal problema all’algoritmo: esempio (2) La biblioteca (cont.) –Le schede sono ordinate in ordine alfabetico del campo autore Problema: Vogliamo specificare un algoritmo che spieghi all’utente della biblioteca come trovare un libro cercato supponendo di sapere : Autore e Titolo

37 37 Dal problema all’algoritmo: esempio (3) Un primo algoritmo per il prestito: 1. Decidi il libro da richiedere 2. Cerca la scheda nello schedario 3. Trascrivi la posizione (S,P) 4. Accedi alla posizione (S,P) 5. Preleva il libro e compila la scheda di prestito Le operazioni elementari in questo caso sono piuttosto complesse…

38 38 Dal problema all’algoritmo: esempio (4) … e se non so come si effettua la ricerca nello schedario ? –Tutte le operazioni specificate devono essere ‘elementari’ per chi esegue l’algoritmo. –Se non lo sono è possibile spiegarle a parte per mezzo di un sotto-algoritmo es : nello spiegare una ricetta spesso si fa riferimento a parti spiegate in altre ricette, tipicamente ‘… preparare la pasta frolla (ricetta p. 212) usando i primi 3 ingredienti, poi preparare il ripieno come segue ….’

39 39 Dal problema all’algoritmo: esempio (5) Un sotto algoritmo per cercare nello schedario : 1. Apri il classificatore 2. Prendi la prima scheda 3. Confronta il campo autore e titolo con quelli cercati 4. Se sono uguali, allora la ricerca è terminata, altrimenti prendi la scheda successiva e vai al passo 3 5. Se le schede sono esaurite, allora il libro cercato non esiste.

40 40 Dal problema all’algoritmo: esempio (6) Due considerazioni : –Per ogni problema\sotto-problema ci sono algoritmi più o meno veloci es: per la ricerca nello schedario si può utilizzare l’algoritmo che utilizziamo solitamente (e spesso non consapevolmente) per cercare una parola sul dizionario –L’algoritmo presentato, per quanto semplice presenta sia operazioni elementari (confronta, prendi) che strutture di controllo (istruzioni che organizzano la sequenza in cui vengono effettuate le operazioni elementari, es. se….altrimenti … vai a …)

41 41 Dal problema all’algoritmo: le strutture di controllo La struttura di controllo condizionale 1. Apri il classificatore 2. Prendi la prima scheda 3. Confronta il campo autore e titolo con quelli cercati 4. Se (sono uguali), allora la ricerca è terminata, altrimenti prendi la scheda successiva e vai al passo 3 5. Se (le schede sono esaurite) allora il libro cercato non esiste. (….) specifica la condizione

42 42 Dal problema all’algoritmo: le strutture di controllo (2) La struttura di salto (vai a o go_to) 1. Apri il classificatore 2. Prendi la prima scheda 3. Confronta il campo autore e titolo con quelli cercati 4. Se sono uguali, allora la ricerca è terminata, altrimenti prendi la scheda successiva e vai al passo 3 5. Se le schede sono esaurite allora il libro cercato non esiste.

43 43 Dal problema all’algoritmo: le strutture di controllo (3) La struttura di iterazione (finchè…ripeti) 1. Apri il classificatore 2. Prendi la prima scheda 3. Confronta il campo autore e titolo con quelli cercati 3. Finchè (il campo autore e titolo sono diversi da quelli cercati) ripeti a. Prendi la scheda successiva b. Confronta il campo autore e titolo con quelli cercati 5. Se le schede sono esaurite allora il libro cercato non esiste.

44 44 Algoritmi: ancora esempi... Immaginiamo degli algoritmi per i seguenti problemi : 1. Trovare il maggiore fra 2 numeri interi x e y 2. Trovare il maggiore fra 3 numeri interi x, y e z 3. Trovare il massimo fra N numeri assumiamo le seguenti operazioni elementari –somma (+), sottrazione (-), stabilire se un numero è maggiore o minore di 0, leggere/scrivere dallo schermo … dove ragionevole : –definiamo dei sottoalgoritmi e utilizziamo le strutture di controllo

45 45 Il maggiore fra 2 numeri interi x, y Algoritmo max 1. Leggi i valori di x e y dall’esterno 2. Calcola la differenza d fra x e y (d=x-y) 3. Se d è maggiore di 0 vai al passo 5 altrimenti prosegui in sequenza 4. Stampa ‘il massimo è …’ seguito dal valore di y e vai a 6 5. Stampa ‘il massimo è …’ seguito dal valore di x 6. Termina l’esecuzione

46 46 Il maggiore fra 2 numeri interi x e y (2) x, y, d sono le ‘variabili’, cioè i contenitori per i dati coinvolti nell’elaborazione. Ogni variabile ha un nome (x,y…) e un valore: il dato contenuto o memorizzato in essa Dobbiamo specificare esplicitamente come e quando l’esecuzione termina!

47 47 Il maggiore fra 3 numeri interi Possiamo sfruttare l’algoritmo max come ‘sottoalgoritmo’ Algoritmo max_3 1. Leggi i valori di x, y, z dall’esterno 2. Valuta se x> y usando l’algoritmo max 3. In caso affermativo vai al passo 5 4. Trova il massimo fra y e z (con max) e termina 5. Trova il massimo fra x e z (con max) e termina

48 48 Il massimo fra N numeri interi Possiamo ancora sfruttare l’algoritmo max come ‘sottoalgoritmo’! Idea … trovare prima il maggiore fra i primi due numeri, poi confrontare il risultato con il terzo, poi con il quarto etc … In pratica, possiamo usare la struttura di controllo iterativa finchè…ripeti per effettuare le operazioni di max su tutti i numeri in ingresso

49 49 Determinare il massimo fra N numeri interi Algoritmo max_N 1. Leggi il valore di N dall’esterno 2. Leggi i primi due numeri 3. Trova il maggiore m fra i primi due numeri (con max ) 4. Finchè (hai esaminato meno di N numeri) a. Leggi un nuovo numero x b. Trova il maggiore fra m e x usando l’algoritmo max c. Assegna il valore del maggiore a m 5. Stampa ‘il massimo è…’ ed il valore di m e termina

50 50 Diagrammi di Flusso Sono grafici che permettono di esprimere un algoritmo in modo preciso ed intuitivo Si costruiscono a partire da un certo numero di ‘blocchi base’ che rappresentano le operazioni elementari ed i costrutti di controllo

51 51 Diagrammi di Flusso (2) I blocchi base : Cond. Inizio Fine Sottoprog. Operazione I/0 Elaborazione Si No

52 52 Diagrammi di Flusso (3) I blocchi base vengono collegati tramite ‘freccie’ che collegano un’azione alla successiva all’interno dell’algoritmo Vediamo i diagrammi di flusso degli algoritmi per il calcolo del massimo già visti 1. Trovare il maggiore fra 2 numeri interi x e y 2. Trovare il maggiore fra 3 numeri interi x, y e z 3. Trovare il massimo fra N numeri

53 53 Il maggiore fra 2 numeri interi x, y Algoritmo max 1. Leggi i valori di x e y dall’esterno 2. Calcola la differenza d fra x e y (d=x-y) 3. Se d è maggiore di 0 vai al passo 5 altrimenti prosegui in sequenza 4. Stampa ‘il massimo è …’ seguito dal valore di x e vai a 6 5. Stampa ‘il massimo è …’ seguito dal valore di y 6. Termina l’esecuzione

54 54 DF di max d > 0 ? Inizio Fine Leggi x e y Si No d = x - y Scrivi ‘max è x’ Scrivi ‘max è y’

55 55 DF di max d > 0 ? Inizio Fine Leggi x e y Si No d = x - y Scrivi ‘max è x’ Scrivi ‘max è y’ Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6

56 56 Il massimo fra N numeri interi Possiamo ancora sfruttare l’algoritmo max come ‘sottoalgoritmo’! Idea … trovare prima il maggiore fra i primi due numeri, poi confrontare il risultato con il terzo, poi con il quarto etc … In pratica, possiamo usare la struttura di controllo iterativa finchè…ripeti per effettuare le operazioni di max su tutti i numeri in ingresso

57 57 Determinare il massimo fra N numeri interi Algoritmo max_N 1. Leggi il valore di N dall’esterno 2. Leggi i primi due numeri 3. Trova il maggiore m fra i primi due numeri (con max ) 4. Finchè (hai esaminato meno di N numeri) a. Leggi un nuovo numero x b. Trova il maggiore fra m e x usando l’algoritmo max c. Assegna il valore del maggiore a m 5. Stampa ‘il massimo è…’ ed il valore di m e termina

58 58 Ancora numeri da esaminare ? Inizio Fine Leggi i primi due numeri x1 e x2 e memorizzali nelle variabili a e b SiNo Leggi il nuovo numero in a Scrivi ‘max è m’ m = max(a,b) m = max(a,m) DF per il problema del massimo di N numeri Supponiamo N fissato

59 59 DF e programmi (1) I DF sono un primo passo verso la formalizzazione di un algoritmo in modo non ambiguo Per ottenere una codifica interpretabile direttamente dalla macchina dobbiamo però specificare molti più dettagli : –trasformare tutte le ‘frasi’ in variabili e modifiche su di esse : es : ‘ancora numeri da esaminare’ deve essere tradotto in qualcosa di calcolabile dalla macchina usando solo le operazioni elementari

60 60 I < N ? Inizio Fine Leggi i primi due numeri x1 e x2 e memorizzali nelle variabili a e b Si No Leggi il nuovo numero in a Scrivi ‘max è m’ m = max(a,b) m = max(a,m) DF per il problema del massimo di N numeri (seconda versione) Leggi N I = 2 I = I + 1 Supponiamo N almeno 2

61 61 DF e programmi (2) Per ottenere una codifica interpretabile direttamente dalla macchina dobbiamo anche : –decidere come codificare l’informazione non banale in esempi più complessi del nostro, ad esempio se voglio codificare un’immagine o un video –scrivere il tutto con una codifica ‘leggibile’ dalla macchina … ma la macchina lavora molto a basso livello (linguaggio macchina, codificato con zeri e uni) !!!!

62 62 DF e programmi (3) … soluzione…. –usare linguaggi di ‘livello’ più alto (linguaggi di programmazione ad alto livello) –usare dei programmi appositi per far tradurre i nostri programmi in linguaggio macchina (i compilatori) importante …. –I tipici linguaggi (C, Java, Fortran, Basic…) permettono di definire strutture del tutto analoghe ai diagrammi di flusso che abbiamo visto finora

63 63 DF e programmi : max in C main() /* calcola max */ { int x, y, d; scanf ("%d %d”, &x, &y) ; d = x - y ; if (d > 0) printf (”il max è %d\n”, &x) ; else printf (”il max è %d\n”, &y) ; return ; }

64 64 DF e programmi : max in Java public class Max { public static void main(String [] args){ int x, y, d; x = readfromconsole () ; y = readfromconsole () ; d = x - y ; if (d > 0) System.out.println(”il max è %d” + x) ; else System.out.println(”il max è %d” + y) ; }

65 65 DF e programmi : max_N in C (1) main() /* calcola max_N */ { unsigned int m, i, a, b; i = 2 ; scanf ("%d %d”, &a, &b); m = max(a,b); while (i < N) { scanf ("%d ”, &a) ; m = max(a,m); } printf (”il max è %d”, &m) ; return ; }

66 66 DF e programmi : max_N in C (2) int max(int x, int y) /* sottoprogramma che calcola max */ { int d; d = x - y ; if (d > 0) return x; else return y; }

67 67 Riassumendo … Abbiamo dato alcuni esempi di algoritmi Abbiamo introdotto i diagrammi di flusso (DF), dei grafici che permettono di esprimere un algoritmo tramite una combinazione grafica di passi elementari e strutture si controllo. Abbiamo discusso la distanza fra DF e tipici linguaggi di programmazione ad alto livello

68 68 Altri esempi...

69 69 Altri esempi Formalizzimo un algoritmo che effettua la ricerca della scheda relativa a un certa coppia (Autore, Titolo) usando la strategia della ricerca nel dizionario Modifichiamo l’algoritmo max_N in modo da ordinare gli N numeri (diagramma di flusso)

70 70 La ricerca stile ‘dizionario’ 1. Apri il classificatore 2. Prendi la scheda X al centro dello schedario 3. Confronta il campo autore e titolo di X con quelli cercati 4. Se sono uguali, allora termina, altrimenti prosegui 5. Se il campo autore di X è minore di quello cercato allora prosegui la ricerca sulla metà inferiore delle schede altrimenti considera la metà superiore 6. Se la metà selezionata al passo 5 è vuota allora termina (lo schedario non contiene il libro cercato) altrimenti scegli come X la scheda al centro della metà scelta e vai al passo 3

71 71 La ricerca stile ‘dizionario’ (2) schedario Situazione iniziale

72 72 La ricerca stile ‘dizionario’ (3) Ogni volta elimino la metà delle schede, oppure mi fermo perché ho trovato la scheda cercata Ogni volta divido il numero N delle schede per 2, mi fermo quando N è diventato 1 o 0 Al più eseguo x passi dove x è il logaritmo in base 2 di N Scheda cercata!

73 73 Ordinare N numeri interi Problema: Servono N variabili ! –X_1 … X_N per memorizzare i numeri letti dall’esterno durante l’elaborazione Supponiamo che max_N restituisca una coppia di valori (m,i) dove m è il valore del massimo ed i è la posizione all’interno della sequenza cui corrisponde –es (45,3), il massimo valore è 45 e corrisponde al terzo numero nella sequenza lunga N

74 74 Ordinare N numeri interi (2) Algoritmo ordina_N 1. Leggi il valore di N dall’esterno 2. Finchè (hai letto meno di N numeri) a. Leggi un nuovo numero nella variabile X_i 3. Trova il maggiore (m, i) fra X_1 … X_N (con max_N modificato) 4. Scambia fra loro X_i e X_N 5. Considera adesso solo i primi N-1 numeri (N=N-1) 6. Se N = 1 termina, altrimenti vai al passo 3

75 75 Ordinare N numeri interi (3) 8731 1378 1738 N=4 Max_N = 8 in posizione 1 Scambio la posizione 1 e 4 N=3 Max_N = 7 in posizione 2 Scambio la posizione 1 e 3 N=2 Max_N = 3 in posizione 2 Nessuno scambio 1378 Termina 1378 N=1

76 76 Ordinare N numeri interi (4) … problema…. –La variabile X_i che deve essere scambiata è diversa ogni volta! Questo non è possibile esprimerlo utilizzando solo le cose viste finora –Inoltre se N cambia devo aggiungere/togliere variabili … –Soluzione : utilizzare un meccanismo di rappresentazione ‘più potente’ della singola variabile, che mantenga l’informazione che stiamo elaborando una sequenza di valori (strutture dati)

77 77 Strutture dati Le strutture dati, cioè variabili ‘con struttura’, permettono di rappresentare agevolmente dati più complessi di quelli visti finora e ne discuteremo alcuni esempi

78 78 Strutture dati (2) Tutti i linguaggi ad alto livello per la programmazione permettono di definire due tipi di aggregati di variabili (o strutture dati) –array : tabelline di valori tutti dello stesso tipo (a una o più dimensioni) –record : gruppi di variabili di tipo diverso

79 79 Array –Possiamo definire una sequenza lunga N per il nostro problema di ordinamento, es. 1378 Array di 4 valori interi (a una sola dimensione) 13278 9338 14372382 Array 3x4 di 12 valori interi (a due dimensioni) –Possiamo definire una tabella a due dimensioni, ad esempio per memorizzare le vendite di un prodotto in un trimestre dell’anno Prod 1 Prod 2 Prod 3 I IIIII IV

80 80 Array (2) Come si specifica la struttura di un array ? e come si usano le singole variabili nella struttura ? –La struttura si specifica con il tipo e l’ampiezza di ogni dimensione –es : int x[4] int tab[3][4] 1378 13278 9338 14372382 Prod 1 Prod 2 Prod 3 I IIIII IV Nomi delle tabelle

81 81 Array (3) Uso di una singola variabile : –Si specificano le coordinate della variabile desiderata : –Ogni elemento di ogni dimensione è identificato da un valore da 1 a N (o da 0 a N-1, dipende dal linguaggio) 1378 13278 9338 14372382 Prod 1 Prod 2 Prod 3 I IIIII IV x[1] tab[1][0] Noi generalmente seguiremo la convenzione C, Java di partire da 0 0 1 2 3 posizione valore

82 82 Usiamo gli array... Costruiamo una versione dell’algoritmo che ordina N numeri che usa un array int X[N] per memorizzare i numeri della sequenza da ordinare

83 83 Usiamo gli array (2) Per prima cosa costruiamo 2 sottoalgoritmi –leggi_Na che legge i numeri da ordinare e li inserisce nell’array X –max_Na che trova il valore del massimo numero in X e la sua posizione

84 84 I < N ? Inizio Fine Si No Leggi il nuovo numero in X[I] Sottoalgoritmo per la lettura di N numeri (leggi_Na) Leggi il valore di N I = 0 I = I + 1 Strutture dati: Int X[N] // la sequenza Input : vuoto (void) Output : Int X[N] // la sequenza letta Int N // la sua lunghezza

85 85 Esempio di leggi_Na 8 Inizialmente X è vuoto Passo 1, leggo il primo numero I=0Leggo 8 e lo scrivo nella posizione 0, cioè X[0]=8 Termina Sequenza di numeri da leggere : 8, 1, 9, 7 quindi N=4 Passo 2, leggo il secondo numero 81 I=1Leggo 1 e lo scrivo nella posizione 1, cioè X[1]=1 8197 Passo 3, leggo il terzo numero I=2 Leggo 9 e lo scrivo nella posizione 2, cioè X[2]=9 819 Passo 4, leggo il quarto numero I=3Leggo 7 e lo scrivo nella posizione 3, cioè X[3]=7 X = 0 1 2 3posizione I=4, quindi I< N non è più verificata

86 86 I < N ? Inizio Fine Si No Sottoalgoritmo per la trovare il massimo di N numeri in un array (max_Na) Imax = 0, I = 0 I = I + 1 Strutture dati: Int X[N] // la sequenza m = X[0] Input: Int X[N], Int N Output: Int m // il valore del massimo Int Imax // l’indice del massimo m > X[i] ? Si No m = X[i], Imax = I

87 87 Esempio di max_Na 8197 8197 Passo 1, esamino X[0], I=0 m = 8Imax = 0 Termina Trova il valore m del massimo in X e la sua posizione Imax, la lunghezza di X è N=4 Passo 2, esamino X[1], I=1 8197 8197 Passo 3, esamino X[2], I=2 8197 Passo 4, esamino X[3], I=3 X = 0 1 2 3posizione I=4, quindi I< N non è più verificata (Valore e posizione del massimo trovato fra gli elementi già esaminati) m = 8Imax = 0 m = 9Imax = 2 m = 9Imax = 2

88 88 Ordinare N numeri interi 8731 1378 1738 N=4 Max_Na = 8 in posizione 1 Scambio la posizione 1 e 4 N=3 Max_Na = 7 in posizione 2 Scambio la posizione 1 e 3 N=2 Max_Na = 3 in posizione 2 Nessuno scambio 1378 Termina 1378 N=1

89 89 Ordinare N numeri interi (2) Algoritmo ordina_Na 1. Leggi il valore di N dall’esterno 2. Leggi gli N numeri della sequenza nell’array X 3. Trova il maggiore (m, imax) fra i primi N numeri dell’array X (con max_Na ) 4. Scambia fra loro X[imax] e X [N] 5. Considera adesso solo i primi N-1 numeri dell’array (N=N-1) 6. Se N = 1 continua, altrimenti vai al passo 3 7. Stampa X, termina

90 90 N > 1 ? Inizio Fine Si No (X,N)=leggi_Na() (m,I) = max_Na(X,N) DF per il problema del ordinare di N numeri ( ordina_Na ) Strutture dati: Int X[N] // la sequenza T = X[N] X[N] = X[I] Input : vuoto (void) Stampa(X,Lung) X[I] = T N = N-1 Lung=N Output : vuoto (void) Scambio dei due valori

91 91 Record Finora abbiamo visto solo variabili di tipo intero Normalmente è possibile avere variabili di tipo diverso che rappresentano informazioni di natura diversa : –interi, reali … –caratteri (‘a’,’b’, …) –sequenze di caratteri (dette stringhe, ”gatto ”, ”oggi piove !” …) I record sono aggregati di variabili di tipo diverso e permettono di definire nuovi tipi

92 92 Record (2) A cosa possono servire…... –A rappresentare le schede della biblioteca Nome Autore Cognome Autore Titolo Scaffale Posizione … altre informazioni ….. stringa intero Campi del record Costo reale

93 93 Record (3) Il tipo record scheda espresso in C struct scheda { char nome [100]; //stringa di al più //100 caratteri char cognome [100]; char titolo [300]; int scaffale ; int posizione ; double costo ; } ;

94 94 Record (4) //Come dichiaro che voglio //una variabile di tipo ‘scheda’ struct scheda nuovo_libro; // come assegno valori ai diversi campi nuovo_libro.nome =”Jorge" ; nuovo_libro.cognome =”Amado" ; nuovo_libro.titolo =”Dona Flor e i suoi due mariti" ; nuovo_libro.scaffale =”8" ; nuovo_libro.posizione =”356" ;

95 95 Record (5) Si possono definire array di record –questo può servire, ad esempio a definire l’insieme delle schede di una biblioteca: struct scheda archivio[100000] –possiamo quindi formalizzare il nostro algoritmo ‘stupido’ per la ricerca nello schedario

96 96 I < 100000 ? Inizio Fine Si No Ricerca ‘stupida’ (ricerca) I = 0 I = I + 1 Strutture dati: struct scheda archivio // l’array di schede Input : struct scheda archivio Output : la scheda cercata e un valore (si/no) che dice se c’è Leggi Nome, Cognome e Titolo del libro cercato archivio[I].nome = Nome archivio[I].cognome = Cognome archivio[I].titolo = Titolo ? Si Fine No L’ho trovata! Non l’ho trovata!

97 97 DF e programmi DF Codifica in un linguaggio di programmazione (C, Java etc) Programma Compilatore Input : programma Output : rappresentazione comprensibile alla macchina Eseguibile

98 98 DF e programmi (2) L’eseguibile dipende dalla macchina che dobbiamo specializzare (es. processore Intel, o processore SUN), dal sistema operativo (es. Windows, Linux …) e dal linguaggio usato (es: C o Java) Gli eseguibili di alcuni linguaggi (come Java) contengono operazioni complesse che non possono essere eseguite direttamente! In questo caso si utilizza un programma interprete (es Java Virtual Machine) che realizza le operazioni elementari complesse

99 99 DF di max d > 0 ? Inizio Fine Leggi x e y Si No d = x - y Scrivi ‘max è x’ Scrivi ‘max è y’

100 100 DF e programmi : max in C main() /* calcola max */ { int x, y, d; //def. Delle variabili scanf ("%d %d”, &x, &y) ; //lettura x,y d = x - y ; if (d > 0) //scrittura risultati printf (”il max è %d”, &x) ; else printf (”il max è %d”, &y) ; return ; //terminazione }

101 101 DF e programmi : max in Java public class Max { public static void main(String [] args){ int x, y, d; x = readfromconsole () ; y = readfromconsole () ; d = x - y ; if (d > 0) System.out.println(”il max è %d” + x) ; else System.out.println(”il max è %d” + y) ; }

102 102 I < N ? Inizio Fine Leggi i primi due numeri x1 e x2 e memorizzali nelle variabili a e b Si No Leggi il nuovo numero in a Scrivi ‘max è m’ m = max(a,b) m = max(a,m) DF per il problema del massimo di N numeri (seconda versione) Leggi N I = 2 I = I + 1 Supponiamo N almeno 2

103 103 DF e programmi : max_N in C (1) main() /* calcola max_N */ { int m, i, a, b; i = 2 ; scanf ("%d %d”, &a, &b); m = max(a,b); while (i < N) { scanf ("%d ”, &a) ; m = max(a,m); } printf (”il max è %d”, &m) ; return ; }

104 104 DF e programmi : max_N in C (2) int max(int x, int y) /* sottoprogramma che calcola max */ { int d; d = x - y ; if (d > 0) return x; else return y; }

105 105 DF e programmi : ordina_Na in C main() /* calcola max_N */ { int m, i, t, X[N], N, lung; leggi_Na (N, X) ; m = X[0]; lung = N ; while (N > 1) { max_Na(X,N,&m,&i) ; t = X[N]; X[N] = X[i] ; X[i] = t ; N = N - 1 ; } stampa_Na (X,lung) ; return ;}

106 106 Esercizi proposti Dare il DF per il sottoalgoritmo stampa_Na Trovare un algoritmo (e fornire il DF) per i seguenti problemi : –trovare la somma dei primi K numeri (K letto dall’esterno) –trovare la media di una sequenza di numeri positivi (la sequenza viene letta dall’esterno e si interrompe al primo numero negativo letto) –leggere una data (un record che indica giorno, mese ed anno) e stampare il numero di giorni passati dall’inizio dell’anno


Scaricare ppt "1 Sistemi Operativi … e altro. Susanna Pelagatti Dipartimento di Informatica, Via Buonarroti, 2 stanza 346 DE Tel. 050.2212.772."

Presentazioni simili


Annunci Google