Il termine deriva dal fatto che il [[processo (informatica)|processo]] di avvio di un [[computer]] viene chiamato [[boot]]strap (dal detto [[lingua inglese|inglese]] ''to lift oneself by one's own bootstrap'', "tirarsi su per le fibbie degli stivali"). Nel caso di più sistemi operativi installati sulla stessa macchina, il caricamento da parte del boot loader è preceduto dalla selezione del sistema operativo desiderato da parte dell'utente tramite il [[boot manager]].
== Descrizione ==
[[File:Windows_Boot_Manager.png|thumb|upright=1.1|[[Windows Boot Manager]]]]
=== Compiti ===
La funzione fondamentale di un boot loader è dunque caricare ed eseguire una kernel di sistema operativo, unitamente ai processi e servizi secondari. Nella maggior parte dei casi, questo richiede di accedere alla [[memoria di massa]], per leggere il kernel di sistema operativo, e potenzialmente altri [[file]]. Nei casi più semplici, il boot loader contiene l'indirizzo dei blocchi di disco in cui sono memorizzati i file da caricare, e deve quindi essere aggiornato se questi file vengono modificati. L'accesso al disco spesso avviene attraverso le funzioni fornite dal [[firmware]] (il [[BIOS]] nei sistemi [[PC IBM]] compatibili).
Alcuni boot loader posseggono la capacità di interpretare uno o più [[file system]] per trovare i file da caricare. In questo caso, possono anche caricare un [[file di configurazione]] dal disco, o permettere ad un utente avanzato di esplorare il disco alla ricerca di file da caricare.
Alcuni boot loader sono in grado di utilizzare le funzionalità fornite da alcune [[scheda di rete|schede di rete]] (tipicamente [[ethernet]]) per scaricare un kernel dalla rete, tipicamente via [[TFTP]].
Ogni sistema operativo installato anzi ogni volume avviabile (esistono infatti anche ambienti di ripristino o simili) ha uno specifico boot loader o, meglio, il file di configurazione di avvio (per [[Windows 10]] si chiama BCD, ad esempio) contiene le istruzioni di avvio specifiche che devono essere lette dal boot loader per ogni volume avviabile.
Funzionalità aggiuntive presenti in alcuni boot loader:
* Molti kernel supportano la possibilità di ricevere parametri di avvio per configurare il loro comportamento; il boot loader si occupa di passarli al kernel, e in alcuni casi permette all'utente di editare questi parametri.
* Alcuni kernel prevedono che altri file siano resi disponibili al kernel durante il boot (per esempio nei sistemi [[Unix]]-like è comune l'uso di [[initrd]], un piccolo [[file system]] memorizzato in un file). Il caricamento di questi file viene gestito dal bootloader.
* Un boot loader può mostrare all'utente un menù di possibili kernel da caricare, con relativi parametri, permettendo all'utente di scegliere quale sistema operativo avviare.
* Un boot loader può richiedere una password per consentire l'avvio del sistema.
=== Funzionamento ===
[[File:SysLinux.png|thumb|upright=1.1|[[SYSLINUX]]]]
Il boot loader viene in molti casi installato in una posizione specifica di uno specifico dispositivo di [[memoria di massa]], tipicamente nel primo blocco del primo [[disco rigido|disco]] ("primo" rispetto all'ordine con cui i dispositivi sono collegati al calcolatore), da dove viene caricato dal [[firmware]] del calcolatore.
Ad esempio, nell'architettura [[IBM compatibile]] il boot loader può essere memorizzato nel [[master boot record]] (MBR) del [[disco di avvio]], oppure nel primo settore della [[partizione (informatica)|partizione]] che ospita il [[sistema operativo]] (nel qual caso deve essere richiamato da un [[boot manager]] installato nel MBR); oppure può essere anche nel primo settore di un [[Volume (informatica)|volume]] avviabile, come ad esempio un ambiente di ripristino (come [[Windows Recovery Environment]]).
Esistono alcune limitazioni imposte dalla tecnica e dai produttori di hardware e firmware per cui, al fine di aggirarle molti boot loader moderni operano ricorrendo al cosiddetto ''boot in due stadi'', lo stage 1 e lo stage 2, divisione logica che rimarca diversi momenti della fase di avvio. Quanto alle limitazioni esse sono, per esempio, la possibilità di caricare dal dispositivo di boot nella [[RAM|memoria centrale]] solo una piccola quantità di byte e trovarla posizionata in un punto piuttosto sconveniente della memoria - è il caso emblematico dei sistemi basati sulla famiglia [[Architettura x86|x86]] che carica i primi 512 byte che incontra sul dispositivo di boot a partire dall'indirizzo 0x0000:0x7C00 in avanti (ultimo byte in 0x0000:0x7DFF).
Con l'avvento della tecnologia [[Unified Extensible Firmware Interface|Uefi]] e del relativo partizionamento [[GUID Partition Table|GPT]] il funzionamento del boot loader è cambiato sostanzialmente a cominciare dal fatto che si trova, fisicamente, nella cartella efi contenuta nella relativa partizione di sistema.<ref>{{Cita web|lingua=en|url=https://conclusive.tech/glossary/what-is-a-bootloader-how-does-it-work/?utm_source=chatgpt.com|titolo=What is a Bootloader? How Does It Work In Embedded System? {{!}} Glossary|sito=conclusive.tech|accesso=2025-02-01}}</ref>
== Esempio di boot a stadi ==
|