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