Dove è archiviato il bootloader - in ROM, RAM o altrove?


30

Secondo la voce di Wikipedia, un bootloader è un piccolo programma memorizzato nella ROM (una parte della memoria principale (RAM), no ??) che può solo essere letto e non cancellato. Sono un po 'perplesso qui. Questo significa che ogni RAM che acquistiamo ha un bootloader installato per impostazione predefinita? Inoltre, ho letto da un libro in cui si dice che in genere esiste un'area chiamata MBR (Master Boot Record) sul disco rigido che include un bootloader ...

Quindi dove si trova esattamente questo bootloader? Diversi sistemi operativi memorizzano il loro bootloader in luoghi diversi?

Risposte:


43

La ROM è un chip separato dalla RAM. Non richiede alimentazione per conservare il suo contenuto e in origine non poteva essere modificato in alcun modo, ma veniva cablato dalla fabbrica. La PROM successiva o la memoria di sola lettura programmabile ha sostituito la ROM vera. Questi chip sono usciti vuoti dalla fabbrica e potevano essere scritti una volta usando una procedura speciale che essenzialmente bruciava i bit del chip causando il cambiamento del loro stato. Questo è stato quindi sostituito con EPROM o memoria programmabile cancellabile. Questi chip avevano una piccola finestra su di essi e se si illuminava la luce ultravioletta, potevano essere cancellati, consentendo loro di essere programmati di nuovo. Questi sono stati quindi sostituiti con EEPROM o memoria programmabile cancellabile elettricamente. Questi chip hanno una procedura software speciale per cancellarli in modo che possano essere riprogrammati.

La scheda madre ha un qualche tipo di chip ROM che contiene il firmware, che in genere PC è chiamato BIOS, o Basic Input Output System, anche se in questi giorni viene sostituito con il firmware EFI. Questo è il software che la CPU inizia a eseguire all'accensione. Tutto il firmware esegue l'inizializzazione dell'hardware, in genere fornisce un output diagnostico e fornisce all'utente la possibilità di configurare l'hardware, quindi individua e carica il caricatore di avvio, che a sua volta individua e carica il sistema operativo.

Con il BIOS del PC, carica ed esegue semplicemente il primo settore dal disco da cui decide di avviarsi, che in genere è il primo disco rigido rilevato. Per convenzione il primo settore di un disco rigido, chiamato Master Boot Record, contiene una tabella delle partizioni DOS che elenca le posizioni delle partizioni sul disco e lascia un po 'di spazio per il boot loader. Ubuntu utilizza il boot loader GRUB, che inserisce abbastanza codice nell'MBR da caricare ed eseguire /boot/grub/core.img. Normalmente una copia di questo file viene collocata nei settori successivi all'MBR, ma prima della prima partizione, ed è effettivamente ciò che carica l'MBR, poiché trovare la posizione di /boot/grub/core.imgè troppo difficile da eseguire correttamente nello spazio molto limitato disponibile nell'MBR .

L'immagine principale di grub contiene il codice grub di base, oltre a tutti i moduli necessari per accedere in /boot/grubmodo che possa caricare moduli aggiuntivi lì, e il file di configurazione grub che descrive quali sistemi operativi possono essere avviati e dove possono essere trovati.

Il firmware EFI utilizzato su Mac Intel e che diventa disponibile in sostituzione del BIOS sulle schede madri PC più recenti richiede una partizione dedicata che contiene i file del caricatore di avvio e il firmware è abbastanza intelligente da trovare quei file e caricarne uno invece di caricare ed eseguire qualunque cosa è nel primo settore del disco.


Ecco un paragrafo tratto dall'Informatica di Glenn Brookshear , una panoramica A small portion of a computer's main memory where the CPU expects to find its initial program is constructed from special nonvolatile memory cells. Such memory is known as read-only memory(ROM) secondo lui. La memoria principale è composta da due parti, RAM e ROM. Voglio solo sapere se il cosiddetto bootloader è installato nella parte ROM della memoria principale ... @Sergey
xczzhh

@xczzhh - yes Il BIOS è archiviato nella ROM, che rileva il Bootloader presente nelle partizioni. Al momento dell'installazione di qualsiasi sistema operativo, crea un tipo di bandiera nel BIOS per rilevare il rispettivo BOOTLOADER.
atenz

1
@xczzhh, no, il boot loader si trova sul disco rigido o su qualche altro disco. È installato insieme al sistema operativo. A meno che non si scarichi e installi un aggiornamento dal produttore della scheda madre, la ROM non cambia mai.
psusi

Invece EFI utilizza le applicazioni EFI e carica l'applicazione EFI nella NVRAM
Suici Doga

@SuiciDoga, no, le applicazioni EFI (che sono sostanzialmente limitate a poche utility di aggiornamento del firmware e caricatori di avvio) sono archiviate nella partizione di sistema EFI del disco rigido. NVRAM è il punto in cui EFI memorizza alcune variabili di configurazione, come l'ordine di avvio.
psusi

23

La ROM non è nella memoria principale:

La ROM non fa parte della memoria principale. È un chip separato, che è il più delle volte integrato in un IC più grande. Più esempio, il tuo PC può essere composto da più ROM. Quelli sono costruiti nella tua scheda madre.

Generalmente :

  • Le ROM hanno dimensioni di memoria molto ridotte. Questa memoria non è volatile, nel senso che il programma memorizzato nella ROM non viene cancellato con lo spegnimento.
  • Le ROM sono utilizzate per memorizzare programmi permanenti, che sono molto essenziali per il corretto funzionamento dell'hardware.
  • Un tipico esempio di ROM è il chip BIOS. Dove sono memorizzati i programmi di avvio e hardware di inizializzazione di livello molto basso

Hai detto che, hai letto un articolo in cui l'autore ha detto "La ROM fa parte della memoria principale". Questo è fonte di confusione, perché in genere la memoria principale si riferisce alla memoria di tipi che sono volatili, come la RAM. Ma sì, se usi il termine della memoria principale per l'intero spazio di memoria di un PC, allora la ROM fa parte di quello spazio di memoria. Si noti che, generalmente la memoria principale esclude la memoria di tipi come ROM .

Dove è archiviato Bootloader:

Il sistema moderno utilizza il caricamento di avvio a due stadi. Nel primo passo viene caricato un piccolo programma da un settore (chiamato settore di avvio più spesso) del disco rigido. Questo piccolo programma a sua volta carica un programma da qualche parte nel disco, che si chiama bootloader. E infine il bootloader carica il sistema operativo.

In termini di sistema Ubuntu, il processo è il seguente:

  1. Dopo aver acceso il PC, il BIOS (che è memorizzato nella ROM) si avvia e inizializza automaticamente varie parti dell'hardware del PC. Quindi controlla un settore specifico nel primo dispositivo di avvio definito (in genere disco rigido). Questo settore è il settore di avvio, che ha una dimensione di 512 byte.

  2. Il programma nel settore di avvio viene caricato in memoria (1 ° stadio). Questo piccolo programma contiene informazioni su quali programmi dovrebbe essere successivamente caricato in memoria e dove si trova quel programma nel dispositivo Disk o Boot. Carica quel programma. In Ubuntu lo è /boot/grub/core.img.

  3. Nel 2 ° stadio, OS-Loader, GRUB, carica Ubuntu caricando il kernel e il disco ram iniziale nella memoria e il controllo manuale sul kernel. Quindi il kernel viene eseguito e carica tutti i programmi necessari come display manager, Gui ecc.

Quindi, possiamo chiaramente dire che il bootloader non è né memorizzato nella ROM, né nella RAM, in realtà è archiviato sul disco rigido (o altro dispositivo di avvio, come CD-ROM di avvio, unità USB ecc.), Parlando precisamente del primo settore del disco rigido, della dimensione di 512 byte e spesso indicato come settore di avvio . E questo bootloader carica il caricatore del sistema operativo (in Ubuntu, è grub) che risiede anche nel disco rigido (cioè nella /boot/grub/cartella), e il suo compito è caricare il sistema operativo (diciamo, Ubuntu).

Come test, rimuovere il disco rigido (e tutti gli altri dispositivi di avvio) e provare ad avviare. È possibile passare al passaggio BIOS, ma dopo tale passaggio non è possibile avviare nulla. Molto probabilmente il BIOS dirà " Nessun dispositivo di avvio trovato " o " Nessun sistema operativo trovato " o qualcosa di simile.

Spero che questa risposta possa essere d'aiuto.


Per ulteriori informazioni, potresti visitare questi link:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory

2
La ROM non è stata più veloce della RAM per circa un decennio ormai. In effetti, una delle prime cose che fa un moderno BIOS è copiarsi nella RAM perché la RAM è molto più veloce.
David Schwartz,

1
@DavidSchwartz, è passato più di un decennio ormai. Ogni BIOS per PC che ho usato a metà degli anni '90 aveva un'opzione per oscurare il BIOS nella RAM per la velocità.
psusi

@Anwar, il collegamento alla memoria principale è morto.
The Matt

15

Un processore compatibile x86 si avvia sempre nella cosiddetta modalità "reale", che è una modalità a 16 bit con 1 megabyte di memoria indirizzabile disponibile. Da quello spazio degli indirizzi, 640K sono disponibili per i programmi e gli indirizzi sopra che sono mappati su dispositivi diversi.

Ad esempio, gli indirizzi che iniziano da 0xA000: 0x0000 vengono mappati sulla RAM video, quindi, scrivendo i dati lì si scriveranno effettivamente i dati nella memoria dell'adattatore video visualizzando i pixel sullo schermo.

Allo stesso modo, la ROM del BIOS parte da 0xF000: 0000, quindi la CPU, quando accesa, inizia semplicemente a eseguire le istruzioni una per una a partire da quell'indirizzo predefinito. La ROM BIOS contiene il programma iniziale che si avvia eseguendo un "test automatico all'accensione" o POST. Da Wikipedia:

Il software BIOS è integrato nel PC ed è il primo codice eseguito da un PC all'accensione ("firmware di avvio"). All'avvio del PC, il primo lavoro per il BIOS è l'autotest all'accensione, che inizializza e identifica i dispositivi di sistema come CPU, RAM, scheda video, tastiera e mouse, unità disco fisso, unità disco ottico e altro hardware. Il BIOS individua quindi il software del caricatore di avvio contenuto in un dispositivo periferico (indicato come "dispositivo di avvio"), come un disco rigido o un CD / DVD, e carica ed esegue quel software, dandogli il controllo del PC. 2 Questo processo è noto come avvio o avvio, che è l'abbreviazione di bootstrap.

Il firmware del BIOS è responsabile della lettura del primo settore dal disco in memoria e del passaggio del controllo a un piccolo programma che, di nuovo, si trova a un indirizzo specifico lì. Il bootloader MBR può quindi iniziare a caricare direttamente il sistema operativo (come nel caso di MS-DOS) o caricare "seconda fase", che non si limita ai confini di un singolo settore del disco.

I bootloader che utilizzano l'approccio multi-stage possono essere piuttosto complessi con un'interfaccia testuale o grafica che consente all'utente di selezionare da quale disco o partizione caricare un sistema operativo.

Quindi, come suggerisce Uri, ti interessa sapere se il bootloader di Windows e GRUB possono coesistere insieme, la risposta è: l'MBR attuale può contenere solo un singolo bootloader del primo stadio (dai, l'intero settore è solo 512 byte) , ma la seconda fase di un bootloader potrebbe essere in grado di "caricare a catena" sistemi operativi da partizioni diverse. Il bootloader di Windows è in grado di riconoscere e caricare solo Windows, mentre GRUB è in grado di caricare Linux o passare il controllo a un altro bootloader archiviato in un record di avvio del volume di una delle partizioni, che consente di avviare Windows o altri sistemi operativi. Quest'ultimo processo è chiamato caricamento a catena.

Quando installi Ubuntu su un computer su cui è installato Windows, GRUB verrà installato in MBR e sarai in grado di avviare sia Ubuntu che Windows.

Tuttavia, se Windows viene installato dopo Ubuntu, GRUB verrà sostituito con il bootloader di Windows e dovrai reinstallare GRUB per poter riavviare Ubuntu.


Suppongo che voglia sapere se il bootloader di Windows e GRUB possono coesistere insieme o no. I dischi UEFI, GPT non usano MBR come li influenza?
Uri Herrera,

La ROM BIOS si trova nel segmento F000: che è appena sotto 1 MB. Il 640k proviene dai segmenti sottostanti A000 :, che sono disponibili per il sistema operativo e i programmi in modalità reale da utilizzare.
psusi

@psusi: hai ragione, ho riformulato quella parte
Sergey

Grazie per la risposta. Vuoi dire che ci sono più bootloader (uno all'interno del BIOS e un altro in MBR?) Coinvolti per avviare un sistema operativo? È nuovo per me ... :)
xczzhh

@xczzhh Bene, ok, il codice nel BIOS non si chiama "bootloader", quello memorizzato sul disco. Ho aggiornato la mia risposta per chiarirlo.
Sergey

4

Il conflitto tra ciò che dici sul fatto che il bootloader si trova nella ROM e che si trova nell'MBR è forse dovuto al bootloader utilizzato per qualsiasi codice che risolve come fare il minimo per caricare il codice per fare in modo che il computer faccia qualcosa di utile, incluso ogni stato in un avvio a più livelli.

Quindi, lo stato iniziale è avere un computer, che è un dispositivo programmabile, ma non sa come caricare il software da eseguire perché non ha alcun software caricato. (E quindi avviare da pull up up dai suoi bootstrap ).

Storicamente, c'erano alcune soluzioni diverse a questo problema, ma in questi giorni iniziamo con un po 'di codice nella ROM (probabilmente probabilmente rigorosamente EEPROM), che è abbastanza per farlo guardare diversi dispositivi e provarli a turno fino a quando non trova quello che è avviabile.

(Questo è il motivo per cui molti sistemi si avviano da un CD o DVD se si inserisce un disco di installazione del sistema operativo nel e dal disco rigido altrimenti, il BIOS [il codice sulla ROM, incluso il codice di cui stiamo parlando e un altro basso roba di livello che avvia le cose] è impostato per guardare prima l'unità CD / DVD, quindi su un disco rigido se non trova nulla, i tweaker spesso lo impostano per ignorare l'unità CD / DVD a meno che non sia richiesto manualmente non perde tempo a girare un disco non avviabile che è stato lasciato nell'unità).

Questo codice nella ROM è talvolta chiamato bootloader .

Quando sa quale unità guardare, guarderà quindi l'MBR, che contiene informazioni sulle partizioni primarie - come potresti guardare in seguito / o / boot o C: / (su un sistema Windows) se non avessi nemmeno sai quale parte del disco era quale partizione, non importa come era montata ogni partizione? - e un po 'di codice con ulteriori istruzioni da eseguire. (Per inciso, questo spiega perché alcuni SO - come Windows - possono essere installati solo su una partizione primaria, i dettagli di quelle partizioni sono nell'MBR e questa è l'unica informazione di partizione che il loro bootloader ha letto, e non carica l'EBR in conoscere le partizioni logiche, per quanto riguarda quelle partizioni non esistono ancora).

Quel codice eseguibile, è anche chiamato bootloader . Quando ci preoccupiamo di distinguere tra questo e ciò che viene dopo, viene chiamato boot loader primario (perché a meno che non stiamo realizzando il nostro BIOS, ignoriamo il bit della ROM come fuori dal nostro controllo).

Quel codice sarà molto piccolo in quanto ha solo circa 400 byte per adattarsi, quindi per fare qualcosa di reale, caricherà un po 'più di codice, che può essere più grande in quanto non deve affrontare questo vincolo.

Questo codice è anche noto come bootloader . Quando ci interessa distinguere tra questo e ciò che è accaduto prima, si chiama boot loader secondario .

Quel codice potrebbe forse essere la fase finale del processo. Lo farebbe se avessi un solo sistema operativo o se tutti i sistemi operativi sul tuo sistema utilizzassero caricatori di avvio compatibili (ad esempio due installazioni Linux che utilizzano entrambi GRUB, quindi qualsiasi GRUB che è stato aggiornato per ultimo può offrire l'avvio in uno di essi), allora presenta i menu (se desiderato) caricati in un kernel e passa il controllo sul sistema operativo.

Nel caso in cui tu abbia un sistema operativo non compatibile con quel bootloader, potrebbe caricarsi a catena. Ad esempio, se hai Windows e Linux sullo stesso computer, l'opzione GRUB per il caricamento di Windows caricherà infatti un altro bootloader che conosce solo l'installazione / i di Windows e gli passerà sopra. Mentre questa era una fase terziaria del processo, è ancora chiamata boot loader secondario , perché non sa né si preoccupa che prima ci fosse un altro boot loader secondario. Questo sarebbe anche il caso di un'installazione Linux che utilizzava un diverso tipo di bootloader secondario.

Principalmente quando parliamo del bootloader in termini di Linux, generalmente non intendiamo il codice ROM (non fa parte di Linux, o è cambiato installando Linux). Quando lo facciamo update-grub, stiamo cambiando il bootloader secondario, che di solito è in / boot di una particolare installazione. Quando lo facciamo, install-grublo stiamo cambiando e anche il bootloader primario nell'MBR in modo che abbia abbastanza codice per sapere dove si trova / boot (forse avviando un RAID software mentre procede) e lo caricheremo ed eseguiremo quando esso stesso verrà eseguito .

Quindi, in sintesi, hai sbagliato a dire che la ROM faceva parte della memoria principale * perché era separata. (In effetti, la RAM è considerata antonymous per ROM). Avevi ragione sia nel dire che c'era un bootloader lì che nell'MBR, perché sono due passaggi del processo ed entrambi sono talvolta chiamati con quel nome. E la risposta a "I diversi SO memorizzano il loro bootloader in posti diversi?" è "principalmente", perché se i bootloader secondari incompatibili nasconderanno altri bootloader (se si installa Windows dopo aver installato Linux) o se si richiede il chainload nell'altro se richiesto (se si risolve tale situazione o si installa Linux dopo Windows), ma un sistema operativo possono condividere un bootloader secondario se sono compatibili (se installi Linux dopo un altro Linux che utilizza lo stesso tipo di bootloader secondario e può vedere l'altro Linux [a volte il software RAID confonde le cose e rende necessario il chainloading).

* Nei giorni in cui si usava a livello di programmazione sia la ROM che la RAM, questo era diverso. Su uno ZX Spectrum, ad esempio, la ROM sarebbe 16kiB e includerebbe un interprete BASIC, quindi oltre a darti il ​​punto di partenza per caricare qualcosa nel suo 48kiB o 128KiB (paginato) o RAM, (nel qual caso, si sta essenzialmente avviando in quell'interprete BASIC e quindi usarlo per avviare ciò che era sul nastro), c'erano un sacco di funzioni dell'interprete BASIC che i programmi nella RAM potevano usare (perché scrivere una funzione trig quando il computer ne ha già una in una posizione nota ? specialmente quando hai solo 48 kB per l'esecuzione di tutto il tuo codice). Questa ROM era anche visibile allo stesso modo della RAM, solo a indirizzi diversi. In tal caso la ROM faceva parte della memoria principale quanto la RAM, ma non era scrivibile.


0

Fai un esempio minimo di lavoro ed eseguilo su un emulatore per comprendere questi concetti:

printf '\364%509s\125\252' > main.img
qemu-system-x86_64 -hda main.img

Questo è un "bootloader" super semplice che esegue una singola hltistruzione. Maggiori informazioni su: https://stackoverflow.com/a/32483545/895245

È quindi possibile eseguirlo su hardware reale con:

sudo dd if=main.img of=/dev/sdX

e collegare l'USB sul computer e avviarlo.

Quando lo fai, diventa chiaro che il bootloader è qualcosa che vive su un disco di archiviazione permanente come USB o dischi rigidi.

Ciò che vive sulla ROM è il codice che avvia il bootloader per noi, chiamato firmware (o meno precisamente BIOS).


0

In passato, il programma di avvio risiedeva su nastro di carta perforata simile a quelli utilizzati dalle macchine telegrafiche o dai supporti di schede perforate ("non li vedo più in giro)". il processo si chiamava IPL, abbreviazione di Initial Program Load. A volte se non fosse disponibile un nastro di carta o un lettore di schede, sarebbe necessario immettere il codice binario IPL direttamente nel processore tramite una console sul pannello frontale. wow!

Oggi il codice IPL risiede in pROM che, quando eseguiti a loro volta, caricano ed eseguono qualsiasi boot loader secondario su misura per caricare (avvio) il sistema operativo desiderato. il caricatore secondario potrebbe trovarsi su qualsiasi supporto su qualsiasi parte dell'installazione nota o indirizzabile dal codice IPL.


-1

Il boot loader di solito si trova nel primo settore del disco rigido, generalmente chiamato Master Boot Record.

Saluti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.