# Procés d'arrencada de Linux

El procés d'arrencada en diverses etapes de Linux és en molts aspectes similar al BSD i altres processos d'arrencada d'estil Unix, dels quals deriva.
L'arrencada d'una instal·lació de Linux implica diverses etapes i components de programari, com ara la inicialització del microprogramari, l'execució d'un carregador d'arrencada, la càrrega i l'inici d'una imatge del nucli de Linux i l'execució de diversos scripts i dimonis d'inici. Per a cadascuna d'aquestes etapes i components hi ha diferents variacions i enfocaments; per exemple, GRUB, coreboot o Das U-Boot es poden utilitzar com a carregadors d'arrencada (els exemples històrics són LILO, SYSLINUX o Loadlin), mentre que els scripts d'inici poden ser d'estil d'inici tradicional o la configuració del sistema es pot realitzar mitjançant alternatives modernes com ara systemd o Upstart.

## Visió general

Les primeres etapes del procés d'inici de Linux depenen molt de l'arquitectura de l'ordinador. El maquinari compatible amb IBM PC és una arquitectura en què s'utilitza habitualment Linux; en aquests sistemes, la BIOS té un paper important, que pot no tenir anàlegs exactes en altres sistemes. En l'exemple següent, s'assumeix el maquinari compatible amb l'IBM PC:
* La BIOS realitza tasques d'inici com l'autoprova d'engegada específica de la plataforma de maquinari real. Un cop s'ha enumerat el maquinari i s'ha inicialitzat correctament el maquinari necessari per a l'arrencada, la BIOS carrega i executa el codi d'arrencada des del dispositiu d'arrencada configurat.
* El carregador d'arrencada sovint presenta a l'usuari un menú de possibles opcions d'arrencada i té una opció per defecte, que es selecciona després d'un temps. Un cop feta la selecció, el carregador d'arrencada carrega el nucli a la memòria, li proporciona alguns paràmetres i li dona el control.
* El nucli, si es comprimeix, es descomprimirà. A continuació, configura les funcions del sistema, com ara el maquinari essencial i la paginació de memòria, i crida a start_kernel que realitza la major part de la configuració del sistema (interrupcions, la resta de gestió de memòria, inicialització de dispositius i controladors, etc). A continuació, s'inicia, per separat, el procés inactiu, el planificador i el procés d'inici, que s'executa a l'espai d'usuari.
* L'inici consisteix en scripts que s'executen per l'intèrpret d'ordres (sysv, bsd, runit) o fitxers de configuració executats pels components binaris (systemd, upstart). Init té nivells específics (sysv, bsd) o objectius (systemd), cadascun dels quals consta d'un conjunt específic de serveis (dimonis). Aquests proporcionen diversos serveis i estructures que no són del sistema operatiu i formen l'entorn d'usuari. Un entorn de servidor típic inicia un servidor web, serveis de bases de dades i xarxes.
* L'entorn d'escriptori típic comença amb un dimoni, anomenat gestor de pantalla, que inicia un entorn gràfic que consta d'un servidor gràfic que proporciona una pila gràfica subjacent bàsica i un gestor d'inici de sessió que ofereix la possibilitat d'introduir credencials i seleccionar una sessió. Després que l'usuari hagi introduït les credencials correctes, el gestor de sessions inicia una sessió. Una sessió és un conjunt de programes com ara elements d'interfície d'usuari (taulers, escriptoris, miniaplicacions, etc.) que, en conjunt, poden formar un entorn d'escriptori complet.
En tancar, es crida a init per tancar totes les funcionalitats de l'espai d'usuari de manera controlada. Un cop han finalitzat tots els altres processos, init fa una crida al sistema al nucli indicant-li que tanqui el sistema.

## Fases
### Carregador d'arrencada

La fase del carregador d'arrencada varia segons l'arquitectura de l'ordinador. Com que les fases anteriors no són específiques del sistema operatiu, es considera que el procés d'arrencada basat en la BIOS per a les arquitectures x86 i x86-64 s'inicia quan el codi del registre d'arrencada mestre (MBR) s'executa en mode real i el carregador d'arrencada de la primera etapa. està carregat. Als sistemes UEFI, el nucli de Linux es pot executar directament pel microprogramari UEFI mitjançant EFISTUB, però normalment utilitza GRUB 2 o systemd-boot com a carregador d'arrencada. A continuació es mostra un resum d'alguns carregadors d'arrencada populars:
* GRUB 2 es diferencia de GRUB 1 per ser capaç de detecció automàtica de diversos sistemes operatius i configuració automàtica. L'etapa1 es carrega i s'executa per la BIOS des del registre d'arrencada mestre (MBR). El carregador de l'etapa intermèdia (stage1.5, normalment core.img) el carrega i executa el carregador stage1. El carregador de la segona etapa (stage2, els fitxers /boot/grub/) es carrega a stage1.5 i mostra el menú d'inici de GRUB que permet a l'usuari triar un sistema operatiu o examinar i editar els paràmetres d'inici. Després de triar una entrada de menú i donar-se els paràmetres opcionals, GRUB carrega el nucli de Linux a la memòria i li passa el control. GRUB 2 també és capaç de carregar en cadena un altre carregador d'arrencada. Als sistemes UEFI, stage1 i stage1.5 solen ser el mateix fitxer d'aplicació UEFI (com ara grubx64.efi per a sistemes UEFI x64).
* systemd-boot (abans Gummiboot), un carregador d'arrencada inclòs amb systemd que requereix una configuració mínima (només per a sistemes UEFI).
* SYSLINUX/ISOLINUX és un carregador d'arrencada especialitzat a arrencar instal·lacions completes de Linux des de sistemes de fitxers FAT. Sovint s'utilitza per a disquets d'arrencada o rescat, USB en directe i altres sistemes d'arrencada lleugers. ISOLINUX l'utilitzen generalment els CD en directe de Linux i els CD d'instal·lació d'arrencada.
* rEFInd, un gestor d'arrencada per a sistemes UEFI.
* coreboot és una implementació gratuïta de la UEFI o la BIOS i normalment es desplega amb la placa del sistema i les actualitzacions de camp proporcionades pel venedor si cal. Parts del coreboot es converteixen en la BIOS del sistema i romanen residents a la memòria després de l'arrencada.
* Das U-Boot és un carregador d'arrencada per a sistemes incrustats. S'utilitza en sistemes que no tenen BIOS/UEFI sinó que utilitzen mètodes personalitzats per llegir el carregador d'arrencada a la memòria i executar-lo.
Els carregadors d'arrencada històrics, que ja no són d'ús comú, inclouen:
* LILO no entén ni analitza la disposició del sistema de fitxers. En lloc d'això, es crea un fitxer de configuració (/etc/lilo.conf ) en un sistema en directe que mapeja la informació de desplaçament en brut (eina mapper) sobre la ubicació del nucli i els discs ram (initrd o initramfs). El fitxer de configuració, que inclou dades com ara la partició d'arrencada i el nom del camí del nucli per a cadascun, així com opcions personalitzades si cal, s'escriu juntament amb el codi del carregador d'arrencada al sector d'arrencada MBR. Quan aquest sector d'arrencada es llegeix i el control de la BIOS, LILO carrega el codi del menú i el dibuixa, després utilitza els valors emmagatzemats juntament amb l'entrada de l'usuari per calcular i carregar el nucli de Linux o carregar en cadena qualsevol altre carregador d'arrencada.
* GRUB 1 inclou lògica per llegir sistemes de fitxers comuns en temps d'execució per accedir al seu fitxer de configuració. Això dona a GRUB 1 la possibilitat de llegir el seu fitxer de configuració des del sistema de fitxers en lloc d'incrustar-lo a l'MBR, cosa que li permet canviar la configuració en temps d'execució i especificar discos i particions en un format llegible per l'home en lloc de confiar en desplaçaments. També conté una interfície de línia d'ordres, que fa que sigui més fàcil arreglar o modificar GRUB si està mal configurat o corrupte.
* Loadlin és un carregador d'arrencada que pot substituir un nucli DOS o Windows 9x en execució amb el nucli Linux en temps d'execució. Això pot ser útil en el cas del maquinari que s'ha d'encendre mitjançant programari i per als quals aquests programes de configuració són propietaris i només estan disponibles per a DOS. Aquest mètode d'arrencada és menys necessari avui dia, ja que Linux té controladors per a multitud de dispositius de maquinari, però s'ha utilitzat en dispositius mòbils. Un altre cas d'ús és quan el Linux es troba en un dispositiu d'emmagatzematge que no està disponible per a la BIOS per arrencar: DOS o Windows poden carregar els controladors adequats per compensar la limitació de la BIOS i arrencar Linux des d'allà.

### Nucli

El nucli de Linux gestiona tots els processos del sistema operatiu, com ara la gestió de la memòria, la programació de tasques, l'E/S, la comunicació entre processos i el control general del sistema. Es carrega en dues etapes – a la primera, el nucli (com a fitxer d'imatge comprimit) es carrega a la memòria i es descomprimeix, i es configuren algunes funcions fonamentals, com ara la gestió bàsica de la memòria. Aleshores, el control es canvia una darrera vegada al procés d'inici del nucli principal. Una vegada que el nucli estigui completament operatiu – i com a part de la seva posada en marxa, quan es carrega i s'executa – el nucli busca un procés d'inici per executar-se, que (per separat) configura un espai d'usuari i els processos necessaris per a un entorn d'usuari i l'inici de sessió final.. Aleshores es permet que el nucli en si estigui inactiu, subjecte a les trucades d'altres processos.

### Espai d'usuari primerenc

initramfs, també conegut com a espai d'usuari primerenc, està disponible des de la versió 2.5.46 del nucli Linux, amb la intenció de substituir tantes funcions com sigui possible que abans hauria realitzat el nucli durant el procés d'inici. Els usos típics de l'espai d'usuari primerenc són detectar quins controladors de dispositiu es necessiten per carregar el sistema de fitxers de l'espai d'usuari principal i carregar-los des d'un sistema de fitxers temporal. Moltes distribucions utilitzen dracut per generar i mantenir la imatge initramfs.

### Procés d'inici

Un cop el nucli s'ha iniciat, inicia el procés d'inici, un dimoni que arrenca l'espai d'usuari, per exemple, comprovant i muntant sistemes de fitxers i iniciant altres processos. El sistema d'inici és el primer dimoni que s'inicia (durant l'arrencada) i l'últim dimoni que finalitza (durant l'apagada).
Històricament aquest era el "SysV init", que només s'anomenava "init". És probable que les distribucions de Linux més recents utilitzin una de les alternatives més modernes com ara systemd. A continuació es mostra un resum dels principals processos d'inici:
* SysV init (o simplement "init") és similar als processos d'inici Unix i BSD, dels quals va derivar. En un sistema Linux estàndard, init s'executa amb un paràmetre, conegut com a nivell d'execució, que pren un valor de 0 a 6 i determina quins subsistemes es fan operatius. Cada nivell d'execució té els seus propis scripts que codifiquen els diferents processos implicats en la configuració o la sortida del nivell d'execució donat, i són aquests scripts els que es fan referència segons sigui necessari en el procés d'arrencada. Els scripts d'inici normalment es mantenen en directoris amb noms com ara "/etc/rc...". El fitxer de configuració de nivell superior per a init es troba a /etc/inittab. Durant l'arrencada del sistema, comprova si s'especifica un nivell d'execució predeterminat a /etc/inittab i, si no, demana que el nivell d'execució entri a través de la consola del sistema. A continuació, passa a executar tots els scripts d'arrencada rellevants per al nivell d'execució donat, incloent-hi la càrrega de mòduls, la comprovació de la integritat del sistema de fitxers arrel (que es va muntar només de lectura) i després el torna a muntar per a un accés complet de lectura i escriptura, i configura el xarxa. Després d'haver generat tots els processos especificats, init queda inactiu i espera que succeeixi un dels tres esdeveniments: processos que van començar a finalitzar o morir, un senyal de fallada d'alimentació, o una sol·licitud a través de /sbin/telinit per canviar encara més el nivell d'execució.
* systemd és una alternativa moderna a SysV init. Igual que init, systemd és un dimoni que gestiona altres dimonis. Tots els dimonis, inclòs systemd, són processos en segon pla. Lennart Poettering i Kay Sievers, enginyers de programari que inicialment van desenvolupar systemd, van intentar superar l'eficiència del dimoni d'inici de diverses maneres. Volien millorar el marc de programari per expressar dependències, permetre que es fes més processament en paral·lel durant l'arrencada del sistema i reduir la sobrecàrrega computacional de l'intèrpret d'ordres. Les instruccions d'inicialització de Systemd per a cada dimoni es registren en un fitxer de configuració declaratiu en lloc d'un script d'intèrpret d'ordres. Per a la comunicació entre processos, systemd posa a disposició dels dimonis en execució els sòcols de domini Unix i el D-Bus. Systemd també és capaç de paral·lelització agressiva.

## Referències

* ↑ «The Linux Booting Process - 6 Steps Described in Detail» (en anglès), 01-02-2020. [Consulta: 16 desembre 2023].
* ↑ «Guide to the Boot Process of a Linux System» (en anglès). [Consulta: 16 desembre 2023].
* ↑ «EFI stub kernel - Gentoo Wiki» (en anglès). wiki.gentoo.org. [Consulta: 2 novembre 2020].
* ↑ «Initramfs arrives» (en anglès). [Consulta: 14 novembre 2011].