I SISTEMI MULTIPROGRAMMATI E MONOPROGRAMMATI

 
  I sistemi operativi gestiscono le risorse della macchina in modo diverso a seconda delle esigenze dell’utente: lo stesso processore può infatti essere usato in modo che un solo utente ne sfrutti le capacità oppure in modo che diversi utenti possano a turno accedere alle stesse.
 
  La scelta di un sistema operativo piuttosto che un altro è dettata dall’analisi dei problemi che si vogliono trattare e dall’ambiente il cui calcolatore dovrà operare.
Una scelta importante che si dovrà affrontare consiste nel decidere se il calcolatore dovrà essere o no in grado di eseguire diversi programmi contemporaneamente.
 
  Nel primo livello di dettaglio i sistemi operativi possono essere valutati seguendo le due modalità di funzionamento delle macchine: monoprogrammazione e multiprogrammazione.  
     
  Un sistema viene detto MONOPROGRAMMATO (o uniprogrammato) quando la sua memoria centrale contiene, in quel momento, il codice proveniente da un unico programma dell'utente.
Il codice in oggetto viene eseguito dalla CPU, la quale toglie le istruzioni dalla memoria nella sequenza corretta e le esegue una per volta. Il registro contatore di programma provvede a segnalare quale istruzione deve essere eseguita, mentre gli altri eventuali registri della CPU contengono le informazioni che consentono al processore di eseguire i suoi compiti relativi all'attività in corso.
 
  A volte l'esecuzione di un programma utente comporta la chiamata di qualche routine di sistema, come ad esempio quando viene richiesto l'accesso a qualche periferica o a dispositivi di memoria di massa.
 
  Si può dividere il tempo che va dall'inizio alla fine del programma in intervalli caratterizzati dalle diverse attività della CPU:

1) esecuzione di istruzioni del programma utente (tempo utente)
2) esecuzione di istruzioni del sistema operativo (tempo sistema)
3) inattività, ad esempio quando attende un input da tastiera (tempo inattivo)

     
 
Il TEMPO INATTIVO può essere grande rispetto gli altri perché la CPU è molto veloce e in questo tipo di tempo la CPU può eseguire istruzioni di altri programmi visto che di fatto non fa nulla se noon aspettare che succede qualcosa.
Nel TEMPO TOTALE invece, la macchina non è disponibile per altri utenti perché è impegnata dal programma in esecuzione, anche se in attesa.
Il TEMPO UTENTE è un programma equivalente ad una routine di sistema per il fatto che entrambi sono costituiti da istruzioni in codice macchina da eseguire in un certo ordine.
 
Diversi sono invece i sistemi MULTIPROGRAMMATI che sono un sistema operativo che ottiene la realizzazione pratica di queste idee progettuali.
Per raggiungere questo obiettivo occorre complicare il sistema operativo che deve disporre di nuove capacità, non richieste nel caso della monoprogrammazione.
 
In particolare occorre che vengano sviluppate le routine di sistema che permettono di:
1) decidere quale istruzione far eseguire dopo quella attuale
2) realizzare meccanismi di produzione tra i diversi programmi, per evitare che i dati vengano inquinati dalle istruzioni dell'altro
3) risolvere conflitti che potrebbero sorgere per l'assegnazione di una determinata risorsa
 
Il system overhead è il carico di lavoro in più imposto dal sistema operativo.
Si dice che una risorsa viene gestita in modo time sharing quando il suo uso viene concesso per un tempo che non può superare un massimo: questo intervello viene chiamato time slice.
Il time sharing è un concetto che viene applicato ai singoli dispositivi, più che alla macchina nel suo insieme.
se la CPU viene gestita in time sharing, essa rimane assegnata ad un programma utente finchè si verifica una delle seguenti eventualità:
1)il programma utente termina
2)un programma utente richiede che vengano effettuate operazioni che coinvolgono altri dispositivi
3) scade il time slice
Appena scade uno di questi eventi, il controllo dell'unità centrale passa al sistema operativo che decide e quale tra gli altri programmi in memoria centrale spetta il prossimo time slice.
Il tempo necessario a prendere tale decisione si chiama tempo di riassegnamento


Le modalità con le quali il sistema operativo prende queste decisioni costituiscono un esempio di POLITICA DI GESTIONE. La realizzazione più semplice consiste nell'assegnamento ROUND ROBIN (a rotazione).
Il programma a cui è stata tolta la risorsa viene messo in fondo ad una coda di programmi in attesa. Quando tutti gli altri avranno eseguito tutte le operazioni nei time slice di competenza esso ripartirà da dove è arrivato.
Se uno o più programmi risulta essere in attesa di altri eventi, il time slice verrà immediatamente riassegnato al programma successivo.


 
E' possibile che un sistema operativo usi meccanismi di PRIORITA' che consentono ad alcuni programmi di essere eseguiti più rapidamente, un modo per visualizzarli è immaginare ciascun programma in una coda specifica per la priorità che possiede.Il sistema può eseguire a turno i programmi che stanno al primo posto in ciascuna coda e usare un criterio per concedere più tempo macchina che stanno nelle code a priorità più alta. Al termine del time slice ogni programma finisce in fondo alla coda che gli compete.