Corso di Sistemi Operativi

Avvio del sistema

 

Adesso che conosciamo meglio la storia di UNIX, possiamo addentrarci nel cuore del sistema per vedere da vicino in che modo vengono realizzati tutti gli obiettivi e i compiti che abbiamo discusso nel primo capitolo di questo corso.
Data l’esistenza di diverse implementazioni e l’enorme somiglianza che le caratterizza, prenderemo in esame solo una di esse, ovvero il sistema GNU/Linux, per motivazioni che sono ben comprensibili: è facilmente reperibile, non si paga e abbiamo pieno accesso ai sorgenti del sistema.
Per gli esempi in seguito riportati faremo riferimento ad un’installazione tipica di una qualsiasi delle distribuzioni Linux.

Cominciamo il nostro viaggio ricordandoci alcune nozioni già viste nelle prime lezioni.
Il processo di avvio del sistema operativo si chiama boot (in origine si utilizzava il termine bootstrap che alludeva alla difficoltà del sistema di “tirarsi su” da solo) e le istruzioni per il boot sono incorporate in un chip del computer, detto BIOS (Basic Input/Output System).
Tra le istruzioni del BIOS ve n'è una che cerca uno speciale programma, chiamato boot loader, che si trova in un posto predefinito del disco fisso principale e il cui compito è far partire il sistema operativo vero e proprio.

Per compiere questa operazione il loader cerca un kernel, lo carica in memoria e lo fa partire.
Ci si potrebbe chiedere come mai il BIOS non carica il kernel direttamente, invece di avviare questo processo a due stadi con il boot loader?
Le ragioni sono principalmente due:
1) Il BIOS non è molto intelligente: fu scritto in origine per i PC primitivi a 8 bit con dischi poco capienti e non riesce ad accedere a una parte abbastanza grande del disco per caricare direttamente il kernel.
2) La fase del boot loader consente anche di far partire diversi sistemi operativi, installati in partizioni diverse del disco.

Supponendo di avere scelto come boot loader quello distribuito con Linux, LILO (LInux LOader), all’avvio del computer, dopo una prima serie di operazioni del BIOS, vedremo comparire la scritta:

LILO boot:

(a meno che non si sia scelta la modalità grafica introdotta nelle ultime versioni di LILO) alla quale, per avviare Linux, bisognerà digitare ‘linux’ e premere il tasto [Invio].

Una volta partito, il kernel comincia a “guardarsi in giro” alla ricerca del resto dell'hardware, e si prepara a far girare i programmi.
In questa fase, detta autorilevamento dell’hardware, viene fatta una scansione delle porte di I/O, che sono degli speciali indirizzi bus nei quali il kernel sa di poter trovare i controller dei dispositivi connessi alla macchina.
Il kernel conosce sia gli indirizzi di I/O in cui può trovare i controller in ascolto in attesa di comandi, sia il modo in cui essi rispondono se sono presenti.
La maggior parte dei messaggi visualizzati durante la fase di avvio sono dovuti all'autorilevamento dell’hardware e alle operazioni compiute dal kernel per adattarvisi.

Tutte le operazioni compiute fino al completo caricamento del kernel costituiscono il primo livello di esecuzione della fase di boot, chiamato run level 1 (livello di esecuzione 1).
A questo punto il kernel passa il controllo a un processo speciale, chiamato init, che esegue diverse attività comuni.

Il primo compito del processo init è assicurarsi che i dischi siano a posto.
I file system, infatti, sono fragili: in caso di danneggiamenti dovuti a malfunzionamenti hardware o ad un'improvvisa mancanza di elettricità, è necessario compiere alcune operazioni di controllo ed intervento per ripristinare la coerenza del file system.

Il passo successivo del kernel è l’avvio dei demoni di sistema.
Un demone (o daemon) è un programma, quale uno spooler di stampa o un server http, che rimane latente in background, cioè senza interagire direttamente con l’utente, in attesa di qualcosa da fare.

Questi programmi speciali devono spesso coordinare diverse richieste che rischiano di entrare in conflitto, e per questo motivo si è dato loro il nome di demoni, essendo quasi sempre più facile scrivere un programma che gira costantemente e viene a conoscenza di tutte le richieste da eseguire, piuttosto che cercare di assicurarsi che un gruppo di copie dello stesso programma che girano tutte contemporaneamente (ciascuna con la propria richiesta da soddisfare) non si ostacolino a vicenda.
Il numero e il tipo di demoni che vengono avviati può variare da una macchina all’altra, in funzione dei dispositivi hardware posseduti e dei servizi software che l’utente vuole attivare.
Quando tutti i demoni sono avviati si passa al run level 2.

 

Torna all'indice Generale del corso di Corso di Sistemi Operativi di Software Planet