prof. Nunzio Brugaletta

atapSO

EnneBi – Computer Science
AvantiIndietroInizio




Inizializzazione di un sistema Linux

Il piccolo programma residente nel ROM BIOS carica da disco il settore di boot: un piccolo settore di 512 byte dove risiede un programma che legge l'immagine compressa del kernel. Questa è generalmente /boot/vmlinuz. A questo punto il file è scompattato in memoria e viene costruita una immagine del kernel a cui viene ceduto il controllo. Viene effettuata l'inizializzazione dei componenti hardware, montato il file system principale e lanciato /sbin/init che diventa il processo con ID 1, il padre di tutti i processi e che si assume il compito di lanciare i servizi necessari.

Per la scelta dei servizi, che il processo init avvia, Linux, tradizionalmente, utilizzava i runlevel. Un runlevel è uno stato della macchina cui corrispondono alcuni servizi invece che altri. In un runlevel potrebbe essere avviato, per esempio, il web server e in un altro runlevel no. Si tratta di un numero, compreso fra 0 e 9, cui è associata una determinata configurazione:

Run level

Modalità

0

Halt

1

Mono utente

2

Multiutente ma senza supporto della rete

3

Multiutente

4

Non usata

5

Workstation grafica con X Window System

6

Reboot

7 – 9

Non utilizzati

Il vecchio sistema di avvio di Linux prevedeva un file di inizializzazione dei runlevel (/etc/inittab) e il demone init che avviava in sequenza i servizi. Il sistema che attualmente si avvia a sostituirlo totalmente si basa sul demone Upstart che avvia o ferma i servizi, in parallelo e quindi più velocemente rispetto al sistema tradizionale sequenziale, in base al verificarsi di eventi.

Il sistema si basa su:

$ less /etc/init/rc-sysinit.conf
# rc-sysinit - System V initialisation compatibility 
# 
# This task runs the old System V-style system initialisation scripts, 
# and enters the default runlevel when finished. 

description   "System V initialisation compatibility" 
author        "Scott James Remnant <scott@netsplit.com>" 

start on filesystem and net-device-up IFACE=lo 
stop on runlevel 

# Default runlevel, this may be overriden on the kernel command-line 
# or by faking an old /etc/inittab entry 
env DEFAULT_RUNLEVEL=2
...
$ less /etc/init/rc.conf

# rc - System V runlevel compatibility 
# 
# This task runs the old System V-style rc script when changing between 
# runlevels. 

description   "System V runlevel compatibility" 
author        "Scott James Remnant <scott@netsplit.com>" 

start on runlevel [0123456] 
stop on runlevel [!$RUNLEVEL] 

export RUNLEVEL 
export PREVLEVEL 

console output 
env INIT_VERBOSE 

task 

exec /etc/init.d/rc $RUNLEVEL



AvantiIndietro - Inizio

http://ennebi.solira.org

ennebi@solira.org