Questo testo è pubblicato sotto licenza Creative

Transcript

Questo testo è pubblicato sotto licenza Creative
Tecno1
Tecnologie e Progettazione dei Sistemi Informatici e di Telecomunicazione
dai numeri binari ai Sistemi Operativi
Paolo Macchi
ISIS Cipriano Facchinetti Castellanza – 2013-16
1 - Tecno1 rel. 17.03.17
Prometeo, (in greco antico Promethéus, «colui che riflette prima») era un Titano, un gigante fortissimo, ed era amico del genere umano. Era un cugino di Zeus e
non andava molto d'accordo con lui, perché a quel tempo il re dell'Olimpo voleva cancellare gli uomini dalla Terra.
I Titani si ribellarono a Zeus, ma Prometeo (che aveva previsto la sconfitta dei Titani) e suo fratello Epimeteo («colui che riflette dopo») si schierarono dalla sua
parte e questo permise a Prometeo di diventare amico degli altri dei, come Atena che gli insegnò molte bellissime arti come l'architettura, l'astronomia, la
matematica, la medicina, la metallurgia e la navigazione che poi Prometeo insegnò agli umani.
Prometeo e suo fratello ricevettero dagli dei un numero limitato di "buone qualità" da distribuire saggiamente fra tutti gli esseri viventi. Epimeteo (che non usava
molto la testa!) cominciò a distribuire le qualità agli animali ma si dimenticò degli uomini, così Prometeo, per rimediare, decise di rubare dalla casa di Atena uno
scrigno in cui erano riposte l'intelligenza e la memoria, e le donò alla specie umana.
Zeus non fu contento di questo gesto: così gli umani sarebbero stati più difficili da sterminare!
Come ulteriore punizione Zeus tolse il fuoco agli uomini e lo nascose.
Prometeo si recò allora da Atena affinché lo facesse entrare di notte nell'Olimpo e appena giunto, accese una torcia dal carro di Elio (che teneva il sole) e si
dileguò senza che nessuno lo vedesse.
Il padre degli dei fece incatenare Prometeo, nudo, con lacci d'acciaio nella zona più alta e più esposta alle intemperie del Caucaso e gli venne conficcata una
colonna nel corpo. Inviò poi un'aquila perché gli squarciasse il petto e gli dilaniasse il fegato, che gli ricresceva durante la notte, giurando di non staccare mai
Prometeo dalla roccia.
Dopo tremila anni, Eracle (il mitico Ercole!) passò dalla regione del Caucaso, trafisse con una freccia l'aquila che lo tormentava e liberò Prometeo, spezzando le
catene.
[tratto da http://www.focusjunior.it/W_la_scuola/Navigo_e_imparo/2010/novembre/miti-greci-prometeo-il-gigante-che-amava-l-umanita.aspx]
La parola tecnologia (formata da tecno, ovvero arte e da logia,ossia discorso) e indica “l’intero settore di ricerca, nel quale sono coinvolte varie discipline tecniche
e scientifiche, che studia l'applicazione e l'uso di tutto ciò che può essere funzionale alla soluzione di problemi pratici, all'ottimizzazione delle procedure, alla
scelta di strategie operative per raggiungere un determinato obiettivo”.
In particolare, le nuove tecnologie sono “alla base della società interconnessa e di quella che molti chiamano quarta rivoluzione industriale. Tecnologie che
abbracciano l’Internet of Things e il machine to machine, le reti di comunicazione di nuova generazione ma anche i dispositivi indossabili e la robotica”.
In particolare “ l’Internet of Things, conferma la sua veloce espansione in nuove aree di sviluppo quali la telemedicina e la home automation. Aree che si
affiancano a settori in cui i sistemi di comunicazione M2M e IoT sono già radicati, a cominciare dall’automotive con gli strumenti di localizzazione satellitare e
antifurto e tutti i servizi telematici di bordo. Nell’immediato futuro si apriranno nuovi scenari come l’Internet delle cose applicato al punto vendita. Città,
fabbriche e soprattutto edifici dovranno cambiare in nome e in funzione dell’interoperabilità e dell’interconnessione.”
2 - Tecno1 rel. 17.03.17
Indice Generale
Il digitale: ma di cosa stiamo parlando?....................................................................................................................................................................................................5
Il Sistema di Elaborazione..........................................................................................................................................................................................................................8
bit e byte....................................................................................................................................................................................................................................................8
Hardware.................................................................................................................................................................................................................................................10
Software...................................................................................................................................................................................................................................................10
Rappresentazione dei numeri naturali....................................................................................................................................................................................................11
Numerazione binaria...............................................................................................................................................................................................................................12
Conversione binario-decimale-binario....................................................................................................................................................................................................12
Numerazione esadecimale......................................................................................................................................................................................................................13
Conversione decimale-esadecimale-decimale........................................................................................................................................................................................13
Conversione binario-esadecimale-binario...............................................................................................................................................................................................14
Rappresentazione di numeri interi..........................................................................................................................................................................................................14
Somma binaria.........................................................................................................................................................................................................................................14
Somma in esadecimale............................................................................................................................................................................................................................15
Modulo e segno.......................................................................................................................................................................................................................................15
Complemento a 2....................................................................................................................................................................................................................................16
Sottrazione binaria in complemento a 2.................................................................................................................................................................................................17
Rappresentazione dei numeri reali.........................................................................................................................................................................................................18
Rappresentazione in virgola fissa............................................................................................................................................................................................................18
Conversione Decimale->Binario di numeri frazionari in virgola fissa......................................................................................................................................................18
Rappresentazione in virgola mobile (floating point- IEEE754)................................................................................................................................................................19
Conversione decimale –> floating point..................................................................................................................................................................................................20
Operazioni con la rappresentazione floating point.................................................................................................................................................................................20
Proprietà dell’aritmetica in virgola mobile..............................................................................................................................................................................................21
BCD..........................................................................................................................................................................................................................................................22
Comunicazione e Codici..........................................................................................................................................................................................................................23
Schema fondamentale della comunicazione...........................................................................................................................................................................................23
L’interazione uomo-macchina.................................................................................................................................................................................................................25
Informazione............................................................................................................................................................................................................................................26
Codici per la rilevazione e la correzione degli errori...............................................................................................................................................................................27
Codifica dei caratteri alfanumerici...........................................................................................................................................................................................................28
Lo standard ASCII.....................................................................................................................................................................................................................................29
Unicode....................................................................................................................................................................................................................................................30
Codice QR................................................................................................................................................................................................................................................31
codifica di immagini e suoni....................................................................................................................................................................................................................32
Immagini..................................................................................................................................................................................................................................................32
Grafica Digitale........................................................................................................................................................................................................................................33
Grafica Raster (bitmap)............................................................................................................................................................................................................................33
Grafica vettoriale.....................................................................................................................................................................................................................................34
Suoni........................................................................................................................................................................................................................................................36
Compressione dati...................................................................................................................................................................................................................................37
Ottimizzazione dei messaggi...................................................................................................................................................................................................................37
Tecniche non distruttive (senza perdita di informazione).......................................................................................................................................................................38
Tecniche distruttive (con perdita di informazione).................................................................................................................................................................................40
Introduzione ai Sistemi Operativi............................................................................................................................................................................................................42
Cos’è un Sistema Operativo.....................................................................................................................................................................................................................42
Evoluzione................................................................................................................................................................................................................................................44
Prima generazione (1945-1955)..............................................................................................................................................................................................................44
Seconda generazione (1955 – 1965).......................................................................................................................................................................................................45
Terza generazione (1965 – 1980).............................................................................................................................................................................................................46
Quarta generazione (1980 – 1990 –> ai giorni nostri).............................................................................................................................................................................48
Sensori e MEMS.......................................................................................................................................................................................................................................50
Sensori.....................................................................................................................................................................................................................................................50
MEMS e IoT.............................................................................................................................................................................................................................................50
Struttura di un Sistema operativo...........................................................................................................................................................................................................54
Il modello onion skin...............................................................................................................................................................................................................................55
I PROCESSI................................................................................................................................................................................................................................................57
Definizione di processo............................................................................................................................................................................................................................57
Descrittore di processo (PCB)..................................................................................................................................................................................................................58
Interazioni tra processi............................................................................................................................................................................................................................59
Relazioni di precedenza...........................................................................................................................................................................................................................59
Sistemi multiprogrammati.......................................................................................................................................................................................................................60
Time sharing............................................................................................................................................................................................................................................62
Stati di un processo.................................................................................................................................................................................................................................62
Il nucleo...................................................................................................................................................................................................................................................64
Virtualizzazione CPU................................................................................................................................................................................................................................64
Scheduler – Algoritmi di scheduling........................................................................................................................................................................................................65
First Come First Served (FCFS).................................................................................................................................................................................................................65
Round Robin (RR).....................................................................................................................................................................................................................................66
Shortest job first......................................................................................................................................................................................................................................67
Meccanismo di priorità............................................................................................................................................................................................................................67
Thread......................................................................................................................................................................................................................................................68
La priorità in Windows.............................................................................................................................................................................................................................69
La priorità in Linux...................................................................................................................................................................................................................................70
Processi sequenziali e concorrenti..........................................................................................................................................................................................................71
3 - Tecno1 rel. 17.03.17
Corse critiche, Interferenza e Cooperazione...........................................................................................................................................................................................71
Sezioni critiche – Mutua esclusione........................................................................................................................................................................................................72
Soluzioni...................................................................................................................................................................................................................................................72
Semafori...................................................................................................................................................................................................................................................73
SEMAFORO BINARIO................................................................................................................................................................................................................................74
Mutua esclusione....................................................................................................................................................................................................................................74
Produttore / consumatore :.....................................................................................................................................................................................................................74
SEMAFORO GENERALIZZATO...................................................................................................................................................................................................................76
Produttore / consumatore con buffer multiplo.......................................................................................................................................................................................76
Problemi:.................................................................................................................................................................................................................................................77
Deadlock..................................................................................................................................................................................................................................................80
Primitive di Comunicazione tra Processi.................................................................................................................................................................................................82
Monitor....................................................................................................................................................................................................................................................83
Un monitor è …........................................................................................................................................................................................................................................83
Sincronizzazione di thread in Java...........................................................................................................................................................................................................83
I thread in Java.........................................................................................................................................................................................................................................83
Gestione della Memoria..........................................................................................................................................................................................................................86
Indirizzi di memoria fisici e logici.............................................................................................................................................................................................................86
Traduzione di indirizzi logici in fisici.........................................................................................................................................................................................................86
Memory-Management Unit (MMU)........................................................................................................................................................................................................86
Swapping.................................................................................................................................................................................................................................................87
Allocazione della memoria......................................................................................................................................................................................................................88
Allocazione contigua................................................................................................................................................................................................................................88
Allocazione non contigua........................................................................................................................................................................................................................89
segmentazione.........................................................................................................................................................................................................................................90
Memoria Virtuale....................................................................................................................................................................................................................................90
Paginazione su richiesta (Demand Paging)..............................................................................................................................................................................................91
Page Fault................................................................................................................................................................................................................................................91
File System...............................................................................................................................................................................................................................................94
Il concetto di file......................................................................................................................................................................................................................................94
File system...............................................................................................................................................................................................................................................94
Il File System Logico.................................................................................................................................................................................................................................94
File system fisico......................................................................................................................................................................................................................................96
Metodi di assegnazione dello spazio su disco.........................................................................................................................................................................................97
FAT File Allocation Table..........................................................................................................................................................................................................................97
Assegnazione indicizzata.........................................................................................................................................................................................................................98
NTFS.......................................................................................................................................................................................................................................................100
Protezione e sicurezza...........................................................................................................................................................................................................................102
Protezione..............................................................................................................................................................................................................................................102
Sicurezza................................................................................................................................................................................................................................................102
Autenticazione (controllo dell’accesso) degli utenti.............................................................................................................................................................................102
Minacce ai programmi...........................................................................................................................................................................................................................103
Tecno1 Dai numeri binari ai Sistemi Operativi
Questo testo è pubblicato sotto licenza Creative Commons - Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported - Per
le condizioni consulta: http://creativecommons.org/licenses/by-nc-sa/3.0/deed.it
Le utilizzazioni consentite dalla legge sul diritto d'autore e gli altri diritti non sono in alcun modo limitati da quanto sopra.
Il documento è scaricabile da , sezione download, per fini esclusivamente didattici e non commerciali. Il documento è scaricabile liberamente
da: http://moodle.isisfacchinetti.it/mod/data/view.php?d=21&rid=517
E’ possibile richiedere la dispensa in formato cartaceo, all'Ufficio Stampa dell'ISIS Facchinetti
Segnalazioni di errori, critiche e consigli sono molto graditi e possono essere inoltrati a [email protected], oppure lasciando un commento
al momento del download se siete registrati.
(in copertina : Theodoor Rombouts (1597-1637) – Prometheus)
Convenzioni usate nel testo:
rappresenta una curiosità, un approfondimento
NOTA rappresenta una nota
rappresenta una esercitazione o esempio
link di riferimento Rappresenta un codice o dei risultati o una segnalazione storica
4 - Tecno1 rel. 17.03.17
Il digitale: ma di cosa stiamo
parlando?
“Il digitale è strutturalmente incapace di sfumature. Deve atomizzare il mondo in frammenti piccoli…Il digitale pretende che tutto ciò che esiste sia
scomponibile in elementi 1 e 0 (perlomeno fino alla risoluzioni che riesci a percepire). Il digitale tratta il mondo come una cosa che si può replicare un
numero arbitrario di volte” [Jonah Lynch, Il profumo dei limoni. Tecnologia e rapporti umani nell’era di Facebook ]
1+1=0
“Di cosa stiamo parlando quando parliamo di digitale?
Si tratta in generale di metodi che permettono di tradurre un fenomeno analogico, fatto di infinite variazioni, in una sequenza di solo due elementi: 1 e 0, ‘ on and
off’.
Se ci si pensa è meraviglioso che un suono possa essere rappresentato molto fedelmente attraverso il procedimento digitale. Un suono è infinitamente variabile,
anche se si tratta di una dinamica estremamente semplice, quasi unidimensionale, perché è ‘solo’ la compressione e rarefazione dell’aria.
Una sola variabile, la pressione dell’aria, è in grado di trasmettere la stupenda ricchezza di una sinfonia, la inimitabile particolarità della voce della donna che
amo, o il suono estivo della cicala…
Questa ricchezza sonora posso convertirla in una stringa di bit, 1 e 0.
Si usa un approccio matematico che permette di approssimare una qualsiasi curva, la quale rappresenta la pressione dell’aria in singolo istante, con una serie di
funzioni semplici.
Se voglio mettere questa curva su un CD (o nella memoria del mio PC o trasmetterlo in Internet) devo prima convertire il segnale analogico (infinitamente
variabile) in una sequenza di bit. Per fare ciò uso la tecnica di Fourier. Se opero a qualità CD, uso 44100Hz, dunque misuro l’altezza della curva e ne registro il
valore 44100 volte al secondo.
E’ effettivamente un’ottima approssimazione ma anche a questo livello di precisione, perdo informazione: tutto ciò che succede TRA i momenti di misurazione
viene perso. La curva approssimata sarà poi interpretata dal lettore CD e tradotta in pressione dell’aria attraverso una cassa.
Il tutto si complica nel caso delle immagini. Per essere convertita in formato digitale, un’immagine deve essere tradotta in pixel, cioè in una serie di punti in cui si
rileva la quantità e il colore della luce. Sono “discreti”, dei punti separati che non hanno niente a che fare uno con l’altro. Ognuno di essi ha quindi un valore di
colore e di intensità che può essere convertito in numeri come si fa con la musica.
5 - Tecno1 rel. 17.03.17
E’ qualcosa di simile al punto e croce che faceva mia nonna – una griglia di stoffa, in cui ogni casella era riempita da una piccola croce di filo colorato, formava
una immagine.
Uno schermo fatto di pixel rende molto facile la produzione di linee rette lungo gli assi dello schermo. Basta una semplice curva e quell’immagine non è più tanto
bella”
Proviamo a vedere l’ingrandimento di qualche carattere di questa stessa pagina.
Ci si accorge subito che vengono usate delle tecniche per ingannare l’occhio che percepisce delle curve là dove c’è una scacchiera di pixel.
Non sempre il contorno della figura coincide con le linee della griglia. Quella che si ottiene nella codifica è un'approssimazione della figura originaria :
La rappresentazione sarà più fedele all'aumentare del numero di pixel, ossia al diminuire delle dimensioni dei quadratini della griglia in cui è suddivisa l'immagine
risoluzione dell’immagine.
_
Un calcolatore, per come è costruito, lavora solo con i valori 0 e 1. Le informazioni (numeri, testi, immagini, suoni. . . )che vogliamo rappresentare (e poter
elaborare) in un calcolatore devono perciò subire un processo di Codifica e Decodifica che permette di ottenere la loro rappresentazione
L’elemento base della rappresentazione binaria è il bit (binary digit, cifra binaria). Con un bit possiamo rappresentare un’informazione che può assumere 2 valori
Esempio Stato di una lampadina: 0 = spento, 1 = acceso (0 = falso, 1 = vero)
Una lampadine può trovarsi in soli due stati: accesa o spenta, ON o OFF. Ciò corrisponde a 2^1 (2 stati, 1 lampadina)
6 - Tecno1 rel. 17.03.17
Due lampadine hanno 4 stati (2^2):
Off
Off
On
On
Off
On
Off
On
con 3 lampadine otto stati (2^3) e in generale
Quindi:
1 bit 2 valori: 0, 1
2 bit 4 valori: 00, 01, 10, 11
3 bit 8 valori: 000, 001, 010, 011, 100, 101, 110, 111
In generale: n bit rappresentano 2^n stati ,
dove n è il numero degli elementi, in questo caso le lampadine.
In particolare, una matrice costituita da 20 righe di lampadine per 20 colonne, possiede 400 lampadine. Se ogni lampadina può essere accesa o spenta abbiamo:
2^400 stati possibili, cioè 10^120 stati, cioè 1 seguito da 120 zeri! (cfr Ross Ashby ).
Nota: Si pensi che la terra era in uno stato gassoso circa 5x10^9 anni fa, cioè 1.6x10^17 secondi, cioè 1.6x10^26ns (1nanosecondo è pari a 10^-9 secondi), ancora
molto lontani da 10^120, così come la stima del numero totale di atomi nell'universo visibile, pari a 1079 - 1085 .
Se poi consideriamo le possibili transizioni tra gli stati, cioè il numero di possibili modi in cui il sistema può passare da uno stato all’altro, il numero diventa
enorme…
Infatti , ad esempio, con due sole lampadine con quattro stati di partenza si possono avere 4 stati x 3 transizioni (senza considerare la transizione su se stessa),
cioè 12 transizioni possibili.
Con 20, lampadine e 400 stati si possono avere (2^400)! (! È il simbolo di fattoriale).
E un monitor quanti pixel ha???
Le semplici considerazioni fatte possono dare almeno una vaga idea della complessità dei sistemi, anche di quelli piu’ semplici!
Attraverso meccanismi di codifica possiamo rappresentare diversi tipi di informazione:
• Numeri naturali (insieme N)
• Numeri interi (insieme Z)
• Numeri razionali (insieme Q)
• caratteri
• immagini
• suoni
• video
Esistono diverse convenzioni (codifiche) per fornire a ciascun tipo di informazione una rappresentazione binaria come vedremo nei prossimi capitoli.
7 - Tecno1 rel. 17.03.17
Il Sistema di Elaborazione
I computer sono incredibilmente veloci, accurati e stupidi.
Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
L’insieme dei due costituisce una forza incalcolabile
- Albert Einstein fisico (1879-1955)
Un computer ti fa fare più errori e più velocemente di qualsiasi altra invenzione dell’uomo.
Con l’eccezione forse delle armi da fuoco e della tequila
- Mitch Ratcliffe (giornalista USA)
Un computer, chiamato anche, calcolatore o elaboratore digitale o sistema di elaborazione, o sistema informatico è un dispositivo fisico capace di memorizzare,
elaborare e trasmettere informazioni.
Un sistema di elaborazione può essere, approssimativamente visto come composto da un Hardware il cui funzionamento viene controllato da un Software
particolare chiamato Sistema Operativo.
L'hardware è rappresentato dai componenti fisici come il case, i dispositivi di memorizzazione, le tastiere, i monitor, i cavi, gli altoparlanti e le stampanti.
Il software è costituito da istruzioni – raccolte in programmi – che fanno svolgere al computer determinate funzioni.
Il sistema operativo ha il compito di dare istruzioni al computer su come operare. Ad esempio permette l’accesso ai file su disco e gestisce le periferiche e
l’esecuzione dei programmi.
Il sistema operativo si occupa di gestire la macchina, le sue risorse e i programmi che vi sono eseguiti, e fornisce all'utente un mezzo per inserire ed eseguire gli
altri programmi.
I programmi o applicazioni, svolgono svariate funzioni. Vanno dai giochi, all’accesso a Internet, a un foglio di calcolo a un editor di testo…
Le informazioni trattate da un sistema di elaborazione (numeri, parole suoni, immagini…) sono codificate in binario, cioè usano due soli simboli: 0 e 1 che i
dispositivi fisici del computer associano a due stati (ad esempio livelli di tensione: 0V e 5V).
bit e byte
L’informazione minima è il bit (binary digit) che assume i due stati differenti codificando una cifra binaria. I bit sono raggruppati in Byte (8 bit) multipli di esso. Il
bit è anche l’unità di misura dell’Informazione. (remixato, in parte, da : “Computer & Web” - Corriere della sera)
1bit –una goccia d’acqua
1 Byte -> un cucchiaio
1KB -> un secchio da 10 litri
1 MB -> una piccola piscina da 10000 litri
1 GB -> un lago 10 milioni di litri
multipli del bit e del Byte:
Nome
Abbreviazione
(binari) SI
Equivale a
Capacità
bit1
bit
Unità di misura dell’entropia
2ˆ0 bit =1 bit
byte
B
2ˆ3 bit = 8 bit
kilobyte
(KiB) kB
2^10 =1024 ≈
megabyte
(MiB) MB
2^20 =1048576 ≈
gigabyte
(GiB) GB
2^30 =1073741824 ≈
terabyte
(TiB) TB
2^40 ≈
10
petabyte
(PiB) PB
2^50 ≈
10
un carattere alfanumerico
103
circa 15 righe dattiloscritte
byte
byte
un libro di circa 500 pagine.
9
circa 500'000 pagine.
106
10
byte
12
byte
un milione di libri di 500 pagine ciascuno.
15
byte
180 volte la Biblioteca del Congresso2
1la parola deriva dalla contrazione dell'espressione inglese binary unit.
2Si trova a Washington D.C., negli Stati Uniti: con 28 milioni di volumi è la più grande biblioteca del mondo.
8 - Tecno1 rel. 17.03.17
Nome
Abbreviazione
(binari) SI
Equivale a
Capacità
exabyte
(EiB) EB
2^60 ≈
1018
byte
180'000 volte la Biblioteca del Congresso
zettabyte
(ZiB) ZB
2^70 ≈
1021
byte
180 milioni di volte la Biblioteca del Congresso
yottabyte
(YiB) YB
2^80 ≈
10
24
byte
180 miliardi di volte la Biblioteca del Congresso
(cfr per IEC International Standard Conversioni )
Ad esempio un file della dimensione di
1000byte corrisponde a:

8000 .......... bits

1000 .......... bytes (10^3 byte)

0.9765625 .. kilobytes (circa 1KB, cioè 8Kbit)

0.0009536743 megabytes (circa 10^-3 *10^6)

0.0000009313 gigabytes

0.0000000009 terabytes
100.000.000 Byte:
800 000 000 .......... bit
100 000 000 .......... byte (10^8byte)
97 656. 25 ....... kilobyte (circa 100 000 KB (10^5*10^3= 10^5 Kbyte ))
95.3674316406 megabyte (circa 100 MB (100*10^6 Byte))
0.0931322574 gigabyte ( 10^8 = 10^-1*10^9= .1 GB)
0.0000909494 terabyte (10^8 = 10^-4 *10^12)
0.0000000888 petabyte
Per comodità le conversioni in potenze di 2:
1.
Esercizi ():
un file musicale del tuo cantante preferito quanti byte occupa?
(Ex. “Years “ – Alesso – 4.24MB, )
2.
Dati 6 bit per la codifica, quante informazioni distinte si possono rappresentare?
26=64 informazioni distinti
3.
Dato un byte per la codifica, quante informazioni distinte si possono rappresentare?
Un byte = 8 bit, 28=256 informazioni distinti
4.
Quanti bit si devono utilizzare per rappresentare 20 informazioni distinte?
Almeno 5 bit, perché 25=32 => 20 (4 bit non sono sufficiente, perché 24=16 < 20)
5.
Un'immagine a 256 colori è formata da 400x400 pixel. Quanto spazio occupa?
Ogni pixel richiede un byte (=8 bit, perché 28=256, sufficiente per rappresentare 256 colori); l'immagine ha 400 x 400 = 160000 pixel; l'immagine occupa
160000 byte (= 1280000 bit)
6.
Problema: vuoi copiare i dati del tuo disco fisso su CD-ROM.
Nel disco fisso ci sono 5GB di dati (documenti, musica, fotografie, etc.) e tu hai in casa 3 CD-ROM da 700MB l'uno (capienza standard). Ti bastano per copiare i dati o devi andare a comprare altri CD?
Soluzione: vediamola insieme 3 CD x 700 Mbyte = 2.100 Mbyte hai in totale 2.100Mbyte a disposizione per il salvataggio. Convertendo i Mbyte in Gbyte
9 - Tecno1 rel. 17.03.17
(2*10^3*10^6 = 2*10^9 = 2Gbyte) scopri che hai a disposizione poco più di 2Gbyte mentre te ne servono 5! Risultato: non ti bastano, hai bisogno di altri
CD-ROM!
7.
Si desidera salvare su file un testo di 100 pagine, ognuna composta da 50 righe di 70 caratteri. Calcolare la dimensione del file espressa in KB e MB.
50*70=3.500 caratteri per pagina (= n. byte se ogni carattere è composto da 1 byte, cioè 8bit)
3.500*100=3.5 *10^5 = numero byte del testo pari a 350KB , pari a 0,35MB
8.
quanti diversi valori posso rappresentare con 5 bit?
Risposta: con 5 bit posso rappresentare 2^5 = 32 diversi valori.
9.
quanti diversi valori posso rappresentare con 2 byte?
2 byte = 16 bit, quindi posso rappresentare 2^16 = 65536 diversi valori.
10. quanti bit mi servono per rappresentare 1000 diversi valori?
devo trovare il minimo numero n di bit che soddisfi. 2^n > 1000, 2^10 = 1024, quindi n = 10.
11. quanti bit mi servono per rappresentare 112 diversi valori?
7 bit (2^7 = 128). 6 bit sarebbero stati pochi, mentre 8 bit sarebbero stati troppi!
Hardware
Le componenti hardware possono essere raggruppate in cinque tipologie:

i dispositivi di ingresso, per immettere i dati all'interno del computer;

i dispositivi di uscita, per visualizzare il contenuto del computer;

le unità di elaborazione, per svolgere le operazioni e coordinare tutti i componenti hardware;

le unità di memorizzazione, per l'archiviazione dei dati elaborati;

i bus, per veicolare le informazioni tra i componenti del computer.
Esistono vari tipi di computer: desktop, laptop (chiamato anche portatile, notebook), palmari (PDA - Personal Digital Assistant). Inoltre esistono grandi sistemi
informatici (mainframe e supercomputer) che sfruttano la presenza di elaboratori molto potenti che "prestano" le proprie capacità a dispositivi privi di
autonomia operativa (terminali) .
Nonostante vi siano state innumerevoli evoluzioni tecnologiche nell'hardware, alla base del funzionamento di un computer è sempre presente l'architettura della
macchina di von Neumann, risalente agli anni Quaranta del secolo scorso.
Software
Con software si identificano i programmi che devono essere installati sul calcolatore per eseguire operazioni specifiche. I programmi sono una sequenza di
operazioni elementari, dette istruzioni, che rispettano la sintassi di un dato linguaggio di programmazione. Si dividono in software di sistema (o di base) e
software applicativi.
Per riferirsi a gruppi di computer basati sullo stesso microprocessore e su caratteristiche di progetto simili, si usa l'espressione famiglia di computer.
In genere, computer di famiglie diverse non sono tra loro compatibili, cioè in grado di usare lo stesso sistema operativo e gli stessi programmi applicativi
Il software applicativo non può operare se il funzionamento del sistema non viene controllato e diretto dal software di sistema, che gestisce e sovrintende il
lavoro dei vari componenti e l'interazione tra di essi.
Il software di sistema più importante è il sistema operativo (SO), ma devono essere considerati appartenenti a questa categoria anche i compilatori per linguaggi
di programmazione, che servono per creare software applicativi.
È possibile dire che il sistema operativo funge da interfaccia tra il computer e l'utente, cioè offre all'utente tutti gli strumenti necessari per lo svolgimento delle
operazioni richieste, garantendo la gestione di tutte le risorse impiegate. L'interfaccia può essere di tipo testuale (come accade in MS-DOS) o di tipo grafico
(come accade nelle varie versioni di Windows).
Sono molte le operazioni e i controlli che vengono effettuati dal sistema operativo; tra i più importanti, vi è la gestione delle memorie e di tutti i componenti
10 - Tecno1 rel. 17.03.17
presenti nel sistema, compresa l'interazione e la comunicazione tra di essi. Ad esempio, è il sistema operativo a gestire le periferiche di input o di output, oppure
la memorizzazione nei vari supporti, nonché il controllo dei programmi aperti.
Attualmente esistono numerosi sistemi operativi, i più diffusi dei quali sono: Windows, MacOS, iOS, Android, Linux, Unix... Esiste il problema della compatibilità.
I software applicativi vengono creati e usati per svolgere determinate operazioni nei moltissimi campi nei quali può essere usato un computer : word processor o
elaboratori di testi, i programmi per l'elaborazione dei fogli elettronici, detti anche fogli di calcolo o spreadsheet, i sistemi per la gestione di basi di dati,
(Microsoft Office, Open Office,..),I programmi di grafica permettono di elaborare immagini (Corel Draw, Adobe PhotoShop, Graphics e Adobe
Illustrator,Gimp),Rappresentazione dell’ informazione numerica
Rappresentazione dei numeri naturali
Nel passato sono state adottate svariate notazioni numerali in gran parte poco razionali fino a giungere con una certa fatica alle notazioni oggi più diffuse: le
notazioni posizionali decimali.
Confrontiamo quanto accadeva nelle civiltà antiche basandoci su una spiegazione di Marco Bramanti.
La maggior parte delle civiltà (es. Greci, Romani, Indiani) numeravano in base 10, con riferimento all'atto di contare con le dita delle mani e basato
essenzialmente sul numero (V, una mano), additivo e non posizionale: il simbolo X (due mani) rappresenta sempre il numero dieci.
Ad esempio, un romano diceva “triginta quattuor” per dire “trentaquattro”, con la nostra stessa logica nostra: una parola per le decine, una per le unità.
Tuttavia la scrittura non sempre seguiva questa logica. Ad esempio per i Romani: “trentaquattro” si scriveva XXXIV: non bastava un simbolo per le decine e uno
per le unità. Il sistema romano non è un sistema con cifre, né è posizionale e risulta perciò impossibile fare le “operazioni in colonna”:
34 +
XXXIV +
47 =
XLVII =
81
???????
Occorre l’abaco, o un sistema di calcolo sulle dita!
I babilonesi usavano una numerazione in base 60, infatti ancora oggi i l’ora è divisa in 60 minuti, un minuto in 60 secondi…
Il comune sistema decimale che tutti impariamo a scuola, è, invece, di tipo posizionale: ogni cifra assume un significato diverso a seconda della posizione in cui si
trova (unità, decine, centinaia, ecc.).
Questo sistema deriva dagli Indiani che usavano un sistema di scrittura posizionale con 9 cifre, e al posto dello zero lasciavano uno spazio vuoto.
Gli Arabi appresero dagli indiani questo sistema e lo perfezionarono aggiungendovi lo zero, più comodo dello spazio vuoto.
(Vedi anche Da Wikipedia, l'enciclopedia libera )
Quindi, come rappresentare un numero naturale ? Attraverso una rappresentazione decimale posizionale.
Si utilizzano 10 cifre decimali (0, 1, ..., 9):
- la base è 10;
- posizionale: il significato di ogni cifra dipende dalla sua posizione relativa
- le posizioni si contano da destra a sinistra partendo da 0
ad es. 1919 = 1 × 103 + 9 × 102 + 1 × 101 + 9 × 100
In generale: numero di n cifre in base b:
an−1×bn−1+. . .+a1×b1+a0×b0
cifre usate: 0,1, . . . , b-1 ; a0 è la cifra meno significativa (LSD) ; an−1 `e la cifra pi`u significativa (MSD)
11 - Tecno1 rel. 17.03.17
Numerazione binaria
Il sistema numerico binario è usato in per la rappresentazione interna dei numeri, grazie alla semplicità di realizzare un elemento con due soli valori o stati, ma
anche per la corrispondenza con i valori di vero e falso. (Wikipedia)
Di fatto al posto di considerare le due mani con dieci dita si riduce ai minimi termini il calcolo sfruttando un solo dito: alzato o abbassato, di meno non è possibile!
Questo perché le macchine vengono costruite cercando il massimo della semplicità e facilità e quindi hanno bisogno di un linguaggio estremamente semplice e
povero.
Il sistema binario, ideato in origine dal matematico tedesco Leibniz, fu riscoperto nel da , che fornirà gli elementi matematici per la nascita del calcolatore
elettronico.
George Boole ( –) è stato un
e
, ed è considerato il fondatore della .
Nel pubblicò la sua opera più importante, indirizzata alle leggi del pensiero, dopo aver rilevate le analogie fra oggetti
dell'algebra e oggetti della logica, ricondusse le composizioni degli enunciati a semplici operazioni algebriche. Con
questo lavoro fondò la teoria di quelle che attualmente vengono dette
(o, semplicemente, ).
Tale algebra permette di definire gli AND, OR e NOT, la cui combinazione permette di sviluppare qualsiasi funzione logica
e consente di trattare le operazioni insiemistiche dell', dell' e della complementazione, oltre a questioni riguardanti
singoli 0 e 1, , e diverse altre funzioni binarie.
Il sistema numerico binario è un posizionale in base 2, cioè che utilizza 2 simboli, tipicamente 0 e 1, invece dei dieci (0,1,2..9) del sistema numerico decimale
tradizionale. Di conseguenza, la cifra in posizione N (da destra) si considera moltiplicata per 2^N (anziché per 10^N come avverrebbe nella numerazione
decimale).
Con n bit, si possono rappresentare, in binario, tutti gli interi da 0 a (2 n –1):
con un solo bit posso avere 0 e 1, con due bit posso rappresentare i numeri da 0 a 3: : 00, 01, 10, 11 ; con 3 bit 0 1 2 3 4 5 6 7 : 000, 001, 010, 011, 100, 101, 110,
111 e così via.
(approfondimento in )
Conversione binario-decimale-binario
Binario -> Decimale
La formula per convertire un numero da binario a decimale (dove con d si indica la cifra di posizione n all'interno del numero, partendo da 0) è:
d(n - 1)2(n - 1) + ... + d020 = N
Ad esempio
10012 = 1 * 23 + 0 * 22 + 0 * 21 + 1 * 20 = 910
Decimale-> Binario
Per convertire da decimale a binario, la parte intera, occorre procedere per divisioni successive per 2. Il resto costituisce una cifra del numero binario da destra
verso sinistra , dalla meno significativa (LSD) alla più significativa (MSD). Il procedimento si ferma quando il risultato è 1 che costituisce la cifra più significativa
Esempi di conversione Decimale-Binario:
37:2 = 18:2 = 9:2 = 4:2 = 2:2 = 1
1
0 1
0
0
Quindi partendo da destra a sinistra otterremo: 3710 => 1001012
15: 2 = 7:2 = 3:2 = 1
1
1
1
1510 => 11112
16: 2 = 8:2 = 4:2 = 2:2 = 1
1610 => 100002
12 - Tecno1 rel. 17.03.17
0
0
0
0
1310 = 11012
Infatti:
13 : 2 = 6 : 2 = 3 : 2 = 1
1
0
1
6310 = 1111112
Infatti:
63 : 2 = 31 : 2 =15 : 2 = 7 : 2 = 3 : 2 = 1
1
1
1
1
1
31:2....
32
63
64
128
Conversioni
Planetcalc
gioco didattico di CISCO, , in cui
tramite conversioni binario-decimale
si gioca a una specie di Tetris a livelli
Possono aiutare anche le carte binarie scientifica in Windows
di complessità crescente. (scaricabile
anche su ipad)
Altri
giochi:
)
e
calcolo
binario
Calcolatrice
Numerazione esadecimale
Il sistema numerico esadecimale (spesso abbreviato con hex o H) è un in base 16, cioè che utilizza 16 simboli invece dei 10 del tradizionale. Per l'esadecimale si
usano simboli da 0 a 9 e poi le lettere da A a F, per un totale di 16 simboli.
Ecco una tabella che confronta le rappresentazioni binarie, (in base 16) e di alcuni numeri:
bin
hex
dec
0000
0
0
0001
1
1
0010
2
2
0011
3
3
0100
4
4
0101
5
5
0110
6
6
0111
7
7
1000
8
8
1001
9
9
1010
A
10
1011
B
11
1100
C
12
1101
D
13
1110
E
14
1111
F
15
-----------------------------------10000
10
16
10001
11
17
……
Conversione decimale-esadecimale-decimale
Per le conversioni decimale-esadecimale il procedimento è analogo a quello in base 2 con la differenza che si deve procedere per divisioni successive per 16,
13 - Tecno1 rel. 17.03.17
anziché 2.
Ad esempio:
18:16=1 18d -> 12H
2
160:16=10
0
160d -> A0H
Per le conversioni esadecimale-decimale il procedimento è analogo a quello in base 2 con la differenza che si deve procedere sommando i prodotti di ciascuna
cifra per una potenza di 16
Ad esempio:
12H -> 2*16^0 + 1*16^1 = 2+16 = 18
A0H -> 0*16^0 + 10 *16^1 = 0+ 160 = 160
ABCH-> 2748 -> 101010111100
Conversione binario-esadecimale-binario
Binario-esadecimale. Prendiamo, ad esempio, il numero binario 10000000101 (corrispondente al decimale 1029). Essendo il sistema esadecimale basato sul
numero 16 (24) lo scriveremo raggruppando le cifre 4 a 4, partendo dalla posizione meno significativa, ovvero quella più a destra: 100 0000 0101
ogni raggruppamento corrisponde ad una cifra esadecimale secondo la tabella precedente.
Otterremo, quindi, trasformando i tre raggruppamenti, le tre cifre 4|0|5 corrispondenti al numero esadecimale 405H
Per la conversione esadecimale binario si procede esattamente al contrario:
consideriamo ancora il numero 405H e separiamolo in cifre come prima:
4|0|5 -> 100 0000 0101
Completare la seguente tabella
decimale
binario
326
11001101
127
129
128
111
111
esadecimale
111
10A
10000001
11111111
10000000
11111100
01000000
00010001
240
241
12B0C
FFFF
Rappresentazione di numeri interi
Come per i naturali, anche l’insieme dei numeri interi è infinito. I numeri interi rappresentabili con un numero finito di bit, sono solo un sottoinsieme finito dei
numeri interi. L’intervallo dei valori rappresentabili dipende dal numero di bit a disposizione. Con n bit possono essere rappresentati 2 n numeri.
Somma binaria
0+0 =0
1+0=1
0+1=1
1+1=0 con riporto di 1
14 - Tecno1 rel. 17.03.17
Riporto:
111100
011100+
100111 =
----------1000011
Riporto: 1000011
1010011 +
1100011 =
----------10110110
1001+
0001 =
_________
1010
Somma in esadecimale
La somma di due numeri esadecimali viene calcolata adattando le stesse regole della somma dei numeri decimali:
Si ha un riporto in esadecimale se la somma in qualunque posizione è maggiore di F.
Per esempio: A3DH + CA5H . Sommiamo ciascuna coppia di cifre. Ad esempio D+5 = 2, con riporto di 1 . Il riporto viene sommato alle cifre della colonna
immediatamente a sinistra. Cioè: A+3+1=E con nessun riporto
riporto
1
0
1
0
A
3
D
C
A
5
---------------------------------------------1
6
E
2
1AFH + 21H
Nella colonna più a destra la somma è F+1. Questa origina come bit somma 0 e come riporto 1. Cioè F +1=10. (F=15 ---> F+1= 15+1=16 ---> = 10H)
Il riporto viene sommato alle cifre della colonna immediatamente a sinistra.
Cioè A+2 +1. La somma di tale colonna origina come cifra somma D e nessun riporto. Il risultato alla fine sarà dunque 1D0H
18316 + 1216 =
154216 + BC116 =
ABC16 + F416 =
Modulo e segno
Per quanto riguarda la sottrazione, le regole sono simili (con la variante che 0-1=1 con prestito di 1), ma, per quanto possa sembrare strano i computer sono in
grado solo di effettuare somme e non sottrazioni. La sottrazione si ottiene sommando algebricamente, cioè addizionando un numero negativo, ad esempio 3-2
equivale a 3+(-2) .
Il problema è allora rappresentare un numero negativo in binario. Vediamo cosa significa.
Con n bit possono essere rappresentati 2 n numeri: metà positivi e metà negativi. Il problema allora è quello di distinguere tra positivi e negativi.
Un modo è quello di interpretare il bit più significativo con segno (1 se negativo, 0 altrimenti) e i rimanenti (n-1) bit per la rappresentazione del modulo. In
modulo e segno posso rappresentare su n bit i numeri da – (2 (n-1) – 1)  + (2 (n-1) – 1)
ES con 8 bit, - 54 : 10110110
Per comprendere meglio, usiamo un comodo strumento: “l’orologio binario”. Consideriamo per comodità quattro bit:
15 - Tecno1 rel. 17.03.17
orologio binario
NON
usato
Questa tecnica però NON viene usata perché ci sono problemi che rendono difficile l’utilizzo: ci sono due rappresentazioni dello zero ( 0000, 1000 ) e difficoltà
nelle operazioni di somma (quando i segni sono diversi). Al suo posto viene usato il “complemento a 2”.
Complemento a 2
E’ il metodo più usato per la rappresentazione dei numeri interi su n bit.
Si definisce complemento a 2 di un numero A, su n bit, il numero:
Ā = 2n – A
Ad esempio:
se A=3, il complemento a 2 su 4 bit è Ā=13, infatti: 2^4 – 3 = 16-3 =13
Con questa convenzione con n bit possono essere rappresentabili tutti gli interi tra:
– 2n-1  + (2 (n-1) – 1)
Ad esempio con n=8 (8bit) si avrà un range che va da -128 (10000000, pari a -28-1 ), fino a +127 (01111111, pari a +27-1)
Per comprendere meglio il complemento a 2 di un numero e la sua importanza applicativa, usiamo “l’orologio binario”. Consideriamo per comodità quattro bit:
orologio binario su 4 bit, in complemento a 2


Il numero 0 è rappresentato con 0000, 1 con 0001, -1 è 1111, -2 è 1110 e cosi’ via.
In particolare 7 (0111) è il piu’ grande numero positivo e –8 (1000) il piu’ grande , in modulo, negativo.
Si può notare che esiste un’ unica rappresentazione dello 0 e che gli interi codificati in complemento a 2 hanno il bit più significativo a 0 se sono positivi, 1 se
negativi.

Se consideriamo 8 bit, e non solo 4 come precedentemente descritto, si avrà che il numero 0 è rappresentato da 00h , 1 è 01h , 127 è 7Fh , -128 è 80h, -1 è
FFh (255). Il range va da -128 (10000000) a +127 (01111111)

Con 16 bit il numero 0 è 0000h , 1 è 0001h , 32767 è 7FFh , -32768 è 8000h, -1 è FFFFh (65535).
Il complemento del complemento restituisce il valore originale.
Operativamente, il complemento a 2 di un numero negativo –N si calcola così:
- si complementano i bit della rappresentazione binaria del modulo N del numero (cioè gli 1 diventano 0 e gli 0 diventano 1)
16 - Tecno1 rel. 17.03.17
- si somma 1 al risultato ottenuto
Esempio
-2 (su 4 bit) si ottiene cosi’:
si parte da 2 = 0010, lo si complementa a uno: 1101 a cui va sommato 1 :
1101+
0001=
-------------1110 => -2
Per fare un altro esempio -12 (su 5 bit) si ottiene così:
− 1210 = − 011002 = 10100CA2
Attenzione al numero di cifre da usare: ad esempio se utilizziamo 4 bit possiamo convertire al massimo il numero 7 (0111 con il bit più
significativo che deve essere a 0). Infatti se volessimo convertire su 4 bit il numero 9 (1001) otterremmo 0111. Al contrario, su 5 bit, avremo 01001-> 10111 che è
effettivamente -9.
Con 8 bit 11110111 e così via.
Dobbiamo anche tener presente che la somma di due numeri positivi potrebbe dare un numero negativo (ad esempio 5+4, su 4 bit, 1001 cioè -7). Il calcolatore
segnala questa eventualità tramite l’uso di flag (carry e overflow). Sarà il programmatore che deciderà come interpretare il risultato.
Sottrazione binaria in complemento a 2
La
definizione
di
complemento
B-A = B + (bn – A ) – bn = B + Ā - bn
a
2
è
=>
utile
perché
permette
di
ricondurre
sempre
le
sottrazioni
ad
addizioni.
Infatti:
B – A = B + Ā poiché su n bit bn = 0
Vengono enormemente facilitate le operazioni di somma e differenza, che si riducono alla sola operazione di somma: la differenza è la somma con il numero da
sottrarre complementato a 2!
ad esempio 5-3 = 5+ (-3) =2
Tramite il complemento a due una sottrazione è eseguita come un'addizione. Il riporto è trascurato.
Si parte da 3 = 0011, lo si complementa a uno: 1100, a cui va sommato 1 ottenendo il complemento a due: 1101:
5-
0101 -
3=
=>
0011=
0101 +
=>
1101 =
-----
----------
2
0010




5 - 8 (su 5bit) => 5 + (-8) = 001012 - 010002 = 001012 - 11000 CA2= 11101= − 3 (infatti 11101CA2 =>0011)
5 − 12 (su 5bit) => 5+ (− 12) = 001012 − 011002 = 00101+ 10100CA2 = 1001CA2= − 7
5 -10 (su 5bit) = 5+ (-10) => 00101 – 01010 = 00101+ (10101 +1 = 10110) => 00101 + 10110 = 1011= - 5
9 – 1 (su 4bit) = 9 + (-1) => 1001 – 0001 = 1001 + 1111 = 1000 (con riporto 1 che , se su 4 bit , ignoro)
Eseguire le seguenti operazioni (su 8 bit)
000111102 – 000000102 = 00011110 – 00000010 = 00011110 + (11111101 + 1) = 00011110 + 11111110= 11111100 = 28 10
111100102 + 000001102 =
001001112 + 000110102 =
111011102 + 000011012=
001110112 – 000001112 =
000100102 – 000001012 =
17 - Tecno1 rel. 17.03.17
Rappresentazione dei numeri reali
Finora ci siamo limitati ai numeri interi ma cosa capita per i numeri reali?
L’insieme dei numeri reali è un insieme infinito: presi due reali qualsiasi, esistono infiniti numeri reali compresi tra essi.
N.B. I numeri reali rappresentabili su n bit sono solo un sottoinsieme finito. Ciò significa che si possono rappresentare solo i numeri all’interno di un
certo intervallo e che anche all’interno dell’intervallo esistono dei numeri non rappresentabili.
Esistono due metodi utilizzati per rappresentare i numeri reali su un calcolatore:
• la rappresentazione in virgola fissa (FIXED POINT)
• la rappresentazione in virgola mobile (FLOATING POINT)
Rappresentazione in virgola fissa
Il metodo più semplice per rappresentare numeri frazionari è quello di scegliere dove posizionare, in modo prefissato (fixed point), la virgola all’interno del
numero. Ad esempio se si sceglie di usare 5 bit per la parte intera e 4 per la parte frazionaria si ottiene:
10101.11012 che rappresenta:
1*2 ^4 + 1*2 ^2 + 1*2^ 0 + 1*2^ -1 + 1*2^ -2 + 1*2 ^-4 = 21.8125
Aiutiamoci con questa tabella di conversione:
n
2^n
2^-n
0
1
1.0
1
2
0.5
2
4
0.25
3
8
0.125
4
16
0.625
5
…
..
Parte frazionaria binaria
0
1
01
001
0001
..
Ad esempio, consideriamo il numero 011011.11. Il numero è rappresentato con 8 bit, di cui i primi 6 per la codifica della parte intera, e gli ultimi 2 bit per quella
frazionaria. La sequenza 01101111 rappresenta il numero frazionario binario: 011011.11 = 27.75.
Il numero binario frazionario 0.11 viene rappresentato in virgola fissa con 00000011 (=0.75)
Calcolare a quale numero decimale corrispondono i seguenti numeri binari frazionari:
• 0.1101001 [R. 0.8203125]
• 1011.0101 [R. 11.3125]
• 11.10011 [R. 3.59375]
Conversione Decimale->Binario di numeri frazionari in virgola
fissa
La conversione da sistema decimale a sistema binario in virgola fissa, in cui si impiegano m bit per rappresentare la parte intera ed n bit per rappresentare quella
frazionaria si esegue con il seguente algoritmo ( ):
1.si considerano separatamente parte intera e parte frazionaria;
2.la parte intera viene convertita in un numero binario a m bit;
3.la parte frazionaria viene convertita in un numero binario a n bit effettuando moltiplicazioni successive per 2 separando la parte intera (0 od 1) da quella
frazionaria così ottenuta, finché:
o
si ottiene parte frazionaria nulla
o
oppure si sono ricavati tutti gli n bit disponibili per la rappresentazione in virgola fissa.
In questo caso la rappresentazione del sistema binario è un’ approssimazione di quella nel sistema decimale.
Esempio di conversione
37,125= 100101.001 infatti:

separo 37 da 0.125;

la parte intera la rappresento come 100101
18 - Tecno1 rel. 17.03.17

per quanto riguarda la parte frazionaria eseguo iterative moltiplicazioni per 2:
0,125x2 =>0,25 (primo bit dopo la virgola),
0,25x2 =>0,5
0.5x2
=>1,0
0
 termino perché la parte dopo la virgola è 0.
la parte frazionaria la rappresento come
001
Consideriamo ora il numero decimale 0,3= 01001
0.3 x 2 = 0.6 => bit 0
0.6 x 2 = 1.2 => bit 1
0.2 x 2 = 0.4 => bit 0
0.4 x 2 = 0.8 => bit 0
0.8 x 2 = 1.6 => bit 1
0.6 x 2 = 1.2 => bit 1
0.2 x2 = 0.4 => bit 0
04x2=…..
In generale il procedimento potrebbe terminare dopo molte cifre o non terminare mai! E’ necessario perciò approssimare il numero trovato, fermandosi dopo un
numero di passi predefinito. Del resto il numero di bit nella memoria di un computer è limitato.
Ad esempio:
Convertire in binario il numero 0.3 con un errore di rappresentazione inferiore a 0.01
0.3 x 2 = 0.6 => bit 0 [peso 0.5]
0.6 x 2 = 1.2 => bit 1 [peso 0.25]
0.2 x 2 = 0.4 => bit 0 [peso 0.125]
0.4 x 2 = 0.8 => bit 0 [peso 0.0625]
0.8 x 2 = 1.6 => bit 1 [peso 0.03125]
0.6 x 2 = 1.2 => bit 1 [peso 0.015625]
0.2 x 2 = 0.4 => bit 0 [peso 0.0078125] < 0.01: ho raggiunto la precisione desiderata.
(
)
6.25= 110.01
Convertire in binario il numero
separo 6 da 0.25;
la parte intera la rappresento come 110
per quanto riguarda la parte frazionaria eseguo iterative moltiplicazioni per 2->
1.25 2 = 0.5x 2
0.5x 2 = 1.0 FINE!
Convertire in binario i seguenti numeri:
• 0.625 [R. 0.101] 0.625x2=1.25x2=0,5x2= 1,0
• 0.03125 [R. 0.00001]
• 0.828125 [R. 0.110101]
Rappresentazione in virgola mobile (floating point- IEEE754)
Lo standard IEEE754 definisce un metodo per la rappresentazione dei numeri in virgola mobile
Rappresentare il numero in binario
- Trasformare il numero in notazione esponenziale normalizzata in cui 00...002 rappresenta il valore 0; la rappresentazione degli altri numeri usa il seguente
formato:
(-1)s × (1 + MANTISSA) × 2e
Precisione singola
4 byte-> 1 bit per il segno, 8 bit per l’esponente, 23 bit per la mantissa
Il numero di bit della mantissa rappresenta il numero di cifre significative, cioè dà la precisione del numero. La cifra 1 prima della virgola è sottintesa e quindi si
hanno 23 bit interamente dedicati alla mantissa (6,7 cifre decimali):



per primo c’è il segno per vedere se si tratta di numeri positivi o negativi
l’esponente è indicato prima della mantissa (numeri con esponente più grande sono più grandi, indipendentemente dalla mantissa)
Per la rappresentazione dell’esponente viene usato un metodo particolare (esponente biased). L’esponente viene rappresentato nella forma bias + E
19 - Tecno1 rel. 17.03.17



dove bias = 2n/2 –1 (dove n è il numero di bit per l’esponente)
Il numero di bit riservati all’esponente determina l’intervallo dei numeri ammessi o ordine di grandezza.
Il numero di bit riservati alla mantissa determina il numero di cifre significative che si possono usare, cioè la precisione
La cifra 1 prima del punto decimale viene sottintesa.
Se n=8 bit si avrà bias= (2^8/2) – 1 = (256/2) -1 = 127
Questa notazione è adatta per le operazioni di confronto tra numeri.
Nell’esempio che segue si ha: 0 10000111 10110000000000000000000
segno=0 => numero positivo (1 rappresenta un numero negativo)
10000111 => 135
esponente eccesso 127 => 135-127=8 =>2^8
mantissa => 10110.. è da intendersi sempre come 1.10110..
 In definitiva il numero binario rappresenta: 1.1011 x 2^8 = 11011 x 2^4= 11011 x 16 = 27x16= 432
0 10000101 00110100000000000000000
segno=0 => numero positivo
esponente eccesso 127 => 133-127=6 =>2^6
mantissa => 0011010..
In definitiva: 1.001101 x 2^6 =77
Precisione doppia

8 byte: 1 bit per il segno, 11 bit per l’esponente, 52 per la mantissa
La cifra 1 prima della virgola è sottintesa e quindi si hanno 53 bit interamente dedicati alla mantissa (15,16 cifre decimali).
0 10000001 010010 … 0
1 10001101 01110 … 0
0 01111101 01010 … 0
[R. 5.125]
[R. –23552.0]
[R. 0.328125]
Conversione decimale –> floating point
13.25
- il numero è positivo, per cui il segno è 0
- in binario: 1101.01
- spostando il punto decimale di 3 posizioni a sinistra, il numero si normalizza in 1.10101 x 2^3
- l'esponente (eccesso 127 ): 127 + 3 = 130 = 10000010
Quindi in Floating Point, singola precisione:
0
10000010
10101000000000000000000
segno positivo
esponente eccesso 127
mantissa
-109,78125 = 1 10000101 10110111010000000000000
infatti:
109 = 1101101
1101101,11001 che in notazione normalizzata corrisponde a: 1,1011011001x2^6.
All’esponente va aggiunto 127 + 6 =133 (10000101) .
Quindi in Floating Point, singola precisione:
1
10000101
10110110010000000000000
segno negativo
esponente eccesso 127
mantissa
5.0 [R. 0 10000001 0100 … 0]
-9.25 [R. 1 10000010 0010100 … 0]
12.8125 [R. 0 10000010 100110100 … 0]
Operazioni con la rappresentazione floating point
 Si possono sommare du enumeri floating point solo se hanno lo stesso esponente
Se gli esponenti non sono uguali bisogna trasformare il numero con esponente più grande per rendere l’esponente uguale a quello dell’altro numero; in tal caso il
20 - Tecno1 rel. 17.03.17
numero è in forma non normalizzata; il risultato deve poi essere normalizzato
 Per eseguire la moltiplicazione si moltiplicano le mantisse e si sommano gli esponenti (perché la base è la stessa); il prodotto è in forma non normalizzata e
aumenta il numero di cifre, quindi deve essere arrotondato
Ecco una tabella che riporta in modo schematico le principali classi di valori, numerici e speciali, rappresentabili nello standard aritmetico in virgola mobile IEEE
754.
Singola precisione
Doppia precisione
Entità rappresentata
Parte frazionaria
Parte frazionaria
Esponente (o mantissa)
Esponente (o mantissa)
0
0
0
0
0
0
≠0
0
≠0
Numero denormalizzato
da 1 a 254 valore qualsiasi da 1 a 2046 valore qualsiasi Numero in virgola mobile
255
0
2047
0
∞
255
≠0
2047
≠0
NaN (Not a Number)
Tipi di dati in C
Il tipo di un dato è l’astrazione della sua rappresentazione.
Tipo
Dimensione
Intervallo di valori
Char
1 byte
0 / 255
Int (short int)
2 byte
- 32768 / 32767
Long
4 byte
- 2147483648 / 2147483647
Unsigned int
2 byte
0 / 65535
Unsigned long
4 byte
0 / 4294967295
Float
4 byte
Notazione IEEE standard
double
8 byte
Notazione IEEE standard
(big endian-little endian)
Proprietà dell’aritmetica in virgola mobile
Questa aritmetica presenta due fondamentali differenze dall'aritmetica reale:

l'aritmetica in virgola mobile non è : in generale, per i numeri in virgola mobile,
;

l'aritmetica in virgola mobile non è :in generale,
.
In definitiva, l'ordine in cui vengono eseguite più operazioni in virgola mobile può variarne il risultato. Questo è importante per l'analisi numerica, in quanto due
formule matematicamente equivalenti possono dare risultati diversi, uno anche sensibilmente più accurato dell'altro. Per esempio, nella maggior parte delle
applicazioni in virgola mobile, 1,0 + (10100 + -10100) dà come risultato 1,0, mentre (1,0 + 10100) + -10100 dà 0,0.
La virgola mobile appare più appropriata quando si richiede una certa precisione relativa al valore. Quando è richiesta una precisione assoluta, la virgola fissa
sembra una scelta migliore.
21 - Tecno1 rel. 17.03.17
BCD
Il codice BDC (Binary Code Decimal) viene usato per la rappresentazione di numeri che possano essere convertiti rapidamente in cifre decimali
In ogni byte vengono rappresentate due cifre decimali; ogni cifra del numero decimale occupa 4 bit, che assumono il valore della corrispondente
rappresentazione binaria.
Cifra decimale
0
1
2
3
4
5
6
7
8
9
Codice BCD
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
Con 4 bit le configurazioni possibili sono 16 ma per rappresentare le cifre da 0 a 9 ne vengono usate solo 10; ne restano 6 inutilizzate, cioè il codice è ridondante.
Per rappresentare un numero decimale con il codice BCD servono più bit rispetto alla rappresentazione in sistema binario.


Il fatto che il codice sia ridondante influenza anche le operazioni aritmetiche, infatti per ottenere risultati corretti bisogna seguire le seguenti regole:
se sommando due cifre BCD si ottiene come risultato una combinazione non lecita bisogna sommare 6 perché le combinazioni illecite sono 6.
Se nel risultato della somma di due cifre BCD si verifica un riporto bisogna sommare 6.
0001 1000 0111 +
0101 0011 1001 =
_________________
0110 1100 0000 +
0110 0110
_________________
0111 0010 0110
(520)10 + (150)10
0101
0010
0001
0101
0110
0111
0000
0000
0000
520 +
150 =
670
Esercizi di riepilogo:
1 Rappresentare i seguenti numeri in complemento a 2 su 8 bit:
127 -127 -128 128 0 1 -1 256 -256
2 Rappresentare i seguenti numeri in complemento a 2 su 8 bit:
44 -44 127 -127 -128 128 0 1 -1 256 -256 -53 -75
3 Data la rappresentazione in complemento a 2 (su 8 bit), quali numeri sono rappresentati?
11010100
11100101 01111111 10000000
3 Dare la rappresentazione come numeri interi a 16 bit dei numeri 68 e 20 ed eseguire 68-20 con il metodo del complemento a 2.
4 Eseguire le seguenti sottrazioni usando il complemento a 2 su 8 bit
31-32
32-33
64-68
64-4
4.1 Eseguire le seguenti sottrazioni usando il complemento a 2 su 16 bit
123-43
32-54
45-67
176-24
5 Rappresentare con il codice BCD i numeri 2706
187
6 Eseguire la somma dei seguenti codici BCD e dire a quali numeri corrispondono operandi e risultato
00101001 + 00011000 =
7 Rappresentare 35,24 secondo lo standard IEEE754
8 Data la seguente rappresentazione (IEEE754), 01000010011010000000000000000000
9 Dare le rappresentazione di 327 come numero intero a 16 bit, con il codice BCD, come numero reale secondo lo standard IEEE754
10 rappresentare 62,15
0,125
45,25
67 secondo IEEE754
22 - Tecno1 rel. 17.03.17
Comunicazione e Codici
COMUNICAZIONE = Fenomeno in virtu' del quale l'uomo si relaziona dal punto di vista: Informativo, Esplorativo, Partecipativo con altri uomini e il cosmo
E’ tramite la comunicazione e lo scambio di informazioni che le civiltà umane si sono evolute e sviluppate. Prima attraverso il comportamento, i gesti e la danza,
poi con il linguaggio e con le immagini, quindi con la scrittura, con il modo di vestirsi, con i messaggi sonori e di fumo, incidendo piante e rocce, costruendo torri,
mandando segnali luminosi, elettrici, magnetici …. Ma anche viaggiando, navigando, commerciando e, purtroppo, talvolta, invadendo e facendo la guerra…
A noi interessa l'aspetto INFORMATIVO: scambio di informazioni da un soggetto a un altro per mezzo di veicoli di varia natura, usando una Sorgente,
un'Emittente (trasmettitore), un messaggio e un segnale , un canale, un rumore, un ricevente e un destinatario.
Schema fondamentale della comunicazione.
Immaginiamo che in un bacino idrico sia necessario segnalare a distanza quando il livello dell'acqua è entro misure di sicurezza e quando invece diventa
pericoloso.
Possiamo utilizzare il seguente sistema comunicativo:
quando si ha la situazione ”acque a livello pericoloso" (referente), un galleggiante (sorgente) chiude l'interruttore di un circuito elettrico (produttore) in modo che
la chiusura del contatto (trasmettitore) invii il messaggio sottoforma di corrente elettrica (segnale) attraverso il filo (canale), strettamente legato alla natura del
segnale che deve far transitare.
Il segnale giunge a una lampada (il ricevitore) che si accende. Il sorvegliante (destinatario), recepito il messaggio, capisce, dal contesto, il messaggio e si rende
conto che le acque sono a un “livello pericoloso.
Può capitare che, pur essendo le acque a livello di sicurezza, un contatto lungo il filo o altro elemento esterno producano un passaggio di corrente nel circuito e lo
chiudano accendendo la lampada; oppure che, con le acque a livello di pericolo, dei contatti difettosi non permettano alla corrente di raggiungere la lampadina:
avremo delle interferenze nel canale o dei fenomeni di rumore.
Questo modello può essere tradotto schematicamente cosi’:

Referente (Contesto)

Sorgente/Produttore

Trasmettitore/Codificatore (contatto elettrico) , traduce messaggio in segnale con il codice : corrente ON/OFF

Canale (con rumore)

ricevitore/decodificatore

Destinatario
Torniamo ora al nostro modello per il bacino idrico.
Abbiamo qui un codice a solo due sole unità: "luce spenta" (= "a livello sicuro") e “luce accesa" ("acque a livello di pericolo").
Proviamo ora a immaginare un codice un poco più complicato, nel quale alle unità "luce spenta" e "luce accesa" vengano sostituite rispettivamente le unità "luce
accesa bianca" e "luce accesa rossa".
Quali sono le differenze tra il primo codice (A) e il secondo codice (B)? ll primo è più semplice e meno costoso e si fonda sulla contrapposizione fra assenza e
presenza di luce. Sono possibili due segni o messaggi distinti.
Un codice di questo tipo obbedisce a un principio di minimo sforzo e di economicità.
Il codice B è più complesso e costoso; per realizzarlo sono necessarie due lampadine di colore diverso e due canali; il destinatario deve saper distinguere fra due
luci diverse.
Se però badiamo ai possibili effetti del rumore sui due codici, notiamo che il codice B ha dei vantaggi sul codice A.
Nel caso di A l'effetto del rumore (immissione o interruzione non prevista di corrente è di trasmettere comunque un messaggio; esso può risultare erroneo al
23 - Tecno1 rel. 17.03.17
produttore, ma il destinatario non é in grado di distinguerne l'erroneità; un qualsiasi contatto fa scattare l'allarme, anche se le acque sono a livello di sicurezza.
Nel caso B a principio di economicità (una sola lampadina), si sostituisce il principio di ridondanza (due lampadine). Tale ridondanza ha una funzione. In caso di
contatto (rumore> lo spegnersi o l'accendersi della luce non è previsto dal codice e non trasmette nessun messaggio e quando avviene non induce in errore il
destinatario che, come il produttore, si accorge soltanto che qualcosa non va nell'impianto.
La ridondanza quindi funziona da correzione degli errori possibili nella trasmissione di un messaggio.
La ridondanza ha anche un'altra funzione: permette al codice di produrre ulteriori messaggi per nuove esigenze che possano sorgere.
Se, per es., nel bacino idrico risultasse necessario introdurre un nuovo messaggio per segnalare un livello intermedio delle acque (livello di preallarme), il codice
A non potrebbe trasmettere tre diversi messaggi distinti e l'intero impianto dovrebbe essere cambiato; il codice B invece può trasmettere un terzo messaggio
(per es. accensione contemporanea di tutte e due le lampadine). La ridondanza quindi consente a un codice di adattarsi a nuove situazioni e di resistere nel
tempo.
Quando due entità, persone, macchine, cose, comunicano tra di loro attuano dei meccanismi che Shannon e Weaver, nel 1948-49 hanno studiato e codificato
nella “Teoria Matematica della Comunicazione”.
La comunicazione è vista come «trasmissione di un’informazione attraverso un messaggio
inviato da un emittente a un ricevente».
schema della comunicazione di Shannon





La sorgente/produttore dell’informazione crea il messaggio
Il trasmettitore/codificatore, ricevute le informazioni, le traduce in messaggio da trasmettere lungo il canale
Il canale, che funge da mezzo di trasmissione del segnale provvede a trasmetterlo a destinazione
Il ricevitore/decodificatore, riceve il segnale trasmesso lungo in canale e provvede a decodificarlo.
Il destinatario (persona o macchina), che riceve il messaggio e ne comprende il significato in funzione di un “contesto” comune al produttore
(“referente”)
Dato un PRODUTTORE e un DESTINATARIO, il MESSAGGIO che passa dall'uno all'altro è un ATTO DI COMUNICAZIONE.
Il messaggio prodotto da una sorgente viene codificato da un trasmettitore e utilizza un canale (per es. il filo telefonico la carta stampata, ecc.) per essere
inviato al ricevitore che lo decodifica per il destinatario, che lo riceve correttamente se non si hanno fenomeni di rumore (interferenze nel canale, interruzioni o
disturbi del processo della comunicazione). Il messaggio che, trasmesso in codice mpassa dal produttore al destinatario, fa riferimento a un preciso contesto.
Cos'è esattamente il contesto? E' ciò che circonda il produttore e il destinatario; è il mondo, la realtà, il complesso di idee che essi hanno in comune.
Il CODICE è il sistema delle regole in base al quale il messaggio è strutturato. Esso è costituito da un insieme di simboli (alfabeto) e dalle combinazioni di simboli
validi (parole).
“Un codice è un modo per rappresentare un insieme di informazioni di differente complessità. La codifica permette di associare a ciascuna entità informativa un
riferimento univoco, detto codice, rappresentato in genere tramite stringhe o simbologie specifiche” (da Wikipedia - definizione di Codice nella Teoria
dell'Informazione).
codici geroglifici
Per poter utilizzare un codice deve essere definito un processo di codifica che permette di rappresentare delle informazioni mediante un certo codice.
Per ogni processo di codifica è definito il processo inverso, o decodifica che permette di estrarre le informazioni da un messaggio codificato. Questo implica che
durante il processo di decodifica deve essere possibile distinguere una dall’altra le parole del codice, indipendentemente dalla sequenza con cui sono usate;
questa condizione è semplice da rispettare se le parole del codice hanno tutte la stessa lunghezza, cioè lo stesso numero di simboli. Ad esempio se codificassimo
le lettere A,B,C,D nel modo seguente: A=0, B=1, C=01, D=10, non sapremmo dire se 010 corrisponda a ABA, AD, CA.
In caso contrario occorre definire precisi schemi entro cui il messaggio viene inviato.
Si dice alfabeto un insieme non vuoto e finito di simboli detti caratteri. Ad esempio:

A = {0, 1} è l’alfabeto binario.

B = {A, B, C, . . . , X, Y, Z} è l’alfabeto delle lettere latine maiuscole.
Una stringa o parola in un dato alfabeto è una successione di simboli (anche ripetuti) di quell’alfabeto.
24 - Tecno1 rel. 17.03.17
“Dato un insieme I di oggetti, si dice codifica dell’insieme I nell’alfabeto L, un procedimento che permetta di stabilire una corrispondenza biunivoca fra gli
elementi di I e un sottoinsieme di parole di L. “
AD esempio Il codice Morse traduce le lettere in sequenze di punti e linee (quindi rappresentabile anche con segnali luminosi, sonori o elettrici). Ogni punto è
rappresentata da una unità di tempo (1/25 di secondo), ed ogni linea di 3 unità. Gli spazi tra le lettere sono di 3 punti, e fra le parole di 5.
(http://www.belloma.it/codici-e-macchine-lalfabeto-morse/)
Nell’utilizzo del computer tutti i codici usano come alfabeto le cifre del sistema binario 0 e 1.
L’uso di due soli simboli riduce la possibilità di errore (è più facile distinguere tra due valori che tra dieci) e rende semplice la rappresentazione all’interno del
computer, infatti due simboli possono essere rappresentati con due stati fisici distinti.
codice binario applicato ai caratteri di testo
L’interazione uomo-macchina
Un particolare tipo di comunicazione riguarda la comunicazione tra uomo e macchina.
L’interazione uomo-macchina è un campo di studi che si prefigge il compito di indagare il rapporto tra l’uomo e le tecnologie e di applicare i risultati della propria
indagine alla progettazione di sistemi per la comunicazione tra l’uomo e la macchina.
In modo sintetico, la comunicazione identifica uno scambio di messaggi tra due stazioni, emittente e ricevente, che condividono un codice. Lo schema di base
della comunicazione include una stazione di partenza, un canale e una stazione di arrivo. Il messaggio rappresenta il contenuto scambiato tra emittente e
ricevente.
Quando la comunicazione avviene tra l’essere umano e la macchina, l’interfaccia è l’elemento che veicola questa comunicazione e quindi l’interazione tra questi
due soggetti.
L’interazione uomo-macchina “si occupa della progettazione di sistemi che siano in grado di sostenere le persone che li usano a svolgere la loro attività in modo
produttivo e sicuro …”
L’interfaccia uomo-macchina è uno degli elementi caratterizzanti un sistema informatico. Infatti, ogni applicazione può essere classificata anche sulla base della
modalità con cui si presenta all’utente e, viceversa, grazie alla quale l’utente può interagire con l’applicazione. Questo elemento, solitamente indicato con il
nome interfaccia utente, racchiude quell’insieme di funzionalità di comunicazione in cui l’utente dell’applicazione può essere fonte o destinatario del messaggio.
A causa dei vincoli tecnologici, infatti, l’interazione uomo-macchina ha prediletto il senso della vista come canale di comunicazione. Attraverso la multimodalità si
offre una maggiore versatilità coinvolgendo altri sensi quali il tatto e l’udito e, nell’ultimo periodo, anche l’olfatto (sebbene ancora in fase pionieristica).
25 - Tecno1 rel. 17.03.17
Informazione
L’originalità dell’approccio di Shannon consistette nell’introdurre una misura dell’informazione «capace di definirne la quantità dalla sorgente al destinatario».
Shannon studia l’informazione «utilizzando una teoria matematica, basata sul calcolo delle probabilità, applicata a sistemi che si possono conoscere in modo
imperfetto»
L’informazione è ciò che aumenta il patrimonio conoscitivo. Può essere di varia natura: immagini (cartelli stradali, semaforo,..), luce (faro), suono (campanella),
numeri, parole, interruttori...
Consideriamo un interruttore: esso ha due possibili stati (o scelte) ON (1) , OFF (0).
A un interruttore è associata una sola informazione (2^1): acceso o spento, cioè l'informazione tra due messaggi alternativi è unitaria
A due interruttori sono associate 2 informazioni e 4 stati (2^2). Tre interruttori forniranno 3 informazioni con 8 stati (2^3), e… cosi' via.
La stessa cosa cosa possiamo dire se abbiamo due strade a un bivio: un’informazione. Se avessimo 4 diramazioni, avremmo 2 informazioni. Se avessimo un senso
unico NON avremmo alcuna (0) informazione (1=2^0).
NB attenzione all’esponente di 2 che è corrisponde al valore dell’informazione: 1,2,3,0 rispettivamente!
Tanto più ho possibilità di scelta tanto maggiore è la quantità di informazione. L’informazione è il numero di diversi messaggi che potrebbero essere trasmessi su
un canale in funzione del numero di scelte di simboli usati.
L'informazione è uguale al logaritmo in base 2 del numero di scelte equiprobabili e l'unità di misura dell'informazione è il bit
[bit]
Un bit non è altro che la quantità di informazione fornita dalla scelta fra due alternative diverse, considerate come egualmente probabili. (Il
termine bit corrisponde alla contrazione dell'inglese binary digit, numero binario).
Nel caso generale di n scelte possibili l'informazione verrà calcolata sostituendo al numero totale di scelte l'inverso della probabilità di scelta se P = 1/n°scelte, si
ha:
[bit]
Nel
caso
in
cui
le
scelte
possibili
non
siano
equiprobabili
bisogna
ricorrere
alla
formula
dell’
Entropia.
L'entropia si presenta come una sommatoria di tutte le informazioni che compongono il messaggio finale, pesate a seconda del numero di casi che esse
possiedono.
[
bit]
Ad esempio: H = 1/3log23 + 1/7log27 + 1/4log24 + 1/2log22 = 1,929372
Il valore così ottenuto rappresenta l'informazione necessaria per individuare una delle quattro destinazioni al primo livello.
Il concetto di quantità di informazione è associato alla possibilità di comprimere i dati mantenendo inalterato il, contenuto informativo (cfr codice di Huffman,
tecniche di compressione basate su gli studi di Lampel-Ziv, ecc).
«La mia più grande preoccupazione era come chiamarla. Pensavo di chiamarla informazione, ma la parola era fin troppo usata, così decisi di chiamarla incertezza.
Quando discussi della cosa con John Von Neumann, lui ebbe un'idea migliore. Mi disse che avrei dovuto chiamarla entropia, per due motivi: "Innanzitutto, la tua
funzione d'incertezza è già nota nella meccanica statistica con quel nome. In secondo luogo, e più significativamente, nessuno sa cosa sia con certezza l'entropia,
così in una discussione sarai sempre in vantaggio"» (Shannon)
Esercizi su informazione ed entropia
Esercizio 1. Qual è il contenuto informativo di una moneta "onesta"? log 2=1 (il log è in base 2) (2 scelte equiprobabili)
Esercizio 2. Qual è il contenuto informativo di un dado "onesto"?….... [2.58 ]
Esercizio 3. Qual è il contenuto informativo di una moneta truccata con probabilità 1/4 e 3/4 ?? H=.................................... [0.811 n.b. < 1 !!!]
Esercizio 4. Si supponga che la frequenza con cui le singole lettere vengono impiegate nella lingua italiana sia quella in tabella (ottenuta su u campione di 128
lettere). Quale è l'entropia? …..[4.19 ]
lettere frequenza
lettere
frequenza
A E I O 12
BDFG 4
CRST
7
PUV
4
LMN
6
HQZ
2
26 - Tecno1 rel. 17.03.17
Codici per la rilevazione e la correzione degli
errori
Come abbiamo visto nei paragrafi precedenti, quando inviamo dei dati su un canale di comunicazione i disturbi (rumore) possono corrompere i dati e far in modo
che il destinatario riceva trame contenenti degli errori.
Per rilevare e correggere gli errori di trasmissione si trasmettono, assieme ai dati utili, uno o più bit di ridondanza.
Al messaggio vengono, cioè, aggiunti dei bit di controllo. Particolari tecniche, applicate in trasmissione e ricezione, consentono di verificare che il messaggio
arrivato sia, ragionevolmete, corretto.
Le tecniche più semplici aggiungono alla fine del dato un controllo della parità. Altre, alla fine della trama di dati, aggiungono un campo contenente la
sommatoria dei dati trasmessi (checksum). Altre tecniche più sofisticate (CRC), trattano i bit trasmessi come polinomi numerici e calcolano il resto della divisione
tra questi polinomi e un divisore comune (polinomio generatore) .
Il CRC è usato comunemente nei protocolli moderni perché riduce la probabilità di non rilevare eventuali bit errati. Inoltre il CRC si adatta bene a correggere
errori a “burst”, cioè errori che danneggiano un insieme di bit consecutivi come capita, tipicamente, in caso canali di comunicazione soggetti a rumore.
Controllo di parità
Il controllo di parità, usato spesso nelle trasmissioni asincrone, è associato ad ogni carattere trasmesso. Esso può essere pari (EVEN) o dispari (ODD). Il calcolo
per la definizione del bit di parità viene fatto sempre sul numero di bit a 1 presenti nel carattere.
Quando la parità è pari il numero di bit a 1 compreso quello di parità deve essere pari, se invece la parità è dispari il numero dei bit a 1 deve essere dispari.
Come si può intuire, risulta impossibile rilevare l'errore quando esso si verifica su un numero pari di bit.
Si tratta di un controllo debole, usato per trasmissioni asincrone a bassa velocità e su brevi distanze. Al controllo di parità sul singolo carattere (Controllo a
ridondanza verticale(VCR)), è possibile associare un controllo sull’insieme dei caratteri trasmessi e (Controllo longitudinale (LCR) detto anche BCC (Block Check
Control) per rendere meno debole il risconoscimento dell’errore.
L’esempio sottostante illustra un caso in cui si usa sia VCR che LCR. La stringa inviata “CIAO”, è codificata in ASCII e risulta:
codifica carattere VCR (Parità pari)
C
01000011
1 -> Bit di controllo per un carattere
I
01001001
1
A
01000001
0
O
01001111
1
___________________________
LCR (BCC)
00000100
1
Si può notare come un controllo di “parità pari” corrisponda a un’operazione di OR esclusivo (XOR, Exclusive OR,
realizzazione di programmi software.
) tra i bit, una tecnica molto sfruttata nella
Controllo a somma aritmetica (checksum)
Consiste nel sommare il valore binario, corrispondente alla codifica ASCII dei caratteri, modulo 256.
Un esempio checksum su 16 bit:
Il vantaggio di tali calcoli di checksum è la dimensione fissa e la facilità di elaborazione.
Altre comuni varianti di questo semplice checksum sono ottenute usando al posto della somma l'operazione di XOR come nel Longitudinal redundancy check
(LRC).
NOTA sulla SICUREZZA
Questi metodi sono utili per la verifica di corruzioni accidentali (errori di trasferimento, o di memorizzazione, perdita di dati), ma non sono sicuri contro gli
27 - Tecno1 rel. 17.03.17
attacchi di malintenzionati, in quanto le loro strutture matematiche non sono particolarmente complesse da aggirare. Per questo tipo di attacchi vengono
utilizzati algoritmi di hash come l'MD5,lo SHA-256, per il momento incorruttibile (http://onlinemd5.com/) .
Controllo a ridondanza ciclica CRC (Ciclic Redundancy Check)
Il CRC consiste nel trasformare il messaggio da trasmettere in un polinomio con potenze di due. Ad esempio il messaggio 1011 può considerarsi uguale al
polinomio 2^3+2^1+2^0 o, altrimenti scritto: x3 + x + 1.
Il calcolo del CRC si basa sulle proprietà dell’aritmetica modulo 2, in cui non si hanno riporti né per somme né per sottrazioni e, di fatto, somme e sottrazioni sono
identiche e possono essere pensate come l’operazione di OR esclusivo, che restituisce 1 (vero) se e solo se uno solo dei due operandi è 1, mentre restituisce 0
(falso) in tutti gli altri casi.
La divisione in modulo 2 è analoga a quella decimale tradizionale, ma con l’oerazione di XOR al posto delle sottrazioni
Il polinomio corrispondente al messaggio da trasmettere viene diviso per un polinomio divisore (o polinomio generatore), noto a entrambe le stazioni collegate. Il
resto della divisione viene inviato assieme ai dati.
Il ricevente può effettuare il controllo in due modi, il primo è di dividere tutto il messaggio ricevuto compreso il resto della divisione e dividerlo per il polinomio
generatore, se il resto della divisione è 0 allora il messaggio è corretto. Il secondo modo è di eliminare il resto della divisione dai dati ricevuti e dividere
quest'ultimo per il polinomio generatore, se il resto ottenuto è uguale a quello tolto dai dati ricevuti, il messaggio è corretto.
Consideriamo il seguente esempio.
Messaggio da inviare = 1011100101 -> x9 + x7 + x6 + x5 + x2 + 1
Polinomio Generatore = 1011
-> x3 + x + 1
Per effettuare l’operazione si aggiungono al messaggio tanti bit a 0 quanto è il grado del polinomio divisore. Perciò:
Messaggio + 3 bit 0 = 1011100101000
Si procede alla divisione tra polinomi ricordando che la somma 1+1=0 allo stesso modo della funzione XOR. Si trascura il risultato e si considera solo il resto, che
viene aggiunto al messaggio e trasmesso al ricevitore:
1011100101000
1011
1011
1000101010
0001
0000
0010
0000
0100
0000
1001
1011
0100
0000
1001
1011
0100
0000
1000
1011
0110
0 0 0 0 = 110 Resto
Messaggio inviato al ricevitore = 1011100101110
Polinomi generatori
La selezione del polinomio generatore è importante: il polinomio deve essere scelto per rendere massima la possibilità di rilevamento di errori. A questo
proposito è determinate la lunghezza del polinomio (legata al suo grado). Ecco perché i polinomi più usati hanno un grado elevato. Ad esempio tra i più usati
nelle telecomunicazioni possiamo citare:
CRC12 = x12 + x11 + x3 + x2 + x + 1 (13bit) che tradotto in bit risulta: 1100000001011
CRC16 = x16 + x15 + x2 + 1 (17bit)
che tradotto in bit risulta: 11000000000000101
CRCCCITT = x16 + x12 + x5 + 1 (17bit)
che tradotto in bit risulta: 10001000000100001
Esiste anche un CRC-32 e CRC-64, rispettivamente a 33bit e 65bit.
Codifica dei caratteri alfanumerici
Una codifica per i caratteri è definita dalla corrispondenza tra l’insieme di caratteri che si vogliono rappresentare e le parole di un codice.
Nell’insieme dei caratteri si considerano almeno le lettere, le cifre e alcuni simboli. I diversi insiemi di caratteri sono definiti da standard ISO (International
Standards Organization).
Per un certo insieme di caratteri definito in uno standard ISO possono esistere metodi di codifica diversi. I codici si differenziano per il numero di byte per ogni
28 - Tecno1 rel. 17.03.17
carattere e codici che invece possono usare un numero diverso di byte per rappresentare caratteri diversi.
Per definire un set di caratteri occorre specificare:
1. l’insieme dei codici utilizzato
2. l’insieme dei caratteri da rappresentare
3. la corrispondenza tra essi
Lo standard ASCII
Il set di caratteri ISO 646 usa la codifica ASCII (American Standard Code for Information Interchange) a 7 bit (detto anche ASCII di base o ristretto).
Questa codifica usa 8 bit per carattere, ma lascia inutilizzato il bit più significativo (sempre 0).
Ad ogni carattere viene associato in modo convenzionale un numero nell’intervallo 0 – 127; tale numero, o meglio, la sua rappresentazione binaria, costituisce la
rappresentazione del carattere (si può avere una rappresentazione esadecimale per avere una codifica più compatta)
Il codice di ciascun carattere può essere individuato in una tabella che elenca i caratteri e il codice corrispondente comprende 128 caratteri di base:





lettere maiuscole
lettere minuscole
cifre
simboli speciali, ad esempio + - ; : , ……)
caratteri di controllo: questi codici non producono un carattere visibile, ma indicano una funzione da eseguire. Ad esempio “ a capo, “tab”, “salto
pagina”,…).
In particolare:

I primi 32 caratteri sono caratteri di controllo

Le cifre da 0 a 9 hanno tutte lo stesso valore (0011) nel semibyte più significativo, mentre il secondo contiene la rappresentazione della cifra in binario.
Per passare dalla rappresentazione della cifra come carattere al suo valore numerico da usare nei calcoli, basta sottrarre 30h (00110000) e viceversa.

Le lettere sono suddivise in maiuscole e minuscole, mantenendo l’ordine alfabetico, quindi si possono eseguire operazioni di confronto e ordinamento
di caratteri, basandosi sul loro codice ASCII (attenzione: poiché le lettere maiuscole precedono le minuscole)
E’ evidente che per la maggior parte delle lingue 128 caratteri sono insufficienti (in italiano per esempio, ci sono le lettere accentate)
Il bit più significativo dell’ASCII base può essere utilizzato per estendere il codice e aggiungere altri 128 caratteri (con 8 bit ho 256 combinazioni)
In ASCII a 8 bit (ASCII esteso, a 8 bit -ISO 8859), tutti i codici sono compatibili con l’ ASCII A 7 bit (i primi 128 caratteri sono uguali).
29 - Tecno1 rel. 17.03.17
un esempio di ASCII Art -
Unicode
Il codice ASCII a 8 bit non è adatto per le lingue orientali che usano migliaia di ideogrammi, ciascuno dei quali corrisponde non a un suono (come una lettere) ma
ad un intero concetto o parola. E’ necessaria allora una codifica che usi almeno 16 bit (65536 caratteri).
Nel 1991 è stato istituito il consorzio Unicode per definire uno standard a 16 bit internazionale
noto come codice Unicode. Il set di caratteri Unicode comprende le lettere di tutti gli alfabeti,
molti simboli speciali e ideogrammi; se un elemento appartiene a più lingue compare una volta
sola; questo vale anche per l’insieme degli ideogrammi, indicato con la sigla CJK (cinese,
giapponese,coreano) ricavato dai nomi delle tre lingue principali; in questo modo si riduce il
numero degli elementi da codificare.
I primi 128 caratteri sono identici a quelli dell’ISO 646 e i primi 256 all’ISO 8859-1. (standard ISO
Latin-1). Tuttavia, poiché ogni carattere Unicode è codificato con 16 bit, lo standard Unicode non
è strettamente compatibile con le codifiche a 8 bit; per esempio il codice Unicode della lettere A
è 0041h mentre l’ASCII è 41h.
La codifica dei caratteri Unicode è nota come UCS-2 (Universal Character Set a 2 byte). Il codice
Unicode è usato dai sistemi operativi Windows per la memorizzazione dei nomi dei file e per
l’inserimento di simboli nei documenti, e da Java per la codifica di tutti i caratteri.
Nel 1991 è stato istituito il consorzio Unicode per definire uno standard a 16 bit internazionale noto come codice Unicode. Il set di caratteri Unicode comprende
le lettere di tutti gli alfabeti, molti simboli speciali e ideogrammi; se un elemento appartiene a più lingue compare una volta sola; questo vale anche per
l’insieme degli ideogrammi, indicato con la sigla CJK (cinese, giapponese,coreano) ricavato dai nomi delle tre lingue principali; in questo modo si riduce il numero
degli elementi da codificare.
I primi 128 caratteri sono identici a quelli dell’ISO 646 e i primi 256 all’ISO 8859-1. (standard ISO Latin-1).
Tuttavia, poiché ogni carattere Unicode è codificato con 16 bit, lo standard Unicode non è strettamente compatibile con le codifiche a 8 bit; per esempio il codice
Unicode della lettere A è 0041h mentre l’ASCII è 41h.
La codifica dei caratteri Unicode è nota come UCS-2 (Universal Character Set a 2 byte). Il codice Unicode è usato dai sistemi operativi Windows per la
memorizzazione dei nomi dei file e per l’inserimento di simboli nei documenti, e da Java per la codifica di tutti i caratteri.
Nel 1993 l’ISO ha definito un nuovo standard ISO 10646 e la relativa codifica UCS-4. Vengono usati 4 byte, con il primo bit a 0, cioè 31 bit effettivi. Il 10646 è il
set di caratteri indicato nella specifica del linguaggio HTML 4.0.
Esempio di Unicode per caratteri cuneiformi
Esercizio 1
Si desidera salvare su file in formato ASCII (ISO-8859-1) un testo di 100 pagine, ognuna composta
da 50 righe di 69 caratteri. Ogni riga e terminata dal carattere LF ed ogni pagina è terminata dal carattere FF. Calcolare la dimensione del file espressa in kB.
[ 341.9 kB ]
Un carattere ASCII è codificato su 8 bit, ovvero un byte, sia esso un carattere di testo o uno di controllo (es. i caratteri LF e FF citati nel problema). Una pagina
occupa quindi: [50 ·(69+1)] +1 = 3501 Byte.
Moltiplicando per il numero di pagine ed applicando il fattore di scala per i KByte, si ottiene la dimensione del file:
Dimensione file = 3501 · 100= 341.9 kB
Esercizio 2
Su una cartella da 1.44 MB si devono scrivere i dati relativi agli studenti di una scuola. Ad ogni studente corrisponde un file che contiene i seguenti dati:
• cognome (32 caratteri ASCII)
• nome (32 caratteri ASCII)
• data di nascita (GGMMAAAA codificata in BCD)
• matricola (numero intero di 6 cifre codificato in ASCII)
30 - Tecno1 rel. 17.03.17
Calcolare il numero massimo di studenti i cui dati possono essere scritti sulla cartella. [ 20404 studenti ]
Un carattere ASCII e codificato su 8 bit, ovvero un byte. Una cifra decimale in codifica BCD occupa 4 bit. Una cifra decimale rappresentata in ASCII necessita di un
carattere. Ne consegue: 32 · 1 B +32 · 1 B+8 · 0.5 B+6 · 1 B = 74 Byte/studente
1.44 · MB / 74 =20,404.7 studenti = 20,404 studenti
Esercizio 3
Si desidera salvare su file in formato Unicode con codifica UTF-8 un testo in lingua Italiana composto da 20000 caratteri. Sapendo che in Italiano la frequenza
media delle lettere accentate e il 5%, stimare la dimensione del file espressa in kB. [ 20.5 KB ]
La codifica UTF-8 richiede da 1 a 4 byte per carattere, a seconda del tipo. I caratteri presenti nell’alfabeto ASCII a 7 bit (tra cui ricadono i normali caratteri Italiani)
richiedono un byte, mentre i caratteri con simboli diacritici (tra cui ricadono i caratteri accentati Italiani) richiedono due byte.
(5% => 1000 * 2= 2000 byte accentati)
19000 + 2000 = 21000 21000/1024=20.5Kbyte
Codice QR
testo “Tecno 1”:
“Un Codice QR è un bidimensionale a , composto da moduli neri
disposti all'interno di uno schema di forma quadrata. Viene
impiegato per memorizzare informazioni generalmente destinate
ad essere lette tramite un o uno . In un solo crittogramma sono
contenuti 7.089 caratteri numerici e 4.296 alfanumerici. Il nome
QR è l'abbreviazione dell' quick response (risposta rapida), in virtù
del fatto che il codice fu sviluppato per permettere una rapida
decodifica del suo contenuto” (Wikipedia). Per approfondimenti si
veda:
31 - Tecno1 rel. 17.03.17
codifica di immagini e suoni
Immagini
Lettere e numeri non costituiscono le uniche informazioni utilizzate dagli elaboratori, ma molte applicazioni utilizzano ed elaborano anche altri tipi di
informazione: diagrammi, immagini, suoni.
Spesso in questi casi si parla di applicazioni di tipo multimediale.
(Per un approfondimento si veda: )
_
Non sempre il contorno della figura coincide con le linee della griglia. Quella che si ottiene nella codifica è un'approssimazione della figura originaria
_
La rappresentazione sarà più fedele all'aumentare del numero di pixel, ossia al diminuire delle dimensioni dei quadratini della griglia in cui è suddivisa l'immagine
risoluzione dell’immagine.
Assegnando un bit ad ogni pixel è possibile codificare solo immagini senza livelli di chiaroscuro. Le immagini in bianco e nero hanno delle sfumature (diversi livelli
di intensità di grigio).
Per codificare le immagini con diversi livelli di grigio si stabilisce per ogni pixel il livello medio di grigio, cui viene assegnata convenzionalmente una
rappresentazione binaria. Per memorizzare un pixel non è più sufficiente un solo bit. Ad esempio, se utilizziamo quattro bit possiamo rappresentare 24 = 16 livelli
di grigio, mentre con otto bit ne possiamo distinguere 28 = 256, ecc.
Analogamente possiamo codificare le immagini a colori. In questo caso si tratta di individuare un certo numero di sfumature di colore differenti e di codificare
ogni sfumatura mediante un'opportuna sequenza di bit.
La rappresentazione di un'immagine mediante la codifica dei pixel, viene chiamata codifica bitmap e l’immagine viene detta discretizzata.
Il numero di byte richiesti dipende dalla risoluzione e dal numero di colori che ogni pixel può assumere.
I monitor utilizzano, ad esempio, risoluzioni di 640X480, 1024X768, oppure 1280X1024 ed un numero di colori per pixel che va da 256 fino a sedici milioni di
colori. Per distinguere 256 colori sono necessari otto bit per la codifica di ciascun pixel: la codifica di un'immagine formata da 640X480 pixel richiederà 2.457.600
bit (307.200 byte). Esistono delle tecniche di compressione delle informazione che consentono di ridurre drasticamente lo spazio occupato dalle immagini.
Le immagini in movimento vengono memorizzazione mediante sequenze di fotogrammi (sono necessarie delle tecniche per ottimizzare tale memorizzazione).
32 - Tecno1 rel. 17.03.17
Grafica Digitale
Digital graphic images can be divided into one of two fundamental types:
Vector Graphics and Raster Graphics (bitmap, pixel).
Raster Graphics (commonly called bitmap images) are made of pixels. Photographs are an example of a bitmap image. They have a fixed resolution
and cannot be resized larger without losing quality.
Common bitmap file formats end in: .gif .jpg .png .tiff & .bmp
Bitmap images typically have much larger file sizes than the same image as a vector graphic so they are often compressed to reduce their size. Bitmap images
can be converted from one format to another with programs such as Photoshop.
Vector Graphics are images that have been created in a drawing program such as Adobe Illustrator. They use paths to create lines and curves at connecting points called "nodes" to store the graphic's information mathematically. Vector art is resolution independent; whether you enlarge or shrink the image,
the output quality is never compromised. This is why logos should always be created in vector art format. Common file formats for vector art used in the commercial printing industry include: .ai .esp & .pdf
A common public misconception is that using “ > SAVE AS” and saving to another file format will somehow fix the problem. Pixel-based raster art will always be
made out of pixels regardless of what file format one save the image as. It is possible to convert raster art into vector with methods such as “LIVE TRACE” in
Adobe Illustrator, but the results are usually less than satisfcactory when used on a corporate logo.
Grafica Raster (bitmap)
http://it.wikipedia.org/wiki/Grafica_bitmap
La grafica bitmap, o grafica raster (in inglese bitmap graphics, raster graphics), è una tecnica utilizzata in computer grafica per descrivere un'immagine.
Nella grafica raster l'immagine viene vista come una scacchiera e ad ogni elemento della scacchiera, chiamato pixel, viene associato uno specifico colore.
Il colore può essere definito con due tecniche: se l'immagine contiene pochi colori (massimo 256) si crea un elenco dei colori da utilizzare e nella scacchiera
viene inserito l'indice che punta allo specifico colore del pixel;nel caso si vogliano utilizzare molti più colori il singolo pixel non definisce più l'indice a una
tavolozza di colori ma definisce il colore direttamente.
Il colore viene definito come un'unione delle componenti blu, rossa e verde.
Rappresentazione dei colori
Base fisiologica: un colore visibile all'occhio umano può essere descritto da una composizione di luce
rossa, verde, blu (colori primari)
Modello additivo di colore RGB (Red Green Blue):
– un dato colore è descritto dalla combinazione delle intensità dei tre colori primari
– associando un numero a ciascun livello di intensità, è possibile definire una rappresentazione digitale di un colore
33 - Tecno1 rel. 17.03.17
aumentando il numero di pixel , l’immagine migliora
La bitmap è caratterizzata da due proprietà:
risoluzione; numero di pixel per pollice (equivalente a 2,54 cm); si misura in PPI (Pixel Per Inch) oppure in DPI (Dot Per Inch, Punti per pollice).
profondità di colore. numero di bit , associati a ogni pixel, usati per descrivere il colore. Si misura in BPP (Bit Per Pixel); maggiore è il numero di bit, maggiore è il
numero di colori che è possibile descrivere.
(http://www2.ing.unipi.it/~a009395/corsi/ig/pdf/Rappresentazione%20delle%20immagini.pdf )
NOTA
Risoluzione di un dispositivo di uscita (p.e. monitor, stampante):
– numero di pixel per unità di misura lineare (p.e. pollice), ppi (pixel per inch), dpi (dots per inch)
Risoluzioni tipiche
Monitor: 72-100 dpi
Stampante: 2400-4800 dpi Scanner: 2400 dpi
Dimensioni fisiche assolute di un’immagine raster (in pollici) = Dimensione lineare in punti/risoluzione in punti per pollice
Es: immagine 1024x768 punti, risoluzione 300 dpi
– Larghezza= 1024/300 = 3.41 inch
– Altezza= 768/300 = 2.56 inch
I dati raster possono essere memorizzati attraverso tipologie di file che sfruttano algoritmi di compressione diversi, gravando in modo differente sul supporto di
memorizzazione. I formati raster più comuni sono i seguenti:
Formati di immagini raster
Questi formati di file hanno richieste di elaborazione minima, non essendo necessari algoritmi di compressione (in fase di scrittura) e decompressione (in fase di
lettura), tuttavia, mancando di compressione, risultano particolarmente voluminosi, in termini di spazio occupato su disco (o altro dispositivo di
memorizzazione), rispetto agli altri formati:
(in alcuni casi i file bmp sono compressi con un algoritmo )
compressione lossless (senza perdita di informazione)
Le immagini salvate con un di occupano meno spazio nei dispositivi di memorizzazione, mantenendo inalterata tutta l'informazione originale:
(certe applicazioni permettono anche la scrittura di file png non compressi)
(sebbene questo sia l'uso più comune, questo formato permette diversi tipi di compressione)
(per immagini fino a 256 colori)
compressione lossy (con perdita di in formazione)
Le immagini memorizzate con un algoritmo di compressione subiscono una perdita di informazione; pertanto questa tecnica non è adatta per salvare le
immagini che vengono rielaborate coi programmi di fotoritocco (le continue modifiche comporterebbero un progressivo degrado dell'immagine ad ogni
salvataggio e riapertura); invece, in virtù delle ridotte dimensioni del file, sono particolarmente indicate per la trasmissione di immagini o per ridurre le
dimensioni di un'applicazione o di un prodotto da distribuire.
(per immagini con più di 256 colori si ottiene una compressione lossy poiché vengono eliminate la maggior parte delle sfumature di colore)
Grafica vettoriale
Un'immagine descritta con la grafica vettoriale è chiamata immagine vettoriale.
Nella grafica vettoriale un'immagine è descritta mediante un insieme di che descrivono punti, , e ai quali possono essere attribuiti colori e anche sfumature. È
radicalmente diversa dalla in quanto nella grafica raster le immagini vengono descritte come una griglia di opportunamente colorati.
L'elemento base della grafica vettoriale sono gli elementi geometrici:

linee
34 - Tecno1 rel. 17.03.17

curve

aree
Quali elementi siano disponibili per il disegno, e quali siano le loro proprietà specifiche, è definito da un linguaggio – ne esistono molti.
Un disegno in grafica vettoriale può essere visto come un insieme di istruzioni (immagine) rivolte a un disegnatore (motore di rendering) ed espresse in un dato
linguaggio (formato).
Di ciascun elemento è data una rappresentazione matematica astratta (equazioni). Le varie parti che compongono l'immagine sono separabili .
Esempio:

varie curve chiuse

aree interne colorate

linee di confine (bordi) visibili o meno
Il caso più semplice è quello in cui la “curva” è in realtà formata da una sequenza di segmenti di retta. Tuttavia, questa approssimazione è troppo grossolana se la
curva viene ingrandita o manipolata. Analogamente avviene per l'approssimazione di un cerchio con un poligono con un numero elevato di lati:
Si usano quindi delle reali curve (in senso matematico): funzioni parametriche di tipo analitico; le funzioni parametriche hanno un valore che varia al variare di un
parametro t ; al momento del disegno, il motore di rendering calcola le equazioni e disegna la curva corrispondente.
Il caso più semplice è quello della retta. Il segmento di retta fra due punti P0 e P1 è definito dall'equazione nella figura sotto. Va notato che P0 e P1 sono due
vettori, ovvero coppie [x y] – t è invece un numero reale; la moltiplicazione si effettua con entrambe le componenti
equazione di una retta
La grafica vettoriale, essendo definita attraverso equazioni matematiche, è indipendente dalla risoluzione, mentre la grafica raster, se viene ingrandita o
visualizzata su un dispositivo dotato di una risoluzione maggiore di quella del monitor, perde di definizione.
Una linea che percorre lo schermo trasversalmente se viene rappresentata utilizzando la grafica raster viene memorizzata come una sequenza di pixel colorati
disposti a formare la linea. Se si provasse ad ingrandire una sezione della linea si vedrebbero i singoli pixel che compongono la linea. Se la medesima linea fosse
memorizzata in modo vettoriale la linea sarebbe memorizzata come un'equazione che parte da un punto identificato con delle coordinate iniziali e termina in un
altro punto definito con delle coordinate finali. Ingrandire una sezione della linea non produrrebbe artefatti visivi o la visualizzazione dei singoli pixel componenti
l'immagine, dato che la linea sarebbe visualizzata sempre con la massima risoluzione consentita dal monitor.
Ad esempio, prendendo un'immagine vettoriale grande 2x24 pixel e aumentando la risoluzione fino a 1024x768, si otterrà una immagine che ha la stessa
definizione di quando era 2x24. Se noi procediamo con lo zoom su di un file di tipo bitmap adattato a 800x600 px e lo ingrandiamo a 1024x768 px la definizione
risulta inferiore, questo perché il processore non ricalcola la definizione dell'immagine come succede nelle immagini vettoriali ma utilizza le stesse informazioni
(pixel) dell'immagine su una superficie maggiore. (https://it.wikipedia.org/wiki/Grafica_vettoriale)
Semplificando, possiamo dire che una linea retta nera in formato vettoriale verrà descritta da una formula che, volgarizzando, suonerà più o meno così:
“dal punto (x,y) parte una linea di colore nero che termina al punto (x,z)”.
La stessa linea retta in formato bitmap avrà una descrizione che suonerà invece così:
“il punto (x,y) è nero, il punto (x,a) è nero, il punto (x,b) è nero...” e così via, fino al raggiungimento del termine della linea: viene cioè descritta la dislocazione di
tutti i singoli punti che costituiscono l'immagine, con il loro relativo valore di colore.
La grafica vettoriale ha un notevole utilizzo nell'editoria, nell'architettura, nell'ingegneria e nella grafica realizzata al computer. Tutti i programmi di grafica
tridimensionale salvano i lavori definendo gli oggetti come aggregati di primitive matematiche. Nei personal computer l'uso più evidente è la definizione dei font.
Quasi tutti i font utilizzati dai personal computer vengono realizzati in modo vettoriale, per consentire all'utente di variare la dimensione dei caratteri senza
perdita di definizione.
35 - Tecno1 rel. 17.03.17
Suoni
Anche i suoni possono essere rappresentati informa digitale
Dal punto di vista fisico un suono è un'alterazione della pressione dell'aria che, quando rilevata dall'orecchio umano, viene trasformata in un particolare stimolo
al cervello
La durata, l'intensità e la variazione nel tempo della pressione dell'aria sono le quantità fisiche che rendono un suono diverso da ogni altro
Un suono può essere descritto mediante l’onda di pressione che rappresenta la variazione della pressione dell’aria nel tempo.
Sull’asse delle ascisse viene rappresentato il tempo e sull’asse delle ordinate viene rappresentata la pressione corrispondente al suono stesso.
La conversione di un segnale continuo in una successione di numeri viene eseguita con due successive operazioni elementari
_
1. Campionamento del segnale (cioè si preleva una successione di campioni a intervalli costanti di tempo)
2. Ogni campione viene quantizzato, ossia convertito in un numero (si codificano in forma digitale le informazioni estratte dal campionamento)
•
1.
Esercizi riepilogativi
Hai ricevuto un messaggio di posta elettronica da un amico. Il messaggio contiene:
1.
un testo di 300 caratteri scritto in ASCII,
2.
un'immagine di 120x150 pixel con 1024 colori.
Quanti byte occupa il messaggio?
Testo: 300 byte. Immagine: ogni pixel richiede 10 bit (perché 210=1024); l'immagine ha 120 x 150 = 18000 pixel; l'immagine occupa 10 x 18000 =
180000 bit = 22500 byte. Testo + immagine: 300 + 22500 = 22800 byte
2.
Un'immagine di 300x400 pixel occupa 15000 byte. L'immagine è a colori oppure in bianco e nero?
L'immagine ha 300 x 400 = 120000 pixel, ed occupa 15000 x 8 = 120000 bit. Cioè ad ogni pixel corresponde a un bit, e l'immagine è in bianco e nero
3.
Quanto spazio occupa un'immagine animata di 100x100 pixel a 128 colori, formata da 6 frame?
Ogni frame ha 100 x 100 = 10000 pixel; ogni pixel richiede 7 bit (perché 27=128); ogni frame occupa 10000 x 7 = 70000 bit; l'immagine animata occupa
70000 x 6 = 420000 bit (= 52500 byte)
Codifica dei caratteri

Quanti byte occupa i testi seguenti scritti in Extended ASCII?
o
cervello
8
o
dipartimento di psicologia
26
o
[email protected]
20
Codifica delle immagini
1.
Un'immagine in bianco e nero è formata da 400x400 pixel. Quanti bit occupa l'immagine? Quanti byte occupa l'immagine?
Ogni pixel richiede un bit (perché l'immagine è in bianco e nero); l'immagine ha 400 x 400 = 160000 pixel; l'immagine occupa 160000 bit; 160000 bit =
20000 byte
2.
Un'immagine a 256 colori è formata da 400x400 pixel. Quanti byte occupa l'immagine?
Ogni pixel richiede un byte (=8 bit, perché 28=256, sufficiente per rappresentare 256 colori); l'immagine ha 400 x 400 = 160000 pixel; l'immagine occupa 160000 byte
36 - Tecno1 rel. 17.03.17
3.
Un'immagine a 16777216 colori è formata da 100x100 pixel. Quanti byte occupa l'immagine?
Ogni pixel richiede 3 byte (perché 224=16777216, sufficiente per rappresentare 16777216 colori); l'immagine ha 100 x 100 = 10000 pixel; l'immagine
occupa 30000 byte
4.
Hai ricevuto un messaggio di posta elettronica da un amico. Il messaggio contiene:
o
un testo di 300 caratteri scritto in Extended ASCII,
o
un'immagine di 120x150 pixel con 1024 colori.
Quanti
byte
occupa
il
messaggio?
Testo: 300 byte. Immagine: ogni pixel richiede 10 bit (perché 2 10=1024); l'immagine ha 120 x 150 = 18000 pixel; l'immagine occupa 10 x 18000 =
180000 bit = 22500 byte. Testo + immagine: 300 + 22500 = 22800 byte
5.
Un'immagine di 300x400 pixel occupa 15000 byte. L'immagine è a colori oppure in bianco e nero? Nel caso in cui l'immagine è a colori, quanti colori
ha l'immagine?
L'immagine ha 300 x 400 = 120000 pixel, ed occupa 15000 x 8 = 120000 bit. Cioè ad ogni pixel corresponde a un bit, e l'immagine è in bianco e nero
6.
Un'immagine di 500x500 pixel occupa 250000 byte. L'immagine è a colori oppure in bianco e nero? Nel caso in cui l'immagine è a colori, quanti colori
ha l'immagine?
L'immagine ha 500 x 500 = 250000 pixel, ed occupa 250000 x 8 = 2000000 bit. Cioè ad ogni pixel corresponde a 2000000/250000 = 8 bit, e l'immagine
ha 28=256 colori (la prima soluzione dato su questa pagina era erratta)
7.
Un'immagine di 100x200 pixel occupa 10000 byte. L'immagine è a colori oppure in bianco e nero? Nel caso in cui l'immagine è a colori, quanti colori
ha l'immagine?
L'immagine ha 100 x 200 = 20000 pixel, ed occupa 10000 x 8 = 80000 bit. Cioè ad ogni pixel corresponde a 80000/20000 = 4 bit, e l'immagine ha 2 4=16
colori
Codifica dei suoni
1.
Quanti byte occupa un suono della durata di 5 secondi campionato a 30 Hz (30 campioni per secondo), in cui ogni campione occupa 6 byte?
5 x 30 x 6 = 900 byte
2.
Un secondo di suono campionato a 512 Hz occupa 1 KB. Quanti valori distinti possono avere i campioni?
1 KB = 1024 byte; numero di campioni = 1 x 512 = 512; ogni campione contiene 1024/512 = 2 byte; 2 byte = 16 bit; 2 16 valori distinti
Compressione dati
Ottimizzazione dei messaggi
(tratto da Marcello Guidotti, 1999-2003)
Supponiamo di voler insegnare ad una scimmia il linguaggio gestuale in modo da farle scegliere di volta in volta il cibo che desidera mangiare: banane, budino,
arachidi, torta di lamponi. Un modo semplice è insegnare alla scimmia due segnali per comunicare i propri desideri: per esempio, alzare la mano sinistra oppure
la destra (codifica 1 di tab. I). Ognuno di questi due segnali fornisce l'informazione di 1 bit (il più piccolo segnale richiesto per comporre il messaggio).
cibo
banana
budino
torta
frequenza
9
6
2
codifica 1
D
S
DD
codifica 2
DD
DS
SS
codifica 3
D
SD
SSD
arachidi
1
DS
SD
SSS
tab. I
Ben presto, però, con questa codificazione si incontrerebbero le prime difficoltà di interpretazione. Supponiamo che la scimmia alzi tre volte la mano destra
(DDD). Che cosa significa? Vuole tre banane, oppure una banana e due fette di torta? Certo, si potrebbe ovviare aggiungendo un segnale di interruzione fra un
messaggio e l'altro: ad esempio toccarsi la fronte con la mano destra. Ma questo sarebbe un terzo segnale e noi vogliamo utilizzarne solo due (praticamente il
numero zero ed il numero 1).
Convenendo di indicare ogni cibo con due alzate di mano (codifica 2 di tab. I), la scelta diventa inequivocabile. La sequenza DDSDSSSS significa: una banana, una
busta di arachidi, due porzioni di torta. In base a questa convenzione, possiamo affermare che ogni singola richiesta della scimmia comporta due segnali ossia 2
37 - Tecno1 rel. 17.03.17
bit d'informazione, mentre per il menù completo (4 portate) occorrono 8 bit. Questa codificazione è efficiente (raggiunge il risultato) ma non è detto che sia
efficace (raggiunge il risultato nel miglior modo possibile).
Se osserviamo le richieste della scimmia nell'arco di una settimana, potremmo ad esempio constatare che le arachidi non sono il cibo preferito dalla scimmia,
mentre lo sono le banane. In altre parole, il segnale SD (arachidi) si presenta molto raramente, mentre il segnale DD (banane) è assai frequente. Di questo fatto
bisogna tener conto per una codificazione ottimale. Supponiamo di aver constatato che la scimmia mangi ogni giorno nove banane, sei porzioni di budino, due
fette di torta, una busta di arachidi.
Per rendere la codificazione ottimale, l'ordinazione delle banane deve essere individuata con un segnale quanto più possibile breve. Invece, il segnale per
l'ordinazione delle arachidi potrebbe essere più lungo. Nel corso di una giornata, la scimmia consuma 18 portate le quali, nella efficiente codificazione 2 di tab.I,
richiedono 36 segnali, ossia 36 bit.
Supponiamo di codificare le banane con l'alzata della mano destra: segnale D. Per evitare l'ambiguità nella scelta del prossimo cibo, il prossimo segnale deve
essere SD. Infatti, in una sequenza di segnali, la combinazione DD farebbe sorgere il dubbio che fossero desiderate due volte banane. Anche DS potrebbe in
qualche modo lasciare una certa ambiguità. Insomma, con un pò di tentativi (in pratica con la codifica Huffman), si può costruire la codificazione 3 di tab. 1.
L'ordinazione di 9 banane al giorno richiede ora soltanto 9 bit, contro i 18 bit della precedente codificazione. In più, sono da aggiungere quotidianamente 12 bit
per le 6 porzioni di budino, 6 bit per le 2 fette di torta, 3 bit per la busta di arachidi. In totale 30 bit in confronto ai 36 della codificazione: questa nuova
codificazione è senz'altro efficiente, ed è anche più efficace della codificazione 2. Al contrario, la codificazione 1, pur richiedendo solo 21 bit, si presta ad
equivoci, quindi non è efficiente e dunque è da scartare.
Quanto accennato è sufficiente per comprendere come sia possibile compattare i files di dati e programmi riducendone le dimensioni. Sono in commercio
programmi (uno dei più noti è WINZIP) che permettono facilmente di effettuare la compressione. Con lo stesso principio funzionano i programmi che permettono
di aumentare lo spazio su disco: i dati vengono compressi durante il loro salvataggio e quindi decompressi durante la lettura; è ovvio che il tempo di accesso ai
dati aumenta in conseguenza delle operazioni di codifica-decodifica, ma il continuo aumento della velocità di elaborazione dei processori, rende l'operazione
interessante.
A questo punto, ci si potrebbe chiedere la ragione per cui i messaggi non sono già codificati nel modo più efficace. La risposta è semplice: non tutti i segnali si
presentano con la stessa frequenza. In realtà, i programmi di compressione sono essenzialmente basati sullo schema visto sopra, relativo alla codifica Huffman, in
cui, prima che un programma sottoponga un file di dati (dati alfanumerici e/o immagini) a compressione, esegue un controllo statistico sulla frequenza degli
elementi componenti il messaggio. Per esempio, la stringa "aaaaaaaaaaaaaaaaaaaaa" sarà compressa con un fattore del 67% circa, ma la stringa
"abcdefghilmnopqrstuvz" non potà essere compressa!
Possiamo percio’ dire che la compressione dati è il processo che trasforma un certo insieme di dati in una rappresentazione piu' piccola, dalla quale, è possibile
(con la decompressione) risalire all'originale.
Le applicazioni piu' comuni riguardano non solo la memorizzazione dei file di dati ma anche la loro trasmissione: non solo testo (zip) e immagini (jpg, gif) ma
anche filmati (mpeg) e musica (mp3). Se un file viene ad ex. compresso con fattore 2 allora la velocità della linea apparirà duplicato! Non tutti le fonti di dati
possono essere compresse, come ad esempio i dati casuali (ad ex. un file .exe) o i dati già compressi in modo ottimale. Inoltre non si puo' affermare con certezza
che una stessa compressione raggiunga lo stesso risultato su diversi tipi di dati.
Esistono vari algoritmi di compressione dati. Essi possono essere distruttivi se perdono parte del contenuto informativo o non distruttivi se mantengono
inalterato il contenuto informativo. Essi si possono classificare in classi:
Tecniche non distruttive (senza perdita di informazione)
Algoritmi di compressione che operano con codici di lunghezza fissa.
Sono algoritmi basati su approcci di forza bruta (brute force) come ad ex. la NULL COMPRESSION (una delle prime tecniche usate) in cui l'idea è quella di scandire
i dati alla ricerca del carattere spazio (blank). Il primo carattere è un indicatore di compressione , il secondo rappresenta il numero di blank compressi. Ad ex.:
stringa originaria: CIAO
MAMMA
stringa compressa: CIAO^8MAMMA
dove ^ è il carattere di compressione e 8 il numero di blanks
Molte sono le varianti di questa compressione con miglioramenti aggiustamenti

Bit Mapping in cui viene aggiunta una mappa di bit all' inizio della stringa che sta a indicare la presenza di blank : 1 bit => 1 blank

Run Lenght Encoding in cui una serie di generici simboli sono rimpiazzati dal simbolo stesso preceduto dal numero di repliche . Ad ex. AAABBCCC:
3A2B3C etc)

Modulazione a impulsi differenziali (DPCM) L' idea consiste nel produrre un simbolo di riferimento seguito dalla distanza del simbolo da quello di
riferimento.. Ad ex AAABBCCCDD: A001122233. In questo caso la distanza puo' essere codificata con soli 2 bit (0,1,2,3) al posto di 8 bit per carattere.
Cio' è utile ad ex. per immagini dove le "distanze" tra pixel adiacenti sono piccole perchè i pixel spesso sono simili.
Algoritmi di compressione statici
che, basandosi sulla frequenza di occorrenza di ogni carattere o gruppo di caratteri che compaiono nel
testo, assegnano codici lunghi ai caratteri che vengono usati raramente e codici brevi ai caratteri maggiormente frequenti. In questo modo, mediamente, i
messaggi ottenuti saranno codificati in modo piu' corto.
Ad ex. lo stesso codice Morse assegna alle lettere E e T , che sono molto comuni nella lingua inglese, i codici . e linea rispettivamente, mentre i famosi ... --- ...
corrispondono a SOS , lettre molto meno frequenti.
Il metodo, di tipo statico, piu' popolare e noto è la Codifica di Huffman il cui vantaggio principale è quello di ridurre la lunghezza media del codice utilizzando un
38 - Tecno1 rel. 17.03.17
prefisso scelto in modo tale che non possa mai essere lo stesso per sequenze piu' lunghe.
Quest'algoritmo non distruttivo fu inventato nel 1952 dal matematico D.A. Huffman ed è un metodo di compressione particolarmente ingegnoso.
David A. Huffman ( – ).
Durante la sua vita, Huffman ha dato contributi significativi allo studio delle macchine a stati finiti, dei circuiti di
commutazione, nelle procedure di sintesi e nella progettazione dei segnali. Tuttavia, David Huffman è più noto per la
leggendaria , un algoritmo di compressione per la codifica lossless (senza perdita di dati) di lunghezza variabile. È il
risultato di una tesi scritta quando era dottorando presso il nel 1953. (wikipedia)
Funziona in questo modo:

Analizza il numero di ricorrenze di ciascun elemento costitutivo del file da comprimere: i singoli caratteri in un file di testo, i pixel in un file
grafico.

Accomuna i due elementi meno frequenti trovati nel file in una categoria-somma che li rappresenta entrambi. Così ad esempio se A ricorre 8
volte e B 7 volte, viene creata la categoria-somma AB, dotata di 15 ricorrenze. Intanto i componenti A e B ricevono ciascuno un differente
marcatore che li identifica come elementi entrati in un'associazione.

L'algoritmo identifica i due successivi elementi meno frequenti nel file e li riunisce in una nuova categoria-somma, usando lo stesso procedi mento descritto al punto 2. Il gruppo AB può a sua volta entrare in nuove associazioni e costituire, ad esempio, la categoria CAB. Quando ciò
accade, la A e la B ricevono un nuovo identificatore di associazione che finisce con l'allungare il codice che identificherà univocamente ciascu na delle due lettere nel file compresso che verrà generato.

Si crea per passaggi successivi un albero costituito da una serie di ramificazioni binarie, all'interno del quale appaiono con maggiore frequen za e in combinazioni successive gli elementi più rari all'interno del file, mentre appaiono più raramente gli elementi più frequenti. In base al
meccanismo descritto, ciò fa sì che gli elementi rari all'interno del file non compresso siano associati ad un codice identificativo lungo, che si
accresce di un elemento ad ogni nuova associazione. Gli elementi invece che si ripetono più spesso nel file originale sono anche i meno pre senti nell'albero delle associazioni, sicché il loro codice identificativo sarà il più breve possibile.

Viene generato il file compresso, sostituendo a ciascun elemento del file originale il relativo codice prodotto al termine della catena di asso ciazioni basata sulla frequenza di quell'elemento nel documento di partenza.
Il guadagno di spazio al termine della compressione è dovuto al fatto che gli elementi che si ripetono frequentemente sono identificati da un codice breve, che
occupa meno spazio di quanto ne occuperebbe la loro codifica normale.
Consideriamo ad esempio il caso mostrato in figura di 4 simboli K1,K2,K3 e K4 che vengono sistemati in base alla loro frequenza di occorrenza in una struttura ad
albero in cui i simboli piu' frequenti sono in alto. I due simboli a minor frequenza (K3 e K4) vengono uniti in un nodo con frequenza 0.25.Tale nodo viene poi
unito al simbolo meno frequente tra i rimasti (K2) generando un nuovo nodo a frequenza 0.4375, che viene poi unito a K1 generando un nodo con frequenza 1.
Assegnando 0 e 1 ad ogni segmento dell'albero a partire da destra (radice) si ottiene il codice di Huffman per ogni carattere.
La caratteristica del codice è quella di poter essere decodificata immediatamente.
Messaggio
Codificato
0
10
0
111
10
110 10
0
Messaggio
decodificato
K1
K2
K1
K4
K2
K3
K1
K2
Consideriamo un altro esempio: la frase: TRENTATRE TRENTINI ANDARONO A TRENTO
1) OCCORRENZE
2) ASSOCIAZIONI
E=4
E=4
A=4
A=4
N=6
O=3
A=4
N=6
D=1
AE = 8
N=6
R=5
AE = 8
R_ = 9
E=4
AET = 15
N=6
T=7
AET = 15
N=6
I=2
AET = 15
R=5
_=4
R_ = 9
N=6
DI = 3
R_ = 9
DIO = 3
O=3
DIO = 3
R=5
DIO = 3
T=7
DIO = 3
T=7
DION = 12
R=5
DIONR_ = 21
T=7
39 - Tecno1 rel. 17.03.17
_=4
T=7
_=4
_=4
Questo codice è molto semplice e lineare ma si complica moltissimo se i simboli sono molti. Inoltre codifiche come questa si basano sulla conoscenza a priori dei
dati da comprimere e della loro frequenza relativa.
- Compressione Adattativa (basata sul dizionario). A differenza delle tecniche precedenti, che si basavano sulla conoscenza a priori dei dati, in questi algoritmi, il
dato che deve essere compresso viene analizzato man mano che sui presenta e vengono apportate le opportune modifiche alla tabella dinamica di compressione
In altre parole vengono create delle tabelle con contatori interni, relativi ai caratteri incontrati, che vengono continuamente aggiornati in funzione delle
occorrenze, variando di conseguenza i codici di compressione, in modo efficiente e indipendente da una analisi a priori del file da comprimere.
Tra le varie tecniche di compressione di questo genere il BTLZ (basato sugli studi di Lampel e Ziv 1976/78) è un algoritmo di compressione adattativo ottenuto
sostituendo stringhe di caratteri con codici di lunghezza fissa. Esso è divenuto popolare attraverso implementazioni e variazioni diverse per l'uso nella
compressione dati usata nei modem (cfr. V42bis). I processi di codifica e decodifica usano un dizionario nei quali sono memorizzate le stringhe aggiornate
dinamicamente. Il dizionario è costituito, nella sua essenza, da una serie di alberi ciascuno dei quali ha per radice uno specifico carattere dell'alfabeto usato: se
ad ex. i simboli base sono 256, tali saranno gli alberi. Un nodo senza figli rappresenta l'ultimo carattere della stringa. Ad ex, consideriamo l'albero in struttura e
confrontiamo la stringa "dei cani". Analizzando in successione si trovano già nell'albero i caratteri d,e,i ma non ' ' . In questo caso viene spedito il codice 202 e
viene aggiunto all'albero, dopo la i, il carattere ' ' e viene assegnato ad esso un nuovo codice( ad ex, 206).: la prossima volta che sarà incontrata la stringa "dei "
verrà inviato il codice 206. ù
Cioè, se viene trovata la stringa S ma non il carattere c , esso viene aggiunto nel dizionario a formare la nuova stringa S=S+c.
La lunghezza delle stringhe usate di frequente crescerà molto velocemente. Il decodificatore presenta una struttura analoga al codificatore e, ricevuto il codice,
procede nella lettura al contrario dei caratteri che poi vengono riordinati. Naturalmente ogni cambiamento nel dizionario dell'encoder procede di pari passo con
il decoder.
Tecniche distruttive (con perdita di informazione)
Descriviamo qui la tecnica JPEG (Joint Photographic Expert Group) codificata dall' ISO 10918, usata soprattutto nel mondo di Internet, per le immagini, Da essa
discendono le tecniche di MPEG (Moving Picture Expert Group) per i filmati e MP3 (MPEG Audio Layer 3) per i file musicali. JPEG è una tecnica basata su tre
macro-fasi successive:
Nella fase DCT (Discrete cosine transform) viene attuata una trasformazione simile alla FFT (Fast Fourier Transform) , in cui dallo spazio dei pixel si passa nello
spazio delle frequenze. L’idea di base della DCT consiste nel separare le caratteristiche principali, che sono essenziali per la visione dell’immagine, dai dettagli che
sono meno importanti e che in alcuni casi potrebbero non venire percepiti neppure dall’occhio.
In particolare, dopo la preparazione dell'immagine in cui ogni matrice di pixel è divisa in blocchi da 8x8, si applica la DCT a ognuno dei blocchi separatamente.
L'output è una matrice 8x8 di elementi in cui i coefficienti rappresentano la quantità di potenza spettrale per ogni frequenza e (0,0) il valor medio. Nella fase di
quantizzazione, tramite una tabella a pesi differenziati, vengono eliminati i coefficienti DCT con frequenze alte, cioè i meno importanti, quelli che cambiano
molto rapidamente e quindi immaginabili come valori non facenti parte del blocco dell'immagine in cui i valori cambiano lentamente. Viene quindi applicata una
codifica runlenght e poi Huffman, assegnando ai numeri piu' probabili, codici piu' brevi. In realtà jpeg è complesso ma realizza compressioni di 20:1 e piu', con
perdita di informazione che pero' è poco percepita dall'occhio.
40 - Tecno1 rel. 17.03.17
MP3
(MPEG layer 3) si basa sulla codifica percettiva, per cui alcuni suoni mascherano altri suoni e non sono percepiti dall'orecchio umano. I suoni vengono campionati
con un certo bit rate (96Kbps), filtrati e codificati con un numero maggiore di bit per le bande con maggior potenza spettrale non mascherata e applicata la
codifica di Huffman.
Un programma di compressione per il suono quindi si comporta come una sorta di orecchio informatico che trasforma prima il suono nel suo spettro e
successivamente toglie dallo spettro tutte le armoniche che non vengono percepite. Se consideriamo che si può eliminare oltre il novanta per cento delle
frequenze presenti in un suono ci rendiamo conto della potenza di questo metodo: un suono che in origine occupava undici megabyte, dopo la compressione di
tipo percettivo ne occupa solo uno e la perdita di qualità tra queste due rappresentazioni del suono è quasi indistinguibile.
( http://www.mediamente.rai.it/mediamentetv/learning/corsi/0001c3_2.asp#8)
A
B
(a) Lo spettro sonoro (realizzato con Audacity, http://www.audacityteam.org/ ) mostra i livelli sonori in funzione della frequenza. Mentre una singola frequenza è
mostrata nel grafico con una singola riga, per un suono, da una serie di righe in corrispondenza alle frequenze fondamentali e alle loro armoniche, per una musica
lo spettro è rappresentato da una banda (insieme) di frequenze. In questo esempio il massimo delle frequenza è intorno ai 12000Hz. Ricordiamo che l'insieme
delle frequenze udibili dall'orecchio umano si estende da circa 20Hz a 20KHz ma la zona in cui l’orecchio è più sensibile è tra i 2KHz e 5KHz.
(b) Draw-Disegna : con zoom vicino al livello massimo , consente di regolare il volume dei singoli campioni audio Permette di appianare il contorno dei campioni ,
in modo che un campione sia regolato opportunamente rispetto ai campioni vicini .
-
41 - Tecno1 rel. 17.03.17
Introduzione ai Sistemi Operativi
Cos’è un Sistema Operativo
L'accesso diretto all'hardware può essere anche molto complesso. Il Sistema Operativo è un programma che agisce da intermediario tra un utente di un
computer e l’hardware nascondendone la complessità e fornendo una macchina “gradevole” per l’utente.
Sistemi Operativi e Distribuiti- Bellettini – Maggiorini
Il Sistema Operativo perseguie i seguenti scopi:

Gestire le applicazioni (Eseguire programmi utente)
o
Il sistema operativo carica i programmi, le applicazioni, in RAM assicurandosi che le risorse siano sufficienti alla sua esecuzione.
Le API (Application Programming Interface) sono un insieme di linee guida utilizzate dagli sviluppatori per garantire che le applicazioni che
stanno sviluppando siano compatibili con il sistema operativo.

Gestire file e cartelle
o
Il sistema operativo crea una struttura di file sulla memoria di massa per memorizzare i dati. Un file è un insieme di dati correlati a cui è
dato un nome univoco e che viene trattato come singola componente.

Controllare e ottimizzare l’accesso alle risorse hardware.
o
Per fare questo il sistema operativo installa un driver per ogni componente hardware. Il driver è un software scritto dal produttore
dell'hardware e fornito insieme al componente hardware che viene istallato con la periferica per comunicare con essa. Il sistema operativo
configura il dispositivo e aggiorna, in Windows, il registro che contiene informazioni sull’ hardware, il software, gli utenti le impostazioni di
rete e i file

Fornire una interfaccia utente . Ci sono due tipi di interfacce utente:
o
Interfaccia a Linea di Comando (CLI, Command Line Interface) in cui l'utente digita i comandi
o
Interfaccia Utente Grafica (GUI, Graphical User Interface) in cui l'utente interagisce con menù ed icone
Quindi, scopo di un sistema operativo è quello di:
 fornire un ambiente in cui un utente possa eseguire programmi
 rendere l’uso di un sistema di elaborazione conveniente
 eseguire funzioni non utili a se stesso ma fornire un ambiente entro il quale i programmi dell’utente possano produrre un lavoro utile: è simile a un
governante.

distribuire risorse. Un sistema di elaborazione ha tante risorse che possono essere richieste da un programma applicativo: CPU, memoria, file,
42 - Tecno1 rel. 17.03.17

dispositivi di I/O, Il S.O. ha la funzione di manager: le assegna ai programmi che ne fanno richiesta, in base a determinati criteri (politiche di gestione).
controllare l’esecuzione dei programmi utente per prevenire eventuali errori, ed evitare un uso improprio del sistema di elaborazione.
Ci sono due tipi distinti di sistemi operativi: sistemi operativi desktop e sistemi operativi di rete. I primi sono impiegati in piccoli uffici o in ambiente domestico.
Tra essi ricordiamo Microsoft Windows, uno dei sistemi operativi più popolari. Apple Mac OS progettato per essere un sistema operativo dalla interfaccia utente
grafica (GUI) facile da usare.
Le versioni correnti di Mac OS attualmente sono basate su una versione adattata di UNIX.
“Un sistema operativo per dispositivi mobili, in inglese "mobile OS", è un sistema operativo che controlla un dispositivo mobile con lo stesso principio con cui
Mac OS, Unix, Linux o Windows controllano un desktop computer oppure un laptop.
Tuttavia affronta problematiche legate alla natura del dispositivo mobile, più critiche rispetto ad un desktop o un laptop; tra le tante: la limitatezza delle risorse
(memoria, CPU), l'assenza di alimentazione esterna, differenti tecnologie per l'accesso a Internet (WiFi, GPRS, HSDPA...), nuovi metodi d'immissione
(touchscreen, minitastiere), ridotte dimensioni del display.” (Wikipedia)
Produttore
OS
Famiglia di sistemi operativi
Architettura CPU supportata
Linguaggio di programmazione
Apple
iOS
macOS/Unix-like
ARM
C, C++,Objective C
Google Inc.
Android
Linux
ARM/MIPS
C, C++, Java
Microsoft
Windows Mobile
Windows Phone
Windows CE 5.2/Windows NT
ARM
C++,C#
UNIX/Linux.
Unix è stato introdotto alla fine degli anni '60. Linux è stato sviluppato da Linus Torvalds nel 1991 come sistema operativo open-source. Oggo “il «pinguino» è
però arrivato in realtà ovunque. In settori dove Windows invece latita. Troviamo Linux sulla maggior parte dei server aziendali e nei cosiddetti supercomputer: 9
«cervelloni» su 10 dei top 500 ha il marchio del «pinguino». Che ora marcia anche nell’elettronica di consumo: dalle smart tv alle videocamere di Sony, sul Kindle,
sui cellulari e i tablet con Android. Rimane solo il nodo del fallimento sui desktop.”
Tipi di SO:
Multi-user – Due o più utenti possono lavorare contemporaneamente con i programmi e condividere le periferiche, come ad esempio le stampanti.
Multi-tasking e Multithreading– Il computer è in grado di eseguire più applicazioni (task, processi) contemporaneamente e un processo può essere suddiviso
in parti più piccole (thread) caricate dal sistema operativo.
Multi-processing – Il computer può avere due o più CPU (Central Processing Unit), condivise dai programmi.
I Sistemi Opertaivi di Rete (NOS) supportano più utenti, esegue applicazioni multi-utente, sono robusti e ridondanti e fornisce maggior sicurezza . Tra i sistemi
operativi di rete più comuni ricordiamo Windows Server 2003 e 2008.
43 - Tecno1 rel. 17.03.17
Evoluzione
Prima generazione (1945-1955)
Valvole e schede a spinotti
La macchina analitica (Analytical engine in lingua inglese) è stato il primo prototipo di un computer meccanico sviluppato per eseguire compiti generici. Il
progetto fu sviluppato dal matematico, filosofo e scienziato inglese Charles Babbage (1791–1871), che cercò anche di realizzarlo praticamente .
Prima di lui Pascal, nel 1642, aveva realizzato la pascalina, uno strumento di calcolo precursore della moderna calcolatrice. Lo strumento consente di addizionare
e sottrarre numeri composti da un massimo di dodici cifre, operando automaticamente i riporti.
In realtà la storia dei calcolatori moderni parte dalla metà del secolo scorso.
Verso il 1945, John von Neumann e altri scienziati riuscirono a costruire macchine da calcolo usando valvole elettroniche. Queste macchine erano enormi e
riempivano intere stanze con centinaia di migliaia di valvole. Uno dei primi calcolatori è stato l’ ENIAC del 1946 di US-Military che pesava circa 30 tonnellate!
EDSAC, J. Von Neumann
I primi computer non erano dotati di sistemi operativi. Non esistevano i linguaggi di programmazione ad alto livello, né l’assembly. L’utente disponeva di semplici
periferiche per posizionare i bit della memoria centrale, in modo da rappresentare istruzioni macchina e dati, e impostare il Program Counter. Il programmatore
si registrava su un foglio appeso al muro per un certo numero di ore; poi andava nella sala macchine, inseriva la propria scheda di spinotti con il programma nel
44 - Tecno1 rel. 17.03.17
calcolatore e passava le ore successive a sperare che nessuna delle circa 20000 valvole si bruciasse mentre il programma girava.
Inizialmente l’utente doveva operare direttamente in binario; in seguito si svilupparono le prime periferiche, in grado di leggere codici rappresentati su schede o
nastri perforati, per poi passare alle prime telescriventi che interagivano con la tastiera, la stampante. Furono così sviluppati i primi programmi di sistema per la
gestione di queste periferiche che diedero origine allo sviluppo dei sistemi operativi.
Il calcolatore era in grado di gestire un solo job (insieme di passi per la generazione di un programma) alla volta.
Seconda generazione (1955 – 1965)
Transistor e sistemi batch
L’evoluzione della tecnologia elettronica e l’avvento dei transistor durante la metà degli anni 50 del ‘900, cambiò radicalmente la situazione ( ).
Nel venne realizzata la prima unità a nastro magnetico e nel la iniziò a produrre in serie i transistor, mentre il primo computer totalmente transistorizzato fu del
1956. Sempre nel 1956 venne creato il primo .
Negli anni ‘50 fanno la loro comparsa anche i lettori di schede perforate per l’inserimento dei dati in memoria.
Sempre nel 1956 venne creato il primo
Risultò subito chiaro che le periferiche erano infinitamente più lente della velocità di esecuzione della CPU. Per questo nei successivi anni si cercò da un lato di
migliorare la velocità delle periferiche, dall’altro di sovrapporre nel tempo le operazioni di I/O e CPU agendo su BUFFER di memoria centrale che facevano da
tramite tra periferiche e Unità Centrale in cui la CPU poteva “pescare” o “scrivere” le informazioni di Ingresso e Uscita velocizzando le operazioni. Fanno la loro
comparsa anche i sistemi ad INTERRUPT in cui è la periferica a segnalare alla CPU il verificarsi di un evento.
In questo periodo i calcolatori venivano tenuti chiusi in speciali sale macchine con aria condizionata ed al loro funzionamento erano assegnati operatori
specializzati. Il sistema informativo era organizzato in modo da non prevedere l'uso di direttamente collegati con l'elaboratore centrale, l'unico modo che
consentiva di ottenere i servizi era quello di inviare al Centro le schede perforate con il programma da eseguire e , poi, di ricevere i risultati stampati. Tale
processo di elaborazione prendeva il nome di batch processing.
Job ( il job è un’applicazione che comprende codice, dati e istruzioni di controllo del job stesso), organizzati in gruppi omogenei (batch), cioè un Batch comprende
piu’ Job.
Un esempio:
$JOB user_spec
; identify the user for accounting purposes
45 - Tecno1 rel. 17.03.17






$FORTRAN
source program cards
$LOAD
$RUN
data cards
$EOJ
; load the FORTRAN compiler
$JOB user_spec
$LOAD application
$RUN
data
$EOJ
; identify a new user
; load the compiled program
; run the program
; end of job
Linguaggi assembly o ad alto livello
Sviluppo di programmi di sistema per la traduzione in linguaggio macchina
primi sistemi operativi per IBM 701, in grado di eseguire un job alla volta
Introduzione software di sistema sempre più potente non solo per gestione di periferiche, ma anche per gestire code di lavoro
Primi centri di calcolo
Gestione passa dai ricercatori al personale specializzato (operatori)
Nota: il termine batch o batch processing, viene utilizzato attualmente con vari significati che vanno dalla la non interattività dei programmi all’esecuzione di più
programmi accorpati, all'esecuzione non immediata nel tempo. O anche a programmi di script o comandi batch
Sistemi batch (a lotti)
. IBM 305 RAMAC (1956) è il primo computer con hard disk. Nel 1957 IBM rilascia il primo computer a transistor
Terza generazione (1965 – 1980)
Time sharing e multiprogrammazione. Circuiti integrati
“Dal momento che i primi erano estremamente costosi, non era possibile garantire l'accesso esclusivo ad un singolo utilizzatore per l'uso in modo interattivo. Dal
momento che con questa modalità di utilizzo i computer trascorrono molto tempo in attesa dell'input dell'utente, si pensò d i far utilizzare a più utenti lo stesso
elaboratore, utilizzando i tempi morti per servire i diversi utenti a rotazione . Allo stesso modo, le piccole porzioni di tempo che trascorrevano nell'attesa dei
dispositivi, quali , o potevano essere utilizzati per servire i vari utenti. I computer capaci di fornire servizi in time-sharing normalmente venivano impiegati per
lavori in durante la notte.” (wikipedia)
Multiprogrammazione: in grado di gestire contemporaneamente più job in memoria centrale, grazie al meccanismo della commutazione della CPU da un job
all’altro. Il S.O. fa in modo che la CPU si sospenda per tutto il tempo che un I/O resta inutilizzato e, riservandosi di riprendere il programma ad operazione di I/O
ultimata, passa all’esecuzione di un altro programma scelto tra quelli presenti nel Job Pool
La memoria centrale contiene i vari job e un algoritmo di SCHEDULAZIONE (CPU Scheduling = algoritmo per l’assegnazione della CPU) che sceglie il job da
mandare in esecuzione.
Nasce il problema della condivisione delle risorse da parte di più processi e dei relativi conflitti nell’assegnazione delle risorse del sistema: CPU, Memoria, I/O.
46 - Tecno1 rel. 17.03.17
VT52 - 1975

Spooling (simultaneous peripheral operations on line). E introdotto un disco come buffer intermedio tra il job e le stampati, affinché il job potesse
terminare più velocemente. Il lavoro memorizzato sul disco di spool veniva mandato in stampa quando la stampante era disponibili.
Spooling



Avvento dei DISCHI usati anche come buffer per lo SPOOLING. Dal TOS (Tape operanting System) al DOS (Disk Oparting System)
Monitor e terminali per seguire svolgimento di un job dalla complilazione all’output.
Time-sharing Ogni utente può dialogare attraverso un terminale ed eseguire programmi. I sistemi dovevano garantire tempi di risposta molto bassi ed un
grado di multiprogrammazione elevato:
o
I job prendono possesso a turno della CPU
o
o
o
o
o
o
Ogni job non verrà portato fino a termine (run to completion) ma avrà a disposizione la CPU per un tempo limitato
Se il tempo a disposizione è abbastanza breve e il cambio di job sufficientemente veloce si ha l’illusione di eseguire i job in parallelo
La CPU è usata a turno da diversi job
Un job viene spostato da disco a memoria e viceversa (swapping)
Il programma si sospende se:

È in attesa di una operazione della periferica

Ha finito il suo quanto di tempo (“time slice”)
Sistemi INTERATTIVI : un terminale permette di “interagire” con il computer per l’inserimento dei dati (i S.O. si evolvono anche in funzione
di alcune esigenze di mercato come, ad es., la prenotazione dei posti aerei
Nota: Agli inizi degli anni ’60, la maggior parte dei produttori di calcolatori aveva due linee distinte di prodotti incompatibili tra loro: grossi calcolatori scientifici
usati per calcoli numerici scientifici e ingegneristici, e calcolatori commerciali usati dalle ditte di assicurazioni e dalle banche.
47 - Tecno1 rel. 17.03.17
IBM introduce 360 costituito da una serie di macchine compatibili tra loro a livello sw. Differivano per prezzo e prestazioni ( velocità, memoria, numero di
dispositivi di I/O collegabili). Avevano però la stessa architettura e lo stesso insieme di istruzioni. Gli stessi programmi potevano girare su tutte le macchine.
Negli anni successivi IBM introduce i sistemi 370, 4300, 3080, 3090 tutti compatibili con 360.
360 fu il primo a usare tecnologia con circuiti integrati con vantaggi in termini di prezzo e prestazioni.
Quarta generazione (1980 – 1990 –> ai giorni nostri)
Ma un sistema di calcolo deve per forza costare milioni di dollari?
L’avvento della microelettronica con la realizzazione di chip a larga scala di integrazione consentì, a partire dal 1970, lo sviluppo dei minicomputer aprendo la
strada all’informatica distribuita.
Due SO hanno dominato la scena: MS-DOS e UNIX. L’evoluzione successiva fu segnata dal microprocessore, che consentì l’enorme diffusione dei calcolatori sia
come controllore di apparati, sia come cuore dei nascenti personal computer.
“Era il 12 agosto 1981 quando il suo IBM Personal
Computer (IBM 5150). Per molti anni non a caso si
parlò comunemente di “Pc Ibm” e poi di “Ibm compatibili” per definire tutti quei computer domestici basati su un processore Intel e con sistema operativo MsDos (che a sua volta ha da poco festeggiato i suoi 30 anni) prima e con Windows poi, dagli anni Novanta.
Apple 1 fu disegnata e progettata da Steve Wozniak nella Silicon Valley, e commercializzata più tardi proprio da Wozniak e Jobs attraverso una catena di
elettronica, Byte Shop, che comprò le prime 50 unità. Di questo modello furono in realtà realizzati solo 200 esemplari e oggi ne esisterebbero solo sei.
Sistemi Desktop
o
o
o
o
o
Personal computer (PC) sistema di calcolo dedicato ad un singolo utente
Periferiche di I/O evolute tastiere, mouse, schermi
Facilità d’uso e performance elevate
I S.O. per queste architetture adottano tecnologie sviluppate per S.O. potenti complessi; tuttavia spesso il PC è una macchina dedicata e
non sono necessarie tecniche sofisticate di gestione della CPU
Possono eseguire diversi tipi di sistema operativo(Windows, MacOS, UNIX)
Sistemi laptop/notebook
o
Uno dei primi laptop è stato il GRiD Compass 1101, utilizzato nelle missioni spaziali nei primi anni ottanta. Il suo peso era 5 Kg (11 lb) e il
costo US $8,000 - $10,000!. Il design compatto, la convenienza e l'evoluzione tecnologica dei notebook li stanno rendendo più convenienti,
sotto molti punti di vista, dei desktop. Infatti essi, oltre al basso peso, integrano wi-fi, ottimi schermi, prestazioni sempre più elevate, in
modo da essere molto richiesti per la loro comodità:

Prendere appunti o ricercare documenti.

Illustrare presentazioni.

Avere accesso da remoto

Giocare, guardare film, sentire la musica durante viaggi e spostamenti

Accedere a Internet e inviare e-mail in luoghi pubblici.
48 - Tecno1 rel. 17.03.17
Sistemi real-time
o
Spesso usati come strumento di controllo in una applicazione dedicata, come ad esempio controllo di esperimenti scientifici, sistemi di
visualizzazione in ambito medicale e sistemi di controllo industriale
o
o
o
o
o
Vincoli temporali fissati e ben definiti
Soft real-time (time critical) Il job terminerà molto probabilmente entro …
Hard real-time (life critical) Il job terminerà sicuramente entro …
Memoria secondaria limitata o assente
Dati memorizzati in memoria a breve termine o in memoria a sola lettura (ROM)
Sistemi multiprocessore (con più CPU comunicanti tra loro)
o
Vantaggi:

Maggiore throughput (capacità di elaborazione)

Risparmio economico

Maggiore affidabilità
Sistemi a cluster.
o
Il clustering permette a due o più sistemi di condividere periferiche (tipicamente dischi). Serve ad aumentare l’affidabilità
Sistemi operativi distribuiti
Ma per fare un sistema parallelo abbiamo per forza bisogno di mettere tutte le CPU nella stessa scatola ? NON necessariamente, anzi…
o
Il calcolo viene distribuito tra diversi processori fisicamente distinti
o
Vantaggi:

Condivisione delle risorse

Grande capacità di calcolo (distribuzione del carico)

Affidabilità

Comunicazioni
Sistemi distribuiti (paralleli) tightly coupled (strettamente connessi)
o
o
i processori condividono la memoria ed il clock
la comunicazione avviene solitamente attraversomemoria condivisa
Sistemi distribuiti loosely coupled (lascamente connessi o debolmente integrati). Reti
o
o
o
Ogni processore ha la sua memoria locale
I processori comunicano tra loro attraverso varie linee di comunicazione, come bus ad alta velocità o linee telefoniche
Richiedono un’infrastruttura di rete

Reti locali (LAN)

Reti metropolitane (MAN)

Reti geografiche (WAN)

Possono essere di due tipi

Client-server

Peer-to-peer (P2P)

Client-server. Il modello client-server presuppone l’esistenza di due entità:

Server (che eroga il servizio)

client (che richiede il servizio)
Una rete di computer o network è un insieme di computer - o un insieme di gruppi di computer - collegati tra loro per scambiare informazioni di vario tipo.
Le macchine collegate in una rete possono essere collocate a brevi distanze, in reti denominate LAN - Local Area Network - ma possono anche essere molto
distanti tra loro e connesse tramite reti di vaste dimensioni, in genere dette WAN - Wide Area Network - o reti geografiche, delle quali è un esempio Internet.
Internet è una rete di computer mondiale attraverso la quale milioni di utenti possono interagire a vari livelli e con diverse modalità.
La nascita di Internet può essere fatta risalire al 1969, ed è legata essenzialmente a ragioni militari. In quell'anno, infatti, sorse l'esigenza di connettere più
computer tra loro al fine di consentire la comunicazione alle basi militari sparse in tutto il territorio statunitense anche in caso di interruzione dei collegamenti
locali (si pensi a un conflitto nucleare). Nel 1990, Tim Berners Lee, ricercatore del CERN di Ginevra, propose la creazione di un sistema di reperimento
dell'informazione a livello mondiale per tenere in contatto tutti i ricercatori in campo fisico. In questo contesto e in questo periodo nacquero il World Wide Web e
il linguaggio HTML.
Negli anni immediatamente successivi, grazie all'avvento dei personal computer, cominciarono a entrare in rete anche le organizzazioni commerciali. Il fatto che
la rete non fosse più dedicata a scopi militari attrasse l'attenzione di utenti appartenenti a svariati mondi, tanto da portare alla nascita dell'attuale Internet, che è
ormai definibile come la Rete delle reti.
Il cloud computing
è un servizio che permette di archiviare ed elaborare le informazioni e sfruttare applicazioni e risorse software messe a disposizione da un fornitore di servizi in
Internet.
Da una parte c’è il fornitore che mette a disposizione dei servizi fruibili da qualsiasi luogo e in qualsiasi momento, dall’altro il cliente che accede da remoto ai
49 - Tecno1 rel. 17.03.17
servizi senza la necessità di disporre di risorse interne all’azienda ed eliminando, così, i costi dovuti all’infrastruttura, alla manutenzion, aggiornamento e
protezione dei sistemi.
Rispetto ai semplici servizi di virtualizzazione, il cloud computing offre il vantaggio del self serving ciè la possibilità di ottenere esclusivamente le risorse
necessarie su richiesta (on demand), pagando solo i servizi realmente utilizzati.
L’infrastruttura di un cloud è l’insieme di hardware e software che consente di fornire i servizi essenziali del cloud computing. Lo strato fisico include server,
storage e componenti di rete. Il livello software implementa i servizi essenziali del cloud
Sensori e MEMS
L’esigenza di rendere sempre più semplice e diretta la comunicazione tra macchina e persona unita all’evoluzione, complessità e miniaturizzazione dei dispositivi
elettronici sta imprimendo una nuova svolta nei sistemi di interfaccia tra l’uomo e la macchina.
In questo contesto attuatori e sensori svolgono un ruolo determinante. Sono essi, infatti, gli elementi che direttamente integrati nel silicio, fanno da tramite tra le
grandezze fisiche (temperatura, pressione, suoni, onde,...) e il sistema di elaborazione.
La tecnologia relativa a questi componenti è inziata negli anni sessanta del secolo scorso ma avuto una crescita esponenziale a seguito delle applicazioni delle
nanotecnologie.
Sensori
Le tecniche avanzate relative ai sensori permettono una miriade di possibilità. Esistono sensori di luce, come quelli per le fotocellule, o sensori di suono come i
microfoni, sensori di temperatura e di calore, per la rivelazione di elettricità, tensione e campi magnetici, sensori per la rilevazione di di radiazioni, come i
contatori Geiger o i dosimetri, sensori di pressione e rilevamento di gas, sensori di prossimità o sensori biologici che si basano su tessuti viventi. Sensori Wi-Fi e
RFID.
MEMS e IoT
La tecnologia Mems (Micro Electro Mechanical Systems), basata sulle nanotecnologie, consente di integrare in spazi ridottissimi, nello stesso componente,
funzioni elettroniche e meccaniche, oltre che ottiche, biologiche o chimiche.
Fondamentalmente, un dispositivo MEMS contiene, su un minuscolo chip di silicio, micro - circuiti integrati con dispositivi meccanico o sensori.
In questo modo è possibile disporre di sensori microelettromeccanici che comprendono sensori di pressione , umidità, microfoni, giroscopi , magnetometri,
accelerometri , bussole digitali , sensori per ultravioletti e sensori tattili .
Le applicazioni sono enormi.
Si va dai prodotti di consumo all’industria, all’automazione.
Usi interessanti si trovano nei cellulari, nei giochi e nella robotica dove si fa largo uso di giroscopi e accelerometri per determinare la posizione nello spazio del
sistema. Nelle videocamere è possibile compensare il movimento. Nei proiettori di nuova generazione si trovano applicazioni per la gestione di microspecchi.
In campo automobilistico i MEMS li troviamo sparsi ovunque: airbag, sistemi di navigazione assistita, scatole nere, antifurto.
Anche nel campo medicale i MEMS trovano vaste applicazioni. Ad esempio, vengono usati per il controllo della pressione oculare, oppure per il movimento degli
arti (fig. 1).
50 - Tecno1 rel. 17.03.17
Fig 1- I MEMS applicati al corpo umano.(ST Microelectronics )
Bruno Murari, è un pioniere della microlelettronica e, in particolare dei MEMS.
Dai primi anni sessanta del secolo scorso lavora alla, divenuta poi STMicroelectronics, Sgs di Agrate in cui si sperimentano i primi circuiti intergrati. Il lungo
lavoro nei laboratori lo porta, tra le altre cose, a interessarsi di segnali elettrici di potenza e delle testine di hard disk e stampanti.
Negli anni novanta nasce l'accelerometro che, per la prima volta, viene inserito nella consolle Wii della Nintendo realizzando un successo mondiale.
Sistemi embedded ( integrati)
Sistemi semplici che svolgono compiti specifici e danno priorità alla gestione dei dispositivi fisici. Computer presenti nelle automobili, lavatrici, e centraline di
allarme, bancomat …
Raspithon: http://moodle.isisfacchinetti.it/mod/data/view.php?d=21&rid=517
embedded systems are found in cell phones, digital cameras, camcorders, portable video games, calculators, and personal digital assistants, microwave ovens,
answering machines, home security systems, washing machines, lighting systems, fax machines, copiers, , and scanners, cash registers, alarm systems, automated
teller machines, transmission control, cruise control, fuel injection, anti-lock brakes, active suspension and many other devices/ gadgets.
CHARACTERISTICS
a) Embedded systems are application specific & single functioned; application is known a priori, the programs are executed repeatedly.
b) Efficiency is of paramount importance for embedded systems. They are optimized for energy, code size, execution time, weight & dimensions, and cost.
c) Embedded systems are typically designed to meet real time constraints; a real time system reacts to stimuli from the controlled object/ operator within the
time interval dictated by the environment. For real time systems, right answers arriving too late (or even too early) are wrong.
d) Embedded systems often interact (sense, manipulate & communicate) with external world through and actuators and hence are typically reactive systems; a
reactive system is in continual interaction with the environment and executes at a pace determined by that environment.
e) They generally have minimal or no user interface.
Nessuna macchina moderna può anche muoversi senza elettronica. Iniezione del carburante e ABS, sospensioni e cruise control adattivo, airbag o cambi
automatici - tutti questi sotto-sistemi sono controllati da un software altamente efficiente. Gli ingegneri si riferiscono qui a "sistemi embedded".
PDA, Cellulari, Sistemi Palmari e Videogiochi –
Gli assistenti digitali personali (PDA) sono costituiti da un di dimensioni contenute, tali da essere portato sul palmo di una , dotato di uno schermo tattile (o )). Il
PDA è un organizer personale elettronico con strumenti per organizzare le informazioni: Agenda , Calcolatrice, Sveglia, Accesso a Internet, Sistema GPS,
televisione, giochi, lettura... Lo smartphone è un telefono cellulare con funzionalità di PDA. Gli smartphone uniscono le funzioni di un telefono cellulare e quelle
di un computer in un unico dispositivo palmare. Le tecnologie dei PDA e degli smartphone continuano a fondersi tra loro.

iPhone è un prodotto da , Il dispositivo, oltre ai normali servizi di telefonia, permette di utilizzare servizi come e-mail, navigazione web, . Viene controllato
dall'utente tramite uno schermo , un sensore di movimento del dispositivo, una tastiera virtuale. L'interazione con l'utente è coadiuvata da un sensore di
prossimità e un sensore di luce ambientale
51 - Tecno1 rel. 17.03.17
i-phone
Nota: sensori: “con il termine sensore si definisce un dispositivo che trasforma una che si vuole in un segnale
di natura diversa (tipicamente elettrico) più facilmente misurabile o memorizzabile.” Esistono moltissimi tipi di
sensori: ad es. di luce (o sensori ottici)come le fotocellule , i sensori di suono come i microfoni, i sensori di
temperaturacome i termometri e le termocoppie, i sensori di movimento come i radar, i velocimetri o i
tachimetri, di posizione come i giroscopi…

L'iPad è un tablet computer prodotto da Apple in grado di riprodurre contenuti multimediali e di navigare su Internet. Si tratta di un dispositivo un
dispositivo a metà strada tra un telefono cellulare evoluto e un computer portatile. E’ dotato di uno schermo da 9,7 pollici, con retroilluminazione a LED e
supporto al multi-touch. l'iPad è in grado di eseguire solo software scaricati dall'App Store. L'iPad include Safari (browser), iPod, iTunes Store, App Store, Maps,
Note, Calendario e Contatti.
“L'architettura ARM (Acorn RISC Machine) indica una famiglia di a sviluppata da e utilizzata in una moltitudine di . Grazie alle sue caratteristiche di basso consumo
elettrico (rapportato alle prestazioni) l'architettura ARM domina il settore dei dove il risparmio energetico delle è fondamentale” (Wikipedia). ARMv8-A introduce
un’architettura a 64-bit.
La famiglia ARM
“L'architettura ARM (precedentemente Advanced RISC Machine, prima ancora Acorn RISC Machine) indica una famiglia di a sviluppata da e utilizzata in una
moltitudine di sistemi . Grazie alle sue caratteristiche di basso consumo (rapportato alle prestazioni) l'architettura ARM domina il settore dei dispositivi mobili
dove il risparmio energetico delle batterie è fondamentale.
Attualmente la famiglia ARM copre il 75% del mercato mondiale dei processori a 32 bit per applicazioni embedded, [1] ed è una delle più diffuse architetture a 32
bit del mondo. I processori ARM vengono utilizzati in , , , lettori multimediali, videogiochi portatili e periferiche per computer (come , di rete ecc). Importanti rami
della famiglia ARM sono i processori e i processori prodotti da . “
Approfondimenti ARM
Introduzione ARM

http://www.toves.org/books/arm/

http://www.dsi.unifi.it/~bucci/Teaching/Magistrale/Approfondimenti_ARM.pdf

http://www.uniroma2.it/didattica/eldig2/deposito/eldig2-esercitazione2.pdf
Simulatore Windows

http://armsim.cs.uvic.ca/DownloadARMSimSharp.html
Progetto simulatore online

https://github.com/dhammika-marasinghe/arm-sim (vedi anche esempi https://github.com/dhammika-marasinghe/arm-sim/tree/master/examples)
Emulator online

https://tesla.ce.pdn.ac.lk/arm/arm2/
ARMDROID:

https://tesla.ce.pdn.ac.lk/arm/armdroid/

https://salmanarif.bitbucket.io/visual/
examples

http://www.cse.uaa.alaska.edu/~ssiewert/a225_doc/ARM_ASM_EXAMPLES-from-UT.pdf

http://peterdn.com/post/e28098Hello-World!e28099-in-ARM-assembly.aspx
esempio
# ARM program to print "Hello World!"
# *************** instruction memory
.text
.global main
main:
# store(push) lr to the stack
sub
sp, sp, #4
str
lr, [sp, #0]
# your code here
ldr
r0, =hello
bl
printf
52 - Tecno1 rel. 17.03.17
# retrive(pop) lr from the stack
ldr
lr, [sp, #0]
add
sp, sp, #4
# return
mov
pc, lr
# *************** data memory
.data
hello: .asciz "Hello World!\n"
Console per videogiochi e realtà aumentata, virtuale, mixed
Wii (prodotta da Nintendo) fa largo uso di sensori e la sua caratteristica è il “controller senza fili, il Wiimote, simile ad un telecomando, che reagisce alle forze e
all'orientamento rispetto nello spazio attraverso un sistema di accelerometri e giroscopi presente al suo interno, e tramite un dispositivo ottico posto ad una delle
sue estremità interagisce con la barra sensore rendendo, inoltre, possibile il suo utilizzo come sistema puntatore sullo schermo TV.”
Microsoft Kinect è un accessorio per Xbox 360 sensibile al movimento del corpo umano senza l'uso di strumenti. Kinect è dotato di telecamera, doppio sensore
di profondità a raggi infrarossi composto da un proiettore a infrarossi e da una telecamera.
HoloLens di Microsoft analizza l’ambiente in cui ci troviamo e crea una «Mixed Reality», una realtà in cui delle figure realizzate con la luce (ologrammi)
interagiscono con le cose reali (muri, mobili, porte e finestre) intorno a noi. Lo strumento Microsoft si controlla con la voce (attraverso l’assistente Cortana) e con
i gesti delle mani, che le videocamere del visorevedono e interpretano.
53 - Tecno1 rel. 17.03.17
Struttura di un Sistema operativo
In pratica, il S.O. cosa deve fare?
Riuscire a gestire tutte le componenti da cui i sistemi di calcolo sono composti.
o
o
o
o
o
o
o
Gestore di processi (job)

Un processo è un programma in esecuzione. È costituito da:

Codice eseguibile

Uno stato (esecutivo)

Ogni processo necessita di risorse per portare a termine il proprio task:

CPU

memoria

accesso a file

I/O

Il sistema operativo si occupa di rendere disponibili le risorse ai processi ed è responsabile di tutte le attività legate alla loro
gestione:
o
Creazione e terminazione
o
Sospensione e ripristino
o
Sincronizzazione e comunicazione
Gestore della memoria

La memoria è condivisa da CPU e dispositivi di I/O. Il sistema operativo deve:

Tenere traccia di quali parti della memoria sono usate e da chi

Decidere, in caso di conflitto chi può accedere per primo

Decidere quali processi debbano essere caricati in memoria quando c’è spazio disponibile

Allocare e liberare zone di memoria in base alle richieste delle applicazioni
Gestore dei file

Un file è una raccolta d’ informazioni correlate e strutturate. I file possono rappresentare sia programmi che dati

Il sistema operativo è responsabile per:

Gestione di una organizzazione gerarchica (directory)

Creazione e cancellazione di file e directory

Spostamento dei dati da/verso dispositivi di memoria
Gestore del sistema di I/O

Un’interfaccia generale per i driver dei dispositivi
Gestore della comunicazione tra processi in ambito Sistemi Distribuiti

Non c’è condivisione di memoria

Usiamo una rete per le comunicazioni

La comunicazione avviene secondo un protocollo sia tra entità del sistema operativo, sia con entità esterne al sistema operativo
Interprete di comandi

La shell è un programma che attua l’esecuzione di operazioni, usando i comand del sietma opeartivo. Nel caso di Unix/Linux il
linguaggio comandi permette la scrittura di veri e propri algoritmi strutturati (script).
Politiche di protezione

La protezione si riferisce ad un meccanismo per controllare l’accesso al sistema e alle risorse di un utente da parte di
programmi, processi o altri utenti

Il meccanismo di protezione deve distinguere tra utente/processo autorizzato e non, specificare i controlli che devono essere
effettuati, fornire un modo per imporre dei criteri
- un esempio di gestione di sisteme di I/O Il sistema operativo genera, a partire dalla macchina hw, una gerarchia di macchine virtuali, ciascuna delle quali realizza i requisiti:
risolvere il problema dell’utilizzo delle risorse da parte di moduli di livello superiore
“moltiplicare” il numero dei dispositivi disponibili, accogliendo più richieste, gestite secondo determinate politiche di gestione (virtualizzazione CPU,
virtualizzazione memoria, spooling,…)
54 - Tecno1 rel. 17.03.17
Il modello onion skin
Il SO è come un letto: per dormirci sopra non basta il telaio! Inoltre il materasso è formato da tanti strati, ognuno con le sue funzioni.
Uno dei modelli proposti è il modello onion skin (H.M.Deitel 1983), che rappresenta il Sistema Operativo (Operating System, OS) come una successione di strati
costruiti sopra un nocciolo costituito dall’hw, ciascuno dei quali rappresenta una macchina virtuale.
Il modello onion skin del sistema operativo (Operating System - OS)
Primitiva = Ogni procedura standard per mezzo della quale il modulo mette a disposizione i servizi
Modulo = è una collezione di routine che attivano i meccanismi fisici necessari per risolvere problemi logici di uno stesso tipo (per es. Le operazioni di i/o o la
gestione della memoria)
Ciascuno strato costituisce un modulo, composto da programmi che vedono solo le procedure implementate dagli strati sottostanti, attraverso le primitive che
queste mettono a disposizione. Le primitive di ciascun modulo possono essere invocate solo dai moduli di livello superiore.
Gli strati sottostanti vengono visti come un oggetto unico. I livelli più bassi sono quelli più vicini all’hardware, quelli più alti sono vicini all’utente e alle sue
applicazioni.
I moduli sono tutti i programmi che costituiscono un livello scritti per risolvere una classe di problemi. Ogni modulo si può vedere come una scatola che contiene
al suo interno le competenze per risolvere un problema e presentare risultati in conseguenza dell’elaborazione di richieste. Quello che avviene all’interno di un
modulo non importa a chi richiede il servizio; esso può essere modificato o riscritto, a patto che non vengano modificate le procedure per accedervi.
Esempio:
telefonata. La procedura standard consiste nel sollevare la cornetta, attendere il segnale e comporre il numero; il modo in cui la compagnia telefonica invia il
segnale (via terrestre, satellite, ponte radio) non è rilevante per chi deve telefonare; ma se la compagnia modificasse la modalità di accesso al servizio, per
esempio imponendo di digitare un certo un certo numero di cifre segrete prima del numero, sarebbe molto difficile riuscire a telefonare.
La procedura standard è detta primitiva.
Un modulo allora è una collezione di routine che attivano i meccanismi fisici necessari per risolvere problemi logici di uno stesso tipo.
Per esempio due stampanti, corredate di rispettivi moduli di SO, possono diventare due dispositivi logici identici a condizione che i relativi moduli mettano a
disposizione le stesse primitive.
I moduli devono mantenere un alto grado di indipendenza; devono essere scritti senza conoscere la struttura interna degli altri moduli di SO.
Si consideri, ancora, ad esempio una delle operazioni piu’ comuni eseguite da un programma, come la lettura di informazioni presenti su disco. A livello di
processo utente la risorsa interessata è il file, mentre il linguaggio utilizzato è ad es. il C o il C++. Pertanto il linguaggio sfrutta una primitiva della seguente forma:
leggi ( nomefile, nomerecord)
Cio’ significa che l’utente non deve preoccuparsi di codificare nel proprio programma gli aspetti legati alla lettura fisica da disco che presuppongono domande del
tipo: dove si trova il file su disco fisicamente? Con quale meccanismo le informazioni sono estratte da disco? Esistono altri programmi che stanno utilizzando
questo stesso file? Come risolvere eventuali conflitti?
Questi problemi vengono affrontati dal livello sottostante di File System che puo’ comprendere, a sua volta, piu’ processi che servono a calcolare l’indirizzo fisico
55 - Tecno1 rel. 17.03.17
del disco su cui sono registrate le informazioni cercate.
Anche il File System ha pero’ una visione astratta della risorsa e si serve del livello sottostante di Gestione dell’ I/O. Tramite opportune primitive il File System
comunica al gestore di I/O che conosce nel dettaglio la periferica (Device Driver) l’operazione da compiere e questo provvederà ad effettuare le operazioni di I/O
necessarie al trasferimento delle informazioni da disco alla memoria centrale.
A questo punto il Gestore della Memoria Centrale (in cui tutti i processi devono risiedere per essere eseguiti) provvede a convertire gli indirizzi virtuali di ogni
processo in indirizzi assoluti.
Chi gestisce l’esecuzione dei processi è il Nucleo!
Alcuni programmi di SO interagiscono direttamente con le componenti hardware; questi quindi devono conoscere le caratteristiche degli specifici dispositivi, per
poterli controllare e adoperare.
Inoltre è opportuno che un SO possa accedere anche a dispositivi inizialmente non previsti.
Ad ogni dispositivo è associato un software: device driver (plug and play)
Un device driver scritto per un dispositivo anche simile, ma non uguale, può non funzionare. Si tende quindi a definire dispositivi compatibili tra loro, secondo
standard affermati che si impongono o vengono imposti in vari modi:



dominio sul mercato di una particolare azienda produttrice
normative erogate da istituti riconosciuti a livello internazionale (es ISO).
In seguito al lavoro di gruppi di ricerca costituiti da team di aziende concorrenti che impostano accordi per lavorare insieme nello sviluppo di nuovi
componenti e tecnologie.
56 - Tecno1 rel. 17.03.17
I PROCESSI
Un processo è un programma in esecuzione.
Un processo è un’attività sequenziale che si concretizza nell’esecuzione del codice di uno o più programmi, e che può essere eseguita “in parallelo” ad altri
processi. Ogni processo evolve nel tempo poiché cambiano i valori dei dati. Lo stato di un processo in un determinato istante è descritto dalla “fotografia”, in
quell’istante, di tutti i valori dei dati usati dal programma inclusi i valori del program counter, dei registri e delle variabili.
Programma: è un insieme di bit di codice (sezione codice) e di dati (sezione dati) allocati in ben precise posizioni di memoria durante l’esecuzione (entità passiva)
Processo: è una particolare sequenza di esecuzione delle istruzioni di un programma, porzione di programma, o insieme di programmi (entità attiva)
Consideriamo un cuoco che sta preparando una torta. Ha una ricetta e gli ingredienti necessari: farina, uova,…
La ricetta è il programma (l’algoritmo espresso in una notazione adeguata), il cuoco è il processore, e gli ingredienti della torta sono i dati in ingresso.
Il processo è l’attività che il cuoco svolge leggendo la ricetta, raccogliendo gli ingredienti e impastando e cuocendo la torta.
Immaginiamo che la figlia irrompa in cucina piangendo e dicendo di essere stata punta da un’ape.
Il cuoco segna il punto della ricetta a cui è arrivato (lo stato del processo in esecuzione viene salvato), prende il libro del pronto soccorso, e comincia a seguire le
indicazioni.
E’ un esempio di come il processore cambi contesto da un processo ad un altro a priorità più alta, ciascuno con un programma diverso (ricetta, libro pronto
soccorso). Quando il figlio sarà medicato, il cuoco riprenderà a cucinare la torta, dal punto in cui era rimasto.
Quindi:
Un processo è un programma in esecuzione ed è costituito da:

Codice eseguibile

Uno stato (esecutivo)
Ogni processo necessita di risorse per portare a termine il proprio task

CPU

Memoria

accesso a file

I/O
ll sistema operativo

Si occupa di rendere disponibili le risorse ai processi

È responsabile di tutte le attività legate alla loro gestione:
◦ Creazione e terminazione
◦ Sospensione e ripristino
◦ Sincronizzazione e comunicazione
Definizione di processo
Processo P = (C, S) => programma in esecuzione;
è formato da:

una sezione di testo (C) codice del programma (parte statica del programma che non varia nel tempo),

da uno stato di esecuzione (S) composto da:
◦ program counter
◦ valori dei registri della CPU
◦ stack con i dati relativi all’esecuzione
Il processo è qualcosa di dinamico, che varia nel tempo. Non va quindi confuso con il concetto di programma (statico, non in esecuzione, ossia l’insieme di codice
contenuto in un file nel supporto di massa); diverse istanze di uno stesso programma sono da considerare infatti diversi processi
Un processo è rappresentato nel sistema operativo da un descrittore di processo (PD = process descriptor, chiamato anche PCB = proccess control block ), che
contiene tutte le informazioni relative al processo stesso
Il processore è l’oggetto in grado di attuare le transizioni tra gli stati definiti dalle funzioni di transizione (cioè la macchina su cui gira il programma).
Il NUCLEO (Kernel) genera un processore virtuale per ogni processo
il termine processo è ormai universale, ma per la precisione:

lavoro (job) in caso di sistemi batch

processo in caso di sistemi time-sharing
57 - Tecno1 rel. 17.03.17
I processi in Windows
Descrittore di processo (PCB)
Come vengono rappresentati i processi nel sistema operativo?
Ad ogni processo viene associata una struttura dati (descrittore): Process Control Block (PCB)
Quando un processo si sospende, il suo stato deve essere salvato. Per far cio' si associa al processo un' AREA di memoria (struttura dati) il DESCRITTORE DI
PROCESSO (Process Control Block o Task Control Block) cosi' definito (almeno nei campi essenziali, che a seconda del linguaggi puo’ essere implementato in
modo diverso (ad ex. in MASM86 con DB, in C con una struct etc)
Il PCB contiene tutte le informazioni relative al processo:

Stato del Processo – Contenuto dei registri di CPU (PC, SP, IR, accumulatori, etc.)

Informazioni di scheduling (priorità, puntatori alle code, etc.)

Informazioni per gestore di memoria (registri base, limite, etc.)

Informazioni relative all’I/O (risorse allocate, file aperti, etc.)

Informazioni di accounting (tempo di CPU utilizzato, etc.) – ...
PCB
Puntore dinamico
Nome processo
Priorità
Program Counter
Registri …
Stack privato
Stato
Altro (ex memoria privata...)
Process control block – kernel data structure contaning process state (registers, stack pointer, program counter, priority, open files, …)
Il SO mantiene una tabella (array di strutture) chiamata tabella dei processi, con una riga per ogni processo, che contiene informazioni sullo stato del processo, il
suo PC, SP, l’allocazione di memoria, stato dei suoi file aperti, informazioni per lo scheduling e tutte le informazioni necessarie per salvare lo stato di un processo
quando questo deve essere sospeso e poi ripristinato.
58 - Tecno1 rel. 17.03.17
Interazioni tra processi
Per capire come scomporre i processi e studiarne la loro interazione vediamo l’esempio seguente.
Esempio: “ Il ragu’ di zio Paolo”
SEQUENZIALE
(successione delle operazioni strettamente deterministica,
cioè esiste un ordine di precedenza) un fuoco – una
pentola
- Far bollire la salsa
- far soffriggere la carne tritata
- dopo un minuto mescolare la salsa
- aggiungere sale alla carne
- dopo due minuti mescolare la salsa
- quindi aggiungere sale alla salsa
- continuare a mescolare la salsa ogni minuto finchè la
carne è cotta
- aggiungere la carne alla salsa
- continuare a mescolare il ragu’ finchè il tutto è ben
amalgamato,
- quindi togliere dal fuoco e servire
CONCORRENTE
(uso di due fuochi con due pentole)
Salsa
1. far bollire la salsa
2. dopo un minuto mescolare la salsa
3. dopo due minuti mescolare la salsa
4. quindi aggiungere sale alla salsa (*)
5. continuare a mescolare la salsa ogni
minuto finchè la carne è cotta (**)
6. continuare a mescolare il ragu’ finchè il
tutto è ben amalgamato, quindi togliere
dal fuoco e servire
carne
1. far soffriggere la carne tritata
2. aggiungere sale alla carne (*)
3. quando la carne è cotta aggiungerla alla
salsa (**)
Questi processi, in generale, non possono evolvere e in modo del tutto indipendente ma devono interagire ed essere sincronizzati. In particolare ci sono due tipi di
interazione:

COOPERAZIONE (sincronizzazione):
i processi sono logicamente connessi, cioè quando un processo, per evolvere, ha bisogno dei dati dell'altro

INTERFERENZA
I processi sono logicamente NON connessi e potrebbero ( e vorrebbero ) evolvere in odo indipendente ma non lo possono fare perche’ le risorse del sistema
(periferiche, memoria, files etc) sono in numero limitato vanno condivise"
NB. Le risorse di un sistema possono essere classificate come Condivisibili (Sharable) (cioè usabili da parecchi processi in contemporanea, ad ex,. un file a sola
lettura o un'area di memoria protetta) o NON Condivisibili (NON- Sharable) cioè il loro uso è riservato a un processo alla volta (ad ex. periferiche, file scrivibili,
aree dati modificabili etc)
Relazioni di precedenza
Si abbia ad ex : Un unico processo di questo genere:
Leggo 1
Eseguo 1
Scrivo 1
Leggo 2
Eseguo 2
Scrivo 2
Leggo 3
Eseguo 3
Scrivo 3
Si noti che Leggo2 deve essere eseguito dopo Leggo1 ma prima, durante o dopo Eseguo1 il quale deve precedere Scrivo I
Quindi potrei scomporre in modo diverso il processo in diversi processi a patto che questi rispettino le precedenze! Cosi' ad ex posso avere:
L1
L2 E1
L3 E2 S1
E3 S2
S3
Ma anche:
LI
L2
L3
E1
E2
E3
S1
S2
S3
In generale ci sono processi in cui le relazioni di precedenza tra le fasi non sono strettamente deterministiche quindi non sequenziali, ma è OPPORTUNO che le
funzioni siano SCOMPOSTE E RAGGRUPPATE in modo da ottenere PROCESSI SEQUENZIALI
Un processo quindi, è un processo sequenziale
59 - Tecno1 rel. 17.03.17
• La logica del problema non impone un ordinamento totale fra le operazioni da eseguire; ad esempio è indifferente che venga eseguito (2 + 3) prima di eseguire
(6 - 2) o viceversa.
• Entrambe le operazioni precedenti devono invece essere eseguite prima del prodotto dei loro risultati
• Certi eventi del processo sono tra loro scorrelati da qualunque relazione di precedenza temporale; il risultato dell’elaborazione è indipendente dall’ordine con
cui gli eventi avvengono
• Molti settori applicativi possono essere rappresentati da processi non sequenziali: sistemi in tempo reale, sistemi operativi, sistemi di simulazione, etc…
Esercizio: scomporre in processi (paralleli) la formula di risoluzione di una equazione di secondo grado implementazione di un processo (sequenziale)
Sistemi multiprogrammati
Scopo: ottimizzare l’utilizzo della CPU
Un sistema operativo è composto da un insieme di programmi che, per essere eseguiti dalla CPU, devono risiedere in memoria centrale (MC).
Deve però essere possibile eseguire anche almeno un programma utente. Un programma utente deve quindi condividere almeno la CPU e la MC con il sistema
operativo.
Un sistema è detto monoprogrammato quando la sua memoria centrale contiene, in un determinato istante, codice di un unico programma utente.
60 - Tecno1 rel. 17.03.17
Talvolta l’esecuzione di un’istruzione del Processo Utente (PU) comporta la chiamata di una routine di sistema, per esempio richiesta di I/O. Se il programma è
scritto in un linguaggio ad alto livello (C,..) sarà il compilatore a generare il codice appropriato per il SO, poiché le primitive usate dipendono dal SO.
In ogni caso il compilatore genera una sequenza di istruzioni, tra le quali ad un certo punto compare una chiamata al SO. In questo caso il PU deve essere
sospeso a favore del SO, previo salvataggio dello stato del processo. Il salvataggio dei registri, … garantisce il ripristino del processo a patto che l’area di memoria
usata non sia intaccata dalla routine di sistema. E’ riservata una determinata zona di memoria per i moduli del sistema, e i PU sono caricati in un’altra area di
memoria.
Quando il PU termina, la memoria è disponibile per l’esecuzione di un altro PU.
Si può dividere il tempo che intercorre tra l’inizio e la fine del programma in intervalli caratterizzati dalle diverse attività della CPU:



esecuzione di istruzioni del PU
esecuzioni di istruzioni del SO
inattività, per esempio, quando attende un input da tastiera.
Sia Tempo Totale = TempoUtente + Tempo Inattivo + Tempo Sistema

Tempo Inattivo può essere grande rispetto agli altri perché la CPU è molto veloce. In particolare in programmi interattivi;il tempo che intercorre tra
due battiture di tasti (decimi di secondo) è lunghissimo rispetto ai tempi di esecuzione della macchina (miliardesimi di secondo). Nel Tempo Inattivo la
CPU potrebbe eseguire istruzioni di altri programmi
Si tenga presente che, come ampiamente visto, è possibile sospendere l’esecuzione di un processo a favore di un altro, e poi riprendere l’esecuzione del
processo sospeso.
Conclusione: si potrebbe sfruttare maggiormente la CPU facendo in modo che, nel Tempo Inattivo, venga usata per eseguire un altro PU. In tal modo si ottiene
un uso più razionale della risorsa CPU. Anziché usare più CPU, si usa una sola CPU.
Un tale Sistema è detto multiprogrammato .
Per realizzare la multiprogrammazione occorre avere a disposizione meccanismi per:
decidere quale istruzione deve essere eseguita dopo quella in esecuzione (se dello stesso programma o di un altro)
protezione tra diversi programmi, per evitare che i dati di uno vengano inquinati con quelli di un altro.
Risolvere eventuali conflitti che possono sorgere per l’assegnazione di una determinata risorsa che può essere condivisa tra più processi.
Il SO deve intervenire periodicamente, non solo su richiesta di un PU: tutte le attività sopra descritte devono essere svolte dal SO; da ciò consegue che il Tempo
Inattivo recuperato, non sarà completamente utilizzato per eseguire istruzioni di PU, ma anche per eseguire routine del sistema (system overhead : carico di
lavoro imposto al sistema)
grafico dei processi A,B.C in un sistema MONOPROGRAMMATO: (===== rappresenta l’attività)
A
A
B
B
C
C
CPU ======.............======.======.............====== ======..............======
A
B
C
I/O ……….======.........…………...======............................======.............
A
======.............======...............
B
…………………………….======...............======..........................................
C
…………………………………………………………...======...............======....
- grafico degli stessi processi in un sistema MULTIPROGRAMMATO:
A
B
A
B
C
C
CPU =====.====== =====.====== ======..............======
A
B
C
I/O ……….======.======.........................======.............
A
======.............======...............
B
…………======.............======..........................................
C
………………………………………======...............======....
- grafico degli stessi processi in un sistema MULTIPROGRAMMATO con una schedulazione diversa:
A
B
C
A
B
C
CPU =====.====== =====.====== ======.======
A
B
C
I/O ……….======.=====.======.............
A
======...........…………..======...............
B
…………======..........…………..======..........................................
C
……………………======............………….======....
61 - Tecno1 rel. 17.03.17
Time sharing
Una risorsa viene gestita in time sharing quando il suo uso viene concesso al richiedente, per un tempo che non può superare un massimo: questo intervallo di
tempo viene chiamato time slice (quanto di tempo).
Se la CPU di un sistema multiprogrammato viene gestita in time sharing, essa rimane assegnata ad un Processo Utente fino a che non si verifica una delle
seguenti condizioni:



il Processo termina
il processo in esecuzione richiede I/O
scade il time slice
Quando si verifica uno di questi eventi il controllo della CPU passa al SO che “decide” a quale processo assegnare la CPU tra quelli che ne hanno fatto richiesta e
che sono pronti per andare in esecuzione.
Il tempo impiegato dal SO operativo per effettuare queste operazioni viene detto tempo di riassegnamento. (si verifica context switch).
Stati di un processo
Immaginiamo di entrare in un supermercato e studiare il comportamento della cassiera e dei clienti:
Notiamo alcune analogie:

Cassiera/Cassa: Unità Centrale di Elaborazione

Clienti: processi

Cliente (che sta pagando) alla cassa: in che stato è?

Clienti in coda alla cassa: in che stato sono?

Clienti in coda alla macchina del caffè/gelato/snack/verdura: in che stato sono?

Guardia giurata: schedulatore
Ora vediamo la macchina a stati del processo:
62 - Tecno1 rel. 17.03.17
- stati di un processo Esecuzione (run): il processo è in evoluzione; gli è stata assegnata la CPU
Pronto (ready) :attende che gli venga assegnata la CPU
Attesa (wait): avendo richiesto un’operazione di I/O, la CPU gli è stata tolta, ed il processo è in attesa su una periferica.
Passaggi di stato:
All’inizio il nuovo processo creato viene caricato in memoria e va nello stato di pronto
da pronto a esecuzione: la CPU viene assegnata al processo
da esecuzione a pronto: scade il time slice (o avviene una interruzione) e al processo viene tolta la CPU
da esecuzione a attesa: il processo richiede un I/O, la CPU gli viene tolta anche se non è scaduto il time slice
da attesa a pronto: l’operazione di I/O è terminata e il processo è inserito nella coda dei processi pronti per entrare in esecuzione
I passaggi da uno stato all’altro sono gestiti con interrupt sincroni o asincroni:

Cioè i processi possono sospendersi a causa di un evento esterno non prevedibile (un interrupt hardware o un timer che scade) : interrupt asincrono

Oppure sospendersi volontariamente , perché ad esempio, in attesa di una risorsa , tramite un interrupt sincrono (software), tipicamente realizzato
con una chiamata al sistema operativo (Interrupt Sincrono o Supervisor Call (SVC) o System Call).
http://lia.deis.unibo.it/Courses/sola0708-auto/materiale/2.Processi.pdf
63 - Tecno1 rel. 17.03.17
Il nucleo
Virtualizzazione CPU
In ambiente multiprogrammato con CPU gestita in time sharing, è possibile vedere la CPU come un insieme di processori virtuali assegnati ai processi. I tempi di
commutazione sono così veloci che sembra che ciascun processo abbia a disposizione un processore. In realtà questo è uno solo, ma corrisponde a tanti
processori virtuali che fanno avanzare i processi. I moduli esterni potranno contare su una pluralità di processori, senza occuparsi dei problemi inerenti
l’assegnazione della CPU o delle interruzioni.
Il nucleo (kernel) è la parte del SO più vicina alla macchina.
L'accesso diretto all'hardware può essere anche molto complesso. Il Sistema Operativo e , in particolare il Kernel, “nascondono” le complessità dell’hardware e
rendono la macchina “gradevole” all’utente.
Pur nelle loro differenze c'è un elemento strutturale che accomuna ogni sistema operativo – sia mobile sia desktop – oggi in uso: il kernel (“nocciolo” o “fulcro in
inglese). Naturalmente, ognuno dei sistemi operativi (Windows, Android, iOS, Mac OS, …) ha un proprio kernel, realizzato in base alle necessità del sistema
operativo stesso. Per funzionare, però, tutti hanno bisogno di questo componente.
Utilizzando varie modalità di gestione – tra le quali la e le – il kernel fa da ponte tra le componenti hardware di un computer – come processore, RAM e hard
disk – e i programmi in esecuzione sul computer stesso. Data la sua rilevanza, è il primo programma ad essere caricato in memoria quando si accende un
computer e l'ultimo ad essere chiuso in fase di spegnimento. (cfr. Wikipedia e altre fonti in rete)
NOTA : Il kernel
I kernel implementano uno o più tipi di astrazione dall'hardware, il cosiddetto: . Queste astrazioni servono a
"nascondere" la complessità e a fornire un'interfaccia pulita ed uniforme all'hardware sottostante, in modo da
semplificare il lavoro degli sviluppatori.
I kernel si possono classificare - in base al grado di astrazione dell'Hardware - in almeno tre categorie (vedi
figura sottostante):
Kernel monolitici, che implementano direttamente una completa astrazione dell'hardware sottostante.
Microkernel, che forniscono un insieme ristretto e semplice di astrazione dell'hardware e usano software
(chiamati o ) per fornire maggiori funzionalità.
Kernel ibridi (o microkernel modificati), che si differenziano dai microkernel puri per l'implementazione di
alcune funzioni aggiuntive al fine di incrementare le prestazioni.
Compiti principali:



avvio e terminazione dei processi
assegnazione CPU ai processi
sincronizzazione tra processi
Tra le altre comprende le procedure per determinare a quale processo assegnare la CPU secondo determinate politiche di scheduling.
64 - Tecno1 rel. 17.03.17
Scheduler – Algoritmi di scheduling
Quando più di un processo è pronto per essere eseguito, il SO deve decidere a quale, tra i processi pronti, assegnare la CPU.
La parte di SO che si occupa di questa decisione viene chiamata scheduler (schedulatore), e l’algoritmo che usa è chiamato algoritmo di scheduling.
Lo Scheduler della CPU (“a breve termine”): è quella parte del S.O. che seleziona dalla coda dei processi pronti il successivo processo al quale assegnare l’uso
della CPU.
Lo scheduler è legato al tipo di politica adottato e non al meccanismo utilizzato per attuare tale politica.
I criteri secondo i quali è valutata la bontà di uno scheduler possono essere classificati nel seguente modo:
equità: assicurare che ciascun processo ottenga la CPU
efficienza: sfruttamento ottimale della CPU
livello di multiprogrammazione: numero di programmi in memoria
Throughput: numero di lavori processati nell’unità di
oppure throughput = TempoUtente / TempoTotale )
tempo
(throughput
=
numero
processi
eseguiti
/
TempoTotale
I tempi:
tempo di attesa : tempo per entrare in esecuzione
tempo di completamento (turnround time): intervallo di tempo tra inizio di un processo e la sua fine
overhead di sistema: tempo esecuzione del sistema operativo a scapito dei programmi utente.
CPU burst: tempi in cui viene impiegata soltanto la CPU senza I/O (al contrario di I/O burst: fasi in cui il processo effettua input/output da/verso una
risorsa(dispositivo) del sistema)
I meccanismi di scheduling:

preemptive se sospendono d’autorità un dato processo

non preemptive se consentono l’esecuzione di un processo sino in fondo. Questi sono semplici e facili da implementare, ma non sono adatti ai
sistemi multiutente. Esistono però sistemi dedicati, per esempio database, in cui è necessario fare iniziare un processo su una richiesta e non
interromperlo finché non completa la sua esecuzione.
Terminologia:
Ogni processo alterna:

CPU burst: fasi in cui viene impiegata soltanto la CPU senza I/O

I/O burst: fasi in cui il processo effettua input/output da/verso una risorsa(dispositivo) del sistema (burst = raffica)
Processi I/O bound: prevalenza di attivita` di I/O: molti CPU burst di breve durata, intervallati da I/O burst di lunga durata (bound=legato,confinato)
Processi CPU bound: prevalenza di attivita` computazione: CPU burst di lunga durata, intervallati da pochi I/O
Lo scheduler decide a quale processo assegnare la CPU. A seguito della decisione, viene attuato il cambio di contesto (context-switch).
Dispatcher: è la parte del S.O. che realizza il cambio di contesto.
http://lia.deis.unibo.it/Courses/SOA0405/lucidi/6.schedulingCPU4.pdf
First Come First Served (FCFS)
65 - Tecno1 rel. 17.03.17
Il primo processo che richiede la CPU è il primo ad essere servito
Svantaggio: non distingue tra processi che hanno interattività e processi che invece non ne hanno. Il tempo di risposta non è dei migliori. Il tempo di
completamento (turnround) è variabile.
Esempio 1 determinare il tempo medio di completamento :
dati tre processi A;B;C, il tempo di esecuzione è Ta=30, Tb=55, Tc=5,


se i processi vengono eseguiti nell’ordine A B C:
o
il tempo medio di completamento risulta 68 (30+85+90)/3,
se vengono eseguiti C;A;B allora
o
tempo medio di completamento è 43 (5+35+90)/3
Esempio 2 determinare il tempo medio di attesa :
Nota: Un diagramma di Gantt permette la rappresentazione grafica di un calendario di attività, utile al fine di pianificare, coordinare e tracciare specifiche dando
una chiara illustrazione dello stato d'avanzamento delle attività rappresentate
Round Robin (RR)
A ciascun processo è assegnato un quanto di tempo, durante il quale il processo è posto in esecuzione. Se il processo non è ancora terminato prima della fine
del quanto, gli viene tolta la CPU ed assegnata ad un altro processo. Se termina prima che il suo quanto scada, la commutazione della CPU avviene quando il
processo termina.
L’implementazione di questa politica richiede allo scheduler di mantenere una lista di processi eseguibili (stato di pronto). Allo scadere del quanto di tempo, il P
è posto nella coda dei processi pronti (coda di Ready).
Particolare importanza assume il dimensionamento del quanto di tempo:

se troppo breve => continua commutazione dei processi, abbassamento efficienza CPU, impegnata per lo più ad effettuare commutazioni di contesto
tra i processi

se troppo lungo => non adatto nel caso di richieste brevi; inoltre i P in attesa restano molto tempo fermi (non va bene nei sistemi interattivi)
Compromesso: 10-100 msec.
P1
P2
P3
P1
P2
P1
P1
P3
P2
Fine time slice
Tempo di riassegnamento
Richiesta I/O
Fine I/O
P3
Fine I/O
P2
Fine P3
Lo scheduler RR è molto usato in sistemi time-sharing per assegnare il processore ai processi in competizione. Il principio di funzionamento di questa tecnica è il
seguente: un P entra nel sistema collegandosi a una coda gestita con politica FIFO detta coda di ready. Ogni volta che un processo raggiunge la testa della coda,
questo viene eseguito per un intervallo di tempo predeterminato detto quanto. Se il processo non completa la sua esecuzione nel suo quanto, viene reinserito
nella coda di ready.
66 - Tecno1 rel. 17.03.17


Vantaggi: di RR sono la sua semplicità e il basso carico di lavoro nel prendere la decisione.
Svantaggi: se tutti i p sono CPU-bpound (un processo è detto CPU bound se compie principalmente computazioni e usa occasionalmente dispositivi di
I/O), il sistema si comporta equamente con ogni P, ma se è costituito da P sia CPU bound, sia I/O bound, è preferibili comportarsi in maniera differente
a seconda del tipo di processo, per evitare di privilegiarne uno a danno di altri. (VRR)
Esempio : cosa capita al variare del quanto di tempo? Il tempo medio di completamento varia in funzione del quanto di tempo.
Esempio con più processi:
P1=6 unità temporali, P2=3, P3=1 e P4=7:
quanto di tempo =2 -> T medio completamento = 14+10+15+17/4 = 11,5
quanto di tempo =3 -> T medio completamento = 13+6+7+17/4 = 10,75
quanto
tempo
di
Tempo medio di
completamento
1
11
2
11,5
3
10,75
4
11,5
5
12,25
6
10,5
7
10,5
(cfr Sistemi Operativi - Silberschatz , Galvin, Gagne - )
Shortest job first
Consiste nell’assegnare la CPU al job più corto. Questo permette di ottimizzare il tempo di turnround. Ad esempio siano A;B;C tre job con tempi di esecuzione
10,6,4 unità di tempo rispettivamente. Se venissero eseguiti nell’ordine A;B;C il tempo di turnround sarebbe: 10 per A, 16 per B, 20 per C, per un tempo medio di
15 unità ca.
Se vengono eseguiti nell’ordine C,B,A, i tempi di t saranno 4,10,20 con una media di 11 unità.
A_____________________10 10+
B____________6 16+
C________4 20= 46 /3 ≈ 15
C________4 4+
B____________6 10+
A_____________________10 20= 34 / 3 ≈ 11
Meccanismo di priorità
67 - Tecno1 rel. 17.03.17
codice pronto soccorso
A ciascun processo è assegnata una priorità; la CPU è assegnata al Processo (P) pronto con più alta priorità. Per evitare che un Processo possa essere eseguito
indefinitamente, lo scheduler può diminuire la priorità del P corrente ad ogni colpo di clock. In questo modo se il livello di priorità scende al di sotto di quello del
P successivo a priorità più alta, avviene la commutazione.
La priorità può essere definita in modo statico o dinamico.
Il meccanismo di priorità può essere combinato con quello Round Robin; si raggruppano i processi in classi di priorità e si adotta lo schema delle priorità tra le
varie classi, e la politica RR all’interno di ciascuna classe
Es
Priorità 4
Priorità 3
Priorità 2
Priorità 1
Finché ci sono P eseguibili nella coda di priorità 4, ciascun P viene eseguito per il proprio quanto. Se la coda di pr 4 si svuota, allora vengono eseguiti i P della
coda 3 RR, e così via. Se le pr non vengono modificate di volta in volta, le classi a priorità bassa possono non essere mai eseguite.
Aging (invecchiamento): aumento graduale della priorità dei processi che si trovano in attesa nel sistema da lungo tempo.
Un modo per realizzare l’aging è Highest Response Ratio Next scheduling uno Scheduling senza prelazione a priorità variabile.
La priorità è funzione di: Tempo di attesa e Tempo di burst
P = 1 è la minima priorità
T attesa: favorisce i processi che hanno già atteso molto
T burst: favorisce i processi corti
Thread
Il concetto di processo è associato a quello di thread (abbreviazione di thread of execution, filo dell'esecuzione), con cui si intende l'unità granulare in cui un
processo può essere suddiviso, e che può essere eseguito in parallelo ad altri thread.
Il multithreading è, quindi, una tecnica che permette di avere più flussi di esecuzione contemporanei (thread) di uno stesso programma in esecuzione, su CPU
differenti o sulla stessa.
In altre parole, un thread è una parte del processo che viene eseguita in maniera concorrente ed indipendente internamente al processo stesso.
Il termine inglese rende bene l'idea, in quanto si rifà visivamente al concetto di fune composta da vari fili attorcigliati: se la fune è il processo in esecuzione, allora
i singoli fili che la compongono sono i thread.
• Un processo ha sempre almeno un thread (se stesso), ma in alcuni casi un processo può avere più thread che vengono eseguiti in parallelo.
Una prima differenza fra thread e processi modo con cui essi condividono le risorse:
• i processi sono di solito fra loro indipendenti, utilizzando diverse aree di memoria interagendo soltanto mediante appositi meccanismi di comunicazione messi a
68 - Tecno1 rel. 17.03.17
disposizione dal sistema
• i thread tipicamente condividono le medesime informazioni di stato, la memoria ed altre risorse di sistema.
• Il processo è l'oggetto del sistema operativo a cui sono assegnate tutte le risorse di sistema per l'esecuzione di un programma,tranne la CPU.
• Il thread è l'oggetto del sistema operativo o dell'applicazione a cui è assegnata la CPU per l'esecuzione.
In un sistema che non supporta i thread, se si vuole eseguire contemporaneamente più volte lo stesso programma, è necessario creare più processi basati sullo
stesso programma.
Tale tecnica funziona, ma è dispendiosa di risorse, sia perché ogni processo deve allocare le proprie risorse, sia perché per comunicare tra i vari processi è
necessario eseguire delle relativamente lente chiamate di sistema, sia perché la commutazione di contesto tra thread dello stesso processo è più veloce che tra
thread di processi distinti.
Avendo più thread nello stesso processo, si può ottenere lo stesso risultato allocando una sola volta le risorse necessarie, e scambiando i dati tra i thread tramite
la memoria del processo, che è accessibile a tutti i suoi thread.
Avendo più thread nello stesso processo, si può ottenere lo stesso risultato allocando una sola volta le risorse necessarie, e scambiando i dati tra i thread tramite
la memoria del processo, che è accessibile a tutti i suoi thread.
Elementi per ogni Thread
Elementi per ogni Processo
•Program counter
•Stack
•Insieme dei registri
•Thread figli
•stato
•Spazio degli indirizzi
•Variabili globali
•File aperti
•Processi figli
•…..
Il multithreading permette di suddividere il lavoro in modo efficiente, ma introduce una complessità legata alla sincronizzazione tra i vari thread.
Un esempio di applicazione che può far uso di più thread è un browser Web, che usa un thread distinto per scaricare ogni immagine in una pagina Web che
contiene più immagini.
Un altro esempio è costituito dai processi server, spesso chiamati servizi o daemon, che possono rispondere contemporaneamente alle richieste provenienti da
più utenti.
L'architettura di una applicazione basata su un unico processo non funziona bene in un server di applicazioni Web. Se un utente con un Browser in Hawaii visita
una pagina del tuo sito Web, il server inizia a processare la richiesta. Se poi arriva la richiesta di un altro utente dalla Nuova Zelanda, esso deve aspettare fino a
quando la richiesta anteriore non si sia conclusa.
Una possibile soluzione a questo problema è avere molteplici processi che rispondano a queste richieste in modo tale che siano soddisfatte in un modo più o
meno simultaneo. Questo è ciò che fanno i CGI (ogni CGI crea un nuovo processo che a sua volta crea una pagina, dopodichè finisce). Tuttavia, ciò porta ad un
uso eccessivo delle risorse ed è inefficiente.
La priorità in Windows
Windows 2000 (con i suoi successori) dispone di uno scheduling dei processi (piu’ precisamente dei thread) servendosi di un algoritmo preemptive e a priorità.
La parte del nucleo che si occupa della schedulazione si chiama dispatcher.
Vengono sempre eseguiti i thread a priorità piu’ alta . Essi vengono interrotti se terminano, esauriscono il loro quanto di tempo , richiedono un I/O, oppure deve
essere mandato in esecuzione un thread a priorità piu’ alta: se un thread real-time entra nella coda dei processi pronti il processo a bassa priorità in esecuzione è
soggetto a prelazione (preemptive). Tuttavia Wndows2000 non è un S.O. real time : infatti NON garantisce un tempo prefissato entro cui il processo ad alta
priorità possa entrare in esecuzione.
Come mostrato in figura, il dispatcher impiega uno schema con diverse priorità, percorrendo l’insieme delle code da quella a priorità maggiore alla minore , fino a
trovare un thread pronto per l’ esecuzione. Se nessun thread è presente nelle code il dispatcher fa eseguire un thread speciale , di attesa, l’idle thread.
In Windows, ad ogni processo viene assegnata una delle seguenti quattro possibili classi di priorità :

IDLE_PRIORITY_CLASS>
o
usata per le applicazioni che devono andare in esecuzione quando il sistema non ha nient’altro da fare un esempio classico è lo screen
69 - Tecno1 rel. 17.03.17



saver
NORMAL_PRIORITY_CLASS
o
è la classe di default usata nella maggior parte delle applicazioni utente
HIGH_PRIORITY_CLASS
o
usata per quei processi che non possono essere interrotti durante la loro esecuzione e che svolgono la loro elaborazione in un tempo molto
ridotto che non pregiudica l’avanzamento dei processi a priorità inferiore usata dai processi di sistema
REAL_TIME_PRIORITY_CLASS
o
serve generalmente quando degli eventi devono essere elaborati immediatamente non appena si verificano non è consigliabile usarla
perché rallenta notevolmente i processi di sistema che gestiscono l’input dal mouse e della tastiera disco usata nei sistemi real time
La priorità in Linux
Linux dispone di due tipi di algoritmi di scheduling:

uno, equo, a partizione di tempo con diritto di prelazione;

un altro, progettato per il tempo reale, in cui le priorità sono piu’ importanti dell’equità.
Linux permette la prelazione dei soli processi eseguiti in modo utente, mentre un processo del nucleo non è soggetto a prelazione anche se un processo ad alta
priorità lo richiede.

processi a partizione di tempo. In questa classe Linux adotta un algoritmo basato sui crediti: quando occorre assegnare la CPU viene scelto il processo
col numero maggiore di crediti.
Ad ogni time slice il processo perde un credito.
Quando raggiunge lo zero, il processo viene sospeso e un altro subentra al suo posto.
Se tutti i processi hanno zero crediti, il SO procede a una rassegnazione dei crediti che tiene conto della priorità del processo aggiungendone ad ogni
processo nel sistema, e non solo a quelli eseguibili, i crediti secondo la formula:
crediti_nuovi= crediti_precedenti/2 + priorità

Processi in tempo reale (real time). La situazione è ancora piu’ semplice: esistono le due classi FCFS e RR. Ad ogni processo è assegnata una priorità.
Viene mandato in esecuzione (secondo RR o FCFS) il processo a priorità maggiore e, a pari priorità, quello che attende da maggior tempo. Anche in
Linux il real time è “debole” perché non c’è alcuna garanzia sul tempo in cui un processo in pronto venga mandato in esecuzione.
Tratto da : Introduzione ai sistemi real time Di GianLuca DeMichelis
Il comando nice (nice [OPTION] [COMMAND [ARG]...]) consente di dare una maggiore o minore priorità di esecuzione: la priorità può essere modificata da
nice nel range [-20, 19], -20 è la più alta priorità (massima precedenza di esecuzione), mentre 19 è la più bassa. Ad esempio :
$ nice -n 5 ~/bin/longtask
Esempio:
nice -n 15 nano
Nota: I valori da asegnare sono limitati dal seguente intervallo 19 e -20
Utillizando un valore negativo si aumenta la priorità del processo
Utilizzando un valore positivo si diminuisce la priorità del processo
L'utente normale puo utilizzare soltanto i valori positivi in quanto non ha i permessi per poter utilizzare i valori negativi.
Soltanto l'amministratore puo aumentare la priorità di un processo.
Il comando nice può essere utilizzato soltanto per avviare il processo , nel caso il quale si desidera cambiare la priorità durante l'esecuzione
si può utilizzare il comando renice
70 - Tecno1 rel. 17.03.17
Processi sequenziali e concorrenti
Corse critiche, Interferenza e Cooperazione
Spesso i processi non possono evolvere in modo del tutto indipendente, ma devono essere sincronizzati per garantire un perfetto funzionamento del sistema.
In particolare, si dice che più processi interferiscono tra loro quando, da un punto di vista logico, potrebbero evolvere in modo indipendente se non dovessero
usufruire della stessa risorsa.
Si dice che due processi cooperano quando sono logicamente interconnessi, cioè quando, per evolvere, uno dei due deve usare una risorsa che viene prodotta
dall’altro.
I programmi associati ai processi dovranno contenere apposite istruzioni (primitive) per la loro sincronizzazione e per la produzione e lo scambio di messaggi.
Le Corse Critiche sono situazioni in cui due o più processi leggono o scrivono dati condivisi. In questo caso il risultato dell’elaborazione dipende dall’ordine di
schedulazione dei processi.
La sequenza delle operazioni che possono portare a corse critiche è detta sezione critica.
Per evitare che si verifichi il problema i due processi non possono entrare contemporaneamente nella stessa Sezione Critica.
Esempio spooler di stampa
PA e PB condividono due variabili : in che punta al prox elemento libero, out che punta al primo elemento da stampare. Ci troviamo in questa situazione che
rappresenta l’occupazione di memoria. “Simultaneamente” PA e PB decidono di stampare:
0

1

2

3

4

5

6

7
8
9
Caso sfortunato:

PA legge in e trova che il prossimo elemento libero è 7, cosi’ assegna ad una var prox_libero_a :=7
Interrupt (ad esempio scade il time slice):

SO toglie CPU a PA.

SO assegna CPU a PB.

PB legge in (non ancora modificata da PA) e assegna ad una var prox_libero_b :=7, Inserisce il nome del file da stampare nell’item 7,
in := prox_libero_b +1, prosegue nella sua esecuzione
0

1

2

3

4

5

6

7
File PB
8
9


SO assegna CPU a PA.
PA
riprende da dove
in:= prox_libero_a +1, Prosegue
0
1
2
3
4
5
6
era
stato
interrotto.
Inserisce
il
nome
del
file
da
stampare
nell’item
7
(prox_libero_a)







71 - Tecno1 rel. 17.03.17
7
8
9
File PB
0
1
2
3
4
5
6






7
8
9

File PA
Formalmente non ci sono errori per quanto riguarda la gestione dei file da stampare, ma il file del processo B non sarà mai stampato!
Un problema analogo è quello della prenotazione , da parte di due utenti, di un posto aereo con la richiesta fatta, in contemporanea, a due operatrici diverse che
controllano i posti disponibili sull’aereo e ne danno conferma al cliente.
Sezioni critiche – Mutua esclusione
Studiamo un altro esempio riguarda il caso di due processi che possono allocare e deallocare dinamicamente aree di memoria centrale, di grandezza predefinita,
mediante due primitive Alloc e Dealloc:
ALLOC(ptr);
DEALLOC(ptr);
ptr  stack(top);
top  top+1;
top  top-1;
stack(top)  ptr;
Si noti che top è una locazione di sistema , condivisibile dai due processi.
Si supponga ora che avvenga la seguente sequenza di due processi P1 e P2 che eseguono la primitiva ALLOC:
P1
P2
ptr  stack(top);
...
(la CPU è assegnata a P2 e P1 viene sospeso)
ptr  stack(top);
top  top-1;
top  top-1;
(la CPU è assegnata a P1)
Le due ALLOC interfogliate causano due problemi:

P1 e P2 allocano la stessa area di memoria

Un’area di memoria diventa inaccessibile a tutti i processi
Quindi al fine di evitare i problemi mostrati occorre che una risorsa condivisa possa essere usata da UN SOLO PROCESSO ALLA VOLTA.
In altre parole occorre attuare una mutua esclusione, cioè occorre impedire che più di un processo alla volta legga/scriva “contemporaneamente” dati condivisi.
Se un processo sta usando una risorsa condivisa, bisogna impedire ad altri di poterlo fare.
Ma non basta. Occorre che siano soddisfatte 4 condizioni:

due processi non devono mai trovarsi nelle loro sezioni critiche contemporaneamente

non si deve fare alcuna assunzione sulle velocità e sul numero delle CPU

nessun processo in esecuzione fuori dalla sua sezione critica può bloccare altri processi

nessun processo deve aspettare indefinitamente (troppo a lungo) per poter entrare in una sua sezione critica
Per cercare di risolvere queste situazioni critiche si possono attuare una serie di soluzioni.
Soluzioni
72 - Tecno1 rel. 17.03.17
Primitive di Lock/Unlock
Una prima soluzione al problema potrebbe essere quella di associare a una risorsa critica una variabile (S) condivisa che assume due valori: rosso (0) nel caso il
processo è dentro una sezione critica , verde (1) in caso contrario.
Consideriamo le due primitive, LOCK (S) e UNLOCK(S) . Un processo che vuole entrare in una sezione critica :
..
LOCK(S)
Regione critica
UNLOCK(S)
…
le Primitive saranno cosi’ implementate:
LOCK(S)
While (S==0); //se è rosso … non fare niente
S=0; //mettilo rosso!
UNLOCK(S)
S=1; //mettilo verde!
Quando un processo vuole entrare nella sua regione critica, controlla S: se è rossa aspetta, altrimenti la mette a rossa, ed entra nella sezione critica.
problema:
un P1 legge S e prima che ne modifichi il valore, viene tolta la CPU e data ad un altro processo P2. P2 legge S, la trova verde ed entra nella sezione critica. P1
riprende, setta S rossa ed entra nella sezione critica. Viene meno il vincolo 1 !
Occorre quindi fare in modo che le primitive siano INDIVISIBILI: per fare ciò, un metodo, è quello di disabilitare le interruzioni appena si entra in una sezione
critica.
Problema:
E se un processo utente disabilitasse le sue interruzioni, e non le riabilitasse più? E’ la fine!!!
Se le CPU sono più di una, la disabilitazione riguarda una sola CPU, le altre potrebbero eseguire istruzioni che accedono alla memoria condivisa. (vincolo 2)
Sebbene Lock e Unlock, con la disabilitazione delle interruzioni, garantiscano la correttezza, almeno in linea di massima, l’efficienza NON è affatto garantita.
Due sono i problemi che nascono.

Attesa attiva (busy waiting) : quando un processo esegue una Lock continua a testare il valore di S finchè diventa verde; in tal modo essa occupa
continuamente e inutilmente la CPU!

Rinvio Infinito non esiste alcun ordine con cui vengono eseguiti i processi che eseguono una Lock. Cosi’ un processo potrebbe aspettare molto tempo
prima di accedere a una sezione critica e, al limite, non entrarvi mai perché sempre anticipato da un altro processo che diventa attivo sempre prima di
lui.
I problemi esposti derivano dal fatto che, mediante Lock e Unlock, è il singolo processo che provvede a sincronizzarsi con gli altri.
Tutto cio’ ci fa pensare che il controllo dei processi e delle sezioni critiche vada delegato a chi ha una visione complessiva dello stato del sistema : il NUCLEO!
Ecco perché Lock e Unlock vengono sostituite da due nuove primitive chiamate P e V che agiscono su un semaforo.
Semafori
Da quanto detto emerge come processi logicamente corretti possono produrre errori se non correttamente sincronizzati. Inoltre, cio’ che è piu’ grave, compaiono
errori dipendenti dal tempo cioè dalla velocità relativa di esecuzione dei processi: come nell’esempio del Produttore-Consumatore: provate a trovare la sequenza
corretta e quelle errate.
E’ quindi INDISPENSABILE ricorrere a MECCANISMI ESPLICITI DI SINCRONIZZAZIONE. IL meccanismo base , messo a disposizione dal nucleo, è il SEMAFORO
(Dijkstra , 1965) che , nella versione base consiste in un intero non negativo che, a parte l’ inizializzazione, puo’ essere usato solo da due primitive : P per Wait
(dall’olandese Proberen: provare) e V per Signal (dall’olandese verhogen: incrementare)
73 - Tecno1 rel. 17.03.17
SEMAFORO BINARIO
Il semaforo Binario è una VARIABILE BINARIA (S) sulla quale possono essere eseguite due primitive indivisibili P e V cosi’ definite:
(nota 0=rosso . 1=verde):
P(S) o Wait(S)
while S==0 ; //se è rosso non fare niente
S=0;
//mettilo rosso!
V(S) o Signal(S)
S=1; //mettilo verde
Come Lock e Unlock sono indivisibili ma essendo implementate dal nucleo del S.O, esse consentono di evitare sia l’attesa attiva che il rinvio infinito.
Un semaforo può essere modificato da parte del codice utente solamente con tre chiamate di sistema:
1. init (s, 1) //per inizializzare il semaforo s a 1
2. wait (s) // richiesta risorsa
3. signal(s)// rilascio
Intuitivamente, il significato delle operazioni per un semaforo binario, è il seguente:
con l'inizializzazione, cioè l’assegnazione del valore 1 al semaforo, si dichiara la disponibilità della risorsa
Con l'operazione P, un task chiede di riservare un'unità della risorsa. Se la risorsa non è disponibile, il task viene messo in attesa, per essere risvegliato solo
quando gli sarà assegnata l'unità richiesta.
Con l'operazione V, un task rilascia l'unità di cui non ha più bisogno, e per la quale altri task potrebbero già essere in attesa.
Mutua esclusione
Un utilizzo molto semplice dei semafori si ha per garantire la mutua esclusione nell'accesso a una risorsa semplice: in tal caso basta usare un semaforo binario. Si
chiama la P prima di iniziare a usare la risorsa, e si chiama la V dopo averla usata:
Consideriamo due processi (p1 P2) che devono agire sulla stessa risorsa critica:
Inizializzazione: mutex=1 (verde)
P1
..
P(mutex)
Regione critica che
opera sulla risorsa
V(mutex)
..
P2
..
P(mutex)
Regione critica che
opera sulla risorsa
V(mutex)
..
Produttore / consumatore :
74 - Tecno1 rel. 17.03.17
consideriamo due processi (P1 P2) in cui P1 produce un messaggio e P2 lo utilizza, nell’ipotesi che i messaggi vengano scritti su un buffer a cui possono accedere
entrambi (nello stesso modo in cui un insegnante scrive su una lavagna e lo studente legge dalla lavagna).
Ci serviremo di due semafori : “Vuoto” e “Pieno”
Inizializzazione: vuoto=1(verde) : pieno=0 (rosso)
P1
..
ripeti
produci messaggio
P(vuoto)
Scrivi messaggio nel buffer
V(pieno)
Continua
....
P2
..
ripeti
P(pieno)
leggi messaggio dal buffer
V(vuoto)
Consuma messaggio
continua
..
75 - Tecno1 rel. 17.03.17
SEMAFORO GENERALIZZATO
Un semaforo S è una variabile intera (quindi che assume valori 0,1,2,…n) alla quale si può accedere solo attraverso le seguenti operazioni atomiche: P e V
P(S)
V(S)
while S <= 0; //non fare niente
S=S+1; //incrementa il valore
S= S-1; //decrementa il valore
Le modifiche al valore intero del semaforo in P e V sono eseguite atomicamente: mentre un processo modifica il valore di un semaforo, nessun altro processo può
simultaneamente modificare il valore di questo stesso semaforo. Se due processi tentano di eseguire “contemporaneamente” P(S) e V(S), queste operazioni
saranno eseguite sequenzialmente in un ordine arbitrario.
Intuitivamente, il significato delle operazioni per un semaforo generalizzato è il seguente:

con l'inizializzazione, cioè l’assegnazione di un valore intero al semaforo, si dichiarano quante unità di un tipo di risorsa sono disponibili.

Con l'operazione P, un task chiede di riservare un'unità della risorsa. Se non sono disponibili unità, il task viene messo in attesa, per essere risvegliato
solo quando gli sarà assegnata l'unità richiesta.

Con l'operazione V, un task rilascia l'unità di cui non ha più bisogno, e per la quale altri task potrebbero già essere in attesa.
Produttore / consumatore con buffer multiplo
Consideriamo due processi (p1 P2) in cui P1 produce messaggi e P2 li utilizza, nell’ipotesi che i messaggi vengano scritti su un buffer a cui possono accedere
entrambi. Ci serviremo di due semafori : “Vuoto” e “Pieno”
Inizializzazione: vuoto=n(verde, verde, verde ,..) : pieno=0 (rosso)
P1
..
ripeti
produci messaggio
j=j+1 | mod n
P(vuoto)
Scrivi messaggio nel buffer j-esimo
V(pieno)
Continua
....
P2
..
ripeti
k= k+1 |mod n
P(pieno)
leggi messaggio dal k-esimo buffer
V(vuoto)
Consuma messaggio
continua
..
Note sull’implementazione di P e V
P(s) //wait(s), viene chiamata tramite SVC da un processo in EXEC che fa una P(s))
If (s>0 ) //verde
S = s-1
Else //rosso
<Salvataggio contesto di P (PCB <- Cima dello Stack (PC))>
<Accodamento di P nella coda del semaforo S (in Attesa), cioè cambia lo stato da running a waiting>>
<Selezione di P’ (dalla coda dei processi pronti)>
<Ripristino contesto di P’ (Cima dello Stack (PC)<- PCB)>
<P’ in exec >
V(s) ( Signal(s), viene chiamata da SVC o interruzione asincrona)
If (coda sul sem. s vuota)
S = s+1
Else
<Estrazione di P’ dalla coda di s >
<Inserimento di P’ nella coda dei processi pronti >
<Selezione eventuale, di P’da mettere in exec, cioè cambio di stato da waiting a
ready >
--------------------------------------------76 - Tecno1 rel. 17.03.17
Nota:
- si ricorda che un semaforo viene implementato per mezzo di una variabile e un puntatore alla coda dei processi sospesi su quel semaforo (che cioè
hanno eseguito una P trovando il semaforo rosso)
- Se uno o più processi sono in attesa su S, consenti a uno dei processi in wait su S di proseguire.
- Il numero contenuto nel semaforo rappresenta il numero di risorse di un certo tipo disponibili ai task.
- Un caso particolare molto usato è il semaforo binario, in cui gli unici valori possibili sono 0 e 1.
- Le primitive wait e signal vengono eseguite dal nucleo del S.O. e devono essere indivisibili.
Problemi:
1. Drink dei filosofi
I filosofi possono compiere 2 attività non contemporaneamente: bevono e pensano.
Immaginiamo 2 filosofi seduti in torno a un tavolo che dispongono di un unico bicchiere e possono farsi uno dei drink sottostanti:
“ Bloody Mary di Zio Paolo” è un analcolico a base di di limone, acqua tonica e
- “Zombie o Punch del bucaniere Paolo” è un a base succo di mela, menta piperita e spremuta d’arancia
- “Long Island Iced Tea di Zio Paolo” è un a base di verde, succo di ananas e cannella
2 Pranzo dei filosofi (dining philosophers)
Platone
Socrate
Cartesio
Pascal
Kierkegaard
E’ un esempio che illustra un comune problema di .
Si tratta di un classico problema di fra paralleli. L'esempio fu descritto nel da .
Cinque filosofi siedono ad una tavola rotonda con un piatto di spaghetti davanti:
Sul tavolo ci sono 5 bacchette (o forchette) : ogni filosofo per mangiare deve avere 2 bacchette in mano: risorse: bacchette b0...b4. I 5 filosofi possono compiere
2 attività non contemporaneamente: pensare e mangiare.
•
I filosofi mangiano e pensano
•
Quando un filosofo ha fame, tenta di prendere le due bacchette che ha accanto (può prendere solo quelle immediatamente alla propria
destra e sinistra)
77 - Tecno1 rel. 17.03.17
•
Prende prima una bacchetta poi l’altra
•
Non rilascia le bacchette finché non ha finito (non può prendere una bacchetta se è in mano ad un altro filosofo)
Soluzione 1
processi: Filosofo()
S1,2,3,4,5=1 (verde)
process Filosofo {
while (true) {
}
P(Si);
P(Si+1); |mod5;
mangia;
V(Si);
V(Si+1); |mod5;
}
Ma va bene? No, Problema la morte d'inedia (): la soluzione NON esclude il deadlock, ad esempio se tutti i filosofi hanno fame contemporaneamente e
prendono prima la bacchetta alla loro destra.
Alcune soluzioni:

Solo quattro filosofi possono essere seduti contemporaneamente a tavola

Un filosofo può prendere le sue bacchette solo se sono entrambe disponibili (attenzione alle sezioni critiche)

Adottare una soluzione asimmetrica. Un filosofo dispari prende prima la bacchetta di sinistra, un filosofo pari prende prima la bacchetta di destra.
Soluzione 2
Semaforo Room=4
while (true) {
P(Room);
P(Si);
P(Si+1); |mod5;
mangia;
V(Si);
V(Si+1); |mod5;
V(Room);
}
}
Un torrente e attraversato da un ponte.
Caso 1. Un piccolo fiume è attraversato da un ponte. Il ponte è lungo quanto una macchine, ma è largo come una macchina, per cui la circolazione avviene a
senso unico alternato. Sul ponte passa una sola macchina alla volta. (difficoltà bassa)
Caso 2. Un piccolo fiume è attraversato da un ponte. Il ponte è lungo quanto tre macchine, ma è largo come una macchina, per cui la circolazione avviene a
senso unico alternato. (difficoltà alta)
Le regole di circolazione sono:
1. indipendentemente dalla riva da cui provengono, le macchine impegnano il ponte nell’ordine di arrivo;
78 - Tecno1 rel. 17.03.17
2. una macchina non puo impegnare il ponte finchè questo è occupato da una o più macchine provenienti dalla riva opposta;
3. una macchina non puo impegnare il ponte se questo è già occupato da tre macchine.
Scrivere in pseudocodice i programmi corrispondenti a macchine provenienti dalla riva destra e dalla riva sinistra, utilizzando i
semafori per la sincronizzazione.
Soluzione
Innanzitutto la capacità del ponte (requisito (3)) è gestibile con un solo semaforo, opportunamente inizializzato, che protegge la sola fase di transito. In secondo
luogo, il requisito (1) richiede laprotezione (con mutua esclusione tramite semafori) del protocollo di accesso al ponte, in modo da forzare l’ordinamento di tutte
le macchine indipendentemente dalla riva di provenienza.
int m=0;
sem mutexdx=1; /* per controllo di flusso e mutex */
sem mutexsx=1; /* per controllo di flusso e mutex */
sem portata=3; /* capacita’ del ponte */
sem accesso=1; /* forza l’ordinamento delle macchine che arrivano */
Macchina_Destra() {
wait(accesso);
wait(mutexdx); /* per evitare scontri e per mutex */
m++;
if (m==1) wait(mutexsx); /* prima macchina a dx, blocca macchine
dall’altra riva sx*/
signal(mutexdx);
signal(accesso);
wait(portata);
attraversa_ponte();
signal(portata);
wait(mutexdx);
m--;
if (m==0) signal(mutexsx); /*ultima macchina a dx, sblocca macchine
dall’altra riva sx */
signal(mutexdx);
}
Macchina_Sinistra(){
wait(accesso);
wait(mutexsx);
m++;
if (m==1) wait(mutexdx);
signal(mutexsx);
signal(accesso);
wait(portata);
attraversa_ponte();
signal(portata);
wait(mutexsx);
m--;
if (m==0) signal(mutexdx);
signal(mutexsx);
}
Un incrocio di due grandi viali (uno in direzione Nord-Sud, l’altro in direzione Est-Ovest) è regolato da un vigile.
Sincronizzazione completa: avvio il thread2 quando il thread1 ha finito di fare quel che deve fare (semafori incrociati S inizializzato a 0 e P a 1)
Soluzione:
Thread
loop{
wait(S)
<regione
signal(p)
}
Thread
loop{
wait(p)
<regione
signal(s)
}
1
critica>
2
critica>
Il conto corrente
Un conto bancario è condiviso tra più persone. „ Ciascuna può depositare o prelevare mazzette da 100 euro dal conto, ma il saldo non deve mai diventare
negativo. „ Se una persona vuole prelevare e ci sono soldi a sufficienza, lo fa aggiornando il saldo, altrimenti resta in attesa che il saldo renda possibile il prelievo
e, non appena c’è stato un deposito cerca di effettuare il prelievo. „ Quando una persona deposita, avverte un’altra eventuale persona in attesa che c’è stato un
deposito.
79 - Tecno1 rel. 17.03.17
Il barbiere addormentato
• Un negozio di barbiere ha un barbiere, una poltrona da barbiere e N sedie per i clienti in attesa
• Se non ci sono clienti, il barbiere si mette sulla sedia da barbiere e si addormenta
• Quando arriva un cliente, sveglia il barbiere addormentato e si fa tagliare i capelli sulla sedia da barbiere
• Se arriva un cliente mentre il barbiere sta tagliando i capelli a un altro cliente, il cliente si mette in attesa su una delle sedie
• Se tutte le sedie sono occupate, il cliente se ne va!
Soluzione
Possiamo vedere questo problema come un problema di produttore-consumatore:

I produttori sono i clienti, che “producono” se stessi.

Il consumatore è il barbiere, che consuma un cliente alla volta.
Innanzitutto, dobbiamo descrivere la “vita” del barbiere e dei clienti:
process Barbiere {
while (true) {
attendi cliente
// taglia capelli
libera poltrona }
}
process Cliente {
verifica se c'è posto, altrimenti esci
attendi turno
// fatti tagliare i capelli
}
E questo è il programma:
Semafori: Cliente: Rosso, Poltrona: Rosso, Sedia: Verde
process Barbiere {
SedieLibere =N;
while (true) {
P(Cliente);
process Cliente {
// taglia capelli
P(Sedia);
V(Poltrona);
if (sedieLibere==0){//non ci sono sedie libere
}
V(Sedia);
}
return; //se ne va
}
sedieLibere--;
V(Sedia);
V(Cliente);
P(Poltrona);
P(Sedia);
sedieLibere++;
V(Sedia);
// Fatti tagliare i capelli e poi esci
}
Alcuni errori visti nelle soluzioni degli studenti:
while(sedieLibere==0) // Inserito all'inizio del codice cliente ; //non fa niente
Questo è busy waiting e non rispetta le richieste del problema (se ne va indignato). Qui inrealtà attende, ma senza mettersi in coda sul semaforo.
Utilizzo di un semaforo “sedie” inizializzato a N. Bisogna essere molti cauti nell'utilizzare unasoluzione del genere: se il cliente si sospende su “sedie”, i primi N
clienti passano (senza in realtà aspettare), mentre i clienti in eccesso attendono (mentre dovrebbero andarsene).
Deadlock
In un ambiente multiprogrammato più processi possono competere per un numero finito di risorse. Un processo richiede risorse e se queste non sono disponibili
in quel momento, il P entra in uno stato di waiting.
80 - Tecno1 rel. 17.03.17
Può accadere che un P in waiting non modifichi mai lo stato perché le risorse per cui è in attesa sono state assegnate ad un altro P in attesa.
Nota: Es. di due processi in Blocco Critico (deadlock)
s1=1, s2=1
Processo 1
Processo 2
..
..
P(s1)
P(s2)
Utilizza Risorsa (R1)
Utilizza Risorsa (R12)
..
..
P(s2)
P(s1)
Utilizza Risorsa (R2)
Utilizza Risorsa (R1)
..
..
V(s1)
V(s2)
V(s2)
V(s1)
Rilascio R1, R2
Rilascio R1, R2
N.B. sse la sequenza è: P1,P2,P1,P2 si ha il Blocco: P1 è bloccato su P2 e viceversa.
Ad ex. due processi (A e B) devono leggere da un nastro e stampare. A ottiene l’uso della stampante, B del nastro. Quindi A chiede l’uso del
nastro e aspetta, B chiede l’uso della stampante e aspetta: BLOCCATI!
Esempio :
Supponiamo di dover attraversare un fiume su una fila di sassi che affiorano. Possiamo paragonare la persona che deve attraversare e quindi richiede le pietre,
ad un processo che richiede risorse.
Il deadlock si verifica quando due persone iniziano l’attraversamento da parti opposte e si incontrano in mezzo.
Il passaggio su una pietra può essere visto come la richiesta di una risorsa, mentre la rimozione del piede come il rilascio della risorsa. Il deadlock si verifica
quando le due persone tentano di passare sullo stesso sasso.
Può essere risolto solo se una persona si ritrae dalla parte del fiume da cui è partita.
In termini del SO operativo questo “ritirarsi” è detto ROLLBACK
Occorre notare che se più persone devono attraversare partendo dalla stessa parte, allora più di una persona deve tornare indietro per risolvere il deadlock.
Il solo modo per assicurare che non si verifichi il dedlock è quello di richiedere ad ogni persona di attraversare il fiume, seguendo un protocollo concordato.
Per esempio si potrebbe richiedere che chi ha intenzione di attraversare, si informi che nessun altro stia già attraversando in senso opposto. In questo caso
occorre attendere che l’altro termini l’attraversamento. Per risolvere il problema occorre un meccanismo per determinare se qualcuno sta attraversando il fiume.
Questo è possibile se in ogni momento può essere rilevato lo stato di tutte le pietre.
Supponiamo che due persone vogliano attraversare partendo da lati opposti nello stesso istante. Se entrambi partono, si verificherà il deadlock. Se entrambi
attendono che l’altro inizi, si verificherà un’altra forma di deadlock.. Una soluzione potrebbe essere quella di assegnare una priorità a ciascuna riva del fiume.
Si osservi come sia possibile che uno o più processi possano attendere indefinitamente: STARVATION. (se una sequenza continua di persone deve attraversare
sempre dalla parte ad alta priorità). Occorre quindi definire un algoritmo che ogni tanto alterni la direzione.
In sintesi si può verificare una situazione di stallo se:
MUTUA ESCLUSIONE: ogni risorsa è assegnata ad un solo P oppure è
–
solo una persona può passare su un sasso in un certo istante
disponibile. Questa può essere imposta solo a risorse non condivisibili.
–
ogni persona passa su un sasso e attende di passare sull’altro.
HOLD AND WAIT: un P può aver richiesto e ottenuto una risorsa, ed essere in
–
non si può spostare una persona che è su un sasso
attesa di altre risorse in uso. Occorre assicurare che quando un P richiede r,
–
una persona che parte da un lato è in attesa che l’altra termini e
non ne stia già usando un’altra: imporre a P di fare tutte le richieste prima di
viceversa.
iniziare l’esecuzione. Per es. le system call per le risorse devono precedere
tutte le altre.(può riservare per molto tempo una risorsa che in realtà sarà
usata solo per breve tempo) Oppure Un P può richiedere r solo se non ne ha
di assegnate. Prima di richiedere una risorsa, deve rilasciare tutte quelle in
uso. Un P può richiedere tante risorse (cpu time, memory space, file, I/O
device,…), quante ne occorrono per portare a termine il suo compito. In ogni
caso il numero di risorse richieste non può superare il numero di risorse
disponibili.
NO PREEMPTION: le risorse in uso non possono essere tolte forzatamente ad
un P. Una risorsa può essere rilasciata solo volontariamente dal P che l’ha in
uso quando ha completato il task.
CIRCULAR WAIT: deve esistere un insieme di P in waiting P0,P1,…Pn per cui
P0 è in attesa di una risorsa in uso a P1, P1 di una in uso a P2, ….Pn attende
una risorsa in uso a P0.
Un insieme di P è in uno stato di deadlock quando tutti i P dell’insieme sono in attesa di un evento che può essere causato solo da un P dell’insieme.
SOLUZIONI

Protocollo per assicurare che il sistema non entri in uno stato di deadlock (prevenire)

Permettere che si verifichi, e poi tentare di recuperare.(curare)
Meglio prevenire, curare può essere costoso e difficile.
tecniche anti-stallo
Allocazione Globale delle risorse: “se tutte le risorse sono disponibili assegnale al processo, altrimenti sospendilo” (evita lo stallo , ma poco
efficiente e antimodulare)
81 - Tecno1 rel. 17.03.17
Allocazione gerarchica : “se le risorse sono ordinate in una gerarchia di livelli un processo che possiede una risorsa Rk (livelo k) non puo’ richiederne
un’altra di livello l<=k senza rilasciare prima Rk, richiedere e ottenere Rl, richiedere Rk” ( evita lo stallo ma è pesante!!)
Algoritmo del Banchiere: “quando un processo richiede una o piu’ risorse, gli vengono assegnate solamente se rimane libero un numero sufficiente
di risorse atto a soddisfare la richiesta massima di almeno uno dei processi che hanno già una risorsa associata.” (Cosi’ almeno un processo alla volta
potrà soddisfare la sua richiesta. E’ pesante, è basato sul caso pessimo, puo’ causare un Blocco Individuale di un processo)
Preemption (svuotamento anticipato) : “toglie d’autorità una o piu’ risorse al processo se si verifica un blocco critico” (Non previene lo stallo, ma
prende provvedimenti se si verifica. Difficile: quanto tempo dura uno stallo????)
Primitive di Comunicazione tra Processi
I semafori sono sufficienti a risolvere i problemi di mutua esclusione e sincronizzazione tra processi concorrenti, ma non è semplice programmare con essi: ee
per la mutua esclusione i Semafori sono sufficientemente potenti, per il produttore-consumtore diventano già macchinosi.
Sono quindi stati proposti due meccanismi più agevoli al programmatore, i monitor e lo scambio di messaggi.
Nota
•
•
•
•
•
Processes can communicate through shared areas of memory
–
the Mutual Exclusion problem and Critical Sections
Semaphores - a synchronisation abstraction
Monitors - a higher level abstraction
Inter-Process Message Passing much more useful for information transfer
–
can also be used just for synchronisation
–
can co-exist with shared memory communication
Two basic operations : send(message) and receive(message)
–
message contents can be anything mutually comprehensible
»
data, remote procedure calls, executable code etc.
–
usually contains standard fields
»
destination process ID, sending process ID for any reply
»
message length
»
data type, data etc.
Il secondo, di cui ci occupiamo ora, è adatto ai sistemi distribuiti, dove non si possono quindi usare zone di memoria condivise, ma è comunque utilizzabile
anche su un processore in multiprogrammazione e permette di costruire primitive piu’ potenti a partire dei “mattoni”-semafori, per lo scambio dati tra processi.
INVIA-RICEVI
S1=1, s2=0
Invia(buffer,areadati1)
P(s1)
Copia Areadati1-> Buffer
V(s2)
Ricevi(buffer,areadati2)
P(s2)
Copia Buffer -> Areadati2
V(s1)
N.B. S1,S2 e Buffer sono aree comuni fornite dal S.O. mentre Areadati1,2 sono locali ai processi
N.B. Svantaggi: Il Buffer è di lunghezza fissata (troppo?, poco?) ; doppie operazioni di scrittura/lettura
Comunicazione indiretta
• I processi cooperanti non sono tenuti a conoscersi reciprocamente e si scambiano messaggi depositandoli/prelevandoli da una mailbox
condivisa.
• La mailbox (o porta) è una risorsa astratta condivisibile da più processi che funge da contenitore dei messaggi.
MAIL BOX (SEND-RECEIVE)
MailBox = (Semaforo (s) + puntatore alla coda di messaggi (messaggio= area dati + puntatore al prossimo messaggio in coda) )
S=0
Send(Mail, messaggio)
Inserisci messaggio nella coda di Mail
V(s)
Receive(Mail, messaggio)
P(S)
Estrai il primo messaggio nella coda di Mail
N.B. si possono accodare infiniti messaggi ma si possono limitare. Come?
Osservazione : I semafori, le regioni critiche, i monitor sono stati concepiti basandosi sull’ipotesi che tutti i processi possano comunicare e sincronizzarsi
basandosi su una memoria comune. Se pero’ questo non risulta vero , come in rete, gli strumenti risultano inadeguati. Cio’ che viene richiesto pero’ un modello di
“Scambio Messaggi”: i processi possono comunicare e/o sincronizzarsi SOLO attraverso l’invio e la ricezione di MESSAGGI lungo CANALI DI COMUNICAZIONE (che
costituiscono, in un certo senso, le uniche risorse condivise). I processi, quindi, possono interagire solo attraverso l’ INVIO e la RICEZIONE di MESSAGGI!
82 - Tecno1 rel. 17.03.17
Monitor
( )
Sono stati ideati da C.A.R.Hoare e P.Brinch Hansen (1974-75), e richiedono un linguaggio di programmazione che li preveda (per i semafori, basta avere a
disposizione una libreria di funzioni, chiamabile ad esempio dal C ed integrata con il sistema operativo, che realizzi up e down).
Idea: garantire l’integrità di una struttura dati condivisa permettendo l’accesso soltanto attraverso le procedure del monitor (tipi di dato astratto).
Un monitor è …
un aggregato di sottoprogrammi, variabili e strutture dati
Solo i sottoprogrammi del monitor possono accederne le variabili interne
Solo un processo alla volta può essere attivo entro il monitor
o
Proprietà garantita dai meccanismi del supporto a tempo di esecuzione del linguaggio di programmazione concorrente
Funzionalmente molto simile al kernel del sistema operativo
o
Il codice necessario è inserito dal compilatore direttamente nel programma eseguibile
La garanzia di mutua esclusione da sola può non bastare per consentire sincronizzazione intelligente
Due procedure operanti su variabili speciali (non contatori!) dette condition variables, consentono di modellare condizioni logiche specifiche del problema
Wait(<cond>) // forza l’attesa del chiamante
Signal(<cond>) // risveglia il processo in attesa
Il segnale di risveglio non ha memoria. Va perso se nessuno lo attende
La primitiva Wait permette di bloccare il chiamante qualora le condizioni logiche della risorsa non consentano l’esecuzione del servizio
La primitiva Signal notifica il verificarsi della condizione attesa al (primo) processo bloccato, risvegliandolo
Il processo risvegliato compete con il chiamante della Signal per il possesso della CPU
Wait e Signal sono invocate in mutua esclusione Non si può verificare race condition
Sincronizzazione di thread in Java
Java offre un costrutto simile al monitor tramite classi con metodi synchronized– Ma senza condition variable
Le primitive wait() e notify() invocate all’interno di metodi synchronized evitano il verificarsi di race condition
In realtà il metodo wait() può venire interrotto, e l’interruzione va trattata come eccezione!
I thread in Java
sono oggetti particolari ai quali si richiede un servizio (chiamato start()) corrispondente al lancio di una attività, di un thread, che procede in concorrenza a chi lo
ha richiesto
Java usa un meccanismo che è una forma di monitor: ogni istanza di qualsiasi oggetto ha associato un mutex. Quando un thread esegue un metodo che è stato
83 - Tecno1 rel. 17.03.17
dichiarato sincronizzato mediante l’identificatore synchronized, entra in possesso del mutex associato all’istanza e nessun altro metodo sincronizzato può essere
eseguito su quell’istanza fintanto che il thread non ha terminato l’esecuzione del metodo.
–
New Thread: Creato subito dopo l’istruzione new
–
Runnable: thread è in esecuzione, o in coda per ottenere l’utilizzo
della CPU
–
Not Runnable: il thread entra in questo stato quando è in attesadi
un’operazione di I/O, o dopo l’invocazione dei metodi suspend(),wait(),sleep()
–
Dead: al termine “naturale” della sua esecuzione o dopo l’invocazione
del suo metodo stop()da parte diun altro thread
Metodi per il controllo di thread
•
start() fa partire l’esecuzione di un thread. La macchina virtuale Java invoca il metodo run() del thread appena creato
•
stop() forza la terminazione dell’esecuzione di un thread. Tutte le risorse utilizzate dal thread vengono immediatamente liberate
•
suspend() blocca l'esecuzione di un thread in attesa di una successiva operazione di resume. Non libera le risorse impegnate dal
thread (possibilità di deadlock)
•
resume() riprende l’esecuzione di un thread precedentemente sospeso. (Se il thread riattivato ha una priorità maggiore di quello
correntemente in esecuzione, avrà subito accesso alla CPU, altrimenti andrà in coda d'attesa
•
sleep(long t) blocca per un tempo specificato (time) l'esecuzione di un thread.
•
join() blocca il thread chiamante in attesa della terminazione del thread di cui si invoca il metodo.
•
yield() sospende l'esecuzione del thread invocante, lasciando il controllo della CPU agli altri thread in coda d’attesa
/* Cosa fare:
1. interfaccia runnable (implements Runnable)
2. Implementazione metodo run() (void run())
3. creare un’istanza della classe tramite new (ProvaThread2 pt = new ProvaThread2())
4. creare un’istanza della classe Thread con un’altra new, passando com parametro l’istanza della classe che si è creata (Thread t =new Thread (pt))
5. invocare il metodo start()sul thread creato,producendo la chiamata al suo metodo run()(t.start();
*/
public class ProvaThread2 implements Runnable
{
public static void main (String argv[] ) {
ProvaThread2 pt = new ProvaThread2();
Thread t =new Thread (pt);
t.start();
pt.m2();
}
public void run() {
m1();
}
}
}
synchronized void m1() {
for ( char c= ‘A’ ; c < ‘F’ ; c++) {
System.out.println(c);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
void m2 () {
for ( char c= ‘1’ ; c < ‘6’ ; c++) {
System.out.println(c);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}
Nell’esempio due metodi m1 e m2, vengono invocati da due thread su una stessa istanza pt. Uno dei due metodi è stato dichiarato synchronized mentre l’altro,
m2, no. Dunque il mutex associato a pt viene acquisito dal metodo m1, ma non blocca l’esecuzione di m2 perché esso non tenta di acquisire il mutex. Il risultato
prodotto è il seguente:
1
A
2
B
3
C
4
84 - Tecno1 rel. 17.03.17
D
5
E
Se invece si dichiara synchronized anche il metodo m2, si hanno due thread che tentano di acquisire lo stesso mutex, per cui i due metodi vengono eseguiti in
mutua esclusione prima uno e dopo l’altro:
1
2
3
4
5
A
B
C
D
E
85 - Tecno1 rel. 17.03.17
Gestione della Memoria
Indirizzi di memoria fisici e logici
Normalmente
un
programma
risiede
su
disco
in
formato
binario
eseguibile.
Per essere eseguito deve essere portato in RAM e divenire processo. Durante la sua esecuzione, un processo accede a istruzioni e dati in memoria. Al suo
termine, viene liberata la memoria che occupava.
Il
programma
può
essere
trasferito
in
qualsiasi
punto
della
RAM
prima
di
essere
eseguito.
Generalmente, però, gli indirizzi del programma sorgente sono simbolici (es.: nomi di variabili).
Gli indirizzamenti logici e fisici permettono di separare la parte software dalla parte hardware:

Indirizzo logico (o virtuale/software): usato dal programma

Indirizzo fisico (hardware): usato dall’unità di memoria
Traduzione di indirizzi logici in fisici
Il collegamento tra indirizzi logici e fisici puo’ avvenire in tre fasi diverse:

Compile time : la locazione di memoria che verrà usata è nota a priori (codice assoluto)

Load time: Il programma deve essere scritto con codice rilocabile

Execution time : Quando una istruzione viene eseguita viene fatta la sua traduzione
Nel primo caso, ci vuole un compilatore che associa (bind) questi indirizzi simbolici a indirizzi rilocabili (es.: “14 byte dall’inizio di questo modulo”). Il linker (o il
caricatore/loader) fa corrispondere questi indirizzi rilocabili a indirizzi assoluti.
Un indirizzo generato dalla CPU è indicato solitamente come logico, mentre un indirizzo visto dalla memoria è fisico (questo indirizzo viene caricato nel MAR
memory address register):
Memory-Management Unit (MMU)
Device hardware di supporto alla traduzione di indirizzi virtuali in indirizzi fisici
Si pone tra CPU e memoria. Fa si che, ad ogni indirizzo generato dalla CPU, prima di inoltrare la richiesta alla memoria, sia aggiunto al momento
dell’esecuzione e senza cambiare il codice il valore contenuto in un registro
86 - Tecno1 rel. 17.03.17
VLSI VI475 MMU "Apple HMMU" -
Swapping
Problema: Abbiamo una memoria finita e vogliamo eseguire molti processi. Posso tenere in memoria solo il processo che sto effettivamente eseguendo
Soluzione: Un processo può essere temporaneamente spostato (swapped) dalla memoria centrale alla memoria di massa (backing store) e successivamente
riportato in memoria per continuarne l’esecuzione
87 - Tecno1 rel. 17.03.17
Allocazione della memoria
Rimane il problema di studiare con quali strategie associare una zona di memoria ad un processo. In generale dividiamo la memoria in zone all’interno delle quali
andremo a caricare il codice binario di un programma
In generale distinguiamo due casi:

Allocazione contigua

Allocazione non contigua
Allocazione contigua
La memoria centrale è, di norma , divisa in almeno due partizioni: una per il Sistema Operativo, l’atra per i processi utente.
Se vogliamo che piu’ processi utente risiedano in Memoria Centrale dobbiamo allocarli in memoria usando una sequenza di locazioni senza interruzioni.
Dividiamo la memoria in partizioni e diamo ad ogni processo una sua partizione.
Prima di tutto occorre però tener presente che la memoria che contiene il S. O. va protetta dai processi utente. A questo proposito, esiste un registro limite che
contiene l’indirizzo che un processo utente NON puo’ superare,
Partizioni fisse
Dividiamo la parte di memoria per i processi utente in partizioni di dimensione fissa



Poco flessibile
Pone dei limiti alla dimensione di un programma
Grandi sprechi di memoria (frammentazione interna) causati dai processi piccoli
Partizioni variabili
Allochiamo delle partizioni di dimensione variabile per alloggiare i processi

Buco (Hole) – blocco di memoria disponibile; buchi di diverse dimensioni sono distribuiti nella memoria
o
Quando un processo viene creato, gli si assegnata una zona di memoria prendendola da un buco sufficientemente grande
o
Il S.O. deve mantenere informazioni su Partizioni allocate e Buchi
Problema della Frammentazione


Interna
o
Esterna
o
la memoria allocata è maggiore di quella richiesta e quindi internamente alla partizione esiste memoria inutilizzata
Lo spazio di memoria totale per soddisfare la richiesta esiste, ma non è contiguo: si può ridurre compattando periodicamente la
memoria,spostando i contenuti per mettere insieme i buchi. E’ possibile solo se prevista rilocazione dinamica eseguita a run-time
88 - Tecno1 rel. 17.03.17
Come soddisfare una richiesta di memoria di dimensione n avendo a disposizione una lista di partizioni libere e cercando di ridurre al minimo frammentazione
esterna? Dobbiamo decidere in quale buco infilare (fit) la nuova richiesta (Allocazione dinamica delle partizioni):



First-fit
o
o
o
Best-fit
o
o
o
Worst-fit
o
o
Usiamo il primo buco sufficientemente grande
Non devo guardare l’intera lista
Non è ottimale
Usiamo il buco più piccolo che è sufficientemente grande
Lascio liberi i buchi più grandi per soddisfare future richieste
Performances ridotte
Usiamo sempre il buco piu grande
Non si creano buchi piccolissimi
Allocazione non contigua
Accettiamo che lo spazio utilizzato per allocare un processo possa essere sparpagliato all’interno della memoria.
Dividiamo la memoria in pagine ed assegniamo ad ogni processo un insieme di pagine
Paginazione
La memoria può non essere assegnata tutta in una volta ma man mano che diventa necessario e si rende disponibile:

La memoria viene divisa in blocchi di dimensione fissata chiamati frame (o pagine fisiche)

La memoria logica viene anche lei divisa in blocchi della stessa dimensione chiamati pagine (pagine virtuali)

Il sistema deve tenere traccia di tutti i frame liberi

Serve una tabella delle pagine (page table) per tradurre indirizzi logici in indirizzi fisici

Si può creare frammentazione interna ma non esterna

Schema di traduzione degli indirizzi. Gli indirizzi vengono scomposti in due parti:
o
Numero di pagina - E’ il numero di pagina virtuale (p - page) e viene usato come indice all’interno della page table che contiene il numero
di pagina fisica relativo (f – frame)
o
Scostamento o offset (d) - Indica la posizione della locazione di memoria all’interno della pagina
89 - Tecno1 rel. 17.03.17
segmentazione
L’idea di base consiste nel vedere il programma come una serie di segmenti, ciascuno disgiunto, che rappresentano, ad ex, codice, stack, dati etc. (cfr famiglia
80x86).
La tabella dei segmenti contiene la coppia: base segmento, limite segmento. La base del segmento contiene l’indirizzo fisico iniziale della memoria dove parte il
segmento. Il limite del segmento contiene la lunghezza del segmento. Un indirizzo logico è formato da due parti: numero di segmento (s) e scostamento nel
segmento (offset)
Memoria Virtuale
Abbiamo visto alcune tecniche per gestire la memoria centrale. Esse permettono la presenza contemporanea di più processi in memoria, ma un programma
potrebbe risiedere in memoria solo parzialmente. La memoria virtuale è una tecnica che permette di eseguire processi che possono anche non essere
completamente contenuti in RAM con una separazione netta della memoria logica da quella fisica:

Lo spazio di indirizzamento logico può essere molto più grande della memoria fisicamente disponibile

Alcune pagine potrebbero essere condivise tra più processi, ad es. il codice binario di un editor che tutti usano
La memoria virtuale viene generalmente gestita a pagine ed implementata con dei meccanismi di Paginazione su richiesta (Demand Paging)
90 - Tecno1 rel. 17.03.17
Paginazione su richiesta (Demand Paging)
Porto una pagina in memoria solo quando è necessario. Quando ho un riferimento ad una locazione di memoria, allora la pagina che la contiene diventa
necessaria:

Diminuiscono le operazioni di I/O

Diminuisce la richiesta di memoria

Diminuiscono i tempi di attesa

Aumenta il livello di multiprogrammazione
Bit di validità
All’interno della tabella delle pagine di ogni processo è associato ad ogni pagina un bit di validità: 1 in-memoria, 0 sul disco.
Inizialmente il valore è 0 per tutte le pagine. Durante la traduzione dell’indirizzo da virtuale a fisico, se il bit di validità è 0, genero un page fault (eccezione di
pagina mancante)
Page Fault
La prima volta che una pagina è necessaria viene generato un Page Fault. Il sistema operativo cerca di capire se:

È un riferimento illegale

Bisogna recuperare la pagina
91 - Tecno1 rel. 17.03.17
Viene allocato un frame (pagina fisica) vuoto, la pagina viene trasferita dal disco al frame appena reso disponibile. Il bit di validità per quella pagina viene posto a
1. L’esecuzione riprende dove era stata interrotta
E se non ci sono frame liberi ? Sostituzione di una pagina: si determina una pagina di memoria non attualmente utilizzata e la si sposta sul disco.
Serve un algoritmo. L’algoritmo deve essere tale per cui venga minimizzato il numero di Page Fault futuri. La stessa pagina potrebbe essere richiamata in memoria
più di una volta. Di solito viene implementato nella routine di gestione del Page Fault per evitare affollamento in memoria. Si fa uso di un bit (dirty bit) per
marcare le pagine modificate, in maniera tale da scrivere solo quelle sul disco
Algoritmo di base


Si individua la locazione sul disco della pagina richiesta


Si legge la pagina nel frame libero (o liberato) aggiornando le tabelle di sistema
Si individua un frame libero
o Se esiste lo si usa
o Se non esiste si usa un algoritmo di sostituzione delle pagine per selezionare un frame vittima e lo si trasferisce sul disco (liberando un
posto)
Viene fatto ripartire il processo
Algoritmi per la sostituzione di pagine
Cercano di minimizzare il numero di Page Fault
● Vengono valutati utilizzando una sequenza di riferimenti a pagine di memoria (stringa di riferimento) e contando il numero di Page Fault generati dal sistema
Stringhe di riferimento
Si tratta di sequenze di riferimenti a pagine. Una stringa di riferimento è una sequenza di eventi, non un diagramma temporale, ad ex:
“1 2 3” potrebbe significare
92 - Tecno1 rel. 17.03.17
1 accesso alla pagina 1, 2000 accessi alla pagina 2, 2 accessi alla pagina 3
Page Fault in funzione del numero di frame in memoria
Algoritmo First-In-First-Out (FIFO)
Teniamo traccia dell’ordine in cui le pagina vengono allocate in memoria. La pagina vittima sarà quella in memoria da più tempo
Gestione Memoria in Windows
Usa la paginazione su richiesta per gruppi di pagine (demand paging with clustering), richiamando quindi non solo la pagina richiesta ma anche quelle a essa
adiacenti.
Alla sua creazione, un processo riceve i valori del minimo insieme di lavoro e del massimo insieme di lavoro. Il minimo insieme di lavoro (working set minimum)
è il minimo numero di pagine caricate nella memoria di un processo che il sistema garantisce di assegnare.
Se la memoria è sufficiente, il sistema potrebbe assegnare un numero di pagine pari al suo massimo insieme di lavoro (working set maximum).
Viene mantenuta una lista delle pagine fisiche libere, con associato un valore soglia che indica se è disponibile una quantità sufficiente di memoria libera
Se si ha un fault, e il processo è al suo massimo, si procede per sostituzione locale
Nel caso in cui la quantità di memoria libera scenda sotto la soglia, il gestore della memoria virtuale usa un metodo noto come regolazione automatica
dell’insieme di lavoro (automatic working set trimming) per riportare il valore sopra la soglia. In pratica, se a un processo sono state assegnate più pagine del suo
minimo insieme di lavoro, il gestore della memoria virtuale rimuove pagine fino a raggiungere quel valore.
93 - Tecno1 rel. 17.03.17
File System
Il concetto di file
(basato su: Sistemi Operativi e Distribuiti - Bellettini – Maggiorini - Università di Milano – D.I.Co.)
“Un file ("archivio") è un insieme di informazioni codificate organizzate come una sequenza (di ), immagazzinate come un singolo elemento su una , all'interno del
esistente su quella particolare memoria di massa.” (Wikipedia)
Un file è quindi uno spazio logico continuo per la memorizzazione dei dati.
Se dal punto di vista dell'utente un file è solitamente un singolo elemento, può succedere che, invece, fisicamente sia scritto su più zone diverse del supporto che
lo ospita: questo fenomeno è molto comune se il supporto di memorizzazione è un disco, mentre è molto raro su nastri magnetici. Uno dei compiti del è rendere
trasparente alle applicazioni la reale suddivisione fisica del file e occuparsi di gestire la scrittura e il recupero delle informazioni dai vari blocchi fisici.
Un file può memorizzare vari tipi di dati:

Codice eseguibile

Dati generici

numeri

caratteri

dati binari

…
I file sono risorse di memoria utilizzabili dai processi ma separate dai propri spazi di indirizzi. I processi possono usarli in toto o in parte, spostando le informazioni
nelle proprie aree di indirizzi.
Si potrebbe pensare che la gestione dei file possa essere fatta direttamente dai processi, ma cio’ comporterebbe una serie di problemi dovuti alla loro
condivisione e protezione. Percio’ è il S.O. che si interessa della loro gestione
File system
Il File System è quella parte del S.O. che si occupa della gestione delle informazioni e fornisce la struttura delle cartelle che conserveranno il sistema
operativo, le applicazioni, i file di configurazione e i dati dell'utente.
Il File system:

identifica e cataloga i file

gestisce le operazioni sui file cioè fornisce primitive e utility per assegnare l’uso dei file ai processi che ne fanno richiesta

alloca su disco lo spazio per la creazione dei file
In pratica il File System fa corrispondere a un modello logico dei file una struttura fisica sul supporto di memorizzazione, e stabilisce i metodi di memorizzazione e
accesso.
Il File system è usato in due accezioni:

File System Logico (visione dell’UTENTE): Come organizzo i file all’interno del mio disco ?

File System Fisico (visione del DISPOSITIVO di archiviazione): Come scrivo fisicamente i dati sul disco ?
Il File System Logico
Definisce le modalità di identificazione dei file, l’organizzazione e le operazioni possibili (creazione, cancellazione, modifica). I file sono risorse che il processo
chiede e rilascia con le operazioni di : apertura e chiusura.
I file posseggono varie strutture, definite dal sistema operativo e dal programma utente:

Nessuna struttura

sequenze di byte o numeri
94 - Tecno1 rel. 17.03.17










Strutturato semplice
Linee
Record a lunghezza fissa
Record a lunghezza variabile
Strutturato complesso
Documento formattato
XML
Doc
File caricabile rilocabile
…
I descrittori dei file aperti sono posti in una tabella apposita. I file sono identificati dalla posizione nella tabella. Ad ogni apertura viene assegnata al processo
l’indice della posizione del file nella tabella dei file aperti del processo (in Linux si chiama File Descriptor). Per ogni file aperto viene assegnato al processo un
puntatore che definisce la posizione corrente all’interno del file, cioè la posizione nel file per cui hanno valore le operazioni (lettura, scrittura..).
Gli attributi di un file servono ad indentificarlo all’interno del file system:

Nome

Tipo

Posizione all’interno della periferica che lo contiene

Dimensione

Data/ora di creazione

Proprietario

Diritti di accesso
Operazioni sui file (dipende dal tipo di organizzazione):

Creazione

Scrittura

Lettura

Posizionamento

seek

Cancellazione

Riduzione della dimensione

truncate
Modalità di accesso:
Accesso sequenziale
12. read next
13. write next
14. reset
Accesso diretto
4. read n
5. write n
Oppure
6. position to n
7. read next
8. write next
Organizzazione del file system per l’efficienza nel trovare un file velocemente
Nomi
o
Utenti diversi potrebbero chiamare con nomi uguali file distinti
o
Lo stesso file potrebbe essere raggiungibile con nomi diversi
Raggruppamenti logici
o
Per proprietà
o
Per tipologia
o
Per contenuto
Strutturazione a directory
Tutti i file su disco sono descritti nella directory: un insieme di strutture incaricate di mantenere informazioni riguardo i file presenti su disco.
La directory è essa stessa un file che contiene un record per ogni file, compresa la directory stessa.
Il record può essere il descrittore del file o il puntatore a una tabella separata.
Immaginando il file system come un armadietto di file, le directory di alto livello possono essere rappresentate come i cassetti, mentre le subdirectory possono
essere rappresentate come schede di file dentro i cassetti.
Queste strutture risiederanno sul disco insieme ai dati, tuttavia dobbiamo decidere



Cosa memorizzare
Come organizzarle
Dove metterle sul disco
Directory ad albero gerarchico: esistono più file directory e ogni descrittore può contenere il nome di un file o di un’altra directory (sottodirectory) partendo da
una directory principale (root/radice).
95 - Tecno1 rel. 17.03.17
Operazioni su una directory
3. Cercare un file
4. Creare un file
5. Cancellare un file
6. Vedere i file in essa contenuti
7. Rinominare un file
NB la cancellazione elimina dalla directory il descrittore del file , ma le informazioni vere e proprie rimangono su disco (e potrebbero essere recuperate)!
Condivisione di dati
Condividere i file tra utenti è spesso utile. La condivisione può essere ottenuta tramite un sistema di diritti di accesso. Se il sistema è distribuito, allora potremmo
voler estendere la condivisione sulla rete. Network File System (NFS) è un modo abbastanza comune di condivisione di file via rete per macchine Unix.
Diritti di accesso
Il proprietario di un file dovrebbe essere in grado di stabilire

quali operazioni possono essere fatte

da chi

Tipi di accessi
o
Read
o
Write
o
Execute
o
Append
o
Delete
o
List
Ad esempio, Access Lists e gruppi (UNIX)
Ogni file appartiene ad un utente ed ad un gruppo. Distinguo tre tipi di utenti:

Il proprietario

quelli facenti parte dello stesso gruppo del file

tutti gli altri
Per ognuno decido delle modalità di accesso

Read

Write

Execute
Ad esempio, Access Lists e gruppi (UNIX)
# > chmod 761 file
owner access
group access
public access
7
6
1
111
110
001
RWX
File system fisico
● MBR master boot record: il settore 0 del disco; contiene il programma che viene caricato dal BIOS all’avvio
● Partition Table (su disco): contiene il punto di inizio e di fine di ogni partizione del disco
Partizioni
96 - Tecno1 rel. 17.03.17
● Boot (control) block: contiene le informazioni necessarie per l’avviamento del SO da quella partizione (se presente)
● Partition Control Block (o Super Block): contiene le informazioni sulla partizioni quali numero e dimensione di blocchi, blocchi liberi, i-node
● i-node (descrittore di file): uno per file…
Metodi di assegnazione dello spazio su disco
(immagini tratta da Sistemi Operativi – Addison-wesley)
FAT File Allocation Table
Ogni disco ne ha una, e se il disco è utilizzato viene anche ricopiata in memoria centrale.
Per ogni file la directory contiene l'indirizzo del primo blocco del file, ogni blocco del disco ha una entry nella FAT, che in generale contiene l'indirizzo del blocco
successivo.
Esempio:
La directory corrente contiene tre file, A, B, C.. Supponiamo che A occupi nell'ordine i blocchi 6,8,4,2; B occupi 5,9,12; C occupi 10,3,13. La directory (FAT) sarà
così organizzata (semplificando):
Nome
file
A
del
Primo blocco
6
97 - Tecno1 rel. 17.03.17
B
5
C
10
Quanto occupa una FAT? Troppo?!
Esempio: hard disk da 20 GB, blocchi di 1KB, 20M blocchi, indirizzi di blocco su non meno di 3 byte (o meglio, su 4 byte)
è la FAT occupa 80MB. Per velocizzare gli accessi, la FAT deve stare in memoria, quindi… servono 80 MB di RAM solo per la FAT!!!
Il problema e' dovuto al fatto che si mantengono tutte assieme le informazioni di tutti i file.
Un esempio di organizzazione gerarchica di una directory in DOS:
ciascuna entry occupa 32 bytes ed è così organizzata:
First Block No. è il puntatore alla FAT che individua il primo blocco del file
La root directory ha dimensione fissa per ogni periferica.
Le directory sotto root sono file di dimensione arbitraria e quindi possono contenere un numero qualsiasi di file
Assegnazione indicizzata
i-node
98 - Tecno1 rel. 17.03.17
()
● Si usa uno schema combinato per individuare i blocchi dati che compongono un file
● 10 blocchi sono indicizzati direttamente
● 1 indirizzamento indiretto singolo punta ad un blocco che invece di contenere dati contiene indirizzi di altri blocchi
● 1 indirizzamento indiretto doppio
● 1 indirizzamento indiretto triplo
Quanto può essere grande un file con i-node?
Consideriamo un blocco di 1 KB e un sistema di indirizzamento di 4 byte sia all’interno del file che nel i file system
8. ACCESSO DIRETTO: 10 blocchi = 10 KB
9. ACCESSO INDIRETTO SINGOLO: 1 blocco può contenere 256 indirizzi
o Quindi altri 256 KB di blocchi dati indirizzabili
10. ACCESSO INDIRETTO DOPPIO:
o 256 blocchi che contengono 256 indirizzi ognuno…256^2 = 65.536 KB (64 MB)
11. ACCESSO INDIRETTO TRIPLO: 256^3 = 16.777.216 KB (16 GB)
o Ma… con 4byte si indirizzano al massimo 4 GB!!!
Quanti blocchi posso indirizzare?
Consideriamo un blocco di 4 KB e un indirizzo di 8 byte sia all’interno del file che nel i file system
•
ACCESSO DIRETTO: 10 blocchi = 40 KB
•
ACCESSO INDIRETTO SINGOLO: 1 blocco può contenere 512 indirizzi.

Quindi altri 2 MB di blocchi dati indirizzabili
•
ACCESSO INDIRETTO DOPPIO:

512 blocchi che contengono 512 indirizzi ognuno… 512^2 = 262144 blocchi = 1 GB
•
ACCESSO INDIRETTO TRIPLO: 512^3 = 512 GB

Anche se con 8 byte potrei indirizzare TeraBytes…513 GB + 2 MB + 40 KB
Un esempio di organizzazione delle directory in Unix: organizzazione gerarchica,
ciascuna directory è un file contenente un numero arbitrario di entry, ogni entry è così fatta:
E' una organizzazione particolarmente semplice perchè tutte le informazioni sul file sono contenute nell'I-Node.
Si consideri il path usr/ast/mbox, si vuole individuare l'i-Node di tale file (e quindi il suo contenuto) secondo il seguente percorso:
99 - Tecno1 rel. 17.03.17
Dalla directory /usr/ast si ricava che l'i-Node di mbox e' il numero 60.
NTFS
Nel modello FAT i dati immagazzinati all’interno di un file vengono registrati con l’approccio di un’unica unità. In contrasto con questa filosofia, NTFS usa diversi
data stream per formare un file. Ciascun file in NTFS è rappresentato per mezzo di un record nella MFT (Master File Record).
NTFS riserva i primi 16 record della tabella per informazioni speciali:

descrizione MFT

MFT mirror del precedente record per eventuale MFT record corrotto

Log usato per il file recovery

Il settimo record e i successive sono usati per file e directory (visto come file da NTFS) sul dico.
MTF alloca un certo numero di ammontare di spazio per ciascun file. Gli attributi del file sono descritti all’interno del MFT.
File piccoli (1500 byte o inferiori) sono contenuti internamente al MFT:
Nota: NTFS può supportare file più grandi e in maggior numero rispetto a FAT32 e fornisce caratteristiche di sicurezza più flessibili per documenti e cartelle. Le
partizioni possono essere convertite da FAT32 a NTFS usando l'utility CONVERT.EXE. I tal modo si disporrà dei vantaggi aggiuntivi relativi alla sicurezza di NTFS.
Per riportare una partizione NTFS al formato FAT32, bisogna riformattare la partizione, ripristinando il contenuto da un backup.
Windows : estensioni dei file e attributi
In Windows i documenti sono organizzati in una struttura di directory. Il livello radice della partizione Windows è normalmente etichettata come disco C:\.
Successivamente c'è un insieme iniziale di directory predefinite, denominate cartelle, per il sistema operativo, le applicazioni, le informazioni sulla configurazione
e i dati. Dopo l'installazione iniziale, gli utenti possono aggiungere applicazioni e dati in qualsiasi directory essi scelgano.
FAT32 e NTFS di Windows hanno file e cartelle con nomi la cui lunghezza massima è pari a 255 caratteri non case-sensitive.
L’estensione del file puo essere da 1 a 4 caratteri(.doc.,.txt,.html,..). Gli attributi individuano le caratteristiche:Le estensioni di nomi di file, più comunemente
utilizzate sono:
.doc - Microsoft Word
100 - Tecno1 rel. 17.03.17
.txt - solo testo ASCII
.jpg - formato per immagini
.ppt - Microsoft PowerPoint
.zip - formato compresso
L'organizzazione delle directory mantiene un insieme di attributi per ogni file che controlla come il file possa essere visualizzato o modificato.
Questi sono gli attributi più comuni dei file (c\>attrib /?):
R - Il file è di sola lettura.
A - Il file sarà archiviato al successivo backup del disco.
S - Il file è contrassegnato come file di sistema ed un messaggio di avviso viene mostrato in caso di tentativo di cancellazione o modifica del file.
H - Il file è nascosto quando si visualizza il contenuto della cartella.
I – da indicizzare (Vista e 7)
L'equivalente di Windows del comando ATTRIB si ottiene cliccando col tasto destro del mouse in Windows Explorer e scegliendo Proprietà.
NOTA:
Sono visualizzabili da cmd->attrib, oppure in Gestione Risorse (dopo aver dato Show Hidden Files). Per le cartelle è possibile condividerle e configurarne i
permessi (tasto DX->Proprietà->Autorizzazioni
Per vedere le proprietà di un file in Windows Explorer, bisogna prima attivare l'opzione "Visualizza cartelle e file nascosti" di Windows Explorer. A tal proposito,
usare il seguente percorso:
Tasto destro su Start > Esplora > Strumenti > Opzioni Cartella > Visualizzazione
NTFS e FAT32
Il comando c:\>convert c:/fs:ntfs trasforma un disco FAT32 in NTFS.
NOTA: Dopo aver istallato un PC campione si lancia il comando sysprep.exe e si fa una immagine del disco di sistema: l’immagine serve a configurare altri PC
clonando il il disco campione con programmi quali Ghost. E’ possibile mettere anche una copia del CD di istallazione in rete e usare RIS (remote Installation
Service). I PC client devono essere avviati da rete con PXE-Pre-boot eXecution Environment o un disco di boot remoto.
101 - Tecno1 rel. 17.03.17
Protezione e sicurezza
Un aspetto sempre piu’ importante nella gestione dei sistemi operativi è quello relativo alla protezione e alla sicurezza, soprattutto in relazione all’ uso di un
calcolatore facente parte di un sistema distribuito.
Se un sistema di calcolo ha più utenti e consente che i processi siano eseguiti in modo concorrente, i diversi processi devono essere protetti dalle attività degli
altri processi. Per tale ragione, CPU, memoria e altre risorse devono essere controllate .
Protezione
Ricordiamo che un Sistema di Calcolo è un insieme di processi e oggetti, cioè elementi hardware come CPU, memoria, stampanti, dischi ed oggetti logici come
file, semafori e programmi.
Questi oggetti devono essere protetti contro tutti gli abusi .
Il ruolo della protezione è quello di fornire un meccanismo per imporre dei criteri che controllino l’uso delle risorse.
In altri termini, a un processo deve essere consentito l’accesso alle sole risorse di cui ha l’autorizzazione e deve usare solo le risorse di cui ha bisogno per svolgere
il proprio compito.
Un diritto di accesso è un permesso per eseguire una operazione su un oggetto.
Il processo opera all’interno di un Dominio di Protezione che specifica a quali risorse il processo può accedere. Un dominio è, perciò, un insieme di diritti di
accesso ed è costituito dalla coppia ordinata: nome dell’oggetto, insieme dei diritti di accesso, cioè quali operazioni possono essere compiute su quell’oggetto. Un
dominio si può realizzare in vari modi, ad esempio in Linux il dominio è associato all’utente: in questo caso l’insieme degli oggetti a cui si può accedere, e il modo,
dipende dall’identità dell’utente.
Spesso il modello di protezione è simile a una matrice di accesso simile a quella sottostante:
file 1
file 2
file 3
stampante
Dominio 1
read
Dominio 2
execute
print
Dominio 3
read, write
read , write
Spesso i sistemi reali sono limitati e consentono limitazione solo per i file: Linux fornisce, per ogni file, le protezioni per lettura, scrittura ed esecuzione distinte
per proprietario, gruppo o chiunque.
La JVM di Java fornisce un controllo più selettivo e personalizzato dei processi, rispetto al sistema operativo.
Sicurezza
Le informazioni presenti in un sistema di calcolo (codici e dati), così come tutte le altre risorse, devono essere protette da accessi non autorizzati, distruzioni,
alterazioni, modifiche accidentali.
Si dice che un sistema è Sicuro se alle sue risorse si accede solo nei modi previsti.
Le alterazioni alla sicurezza possono essere dolose o accidentali.
Per proteggere il sistema occorre agire su alcuni fattori:

fisico: protezione fisica contro i furti

umano: porre attenzione a fornire accesso ad utenti che forniscono l’accesso ad intrusi

rete: cercare di ridurre la possibilità di intercettazione dei dati che transitano in rete

sistema operativo: il sistema deve proteggere se stesso dalle violazioni accidentali o
intenzionali
Qui tratteremo le problematiche relative alla sicurezza del sistema operativo.
Autenticazione (controllo dell’accesso) degli utenti
Per i S.O. il principale problema relativo alla sicurezza riguarda l’autenticazione: si tratta di stabilire se un utente o un sistema siano effettivamente coloro che
dichiarano di essere.
Dati di sicurezza rubati o persi possono consentire più attacchi e necessitano di più schemi di autenticazione.
Nessuna tecnica offre completa sicurezza di autenticazione, neanche quelle Biometriche (impronte digitali, impronte vocali, mappatura della retina).
Ci sono molti tipi di meccanismi di autenticazione, ma i più usati sono:
102 - Tecno1 rel. 17.03.17
conoscenza dell’utente (cosa sai) : parola d’ordine (password), ID, PIN
oggetti posseduti (cosa hai): una chiave, una SmartCard
attributo dell’utente (cosa sei): : impronta digitale o di retina (tecniche biometriche), firma
Riferiamoci al metodo piu’ diffuso: la password, che si possono considerare come casi particolari di chiavi. La password puo’ essere vulnerabile. Due modi
consueti di individuare la parola d’ordine si basano sulla conoscenza dell’utente o sulla forza bruta, cioè provare tutte le possibili combinazioni di lettere, finchè si
scopre la password. Il SO può anche cifrare le parole d’ordine, ma poi non ha più il controllo. Si possono usare parole d’ordine accoppiate o monouso.
La login o la password sono considerate generalmente autenticazioni deboli.
Forti autenticazioni si ottengono combinando tra loro due diversi tipi di autenticazione. L'effettivo livello di sicurezza dipende ovviamente dal contesto, perché un
SmartCard può essere rubata, e le credenziali di login possono non essere difficili da individuare.
Minacce ai programmi
Si definisce malware un qualsiasi creato con il solo scopo di causare danni più o meno gravi al su cui viene eseguito.
Se un utente usa un programma scritto da un altro , si possono verificare vari tipi di abuso:
cavalli i Troia: le funzionalità sono nascoste all'interno di un apparentemente utile; è dunque l'utente stesso che installando ed eseguendo un certo programma,
inconsapevolmente, installa ed esegue anche il codice trojan nascosto.
: sono parti di codice che si diffondono copiandosi all'interno di altri , o in una particolare sezione del , in modo da essere eseguiti ogni volta che il infetto viene
aperto. Si trasmettono da un a un altro tramite lo spostamento di file infetti ad opera degli utenti.
(verme): sfruttano dei difetti () di alcuni per diffondersi automaticamente. Genera copie di se stesso logorando le risorse del sistema fino a farlo collassate. (cfr
l’internet worm di Robert Morris dotato di un rampino di arrembaggio e di un programma principale)
: che vengono usati per raccogliere informazioni dal sistema su cui sono installati e per trasmetterle ad un destinatario interessato. Le informazioni carpite
possono andare dalle abitudini di navigazione fino alle password e alle di un utente.
: questi si occupano di gestire la connessione ad tramite la normale linea telefonica. Sono malware quando vengono utilizzati in modo truffaldino, modificando il
numero telefonico chiamato dalla connessione predefinita con uno a tariffazione speciale, allo scopo di trarne illecito profitto all'insaputa dell'utente.
(“dirottare"): questi programmi si appropriano di applicazioni di navigazione in rete (soprattuto ) e causano l'apertura automatica di indesiderate.
Phishing ("spillaggio (di dati sensibili)") è una attività illegale che sfrutta una tecnica di (ingegneria sociale (social engineering) si intende lo studio del
comportamento individuale di una persona al fine di carpire informazioni.), ed è utilizzata per ottenere l'accesso a informazioni personali o riservate con la
finalità del mediante l'utilizzo delle comunicazioni elettroniche, soprattutto messaggi di fasulli o messaggi istantanei, ma anche contatti telefonici. Grazie a
questi messaggi, l'utente è ingannato e portato a rivelare dati personali, come numero di conto corrente, numero di carta di credito, codici di identificazione, ecc
103 - Tecno1 rel. 17.03.17