Iniziamo la nostra analisi di un sistema operativo partendo dalla fase di avvio della macchina, nota come boot process.

La fase di avvio (Boot Process)

Quando (ri)avviamo il nostro computer, la macchina deve caricare in memoria il sistema operativo andandolo a cercare tra le periferiche di archiviazione di massa disponibili (quali floppy disk, usb key, cdrom, hard disk, ecc.).

Ma prima di poter fare questo, è necessario verificare la presenza e il corretto funzionamento di tali periferiche hardware.

E’ compito quindi del BIOS procedere a tale verifica preliminare, facendo uso di alcuni servizi predefiniti.

Come vedremo, potremo richiamare tali servizi mediante alcune istruzioni codificate in linguaggio macchina.

Il BIOS (Basic Input/Output Software) fornisce infatti un ambiente di esecuzione preliminare costituito da routine software che permettono l’accesso di base alle periferiche hardware, consentendo alla macchina di caricare ed eseguire il sistema operativo prescelto.

Le routine del BIOS sono memorizzate in un chip, e vengono caricate in memoria RAM e inizializzate a seguito dell’accensione della macchina.

Le routine di rilevamento del BIOS

In fase di avvio, il BIOS fornisce il rilevamento automatico e il controllo di base dei dispositivi essenziali del computer, come lo schermo, la tastiera e i dischi rigidi.

Dopo che il BIOS ha completato alcuni test di basso livello dell’hardware durante la fase nota come POST (Power-On Self Test), tra cui in particolare se la memoria RAM installata funziona correttamente o meno, può avviare il sistema operativo memorizzato su uno dei dispositivi di massa.

Tuttavia il BIOS non è in grado di caricare il sistema operativo da un disco fisco come se fosse un comune file, in quanto il BIOS non ha a disposizione i meccanismi offerti da un file-system.

Il BIOS deve quindi leggere gli specifici settori di dati da posizioni fisiche specifiche dei dispositivi di massa.

Quindi, il modo più semplice per il BIOS per individuare il sistema operativo è quello di caricare il primo settore di uno dei dischi impostato come periferica di avvio (es. Cilindro 0, Testa 0, Settore 0).

Tale settore è anche noto come settore di avvio e ha una dimensione totale di 512 bytes.

Poiché alcuni dei dischi installati sulla macchina potrebbero non contenere un sistema operativo (in quanto tali dischi potrebbero essere semplicemente utilizzati ai fini di archiviazione), è importante che il BIOS possa individuare correttamente il settore di avvio da eseguire.

A tal fine, il BIOS utilizza uno strategemma: verifica che gli ultimi due byte del settore selezionato come di avvio siano impostati con la sequenza esadecimale 0xaa55 (noto come magic number).

All’avvio della macchina quindi il BIOS analizza ogni dispositivo di archiviazione (ad es. unità floppy, disco rigido, unità CD, ecc.), legge il settore di avvio in memoria e indica alla CPU di iniziare a eseguire il primo settore di avvio che termina con la sequenza di bytes 0xaa55.

Boot sector di esempio

Vediamo adesso un esempio concreto di boot sector: utilizzeremo un editor esadecimale quale ad es. HxD editor per creare da zero un settore di avvio di 512 bytes che il BIOS riconosca come valido e avviabile.