Definizione: sistema operativo

Il sistema operativo (abbreviato in SO, in inglese OS, Operating System) è il software di base che gestisce le risorse hardware (in particolare la memoria primaria e secondaria, le periferiche, e la stessa CPU) e software di un computer, permettendo e facilitando l’interazione tra l’utente e la macchina.

Un generico sistema operativo moderno si compone di alcune parti standard, più o meno ben definite: kernel,

In base al tipo di computer per cui viene progettato, i sistemi operativi si dividono in desktop, per dispositivi mobili, per server ed embedded.

Osservazione: cosa fa parte di un sistema operativo e cosa no?

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 (cioè quella parte del sistema operativo che gestisce la grafica che ci viene mostrata) non ne fa sempre parte: nel passaggio da MS-DOS a Windows, l’interfaccia grafica si è integrata nel SO, ma inizialmente non ne faceva parte, così come 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: basti pensare, per esempio, a un cliente che ha bisogno di acquistare la licenza di un sistema operativo completo, ma che poi scopre non essere fornito dell’interfaccia grafica (essenziale per coloro che non hanno molta domestichezza con l’informatica).

1 - 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à.

1.1 - Kernel

Definizione: 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 tutte le altre applicazioni. Il kernel gestisce le risorse del sistema e ne controlla l’accesso, garantendo che i processi possano operare in modo sicuro ed efficiente.

Osservazione: kernel apposito per ogni sistema operativo

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.

1.1.1 - 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.

1.2 - Shell

1.3 - File system

1.4 - Gestore dei processi

1.4.1 - Scheduler

1.5 - Gestore della memoria

1.6 - Gestore dei dispositivi I/O

1.7 - Gestore della rete

1.8 - Gestore della sicurezza

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 - Servizi del sistema operativo

L’SO mette a disposizione:

  • User interface: di tipo CLI (shell) o GUI
  • Program execution: gestisce le risorse per l’esecuzione dei programmi
  • I/O operations: gestisce gli I/O richiesti dall’utente/processo
  • Gestione della memoria e file system
  • Comunicazione con altri sistemi
  • Ricevimento degli errori: sia nel software che nella gestione dell’hardware
  • Allocazione delle risorse: per gestire più programmi
  • Accounting: monitoraggio delle risorse e degli usi degli utenti
  • Protection & security

I servizi sono divisi in:

  • Funzioni utili all’utente: process execution, comunicazione, file system, I/O, error handling, GUI
  • Funzioni di efficientamento dell’SO: Resource allocation, Accounting, Protection & security.

4 - Progettazione di un sistema operativo

L’SO si progetta seguendo obiettivi generici dell’utente e del sistema.

Separation of concerns: nella progettazione bisogna separare policy (che cosa fa) dal mechanism (come lo fa) per garantire maggiore flessibilità all’SO.

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:
  • 🏫 Appunti di Carlos Palomino del corso di Sistemi Operativi, Corso di Laurea in Informatica presso l’Università di Torino, A.A. 2024-25 (caricati sul repository GitHub del Team Studentesco Informatica):