Il sistema operativo (abbreviato in SO, in inglese OS, Operating System) è il software di base che gestisce l’hardware di un computer (in particolare la memoria primaria e secondaria, le periferiche, e la stessa CPU) e fornisce i servizi fondamentali per l’esecuzione di tutti gli altri software applicativi. È l’intermediario tra l’hardware e l’utente, permettendo l’interazione tra l’utente e il dispositivo e rendendo il sistema semplice da usare.

1 - Funzioni principali di un sistema operativo

Le funzioni principali di un sistema operativo sono:

  • Gestione della CPU e del multitasking: assegna la CPU ai vari processi in esecuzione, permettendo il multitasking, cioè l’esecuzione (apparentemente) simultanea di più attività, e garantendo che ogni processo abbia il giusto tempo di elaborazione.
  • Gestione della memoria: tiene traccia dell’uso della memoria principale (RAM) e assegna spazio ai vari processi, ottimizzando l’uso delle risorse e prevenendo conflitti di accesso alla memoria.
  • Gestione delle risorse hardware: controlla e coordina l’uso delle risorse hardware, come dischi, stampanti e schede di rete, assicurando che i vari programmi possano accedere alle risorse necessarie senza interferenze.
  • Gestione dei file: fornisce un sistema di gestione dei file che organizza i dati su supporti di memoria (dischi rigidi, SSD) e facilita operazioni come creare, leggere, scrivere, e cancellare file e directory.
  • Interfaccia utente: può offrire un’interfaccia grafica (GUI, Graphical User Interface) o a riga di comando (CLI, Command Line Interface), che consente agli utenti di interagire facilmente con il sistema.
  • Gestione della sicurezza e dei permessi: protegge i dati e le risorse del sistema tramite meccanismi di sicurezza, come autorizzazioni e autenticazione, e limita l’accesso ai file e alle risorse sensibili.
  • Gestione della rete: permette la comunicazione tra computer attraverso reti, gestendo protocolli di rete e assicurando la condivisione delle risorse tra i dispositivi collegati.

2 - Tipi di sistemi operativi

I principali tipi di sistemi operativi sono:

  • Sistemi operativi desktop: sono progettati per essere utilizzati su computer desktop e laptop. Esempi: Windows, macOS, Linux.
  • Sistemi operativi per dispositivi mobili: sono progettati per essere utilizzati su smartphone e tablet. Esempi: Android, iOS.
  • Sistemi operativi per server: sono ottimizzati per la gestione di reti, servizi web e database. Esempi: Linux, Windows Server.
  • Sistemi operativi embedded: sono progettati per dispositivi specifici come router, elettrodomestici e dispositivi IoT (acronimo di Internet of Things), con funzionalità limitate e adattate all’hardware specifico.

3 - Struttura di un sistema operativo

Un sistema operativo è generalmente organizzato in livelli o moduli, ciascuno con funzioni specifiche, che lavorano insieme per gestire l’hardware e fornire servizi agli utenti e alle applicazioni. Generalmente, le componenti di un sistema operativo sono le seguenti:

  • Kernel: è il cuore del sistema operativo, gestisce le risorse hardware e fornisce un’interfaccia tra l’hardware e gli altri livelli del sistema.
  • Shell: è la componente del sistema operativo visibile all’utente, quella con cui si possono impartire comandi e richiedere l’avvio di altri programmi.
  • File system: si occupa di organizzare i dati sui dispositivi di archiviazione e fornisce una struttura per la gestione dei file e delle directory. Gestisce anche i permessi per la sicurezza e la condivisione dei dati.
  • Gestore dei processi: si occupa della creazione, gestione (monitora gli stati) e terminazione dei processi. È responsabile del multitasking, ovvero della possibilità di eseguire più processi o thread contemporaneamente, e dell’allocazione dei tempi di CPU ai processi.
  • Gestore della memoria: oltre alla gestione della memoria a livello del kernel, il sistema operativo può implementare funzioni aggiuntive per ottimizzare l’uso della RAM e gestire la memoria virtuale (spazio su disco che funge da memoria aggiuntiva). Le strategie includono la segmentazione e la paginazione.
  • Gestore dei dispositivi I/O: si occupa di controllare, monitorare e coordinare tutte le comunicazioni tra il sistema e le periferiche di input e output, come tastiere, mouse, stampanti, dischi rigidi, monitor, schede di rete, ecc.
  • Gestore della rete: gestisce le connessioni di rete, permettendo al computer di connettersi a reti locali o a Internet. Comprende protocolli di rete, sicurezza, e gestione degli indirizzi IP.
  • Gestore della sicurezza: il sistema operativo fornisce meccanismi di sicurezza per proteggere i dati e le risorse da accessi non autorizzati, tramite un meccanismo di controllo e di autenticazione.

In molti sistemi operativi, questi moduli sono organizzati in una struttura a livelli, dal kernel (livello più basso) all’interfaccia utente (livello più alto), semplificando la gestione del sistema operativo e aumentando la sicurezza e l’affidabilità.

3.1 - Kernel

Il kernel è il nucleo fondamentale di un sistema operativo ed è il software che funge da intermediario tra l’hardware del computer (come CPU, memoria, dispositivi di I/O) e le applicazioni. Il kernel gestisce le risorse del sistema e ne controlla l’accesso, garantendo che i processi possano operare in modo sicuro ed efficiente.

Il kernel è progettato per funzionare con uno specifico tipo di hardware. Ciò significa che, per esempio, un kernel creato per un processore Sun SPARC non funzionerà su una macchina con un processore Intel senza essere adattato o modificato. Questo accade perché ogni tipo di hardware ha specifiche caratteristiche e istruzioni che il kernel deve conoscere per gestirlo correttamente. Le architetture di processori diverse hanno insiemi di istruzioni unici, e il kernel deve essere “costruito” in modo specifico per quell’architettura affinché possa comunicare efficacemente con l’hardware.

Inoltre, il kernel si occupa di operazioni molto tecniche e a basso livello, come l’accesso diretto ai componenti hardware (ad esempio, l’hard disk, la memoria e i processori) e, di conseguenza, non è un componente “user-friendly” del sistema operativo: generalmente l’utente non interagisce mai direttamente con esso. Anziché interagire con il kernel, gli utenti utilizzano il sistema operativo e le applicazioni, che a loro volta comunicano con il kernel per svolgere le operazioni richieste.

Classificazione dei kernel

L’accesso diretto all’hardware può essere anche molto complesso, quindi i kernel usualmente implementano uno o più tipi di astrazione dall’hardware detti livelli di astrazione dell’hardware (HAL, Hardware Abstraction Layer). Queste astrazioni servono a “nascondere” la complessità e a fornire un’interfaccia pulita e uniforme all’hardware sottostante, in modo da semplificare il lavoro degli sviluppatori.

I kernel si possono classificare in quattro categorie, in base al grado di astrazione dell’hardware:

  • Kernel monolitici: implementano direttamente una completa astrazione dell’hardware sottostante. È più veloce ma più complesso da gestire e ne è un esempio Linux.
  • Microkernel: forniscono un insieme ristretto e semplice di astrazione dell’hardware e usano software “esterni” al kernel per fornire maggiori funzionalità. Ne sono un esempio MINIX e HURD.
  • Kernel ibridi (o microkernel modificati): si differenziano dai microkernel puri per l’implementazione di alcune funzioni aggiuntive al fine di incrementare le prestazioni. È utilizzato in sistemi come Windows e macOS.
  • Esokernel: rimuovono tutte le limitazioni legate all’astrazione dell’hardware e permettono ai programmi di comunicare quasi direttamente con le risorse fisiche, come la CPU, la memoria e i dispositivi di I/O. Lasciano la maggior parte della gestione del sistema a delle librerie di livello superiore (dette libOS), cioè collezioni di codice che forniscono alle applicazioni le funzioni di base tipiche di un sistema operativo, ma senza essere integrate direttamente nel kernel.

In base al tipo, quindi, altri componenti del sistema operativo come il gestore dei processi, il gestore dei dispositivi o il file system possono o meno fare parte del kernel.

3.2 - Shell

3.3 - File system

3.4 - Gestore dei processi

3.4.1 - Scheduler

3.5 - Gestore della memoria

3.6 - Gestore dei dispositivi I/O

3.7 - Gestore della rete

3.8 - Gestore della sicurezza

4 - Definizione universale di “sistema operativo”

Non esiste una definizione universalmente accettata di che cosa faccia parte o meno di un sistema operativo: il confine tra il SO e le altre componenti software non è sempre ben definibile.

Per esempio, l’interfaccia grafica non fa sempre parte del SO: nel passaggio da MS-DOS a Windows, l’interfaccia grafica si è integrata nel SO, ma inizialmente non ne faceva parte, mentre in UNIX i comandi a disposizione dell’utente non sono parte del SO, come pure le varie interfacce grafiche a disposizione.

Il problema di definire esattamente quali siano i componenti di un sistema operativo sembra avere poca importanza, ma da un punto di vista commerciale/economico può avere una rilevanza fondamentale.

Fonti

  • Abraham Silberschatz, Peter Baer Galvin, Greg Gagne - Sistemi Operativi (10ᵃ Edizione) - Pearson, 2019 - ISBN: 9788891904560.
  • 🏫 Lezioni e slide del Prof. Aldinucci Marco del corso di Sistemi Operativi (canale B), Corso di Laurea in Informatica presso l’Università di Torino, A.A. 2024-25:
  • 🏫 Lezioni e slide del Prof. Schifanella Claudio del corso di Laboratorio di Sistemi Operativi (canale B, turno T4), Corso di Laurea in Informatica presso l’Università di Torino, A.A. 2024-25: