F.2. Esame dettagliato del processo di avvio

L'inizio del processo di avvio varia in base alla piattaforma utilizzata. Tuttavia, quando il kernel viene rilevato e caricato dal boot loader, il processo di avvio di default è identico per tutte le architetture. Questo capitolo si dedica principalmente all'architettura x86.

F.2.1. Interfaccia firmware

F.2.1.1. Sistemi x86 basati sul BIOS

Il Basic Input/Output System (BIOS) è una interfaccia del firmware in grado di controllare non solo la prima fase del processo d'avvio ma fornisce anche l'interfaccia di livello inferiore ai dispositivi delle periferiche. Sui sistemi x86 con un BIOS, il programma è scritto in sola lettura in memoria permanente ed è sempre disponibile all'uso. All'avvio del sistema il processore va alla ricerca, nella parte finale della memoria, del programma BIOS eseguendolo una volta rilevato.
Una volta caricato, il BIOS esegue il test del sistema, cerca e controlla le periferiche e localizza un dispositivo valido con il quale eseguire l'avvio del sistema. Generalmente esegue un controllo di qualsiasi unità ottica o dispositivi di storage USB per la presenza di un dispositivo d'avvio, in caso di ricerca negativa controllerà gli hard drive del sistema. In molti casi l'ordine di ricerca delle unità durante l'avvio è controllato da una impostazione all'interno del BIOS, eseguando una ricerca sul dispositivo IDE master sul bus IDE primario o per un dispositivo SATA con un flag boot. Successivamente il BIOS carica nella memoria qualsiasi programma presente nel primo settore di questo dispositivo, chiamato Master Boot Record (MBR). MBR ha una dimensione di 512 byte e contiene le istruzioni del codice macchina per il suo avvio, chiamato boot loader, insieme alla tabella delle partizioni. Quando il BIOS trova e carica il boot loader all'interno della memoria conferisce ad esso il controllo del processo d'avvio.
Questo boot loader della prima fase è rappresentato da una piccola porzione del codice binario della macchina dell'MBR. L'unico obiettivo di questa fase è quello di rilevare il boot loader secondario (GRUB) e caricare la prima parte in memoria.

F.2.1.2. Sistemi x86 basati su UEFI

L'Unified Extensible Firmware Interface (UEFI) è stato ideato, come il BIOS, per controllare il processo d'avvio (attraverso boot services) e fornire una interfaccia tra il firmware del sistema ed un sistema operativo (attraverso runtime services). Diversamente dal BIOS esso presenta una propria architettura, indipendente dalla CPU, ed i propri driver. UEFI è in grado di montare le partizioni e leggere determinati file system.
Durante l'avvio di un computer x86 con UEFI l'interfaccia va alla ricerca, all'interno dello storage, di una partizione etichettata con un globally unique identifier (GUID) specifico che la contrassegna come EFI System Partition (ESP). Questa partizione contiene le applicazioni compilate per l'architettura UEFI la quale può includere i boot loader per sistemi operativi e software. I sistemi UEFI includono un EFI boot manager in grado di avviare un sistema da una configurazione predefinita, o richiedere ad un utente di scegliere un sistema operativo da avviare. Dopo aver selezionato un boot loader, manualmente o automaticamente, UEFI esegue la sua lettura in memoria conferendone il controllo del processo d'avvio.