init

init (z anglického initialization) je v informatice název programu v Unixu a unixových systémech, který je na počítači spuštěn jako první proces, a který následně spouští všechny ostatní procesy. Proces init je tak předek (ve smyslu rodičpotomek) všech dalších procesů, který má typické číslo procesu jedna (PID=1). Běží na pozadí jako démon, dokud není systém vypnut.

Charakteristika

V unixových systémech se funkčnost procesu init odchýlila zvyklostí v původních systémech Unix a jeho BSD. Nejrozšířenější současné linuxové distribuce (v roce 2016) používají místo tradičního modelu s programem init nástroj systemd, launchd nebo Upstart (viz níže), které jsou řízeny událostmi. Stále však existují distribuce (například Slackware), které používají klasické BSD-like spouštěcí skripty. Existují i distribuce, které používají své vlastní verze spouštěcích skriptů (např. Gentoo Linux).

I když má proces init číslo jedna (PID=1), není obvykle v linuxových distribucích dopravdy prvním procesem, který je spuštěn. Při startu jsou nejprve spouštěny nástroje initrd (nověji initramfs), které zajišťují zavedení modulů (ovladačů) pro obsluhu úložných zařízení (např. SCSI řadič nebo ovladač síťové karty při bezdiskovém startu). Po jejich ukončení je však proces číslo jedna nahrazen procesem init (nebo např. systemd), protože jádro operačního systému předpokládá, že rodič všech procesů bude mít PID=1 (např. při adopci sirotků nebo při double-fork, který používají při svém vzniku démoni).

Research Unix-style

Research Unix init spouštěl inicializaci v shellu umístěném v /etc/rc. Neexistují zde žádné runlevely, jelikož /etc/rc rozhoduje, které programy jsou initem spoustěny a řízeny. Největší výhodou takového systému je jeho jednoduchost a snadná úprava fungování initu. Nicméně je zde riziko, že nový software přidaný do systému bude vyžadovat změny již existujích souborů a hrozí, že se počítač nespustí správně či dokonce vůbec.

Runlevely

Operační SystémVýchozí Runlevel
AIX2
Gentoo Linux3[1]
HP-UX3
Slackware Linux3
Solaris3[2]
Unix Systém V2
UnixWare3

Runlevely v System V popisují stavy počítače charakterizované běžícími procesy. Obvykle je 8 runlevelů – 0 až 6 a S. Z těchto osmi jsou tři tzv. „rezervované“:

0. Halt (vypnutí počítače)
1. Jednouživatelský mód
6. Reboot

Kromě runlevelů 0, 1 a 6 každý Unix a Unix-like systém používá runlevely trochu jinak. Definice chování runlevelů se nachází typicky v /etc/inittab.

Výchozí Runlevely

V linuxových distribucích vyvolá runlevel 5 víceuživatelské grafické prostředí podporující X Window System, většinou s X display managerem jako je například GDM nebo KDM. Avšak například operační systém Solaris má runlevel 5 vyhrazen pro vypnutí počítače.

Ve většině systémů lze zjistit runlevel příkazem runlevel nebo příkazem who -r.[3]

Uživatel root může měnit runlevely pomocí příkazů telinit nebo init.

Náhrady za init

Jednou z hlavních příčin hledání náhrad za init je fakt, že spouští skripty sériově. To znamená, že následující skript může být spuštěn až po dokončení předchozího skriptu, což může mít následek prodlevy při startu systému. Toto zpoždění lze zkrátit pomocí SSD disků, ale neřeší příčinu.

Byly provedeny různé snahy nahradit tradiční init démony k řešení tohoto a dalších problémů, včetně:

  • BootScripts v GoboLinux
  • Initng, kompletní náhrada initu s možností spouštět skripty asynchronně
  • launchd
  • OpenRC
  • runit
  • Service Management Facility
  • systemd
  • SystemStarter
  • Upstart

Reference

V tomto článku byl použit překlad textu z článku init na anglické Wikipedii.

  1. Initscripts [online]. Gentoo.org, 2011-03-02 [cit. 2016-09-19]. Dostupné online. (anglicky) 
  2. Oracle Documentation [online]. Docs.sun.com, 2010-09-07 [cit. 2016-09-19]. Dostupné v archivu pořízeném dne 2007-08-18. (anglicky) 
  3. UNIX man pages: runlevel (8) [online]. Unixhelp.ed.ac.uk, 1997-05-27 [cit. 2016-09-19]. Dostupné v archivu pořízeném dne 2014-07-14. (anglicky) 

Související články