Il sistema operativo è un software di sistema che agisce da intermediario tra l’utente e l’hardware del computer. È costituito da un insieme di programmi essenziali per il corretto funzionamento di un computer e delle sue periferiche.
Facciamo l’esempio di alcuni tipi di sistemi operativi
Sistemi Batch
Sono i primi sistemi operativi comparsi sul mercato. Gli elaboratori del periodo erano capaci di eseguire e portare a termine un solo compito alla volta. Questo compito, chiamato job, veniva eseguito con una serie di processi automatici che non richiedevano l’intervento dell’utente. Tutti gli altri job venivano messi in attesa, la loro elaborazione iniziava solo quando il processo precedente terminava.
Tra un lavoro e un altro poteva trascorrere molto tempo, per questo si lasciava che l’elaboratore svolgesse tutto in automatico.
Gli elaboratori del periodo avevano un costo molto alto, impossibile per un singolo utente. Solo grandi società o istituzioni potevano permettersene l’acquisto. Esistevano pochi sistemi, ma utilizzati da più persone. Ancora oggi con il termine batch ci riferiamo ai processi svolti automaticamente dal pc.
Sistemi monoutente
I sistemi monoutente nascono insieme al pc. Ora il computer non ha più un prezzo proibitivo, di conseguenza l’uso non è più condiviso, ma personale. I sistemi monoutente permettevano il lancio di un solo programma alla volta. Questo programma veniva definito programma principale, perché a volte poteva essere accompagnato da una serie di utility.
Queste utility venivano lanciate periodicamente attraverso un timer hardware che interrompeva il processo principale per gestire operazioni in background. Il più conosciuto tra i sistemi operativi di questo tipo fu sicuramente l’Ms-Dos della Microsoft.
Sistemi multiprogrammati
Sono i sistemi operativi di tipo moderno. Rispetto ai precedenti vi sono due importanti differenze: 1) il sistema operativo riesce a gestire due o più programmi in esecuzione su uno stesso processore; 2) interazione diretta tra utente e programma.
Questa gestione multi programmata è in realtà un’illusione, perché il processore continua a lavorare su un solo programma per volta.
La CPU si dedica ad un programma per una certo intervallo di tempo, detto time slot, poi passa al programma successivo. Il passaggio si chiama context switch.
Questo passaggio è invisibile all’occhio umano perché avviene in una frazione di secondo. Il sistema operativo sfrutta le pause, che per il pc sono lunghissime, tra un comando e l’altro dell’utente.
Il context switch è regolato da un timer hardware che manda il segnale elettrico di interruzione alla CPU. In questo modo comanda alla CPU di passare la programma successivo. Il sistema operativo gestisce l’invio del segnale di interruzione alla CPU in base alle applicazioni in esecuzione.
Questo meccanismo viene chiamato time sharing. La durata del context switch non dipende da quali e quanti processi siano in esecuzione, ma ha un valore fisso. Maggiore è il numero di processi attivi e maggiore è il tempo che il processore impiega a completarli tutti. Questo oggi non è più un problema, perché la nuova generazione di pc è dotata di più processori.
Avere più programmi in esecuzione può creare problemi di conflittualità, dato che tutti i programmi usano le medesime risorse. Il sistema operativo dovrà quindi evitare questi conflitti, stabilendo la priorità con cui i programmi in esecuzione possono accedere alle risorse. Di conseguenza non possiamo avere una stima esatta del tempo necessario per completare un processo.
Sistemi realtime
Un sistema operativo realtime è un sistema specializzato per il supporto di applicazioni software realtime. Questi sistemi vengono utilizzati prevalentemente in ambito industriale e comunque dove sia necessario che il sistema risponda entro tempi prestabiliti (ad esempio una catena di montaggio).
Un sistema operativo realtime non deve essere necessariamente veloce, l’importante è che sia prevedibile.
Sistemi distribuiti
Un sistema distribuito si differenzia da un sistema comune perché ha la capacità di lavorare con risorse presenti su altre macchine, connesse tramite bus o reti. Alla base di questi sistemi vi sono delle macchine definite server. I server hanno il compito di mettere a disposizione delle altre macchine hardware e software. Gli elementi da condividere sono installati o collegati direttamente al server. Le altre macchine vi accedono attraverso il server stesso.
Possiamo quindi condividere tra una rete di pc varie periferiche o applicazioni software.
In alcuni casi è il sistema operativo stesso ad essere condiviso. Questi vengono chiamati clustering.
La gestione dei processi e della memoria
Abbiamo già visto come un sistema operativo multi programmato permetta l’esecuzione, apparentemente simultanea, di più programmi tramite il meccanismo di time sharing. Questo meccanismo, però, nel caso in cui i programmi in esecuzione dipendano da un input utente, potrebbe portare a un forte rallentamento del sistema. Per evitare un rallentamento si sospende il time sharing per i processi in questione.
Questi programmi, insieme a tutti i processi in attesa, vengono messi in coda ed esclusi dal lavoro della CPU, congelati fino a quando non ricevono i dati in input o siano pronti.
Di conseguenza possiamo dire che ogni processo attraversa tre stati distinti:
1) STATO ATTIVO: si trova in questo stato il processo in elaborazione del processore.
2) STATO PRONTO: si trova in questo stato il processo che può essere eseguito ma che non è al momento in esecuzione.
3) STATO DI ATTESA: si trova in questo stato il processo che attende un dato dall’esterno ed è escluso dal time sharing. Avremo quindi in ogni istante un solo processo attivo per ogni processore, vari processi pronti a diventare attivi e uno o più processi in attesa di dati. Naturalmente il processo ha anche uno stato iniziale e uno conclusivo:
- STATO INIZIALE o disponibile. Il programma viene richiamato dall’hard disk e posto nella RAM, vengono anche assegnate le risorse necessarie all’esecuzione.
- STATO FINALE o terminato. Il programma viene chiuso e vengono liberate tutte le risorse ad esso assegnate.
Quando un processo è in attesa, rimane congelato aspettando i dati dall’esterno. Se l’attesa si prolunga, il programma viene tolto dalla RAM e messo nel disco rigido in “memoria virtuale”. Verrà riportato nella RAM nel momento in cui l’utente inserisce i dati.
Questo processo prende il nome di swap in è swap out e serve ad evitare di occupare tutto lo spazio della RAM con programmi in attesa.
Il passaggio di un processo da uno stato ad un altro può essere automatico oppure conseguente a dei precisi fattori.
Vi è un apposito processo detto scheduler che si occupa di questi passaggi di stato. In base al passaggio di stato, interviene uno scheduler preciso.
- Scheduler a lungo termine: disponibile e pronto
- Scheduler a medio termine: swap in e swap out
- Scheduler a breve termine: attivo – pronto
La gestione della memoria
Uno dei compiti principali di un sistema operativo è quello della gestione della memoria RAM.
Il sistema operativo si occupa di suddividere la memoria fisica esistente sul sistema in sezioni, anche dette partizioni, e di assegnare le partizioni stesse ai processi in esecuzione, in base alla necessità e alle richieste di ognuno.
Il sistema operativo si comporta come un allocatore di memoria. I processi non interagiscono direttamente con la memoria fisica.
I compiti di un gestore di memoria sono:
Protezione: le partizioni non possono essere assegnate a più processi contemporaneamente. Per evitare la sovrascrittura.
Rilocabilità e trasparenza: i processi devono funzionare indipendentemente dalla partizione a loro assegnata e non devono risentirne se questa viene cambiata durante l’esecuzione.
Frammentabilità: un’area di memoria assegnata ad un processo deve poter essere costituita da più partizioni anche non consecutive, ma viste sempre come tali da processo.
Condivisione: devono esistere aree di memoria condivise da più programmi accessibili in sola lettura. Questo serve per condividere porzioni di codice utilizzate da più applicazioni.
IL CICLO DI ALLOCAZIONE
Il ciclo di allocazione si svolge in due fasi:
1) Fase di allocazione: un processo richiede memoria. Il sistema operativo verifica se c’è un’area abbastanza grande disponibile e le eventuali priorità.
2) Fase di recupero e deallocazione: il sistema si riprende aree di memoria ora libere e le rimette a disposizione.
Questo sistema di allocazione e recupero funziona grazie ad una mappa delle allocazioni e una lista di blocchi liberi.
Esistono diversi tipi di modelli di allocazione che variano sia per il modo in cui è suddivisa la memoria fisica e sia per il modo di assegnazione. Indipendentemente dai modelli vi sono delle porzioni di memoria che non vengono assegnate ai processi utente:
- Area riservata dal sistema operativo per le proprie operazioni
- Area occupata dal sistema operativo stesso
- Allocazione statica
Prevede la divisione della memoria in partizioni di uguale dimensione. È un metodo veloce e semplice. Il sistema operativo non deve scegliere la porzione di memoria più adatta che comporta uno spreco di risorse.
- Allocazione dinamica
Vi sono partizioni di dimensioni diverse, scelte sulla base delle richieste dei processi in corso. È un metodo che comporta un rallentamento. Il sistema operativo deve scegliere la partizione più adatta alle richieste del processo dell’allocazione, ma permette di ridurre lo spreco di risorse.