Un computer senza un programma in esecuzione è soltanto un ammasso inerte di componenti elettronici. La prima cosa che un computer deve fare quando viene acceso è far partire un programma speciale chiamato sistema operativo. Il compito del sistema operativo è quello di aiutare gli altri programmi del computer a funzionare, gestendo gli intricati dettagli relativi al controllo dell'hardware del computer.
Il processo di avvio del sistema operativo è chiamato booting (in origine era bootstrapping e alludeva al processo di tirarsi su da solo, “attraverso il proprio bootstraps”). Il proprio computer sa come avviarsi perché le istruzioni per il boot sono incorporate in uno dei suoi chip, il BIOS (Basic Input/Output System).
Il chip BIOS gli comunica di cercare in un posto predefinito del disco fisso con numero più basso (il disco di avvio) uno speciale programma chiamato boot loader (sotto Linux il boot loader è chiamato Grub o LILO) che si trova. Il boot loader è caricato in memoria e avviato. Il compito del boot loader è quello di avviare il sistema operativo vero e proprio
Per compiere quest'ultima operazione il loader cerca un kernel, lo carica in memoria e lo avvia. Quando si avvia Linux e si vede "LILO" sullo schermo seguito da una riga di puntini, vuol dire che sta caricando il kernel. (Ogni puntino significa che ha caricato un altro blocco del disco di codice del kernel).
(Ci si potrebbe meravigliare del perchè il BIOS non carichi direttamente il kernel — perchè questo processo a due stadi con il boot loader? Bene, il BIOS non è molto intelligente. In effetti è proprio stupido, e Linux non lo usa più dopo la fase di avvio. Fu scritto in origine per i primi PC a 8 bit con dischi poco capienti e proprio non riesce ad accedere a una parte abbastanza grande del disco per caricare direttamente il kernel. La fase del boot loader consente anche di far partire diversi sistemi operativi da posti diversi del disco, nella improbabile eventualità che Unix non vi soddisfi a sufficienza.)
Una volta avviato, il kernel si guarda in giro, trova il resto dell'hardware e si prepara ad eseguire i programmi. Fa tutto questo guardando non nelle ordinarie locazioni di memoria ma piuttosto alle porte I/O; speciali indirizzi del bus che probabilmente hanno schede controller dei dispositivi che sono in ascolto in attesa di comandi. Il kernel non cerca a caso; ha molta conoscenza al suo interno su cosa sia probabile trovare e dove, e su come i controller rispondano se sono presenti. Questo processo è chiamato autorilevamento.
Si potrebbe essere o non essere capaci di vedere ogniuno di questi messaggi Una volta, quando i sistemi Unix usavano le console di testo, si sarebbero visti i messaggi di boot scorrere sul proprio schermo nel momento dell'avvio del sistema. Al giorno d'oggi spesso gli Unix nascondono i messaggi d'avvio dietro una schermata grafica sullo schermo. È possibile vedere i messaggi d'avvio passando a una console di testo con la combinazione di tasti Ctrl-Shift-F1. Se questo funziona, si dovrebbe essere capaci di tornare indieto allo schermo grafico d'avvio con una sequenza differente dei tasti Ctrl-Shift; provare F7, F8, e F9.
La maggior parte dei messaggi emessi al momento dell'avvio sono del kernel che effettua l'autorilevamento del proprio hardware attraverso le porte I/O, riconosce cosa ha a sua disposizione e si adatta al computer. Il kernel di Linux è estremamente preciso in questo, meglio della maggior parte degli altri Unix e molto meglio del DOS o di Windows. Infatti, molti utenti di Linux di vecchia data pensano che l'intelligenza del rilevamento all'avvio di Linux (che lo rende relativamente facile da installare) sia stata una delle principali ragioni che lo hanno fatto sfondare rispetto a tanti esperimenti di Unix liberi, attraendo una massa critica di utenti.
Ma avere il kernel completamente caricato e funzionante non è la fine del processo di avvio; ne è solo il primo stadio (a volte chiamato run level 1, livello di esecuzione 1). Dopo questo primo stadio, il kernel passa il controllo ad un processo speciale chiamato ‘init’ che genera diversi processi residenti comuni. (Alcuni Linux recenti usano un programma differente chiamato ‘upstart’ che svolge compiti simili)
Il primo compito del processo init è abitualmente quello di verificare che i dischi siano a posto. I file system dei dischi sono cose fragili; se vengono danneggiati da un malfunzionamento hardware o da un'improvvisa mancanza di elettricità, ci sono buoni motivi per compiere alcuni passaggi di recupero prima che Unix sia perfettamente funzionante. Approfondiremo ciò più avanti, parlando di come un file systems può essere danneggiato.
Il passo successivo di init è quello di avviare diversi daemon. Un demone (o daemon) è un programma come uno spooler di stampa, un programma che attende di ricevere posta in arrivo o un server WWW che rimane latente in sottofondo, aspettando qualcosa da fare. Questi programmi speciali spesso devono coordinare diverse richieste che potrebbero entrare in conflitto. Sono demoni perché spesso è più facile scrivere un programma che gira costantemente e viene a conoscenza di tutte le richieste piuttosto che cercare di assicurarsi che un gruppo di copie (che girano tutte contemporaneamente, con ciascuna che processa una richiesta) non si ostacolino a vicenda. La particolare serie di demoni che il vostro sistema fa partire può variare, ma quasi certamente include uno spooler di stampa (un demone che fa da portinaio per la propria stampante).
Il prossimo passo è quello di prepararsi per gli utenti. Init avvia una copia di un programma chiamato getty per controllare lo schermo e la tastiera (e forse altre copie per controllare le porte seriali dial-in). Attualmente, al giorno d'oggi init avvia copie multiple di getty così da avere diverse console virtuali (solitamente 7 o 8), con schermo e tastiera connessi ad una di esse in ogni momento. Ma, probabilmente, non si vorrà vedere nessuna di queste, dato che una delle proprie console sarà occupata dal server X (che approfondiremo tra poco).
Non abbiamo ancora finito. Il passo successivo è quello di avviare vari daemon che supportano la rete e altri servizi. Il più importante di questi è il server X. X è un daemon che gestisce lo schermo, la tastiera e il mouse. Il suo compito principale è quello di produrre pixel grafici a colori che si possono vedere normalmente sullo schermo.
Quando il server X si avvia, durante l'ultima parte del processo di avvio del proprio computer, esso prende in consegna efficacemente l'hardware da qualsiasi console virtuale stesse controllando in precedenza. Ciò succede quando si vedrà uno schermo di login grafico, prodotto da un programma chiamato gestore di display.