04. Sistema Operativo

Il Sistema Operativo (comunemente abbreviato in S.O.) svolge due compiti fondamentali:

    • gestisce le risorse hardware (CPU, memorie, periferiche) e software (programmi e dati);

    • offre agli utenti (utilizzatori finali, sistemisti, programmatori) il supporto per interagire con il computer senza avere una conoscenza approfondita dell'hardware utilizzato.

Il S.O. è formato da un insieme di programmi organizzati tra loro in modo tale che ciascuno di essi si occupi di un compito specifico, secondo uno schema detto a buccia di cipolla (onion skin in inglese) cioè a strati.

I programmi che occupano una posizione più interna interagiscono maggiormente con l'hardware, mentre i programmi collocati più all'esterno interagiscono maggiormente con l'utente.

In generale gli strati più esterni si servono degli strati sottostanti ma non capita mai il contrario.

Nucleo (o kernel)

Gestisce la CPU ed organizza l'esecuzione dei programmi. Mentre sono in esecuzione nel computer i programmi sono detti processi. E' anche possibile che quello che per l'utente è un unico programma (visto unitariamente) sia in realtà costituito da più processi.

E' normale nei moderni computer (che sono sistemi multiprogrammati) che siano in esecuzione contemporaneamente più programmi e quindi numerosi processi concorrano per avere accesso alle risorse disponibili, primariamente alla CPU.

E' compito del kernel assegnare ciclicamente e per un tempo molto limitato tali risorse ai processi che le richiedono.

Azzardando una metafora, possiamo dire che il nucleo si comporta come un semaforo che regola il traffico ad un incrocio dando il verde un po' a tutti ma per un tempo limitato.

Gestore della memoria centrale

Per poter essere eseguiti i programmi devono essere caricati nella RAM, ma poiché essa possiede una dimensione limitata normalmente non è in grado di contenere tutti i programmi contemporaneamente in esecuzione.

Il S.O. si preoccupa di frazionare la memoria e i processi in sezioni chiamate pagine e segmenti, effettuando periodicamente il caricamento e lo scaricamento dei processi o di parte di essi in base all'occorrenza.

Inoltre il S.O. implementa un meccanismo detto di virtualizzazione della memoria (memoria virtuale) in base al quale si ha l'impressione di disporre di una memoria centrale molto più grande di quella fisicamente presente nel computer. Questo meccanismo sfrutta parte della memoria secondaria (ad esempio di un hard disk) per creare dei file di paging sui quali spostare le pagine che dovrebbero risiedere in RAM ma che non trovano spazio in quel momento. Questa operazione di spostamento dalla RAM al file di paging e viceversa si chiama swapping. Se lo swapping è molto frequente le prestazioni del computer si riducono.

Gestione delle periferiche

Le periferiche che un S.O. deve gestire sono costituite da tutti i componenti hardware del computer, sia interni ad esso sia connessi tramite porte (USB, seriali ecc.) quali il mouse, la tastiera, il monitor, la webcam ecc..

Il S.O. ha il compito di regolare l'accesso a tali risorse da parte dei processi che ne fanno richiesta. In alcuni casi è implementato un meccanismo di virtualizzazione della risorsa stessa per dare l'impressione al processo di avere accesso ad una risorsa che in realtà è già assegnata e impegnata da un altro processo. E' questo il caso della stampante, sulla quale è implementata la coda di stampa, che consente ad un processo di mandare in stampa un documento anche se in quel momento la stampante è già occupata in un altro lavoro.

File system

Questo modulo del S.O. gestisce le memorie di massa connesse al computer, consentendo la registrazione su di esse di dati strutturati in file.

Esempi di file sono: un documento Word, una fotografia digitale, un brano musicale mp3, un programma ecc..

Più in generale, un file è una successione ordinata di dati (byte), connessi logicamente tra di loro, cui ci si può riferire tramite un nome simbolico. Un file può essere immaginato, quindi, come un contenitore di dati al quale è assegnato un nome.

Il file system consente di organizzare i file in modo gerarchico tramite cartelle (directory) e di associare ad essi una serie di attribuiti quali la data di creazione, la data di modifica, il proprietario ecc..

Più in generale il file system deve:

    • gestire in modo ottimale lo spazio disponibile della memoria di massa;

    • garantire agli utenti l'accesso ai dati contenuti nei file in modo molto veloce, anche in presenza di richieste di accesso contemporaneo allo stesso file da parte di più processi;

    • fornire agli utenti meccanismi di protezione dei file (controllo degli accessi);

    • rendere disponibile in modo semplice operazioni di uso comune come copia, cancellazione, cambio di nome, elencazione, organizzazione gerarchica tramite la creazione di cartelle.

Esistono implementazioni diverse per i file system e di conseguenza l'organizzazione dei dati sulle memorie di massa cambia di conseguenza. E' usuale riferirsi ad una memoria di massa indicando quale file system la gestisce.

Per i sistemi Windows sono disponibili i seguenti file system:

    • FAT: ormai obsoleto, usato inizialmente su sistemi DOS.

    • FAT32: è un'evoluzione del file system FAT ed è stato progettato per gestire al meglio le memorie rimovibili come le PenDrive, tuttavia ha il limite di non poter gestire file di dimensione superiore a 4GB.

    • exFAT: è il file system consigliato per la gestione delle memorie rimovibili come le PenDrive, anche di grandi dimensioni.

    • NTFS: è un file system più sofisticato dei precedenti ed è la scelta consigliata per gli hard disk.

Il S.O. macOS utilizza preferenzialmente il file system denominato APFS mentre Linux il file system ext4. Entrambi possono utilizzare supporti rimovibili di tipo FAT32 o exFAT.

Interprete di comandi

Questo strato del sistema operativo si preoccupa dell'interazione uomo macchina e quindi di rendere disponibile un'interfaccia in grado di interpretare i comandi sottomessi dagli utenti.

L'espressione interfaccia utente indica appunto l'insieme dei meccanismi che consente ad un utente di interagire con la macchina in generale o con uno specifico programma.

L'interfaccia utente può essere di tipo

    • CUI (Command User Interface), priva di grafica e basata su un'interazione a linea di comando.

    • GUI (Graphical User Interface), basata su un'ambiente grafico con finestre e punti sensibili selezionabili con un sistema di puntamento (ad esempio il mouse o il touch).

Dove si trova il sistema operativo?

Quando si acquista un computer, specialmente un portatile o un desktop di marca, il sistema operativo solitamente è già installato. Se invece si acquista un computer assemblato, cioè si acquistano separatamente i singoli pezzi e si assemblano in proprio (o con l'aiuto di un tecnico), è necessario acquistare separatamente il Sistema Operativo e installarlo successivamente nel computer.

Quando il computer è spento il S.O. è presente su una memoria di massa, solitamente un hard disk.

All'accensione ha luogo una fase detta di boot o bootstrap.

In inglese il termine boot significa stivale e bootstrap è la linguetta per calzare gli stivali. Queste espressioni sembrano, in questo contesto, proprio fuori luogo. In effetti questi termini sembra siano entrati nel gergo informatico per richiamare la leggenda del Barone di Münchhausen, in grado di sollevarsi in aria "tirandosi per gli stivali".

Durante il boot viene eseguito un programma presente in ROM detto BIOS il quale, sostanzialmente, esegue le seguenti operazioni:

    • Inizializza le periferiche ed esegue la diagnostica del sistema detta POST (Power-On Self-Test).

    • Richiama un programma presente in posizione fissa dell'hard disk, il boot loader.

Il boot loader è responsabile del caricamento del S.O. (o parte di esso) in RAM.

Esiste la possibilità di installare sullo stesso computer più sistemi operativi in modo che essi convivano. In questo caso il boot loader all'avvio darà la possibilità di selezionare quale sistema operativo avviare e caricare in RAM (sistema Multi Boot).