# Carregador d'arrencada

Un carregador d'arrencada (boot loader en anglès) és un petit programa que realitza la inicialització bàsica del sistema. Aquest comportament ve donat per la forma en què està organitzat el programari en els ordinadors.
El sistema operatiu i el programari necessari per fer funcionar l'ordinador estan emmagatzemats en el disc dur (actualment pot executar-se un sistema operatiu des d'un disc òptic o un dispositiu USB). Per carregar-los en la memòria RAM seria necessari un altre sistema operatiu. Aquesta paradoxa es resol amb el carregador d'arrencada, que no és capaç de fer tasques complexes, però sí que conté les mínimes instruccions per carregar el sistema operatiu.
Els primers carregadors llegien el sistema operatiu des de suports externs com fitxes de paper o similars. Actualment la CPU executa codi des d'una memòria fixa ROM i es comença comprovant els dispositius d'emmagatzematge en un ordre prefixat en la BIOS i s'executa el carregador que es trobi primer (normalment en el del disc dur). Aquest carregador primari es troba en seccions arbitràries del dispositiu on es troba (normalment anomenades "seccions de càrrega").
Aquest primer carregador deriva a un carregador de programari secundari, molt més complex, sovint part del mateix sistema operatiu que carrega, i ja situat en qualsevol part del dispositiu d'emmagatzematge. És el cas de GRUB i LILO, que poden carregar sistemes operatius com Linux i Windows, o NTLDR, que només carrega Windows NT.

## Característiques

Un carregador o gestor d'arrencada (en anglès: bootloader) és un programa senzill (que no té la totalitat de les funcionalitats d'un sistema operatiu) dissenyat exclusivament per preparar tot el que necessita el sistema operatiu per funcionar. Normalment, s'utilitzen els carregadors d'arrencada multietapes, en què diversos programes petits se sumen els uns als altres, fins que l'últim carrega el sistema operatiu.
Als ordinadors moderns (després de 1975), el procés d'arrencada comença amb la CPU executant els programes continguts a la memòria ROM en una adreça predefinida (es configura la CPU per executar aquest programa, sense ajuda externa, en encendre l'ordinador).

### Carregador d'arrencada de segona etapa

Aquest programa conté funcionalitats rudimentàries per cercar unitats que es puguin seleccionar per participar en l'arrencada, i carregar un petit programa des d'una secció especial de la unitat més prometedora. El petit programa no és, en si mateix, un sistema operatiu sinó, simplement, un carregador d'arrencada de segon nivell, com Lilo o Grub, que és capaç de carregar el sistema operatiu pròpiament dit i, finalment, transferir-li el control. El sistema s'autoiniciarà i pot carregar els controladors de dispositius i altres programes que són necessaris per al funcionament normal del sistema operatiu.
El procés d'arrencada es considera complet quan l'ordinador està preparat per contestar els requisits de l'exterior. El típic ordinador modern arrenca en, aproximadament, un minut (del qual, 15 segons són emprats pels carregadors d'arrencada preliminars i, la resta, pel carregador del sistema operatiu), mentre que els grans servidors poden necessitar diversos minuts per arrencar i començar tots els serveis; per assegurar una alta disponibilitat, ofereixen uns serveis abans que altres.
La majoria dels sistemes embeguts han d'arrencar gairebé instantàniament, per exemple, esperar un minut per poder veure la televisió es considera inacceptable. Per això, tenen el sistema operatiu a la ROM o memòria flash, gràcies al que poden ser executats de forma gairebé instantània.

## Bootsplash & Splashy

A Linux, durant el procés d'arrencada es mostra per pantalla la seqüència de mòduls i altres components del sistema operatiu a mode text. Per defecte es mostra així, però un pegat anomenat splashy, (substitut de bootsplash) permet amagar aquestes línies de text (amb l'opció "quiet" y "splash" en les línies d'arrencada), oferint al seu lloc una imatge més amigable, amb una barra de progrés. No obstant això, es pot canviar al mode "verbose" (detallat) prement la tecla F2, cosa que ens mostrarà de nou els missatges propis del procés d'arrencada. També dota la consola de Linux d'un fons totalment configurable.
Tot això és possible gràcies al framebuffer, que possibilita les consoles a resolucions i profunditats de color altes.

## Ordinadors personals (PC)
### Dispositius d'arrencada

El dispositiu d'arrencada és el dispositiu des del qual es carrega el sistema operatiu. El microprogramari UEFI o BIOS d'un PC modern admet l'arrencada des de diversos dispositius, generalment una unitat d'estat sòlid o unitat de disc dur a través de la GPT o Master Boot Record (MBR) en aquesta unitat o disc, una unitat de disc òptic (fent servir El Torito), un dispositiu d'emmagatzematge massiu USB (unitat flaix basada en FTL, targeta SD o lector de targetes de memòria, disc dur USB unitat de disc, unitat de disc òptic USB, etc.), o una targeta d'interfície de xarxa (usant PXE). Els dispositius d'arrencada BIOS més antics i menys comuns inclouen disquets, Zip drives i LS-120.
Normalment, el microprogramari del sistema (UEFI o BIOS) permetrà a l'usuari configurar un "ordre d'arrencada". Si l'ordre d'arrencada s'estableix a "primer, la unitat de DVD; segon, la unitat de disc dur", llavors el microprogramari intentarà arrencar des de la unitat de DVD i, si això falla (per exemple, perquè no hi ha DVD a la unitat), intentarà arrencar des de la unitat de disc dur local.
Per exemple, en un PC amb Windows instal·lat al disc dur, l'usuari podria establir l'ordre d'inici en què es va indicar anteriorment i després inserir un Linux Live CD per provar Linux sense haver d'instal·lar un sistema operatiu al disc dur. Aquest és un exemple d'arrencada dual, en què l'usuari tria quin sistema operatiu iniciar després que l'ordinador hagi realitzat la seva autocomprovació d'encesa (POST). En aquest exemple d'arrencada dual, l'usuari tria inserir o treure el DVD de l'ordinador, però és més comú triar quin sistema operatiu arrencar seleccionant des d'un menú gestor d'arrencada al dispositiu seleccionat, usant el teclat de l'ordinador per seleccionar des d'un menú d'arrencada BIOS o UEFI, o tots dos; el menú d'inici generalment s'ingressa prement les tecles F8 o F12 durant el POST; la Configuració del BIOS generalment s'ingressa prement les tecles F2 o DEL durant la POST.
Hi ha diversos dispositius disponibles que permeten a l'usuari "arrencar ràpidament" en allò que sol ser una variant de Linux per a diverses tasques senzilles com l'accés a Internet; alguns exemples són Splashtop i Latitude ON.

### Seqüència d'arrencada

En iniciar-se, la CPU x86 d'un ordinador personal compatible amb IBM, executa a mode real, la instrucció ubicada a vector de reinici (l'adreça de memòria física FFFF0h a processadors x86 de 16 bits i FFFFFFF0h en processadors x86 de 32 i 64 bits), generalment apunta al punt d'entrada del microprogramari (UEFI o BIOS) dins de la ROM. Aquesta ubicació de memòria normalment conté una instrucció de salt que transfereix l'execució a la ubicació del programa d'inici del microprogramari (UEFI o BIOS). Aquest programa executa una autoprova d'encesa (POST) per comprovar i inicialitzar els dispositius necessaris, com la memòria principal (DRAM), el bus PCI i els dispositius PCI (inclòs el funcionament integrat ROM opcional). Un dels passos més complicats és configurar DRAM sobre SPD, cosa que es complica encara més pel fet que en aquest punt la memòria és molt limitada.
Després d'inicialitzar el maquinari requerit, el microprogramari (UEFI o BIOS) passa per una llista preconfigurada de dispositius d'emmagatzematge no volàtil ("seqüència d'arrencada de dispositiu") fins que en trobeu un d'arrencada. Un dispositiu MBR d'arrencada es defineix com un que es pot llegir i on els dos últims bytes del primer sector contenen la paraula little-endian AA55h, trobada com a seqüència de bytes 55h, AAh al disc (també coneguda com a Signatura d'arrencada MBR), o on s'estableixi d'una altra manera que el codi dins del sector és executable a PC x86.
Quan el BIOS ha trobat un dispositiu d'arrencada, carrega el sector d'arrencada a l'adreça lineal 7C00h (normalment segment:offset 0000h:7C00h,$^{:29}$ però alguns BIOS usen erròniament 07C0h:0000h) i transfereixen l'execució al codi d'arrencada. En el cas d'un disc dur, això s'anomena Master Boot Record (MBR). El codi MBR convencional comprova la taula de particions del MBR per cercar una partició configurada com a "arrencable". (el que té l'indicador actiu establert). Si hi ha una partició activa, el codi MBR carrega el codi sector d'arrencada d'aquesta partició, conegut com a Registre d'arrencada de volum (VBR), i l'executa. El codi inicial MBR sol ser específic del sistema operatiu.
El codi d'arrencada del sector és el carregador d'arrencada de primera etapa. Es troba a discos fixos i unitats extraïbles, i ha de cabre en els primers 446 bytes del Master Boot Record per deixar espai per a la taula de partició per omissió de 64 bytes amb quatre entrades de partició i la signatura d'arrencada de dos bytes, que requereix el BIOS per a un carregador d'arrencada adequat —o fins i tot menys, quan característiques addicionals com a més de quatre entrades de partició (fins a 16 amb 16 bytes cadascuna), una signatura de disc (6 bytes), una marca de temps de disc (6 bytes), una Partició activa avançada (18 bytes) o carregadors multi-boot també han de ser compatibles en alguns entorns. A floppy i superfloppy Volume Boot Records, fins a 59 bytes estan ocupats per al Bloc de paràmetres de BIOS estès en els volums FAT12 i FAT16 des de DOS 4.0, mentre que el FAT32 EBPB introduït amb DOS 7.1 requereix fins i tot 87 bytes, deixant només 423 bytes per al carregador d'arrencada quan s'assumeix una mida de sector de 512 bytes. Per tant, els sectors d'arrencada de Microsoft tradicionalment imposaven certes restriccions en el procés d'arrencada, per exemple, el fitxer d'arrencada havia d'ubicar-se en una posició fixa al directori arrel del sistema de fitxers i emmagatzemar-se com a sectors consecutius, condicions ateses per l'ordre SYS i lleugerament relaxat en versions posteriors de DOS. Després, el carregador d'arrencada va poder carregar els primers tres sectors del fitxer a la memòria, que va resultar contenir un altre carregador d'arrencada integrat capaç de carregar la resta del fitxer a la memòria. Quan Microsoft va afegir LBA i compatibilitat amb FAT32, fins i tot van canviar a un carregador d'arrencada que arribava a "dos" sectors físics i usava instruccions 386 per raons de mida. Alhora, altres proveïdors van aconseguir incloure molta més funcionalitat en un sol sector d'arrencada sense relaxar les restriccions originals de només una memòria disponible mínima (32 KB) i suport de processador (8088/8086). Per exemple, els sectors d'arrencada de DR-DOS poden localitzar el fitxer d'arrencada al sistema de fitxers FAT12, FAT16 i FAT32 i carregar-ho a la memòria com un tot mitjançant CHS o LBA, fins i tot si el fitxer no està emmagatzemat en una ubicació fixa i en sectors consecutius.
El VBR sol ser específic del sistema operatiu; no obstant això, la seva funció principal és carregar i executar el fitxer del carregador d'arrencada del sistema operatiu (com bootmgr o ntldr), que és el carregador d'arrencada de segona etapa, des d'una partició activa. Després, el carregador carrega el kernel del sistema operatiu des del dispositiu d'emmagatzematge.
Si no hi ha una partició activa, o el sector d'inici de la partició activa no és vàlid, l'MBR pot carregar un carregador d'inici secundari que seleccionarà una partició (sovint mitjançant l'entrada de l'usuari) i carregarà el vostre sector d'inici, que generalment carrega el kernel del sistema operatiu corresponent. En alguns casos, l'MBR també pot intentar carregar carregadors secundaris abans d'arrencar la partició activa. Si tota la resta falla, hauria d'emetre un INT 18h que fa la crida interrupció BIOS (seguit d'un INT 19h en cas que INT 18h tornés) per tornar el control al BIOS, que després intentaria arrencar altres dispositius, intentaria un arrencada remota a través de la xarxa.
Molts sistemes moderns (Intel Macs i PC més nous) fan servir UEFI.
A diferència del BIOS, UEFI (sense arrencada heretada a través de CSM) no depèn dels sectors d'arrencada, el sistema UEFI carrega el carregador d'arrencada (arxiu de Aplicació EFI al disc USB o a la Partició del sistema EFI) directament, i el kernel del sistema operatiu és carregat pel carregador.

## Notes

* ↑ La signatura a l'òfset +1FEh als sectors d'arrencada és 55h AAh, que és 55h en òfset +1FEh i AAh en òfset +1FFh. Com que la representació little-endian s'ha d'assumir en el context de les màquines compatibles amb IBM PC, això es pot escriure com una paraula de 16 bits AA55h en programes per a processadors x86 (tingueu en compte l'ordre intercanviat), mentre que s'hauria d'escriure com 55AAh en programes per a altres arquitectures de CPU usant una representació big-endian. Atès que això s'ha barrejat diverses vegades en llibres i fins i tot en documents de referència originals de Microsoft, aquest article utilitza la representació en disc basada en bytes basada en òfset per evitar possibles interpretacions errònies.
* ↑ La partició activa pot contenir un carregador d'arrencada de segona etapa, per exemple, OS/2 Boot Manager, en lloc d'un sistema operatiu.
* ↑ El manual de PC DOS 5.0 afirma incorrectament que els fitxers del sistema ja no necessiten ser contigus. Tanmateix, perquè el procés d'arrencada funcioni, els fitxers del sistema encara han d'ocupar les dues primeres entrades del directori i els primers tres sectors de IBMBIO.COM encara s'han d'emmagatzemar de manera contigua. SYS segueix ocupant-se d'aquests requisits.
* 1 2 Com a exemple, mentre que la funcionalitat estesa de DR-DOS MBRs i sector d'arrencada en comparació amb les contraparts MS-DOS/PC DOS encara podrien aconseguir-se utilitzant tècniques convencionals d'optimització de codi en llenguatge assemblador fins a 7.05, per a l'addició de LBA, FAT32 i LOADER són compatibles amb sectors 7.07 van haver de recórrer a codi automodificable, programació opcode de nivell en llenguatge de màquina, utilització controlada de (documentat) costat efectes, dades/codi multinivell superposició i tècniques algorítmiques folding per comprimir tot en un sol sector físic, ja que era un requisit per a retrocompatibilitat creuada amb altres sistemes operatius en escenaris d'arrencada múltiple i càrrega en cadena.
* ↑ Hi ha una excepció a la regla que el VBR de DR-DOS carregarà tot el fitxer IBMBIO.COM a la memòria: si el fitxer IBMBIO.COM és més gran que 29 KB, intentar carregar tot el fitxer a la memòria donaria com a resultat que el carregador d'arrencada sobreescrigui la pila i reubiqui la Taula de paràmetres del disc (DPT/FDPB). Per tant, un VBR de DR-DOS 7.07 només carregaria els primers 29 KB del fitxer a la memòria, confiant en un altre carregador integrat a la primera part de IBMBIO.COM per verificar aquesta condició i carregar la resta de larxiu a la memòria per si mateix si és necessari. Això no causa problemes de compatibilitat, ja que la mida de IBMBIO.COM mai no va superar aquest límit en versions anteriors sense aquest carregador. Combinat amb una estructura d'entrada dual, això també permet que el sistema sigui carregat per un VBR de PC DOS, que carregaria només els tres primers sectors del fitxer a la memòria.

## Referències

* ↑ «Definición de boot - Diccionario informático» (en castellà). [Consulta: 18 juliol 2023].
* ↑ Netty. «Boot - Definición y explicación» (en castellà), 26-10-2022. [Consulta: 18 juliol 2023].
* ↑ «Definición de proceso de arranque (de buteo, boot o inicio) de una computadora», 20-07-2016. [Consulta: 18 juliol 2023].
* ↑ «Welcome to the wiki of the Splashy Project» (en anglès), 08-03-2010. Arxivat de l'original el 27 de juliol de 2010. [Consulta: 11 juny 2020].
* ↑ «Welcome to the graphical world of Linux» (en anglès), 26-07-2007. Arxivat de l'original el 9 de juny de 2010. [Consulta: 11 juny 2020].
* ↑ «List of PC brands with their corresponding hot-keys». Arxivat de l'original el 2020-11-11. [Consulta: 26 setembre 2020].
* ↑ «How to Enter the BIOS on Any PC: Access Keys by Manufacturer | Tom's Hardware». Arxivat de l'original el 2023-02-20. [Consulta: 26 setembre 2020].
* ↑ Brown, Eric. «MontaVista Linux drives Dell's quick-boot feature». linuxdevices.com, 02-10-2008. [Consulta: 20 novembre 2010].
* ↑ «SplashTop Linux On HP, Dell Notebooks?». Phoronix, 14-06-2008. Arxivat de l'original el 2016-10-05. [Consulta: 20 novembre 2010].
* ↑ «Voodoo Envy's Instant-On IOS (powered by Splashtop)». YouTube. Arxivat de l'original el 10 de març de 2023. [Consulta: 20 novembre 2010].
* ↑ «iAPX 286 Programmer's Reference Manual». Intel, 1983. Arxivat de l'original el 2022-10-09. [Consulta: 23 agost 2019]. «Since the CS register contains F000 (thus specifying a code segment starting at physical address F0000) and the instruction pointer contains FFF0, the processor will execute its first instruction at physical address FFFF0H.»
* ↑ «80386 Programmer's Reference Manual». Intel, 1986. Arxivat de l'original el 2022-10-09. [Consulta: 3 novembre 2013]. «After RESET, address lines A31-20 are automatically asserted for instruction fetches. This fact, together with the initial values of CS:IP, causes instruction execution to begin at physical address FFFFFFF0H.»
* ↑ «Intel 64 and IA-32 Architectures Software Developer's Manual». Intel Corporation, 01-05-2012. Arxivat de l'original el 2022-10-09. [Consulta: 23 agost 2012]. «The first instruction that is fetched and executed following a hardware reset is located at physical address FFFFFFF0h. This address is 16 bytes below the processor's uppermost physical address. The EPROM containing the software-initialization code must be located at this address.»
* 1 2 3 4 «Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM - README.TXT and BOOT.TXT - A short description of how OpenDOS is booted», 02-10-1997. Arxivat de l'original el 2003-10-04. [Consulta: 29 març 2009].
* 1 2 ; Phoenix Technologies Ltd; Intel Corporation«BIOS Boot Specification 1.01», 11-01-1996. Arxivat de l'original el 2022-10-09. [Consulta: 21 desembre 2017].
* ↑ The MS-DOS Encyclopedia: versions 1.0 through 3.2. Completely reworked. Redmond, Washington, USA: Microsoft Press, 1988. ISBN 1-55615-049-0. OCLC 16581341. LCCN 87-21452. (xix+1570 pàgines; 26 cm) (NB. Aquesta edició es va publicar l'any 1988 després d'una extensa reelaboració de la primera edició de 1986 retirada per un equip diferent d'autors: «The MS-DOS Encyclopedia (1988)». Arxivat de l'original el 2018-10-14.)
* 1 2 3 «Chapter 2: The System Footprint». A: DOS Internals. 1st printing, 1st. Addison Wesley Publishing Company, gener 1994. ISBN 978-0-201-60835-9. (xxvi+738+iv pages, 3.5"-floppy ) Errata:
* ↑ Rosch, Winn L. (1991-02-12). «DR DOS 5.0 - The better operating system?». PC Magazine 10 (3): 241–246, 257, 264, 266. Arxivat de l'original el 2019-07-25. «[…] SYS has been improved under DR DOS 5.0 so you don't have to worry about leaving the first cluster free on a disk that you want to make bootable. The DR DOS system files can be located anywhere on the disk, so any disk with enough free space can be set to boot your system. […]» (NB. La font ho atribueix a la utilitat SYS, mentre que de fet aquesta és una característica del carregador d'arrencada avançat al sector d'arrencada. SYS només planta aquest sector al disc.)
* ↑ «FAT32 in DR-DOS». opendos@delorie, 17-01-2001. Arxivat de l'original el 2017-10-06. [Consulta: 6 octubre 2017]. «[…] The DR-DOS boot sector […] searches for the IBMBIO.COM (DRBIOS.SYS) file and then loads the *whole* file into memory before it passes control to it. […]»
* ↑ «Can't copy». opendos@delorie, 20-02-2002. Arxivat de l'original el 2017-10-06. [Consulta: 6 octubre 2017]. «[…] The DR-DOS boot sector loads the whole IBMBIO.COM file into memory before it executes it. It does not care at all about the IBMDOS.COM file, which is loaded by IBMBIO.COM. […] The DR-DOS boot sector […] will find the […] kernel files as long as they are logically stored in the root directory. Their physical location on the disk, and if they are fragmented or not, is don't care for the DR-DOS boot sector. Hence, you can just copy the kernel files to the disk (even with a simply COPY), and as soon as the boot sector is a DR-DOS sector, it will find and load them. Of course, it is difficult to put all this into just 512 bytes, the size of a single sector, but this is a major convenience improvement if you have to set up a DR-DOS system, and it is also the key for the DR-DOS multi-OS LOADER utility to work. The MS-DOS kernel files must reside on specific locations, but the DR-DOS files can be anywhere, so you don't have to physically swap them around each time you boot the other OS. Also, it allows to upgrade a DR-DOS system simply by copying the kernel files over the old ones, no need for SYS, no difficult setup procedures as required for MS-DOS/PC DOS. You can even have multiple DR-DOS kernel files under different file names stored on the same drive, and LOADER will switch between them according to the file names listed in the BOOT.LST file. […]»
* ↑ «The continuing saga of Windows 3.1 in enhanced mode on OmniBook 300». MoHPC - the Museum of HP Calculators, 14-08-2017. Arxivat de l'original el 2017-10-06. [Consulta: 6 octubre 2017]. «[…] the DR-DOS FDISK does not only partition a disk, but can also format the freshly created volumes and initialize their boot sectors in one go, so there's no risk to accidentally mess up the wrong volume and no need for FORMAT /S or SYS. Afterwards, you could just copy over the remaining DR-DOS files, including the system files. It is important to know that, in contrast to MS-DOS/PC DOS, DR-DOS has "smart" boot sectors which will actually "mount" the file-system to search for and load the system files in the root directory instead of expecting them to be placed at a certain location. Physically, the system files can be located anywhere and also can be fragmented. […]»
* ↑ «Intel Platform Innovation Framework for EFI». Intel. Arxivat de l'original el 2011-08-21. [Consulta: 7 gener 2008].
* ↑ «OpenBIOS - coreboot». coreboot.org. Arxivat de l'original el 2013-03-18. [Consulta: 20 març 2013].
* ↑ «UEFI - OSDev Wiki». Arxivat de l'original el 2020-11-12. [Consulta: 26 setembre 2020].

## Vegeu també

* Boot Configuration Data