Introduzione ai sistemi operativi con UNIX
Prec Succ

1. Breve introduzione e classificazione dei sistemi operativi

I sistemi operativi possono essere divisi in due categorie: sistemi monoprogrammati (ad es. il vecchio sistema DOS) e sistemi multiprogrammati (ad es. UNIX).

Nei sistemi monoprogrammati, che spesso sono anche monoutente, vi è una bassa utilizzazione delle risorse hardware del sistema, soprattutto della componente più veloce che è la CPU: la CPU non fa niente quando è in attesa che l'utente impartisca un comando o è costretta a cicli di attesa durante operazioni di I/O su dispositivi lenti (ad es. una stampante o anche un disco che è per costruzione un dispositivo sempre molto più lento rispetto alla CPU). In questi sistemi un solo processo per volta può essere eseguito e questo usufruisce di tutte le risorse del sistema. Quest'ultima cosa è il solo vantaggio di questi sistemi, oltre la semplicità, ma naturalmente si paga col fatto di non poter eseguire più elaborazioni contemporaneamente, quindi con una riduzione anche della produttività personale. Ad esempio l'utente non può avviare un lungo calcolo o una stampa o la riproduzione di un mp3 e nel contempo dedicarsi alla scrittura di un testo con un word processor. Deve aspettare la fine del calcolo prima di poter iniziare la scrittura del testo. Questa situazione è accettabile per semplici macchine personali, monoutente e poco costose. Non è ad esempio per niente accettabile per un calcolatore che opera come servente di molti utenti contemporaneamente sulla rete internet. Ad esempio un servente web di pagine HTML e contenuti multimediali collegati alle pagine web, servente che opera tramite il protocollo HTTP del web, non potrebbe garantire una pur minima efficienza nel soddisfare più utenti che vi si connettono se non fosse in grado di assolvere alle richieste in parallelo, onde evitare che un utente debba aspettare che un altro, ad es. con una connessione lenta, riceva la sua risposta prima che sia considerata la richiesta del primo utente.

Oggigiorno anche per i personal computer usati da un solo utente per volta vengono utilizzati sistemi multitasking, specialmente del tipo time-sharing (tra un pò vedremo cosa significa). Questo perchè l'utente ha necessità di avviare più applicazioni e passare facilmente e velocemente dall'una a l'altra. Anche se un unico utente è in grado di fornire l'input ad una sola applicazione per volta, potrebbe desiderare di avere nel contempo anche altre applicazioni che funzionino in background, cioè siano in grado di svolgere un lavoro utile senza richiedere l'input dell'utente, ad esempio fare un complicato calcolo matematico prestabilito dall'utente, gestire la connessione ad internet e scaricare un file da un sito FTP, convertire documenti per la stampa, riprodurre la musica memorizzata nei formati compressi e così via.

Nei sistemi multiprogrammati, che spesso sono anche multiutente, più processi sono presenti in memoria e il controllo viene trasferito da un processo in esecuzione ad un altro per evitare lunghe attese da parte della CPU ed aumentarne il fattore di utilizzazione. Nei sistemi multiutente a divisione di tempo (time-sharing) o interattivi, come ad es. UNIX, per dare l'impressione a ciascun utente di avere una propria macchina personale il trasferimento del controllo viene forzato periodicamente tramite il meccanismo delle interruzioni hardware.

Se un calcolatore è dotato di più unità di elaborazione (CPU) riesce a realizzare un vero e proprio parallelismo dei processi (overlapping), ossia i processi sono realmente eseguiti in parallelo, vale a dire tanti processi possono essere eseguiti contemporaneamente nel tempo quante sono le CPU disponibili.

Nel caso più comune (e più economico) esiste una sola CPU nel sistema di calcolo, perciò il parallelismo non è reale ma simulato. L'esecuzione di diversi processi viene alternata (tecnica di interleaving); in ogni momento solo un processo alla volta è in esecuzione, e potrebbe anche trattarsi di codice del sistema operativo, mentre l'esecuzione di tutti gli altri viene sospesa. In un sistema time-sharing l'interleaving è abbastanza frequente da dare l'impressione umana che i job vengano eseguiti contemporaneamente, proprio come se ciascuno avesse una sua CPU dedicata.

In molti casi il programmatore può astrarre dal fatto che la macchina sia mono o multiprocessore: è il sistema operativo si occupa di realizzare in modo trasparente l'overlapping o l'interleaving: in entrambi i casi si realizza la multiprogrammazione.

I sistemi multiutente, come le moderne versioni di UNIX, consentono spesso anche l'accesso remoto da parte degli utenti, utilizzando terminali più o meno intelligenti, oppure un altro elaboratore completo che può facilmente emulare un terminale e che disponga di una qualsiasi connessione alla rete internet.

Un sistema operativo multiprogrammato consente quindi una migliore utilizzazione delle risorse hardware, a fronte di una maggiore complessità del sistema operativo stesso. Infatti la multiprogrammazione presenta vari problemi, di protezione o interferenza nell'accesso a dati comuni, di interazione e comunicazione tra i processi che devono essere risolti dal sistema operativo tramite opportuni algoritmi e opportune procedure che il sistema operativo deve mettere a disposizione del programmatore di applicazioni. Il sistema operativo deve implementare un algoritmo di scheduling che opera le transizioni da un processo ad un altro, tenendo in conto anche fattori di priorità assegnati ai processi. Lo scheduler o gestore dei processi è una parte fondamentale del nucleo di un sistema operativo come UNIX.

La multiprogrammazione ha un costo computazionale che può essere spesso trascurabile, ma non è mai nullo, nonostante l'hardware possa offrire funzionalità che la facilitano: c'è sempre un overhead software non nullo, cioè del tempo impiegato dal sistema operativo per la schedulazione e altre attività connesse. Nei sistemi multiprogrammati più orientati alle elaborazioni non interattive, di tipo a lotti o batch come si dice in gergo, il trasferimento del controllo viene effettuato solo quando necessario per ridurre al minimo l'overhead dovuto alla multiprogrammazione e massimizzare l'utilizzo del sistema, e, al contrario dei sistemi time-sharing, non essendoci interazione con l'utente durante le elaborazioni, in quanto tutti i job e l'input è preparato prima, non si fa niente per rendere accettabili i tempi di risposta per l'utente. Quindi questi sistemi non sono molto adatti per l'uso interattivo.

Nei sistemi multiprogrammati realtime, usati ad esempio per il controllo dei processi industriali, esistono anche dei vincoli di temporizzazione entro cui devono avvenire le elaborazioni; se il sistema non rispondesse entro questo limiti di tempo potrebbero aversi errori di lavorazione e anche rilevanti danni economici.

UNIX è un sistema operativo multiprogrammato a divisione di tempo, multiutente, e in grado di operare sulle reti di calcolatori, adatto alle applicazioni più comuni.


Prec Indice Succ
Introduzione ai sistemi operativi con UNIX   FreeBSD