Operating system
Operating system (OS), programma che gestisce le risorse di un computer, specialmente l’assegnazione di queste risorse tra altri programmi. Le risorse tipiche includono l’unità centrale di elaborazione (CPU), la memoria del computer, l’archiviazione dei file, i dispositivi di input/output (I/O) e le connessioni di rete. I compiti di gestione includono la programmazione dell’uso delle risorse per evitare conflitti e interferenze tra i programmi. A differenza della maggior parte dei programmi, che completano un compito e terminano, un sistema operativo funziona indefinitamente e termina solo quando il computer viene spento.
I moderni sistemi operativi multiprocesso permettono a molti processi di essere attivi, dove ogni processo è un “thread” di calcolo utilizzato per eseguire un programma. Una forma di multiprocesso è chiamata time-sharing, che permette a molti utenti di condividere l’accesso al computer passando rapidamente da uno all’altro. Il time-sharing deve proteggersi dalle interferenze tra i programmi degli utenti, e la maggior parte dei sistemi usa la memoria virtuale, in cui la memoria, o “spazio di indirizzo”, usata da un programma può risiedere nella memoria secondaria (come su un disco rigido magnetico) quando non è utilizzata immediatamente, per essere scambiata di nuovo per occupare la più veloce memoria principale del computer su richiesta. Questa memoria virtuale aumenta lo spazio di indirizzamento disponibile per un programma e aiuta ad evitare che i programmi interferiscano tra loro, ma richiede un attento controllo da parte del sistema operativo e una serie di tabelle di allocazione per tenere traccia dell’uso della memoria. Forse il compito più delicato e critico per un sistema operativo moderno è l’allocazione della CPU; ogni processo è autorizzato a usare la CPU per un tempo limitato, che può essere una frazione di secondo, e poi deve cedere il controllo e rimanere sospeso fino al suo prossimo turno. Il passaggio da un processo all’altro deve a sua volta utilizzare la CPU proteggendo tutti i dati dei processi.
I primi computer digitali non avevano sistemi operativi. Eseguivano un programma alla volta, che aveva il comando di tutte le risorse del sistema, e un operatore umano forniva qualsiasi risorsa speciale necessaria. I primi sistemi operativi furono sviluppati a metà degli anni ’50. Questi erano piccoli “programmi supervisori” che fornivano operazioni I/O di base (come il controllo di lettori di schede perforate e stampanti) e tenevano i conti dell’uso della CPU per la fatturazione. I programmi supervisori fornivano anche capacità di multiprogrammazione per permettere l’esecuzione di diversi programmi contemporaneamente. Questo era particolarmente importante in modo che queste prime macchine multimilionarie non rimanessero inattive durante le lente operazioni di I/O.
I computer acquisirono sistemi operativi più potenti negli anni ’60 con l’emergere del time-sharing, che richiedeva un sistema per gestire più utenti che condividessero il tempo della CPU e i terminali. Due dei primi sistemi di condivisione del tempo furono il CTSS (Compatible Time Sharing System), sviluppato al Massachusetts Institute of Technology, e il Dartmouth College Basic System, sviluppato al Dartmouth College. Altri sistemi multiprogrammati includevano Atlas, all’Università di Manchester, in Inghilterra, e OS/360 di IBM, probabilmente il pacchetto software più complesso degli anni ’60. Dopo il 1972 il sistema Multics per il computer GE 645 della General Electric Co. (e più tardi per i computer della Honeywell Inc.) divenne il sistema più sofisticato, con la maggior parte delle capacità di multiprogrammazione e di condivisione del tempo che in seguito divennero standard.
I minicomputer degli anni Settanta avevano una memoria limitata e richiedevano sistemi operativi più piccoli. Il sistema operativo più importante di quel periodo fu UNIX, sviluppato da AT&T per i grandi minicomputer come alternativa più semplice a Multics. Divenne ampiamente utilizzato negli anni ’80, in parte perché era gratuito per le università e in parte perché è stato progettato con un set di strumenti che erano potenti nelle mani di programmatori esperti. Più recentemente, Linux, una versione open-source di UNIX sviluppata in parte da un gruppo guidato dallo studente finlandese di informatica Linus Torvalds e in parte da un gruppo guidato dal programmatore americano Richard Stallman, è diventato popolare sui personal computer così come sui computer più grandi.
In aggiunta a questi sistemi general-purpose, sistemi operativi special-purpose girano su piccoli computer che controllano linee di montaggio, aerei e persino elettrodomestici. Sono sistemi in tempo reale, progettati per fornire una risposta rapida ai sensori e per usare i loro input per controllare i macchinari. Sistemi operativi sono stati sviluppati anche per dispositivi mobili come smartphone e tablet. iOS di Apple Inc., che gira su iPhone e iPad, e Android di Google Inc. sono due importanti sistemi operativi mobili.
Dal punto di vista di un utente o di un programma applicativo, un sistema operativo fornisce servizi. Alcuni di questi sono semplici comandi utente come “dir” – mostra i file su un disco – mentre altri sono “chiamate di sistema” di basso livello che un programma di grafica potrebbe usare per visualizzare un’immagine. In entrambi i casi il sistema operativo fornisce l’accesso appropriato ai suoi oggetti, le tabelle delle posizioni sul disco in un caso e le routine per trasferire dati allo schermo nell’altro. Alcune delle sue routine, quelle che gestiscono la CPU e la memoria, sono generalmente accessibili solo ad altre parti del sistema operativo.
I sistemi operativi contemporanei per personal computer forniscono comunemente un’interfaccia grafica utente (GUI). La GUI può essere una parte intrinseca del sistema, come nelle vecchie versioni del Mac OS della Apple e del Windows OS della Microsoft Corporation; in altri è un insieme di programmi che dipendono da un sistema sottostante, come nel sistema X Window per UNIX e nel Mac OS X della Apple.