Per avere un sistema operativo attivo e funzionante, ci sono varie cose che vengono eseguite, in genere chiamate "loader" e "bootstrapper".
Il loro scopo collettivo è esattamente come implicano i loro nomi: far funzionare il sistema operativo, un passo alla volta.
Alcuni di questi codici eseguibili sono memorizzati nella memoria di sola lettura (ROM), o in alcuni tipi di memoria riprogrammabile (come la Flash ROM), o in una determinata posizione predeterminata sul disco di archiviazione (situato su un cosiddetto "boot" settore ", che è una posizione predeterminata su una" partizione del disco ") da cui è possibile avviare la macchina.
Il tuo sospetto che almeno alcuni di questi codici eseguibili debbano esistere al di fuori del concetto che chiamiamo "file" o "file system" è corretto. Non tutti sono; ma almeno alcuni di essi devono essere.
Il firmware hardware del computer e il sistema operativo stesso sono in genere in grado di accedere a queste aree di archiviazione "non file" per eseguire aggiornamenti di manutenzione non frequenti su questo codice eseguibile.
Lo scopo di consentire questi aggiornamenti dal software è una scelta ingegneristica guidata dal mercato dei consumatori - è più economico mantenere i computer se è possibile per i clienti eseguire gli aggiornamenti, piuttosto che richiedere che le macchine vengano rispedite a una fabbrica o centro di manutenzione per fare lo stesso.
Il codice eseguibile è diverso dal codice trovato in "file eseguibili"? Forse sì forse no. Ci sono certamente alcune differenze.
Una macchina a 64 bit può spendere il 99,99% del suo tempo eseguendo un codice macchina a 64 bit una volta avviato; ma durante i primi secondi potrebbe dover eseguire un codice macchina a 32 bit.
Allo stesso modo, un SO completamente caricato verrà eseguito in modalità privilegiata e il resto del codice verrà eseguito in modalità utente. Ma durante il bootstrap la maggior parte del codice può essere eseguita in modalità privilegiata - o meglio, in alcune modalità "semplicemente non protetta", perché il meccanismo della CPU per la gestione degli errori del software potrebbe non essere stato completamente inizializzato.
Codice che deve essere eseguito senza il sistema operativo, ovviamente non è possibile effettuare chiamate al sistema operativo. Possono ancora effettuare salti e chiamate di subroutine ad altro codice, purché si trovino nello stesso pezzo di codice caricato nella RAM in un colpo solo.
Questo fa apparire la "limitazione delle dimensioni" del codice bootstrapper. Lo stadio precedente deve sapere esattamente quanto è grande la dimensione del codice della fase successiva. Quella quantità di codice / dati eseguibili verrebbe introdotta nella RAM prima che possa essere eseguita qualsiasi di esse. In assenza di un SO (e anche di qualsiasi meccanismo di gestione della memoria), il bootstrapper non può effettuare chiamate di subroutine situate al di fuori di ciò che è stato portato nella RAM, a meno che il bootstrapper non sappia come caricare il codice aggiuntivo.
Il BIOS potrebbe dover fornire un modo per facilitare (semplificare) il caricamento di dati aggiuntivi dal disco di archiviazione. Prestazioni o sicurezza non sono la preoccupazione: l'unica preoccupazione è la semplicità per il chiamante (che è il bootstrapper). Altrimenti, sarebbe un compito molto noioso, e mangerebbe lo spazio prezioso che il codice del bootstrapper deve contenere.
Quali formati sono usati per tale codice di bootstrap?
Questi codici devono seguire alcune convenzioni per funzionare correttamente. Se queste convenzioni si qualificano come "un formato" è un gioco di parole.
Ad esempio, deve essere specificato lo scostamento iniziale della prima istruzione macchina nel codice bootstrap. Altrimenti, in che altro modo inizi ad eseguirlo?
Alcuni codici di bootstrap sono necessari per portare un checksum, o anche una firma digitale (cioè firmati digitalmente), per evitare di provare a eseguire un bootstrapper i cui dati sono corrotti, o falsificati o manomessi da intenti malevoli.
Queste convenzioni devono essere concordate dai produttori di macchine, dai fornitori di sistemi operativi e / o dai manutentori e così via.