Il sistema operativo definisce la nostra esperienza informatica. È il primo software che vediamo quando accendiamo il computer, e l’ultimo software che vediamo quando il computer viene spento. È il software che abilita tutti i programmi che usiamo. Il sistema operativo organizza e controlla l’hardware sulle nostre scrivanie e nelle nostre mani, ma la maggior parte degli utenti non può dire con certezza cosa fa esattamente il sistema operativo.

In questa edizione di HowStuffWorks, vi diremo cosa deve fare un pezzo di software per essere chiamato sistema operativo, e vi mostreremo come funziona il sistema operativo per trasformare un insieme di hardware in un potente strumento informatico!

Le ossa nude
È importante capire che non tutti i computer hanno un sistema operativo. Il computer che controlla il forno a microonde nella vostra cucina, per esempio, non ha bisogno di un sistema operativo. Ha una serie di compiti relativamente semplici da eseguire, metodi di input e output molto semplici (una tastiera e uno schermo LCD), e un hardware semplice e immutabile da controllare. Per un computer come questo, un sistema operativo sarebbe un bagaglio inutile, che aggiunge complessità dove non ce n’è bisogno. Invece, il computer in un forno a microonde esegue semplicemente un singolo programma per tutto il tempo.

Per i sistemi informatici che vanno oltre la complessità del microonde, tuttavia, un sistema operativo può essere la chiave per una maggiore efficienza operativa e un più facile sviluppo di applicazioni. Tutti i computer desktop hanno sistemi operativi. I più comuni sono la famiglia di sistemi operativi Windows, la famiglia di sistemi operativi UNIX e i sistemi operativi Macintosh. Ci sono centinaia di altri sistemi operativi disponibili per applicazioni speciali, incluse specializzazioni per mainframe, robotica, produzione, sistemi di controllo in tempo reale e così via.

Al livello più semplice, un sistema operativo fa due cose:

  • Gestisce le risorse hardware e software del sistema informatico. Queste risorse includono cose come il processore, la memoria, lo spazio su disco, ecc.
  • Fornisce un modo stabile e coerente per le applicazioni di trattare con l’hardware senza dover conoscere tutti i dettagli dell’hardware.

Il primo compito, gestire le risorse hardware e software, è molto importante, poiché vari programmi e metodi di input competono per l’attenzione dell’unità di elaborazione centrale (CPU) e richiedono memoria, immagazzinamento e larghezza di banda di input/output (I/O) per i propri scopi. In questa veste, il sistema operativo gioca il ruolo del buon genitore, assicurandosi che ogni applicazione ottenga le risorse necessarie mentre gioca bene con tutte le altre applicazioni, così come gestisce la capacità limitata del sistema per il massimo bene di tutti gli utenti e le applicazioni.

Il secondo compito, fornire un’interfaccia coerente per le applicazioni, è particolarmente importante se ci deve essere più di un tipo particolare di computer che usa il sistema operativo, o se l’hardware che compone il computer è aperto a cambiamenti. Un’interfaccia per programmi applicativi (API) coerente permette a uno sviluppatore di software di scrivere un’applicazione su un computer e avere un alto livello di fiducia che verrà eseguita su un altro computer dello stesso tipo, anche se la quantità di memoria o la quantità di memoria è diversa sulle due macchine. Anche se un particolare computer è unico, un sistema operativo può assicurare che le applicazioni continuino a funzionare quando si verificano aggiornamenti e upgrade dell’hardware, perché il sistema operativo e non l’applicazione è incaricato di gestire l’hardware e la distribuzione delle sue risorse. Windows 98 è un grande esempio della flessibilità fornita da un sistema operativo. Windows 98 funziona su hardware di migliaia di fornitori. Può ospitare migliaia di diverse stampanti, unità disco e periferiche speciali in qualsiasi combinazione possibile.

Nell’ampia famiglia dei sistemi operativi, ci sono generalmente quattro tipi, classificati in base ai tipi di computer che controllano e al tipo di applicazioni che supportano. Le grandi categorie sono:

  • Sistema operativo in tempo reale (RTOS) – I sistemi operativi in tempo reale sono usati per controllare macchinari, strumenti scientifici e sistemi industriali. Un RTOS ha tipicamente poca capacità di interfaccia utente, e nessuna utilità per l’utente finale, poiché il sistema sarà una “scatola sigillata” quando verrà consegnato per l’uso. Una parte molto importante di un RTOS è la gestione delle risorse del computer in modo che una particolare operazione venga eseguita esattamente nello stesso tempo ogni volta che si verifica. In una macchina complessa, far muovere una parte più velocemente solo perché le risorse del sistema sono disponibili può essere altrettanto catastrofico che non farla muovere affatto perché il sistema è occupato.
  • Singolo utente, singolo compito – Come il nome implica, questo sistema operativo è progettato per gestire il computer in modo che un utente possa effettivamente fare una cosa alla volta. Il Palm OS per i computer palmari Palm è un buon esempio di un moderno sistema operativo a singolo utente e singolo compito.
  • Single-user, multi-tasking – Questo è il tipo di sistema operativo che la maggior parte delle persone usa oggi sui propri computer desktop e portatili. Windows 98 e il MacOS sono entrambi esempi di un sistema operativo che permette a un singolo utente di avere diversi programmi in funzione allo stesso tempo. Per esempio, è del tutto possibile per un utente Windows scrivere una nota in un elaboratore di testi mentre scarica un file da Internet, mentre stampa il testo di un messaggio e-mail.
  • Multiutente – Un sistema operativo multiutente permette a molti utenti diversi di sfruttare le risorse del computer contemporaneamente. Il sistema operativo deve assicurarsi che le esigenze dei vari utenti siano bilanciate, e che ognuno dei programmi che stanno usando abbia risorse sufficienti e separate in modo che un problema con un utente non colpisca l’intera comunità di utenti. Unix, VMS e i sistemi operativi per mainframe, come MVS, sono esempi di sistemi operativi multiutente.

E’ importante distinguere qui tra sistemi operativi multi-utente e sistemi operativi a singolo utente che supportano il networking. Windows 2000 e Novell Netware possono supportare centinaia o migliaia di utenti in rete, ma i sistemi operativi stessi non sono veri sistemi operativi multi-utente. L’amministratore di sistema è l’unico “utente” per Windows 2000 o Netware. Il supporto di rete e tutti i login di utenti remoti che la rete permette sono, nel piano generale del sistema operativo, un programma eseguito dall’utente amministrativo.

Con i diversi tipi di sistemi operativi in mente, è il momento di guardare le funzioni di base fornite da un sistema operativo.

Chiamata di risveglio
Quando si accende un computer, il primo programma che viene eseguito è di solito un insieme di istruzioni conservate nella memoria di sola lettura (ROM) del computer che esamina l’hardware del sistema per assicurarsi che tutto funzioni correttamente. Questo autotest di accensione (POST) controlla la CPU, la memoria e i sistemi di input-output di base (BIOS) per gli errori e memorizza il risultato in una posizione di memoria speciale. Una volta che il POST è completato con successo, il software caricato in ROM (a volte chiamato firmware) inizierà ad attivare le unità disco del computer. Nella maggior parte dei computer moderni, quando il computer attiva il disco rigido, trova il primo pezzo del sistema operativo: il bootstrap loader.

Il bootstrap loader è un piccolo programma che ha una sola funzione: Carica il sistema operativo in memoria e gli permette di iniziare a funzionare. Nella forma più elementare, il bootstrap loader imposta i piccoli programmi driver che si interfacciano e controllano i vari sottosistemi hardware del computer. Imposta le divisioni di memoria che contengono il sistema operativo, le informazioni dell’utente e le applicazioni. Stabilisce le strutture di dati che conterranno la miriade di segnali, bandiere e semafori che sono usati per comunicare all’interno e tra i sottosistemi e le applicazioni del computer. Poi gira il controllo del computer al sistema operativo.

I compiti del sistema operativo, nel senso più generale, rientrano in sei categorie:

  • Gestione del processore
  • Gestione della memoria
  • Gestione dei dispositivi
  • Gestione dello storage
  • Interfaccia delle applicazioni
  • Interfaccia utente

Mentre alcuni sostengono che un sistema operativo dovrebbe fare più di questi sei compiti, e alcuni fornitori di sistemi operativi costruiscono molti più programmi di utilità e funzioni ausiliarie nei loro sistemi operativi, questi sei compiti definiscono il nucleo di quasi tutti i sistemi operativi. Diamo un’occhiata agli strumenti che il sistema operativo usa per eseguire ciascuna di queste funzioni.

Gestione del processore
Il cuore della gestione del processore si riduce a due questioni correlate:

  • Assicurarsi che ogni processo e applicazione riceva abbastanza tempo del processore per funzionare correttamente
  • Utilizzare il maggior numero possibile di cicli del processore per il lavoro reale

L’unità di base del software con cui il sistema operativo ha a che fare nella programmazione del lavoro svolto dal processore è un processo o un thread, a seconda del sistema operativo.

Si è tentati di pensare a un processo come a un’applicazione, ma questo dà un quadro incompleto di come i processi si relazionano al sistema operativo e all’hardware. L’applicazione che vedete (elaboratore di testi o foglio di calcolo o gioco) è, infatti, un processo, ma quell’applicazione può causare l’avvio di molti altri processi, per compiti come la comunicazione con altri dispositivi o altri computer. Ci sono anche numerosi processi che funzionano senza dare prova diretta della loro esistenza. Un processo, quindi, è un software che esegue qualche azione e può essere controllato — da un utente, da altre applicazioni o dal sistema operativo.

Sono i processi, piuttosto che le applicazioni, che il sistema operativo controlla e programma l’esecuzione da parte della CPU. In un sistema single-tasking, la programmazione è semplice. Il sistema operativo permette all’applicazione di iniziare l’esecuzione, sospendendo l’esecuzione solo per il tempo necessario a gestire gli interrupt e l’input dell’utente. Gli interrupt sono segnali speciali inviati dall’hardware o dal software alla CPU. È come se qualche parte del computer alzasse improvvisamente la mano per chiedere l’attenzione della CPU in una riunione vivace. A volte il sistema operativo programma la priorità dei processi in modo che gli interrupt siano mascherati — cioè, il sistema operativo ignorerà gli interrupt da alcune fonti in modo che un particolare lavoro possa essere finito il più velocemente possibile. Ci sono alcuni interrupt (come quelli da condizioni di errore o problemi con la memoria) che sono così importanti che non possono essere ignorati. Questi interrupt non mascherabili (NMI) devono essere gestiti immediatamente, indipendentemente dagli altri compiti da svolgere.

Mentre gli interrupts aggiungono qualche complicazione all’esecuzione dei processi in un sistema a compito singolo, il lavoro del sistema operativo diventa molto più complicato in un sistema multitasking. Ora, il sistema operativo deve organizzare l’esecuzione delle applicazioni in modo che si creda che ci siano diverse cose che accadono contemporaneamente. Questo è complicato perché la CPU può fare solo una cosa alla volta. Per dare l’impressione che molte cose accadano allo stesso tempo, il sistema operativo deve passare tra diversi processi migliaia di volte al secondo. Ecco come succede.

  • Un processo occupa una certa quantità di RAM. Fa anche uso di registri, stack e code all’interno della CPU e dello spazio di memoria del sistema operativo.
  • Quando due processi sono multitasking, il sistema operativo assegna un certo numero di cicli di esecuzione della CPU a un programma.
  • Dopo quel numero di cicli, il sistema operativo fa copie di tutti i registri, stack e code usati dai processi, e annota il punto in cui il processo si è fermato nella sua esecuzione.
  • Allora carica tutti i registri, gli stack e le code usati dal secondo processo e gli concede un certo numero di cicli di CPU.
  • Quando questi sono completi, fa delle copie di tutti i registri, stack e code usati dal secondo programma, e carica il primo programma.

Tutte le informazioni necessarie per tenere traccia di un processo durante la commutazione sono tenute in un pacchetto di dati chiamato blocco di controllo del processo. Il blocco di controllo del processo contiene tipicamente:

  • Un numero ID che identifica il processo
  • Puntatori alle posizioni nel programma e ai suoi dati dove è avvenuta l’ultima elaborazione
  • Contenuti dei registri
  • Stati di vari flag e interruttori
  • Puntatori ai limiti superiore e inferiore della memoria richiesta. e inferiore della memoria richiesta dal processo
  • Un elenco di file aperti dal processo
  • La priorità del processo
  • Lo stato di tutti i dispositivi I/O necessari al processo

Quando lo stato del processo cambia, da pendente ad attivo, per esempio, o da sospeso a in esecuzione, le informazioni nel blocco di controllo del processo devono essere utilizzate come i dati in qualsiasi altro programma per dirigere l’esecuzione della porzione di task-switching del sistema operativo.

Questo scambio di processi avviene senza interferenze dirette dell’utente, e ogni processo ottiene abbastanza cicli di CPU per compiere il suo compito in un tempo ragionevole. I problemi possono arrivare, però, se l’utente cerca di far funzionare troppi processi allo stesso tempo. Il sistema operativo stesso richiede alcuni cicli di CPU per eseguire il salvataggio e lo swapping di tutti i registri, code e stack dei processi applicativi. Se vengono avviati abbastanza processi, e se il sistema operativo non è stato progettato con cura, il sistema può iniziare a utilizzare la maggior parte dei suoi cicli di CPU disponibili per scambiare tra i processi piuttosto che eseguirli. Quando questo accade, si chiama thrashing, e di solito richiede una sorta di intervento diretto dell’utente per fermare i processi e riportare l’ordine nel sistema.

Un modo in cui i progettisti di sistemi operativi riducono la possibilità di thrashing è ridurre la necessità di nuovi processi per eseguire vari compiti. Alcuni sistemi operativi permettono un “processo-lite”, chiamato thread, che può occuparsi di tutto il lavoro ad alta intensità di CPU di un processo normale, ma generalmente non si occupa dei vari tipi di I/O e non stabilisce strutture che richiedono l’esteso blocco di controllo del processo di un processo regolare. Un processo può avviare molti thread o altri processi, ma un thread non può avviare un processo.

Finora, tutta la programmazione che abbiamo discusso ha riguardato una singola CPU. In un sistema con due o più CPU, il sistema operativo deve dividere il carico di lavoro tra le CPU, cercando di bilanciare le richieste dei processi richiesti con i cicli disponibili sulle diverse CPU. I sistemi operativi asimmetrici usano una CPU per le proprie esigenze e dividono i processi applicativi tra le rimanenti CPU. I sistemi operativi simmetrici si dividono tra le varie CPU, bilanciando la domanda rispetto alla disponibilità della CPU anche quando il sistema operativo stesso è tutto ciò che è in esecuzione.

Anche se il sistema operativo è l’unico software con esigenze di esecuzione, la CPU non è l’unica risorsa da programmare. La gestione della memoria è il prossimo passo cruciale per assicurarsi che tutti i processi funzionino senza problemi.

Gestione della memoria e dello storage
Quando un sistema operativo gestisce la memoria del computer, ci sono due compiti principali da svolgere:

  • Ogni processo deve avere abbastanza memoria in cui eseguire, e non può né correre nello spazio di memoria di un altro processo né essere corso da un altro processo.
  • I diversi tipi di memoria nel sistema devono essere usati correttamente in modo che ogni processo possa funzionare nel modo più efficace.

Il primo compito richiede che il sistema operativo stabilisca dei limiti di memoria per i tipi di software e per le singole applicazioni.

Come esempio, guardiamo un sistema immaginario con 1 megabyte (1.000 kilobyte) di RAM. Durante il processo di avvio, il sistema operativo del nostro computer immaginario è progettato per andare in cima alla memoria disponibile e poi “tornare indietro” abbastanza per soddisfare le esigenze del sistema operativo stesso. Diciamo che il sistema operativo ha bisogno di 300 kilobyte per funzionare. Ora, il sistema operativo va sul fondo del pool di RAM e inizia a costruire con i vari software driver necessari per controllare i sottosistemi hardware del computer. Nel nostro computer immaginario, i driver occupano 200 kilobyte. Così, dopo aver caricato completamente il sistema operativo, rimangono 500 kilobyte per i processi applicativi.

Quando le applicazioni iniziano ad essere caricate in memoria, vengono caricate in blocchi di dimensioni determinate dal sistema operativo. Se la dimensione del blocco è di 2 kilobyte, allora ogni processo che viene caricato riceverà un pezzo di memoria che è un multiplo di 2 kilobyte di dimensione. Le applicazioni saranno caricate in queste dimensioni fisse di blocco, con i blocchi che iniziano e finiscono su confini stabiliti da parole di 4 o 8 byte. Questi blocchi e confini aiutano ad assicurare che le applicazioni non vengano caricate sopra lo spazio di un’altra per un bit o due mal calcolati. Con questo assicurato, la questione più grande è cosa fare quando lo spazio di 500 kilobyte dell’applicazione è riempito.

Nella maggior parte dei computer, è possibile aggiungere memoria oltre la capacità originale. Per esempio, si potrebbe espandere la RAM da 1 a 2 megabyte. Questo funziona bene, ma tende ad essere relativamente costoso. Ignora anche un fatto fondamentale dell’informatica – la maggior parte delle informazioni che un’applicazione memorizza nella memoria non viene utilizzata in un dato momento. Un processore può accedere alla memoria solo una posizione alla volta, quindi la maggior parte della RAM è inutilizzata in qualsiasi momento. Dato che lo spazio su disco è economico rispetto alla RAM, spostare le informazioni nella RAM sul disco rigido può espandere notevolmente lo spazio della RAM a costo zero. Questa tecnica è chiamata gestione della memoria virtuale.

Lo spazio su disco è solo uno dei tipi di memoria che deve essere gestito dal sistema operativo, ed è il più lento. In ordine di velocità, i tipi di memoria in un sistema informatico sono:

  • Cache ad alta velocità – Si tratta di quantità di memoria veloci e relativamente piccole che sono disponibili alla CPU attraverso le connessioni più veloci. I controller della cache prevedono quali dati la CPU avrà bisogno dopo e li tirano dalla memoria principale nella cache ad alta velocità per accelerare le prestazioni del sistema.
  • Memoria principale – Questa è la RAM che vedi misurata in megabyte quando compri un computer.
  • Memoria secondaria – Questa è più spesso una sorta di memoria magnetica rotante che mantiene le applicazioni e i dati disponibili per essere utilizzati, e serve come RAM virtuale sotto il controllo del sistema operativo.

Il sistema operativo deve bilanciare le esigenze dei vari processi con la disponibilità dei diversi tipi di memoria, spostando i dati in blocchi (chiamati pagine) tra la memoria disponibile come impone il programma dei processi.

Gestione dei dispositivi
Il percorso tra il sistema operativo e praticamente tutto l’hardware non presente sulla scheda madre del computer passa attraverso un programma speciale chiamato driver. Gran parte della funzione di un driver è quella di essere il traduttore tra i segnali elettrici dei sottosistemi hardware e i linguaggi di programmazione di alto livello del sistema operativo e dei programmi applicativi. I driver prendono i dati che il sistema operativo ha definito come un file e li traducono in flussi di bit collocati in posizioni specifiche sui dispositivi di memorizzazione, o in una serie di impulsi laser in una stampante.

Perché ci sono differenze così ampie nell’hardware controllato attraverso i driver, ci sono differenze nel modo in cui i programmi del driver funzionano, ma la maggior parte viene eseguita quando il dispositivo è richiesto, e funziona più o meno come qualsiasi altro processo. Il sistema operativo spesso assegna blocchi ad alta priorità ai driver in modo che la risorsa hardware possa essere rilasciata e preparata per un ulteriore uso il più rapidamente possibile.

Una ragione per cui i driver sono separati dal sistema operativo è che nuove funzioni possono essere aggiunte al driver — e quindi ai sottosistemi hardware — senza richiedere che il sistema operativo stesso venga modificato, ricompilato e ridistribuito. Attraverso lo sviluppo di nuovi driver di dispositivi hardware, sviluppo spesso eseguito o pagato dal produttore dei sottosistemi piuttosto che dall’editore del sistema operativo, le capacità di input/output del sistema complessivo possono essere notevolmente migliorate.

Gestire l’input e l’output è in gran parte una questione di gestione delle code e dei buffer, speciali strutture di immagazzinamento che prendono un flusso di bit da un dispositivo, forse una tastiera o una porta seriale, trattengono quei bit e li rilasciano alla CPU a una velocità abbastanza lenta da essere gestita dalla CPU. Questa funzione è particolarmente importante quando un certo numero di processi sono in esecuzione e occupano il tempo del processore. Il sistema operativo istruirà un buffer a continuare a prendere input dal dispositivo, ma a smettere di inviare dati alla CPU mentre il processo che utilizza l’input è sospeso. Poi, quando il processo che ha bisogno di input è reso nuovamente attivo, il sistema operativo ordinerà al buffer di inviare dati. Questo processo permette a una tastiera o a un modem di trattare con utenti esterni o computer ad alta velocità anche se ci sono momenti in cui la CPU non può utilizzare l’input da quelle fonti.

Gestire tutte le risorse del sistema informatico è una grande parte della funzione del sistema operativo e, nel caso dei sistemi operativi in tempo reale, può essere praticamente tutta la funzionalità richiesta. Per altri sistemi operativi, tuttavia, fornire un modo relativamente semplice e coerente alle applicazioni e agli esseri umani di usare la potenza dell’hardware è una parte cruciale della loro ragione di esistere.

Interfaccia con il mondo

Interfaccia dell’applicazione
Proprio come i driver forniscono un modo per le applicazioni di fare uso dei sottosistemi hardware senza dover conoscere ogni dettaglio del funzionamento dell’hardware, le interfacce per programmi applicativi (API) permettono ai programmatori di applicazioni di usare funzioni del computer e del sistema operativo senza dover tenere direttamente traccia di tutti i dettagli del funzionamento della CPU. Guardiamo l’esempio della creazione di un file su disco rigido per contenere dati per vedere perché questo può essere importante.

Un programmatore che scrive un’applicazione per registrare dati da uno strumento scientifico potrebbe voler permettere allo scienziato di specificare il nome del file creato. Il sistema operativo potrebbe fornire una funzione API chiamata MakeFile per creare file. Quando scrive il programma, il programmatore inserirebbe una linea che assomiglia a questa:

    MakeFile

In questo esempio, l’istruzione dice al sistema operativo di creare un file che permetterà un accesso casuale ai suoi dati (1), avrà un nome digitato dall’utente (%Name), e sarà di una dimensione che varia a seconda di quanti dati sono memorizzati nel file (2). Ora, vediamo cosa fa il sistema operativo per trasformare l’istruzione in azione.

  1. Il sistema operativo invia una richiesta all’unità disco per ottenere la posizione della prima posizione di memoria libera disponibile.
  2. Con questa informazione, il sistema operativo crea una voce nel file system che mostra la posizione iniziale e finale del file, il nome del file, il tipo di file, se il file è stato archiviato, quali utenti hanno il permesso di guardare o modificare il file, e la data e l’ora della creazione del file.
  3. Il sistema operativo scrive informazioni all’inizio del file che identificano il file, impostano il tipo di accesso possibile e includono altre informazioni che legano il file all’applicazione.

    In tutte queste informazioni, le richieste all’unità disco e gli indirizzi del punto iniziale e finale del file sono in formati fortemente dipendenti dal produttore e dal modello dell’unità disco.

Perché il programmatore ha scritto il suo programma per usare l’API per l’archiviazione su disco, non deve stare al passo con i codici di istruzione, i tipi di dati e i codici di risposta per ogni possibile disco rigido e unità a nastro. Il sistema operativo, collegato ai driver per i vari sottosistemi hardware, si occupa dei dettagli mutevoli dell’hardware — il programmatore deve semplicemente scrivere il codice per l’API e confidare che il sistema operativo faccia il resto.

Le API sono diventate una delle aree più contestate dell’industria dei computer negli ultimi anni. Le aziende si rendono conto che i programmatori che usano le loro API si tradurranno alla fine nella capacità di controllare e trarre profitto da una particolare parte dell’industria. Questa è una delle ragioni per cui così tante aziende sono state disposte a fornire applicazioni come lettori o visualizzatori al pubblico senza alcun costo. Sanno che i consumatori chiederanno che i programmi approfittino dei lettori gratuiti, e le aziende di applicazioni saranno pronte a pagare le royalties per permettere al loro software di fornire le funzioni richieste dai consumatori.

Interfaccia utente
Proprio come l’API fornisce un modo coerente per le applicazioni di usare le risorse del sistema informatico, un’interfaccia utente (UI) porta struttura all’interazione tra un utente e il computer. Nell’ultimo decennio, quasi tutto lo sviluppo delle interfacce utente è stato nell’area dell’interfaccia grafica (GUI), con due modelli, Macintosh di Apple e Windows di Microsoft, che hanno ricevuto la maggior parte dell’attenzione e guadagnato la maggior parte della quota di mercato. Ci sono altre interfacce utente, alcune grafiche e altre no, per altri sistemi operativi.

Unix, per esempio, ha interfacce utente chiamate shell che presentano un’interfaccia utente più flessibile e potente dell’interfaccia standard basata sul testo del sistema operativo. Programmi come la Korn Shell e la C Shell sono interfacce basate sul testo che aggiungono importanti utilità, ma il loro scopo principale è quello di rendere più facile per l’utente manipolare le funzioni del sistema operativo. Ci sono anche interfacce grafiche, come X-Windows e Gnome, che rendono Unix e Linux più simili ai computer Windows e Macintosh dal punto di vista dell’utente.

È importante ricordare che in tutti questi esempi, l’interfaccia utente è un programma o un insieme di programmi che si trova come un livello sopra il sistema operativo stesso. La stessa cosa è vera, con meccanismi un po’ diversi, sia per i sistemi operativi Windows che Macintosh. Le funzioni principali del sistema operativo, la gestione del sistema informatico, si trovano nel kernel del sistema operativo. Il display manager è separato, anche se può essere strettamente legato al kernel sottostante. I legami tra il kernel del sistema operativo e l’interfaccia utente, le utilità e altri software definiscono molte delle differenze nei sistemi operativi oggi, e le definiranno ulteriormente in futuro.

Il futuro
Una questione riguardante il futuro dei sistemi operativi ruota intorno alla capacità di una particolare filosofia di distribuzione del software di creare un sistema operativo utilizzabile da aziende e consumatori insieme.

Linux, il sistema operativo creato e distribuito secondo i principi dell’open source, potrebbe avere un impatto significativo sul sistema operativo in generale. La maggior parte dei sistemi operativi, driver e programmi di utilità sono scritti da organizzazioni commerciali che distribuiscono versioni eseguibili del loro software — versioni che non possono essere studiate o alterate. L’open source richiede la distribuzione di materiale sorgente originale che può essere studiato, alterato e costruito, con i risultati ancora una volta liberamente distribuiti.

La continua crescita di Internet e la proliferazione di computer che non sono macchine standard da tavolo o portatili significa che i sistemi operativi cambieranno per stare al passo, ma le funzioni fondamentali di gestione e di interfaccia continueranno, anche se si evolvono.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.