Il sistema operativo
Il funzionamento dei computer moderni è regolato da un software principale, chiamato sistema operativo. Questo software svolge il compito di garantire il funzionamento di base del computer, l’uso delle applicazioni, e l’accesso a files e periferiche da parte dell’utente.
Il sistema operativo è il primo software che viene caricato nel computer, e svolge tre funzioni principali:
- Si interfaccia con l’hardware del computer, quindi CPU, Memoria e periferiche.
- Permette ai programmi di:
- utilizzare e condividere CPU e memoria, anche quando sono in esecuzione più programmi in contemporanea.
- Permette ai programmi di accedere a risorse come i files, la rete, e le periferiche (stampanti, chiavette USB, casse audio, ecc.).
- Permette ai programmi di utilizzare l’interfaccia con l’utente (schermo, tastiera, mouse, touch, telecamera, ecc.).
- Fornisce direttamente all’utente una interfaccia di utilizzo che gli consente di accedere alle risorse di sistema, configurarlo e fare manutenzione.
Un po’ di storia
I primi computer non avevano un sistema operativo. Fino agli anni 50 di norma i programmatori e gli utenti inserivano il programma direttamente nel computer e lo eseguivano, tramite diversi sistemi manuali (il più noto sono le schede perforate che davano direttamente il codice binario da eseguire). Gli utenti erano quindi molto esperti ed era molto facile fare errori. Non esistevano o erano limitate le interfacce utente, anche solo tastiera e monitor.
Negli anni 60 vengono introdotti i primi terminali (tastiera + monitor) e vengono introdotti i primi sistemi operativi, che consentivano di memorizzare diversi programmi e scegliere quali eseguire fino ad arrivare al primo sistema operativo multiutente, il Multics, che permettava ad un grande computer centrale di essere utilizzato con più programmi in contemporanea, gestiti da utenti con un terminale remoto, con un vero e proprio file system per condividere i documenti tra utenti e l’introduzione di linguaggi di programmazione che poi venivano tradotti in linguaggio binario. Multics è un po’ il “nonno” di tutti i sistemi operativi moderni, come ad esempio la shell a linea di comando (del tutto simile al terminale presente nei sistemi operativi odierni), il filesystem organizzato in cartelle e files, la condivisione della memoria e del processore “a turno” per i vari programmi con tecniche che sono in uso ancora oggi.

Il vero punto di svolta è stato però Unix, il primo vero sistema operativo moderno, che aggiornato è arrivato ai giorni nostri, realizzato nei laboratori Bell della AT&T (una grossa compagnia telefonica) da Ken Thompson e Dennis Ritchie, che a sua volta è il co-creatore del linguaggio C, che è alla base di tutti i linguaggi di programmazione moderni. Anzi il linguaggio C è stato creato apposta per realizzare programmi per Unix. Il binomio C-Unix è alla base di tutti i sistemi operativi moderni, infatti tutti i principali sistemi operativi moderni (eccetto Windows) sono varianti di Unix.

In realtà con lo sviluppo dei primi personal computers (anni 70 ed 80) vengono sviluppati diversi sistemi operativi alternativi ad Unix, come MS-DOS, Macintosh System, Amiga, OS/2, mentre Unix era il sistema operativo usando nei grandi computer, in particolare nella sua variante Berkeley (BSD). A partire dagli anni 90 tuttavia queste tecnologie vengono a poco a poco unificate, ed emergono i sistemi operativi attuali.
- Il più noto è Windows, evoluzione di MS-DOS con interfaccia grafica. E’ gestito da Microsoft. Oggi circa l’80% dei personal computer ha Windows.

- la principale alternativa nel mondo PC è il sistema operativo Linux, che si basa su Unix, e fonda la sua filosofia sull’essere libero e gratuito, non gestito cioè da una grande multinazionale, ma da una comunità internazionale. Inoltre il suo codice sorgente è liberamente disponibile per essere controllato e modificato. E’ utilizzato da circa il 5% degli utenti di pc.

- c’è poi MacOs, il sistema operativo dei Mac, basato anch’esso su Unix. E’ gestito da Apple. Circa il 15% degli utenti usa un Mac.

A partire dagli anni 2000 si sono diffusi i dispositivi mobili, principalmente smartphone e tablet, e si sono imposti due sistemi operativi:
- Android: basato su Linux. E’ stato creato da Google ed è montato su tutti gli smartphone non Apple. Copre globalmente circa il 70% dei dispositivi mobili esistenti. Ne esistono (in Cina) diverse varianti non Google, come HarmonyOs.

- iOs: basato su Unix, è la controparte mobile di MacOs. E’ stato creato da Apple, e copre globalmente circa il 30% dei dispositivi mobili esistenti.

I sistemi operativi mobili si differenziano dai pc perché di norma non hanno tastiera e mouse ma una interfaccia touch (alcuni anche con la penna), usano principalmente una sola applicazione alla volta, e sono progettati per il risparmio energetico, per ricevere notifiche e per connettersi alle reti cellulari, oltre che alle normali reti Wifi.
Non ci sono solo i pc. Sono presenti anche i computer server, computer che sulla rete Internet hanno il compito di ospitare i siti web, i servizi di informazione, i database, la gestione delle reti di comunicazione, ed in generale tutti i servizi digitali. Per questi il sistema operativo più diffuso è Unix ed in particolare Linux.
Vi sono poi molti dispositivi che apparentemente non sembrano computer ma lo sono. Parliamo di smartwatch, smartTV, assistenti vocali, dispositivi domotici, ecc. Su questi girano varianti di Android, di iOs e di Linux.
In conclusione, sono quattro le tipologie di sistema operativo:
- per pc: Windows, Linux, MacOs
- per mobile: Android, iOs (e varianti come iPadOs)
- per server: Unix/Linux, Windows server, MacOs server
- per sistemi smart/embedded: Android, Linux, tvOs
Cosa fa il sistema operativo
Il sistema operativo, qualunque sia la piattaforma.
- controlla e gestisce il funzionamento di CPU e memoria, da parte dei programmi. Normalmente divide lo spazio di memoria ed il tempo di CPU in parti e lo suddivide tra i programmi in esecuzione (chiamati “processi“), tramite speciali algoritmi, a cui sono assegnate queste risorse in base alla loro priorità.
- Fornisce ai programmi l’accesso alle risorse di sistema, tramite appositi software chiamati drivers. I programmi quindi non accedono direttamente all’hardware, ma ai drivers che a loro volta accedono all’hardware (schede video, rete, periferiche, ecc.). I drivers garantiscono che lo stesso sistema operativo possa funzionare su computer anche differenti tra loro, garantendo compatibilità.
- Gestisce la struttura e l’organizzazione della memoria di massa, cioè dischi e chiavette, tramite il concetto di filesystem.
- Fornisce programmi detti utilities, per accedere alle risorse del sistema, come il pannello di controllo, le preferenze, la gestione del disco, il gestore dei processi.
- Controlla la sicurezza del sistema, l’accesso con password, la presenza di virus e malware, gli accessi non autorizzati dall’esterno (firewall), le regole di accesso ai files di altri utenti.
- Nei computer con batteria, gestisce la ricarica ed il risparmio energetico, riducendo la velocità della cpu, attivando lo standby, controllando ventole, luminosità dello schermo, ecc.
- Esegue il monitoraggio delle risorse, consumo di rete, batteria, memoria, disco, ecc. e fornisce informazioni all’utente.
- Gestisce i propri aggiornamenti, scaricando ed installando modifiche (patch) di sicurezza o di sistema operativo.
- Ha di norma un “app store“, una applicazione che permette di installare applicazioni (e disinstallarle).
Il disco fisso
Nei moderni computer la memoria di massa è un SSD, o unità flash, che memorizza i dati anche senza elettricità. La velocità di lettura e scrittura massima è oggi di circa 7 GB/s (a memoria RAM invece necessita di corrente ma offre prestazioni circa 5 volte maggiori). Impropriamente nell’uso corrente viene chiamato “disco fisso” anche se in effetti non ci sono dischi: è un retaggio del passato in cui venivano usati (ed in parte lo sono ancora) veri e propri dischi magnetici in movimento. Lo continueremo a chiamare così anche in queste lezioni.

Il disco fisso è una unità di memoria che di norma su un computer moderno (pc o mobile) ha una dimensione da 256 GB a 2 TB. In questo vengono memorizzati i files di sistema operativo, i programmi del computer e i files dell’utente, documenti, database, audio/video ed immagini.
Il disco è organizzato in partizioni, porzioni indipendenti del disco stesso. Ogni partizione viene poi formattata, cioè inizializzata con un filesystem. Il filesystem è un database che organizza i dati della partizione secondo un certo schema e permette di avere al suo interno di norma una struttura ad albero, dove c’è un elemento o nodo radice, che a sua volta ha dei figli, che a loro volta possono avere figli. Ogununo di questi nodi viene chiamato “cartella” (folder in inglese). Ogni cartella oltre ad avere cartelle figlie, può contenere documenti (file in inglese). Le cartelle del filesystem sono organizzate con una struttura fissa definita dal sistema operativo.
Nei sistemi Windows ogni partizione è montata ed identificata da una lettera dell’alfabeto (per ragioni storiche si comincia da C1) e vi sono alcune cartelle predefinite per organizzare il sistema:
- C:\Windows -> sistema operativo (e dentro C:/Windows/System per le applicazioni di sistema)
- C:\Programmi -> programmi installati
- C:\Users\Mario -> cartella Home dell’utente “Mario”, che a sua volta contiene le cartelle Desktop, Download, Immagini, ecc.
Come si vede ogni cartella è identificata da una stringa che identifica univocamente la cartella ma anche il percorso dei nodi per arrivarci. Il separatore tra padre-figlio è il carattere \ (detto “backslash”).
Nei sistemi Unix (quindi Linux, MacOs, Android, iOs, ecc.) invece si usa una unica alberatura per tutte le unità, e quindi le partizioni possono essere montate creando dei folder “virtuali”. La tipica organizzazione Unix è la seguente:
- / –> root, radice di tutto il filesystem
- /bin e /sbin –> applicazioni di sistema
- /etc –> tutti i file di configurazione del sistema operativo
- /home/Mario –> cartella Home con le relative sotto cartelle come in Windows
- /usr –> cartella delle applicazioni
- /var –> cartella dei dati di sistema
- /mnt –> cartella dove sono montate unità secondarie (chiavette, dischi esterni, ecc.)
Da notare che il separatore di cartella in questo caso è / (“slash”) e come detto non vi sono nomi di unità.
L’avvio del sistema operativo
Il computer viene prodotto e venduto con un piccolo software di base, chiamato UEFI, che controlla l’integrità dell’hardware ad ogni avvio, può essere configurato per decidere da quale disco avviare il sistema operativo e consente alcune configurazioni di base.
Il disco fisso ha una piccola partizione nascosta, detta partizione di boot, che fornisce a UEFI il nome del primo programma da caricare, detto bootloader. Ogni sistema operativo ne ha uno, e UEFI può essere configurato per fare in modo che non si possa cambiare (per ragioni di sicurezza).
Quindi all’avvio, UEFI avvia il bootloader, che a sua volta carica il sistema operativo. Il sistema operativo all’avvio controlla l’hardware, esegue i driver specifici del computer su cui sta venendo eseguito, carica i programmi di base, le partizioni, la rete, eventuali periferiche ed infine l’interfaccia utente. Al termine di tutto questo presenta una schermata di login dove l’utente inserisce le proprie credenziali di accesso (nome e password oppure impronta oppure riconoscimento facciale). Può essere configurato per un avvio automatico con un determinato utente (Linux e dispositivi mobili).

Interfaccia grafica
A questo punto viene mostrata una interfaccia utente grafica, chiamata “desktop”, che vuole emulare una specie di “scrivania” virtuale, con una serie di elementi che vogliono ricordare questa analogia:
- le cartelle e i documenti
- il cestino, cartella speciale coi files eliminati
- le icone dei programmi
- una barra delle applicazioni (stile Windows ed alcune interfacce di Linux, come KDE) con un pulsante “start” che avvia un menu generale del sistema che permette di visualizzare elenchi di applicazioni, la ricerca, suggerimenti, news, ecc.
- una barra di stato in alto ed un dock di icone fisso che contiene le icone delle applicazioni più importanti (stile MacOs, poi ripreso su iOs, Android e Linux Gnome)
- un sistema a riquadri con una barra dei menu a sinistra (stile smartTV, come Android, Tizen, WebOs, ecc.)
- nei sistemi mobili sono poi presenti dei widget, piccole applicazioni sempre attive che mostrano informazioni già pronte (ora, meteo, note, promemoria, ecc.)
Se si clicca due volte (o si esegue tap) su una icona/riquadro, questa viene “aperta” e si apre il programma corrispondente, e si può cominciare ad utilizzarla.
Nel mondo PC le applicazioni sono organizzate in finestre, riquadri ridimensionabili, massimizzabili a schermo intero, o riducibili ad icona. E’ possibile avere più finestre di applicazioni diverse, allineate o sovrapposte. Molte applicazioni inoltre sono eseguite senza avere una interfaccia utente: si tratta di applicazioni “in background” che svolgono molte funzioni necessarie al sistema operativo.
Nel mondo smartphone/smartTV invece di norma le applicazioni si aprono a schermo intero.
L’utente interagisce col sistema con numerosi tipi di periferica:
- mouse/tastiera su pc
- touch su mobile (ed alcuni pc che hanno interfaccia touch)
- penna su tablet (ed alcuni pc che hanno interfaccia per penna, detta “digitalizzatore”)
- telecomando su smartTV
- comando vocale su quasi tutti i sistemi (si pronuncia una parola chiave e si da un comando)
- la fotocamera (soprattutto su mobile)
Il mouse ad esempio è utilizzato con un insieme di azioni standard:
- click: per selezionare
- doppio click: per avviare
- click tasto destro: per visualizzare un menu contestuale
- rotella: per effettuare scroll
- drag and drop: selezione di un oggetto, movimento e rilascio
Il dispositivo touch ha invece sue azioni specifiche:
- tap: selezione o avvio
- tap prolungato: menu contestuale
- doppio tap: selezione
- pinch to zoom: zoom
- swipe: scroll o cambio pagina
Nei sistemi mobili esiste poi il concetto di notifica. A dispositivo spento è possibile riceve brevi comunicazioni dall’esterno (messaggi, allarmi, conferme di pagamento, ecc.) che risvegliano lo schermo e inviano vibrazioni e suoni. L’utente che riceve la notifica può poi leggerla ed aprire la relativa applicazione.
E’ infine previsto un programma, per molti sistemi, che consente l’accesso alla memoria di massa, e quindi visualizzare, organizzare ed aprire i propri files. Su alcuni sistemi operativi questo accesso è limitato per evitare che l’utente per errore vada a modificare la struttura dei files o acceda a risorse che non dovrebbe toccare. I files hanno un nome che comprende il nome vero e proprio ed un suffisso detto estensione, che ne definisce il tipo di dato (ad esempio .doc indica un documento Word, un .jpeg una immagine, un .exe un eseguibile).
In tutti i sistemi nel corso degli anni c’è stata una forte evoluzione, e quindi le interfacce grafiche, pur mantenendo una propria identità, sono state uniformate, semplificate e rese familiari e gradevoli anche per utenti inesperti. Esiste una vera e propria disciplina di studio, l’usabilità, che studia e migliora l’esperienza utente, la facilità, l’efficacia, la comodità e la sicurezza delle interfacce visuali, e che abbraccia non solo i sistemi operativi, ma anche applicazioni, siti web e qualunque dispositivo con schermo.
I PC (e limitatamente alcuni tablet) hanno inoltre un accesso alla cosiddetta shell, una finestra detta terminale, che offre una interfaccia a caratteri e ricevere dei comandi da tastiera. E’ una applicazione avanzata, che consente di eseguire funzioni più avanzate e a basso livello sul sistema. In genere nei sistemi Unix (LInux-Max) è più completa ed offre funzioni impossibili da fare per via grafica.
I processi
Ad ogni applicazione in esecuzione è associato un processo. Mentre un programma è un insieme di istruzioni codificate che vengono salvate in un file speciale (detto eseguibile). Un processo rappresenta un programma che viene caricato in memoria e sta venendo eseguito, ed il sistema operativo tiene traccia di tutto ciò che serve a farlo funzionare: la memoria RAM che occupa, la sua priorità, la posizione della finestra, i file che ha aperto, le risorse di rete che usa, se ha il controllo della tastiera, ecc.).
Il sistema operativo è multitasking, cioè tiene attivi molti processi in contemporanea. Non solo ma ogni processo può avere più flussi di esecuzione in contemporanea, detti thread. Ogni thread nel singolo processo svolge un compito preciso, ad esempio scaricare un dato da Internet, eseguire un calcolo, fare una ricerca, aprire un file, ecc. ma tutti insieme collaborano tra loro per svolgere il compito del programma. Ad esempio un browser usa un thread differente per ogni scheda aperta, e per ogni download in contemporanea, un documento word ha un thread per gestire la digitazione, ed un altro che salva il file periodicamente, e così via.
Il sistema operativo tiene quindi non solo una lista di processi, ma anche una lista di thread in esecuzione di tutti i processi attivi.
I processori moderni sono progettati per eseguire più thread in contemporanea. Hanno infatti più nuclei di CPU indipendenti (ognuno coi suoi registri, ALU, CU, ecc.) e sono detti multicore. Ad esempio un moderno processore Intel i7 di ultima generazione ha di norma 8 core indipendenti. Un processore Apple M5 usa 10 core, alcuni addirittura ottimizzati per consumare poca energia. Inoltre sono presenti core secondari per gestire la grafica (le GPU) e le operazioni di intelligenza artificiale (NPU).
Il sistema operativo divide il tempo in piccole unità di pochi millisecondi, chiamati “quanti” ed assegna a ciascun core un thread in base a regole di priorità. Al termine del quanto sospende quel thread, ed assegna i core ad un altro gruppo di thread, e così indefinitivamente. In altre parole i thread, quindi i processi, fanno a turno per usare la cpu. Siccome la cpu esegue miliardi di operazioni al secondo (e quindi milioni di operazioni di un un quanto) il sistema appare all’utente sempre molto veloce.

O almeno è così finchè non si hanno molte applicazioni attive che portano a rallentamenti o piccole incertezze percepibili dall’utente (dette lag). Ma è una possibilità remota soprattutto nei computer degli ultimi 5 anni a meno di usare funzioni molto onerose (ad esempio un videogioco con molti fps, o un programma di rendering video).
La sicurezza
La sicurezza è un tema molto vasto ma possiamo riassumerlo in questi obiettivi fondamentali:
- evitare la visualizzazione di dati non autorizzata;
- evitare il furto di identità;
- impedire un accesso non autorizzato.
La sicurezza si occupa di garantire integrità di dati, identità e comunicazioni.
Le possibili minacce alla sicurezza sono costituite da azioni compiute da programmi dolosi come:
- virus: software che rovinano l’integrità di dati e programmi;
- worm: virus speciali che si autoreplicano;
- trojan: programmi che sembrano innocui ma che si comportano come virus;
- adware: mostrano pubblicità indesiderate;
- spyware e keylogger: controllano l’utente e le sue azioni;
- botnet: software che si replicano su singoli pc, e sono usati per attaccare un server;
- backdoor: software che consentono l’accesso non autorizzato al pc da remoto.
Tutti questi software sono chiamati malware. Di norma sfruttano errori utente (ad esempio aprire file non conosciuti) o debolezze del sistema (dovute ad errori di programmazione) che permettono un accesso non autorizzato.
Un ulteriore pericolo di sicurezza è costituito anche da applicazioni legittime, che però analizzano i comportamenti dell’utente, e i modo nascosto comunicano questi dati a servizi remoti, che permettono quindi di capire abitudini e preferenze dell’utente, cioè creare una profilazione. E’ un problema molto comune su Internet, ed ha lo scopo di fornire poi pubblicità mirata agli utenti, senza permesso.
Il sistema operativo quindi offre un insieme di software che cercano di limitare i danni:
- isolano ogni processo in modo che eviti di vedere i dati degli altri
- usano un firewall, un programma che controlla il traffico di rete e blocca comunicazioni sospette;
- usano un antivirus, che scansiona la memoria per trovare virus;
- bloccano l’avvio di applicazioni non firmate. La “firma digitale” è una specie di sigillo che fornisce un meccanismo per controllare se un determinato file sia originale.
- richiedono la password per accedere al sistema, e soprattutto per fare operazioni amministrative.
Il sistema operativo inoltre regola con dei permessi l’accesso a molte risorse, come la fotocamera, il gps, le periferiche e soprattutto i files, per impedire usi non autorizzati.

Cloud
Il cloud è parte integrante di tutti i sistemi operativi. Si tratta di un insieme di servizi che offrono la possibilità di salvare dati del computer, condividerli con altri utenti su Internet, e svolgere anche operazioni sui propri dati direttamente da remoto. Vengono chiamati “cloud” (nuvola) per indicare la mancanza di una specifica localizzazione fisica dei dati (nella realtà sono memorizzati nei server del gestore del servizio).
Il primo e più noto servizio è la sincronizzazione di files. Un programma specifico (ad esempio Dropbox o Google Drive, Onedrive ed altri) è sempre in esecuzione, e viene collegato ad una cartella specifica. Ogni volta che un utente aggiunge modifica od elimina un file, il programma sincronizza le modifiche sul sistema remoto. La forza di questo sistema è che i dati sono accessibili anche da browser e da altri dispositivi (es. mobile) garantendo l’accesso anche da diversi dispositivi in modo automatico. Google drive consente inoltre di modificare molti documenti usando i propri programmi cloud, come Google Document o Google Sheet.
Un altro servizio è il cloud delle foto, analogo al precedente ma dedicato a foto e video, ed in generale usato su smartphone. I più noti servizi sono Google photos e iCloud photos, oppure prodotti professionali come Lightroom.
Altri servizi di grande diffusione sono i servizi di memorizzazione delle note, del calendario, della posta, delle password, offerti di norma da quasi tutti i sistemi operativi o tramite programmi specializzati.
Di norma questi servizi sono gratuiti per piccole quantità di dati, ed offrono piani a pagamento quando si vogliono sincronizzare grandi quantità di dati.
- fino al 2010 circa erano ancora presenti nei computer i floppy disk, unità che permettevano di caricare dischetti di memoria, che venivano poi montati come unità A o B. ↩︎
