2. Un sistema di elaborazione automatico è formato da:
HARDWARE
+
SOFTWARE
3. SOFTWARE
APPLICATIVO: è quello "costruito" dal
programmatore per risolvere problemi che gli
interessano
DI BASE: programmi che facilitano l'uso delle risorse
dell'hardware.
SISTEMA OPERATIVO
PROGRAMMI DI UTILITA’
4. Il computer è praticamente inutilizzabile
se non è presente un apposito software
che ne gestisca tutti i componenti.
5. SOFTWARE DI BASE
Programmi necessari per il funzionamento del
computer:
– SISTEMA OPERATIVO
– PROGRAMMI DI UTILITÀ
6. SOFTWARE APPLICATIVO
Si tratta di programmi che hanno il compito di risolvere
specifici problemi
dell’utente, come nel caso di:
- PROGRAMMI DI TRATTAMENTO DEI TESTI:
consentono di scrivere o lavorare con dati
già esistenti per realizzare operazioni di correzione e
formattazione di documenti di qualsiasi
dimensione o complessità, stampando infine il tutto (è il
caso di Microsoft Word, ad esempio).
7. SOFTWARE APPLICATIVO
Una categoria particolare è rappresentata dai Desktop
publishing o programmi di impaginazione che
permettono la realizzazione di pagine complete di un
settimanale o di una rivista (Ventura Publisher, XPress,
Pagemaker..)
8. SOFTWARE APPLICATIVO
- PROGRAMMI DI PRESENTAZIONE: servono a creare
schermate (dette slide) contenenti testo, immagini,
diagrammi, suoni e filmati da usarsi in ambito aziendale
per comunicare concetti ed informazioni (Powerpoint)
- GESTORI DI DATABASE: operano su insiemi strutturati di
dati. Un file è formato da record composti a loro volta da
campi di immissione dei dati (Access, Oracle)
- FOGLI ELETTRONICI: consentono di realizzare operazioni
matematiche con netta propensione per quelle finanziarie,
contabili e commerciali (Excel)
9. SOFTWARE APPLICATIVO
- PROGRAMMI DI GRAFICA (Photoshop, Flash)
- SOFTWARE DI GESTIONE CONTABILE
- SOFTWARE MULTIMEDIALE
- BROWSERS per la navigazione in INTERNET
- LINGUAGGI DI PROGRAMMAZIONE
10. SISTEMA OPERATIVO
Il sistema operativo rappresenta l'”intelligenza” del computer
ed è l’unica porzione di software che non può mancare in
nessuna macchina.
La sua nascita, per gli elaboratori a 16 bit, si può far
coincidere con la realizzazione di Ms-Dos della Microsoft.
Il Sistema Operativo si assume il compito di interpretare i
comandi (input) provenienti dall'esterno e di tradurli in un
linguaggio (macchina) comprensibile al computer; allo
stesso modo funziona anche al contrario, traducendo gli
output della macchina in un linguaggio a noi
comprensibile. Il S.O. ha, in sostanza, il compito di gestire
tutte le componenti del computer e di consentire la
comunicazione tra utente e calcolatore.
11. SISTEMA OPERATIVO
L’utilizzatore interagisce col sistema operativo attraverso
l’interfaccia, che può essere di due tipi:
• GUI (GRAPHIC USER INTERFACE) tipica di Windows
• CLI (COMMAND LINE INTERFACE) o CUI
(CHARACTER USER INTERFACE), tipica di MS-DOS
Prima dell'avvento di Windows, i computer
all'accensione visualizzavano il prompt del DOS (Disk
Operating System) cioè l'avviso che la macchina era
pronta a ricevere dei comandi (tutto ciò era
rappresentato, nel caso dell’MS-DOS, dalla scritta C:>
).
12. SISTEMA OPERATIVO
Ora la situazione è cambiata grazie alla nascita delle
interfacce grafiche che non sono altro che la traduzione in
termini grafici della stessa situazione precedente, inserita
in un contesto molto più accattivante. L'interfaccia grafica
(GUI) è una rappresentazione grafica sullo schermo di file,
dati, dispositivi e programmi memorizzati sul computer.
L’utente può impartire comandi all’elaboratore interagendo
con queste immagini grafiche.
I più moderni e importanti Sistemi Operativi sono: OS/2,
Unix, Win98/XP, WindowsNT/2000, WINDOWS Vista e 7,
MacOS, Linux.
13. Sistema operativo
Le principali funzioni svolte dal S.O. sono:
• GESTIONE DELLA MEMORIA
• GESTIONE DEL SISTEMA CENTRALE
• GESTIONE DELLE UNITÀ PERIFERICHE
• GESTIONE DELLE APPLICAZIONI
14. SISTEMA OPERATIVO
Evoluzione dei SO
In questa sezione ripercorriamo brevemente l’evoluzione subita dai sistemi operativi:
Anni 40: assenza di SO
L’elaborazione era attuata, essenzialmente, tramite un processo seriale:
• I programmi, in codice macchina, venivano “caricati” (copiati) attraverso il dispositivo di
input (es. lettore schede) ed avviati dall’utente (operatore di sala macchine);
• L’ordine di caricamento ed esecuzione dei vari programmi (detti job) erano determinati dal
meccanismo manuale di prenotazione della macchina;
• Si generava uno spreco di tempo macchina ogni volta che un programma terminava in
anticipo rispetto al tempo prenotato;
• Il tempo di preparazione dell’ambiente di supporto all’esecuzione di un programma era
spesso elevato dovendo passare attraverso fasi di compilazione del codice, montaggio di
nastri, installazione di funzioni di libreria.
15. SISTEMA OPERATIVO
Anni 50-60: sistemi batch
Si passa a quello che viene definito elaborazione a lotti:
• Viene realizzato tramite l’impiego di un programma detto ‘monitor’ (antenato
dei SO) in grado di automatizzare l’avviamento e l’esecuzione sequenziale di
un lotto di programmi (job);
• Si ha la prima, parziale eliminazione dell’accesso diretto dell’utente alla
macchina;
• Continua, però, a persistere la totale mancanza di interattivit{ e il tempo di
latenza continua ad avere valori elevati;
• Viene utilizzato uso di un apposito linguaggio, detto Job Control Language (JCL
o OCL), per la descrizione delle operazioni che il monitor doveva compiere;
• Si ottenne, così, una prima ottimizzazione dello sfruttamento delle risorse con
accurata distribuzione del tempo di calcolo tra i vari programmi da eseguire;
• Siamo, però, ancora in una ambiente di monoprogrammazione in cui, come
visibile dallo schema, l’utilizzo della CPU era temporizzato dalle sequenze di
input/output.
17. SISTEMA OPERATIVO
Anni 60: sistemi multiprogrammati e sistemi time-
sharing
Avvento della multiprogrammazione, ovvero
presenza contemporanea di più di un programma
in memoria centrale:
19. SISTEMA OPERATIVO
Subito dopo, naturale evoluzione e nell’ambito della
stessa multiprogrammazione, viene introdotto quello
che va sotto il nome di time-slice ovvero quanto di
tempo: l’esecuzione di più processi o thread,
eseguiti in alternanza solo per uno specifico quanto di
tempo (nell’ordine dei millisecondi) con una tecnica
denominata di time-sharing (condivisione di
tempo) mediante la quale si realizza la suddivisione
del tempo di CPU tra i programmi rendendo così
possibile l’elaborazione interattiva:
21. SISTEMA OPERATIVO
Anni 70 ad oggi:
I Sistemi Operativi (SO) prendono “vita”, si differenziano
e si specializzano in relazione alle specifiche, rilevanti
caratteristiche funzionali. Vengono realizzati :
1. SO monoutente
• Windows, UNIX, Linux
2. SO multiutente
• Unix
3. SO distribuiti
4. SO di rete
22. SISTEMA OPERATIVO
Elementi di un sistema operativo
Nella sua più ampia generalit{ un S.O. è l’insieme dei
programmi interagenti fra loro per coordinare l’accesso
alle risorse da parte degli utenti e del software
applicativo ed è costituito da:
• Gestore del processore;
• Gestore della memoria centrale;
• Gestore delle periferiche;
• Gestore dei file (File system);
• Gestore degli utenti e dei relativi comandi (interprete
comandi).
23.
24. SISTEMA OPERATIVO
Sostanzialmente il S.O. è quel complesso di programmi
impiegato per controllare altri programmi, eseguiti dallo
stesso processore.
Le differenze fra questi ultimi e il sistema operativo sono
dovuti al fatto che i programmi applicativi hanno accesso
ad un insieme ridotto di risorse e non possono decidere
quando e come avere accesso alle risorse (esecuzione in
modalità utente) mentre il SO ha accesso riservato
alle risorse e stabilisce in che ordine e come le richieste di
risorse da parte di programmi applicativi devono essere
soddisfatte (esecuzione in modalità supervisore).
25. Modelli organizzativi dei S.O.
Il S.O. è caratterizzato, funzionalmente, dalla combinazione
di un insieme di processi di servizio e da un gestore, detto
nucleo, che opera come sistema di controllo dei processi.
I modelli organizzativi di riferimento per i sistemi operativi
stand-alone sono:
• Modello monolitico: S.O. costituito da un unico modulo
che serve le richieste dei programmi-utente uno alla
volta;
• Modello a strati (a buccia di cipolla): S.O. costituito da
più moduli, ciascuno dei quali svolge specifiche
funzioni, ed ogni modulo può servire le richieste di più
programmi-utente.
27. Modelli organizzativi dei S.O.
Nel modello a strati (onion skin) ogni strato implementa una macchina virtuale
(astratta)più potente della precedente appoggiandosi alle funzionalità offerte
dallo strato sottostante(modulo).
Schematizzando:
• ogni macchina virtuale è un insieme di programmi che realizza funzionalit{
utilizzando i servizi forniti dal livello inferiore;
• ogni macchina virtuale ha il compito di gestire specifiche risorse del sistema,
fornendo meccanismi di accesso che ne regolamentano l’uso.
Modulo= routines che attivano meccanismi fisici necessari per risolvere problemi
logici di uno stesso tipo (operazioni di ingresso o uscita o gestione della
memoria)
Ogni procedura standard per mezzo della quale si possono utilizzare i servizi di
un modulo è detta primitiva (modalità di comunicazione tra i moduli che sono
tra loro indipendenti)
(macchina virtuale = oggetto costituito da una macchina più semplice che esegue
operazioni fisiche + modulo che da interpretazione logica delle operazioni ;
l’insieme crea una nuova macchina in grado di eseguire operazioni logiche)
28. Portabilità di un sistema = capacità di essere eseguito
su altre macchine
Interoperabilità di sistemi = capacità di scambiare
informazioni o utilizzare risorse tra sistemi diversi
29. Breve descrizione
1. BIOS: a diretto contatto con l’hardware del
sistema c’è il BIOS (Basic Input Output System). E’
memorizzato permanentemente su chip a sola lettura
(è hardware e software insieme) ed esegue test di base
e poi cerca il settore di avvio (boot sector) sul floppy o
nel disco fisso ed inizia ad eseguire il codice in esso
contenuto. Attiva il processo di loader che passa il
controllo allo strato superiore: il kernel.
30. 2. Nucleo o Kernel o Supervisore: gestisce i processi
corrispondenti ai programmi che sono
contemporaneamente attivi. Funzionalmente il
nucleo:
• tiene traccia dei processi che utilizzano la CPU;
• gestisce l’uso della CPU da parte dei vari processi
(scheduling);
• sincronizza i processi.
Fino a qui
31. 3. Gestore della memoria: è la parte del SO che ha il
compito di gestire l’accesso alla memoria centrale.
Consente la condivisione della memoria tra più
programmi.
• Permette a ciascun programma di lavorare in un proprio
spazio di indirizzamento, avendo a disposizione una
memoria dedicata, di capacità superiore a quella
fisicamente disponibile;
• Alloca e dealloca la memoria ai processi;
• Tiene traccia di quali parti della memoria sono
correntemente usate e da quali processi.
32. 4 Gestore delle periferiche: è la parte del SO che
consente ai processi di operare su “periferiche
astratte”. Le caratteristiche fisiche delle periferiche e le
specifiche operazioni di I/O vengono mascherate
all’utente e alle applicazioni. Permette l’uso di comandi
di alto livello (forniti dai driver delle periferiche) per
leggere e scrivere dati, senza preoccuparsi dei
problemi di indirizzamento e di sincronizzazione delle
periferiche stesse.
33. 5. Gestore di file: è la parte del SO che si occupa di gestire e strutturare
le informazioni memorizzate su memorie di massa.
Fornisce un meccanismo di astrazione che consente all’utente di organizzare
l’informazione in strutture logiche (Organizzazione logica). Traduce le
strutture logiche create dall’utente in strutture fisiche di dati memorizzate
su memorie secondarie (Implementazione).
Controlla, infine, l’uso delle strutture fisiche da parte dei processi
permettendo l’accesso solo ai processi autorizzati (Protezione).
Operativamente organizza le informazioni memorizzate su memoria di
massa nelle strutture logiche conosciute come file ovvero unità logica di
informazione che può contenere informazioni di vario tipo: documenti
(file di testo), programmi in codice sorgente (istruzioni in chiaro nel
linguaggio specifico), programmi in codice eseguibile (file binario),
immagini (ad esempio bitmap).
Dati che vengono organizzati in blocchi di piccole dimensioni logicamente
connessi da “puntatori”.
34. 6. Shell: è la parte del SO che interpreta i comandi.
Modulo direttamente accessibile dall’utente ha la
funzione di interpretare i comandi forniti dall’utente,
tipicamente da tastiera, e di attivare i programmi
corrispondenti mostrando, sullo schermo, il risultato
dell’esecuzione. Rappresenta l’ interfaccia tra utente e
sistema. A seconda della modalità di comunicazione
offerta si parla di shell a linea di comando (CLI) tipica del
sistema operativo DOS o UNIX prima maniera e shell di
tipo grafico (GUI) più “amichevoli” con icone, finestre,
menù (sistemi di tipo Windows, Mac OS, Unix Gnome).
Si tenga ben presente che la shell è un processo ‘permanente’
che dà vita ad un processo ‘temporaneo’ ogni volta che
richiede l’esecuzione di un comando.
35.
36.
37. 7. Programmi di utilità: consentono di ampliare le
funzionalità del SO, al fine di ottimizzare l’utilizzo del
calcolatore da parte sia degli utenti sia degli amministratori
di sistema.
Comprende:
• Compilatori, debugger, editor di sistema;
• Programmi per il backup dei dati;
• Programmi per la gestione dei dischi:
o Formattazione;
o Deframmentazione (ottimizzazione dello spazio occupato su disco);
o Scanning del disco (controllo della superficie del disco e
individuazione di eventuali settori rovinati).
38. 8. Bootstrap: una piccola parte del Sistema
Operativo residente nella ROM, che va in
esecuzione all’accensione del calcolatore in modo da
effettuare le seguenti operazioni:
• Eseguire i programmi di diagnostica (fase detta di POST:
power on self test), che verificano la presenza di tutti i
dispositivi hardware e l’assenza di guasti;
• Caricare dalla memoria di massa una parte del Sistema
Operativo che a sua volta ne carica una maggiore, e così
via fino a quando tutti i programmi sono caricati;
• Attivare l’interprete dei comandi.
39. 9. Gestore della rete: è l’infrastruttura software
necessaria per la gestione delle reti di calcolatori.
In verità il modello a strati non include i servizi di
gestione della connessione tra calcolatori: agli
elementi propri di tale modello occorre aggiungere un
modulo per la condivisione delle risorse dei calcolatori
connessi in rete.
40. SISTEMA IN
MONOPROGRAMMAZIONE
1 SOLO PROCESSO ATTIVO
TEMPO CPU:
Tempo utente (esec programma)
Tempo sistema
Tempo inattività (molto grande rispetto agli altri)
Dalle considerazioni sui tempi multiprogrammazione
41. SISTEMA MULTIPROGRAMMAZIONE
Si è così pervenuti ad una nuova fase nell'evoluzione del software di base, con un significativo
miglioramento nella efficienza dei sistemi : la multiprogrammazione. In memoria centrale possono
essere presenti più programmi, tutti in grado di essere eseguiti.
La CPU esegue un programma fino alla richiesta di una operazione di I-O: A questo punto la CPU delega
l'operazione ad un certo canale e, finchè questo non lo completa, può passare ad eseguire un altro
programma.
MULTIPROGRAMMAZIONE: presenza di più programmi in memoria centrale che avanzano in
“parallelo”.
La C.P.U. si occupa di un solo programma alla volta attuando:
ripartizione delle risorse
ripartizione del tempo
Se durante il tempo a disposizione di un programma è necessaria una operazione di I/O allora la C.P.U.
attiva il canale e passa al programma successivo; il canale quando termina, avvisa la C.P.U. con una
interruzione.
Così si ha una ripartizione del tempo di C.P.U. tra i diversi programmi; inoltre si ha la ripartizione delle
risorse, cioè delle periferiche che vengono usate da più programmi a seconda della necessità.
42. Vediamo meglio questo meccanismo utilizzando dei grafici in cui viene
rappresentato il tempo di utilizzo della CPU per i vari programmi.
a) Monoprogrammazione
attività di CPU
___ ___ ___
| | | | | |
| | | | | |
_|_ _|____________|_ _|_ ___________ |_ _|____________________ tempo
--->
lancio I-O fine I-O fine fine esecuzione
del I-O I-O
programma
43. b) Multiprogrammazione
Grazie agli elaboratori di canale si può delegare ad essi la gestione delle operazioni di I-O e nel frattempo utilizzare la CPU
per altri programmi.
Attività di CPU
I/O I/O fine processo
prog 1________ _ _ _ _ _________ _ _ _ _ _ _ _ _ _ ___________ _ _ _ _ _
prog 2_ _ _ _ ________ _ _ _ _ _ _ _ _ _ __________ _ _ _ _ _ _ _ _ _ _ _ _
CPU
I/O inutil fine processo
44. L'elaborazione in multiprogrammazione riduce quindi
il tempo in cui la CPU resta inutilizzata, in quanto si
eseguono più programmi in minor tempo.
La semplice gestione vista ha però il seguente
inconveniente : un programma che non presenti
richieste di I-O monopolizza la CPU ai danni di altri in
attesa; viceversa un programma con molte operazione
di I-O risulta penalizzato e può avere un tempo di
esecuzione molto più lungo di quello che avrebbe in
monoprogrammazione.
45. Si osservi inoltre come, comunque , la gestione che assegna la CPU ad un
nuovo programma - soltanto se quello in esecuzione richiede una
operazione di I-O - possa lasciare ancora tempi di inutilizzo della CPU
nel momento in cui tutti i programmi siano in attesa del
completamento di operazioni di I-O. Per ovviare a questi inconvenienti
e per migliorare ulteriormente l'efficienza del sistema si è sviluppata
una particolare tecnica : a ciascun programma viene assegnato un
tempo massimo di utilizzo, chiamato TIME SLICE superato il quale il
programma viene forzatamente interrotto.
Si stabiliscono così dei turni di utilizzo CPU, in modo da portare avanti
parallelamente l'esecuzione di più programmi senza lasciare tempi
morti. Gli schemi finora visti sono molto semplificati.
Questa tecnica di gestione della CPU è chiamata time sharing ; ma questa
tenica può essere applicata anche ad altre risorse
Il sistema operativo virtualizza la CPU
Attenzione al time slice scelto
46. In effetti per realizzare questa organizzazione oltre ad avere i diversi
programmi in memoria centrale contemporaneamente, occorre anche
un programma che gestisca l'interruzione di ciascuno e la ripresa di un
altro memorizzando in un'area apposita i dati necessari e sufficienti
alla ripresa di quello interrotto.
Occorre perciò salvare l'indirizzo dell'istruzione successiva a quella
interrotta, contenuto nel Program Counter, e oltre ad altre
informazioni e caricare nel PC l'indirizzo precedentemente salvato dal
programma da riprendere.
Inoltre esiste il problema di assegnazione della CPU: Occorre cioè
stabilire dei criteri con cui il Sistema Operativo scelga , tra tutti i
programmi pronti quale far riprendere. Quindi tra un programma e
l'altro esiste sempre un tempo di occupazione della CPU da parte del
sistema operativo per la gestione appunto, del passaggio da un
programma a un altro.
47. A questo punto lo schema di occupazione della CPU
diventa il seguente :
Coda : Pg1, Pg2, Pg3
I/O I/O scade TS I/O
Utilizzo _____|____|___|___|________|___|_________|____|___|___|_________|____|_________|
CPU PG1 SO Pg2 SO Pg3 SO Pg1 Fine SO Pg2 SO Pg3 Fine SO Pg2 Fine
48. Esempio 1
multiprogrammazione (senza TIME-SLICE)
PGM A inizio ---…. --- ….. fine
PGM B inizio … ----…----- fine
PGM C inizio ----..---…. fine
Linea tratteggiata (----) indica operazioni di C.P.U.
Linea punteggiata (....) indica tempo di I/O
Vediamo invece come lavora la C.P.U. con la tecnica del time sharing (i tre programmi avanzano in parallelo) Ad ogni
programma si assegna un "TIME-SLICE", ovvero un tempo massimo di utilizzo della C.P.U.; superato il tempo massimo
si interrompe forzatamente l'esecuzione e la C.P.U. passa al programma successivo.
E poi si va avanti con i turni!
In questo caso quindi il segnale di interruzione viene inviato anche allo scadere del time slice, oltre che alla richiesta di I/O:
49. Esempio 2
multiprogrammazione (due programmi) con TIME-SLICE
Il Sistema Operativo decide come suddividere la memoria tra due programmi A e B.
Supponiamo di fotografare passo per passo, lo stato dei due programmi A e B e come a questi
vengono assegnate le risorse del sistema.
0 la C.P.U. inizia l’esecuzione del programma
1 il programma A inizia la sua esecuzione, mentre il programma B è in attesa.
2 successivamente, il programma A chiede di poter utilizzare le periferiche (operazione
I/O)
3 mentre la richiesta viene soddisfatta, riparte il programma B fino a quando non si verifica
una interruzione del programma B
4 il programma A riparte, e il programma B rimane in attesa.
5 supponiamo ora che il programma a abbia ancora bisogno di usare le periferiche e quindi
il programma B riprende la sua esecuzione e continua a lavorare per un tempo, abbastanza
lungo, ma poiché non esegue operazioni di I/O, il Sistema Operativo ripristina le
condizioni di lavoro di A mediante
6 un segnale di interruzione dovuto allo scadere di un tempo massimo
7 si continua così fino a che uno dei due programmi finisce e quindi l’altro riprende la sua
esecuzione né senza limiti di tempo, né ripartizione delle risorse.
50. Classificazione s.o.
Sistemi dedicati
Batch
Interattivi multiutente
Elaboratore di canale = dispositivo che si occupa ad
esempio di trasferire l’output su stampante
Contengono buffer
51. PROCESSO : elenco finito di istruzioni eseguite in sequenza
+ dati che vengono elaborati da queste istruzioni
DIFFERENZA TRA PROCESSO E PROGRAMMA :
il processo evolve nel tempo, il programma no
il processo è sequenziale, mentre il programma può avere
salti e cicli.
Si chiama processore l’oggetto che causa l’evoluzione di un
processo.
52. FUNZIONI DEL SISTEMA OPERATIVO
SISTEMA OPERATIVO: è l'insieme di routines necessarie per la
gestione della C.P.U., dell' I/O e delle altre risorse del sistema.
Il sistema operativo ha diversi compiti (a seconda anche del tipo di
sistema operativo) ma sicuramente lo scopo fondamentale è
quello di:
1) RIPARTIRE LE RISORSE TRA I VARI UTENTI deve trovare il
modo di ripartire il tempo di C.P.U. nel modo più efficiente.
(Esempio: se un utente sta aspettando a terminale dei risultati,
mentre gli altri eseguono elaborazioni sequenziali allora cercherà
di privilegiare il primo, e così via).
53. In un sistema in multiprogrammazione è questo il compito principale:
servire le code di programmi.
Altre funzioni:
2) PROTEGGERE L'AREA SU CUI E' MEMORIZZATO IL SISTEMA
OPERATIVO
3) MEMORIZZARE I PROGRAMMI E I DATI DEGLI UTENTI E
PROTEGGERE CIASCUNA AREA dagli altri utenti evitando che uno
scriva sul programma di un altro.
4) FACILITARE L'USO DELLE RISORSE si prevedono macrocomandi che
vengono poi gestiti dal sistema operativo.
54. Gestione dei processi
Controlla la sincronizzazione, interruzione e
riattivazione dei programmi in esecuzione
Piu’ programmi si alternano nell’uso della CPU
Ogni programma puo’ essere:
Eseguito
Sospeso
Fatto ripartire
Struttura che mantiene lo stato di avanzamento di
ogni programma: processo.
55. Esempio: esecuzione di una
ricetta
Ricetta = programma
Noi = processore
Ingredienti = dati in input
Attivita’ di leggere la ricetta, usare gli
ingredienti, mescolare, cuocere = processo
Telefonata durante l’esecuzione della ricetta =
interrupt
Il processo interrompre l’esecuzione, prende
nota del punto (riga della ricetta, ...) e
gestisce l’evento
Alla fine della telefonata, l’esecuzione
riprende e viene conclusa
Dolce = output
56. Vari processi in esecuzione
Bisogna gestire anche
Condivisione risorse fisiche (CPU, memoria)
Condivisione risorse logiche (dati)
Modularita’: piu’ processi per una singola operazione
Maggiore velocita’ per parallelismo tra processi
Anche piu’ processi per un programma
Es.: piu’ programmatori usano lo stesso editore di
testi
57. ORGANIZZAZIONE DI UN SISTEMA
IN MULTIPROGRAMMAZIONE
Il programma parte in uno stato di SUBMIT (=sottoposto)
cioè pronto per essere sottoposto ad elaborazione.
Ma il programma non viene subito eseguito dopo essere stato
richiesto, bensì viene messo in coda, ovvero in parcheggio.
Ossia il programma da eseguire viene in genere memorizzato
ma ignorato finché non sia il sistema operativo a decidere
di caricarlo in zona lavoro ed entri nella lista dei processi in
stato di pronto.
Poi inizia l'esecuzione e in un certo istante ogni processo si
può trovare in uno dei seguenti stati:
58. STATI DI UN PROCESSO
PARCHEGGIO: in attesa di essere caricato in memoria centrale
IN PRONTO: se tutte le operazioni relative ad una certa fase del
processo sono state eseguite, ma il processo non può avanzare
perché le risorse di cui ha bisogno sono momentaneamente
impegnate in altri processi.
IN ESECUZIONE: sono in corso di esecuzione le istruzioni che lo
compongono.
IN ATTESA: è in attesa del completamento di una operazione (ad
esempio I/O).
IN TERMINAZIONE : quando l’elaborazione è terminata.
59. parcheggio
pronto
esecuzione
attesa
terminazio
ne
60. Il sistema operativo interviene non appena si verifica uno di questi eventi
:
il processo termina
il time slice finisce ( per i sistemi che operano in time sharing)
il processo richiede una operazione di I/O
Nel primo caso il SO libera l’area di memoria centrale occupata dal
processo e la riempie con uno di quelli che si trovano in stato di pronto.
Nel secondo caso riporta il processo in stato di pronto e assegna la CPU ad
un altro processo che si trovi in tale stato.
Nel terzo caso sospende il processo in quanto non può proseguire sino a
che non è avvenuta l’operazione di I/O e gli attribuisce lo stato di
attesa, al termine di questo il processo ritornerà in stato di pronto.
61. TEMPO PROGRAMMA A PROGRAMMA B
Lancio submit/parcheggio/pronto Submit/parcheggio
0 Esecuzione pronto
1 attesa (I/O) esecuzione
2 Pronto attesa (I/O)
3 Esecuzione pronto
4 attesa (I/O) esecuzione
5 Pronto attesa (I/O)
6 Esecuzione pronto
7 Terminazione esecuzione
8 Terminazione
62. TEMPO PROGRAMMA A PROGRAMMA B PROGRAMMA C
Lancio submit/parcheggio pronto submit/parcheggio submit/parcheggio
0 Esecuzione pronto Pronto
1 attesa (I/O) attesa (I/O) Esecuzione
2 attesa (I/O) esecuzione Pronto
3 Esecuzione pronto Pronto
4 attesa (I/O) esecuzione Pronto
5 attesa (I/O) attesa (I/O) Esecuzione
6 attesa (I/O) attesa (I/O) attesa (I/O)
7 Terminazione attesa (I/O) attesa (I/O)
8 Esecuzione Pronto
9 Terminazione Esecuzione
10 attesa (I/O)
11 Terminazione
63. Interrupt
Segnali hardware ad esempio alla cpu via apposita
linea elettrica
Collegati al verificarsi di un evento
Provocano l’esecuzione immediata di un programma del
SO (vettore di interrupt) che serve a gestire l’evento
Una CPU puo’ gestire piu’ interrupt
Interrupt anche per fine di quanto di tempo (generato
dal timer)
Processo che si occupa delle interruzioni si chiama
interrupt handler
Tutte le informazioni relative al processo e cioè
contenuto registri ,program counter con l’indirizzo
prossima istruzione copiati in zona memoria chiamata
stack di sistema
64. Tipi di interrupt
Rilevazione malfunzionamento hardware
Fine del quanto di tempo
Arrivo di dati in input
Rilevazione di segnali da sensori
Rilevazione di errori software
Ogni interruzione ha la sua priorita’, cosi’ il
processo che la gestisce puo’ interrompere
solo processi con priorita’ inferiore
65. 3 tipi
Interruzioni sincrone generate dall’hardware: es time
sharing legate all’orologio interno
Interruzioni asincrone generate dall’hardware: es fine
stampa
Interruzioni sincrone provocate via software :
provocate anche volontariamente dal programmatore
(linguaggio assembler) ad es lettura o scrittura su disco
66. Tabelle dei processi
Ogni processo ha una sua tabella che lo
descrive, che contiene(stack di sistema)
Identificativo
Indirizzo prossima istruzione
Contenuto registri CPU
Stato corrente (pronto, bloccato, esecuzione)
Collocazione programma e dati in memoria
Priorita’
Ammontare CPU time gia’ speso
…
67. Operazioni sui processi
La tabella e’ sempre in memoria centrale (per
accedervi velocemente)
Usando le informazioni contenute nella tabella,
si possono fare varie operazioni:
Creazione di nuovi processi
Cambio di priorita’
Blocco
Assegnamento della CPU
Terminazione
68. Processi concorrenti
Necessita’ di sincronizzazione e comunicazione
Threads: cammini di esecuzione della CPU su
un programma
Piu’ thread possono condividere codice, dati,
memoria, file, …
Task: insieme di thread e delle cose condivise
tra loro
Processo tradizionale: un solo task con un solo
thread
69. Processi indipendenti o
concorrenti
Processi indipendenti:
L’esecuzione di un processo non e’ influenzata da
quella degli altri processi
Dipende solo dall’input (deterministica)
Processi cooperanti o concorrenti:
Lo stato puo’ essere influenzato da altri processi, e
dati condivisi
Esecuzione non deterministica (dipende dalle
velocita’ relative dei processi)
70. Pipe
Permette il passaggio dei dati tra due processi
I dati sono messi da una parte di un ‘’tubo’’
(pipe) da un processo ed estratti dall’altro
lato, nello stesso ordine, da un altro processo
Molto usato nel SO Unix
71. Coda di messaggi
Esplicite funzioni per scambio messaggi: (send e
receive)
Scambio di messaggi tra piu’ processi
Messaggi gestiti secondo il loro arrivo in coda
72. Condivisione di memoria
Forma di comunicazione piu’ veloce
Pero’ anche piu’ difficile da implementare:
bisogna evitare che piu’ processi modifichino
contemporaneamente gli stessi dati
Meccanismi piu’ usati: semafori, monitor,
rendez-vous
73. NUCLEO
=kernel
parte del s.o. più vicina alla macchina, dipende
strettamente dall’hardware
Funzioni:
Avvio e terminazione processi
Assegnazione CPU ai vari processi
Sincronizzazione tra i processi
Sincronizz processi con ambiente esterno
74. Misure
Cpu activity % = (tempoutente+ temposistema)*
100/tempototale
Throughput(produttività)
= tempoutente/tempototale
= numeroistruzioni/tempo
Turnaround time =tempo da quando processo parte
fino a quando termina = tempoterminaz – tempoavvio
Waiting time = tempo in stato di attesa
Response time = tempo in pronto prima di avere cpu
75. NUCLEO
Politiche di scheduling : regole per l’assegnazione della
CPU ai vari processi
Semplice : round robin (coda)
Oppure priorità dei processi
Scheduling gestore dei processi = processo con
priorità massima
Preemption : processo più alto interrompe processi più
bassi in esecuz
76. Gestione dei processori
Criteri in base ai quali i processori vengono
assegnati ai processi
Programma schedulatore:
Distribuisce il tempo di CPU tra i processi
Decide l’avvicendamento dei processi
76
77. Criteri per lo schedulatore
Massimo tasso di uso della CPU
Massimo numero di processi completati per
unita’ di tempo (throughput)
Minimo tempo tra la sottomissione di un
processo e il suo completamento
Minimo tempo passato in attesa nella coda dei
processi pronti
77
78. Gestione della coda dei pronti:FIFO
FIFO (first in, first out):
Secondo l’ordine di arrivo, senza interruzione
Implementazione banale
Tempo di attesa non minimizzato
78
79. Gestione della coda dei pronti:
altri metodi
SJF (Shortest Job First): prima i processi piu’
corti
Round-robin: con quanti di tempo associati a
FIFO
Scadenza: prima i processi con la scadenza piu’
vicina
SRT (Shortest Remaining Time): prima i
processi a cui manca meno tempo per finire
79
80. I SISTEMI INTERATTIVI
SISTEMA DI TIPO INTERATTIVO: si accetta la richiesta di
un solo lavoro da ciascun terminale.
(Si prevede un "dialogo diretto" tra il sistema e l'utente;
avviene un vero e proprio colloquio).
L'utente ha l'impressione di avere tutte le risorse a propria
disposizione come nella monoprogrammazione; in realtà i
lavori richiesti vengono sempre portati avanti in "parallelo"
cioè in multiprogrammazione ovvero attraverso la
suddivisione del tempo C.P.U. tra i vari terminali.
81. Esistono poi sistemi "MISTI" cioè che prevedono sistemi di
lavoro sia BATCH sia INTERATTIVO.
Succede spesso, infatti, che il numero di unità stampa
(=stampanti) sia inferiore al numero dei terminali, così il
sistema si trova a gestire operazioni di spool per la
stampante mentre lavora in modo interattivo con i
terminali.
SISTEMI TIME-SHARING: (=ripartizione di tempo).
Il sistema presta attenzione ad ogni terminale per un periodo
di tempo definito (TIME SLICE = quanto di tempo);
scaduto il tempo prefissato, la C.P.U., si dedica ad un altro
collegamento e così via a turno per tutti i collegamenti.
82. Gestione della memoria centrale
Criteri per allocare la memoria centrale tra piu’
entita’ che la richiedono:
SO
Processi
Buffer di I/O
…
82
83. LA GESTIONE DELLA MEMORIA CENTRALE
La C.P.U. è in grado di eseguire solo ciò che è presente in MEMORIA CENTRALE.
(Quindi quando c'è la richiesta di un lavoro, i dati e il programma necessari devono essere trasportati in
MEMORIA CENTRALE perché l'elaborazione possa avvenire).
MEMORIA:
CENTRALE: è qui che devono essere contenuti i dati e i programmi per poter essere elaborati dalla C.P.U.
Questa è costosa, limitata e labile o volatile (cioè il contenuto viene perso ogni volta che l'unità viene spenta).
AUSILIARIA o DI MASSA: serve per memorizzare nel tempo i dati e i programmi; grosse quantità di dati
vengono immagazzinati per tempi molto lunghi. (Sono i dischi, i nastri, le schede perforate, CD-ROM etc).
Disco:
fisso (che è dentro al computer)
floppy (che è quello estraibile)
(Le memorie ausiliarie servono per affiancare la memoria centrale nel suo lavoro).
84. Per eseguire un programma, questo viene trasportato
dalla memoria ausiliaria (disco),su cui è stato
memorizzato, alla memoria centrale, solo qui la C.P.U.
lo può elaborare.
85. Al termine dell'elaborazione lo spazio occupato in
memoria centrale viene lasciato libero per altri lavori!
(Visto che la memoria centrale è limitata).
In monoprogrammazione non ci sono particolari
problemi.
In memoria centrale ci sarà il sistema operativo (che
deve essere sempre presente) e poi lo spazio restante
viene lasciato tutto all'unico utente.
86. MEMORIA CENTRALE
Sistema Operativo Parte della memoria
centrale occupata dal
Sistema
Operativo
il rimanente" è tutto quello
che resta all'utente per il
proprio programma e i dati
(E' chiaro che se l'utente richiede l'esecuzione di un
programma le cui dimensioni vanno oltre lo spazio
utilizzabile; allora il Sistema Operativo segnalerà il
"disguido" e si rifiuterà di fare l'esecuzione).
87. MEMORIA CENTRALE
In multiprogrammazione sono presenti più programmi
contemporaneamente.
In questo caso i processi devono ripartirsi lo spazio disponibile in
memoria centrale ( oltre al Sistema Operativo che comunque
deve essere presente).
Sistema Operativo Parte della memoria
centrale occupata dal
Sistema
Operativo
Processo 1 il rimanente" è tutto quello
Processo 2 che resta all'utente per il
proprio programma e i dati
Processo 3
88. GESTIONE DELLE ALLOCAZIONI PER PARTIZIONI
Il sistema operativo assegna una parte (=fetta) di memoria a
ciascun processo, tenendo presente che la ripartizione può
essere:
PARTIZIONE:
STATICA: la parte assegnata è fissa. Cioè ogni volta che viene mandato
in esecuzione un programma, gli viene data una parte di memoria(
uguale agli altri programmi).
DINAMICA: le ripartizioni (= le “fette") vengono create a seconda delle
dimensioni del programma e dello spazio rimasto libero.
89. La partizione dinamica è più "complessa" da gestire per il sistema
operativo rispetto a quella statica, ma è preferibile perché evita lo
spreco di memoria.
Infatti nella ripartizione statica l'inconveniente è che anche a programmi
molto brevi viene assegnato sempre lo stesso spazio così gran parte di
questo resta inutilizzato; viceversa se il programma è molto lungo può
darsi che non ci stia nella "fetta” di memoria assegnata, così
l'esecuzione non può avvenire e inoltre il numero massimo di processi
caricabili è fisso.
Nella ripartizione dinamica, questo problema viene risolto, in quanto la
memoria non viene suddivisa in blocchi di dimensione prefissata.
Il sistema operativo comunque deve tenere una mappa della memoria,
cioè deve sapere sempre quali zone di memoria sono occupate e quali
zone libere e tale mappa deve essere continuamente aggiornata.
90. Quando un nuovo programma deve essere caricato in memoria centrale, il sistema
operativo deve scegliere la zona cui allocare il nuovo programma.
CRITERI DI ALLOCAZIONE:
Algoritmo FIRST FIT : si assegna la prima partizione libera che si incontra
sufficientemente grande.
(Algoritmo molto semplice).
Algoritmo BEST FIT: tra tutti i posti liberi si sceglie, il migliore cioè il più adatto,
cioè lo spazio libero più piccolo che lo può contenere.
Algoritmo WORST FIT: tra tutti i posti liberi si sceglie, il peggiore cioè lo spazio
più grande libero.
91. La seconda soluzione è la meno veloce ma è quella più
razionale, in quanto lascia spazi più ampi per più tempo.
Osserva che con il tempo, a causa del susseguirsi di
allocazioni e rilasci di memoria, si giunge alla
"frammentazione" in tante piccole zone inutilizzabili.
Ecco che periodicamente il Sistema Operativo deve
ricompattare i programmi e creare così un'unica aerea
libera di memoria.
Il sistema di allocazione della memoria a partizioni variabili
sfrutta meglio la memoria centrale a scapito però di un
carico di lavoro maggiore svolto dal SO.
92. MC 500 K
SO 200K
Esempio partizione statica : 3 blocchi da 100K carico al max 3
programmi
Esempio Partizione dinamica : 300K disponibili
PG1 30 K, PG2 50K, PG3 120K, PG4 80K, PG 5 60K
Posso caricare i primi 4 e il 5° attende
93. GESTIONE DELLA MEMORIA PER PAGINE o
PAGINAZIONE
La paginazione offre un’altra soluzione al problema della frammentazione della memoria
centrale e rappresenta una delle tecniche maggiormente usate sugli attuali sistemi di
elaborazione.
Con questa tecnica il programma viene diviso in blocchi aventi le stesse dimensioni dette
pagine logiche(solitamente 2K o 4K).
In modo analogo la memoria centrale viene divisa in pagine fisiche aventi le stesse
dimensioni delle pagine logiche.
Possiamo dire che esiste una corrispondenza biunivoca tra le pagine logiche e quelle fisiche.
Però mentre le pagine sono logicamente contigue e come tali vengono gestite dall’utente, i
blocchi di memoria possono anche non esserlo.
Saranno necessari dei supporti di memorizzazione cioè delle tabelle di mappa di pagina che
consentono di gestire la trasformazione dell’indirizzo di pagina in indirizzo di blocco.
Per ogni pagina logica sarà necessario sapere :
- se occupa una pagina fisica
- le posizioni sul disco della pagina logica
- altri flag come ad esempio quello che indica se la pagina è stata modificata o meno.
94. Naturalmente la dimensione delle pagine e dei blocchi deve essere fatta tenendo
conto dei lavori da effettuare e della struttura hardware del sistema; infatti se la
pagina è troppo grande ci si ritrova con gli stessi problemi delle partizioni fisse,
mentre se la misura è troppo piccola si dovrà gestire una grossa tabella di
mappa che se implementata attraverso registri veloci, farebbe aumentare il
cosdto del sistema.
Esempio supponiamo che la memoria centrale sia suddivisa in 15 blocchi e che i
blocchi 3, 4, 6,7,11,12 siano già occupati da alcuni programmi.
Un programma PROG2 di 14 k venga diviso in 4 pagine di 4 k ( 4* 1024) ciascuna
di cui l’ultima non completamente occupata. Quando viene caricato in
memoria vengono reperiti 4 blocchi non contigui liberi (1, 5, 8, 11) e viene
creata la tabella di associazione tra pagine e blocchi.
La tecnica di paginazione risolve quasi completamente il problema della
frammentazione senza che avvenga alcun movimento fisico dei blocchi in
memoria.
Se ad esempio si dovesse allocare un altro programma di 16K sarebbe possibile
associargli i blocchi liberi 2 , 9 , 10 , 13 senza dover compattare i blocchi già in
uso.
96. Vediamo ora dato un indirizzo logico come viene determinato l’indirizzo fisico:
- dividendo l’indirizzo logico per l’ampiezza della pagina; il risultato della divisione fornisce il numero di
pagina; il resto fornisce l’indirizzo relativo all’interno della pagina
Ad esempio supponiamo che un programma contenga l’istruzione che fa riferimento alla posizione 5120.
allora divido 5120 per 4 * 1024 5120: 4096 = 1 con resto 1024 = 1K
- individuando nella tabella di mappa di pagina l’indirizzo del blocco in cui è memorizzata la pagina:
La pagina logica 1 so che è mappata nel blocco 7 e quindi
7 * 4096 = 28672 = 28K
So che i primi 80K della memoria centrale sono occupati dal sistema operativo quindi
28K + 80K = 108K è l’inizio del blocco 7.
- sommando all’indirizzo di inizio del blocco l’indirizzo relativo all’interno della pagina
108K + 1K = 109K che è l’indirizzo cercato.
97. La paginazione ha il vantaggio di eliminare la
frammentazione senza richiedere molto tempo alla CPU
per lo spostamento fisico dei blocchi di dati. Ciò porta ad
un aumento del grado di multiprogrammazione, sia ad un
aumento del rendimento generale del sistema.
Gli svantaggi : elevato costo hardware per la trasformazione
degli indirizzi, occupazione in memoria delle varie tabelle e
il consumo di tempo della CPU per mantenere aggiornate
queste tabelle. Inoltre si ha un fenomeno simile alla
frammentazione quando la lunghezza di un programma
non è esattamente un multiplo di pagina ad esempio se è
17K allora occuperà 5 pagine di 4K ciascuna con evidente
spreco di memoria.
98. GESTIONE DELLA MEMORIA PER SEGMENTI
o SEGMENTAZIONE
Si definisce segmento un insieme di informazioni con una
unitarietà fisica come una routine, un array , un’area dati.
Nella segmentazione il programma viene diviso in segmenti
di lunghezza variabile a cura del programmatore; ogni
segmento può corrispondere per esempio ad un modulo
del programma o ad un’area dati.
Ogni indirizzo logico all’interno del programma è espresso
dal numero di segmento e dall’indirizzo relativo all’interno
del segmento.
Il caricamento dei segmenti in memoria è gestito con la
tecnica delle partizioni variabili.
100. La segmentazione è una generalizzazione della gestione a partizioni variabili
che porta ad una riduzione del problema della frammentazione poichè è più
facile adattare i segmenti alle aree di memoria anche piccole che rimangono
disponibili.
Differenza tra paginazione e segmentazione : le pagine sono unità fisiche di
dimensione fissa mentre i segmenti sono unità logiche di dimensione variabile
definiti dal programmatore.
Svantaggi della segmentazione : costo hardware e complessità so.
Ma se un programma richiede uno spazio superiore a quello disponibile?
Se il numero di pagine, necessario per memorizzare un programma, libere sono
insufficienti?
La memoria centrale è limitata!!!
Il problema è stato risolto con la tecnica della MEMORIA VIRTUALE.