CAPITOLO 4 - Evoluzione dei Sistemi Operativi

CAPITOLO 4 - Evoluzione dei Sistemi Operativi
EVOLUZIONE DEI SISTEMI OPERATIVI
I Sistemi che si presenteranno vanno dai sistemi monoprogrammati ai sistemi multiprogrammati e anche multiutenti.
Questi ultimi sono i sistemi evoluti contemporanei.
OBIETTIVI DI UN SISTEMA OPERATIVO
I motivi per cui viene intrapresa la progettazione di un sistema operativo generalmente sono:
1° rendere facile l’uso delle componenti del computer,
2° rendere efficiente l’uso di tutte le parti di un computer, cioè fare un buon uso delle risorse,
3° avere la possibilità di far facilmente evolvere le sue componenti per adattarle alle nuove esigenze del software e
dell’hardware. Al limite potendosi cambiare le caratteristiche di parti con l’aggiunta di nuove petch che consentono
l’upgrade del sistema e quindi di poter modificare le prestazioni del sistema senza per questo doverlo sostituire
integralmente.
IL S.O. COME INTERFACCIA UTENTE/COMPUTER
In questa slide è presentata la
collocazione
del
sistema
operativo all’interno della
macchina e come si vede esso è
immediatamente al di sopra
dell’hardware giust’appunto a
significare che ogni altro
programma farà uso del
sistema operativo per utilizzare
l’hardware. Lo strato più basso
in
questa
piramide
è
rappresentato dall’hardware
sul quale opera tutto il sistema
operativo e tutti i programmi
utenti. Il sistema operativo per
funzionare utilizza diversi
programmi o utility. Per
esempio durante una lezione in
aula ci può essere l’utility relativa alla routine di invio al proiettore delle slides di presentazione degli argomenti da
trattare e c’è contemporaneamente l’utility di invio al monitor degli stessi file che consentono al docente di vedere
quello che si sta proiettando sullo schermo. E’ chiaro che per la realizzazione di slides di presentazione si è utilizzato un
programma applicativo, in questo esempio è il Power Point. Nella slide utilità e programmi applicativi li vediamo
rappresentati più in alto nella piramide. Al vertice è riportato l’utente finale che in questo esempio sarebbe il docente
che presenta la lezione se svolta in aula.
SERVIZI FORNITI DAL SISTEMA OPERATIVO
 Creazione dei programmi
 Esecuzione dei programmi
 Accesso ai dispositivi di I/O
 Accesso controllato ai file
 Accesso al sistema
 Rilevazione e correzione degli errori
 Contabilità e statistiche d’uso
Un sistema operativo fornisce i servizi per la creazione di programmi, per
la loro esecuzione, per l’effettuazione d’operazioni di I/O verso dispositivi.
Nell’esempio illustrato nella slide precedente si tratta d’operazioni di
accesso al dispositivo monitor e il dispositivo proiettore. Inoltre, il sistema
operativo fornisce servizi che consentono l’accesso controllato ai file,
infatti un docente può scegliere di illustrare agli studenti la lezione numero
due o numero tre. Infine esso fornisce l’accesso al sistema, fa le rilevazioni
e la correzione degli errori, effettua la contabilità e raccoglie le statistiche
di uso del computer.
1
SISTEMA OPERATIVO COME GESTORE DELLE RISORSE
In questa slide è mostrata
una guida schematica di
rappresentazione di un
sistema operativo in un
sistema multiprocessore.
Il sistema operativo, con il
suo kernel, occupa la
memoria centrale. Le altre
componenti
vengono
spostate
in
base
all’occorrenza
dalla
memoria secondaria nella
memoria centrale. La
memoria
centrale
contiene
anche
i
programmi, i dati e i driver
di controllo dei dispositivi
periferici
attraverso il controller di Input/Output. La macchina, rappresentata in questa figura, utilizza i dispositivi periferici,
rappresentati tramite ellissi, mentre nella memoria secondaria sono memorizzati i dati e i programmi dell’intero sistema
operativo. Importante è notare che il sistema operativo nella sua interezza normalmente si trova su disco, mentre una
parte o tutto il kernel può trovarsi nella memoria centrale. A seconda delle necessità, l’utilizzazione del sistema
operativo richiede operazioni di trasferimento dalla memoria secondaria alla memoria principale e viceversa, ossia
quando le varie parti di sistema operativo non sono più utili queste vengono ritrasferite nella memoria secondaria. Qui
si pone il problema se è necessario ritrasferirle oppure No. E’ chiaro che se non sono modificate, e normalmente le
parti di sistema operativo non sono modificate, non c’è bisogno di ritrasferirle nella memoria secondaria. E’ solo per
poterle usare che diventa necessario trasferire, dalla memoria secondaria alla memoria principale, le parti che non sono
presenti nella memoria centrale.
FACILITÀ DI EVOLUZIONE DI UN SISTEMA OPERATIVO
Nella fase di progettazione di un sistema operativo bisogna tenere conto che se cambia l’hardware, e molto facilmente
sul mercato si affacciano nuovi tipi di hardware, il sistema operativo deve poter continuare a funzionare anche su nuove
piattaforme hardware. Inoltre, il sistema operativo potrebbe col tempo richiedere l’inserimento di nuovi servizi, c’è quindi
bisogno di progettarlo almeno in maniera modulare, anche se il concetto di modularità è ormai sorpassato. Infine, poiché
è facile che malfunzionamenti di parti del sistema operativo siano individuati nel corso del tempo, deve poter essere
sempre facile intervenire per eseguire le dovute correzioni. Queste sono le caratteristiche fondamentali di un sistema
operativo affinché esso abbia un ciclo di vita il più lungo possibile.
SISTEMI BATCH
Per poter correttamente introdurre i
moderni sistemi operativi è opportuno
menzionare due antesignani che sono i
sistemi a lotti (o sistemi batch) e i sistemi
time sharing. In questa slide sono
riportate le principali caratteristiche dei
sistemi a lotti. Inizialmente per utilizzare
al meglio le risorse di un computer
bisognava facilitare l’uso del processore
evitando il problema dei tempi d’attesa
della macchina per il completamento
delle operazioni di Input/Output. Nei
sistemi Batch all’inizio i vari programmi
erano inseriti nella macchina istruzione
dopo istruzione, essendo normalmente
le istruzioni scritte su schede perforate e
lette dai lettori di schede, il tempo
necessario per scrivere i programmi e 
2
agli operatori per inserire le schede era lungo rispetto ai pochissimi secondi necessari alla CPU per eseguire le istruzioni.
Per migliorare l’utilizzo delle macchine si crearono quindi i sistemi a lotti. I vari programmi erano dati attraverso pacchi
di schede al lettore di schede, dal lettore di schede, si passò alla registrazione dell’input su nastri magnetici e questa fu
una prima evoluzione. Si ebbero, così, computer satelliti di I/O che operavano intorno al computer centrale. E’ il caso
negli anni 60 del 360 o anche del più piccolo IBM 1800. Dopo la lettura, i nastri magnetici venivano trasferiti ai lettori
di nastro sul computer centrale e questi provvedeva all’esecuzione dei programmi. Si formò così un insieme di
programmi messi in un unico blocco, detto lotto. Il linguaggio di macchina dominante per i sistemi IBM e altri sistemi
era il Fortran. L’organizzazione di ogni programma, riportata nella parte destra della figura, consisteva di alcune schede
prioritarie dette schede job, a cui seguivano le istruzioni in Fortran a cui erano collegati i dati. Alla fine dei programmi
nei vari lotti erano inserite le schede di ritorno. Il sistema batch funzionava in questo modo: il monitor, una volta
individuate le schede job, caratterizzate dal simbolo dollaro ($) che precedeva l’istruzione, leggeva sulle schede job il
nome dell’utente, la richiesta di spazio di memoria, il tempo stimato per l’esecuzione del programma e ciò consentiva
di individuare le risorse da impegnare, risorse di tempo e risorse di spazio di memoria. Non appena l’istruzione dollaro
run era processata dal monitor, il programma veniva eseguito. Alla fine il ritorno al monitor era ottenuto attraverso la
scheda dollaro end. Quindi un sistema batch consisteva di un monitor centrale il quale aveva il preciso scopo di
serializzare i job, di gestire i dispositivi, di controllare le interruzioni e di eseguire l’interpretazione delle istruzioni del
linguaggio del programma utente.






Elaborazione seriale
 interazione diretta
 schedulazione fissa
 preparazione del job
Sistemi batch monoprogrammati
 utilizzo del monitor
 raccolta dei job in lotti
 esecuzione di tutti i job di un lotto
Le caratteristiche principali di un sistema batch erano
l’interazione diretta, la schedulazione fissa e la preparazione
del job. Per riassumere il monitor era utilizzato per
l’avanzamento dei diversi job raccolti in lotti e provvedeva
all’esecuzione di tutti i job all’interno di un lotto.
Protezione della memoria
 non alterare area riservata al monitor
Timer
 prevenire monopolizzazione delle risorse
Istruzioni privilegiate
 istruzioni eseguibili solo dal sistema
operativo
Interruzioni
 possibilità di interrompere l'esecuzione
del programma utente
Nella progettazione del sistema operativo bisognava porre
attenzione a non alterare in memoria l’area riservata al
monitor. Infatti, ogni volta che un programma utente faceva
riferimento a locazioni di memoria riservate al monitor era
generato un interrupt e la macchina si fermava. Si è anche visto
che al fine di evitare la monopolizzazione di una risorsa, ad
esempio il processore da parte di un processo, era utilizzato un
timer e sulla base del tempo stimato in assegnazione al
processo, ogni volta che tale tempo veniva superato, il lotto era
espulso. Ciò significa che esistono delle istruzioni privilegiate
eseguite dal sistema operativo, che sono quelle contrassegnate
in ingresso dal simbolo $. Il sistema operativo aveva pure la
possibilità di essere interrotto da particolari segnali
d’interruzione, quali ad esempio quello di nastro finito o, se
aveva delle stampanti in linea, quello di mancanza di carta e via
dicendo.
BATCH MULTIPROGRAMMATI TIME-SHARING
 Sistemi batch multiprogrammati
 limitare l’inattività del processore
 elaborazione seriale dei task
 Sistemi time sharing
 condivisione del tempo di processore fra
i vari processi
 elaborazione dei processi utente in
quanti di tempo
 forma evoluta di multiprogrammazione
Un altro tipo di sistema operativo che apparve sul mercato fu il
sistema time-sharing, in particolare il Compatible Time-Sharing
System (CTSS). L’origine dell’ideazione di questi sistemi
operativi usati per le prenotazioni aeree, risiedeva nella
possibilità di fare delle prenotazioni da varie agenzie. Il
principio base di un time-sharing era quello di assegnare un
certo intervallo di tempo fissato, chiamato in inglese “slice”, ad
ognuno dei terminali in linea con il sistema centrale. Quello che
accadeva era che a turno uno dopo l’altro le varie periferiche
prendevano il controllo del sistema centrale provvedendo a
fare le prenotazioni, cioè le transazioni sulle tabelle dei voli.
3
Questo principio è stato poi sfruttato in quasi tutti i sistemi
operativi che uniscono le capacità batch alle capacità timesharing. In questo caso non si tratta di fare assegnazioni alle
diverse agenzie, ma si tratta di fare l’assegnazione della risorsa
processore per quanti di tempi uguali e successivi ai diversi
processi in avanzamento nel sistema. In questo modo si è avuta
una forma evoluta di multiprogrammazione giacché la
multiprogrammazione semplice del batch impegnava ad
eseguire i programmi uno dopo l’altro. Il time sharing dà la
possibilità di eseguire i vari programmi contemporaneamente
assegnando a ciascuno dei processi in avanzamento nel sistema
una slice o quanto di tempo.
REQUISITI DELLA MULTIPROGRAMMAZIONE
 Tutti
i
requisiti
necessari
alla
monoprogrammazione
 In più:
 gestione Interrupt avanzato per gestire il
cambio dei processi oltre che per la gestione
dello I/O
 DMA
I moderni sistemi operativi, per un efficiente ed efficace
passaggio
dalla
monoprogrammazione
alla
multiprogrammazione, hanno richiesto l’inserimento di due
altri concetti base ossia l’interrupt e il DMA (Direct Memory
Access). Per evitare che il processore sia in controllo attivo delle
esecuzioni di istruzioni o di routine, può essere più semplice
utilizzare il meccanismo d’Interrupt, ma per effettuare
trasferimenti tra dispositivi non c’è bisogno che tutto passi
attraverso la CPU, quindi nei sistemi è stato inserito il DMA che
consente, via bus, il trasferimento da un dispositivo ad un altro
semplicemente posizionando l’indirizzo di partenza nel buffer
o nella parte di memoria riservata ad un dispositivo. Questo
trasferimento avviene con incremento automatico dei
contatori e senza che il processore stia a controllarli.
ESEMPIO DI UTILIZZO MONOPROGRAMMATO
Questa slide fa la
dimostrazione
contabile
delle
economie
che
sarebbe opportuno
fare tenendo conto
di quello che accade
in un sistema di
calcolo
monoprogrammato
. Se si deve
elaborare
un
programma di 100
istruzioni
normalmente sono
sufficienti
1.000
microsecondi. Per
trasferire però 100
istruzioni
dalla
memoria secondaria alla memoria principale occorrono 15.000 microsecondi ed in seguito l’elaborazione per riscrivere
il record nella memoria secondaria richiede altri 15.000 microsecondi. Quindi, un totale di 31.000 microsecondi sono
necessari perché questo programma di 100 istruzioni possa essere eseguito. Se andiamo a vedere la percentuale d’uso
della CPU scopriamo che solo 0.0001 secondi su un totale di 0.0031 secondi viene utilizzato per la CPU e quindi lo 0.032
cioè la CPU è utilizzata in totale per il 3,2% del tempo, mentre il 96,8% non viene utilizzata. Ciò dimostra che in un
sistema monoprogrammato si ha un grande sperpero di risorse con l’inutilizzo del processore.
4
ESEMPIO DI UTILIZZO MULTIPROGRAMMATO
Vediamo un esempio d’uso di
un sistema multiprogrammato.
Se due programmi A e B devono
essere
eseguiti,
potrebbe
accadere che, nel momento in
cui sul processore vengono
eseguite le istruzioni del
programma A, non possono
essere eseguite le istruzioni del
programma
B.
Con
il
meccanismo
della
multiprogrammazione
il
programma B va ad effettuare
operazioni di trasferimento
nello stesso tempo in cui va in
esecuzione sul processore il
programma A, quindi, la
multiprogrammazione consente
di far avanzare in parallelo più
programmi sulla macchina,
anche se è un parallellismo
fittizio. Di qui a compiere il
successivo passo per la
multiprogrammazione facendo
avanzare non due ma tre o n
processi nel sistema è facile e
questo è rappresentato nella
parte c dell’immagine.
ISTOGRAMMA DI UTILIZZO IN MONOPROGRAMMAZIONE
In questa slide sono illustrati 3 esempi di
programmi di cui il primo ha una durata di 5
secondi, il secondo di 15 secondi e il terzo di
10
secondi.
Questi
hanno
però
caratteristiche diverse perché il primo
programma richiede una memoria
d’estensione 50, il secondo 100 e il terzo 80.
Inoltre il primo e il secondo programma non
utilizzano il disco, il terzo sì. Solo il
programma P2 fa uso del terminale, mentre
i programmi P1 e P3 no. Inoltre la
stampante è utilizzata solo dal programma
P3. Ciò dimostra che dispositivi diversi sono
coinvolti nell’avanzamento e questo facilita
la multiprogrammazione.
5
PROCESSI DI FACILE MULTIPROGRAMMABILITÀ
Questa
illustrazione
mostra
l’istogramma
d’utilizzazione
monoprogrammata
delle risorse. Si nota che
per le prime 5 unità di
tempo il programma 1
utilizza la CPU, nelle
successive 15 unità di
tempo, diciamo 15
secondi, è il programma
2 che utilizza la CPU e
solo negli ultimi 10
secondi è il programma
3 che impegna oltre alla
CPU altre risorse, per
esempio la memoria, il
disco ed ecc… .
ISTOGRAMMA DI UTILIZZO IN MULTIPROGRAMMAZIONE
Se il sistema è
multiprogrammato,
in 15 secondi, che è
la durata massima
del JOB 2 o se
vogliamo
del
processo 2, tutti e
tre
i
processi
possono
essere
eseguiti con il
meccanismo delle
DMA
e
degli
interrupt.
6
EFFETTI DELLA MULTIPROGRAMMAZIONE
Questa slide riporta
alcune
valutazioni
quantitative, mostra i
vantaggi
della
multiprogrammazione
rispetto
alla
monoprogrammazion
e e dà il modo di
meglio apprezzare i
vantaggi
del
multiprocessing cioè i
vantaggi d’uso di più
processori. Si osserva
che se il lavoro è
eseguito a porzioni ma
in parallelo, un sistema
con molti processori
dà migliori risultati rispetto ad un sistema dello stesso tipo a singolo processore. Ma al di là dei sistemi multiprocessori,
tornando a quelli a singolo processore , ci rendiamo conto che con la multiprogrammazione giungiamo a risultati
d’ottimizzazione che portano la percentuale d’uso del processore dal 17% nella monoprogrammazione al 33% nella
multiprogrammazione. Nella tabella sono anche comparati i risultati tra la monoprogrammazione e la
multiprogrammazione per l’utilizzo della memoria, del disco, della stampante, del tempo totale, del throughput, che è
il numero di processi che attraversano il sistema, e del tempo medio sull’esecuzione di tutti i job.
FUNZIONAMENTO DI SISTEMA TIME SHARING
Una più precisa
descrizione del
sistema
time
sharing
è
riportata
in
questa slide. In
questo caso ci
sono 4 job in
avanzamento.
Accade
che
ognuno
di
questi job viene
trasferito dalla
memoria
secondaria alla
memoria
principale,
ovviamente al di
fuori della zona
riservata
al
monitor che in
questo esempio
occupa i primi 5
KB di memoria.
Quando il tempo assegnato al job 1 è finito ( end of slice), si carica in memoria il job 2 e viene mandato in esecuzione
per lo stesso “quanto” di tempo. Così di seguito viene caricato il job 3 e potrebbe essere che, essendo il job 3 più corto,
non ha bisogno di usare tutto l’intervallo di tempo che gli viene assegnato,a questo punto vari perfezionamenti dei
sistemi time sharing possono essere intuiti. Andando avanti, al successivo passo viene caricato di nuovo il job 1 e viene
scaricato il job 4. Importante è far notare come al momento del ricarico di job, poiché alcuni pezzi non sono stati
scaricati o meglio non sono stati ricoperti, può essere semplicemente effettuata la riscrittura in memoria principale
della parte di codice mancante del job che deve andare in esecuzione.
7
MULTIPROGRAMMAZIONE BATCH vs. TIME SHARING
Questa slide riporta
le
caratteristiche
essenziali dei sistemi
batch e dei sistemi
time sharing. I sistemi
batch sono stati
inventati
per
massimizzare l’uso
del
processore,
invece i sistemi time
sharing
per
minimizzare il tempo
di
risposta.
Per
chiarezza, se uno dei
job fosse molto lungo
e
impegnasse
il
processore per molto
tempo, un altro job, che deve utilizzare il processore per un tempo minimo, è costretto ad aspettare che venga prima
eseguito tutto il programma che lo precede e a prendere il controllo del processore solo in seguito. Il time sharing,
avendo diviso il tempo d’assegnazione del processore a diversi processi, fa sì che tutti possano avanzare nel sistema,
quindi il time sharing combinato col batch è la base principale degli attuali sistemi di multiprogrammazione moderni.
E’ importante notare che le sorgenti delle istruzioni sono il linguaggio di controllo dell’avanzamento dei job, oppure,
nel caso del time sharing i comandi inseriti dal terminale. Quest’ultimo aspetto mette in evidenza la differenza tra i due
sistemi per essere il primo eseguibile a programma ed il secondo con comandi interattivi.
CAUSE DI ERRORE
 Sincronizzazione impropria
 perdita o duplicazione dei segnali
 Fallimento della mutua esclusione
 accesso non esclusivo a risorse condivise
 Operazioni non determinate
 uso di dati comuni in modo incontrollato
 Stallo (deadlock)
 attesa reciproca di risorse
ASPETTI DELLA PROGETTAZIONE DI S.O.
 Governo dei processi
 Gestione della memoria
 Protezione e sicurezza informazione
 Schedulazione risorse
 Struttura di sistema
Questa slide riporta le principali cause d’errore nei
moderni sistemi operativi. La slide si commenta da sola.
Gli aspetti fondamentali controllati da un sistema operativo sono la
gestione dei processi e della memoria, la protezione e la sicurezza
dell’informazione, la schedulazione delle risorse e la struttura di sistema.
Per vedere più nei particolari questi aspetti fondamentali del sistema
operativo si tratterà nelle successive slide uno per uno questi aspetti.
PROCESSO
I moderni sistemi operativi ruotano e si spiegano bene, intorno al concetto base di processo.
DEFINIZIONI DI PROCESSO
 Un programma in esecuzione
 La "anima" di un programma
 L'entità assegnata ad un processore
In questa slide sono riportate alcune tra le più note definizioni di
processo. Se si pensa ad un programma, quando le diverse istruzioni sono
eseguite una dopo l’altra, si può affermare che il programma in esecuzione
è il processo. Eseguire un programma significa dare una certa animazione
alle istruzioni e quindi il processo è la “anima” di un programma. Se si
guarda al processo come entità assegnata o se si pensa alle risorse che
sono utilizzate per l’avanzamento di un processo si potrebbe dire che un
processo è una entità assegnata ad un processore, ovvero, l’esecuzione di
un programma su un processore costituisce il processo.
8
COMPONENTI DI PROCESSO
 Programma
 codice eseguibile
 Dati
 variabili
 spazio di lavoro
 buffer
 Contesto di esecuzione
 contenuto dei registri
 altre informazioni: es. priorità, stato di attesa
Le componenti di un processo possono essere così
riassunte. Il codice eseguibile costituisce il programma che
è parte del processo. I dati, ossia le variabili, lo spazio di
lavoro e il buffer, sono altre componenti di cui il processo
si serve durante la sua esecuzione. Un altro componente
importante del processo è il contesto di esecuzione, cioè
un processo viene eseguito nell’ambito di un contesto che
è descritto dai contenuti di tutti i registri della CPU, inoltre,
il contesto di esecuzione conserva altre informazioni come
la priorità con cui il processo viene eseguito, oppure lo
stato di attesa in cui esso si trova.
IMPLEMENTAZIONE TIPICA DI PROCESSO
Processo =
struct
{programma,
dati,
contesto}
Questa slide mostra vari processi
residenti nella memoria principale e
come il sistema operativo li gestisce.
La memoria principale contiene la
lista dei processi costruita e gestita
dal sistema operativo, ossia un
blocco di memoria che contiene il
programma, i dati e il contesto del
particolare processo i, j e così via.
Nella figura si vede, a sinistra, la
mappa della memoria principale. C’è
una zona riservata alla lista dei
processi con i puntatori ai processi,
cioè alle aree di memoria relative ai
processi in cui sono allocati i dati
forniti dal processo che permettono
di poter far avanzare l’esecuzione dei
processi stessi. Sulla destra ci sono i
registri del processore. In particolare
c’è il Registro indice dei processi con
l’indice del processo i che punta al
contesto. Il contesto permette di
trasferire all’interno dei registri del
processore non solo l’indice del
processo ma anche il valore del Program Counter da cui il processo si avvia. Prima di arrivare, dal contesto vengono
trasferiti nelle liste di sicurezza l’indirizzo di base da cui inizia l’esecuzione e il valore di limite. Ogni volta che l’indirizzo
va al di fuori del range “base + limite” si genera un errore e di conseguenza il processo è arrestato. Naturalmente per
dare la possibilità al processo in esame di essere eseguito occorre trasferire nei registri i valori che sono normalmente
conservati nel contesto. Tutto questo perché occorre definire all’inizio i valori iniziali dei registri e poi man mano che il
processo avanza nel sistema è necessario che nel contesto venga conservato lo stato delle interruzioni per poter poi
essere riprese nel riavvio del processo in questione, quindi il processo è una struttura in cui sono conservati sia il
programma, sia i dati, sia il contesto.
9
MEMORIA
Diciamo ora qualcosa su un’altra importante parte di un sistema che è la memoria.
GESTIONE DELLA MEMORIA
Per assolvere alle richieste dei diversi utenti il
sistemi operativi deve provvedere a:
 Isolamento dei processi
 Allocazione e gestione automatica
 Supporto alla programmazione modulare
 Protezione e controllo dell’accesso
 (Memorizzazione a lungo termine)
Un sistema operativo ha la responsabilità di gestire la memoria che
viene utilizzata per contenere i dati, il programma e il contesto
relativi a ogni processo. Questo deve farlo avendo la sicurezza di
isolare i vari processi, di allocare i processi e tutte le strutture relative
ai processi in maniera automatica, avendo una struttura tale da poter
consentire la programmazione modulare, potendo effettuare
protezione e controllo di accesso alla memoria e
contemporaneamente potendo garantire la memorizzazione a lungo
termine.
SISTEMI DI MEMORIZZAZIONE
Ci sono due modi di vedere il sistema
di gestione della memoria: uno è
quello del punto di vista dell’utente e
l’altro dal punto di vista del
progettista del sistema operativo. Il
primo vede il processore virtuale con
la memoria virtuale astraendo dal
contesto, programma e dati che si
trovano. Tutto è eseguito sul
processore come se tutto risiedesse
nella memoria centrale. In verità le
strutture dati e i vari dati sono in
memoria
secondaria
e
solo
all’occorrenza vengono trasferiti dalla
memoria secondaria nella memoria
principale. Questo viene fatto
attraverso uno schema che è ben
noto al progettista di sistema operativo. Infatti, accade che un mapper, traduttore di indirizzi, effettua i trasferimenti
delle varie pagine dalla memoria secondaria alla memoria principale attraverso operazioni di swap, ossia swap-in e
swap-out, a seconda che le pagine vadano dalla memoria secondaria alla memoria principale o viceversa dalla memoria
principale alla memoria secondaria.
PROTEZIONE DELL’INFORMAZIONE
Le principali operazioni di
competenza del sistemi operativi
per la salvaguardia della sicurezza
coinvolgono:
 Controllo dell’accesso
 Controllo
del
flusso
dell’informazione
 Certificazione
SCHEDULAZIONE
La politica di allocazione delle
risorse deve considerare i
seguenti fattori:
 Equità
 Tempo di risposta
differenziale
 Efficienza
L’uso crescente dei sistemi time sharing ha portato in evidenza i problemi relativi
alla protezione dell’informazione. Questi problemi riguardano l’accesso ai sistemi
di elaborazione e all’informazione memorizzata in essi. Per quanto riguarda,
quindi, la protezione dell’informazione, è compito del sistema operativo eseguire
il controllo dell’accesso degli utenti al sistema, ai sottosistemi e ai dati. Il sistema
operativo, inoltre, fa il controllo del flusso dell’informazione nel sistema e verso gli
utenti e la certificazione, ossia la verifica d’esecuzione delle specifiche dei
meccanismi di controllo d’accesso e del flusso.
Un altro aspetto di cui si deve occupare un sistema operativo è la schedulazione. Per
essere chiari i processi avanzano nel sistema volendo ognuno utilizzare le risorse. A
tal fine è necessaria una politica che assegni ai diversi processi le risorse del sistema,
qualunque esse siano, sia che si stia parlando di processore, di memoria, che di
dispositivi. Una politica d’allocazione delle risorse deve rispettare determinati
principi. I principi della schedulazione sono equità, per esempio, tutti i processi che
sono in avanzamento nel sistema devono avere la possibilità di utilizzare il processore
senza esclusioni di sorta. Deve anche essere prevista una risposta differenziale nel
tempo, ossia ci può essere un processo che richiede una risorsa da utilizzare per lungo
tempo e un altro per un breve periodo. Quest’ultimo deve poter utilizzare tale risorsa
10
per il tempo di cui ha bisogno e il tutto deve essere fatto in maniera efficiente, cioè le
risorse devono essere gestite dal sistema operativo in maniera efficiente qualunque
esse siano.
ELEMENTI CHIAVE PER LA MULTIPROGRAMMAZIONE
Questa
slide
mostra i principali
elementi di un
sistema operativo
coinvolti
nella
schedulazione dei
processi
e
nell’allocazione
delle risorse in un
ambiente
multiprogrammato
.
EVOLUZIONE SISTEMI OPERATIVI
In questa slide sono riportati i più importanti
sistemi operativi prodotti negli anni tra il 1963 e
il 1975. Il primo sistema operativo time sharing,
prodotto nel 1963 è stato il Compatible Time
Sharing System, esso conteneva ben 32.000
istruzioni. Già l’anno dopo, nel 1964, fu prodotto
il 360 dall’IBM e consisteva in oltre un milione
d’istruzioni. Dieci anni dopo il sistema operativo
Multix, progenitore di Unix, conteneva già 20
milioni d’istruzioni.
PROBLEMI
Prima di descrivere la struttura di un sistema
operativo è conveniente fare alcune valutazioni sui
problemi generali dei sistemi operativi. Innanzitutto
i sistemi operativi sono in genere in ritardo rispetto
alle esigenze che devono soddisfare, esigenze
espresse dagli utenti. Il secondo problema è che
nella progettazione di un sistema operativo e nella
verifica delle sue funzionalità l’esistenza dei bachi
latenti è rilevata soltanto dopo un tempo
consistente. Per dare la possibilità di avere sistemi
operativi all’altezza delle esigenze degli utenti è
necessario che gli stessi siano realizzati sulla base
della modularità e organizzati, e questo già nei primi
sistemi operativi avveniva, secondo una gerarchia di
livelli che passa dall’ utente all’hardware.
11
ARCHITETTURA DI UN SIST. OP. GERARCHICO
Architettura di un sistema operativo gerarchico.
Dalla figura si vede che esistono tre strati in un
sistema operativo gerarchico. Quello relativo
all’hardware, quello del low level del sistema
operativo e la parte high level del sistema
operativo. La parte hardware contiene tutti i
circuiti l’insieme delle istruzioni, le procedure e
le interruzioni. Gli oggetti dei circuiti sono
normalmente registri, porte, bus e così via e le
operazioni che i rispettivi circuiti fanno sono
operazioni del tipo clear, cioè azzeramento,
trasferimento, attivazione e complementazione.
Gli oggetti, invece, dell’insieme delle istruzioni
sono stack di valutazione, interpreti di
microprogrammi, dati scalari, array e così via, le
operazioni sono carica, memorizza, addiziona,
sottrai, salta. Gli oggetti delle procedure sono
procedure, stack di chiamate, di display, le
operazioni che consentono di fare le procedure
sono ad esempio il mark stack, call e return. Al
quarto livello, sempre nello strato dell’hardware
ci sono le interruzioni. I suoi oggetti sono i
programmi per la gestione delle interruzioni e
normalmente le operazioni del sistema operativo sono quelle di mascheramento, eliminazione del mascheramento, il
rientro, l’invocazione. Il low level di un sistema operativo contiene al quinto livello i processi primitivi, con oggetti come
i semafori e le liste dei processi pronti. Le operazioni che si eseguono con i processi primitivi sono la sospensione, il wait
signal e il resume. Al livello sei c’è la memoria secondaria locale. Gli oggetti sono blocchi di dati, canali di dispositivi e
le operazioni sono quelle di lettura e scrittura, di allocazione e di liberazione delle parti di memoria. Il settimo livello
nel low level di un sistema operativo è la memoria virtuale che consente l’utilizzazione di pagine e segmenti per leggere
e scrivere le varie parti di memoria. L’high level del sistema operativo contiene le comunicazioni, i cui oggetti sono i
pipe e le operazioni sono quelle di creazione, distruzione, apertura, chiusura, lettura e scrittura, invece, il file system gli
oggetti sono i file con operazioni relative al file system che consentono di creare, distruggere, aprire, chiudere, leggere
e scrivere i file. Poi c’è il livello dieci del sistema operativo che è quello dei dispositivi che sono dispositivi esterni come
stampanti, schermi, tastiera. Vengono visti dal sistema operativo per la creazione, la distruzione, l’apertura e la
chiusura, la lettura e la scrittura dei dispositivi. Al livello undici del sistema gerarchico ci sono le directory. Gli oggetti
sono le directory e le operazioni sulle directory sono create, destroy, attach, detach, search e list. Di seguito al livello
dodici ci sono i processi utente. Gli oggetti sono i processi utente e le operazioni su tali oggetti sono quit, kill, suspend
e resume. Da ultimo c’è la shell il cui oggetto è a livello di programmazione utente. Essa utilizza i comandi del linguaggio
di shell e rappresenta l’interfaccia più prossima all’utente mettendolo in condizione di utilizzare tutto il sistema.
12