drin - init

Version 7 Unix : /etc- Auflistung, zeigt init und rc
Version 7 Unix: Inhalt eines /etc/rc Bourne-Shell- Skripts

In Unix - basierten Computer - Betriebssysteme , init (kurz für Initialisierung ) ist der erste Prozess während gestartet Booten des Computersystems. Init ist ein Daemon- Prozess, der so lange läuft, bis das System heruntergefahren wird. Er ist direkter oder indirekter Vorfahre aller anderen Prozesse und übernimmt automatisch alle verwaisten Prozesse . Init wird vom Kernel während des Bootvorgangs gestartet ; eine Kernel-Panik tritt auf, wenn der Kernel ihn nicht starten kann. Init wird normalerweise die Prozesskennung 1 zugewiesen .

In Unix-Systemen wie System III und System V weicht das Design von init von der Funktionalität ab, die von init in Research Unix und seinen BSD- Derivaten bereitgestellt wird . Bis vor kurzem verwendeten die meisten Linux-Distributionen ein traditionelles Init, das einigermaßen kompatibel mit System V ist, während einige Distributionen wie Slackware Startskripte im BSD-Stil verwenden und andere wie Gentoo ihre eigenen angepassten Versionen haben.

Seitdem wurden mehrere zusätzliche init-Implementierungen erstellt, die versuchen, Designbeschränkungen in den traditionellen Versionen zu beheben. Dazu gehören launchd , die Service Management Facility , systemd , Runit und OpenRC .

Forschung im Unix-Stil/BSD-Stil

Research Unix init führte das Initialisierungs- Shell-Skript aus, das sich unter befindet /etc/rc, und startete dann getty auf Terminals unter der Kontrolle von /etc/ttys. Es gibt keine Runlevel; die /etc/rcDatei bestimmt, welche Programme von init ausgeführt werden. Der Vorteil dieses Systems besteht darin, dass es einfach und leicht manuell bearbeitet werden kann. Neue Software, die dem System hinzugefügt wird, kann jedoch Änderungen an vorhandenen Dateien erforderlich machen, die ein nicht bootfähiges System verursachen können.

BSD init war vor 4.3BSD dasselbe wie das init von Research UNIX; in 4.3BSD wurde Unterstützung für das Ausführen eines Fenstersystems wie X auf grafischen Terminals unter der Kontrolle von hinzugefügt /etc/ttys. Um die Notwendigkeit des Bearbeitens zu beseitigen /etc/rc, unterstützen BSD-Varianten seit langem eine Site-spezifische /etc/rc.localDatei, die in einer Sub-Shell gegen Ende der Boot-Sequenz ausgeführt wird.

Ein vollständig modulares System wurde mit NetBSD 1.5 eingeführt und auf FreeBSD 5.0 und Nachfolger portiert . Dieses System führt Skripte im /etc/rc.dVerzeichnis aus. Im Gegensatz zur Skriptreihenfolge von System V, die aus dem Dateinamen jedes Skripts abgeleitet wird, verwendet dieses System explizite Abhängigkeits-Tags, die in jedem Skript platziert werden. Die Reihenfolge, in der Skripte ausgeführt werden, wird vom Dienstprogramm rcorder basierend auf den in diesen Tags angegebenen Anforderungen festgelegt.

SysV-Stil

Sysv-rc-conf , ein TUI- Dienstprogramm, das auswählt, welche Init-Skripte im SysV-Stil in jedem Runlevel ausgeführt werden

Im Vergleich zu seinen Vorgängern führte das UNIX System III von AT&T eine neue Art der Systemstartkonfiguration ein, die (mit Modifikationen) in UNIX System V überlebte und daher als "SysV-style Init" bezeichnet wird.

Ein laufendes System V befindet sich zu jedem Zeitpunkt in einem der vorbestimmten Anzahl von Zuständen, die als Runlevel bezeichnet werden . Mindestens ein Runlevel ist der normale Betriebszustand des Systems; Typischerweise repräsentieren andere Runlevel den Einzelbenutzermodus (wird zum Reparieren eines fehlerhaften Systems verwendet), das Herunterfahren des Systems und verschiedene andere Zustände. Das Umschalten von einem Runlevel zu einem anderen führt dazu, dass ein Satz von Skripten pro Runlevel ausgeführt wird, die normalerweise Dateisysteme mounten, Daemons starten oder stoppen, das X Window System starten oder stoppen , den Computer herunterfahren usw.

Runlevel

Die Runlevel in System V beschreiben bestimmte Zustände einer Maschine, die durch die Prozesse und Daemons gekennzeichnet sind, die in jedem von ihnen ausgeführt werden. Im Allgemeinen gibt es sieben Runlevel, von denen drei als „Standard“ gelten, da sie für den Betrieb eines Systems unerlässlich sind:

0. Ausschalten
1. Einzelbenutzermodus (auch bekannt als S oder s )
6. Neustart

Abgesehen von diesen Standardversionen behandeln Unix und Unix-ähnliche Systeme Runlevel etwas anders. Der gemeinsame Nenner, die /etc/inittabDatei, definiert, was jeder konfigurierte Runlevel in einem bestimmten System tut.

Standard-Runlevel

Betriebssystem Standard-Runlevel
AIX 2
antiX 5
Gentoo-Linux 3
HP-UX 3 (Konsole/Server/Mehrbenutzer) oder 4 (grafisch)
Linux von Grund auf neu 3
Slackware-Linux 3
Solaris / Illumos 3
UNIX System V- Releases 3.x, 4.x 2
UnixWare 7.x 3

Bei Linux-Distributionen, die in der Tabelle rechts standardmäßig Runlevel 5 verwenden, ruft Runlevel 5 eine grafische Mehrbenutzerumgebung auf, die das X Window System ausführt , normalerweise mit einem Anzeigemanager wie GDM oder KDM . Die Betriebssysteme Solaris und illumos reservieren jedoch normalerweise Runlevel 5, um die Maschine herunterzufahren und automatisch auszuschalten.

Auf den meisten Systemen können alle Benutzer den aktuellen Runlevel entweder mit dem Befehl runleveloder überprüfen who -r. Der Root- Benutzer ändert normalerweise den aktuellen Runlevel, indem er die Befehle telinitoder initausführt. Die /etc/inittabDatei legt mit dem :initdefault:Eintrag den Standard-Runlevel fest .

Auf Unix-Systemen wird das Ändern des Runlevels dadurch erreicht, dass nur die fehlenden Dienste gestartet werden (da jede Ebene nur diejenigen definiert, die gestartet / gestoppt werden). Wenn Sie beispielsweise ein System von Runlevel 3 auf 4 ändern, wird möglicherweise nur der lokale X-Server gestartet. Zurück zu Runlevel 3 würde es wieder gestoppt werden.

Andere Implementierungen

Traditionell besteht einer der Hauptnachteile von init darin, dass es Tasks seriell startet und darauf wartet, dass jeder geladen ist, bevor er zum nächsten übergeht. Wenn Startup-Prozesse am Ende blockiert werden Input/Output (I/O) kann dies zu langen Verzögerungen beim Booten führen. Die Beschleunigung von I/O, zB durch den Einsatz von SSDs, kann die Verzögerungen zwar verkürzen, aber die Ursache wird dadurch nicht behoben.

Es wurden verschiedene Anstrengungen unternommen, um die traditionellen Init-Daemons zu ersetzen, um dieses und andere Designprobleme zu beheben, darunter:

  • BootScripts in GoboLinux
  • busybox-init , geeignet für eingebettete Betriebssysteme , von OpenWrt verwendet, bevor es durch procd . ersetzt wurde
  • Epoch , ein Singlethread-Linux-Init-System, das sich auf Einfachheit und Service-Management konzentriert
  • Initng , ein vollständiger Ersatz von init zum asynchronen Starten von Prozessen
  • launchd , ein Ersatz für init in Darwin / macOS / iOS / tvOS ab Mac OS X v10.4 (es startet SystemStarter, um 'rc.local'- und SystemStarter-Prozesse im alten Stil auszuführen)
  • OpenRC , ein Prozess-Spawner, der vom System bereitgestellte init verwendet und gleichzeitig Prozessisolation, parallelisierten Start und Dienstabhängigkeit bietet; wird von Alpine Linux , Gentoo und seinen Derivaten verwendet und ist als Option in Devuan und Artix Linux verfügbar
  • runit , ein plattformübergreifender vollständiger Ersatz für init mit parallelem Starten von Diensten, der standardmäßig in Void Linux verwendet wird
  • Sun Service Management Facility (SMF), ein vollständiger Ersatz/Redesign von init von Grund auf in illumos / Solaris, beginnend mit Solaris 10, aber als einziger Dienst von der ursprünglichen init im System V-Stil eingeführt
  • Shepherd , der GNU- Dienst- und Daemon-Manager, der eine asynchrone, abhängigkeitsbasierte Initialisierung bereitstellt; in Guile Scheme geschrieben und soll während des normalen Systembetriebs interaktiv hackbar sein
  • s6, eine Software-Suite, die ein Init-System enthält.
  • systemd , eine Software-Suite, vollständiger Ersatz für init in Linux, die einen init-Daemon enthält, mit gleichzeitigem Starten von Diensten, Service-Manager und anderen Funktionen.
  • SystemStarter , ein Prozess-Spawner, der von der BSD-artigen Init in Mac OS X vor Mac OS X v10.4 gestartet wurde
  • Upstart , ein vollständiger Ersatz von init zum asynchronen Starten von Prozessen. Initiiert von Ubuntu und werden von ihnen bis 2014. Sie auch in Fedora verwendet wurde 9, Red Hat Enterprise Linux 6 und Google ist Chrome OS .

Ab Februar 2019 systemd wurde angenommen von den meisten großen Linux - Distributionen.

Siehe auch

Verweise

Externe Links