Reti e problematiche di Rete I sistemi operativi Enrico Cavalli Anno Accademico 20082008-2009 Introduzione ai sistemi operativi 1 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Il sistema operativo • Il sistema operativo è un software che sovrintende al funzionamento del calcolatore eseguendo compiti differenti – visione dell’utente di un PC – visione dell’utente di un grande sistema – visione del programmatore • Il sistema operativo può essere esaminato da diversi punti di vista e questo ne rende a volte complicata la descrizione Il sistema operativo: • Gestisce l’interazione utente computer • Funge da interfaccia tra applicazioni e le risorse del sistema • Gestisce la condivisione delle risorse; • Ottimizza l’uso delle risorse • Fornisce servizi per lo sviluppo del software e l’amministrazione del sistema. 3 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Il sistema operativo •Esempi: Linux/Unix, Windows XP, Windows Vista o Mac OS X •Interazione utente-computer o applicazione computer sono aspetti differenti della medesima esigenza: nascondere la complessità dell’hardware •Gestione, condivisione, ottimizzazione dell’uso delle risorse CPU Memoria Disco I/O I/O •I moderni sistemi sono multiprogrammati: Multiutenza Multitasking Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 4 2 Il sistema operativo •Fornisce servizi per l’amministrazione del sistema Esempio in ambiente Windows 5 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Architettura H/S dei sistemi Architettura a strati del sistema e differente visione da parte dei diversi attori che compaiono in un sistema per l’elaborazione dei dati CALL EXEC( ) API - Application Software Applicativo Programmer Interface Word Processor Fogli elettronici Sistemi contabili Grafica Videogiochi Web Browser Programmi per CAD ... Software di Sistema ShellComandi Interpreti Compilatori Loader Debugger Editor DBMS ... Sistema Operativo Programmatori di sistema Programmatori Hardware Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo di applicazioni 6 3 Shell dei comandi • L’utente interagisce tramite la shell dei comandi: - Shell grafiche, shell a caratteri con linee di comandi Sistema Operativo Shell dei Comandi C:\>copy ec.bat ec_copia.bat 1 file copiati. C:\>del eccopia.bat Impossibile trovare C:\eccopia.bat C:\>del ec_copia.bat C:\>date Data corrente: 02/08/2007 Immettere nuova data: (gg/mm/aa) C:\>time Ora corrente: 15.07.33,39 Immettere nuova ora: 15.05 C:\> C:\> prompt del sistema 7 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Shell dei comandi do Visualizza il Prompt di sistema Leggi la stringa con comando e parametri Analizza comando Sì Messaggio di errore Errore? print(Prompt); read(Stringa); Analizza(Stringa,Cmd,Param,Errore); if (Errore > 0) Messaggio(Errore); else Esegui(Cmd,Param); endif; forever; No Esegui il comando Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo La logica della shell 8 4 Sistema Operativo Il sistema operativo è un programma che è sempre in esecuzione durante tutte le attività del calcolatore ed è eseguito in modalità riservata. Sempre in esecuzione: il codice del sistema operativo è sempre presente nella memoria centrale pronto per l’esecuzione. Nucleo (o kernel) del sistema operativo. Modalità riservata o modo supervisore o modalità kernel o modo di sistema. Nella modalità riservata il processore può eseguire tutte le istruzioni del set di istruzioni macchina. In modalità utente il processore può eseguire un insieme ristretto di istruzioni. Sono escluse, per ragioni di sicurezza, alcune istruzioni la cui esecuzione è permessa solo al sistema operativo. Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 9 Computer anni 40 - 50 Programma in esecuzione • • • Assenza di sistemi operativi Uso del linguaggio macchina ( poi assembler ) Uso “open shop” del sistema Memoria Il programmatore deve: ● Caricare in memoria il contenuto di un pacco di schede con l’assemblatore ● Tradurre il programma assembler e produrre un pacco di schede con la traduzione in codice macchina del programma letto ● Caricare ed eseguire il programma tradotto, dopo avere inserito nel lettore le schede con i dati da elaborare. Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 10 5 Computer anni 40 - 50 • • Primi rudimentali sistemi operativi per ridurre il tempo di set up del del programma - sistemi batch o monitor - monoprogrammazione Linguaggi di programmazione FORTRAN (Formula Transformation) nel 1958 JCL Job Control Language Interprete JCL Routine di servizio Programmi utente e di sistema Memoria $JOB NomeJob, NomeUtente, Parametri $FORTRAN DIMENSION X(100) ... ... 999 STOP END SUBROUTINE SUB1(PAR1, PAR2) ... END SUBROUTINE SUB2 ... END $LOAD $RUN 150 75 1238 12.5 13.75 $END Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 11 Anni 60: multiprogrammazione Sistema Operativo • • Sistemi batch multi programmati Importanza del grado di multiprogrammazione P1 P2 Memoria Esigenze della multiprogrammazione: - Implementare politiche di protezione della memoria per evitare interferenze dannose tra i programmi in esecuzione; - Controllare che un programma in esecuzione non monopolizzi il sistema; - Limitare l’intervento della CPU nelle operazioni di lettura e scrittura dei dati grazie al DMA (Direct Memory Access); - Gestione delle interruzioni; - Implementare tecniche di spooling nelle operazioni di input/output. Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 12 6 Anni 60: multiprogrammazione Sistema Operativo 25512 Protezione della memoria: uso di Registri Limite P1 38748 P2 Memoria Presenza di timer e capacità di gestire le interruzioni dei programmi, cioè di tenere conto del loro stato per poter riprendere l’esecuzione di un programma interrotto DMA (Direct Memory Access): è un dispositivo in grado di operare il trasferimento dei dati tra memoria e unità periferica senza coinvolgere il processore. L’azione del DMA è iniziata dal processore che lo informa su origine, destinazione e quantità di dati da trasferire. Il processore si mette a fare altro mentre il DMA esegue in parallelo il trasferimento dei dati. Dopo aver trasferito i dati il DMA invia un segnale al processore per indicare il completamento dell’operazione di I/O. 13 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Spooling delle periferiche • Lo spooling, che prende il nome dall’acronimo SPOOL (Simultaneous Peripheral Operation On Line), risolve il problema delle operazioni simultanee sulle periferiche 1 2 2 La scrittura sulle periferiche è gestita dal sistema operativo che provvede a serializzare le operazioni di output dei programmi impedendo interferenze dannose 1. I programmi scrivono i dati in appositi file su disco, inviando l’output non più alla periferica fisica ma a periferiche virtuali assegnate e gestite dal sistema operativo 2. Quando l’output è completato il sistema operativo lo invia alla periferica opportuna Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 14 7 I vantaggi della multiprogrammazione Esecuzione parallela di P1 e P2: in ogni istante c’è un solo programma che occupa il processore ma in breve tempo sia P1 che P2 sono eseguiti dal processore • I due programmi sono eseguiti in 7 ms con la CPU occupata per 4 ms ( 57% del tempo totale) mentre con l’esecuzione sequenziale la CPU è attiva per 4 ms ( 36% del tempo totale ) Se il primo dei programmi a partire è P2 il tempo di completamento è di 6.5 ms con la CPU impegnata per 4 ms (62% del tempo totale) Introducendo P3, eseguito in 2 ms (0,5 I/O, 1 CPU, 0.5 I/O), si osserva che i tre programmi sono completati in 7 ms con la CPU impegnata per 5 ms (71% del tempo totale) • • P1: 0,5ms CPU, 3ms I/O, 0,5ms CPU, 2ms I/O P2: 1ms I/O, 3ms CPU, 1ms I/O P3 P1 t 0 L’esempio evidenzia l’Importanza del grado di multiprogrammazione, dell’ordine di esecuzione dei programmi e delle loro caratteristiche specifiche per l’efficienza complessiva del sistema. 1 2 3 4 5 6 7 P2 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 15 Sistemi a priorità e timetime-sharing • In base al comportamento i programmi si classificano in programmi: – CPU bound: che impegnano molto la CPU e fanno poco I/O – I/O bound: che occupano poco la CPU ed eseguono molto I/O • I sistemi batch multiprogrammati favoriscono i processi CPU bound che, una volta in possesso della CPU, la tengono fin che vogliono. Particolarmente sfavoriti sono i processi interattivi a terminale dove si desiderano tempi di risposti brevi • Due approcci differenti alla multiprogrammazione: – Multiprogrammazione guidata dalle priorità – Sistemi time sharing: suddivisione del tempo in time slice (quantum) • Priorità e time sharing sono accomunati dal fatto che un programma in esecuzione può essere interrotto per cedere la CPU a un altro pronto per l’esecuzione Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 16 8 Sistemi a priorità e time sharing • Priorità P4 P2 P3 P1 CPU Multiprogrammazione con priorità: i programmi sono inviati alla CPU in ordine di priorità. P1 ha priorità maggiore di P2. P2 ha priorità superiore a P3. P3 ha priorità superiore a P4. • Time Sharing P5 P4 P6 CPU P3 Nel time sharing i programmi sono eseguiti a turno circolarmente per un quantum di tempo P1 P2 17 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Sistemi recenti • • • Più recentemente con l’avvento dei personal computer si sono sviluppati sistemi operativi dove oltre ai precedenti obiettivi diventa fondamentale la semplicità d’uso del sistema: si affermano pertanto le interfacce grafiche e le shell di comandi grafiche Nei sistemi operativi moderni è richiesta anche la capacità di sovrintendere il funzionamento di sistemi con più processori dove il parallelismo nell’esecuzione dei programmi è reale e non solo simulato per effetto della multiprogrammazione Un’architettura a molti processori che si ormai affermata è la cosi detta architettura a multi processore simmetrico – SMP (Simmetric Multi Processor) CPU CPU CPU CPU Memoria Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 18 9 Funzioni e struttura del sistema operativo • Il sistema operativo gestisce e ottimizza l’uso delle risorse: Processore: il s.o. assegna il processore ai programmi in attesa di esecuzione, operando opportune scelte Memoria centrale: un programma in esecuzione risiede in memoria, il s.o. deve essere in grado di allocare porzioni di memoria ai programmi Dispositivi di I/O: i programmi in esecuzione richiedono servizi per il trasferimento dei dati al s.o. che opera i trasferimenti richiesti cercando di recuperare gli eventuali errori Informazioni: i calcolatori si usano per gestire informazioni: sono archiviate nel sistema per essere recuperate ed elaborate. Le informazioni sono manipolate come file • • Tenere conto dello stato delle risorse Avere una politica per operare scelte nell’allocazione delle risorse. 19 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Modello a strati del sistema operativo Shell dei comandi Gestione delle informazioni Gestione delle periferiche Gestione della memoria Ogni livello assolve a compiti specifici utilizzando i servizi offerti dallo strato inferiore e offrendo servizi al livello superiore Processi e processore Hardware Ogni livello è visto come una macchina virtuale in grado di fornire servizi Ogni livello opera sulla macchina virtuale del livello inferiore e costruisce una macchina virtuale più potente per il livello superiore Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 20 10 Architettura microkernel Gestione della memoria Microkernel Gestione Hardware dell’I/O Gestione delle Informazioni Processi e processore Solo il microkernel è eseguito in modalità riservata Shell dei comandi Nel microkernel il nucleo esegue un minimo di funzioni, quali la gestione del processore, delle interruzioni e la comunicazione tra processi. Tutte le altre operazioni sono eseguite come applicazioni in modalità utente Lo scopo è realizzare sistemi operativi semplici e flessibili: manutenzione e evoluzione sono semplici come l’aggiornamento di un’applicazione. Nei s.o. a microkernel le diverse componenti del sistema operativo comunicano tra di loro scambiandosi messaggi: ideale per i sistemi distribuiti Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 21 Architettura del computer 11 Architettura del computer Unità Centrale Rete di comunicazione CPU Controllore dispositivo Controllore dispositivo Controllore memoria Controllore del disco Controllore dispositivo Memoria centrale Disco I moduli sono collegati tramite il bus di sistema Controllore dispositivo Unità centrale: CPU e Memoria Dispositivi periferici, classificabili in dispositivi: per l’interazione con l’utente usabili solo dalla macchina per - la memorizzazione delle informazioni - il trasferimento dei dati 23 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Memoria centrale - RAM Indirizzi Dimensione della memoria 0 1 2 3 4 .. .. .. 104 105 106 .. .. N ... LOAD R1,104 ADD Istruzioni R1,105 ... ... ... 2 3 Dati ... Ampiezza della parola di memoria - Un array di parole di memoria - Indicata come Random Access Memory - Volatile, Veloce, Costosa Capacità: Pochi GB .. Pochi TB 1 MB = 220 byte ≈ 106 byte 1 GB = 230 byte ≈ 109 byte 1 TB = 240 byte ≈ 1012 byte Parole di memoria: 32 - 64 - 128 bit Tempo di accesso alla RAM: Diversi nsec: 20-150 nsec 1 ns = 10-9 sec 1 µs = 10-6 sec 1 ms = 10-3 sec Tempo di accesso al disco: 10 - 100 msec - Contiene sia dati che istruzioni, sotto forma di bit Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 24 12 Il processore CPU Unità di Controllo Memoria Moduli di I/O PC Controllore Controllore dispositivo Controllore dispositivo dispositivo RI I/O AR MAR I/O BR MBR R1 R2 RN Unità Logico Aritmetica Registri di sistema: non modificabili dai programmi utente Registri utente: 1 - 128 Tempo di esecuzione istruzioni: pochi ns Tempo di trasferimento dai registri alla ALU: pochi ns 25 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Ciclo di esecuzione delle istruzioni PC = Start Preleva istruzione PC = PC+1 Esegui istruzione Prelevamento Esecuzione /* -------------------------------------- */ /* Ciclo di esecuzione delle Istruzioni */ /* -------------------------------------- */ PC = IndirizzoPrimaIstruzione; do RI = Memoria[PC]; Ciclo delle Istruzioni PC = PC + 1; HALT arresta il processore EseguiIstruzione(RI); while (RI <> HALT); Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 26 13 Stack Pointer PUSH POP Registri generali: R1, R2, .. RN e anche SP, Stack Pointer Registri di sistema: non modificabili dall’utente: PC, IR, MBR, MAR, I/O AR, I/O BR, PSW SP PSW: Program Status Word Nella PSW: i codici condizione PUSH Operando: SP++; Memoria[SP] = Memoria[Operando]; POP Operando: Memoria[Operando] = Memoria[SP]; SP--; 27 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Le istruzioni del linguaggio macchina Op Code Registro Indirizzo Operando 8 bit 3 bit 21 bit Istruzione simbolica Descrizione LOAD Rx,Indirizzo Rx = Memoria[Indirizzo]; STORE Rx, Indirizzo Memoria[Indirizzo] = Rx; PUSH Indirizzo SP++; Memoria[SP] = Memoria[Indirizzo]; POP Indirizzo Memoria[Indirizzo] = Memoria[SP]; SP--; ADD Rx, Indirizzo Rx = Rx + Memoria[Indirizzo]; SUB Rx, Indirizzo Rx = Rx - Memoria[Indirizzo]; MUL Rx, Indirizzo Rx = Rx * Memoria[Indirizzo]; DIV Rx, Indirizzo Rx = Rx / Memoria[Indirizzo]; CMP Rx, Indirizzo Confronta Rx con Memoria[Indirizzo]; JMP Indirizzo PC = Indirizzo; JMPEQ Indirizzo if (CodiceCondizione==0) PC=Indirizzo; JMPLT Indirizzo if (CodiceCondizione<0) PC=Indirizzo; JMPGT Indirizzo if (CodiceCondizione>0) PC=Indirizzo; HALT Ferma il processore Rx Un registro utente PC Program Counter Memoria[X] Una parola di memoria SP Stack Pointer Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 28 14 Esempi(1) /* --------------------------------------------------------- */ /* S=A+B; collocato in memoria all’indirizzo 100 */ /* --------------------------------------------------------- */ .... 0100 20 -- A 0101 15 -- B 0102 -- S 0103 LOAD R0,0100 -- A nel registro R0 0104 ADD R0,0101 -- A + B in R0 0105 STORE R0,0102 -- salva il risultato in S 0106 HALT -- fine .... Istruzione A B S 103 20 15 - R0 104 105 106 29 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Esempi(2) /* --------------------------------------------------------- */ /* P=2N collocato in memoria a partire dalla locazione 2500 */ /* --------------------------------------------------------- */ .... 2500 7 -- N 2501 1 -- La costante 1 2N per N >= 0 e 2502 2 -- La costante 2 i dati in memoria 2503 -- P 2504 LOAD R0,2501 -- 1 in R0 2505 LOAD R1,2502 -- 2 in R1 2506 LOAD R2,2501 -- 1 in R2 dove si forma P 2507 LOAD R3,2500 -- N in R3 2508 JMPEQ 2512 -- Se N=0 fine 2509 MUL R2,R1 -- P = P*2 2510 SUB R3,R0 -- N = N-1 2511 JMPGT 2509 -- Iterazione per N>0 2512 STORE R2,2503 -- Salva il risultato in P .... Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 30 15 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. La memoria Cache Con la memoria cache si costruiscono sistemi di memoria a più livelli abbinando memorie piccole veloci costose a memorie di grande dimensione (lente ed economiche) in modo che il sistema abbia capacità pari a quella della più grande e velocità (quasi) uguale alla più veloce delle due 1 2 Cache CPU tC • • tM Memoria centrale Cache hit: p > 0.95 Il processore cerca la parola nella memoria cache 1: se c’è la usa, (tc). Se la parola cercata non è in cache il processore la preleva dalla memoria centrale (tM), la ricopia nella cache(tc) e la usa. Inoltre il trasferimento 2, dalla memoria centrale alla cache avviene per blocchi Tempo medio di accesso: Tm = tc + (1 - p) •tM , tc cache, tM memoria, p probabilità di successo (cache hit) nel trovare la parola in cache • 31 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Principio di località • Si osservano sperimentalmente cache hit superiori al 90% che sono giustificati teoricamente dai principi di località: – Principio di località temporale: se un programma accede a una parola di memoria è probabile che in un breve intervallo di tempo acceda di nuovo alla stessa cella di memoria (si pensi ai loop) – Principio di località spaziale: un programma che accede a una parola di memoria accederà probabilmente, entro breve tempo, a celle di memoria vicine. E’ questa la ragione per cui i trasferimenti dalla memoria centrale alla cache avvengono a blocchi • Il principio di località vale per istruzioni e dati, ma istruzioni e dati sono in zone distanti della memoria – Cache dati – Cache istruzioni Tm = tc + (1 - p) •tM • Cache a più livelli per aumentare p Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 32 16 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Gerarchia di memorie Tempo di accesso 1 ns Livelli della gerarchia Registri del processore Capacità < 1 KB Memorie cache 1 – 2 MB 20 – 200 ns Memoria centrale 1 – 4 GB 20 – 30 ms Dischi magnetici 50 – 500 GB 2 – 5 ns molti secondi Nastri magnetici - Dischi ottici Frequenza di accesso 100 GB Valori per personal computer 2008 TDisco/TRAM = 20ms/200ns = 2••107ns/200ns = 105 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 33 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Il linguaggio usato 17 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Costanti e variabili const PI = 3.1415; const LIMITE = 10; const PROMPT = “C:\>”; int M, N; int Base(=2); double Risultato; string Nome, Cognome; char InizialeNome; boolean Finito; /* /* /* /* La costante PROMPT è una stringa di caratteri La variabile intera Base è inizializzata a 2 InizialeNome è una variabile di tipo carattere typedef enum {Bloccato,Sospeso,Pronto,InEsecuzione} statoProcesso; typedef enum {Lun, Mar, Mer, Gio, Ven, Sab, Dom} giorno; typedef enum {0, 1} bit; ------------------------------------------------------------ */ La enumerazione dei valori implica un ordinamento: */ Lun < Mar < Mer < Gio < Ven < Sab < Dom */ ------------------------------------------------------------ */ statoProcesso Sp1, Sp2,Sp3; giorno GiornoSettimana; La variabile Flag potrà assumere i soli valori 0 e 1 bit Flag; 35 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Array e strutture typedef char string[512]; typedef char riga[120]; definizione del tipo string PrimaRiga e UltimaRiga: di tipo riga riga PrimaRiga, UltimaRiga; riga Pagina[55]; int Buffer[200]; PrimaRiga[1] Buffer[5] Pagina[20] Pagina[55] Pagina[19][0] Pagina[54] Pagina[54][119] Pagina: array di 55 variabili di tipo riga Buffer: array di 200 interi Il secondo carattere di PrimaRiga Il sesto intero di Buffer La riga 20 di Pagina Errore: l’ultimo elemento è Pagina[54] Il primo carattere della riga 20 di Pagina La 55-esima riga Pagina Ultimo carattere, ultima riga di Pagina Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 36 18 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Array e strutture typedef struct { string Marca; string Modello; int Prezzo; int Potenza; float Consumo; } automobile; automobile Fiat500, Serie3; Fiat500.Potenza La componente Potenza di Fiat500 Fiat500.Prezzo La componente Prezzo di Fiat500 Serie3.Consumo La componente Consumo di Serie3 Serie3.Marca = “BMW”; Marca di Serie3: il valore “BMV” 37 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Istruzione di assegnamento /*--------------------------------------------------------------* int M, N, Bit *---------------------------------------------------------------*/ M = M + 1; Incrementa m di 1 Bit = N % 2; Resto della divisione: (7%3 = 1) N++; Incrementa N di 1 /*--------------------------------------------------------------* boolean Errore, Uguale, Diverso * double A,B,C,Delta,X *---------------------------------------------------------------*/ Errore = N<2 OR N>10; Uguale = M == N; Diverso = M <> N; Delta = B*B – 4*A*C; X1 := (-B + sqrt(Delta))/(2*A); sqrt(Delta): radice di Delta /*---------------------------------------------------------------* automobile Fiat500 *---------------------------------------------------------------*/ Fiat500.Prezzo = 10200; Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 38 19 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Input / Output /*--------------------------------------------------------------* int M, Anno; *---------------------------------------------------------------*/ read ( M ); Anno = M++; print ( “Valore di M = “, M ); print ( “Valore di Anno = “, Anno ); Se il file di input contiene il valore 1492, sul file di output viene scritto: Valore di M = 1492 Valore di Anno = 1493 39 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Strutture di controllo(1) /*--------------------------------------------------------------* int Dato1, Dato2, Buffer; * Istruzioni che scambiano i contenuti di Dato1 e Dato2 *---------------------------------------------------------------*/ begin Buffer = Dato1; Dato1 = Dato2; Dato2 = Buffer; end; /* -------------------------------------------------------------* Due possibili modi per calcolare il valore assoluto di Dato * ------------------------------------------------------------- */ double Dato, Valass; ... ... if ( Dato >= 0.0 ) Valass = Dato; Valass = Dato; if ( Dato < 0.0 ) else Valass = -Dato; Valass = -Dato; endif; endif; Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 40 20 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Strutture di controllo(2) /*--------------------------------------------------------------* Classificazione di un carattere secondo differenti tipi *---------------------------------------------------------------*/ char Car; typedef enum {maiuscolo, minuscolo, numerico, punto, altroTipo} tipo; tipo TipoCarattere; ... read ( Car ); if ( Car>=‘a’ and Car<=‘z’ ) TipoCarattere = minuscolo; elseif ( Car>=‘A’ and Car<=‘Z’ ) TipoCarattere = maiuscolo; elseif ( Car>=‘0’ and Car <= ‘9’ ) TipoCarattere = numerico; elseif ( Car == ‘.’ ) TipoCarattere = punto; else TipoCarattere = altroTipo; endif; 41 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Strutture di controllo(3) /*--------------------------------------------------------------* Lettura e somma di una serie di dati acquisiti da tastiera. * La presenza di un Dato <= 0 informa che tutti i dati della * serie sono stati letti *---------------------------------------------------------------*/ double Dato, Somma; Somma = 0.0; While itera per vero read(Dato); Controllo: all’inizio del blocco while ( Dato > 0.0 ) Somma = Somma + Dato; Iterazioni: zero o più iterazioni read (Dato); endwhile; /*---------------------------------------------------------------*/ boolean Bloccato; . . . while ( Bloccato ) endwhile; prosegui esecuzione Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Una while che non fa nulla. Quando Bloccato vale true il programma esegue continuamente il test di controllo all’inizio del blocco while 42 21 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Strutture di controllo(4) /* * * * ------------------------------------------------------------Lettura controllata di una variabile intera di nome Anno Un valore legale di Anno deve essere compreso tra 2000 e 2020 ------------------------------------------------------------- */ int Anno; string Prompt; boolean Errore; Prompt = “Un intero compreso tra 2000 e 2020 : “; do print (Prompt); read (Anno); Errore = Anno<2000 or Anno>2020; if (Errore) print(“Errore nei dati\n”); endif; while (Errore); print( “xyz\n” ); File di output: scrive: “xyz” e si posiziona sulla riga successiva per la prossima scrittura. 43 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Strutture di controllo(5) /* ------------------------------------------------------------* Il ciclo infinito è reso con l’istruzione: do .. forever; * ------------------------------------------------------------- */ while(true) Istruzione; endwhile; ; do Istruzione; forever; do Istruzione; while(true); /* ------------------------------------------------------------* Conteggio degli spazi contenuti in una stringa * ------------------------------------------------------------- */ string Stringa(=”...”); int Spazi, Lung, Pos; for( Pos=0;Pos<Lung;Pos++; ) char Carattere, Spazio(= ’ ’); S; endfor; Lung = len(Stringa); Spazi = 0; for (Pos=0; Pos<Lung; Pos++; ) Carattere = Stringa[Pos]; if ( Carattere == Spazio ) Spazi++; endif; endfor; Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo viene eseguita nel seguente modo: Pos = 0; while ( Pos<Lung ) S; Pos++; endwhile; 44 22 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Sottoprogrammi(1) tipo_restituito nome_function ( parametri ) begin dichiarazioni_tipi_variabili_costanti_function; istruzioni_che_compongono_la_function; end; /* ------------------------------------------------------------* NumeroSpazi restituisce il numero di spazi di una stringa * ------------------------------------------------------------- */ int NumeroSpazi( string Riga ) begin int Lunghezza, Pos, ContaSpazi; char Spazio(= ’ ’); return Espressione; Lunghezza = len(Riga); ContaSpazi = 0; Termina l’esecuzione della for( Pos=0; Pos <Lunghezza; Pos++ ) funzione restituendo al if (Riga[Pos] == Spazio) chiamante il valore contenuto in Espressione ContaSpazi++; endif; endfor; return ContaSpazi; end; 45 Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Sottoprogrammi(2) /* ------------------------------------------------------------* Uso della funzione NumeroSpazi * ------------------------------------------------------------- */ string stringa; Stringa = “Questa è una stringa di caratteri”; print ( “Nella frase “, Stringa ); print ( “ ci sono: “, NumeroSpazi(Stringa), “spazi.” ); /* ------------------------------------------------------------* Scambia sottoprogramma di tipo procedura * ------------------------------------------------------------- */ void Scambia(int &Par1, int &Par2) begin int Temp; Un sottoprogramma di tipo procedura non Temp = Par1; restituisce nulla: void Scambia(...) Par1 = Par2; In una procedura non c’è istruzione return Par2 = Temp; end; Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 46 23 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Struttura di un programma(1) /* ------------------------------------------------------------* Struttura generale di un programma * ------------------------------------------------------------- */ // dichiarazioni globali void main() begin // ----------------------------------------------// dichiarazioni di tipi, costanti, variabili // dichiarazione dei sottoprogrammi utilizzati // ----------------------------------------------istruzioni_che_compongono_il_programma; end; // Codice dei sottoprogrammi dichiarati Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 47 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Struttura di un programma(2) /* ------------------------------------------------------------* Struttura generale di un programma * ------------------------------------------------------------- */ void main() begin int Inizio, Fine; void Scambia(); //------------------------------------------------------// main può accedere alle sole variabili: // Inizio, Fine e alla procedura Scambia //------------------------------------------------------Inizio = 20; Fine = 5; if ( Inizio > Fine ) Scambia(); endif; ... end; void Scambia() begin int Temp; //-------------------------------------------------------// Scambia può accedere a: Inizio, Fine e Temp //-------------------------------------------------------Temp = Inizio; Inizio = Fine ; Fine = Temp; end; Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 48 24 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavv iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. Struttura di un programma(3) /* -----------------------------------------------------* Struttura di un programma * con moduli paralleli * ------------------------------------------------------ */ begin Blocco1; parbegin Procedura1( parametri ); Procedura2( parametri ); Procedura3( parametri ); parend; Blocco2; Blocco3; Blocco1 Proc1( ) Proc2( ) Proc3( ) Blocco2 Blocco3 end; Reti e problematiche di rete - Enrico Cavalli - Università di Bergamo 49 25