init - init
În sistemele de operare pentru computer bazate pe Unix , init (prescurtare pentru inițializare ) este primul proces început în timpul bootării sistemului computerului. Init este un proces demon care continuă să ruleze până când sistemul este oprit. Este strămoșul direct sau indirect al tuturor celorlalte procese și adoptă automat toate procesele orfane . Init este pornit de kernel în timpul procesului de boot ; va apărea o panică a nucleului dacă nucleul nu este capabil să-l pornească. Inițial este de obicei atribuit identificatorul de proces 1.
În sistemele Unix, cum ar fi Sistemul III și Sistemul V , designul init a diferit de funcționalitatea oferită de init în Research Unix și derivatele sale BSD . Până de curând, majoritatea distribuțiilor Linux foloseau un inițial tradițional care este oarecum compatibil cu System V, în timp ce unele distribuții, cum ar fi Slackware, utilizează scripturi de pornire în stil BSD, iar altele precum Gentoo au propriile lor versiuni personalizate.
De atunci, au fost create mai multe implementări inițiale suplimentare, încercând să abordeze limitările de proiectare în versiunile tradiționale. Acestea includ launchd , Service Management Facility , systemd , Runit și OpenRC .
Căutați în stil Unix / stil BSD
Research Unix init a rulat scriptul shell de inițializare localizat la /etc/rc, apoi a lansat getty pe terminalele aflate sub controlul /etc/ttys. Nu există niveluri de rulare; /etc/rcfișierul determină ce programe sunt conduse de inițializare. Avantajul acestui sistem este că este simplu și ușor de editat manual. Cu toate acestea, software-ul nou adăugat la sistem poate necesita modificări ale fișierelor existente care riscă să producă un sistem care nu poate fi pornit.
Init BSD a fost, înainte de 4.3BSD, același cu init UNIX de cercetare; în 4.3BSD , a adăugat suport pentru rularea unui sistem de fereastră precum X pe terminalele grafice sub controlul /etc/ttys. Pentru a elimina cerința de editare /etc/rc, variantele BSD au acceptat mult timp un /etc/rc.localfișier specific site-ului care este rulat într-un sub-shell aproape de sfârșitul secvenței de boot.
Un sistem complet modular a fost introdus cu NetBSD 1.5 și portat la FreeBSD 5.0 și succesori. Acest sistem execută scripturi în /etc/rc.ddirector. Spre deosebire de ordonarea scriptului din sistemul V, care este derivat din numele fișierului fiecărui script, acest sistem folosește etichete de dependență explicite plasate în fiecare script. Ordinea în care sunt executate scripturile este determinată de utilitarul rcorder pe baza cerințelor menționate în aceste etichete.
În stil SysV
În comparație cu predecesorii săi, UNIX System III al AT&T a introdus un nou stil de configurație de pornire a sistemului, care a supraviețuit (cu modificări) în UNIX System V și, prin urmare, este numit „init în stil SysV”.
În orice moment, un sistem V care rulează se află într-unul dintre numărul predeterminat de stări, numite niveluri de rulare . Cel puțin un nivel de rulare este starea normală de funcționare a sistemului; în mod obișnuit, alte niveluri de execuție reprezintă modul pentru un singur utilizator (utilizat pentru repararea unui sistem defect), oprirea sistemului și diferite alte stări. Trecerea de la un nivel de execuție la altul determină executarea unui set de scripturi pe fiecare nivel de execuție, care montează de obicei sistemele de fișiere, pornește sau oprește daemonii , pornește sau oprește sistemul X Window , oprește mașina etc.
Niveluri de rulare
Cele nivele de execuție în Sistemul V descrie anumite stări ale unei mașini, caracterizate prin procesele și daemon care rulează în fiecare dintre ele. În general, există șapte niveluri de rulare, dintre care trei niveluri de rulare sunt considerate „standard”, deoarece sunt esențiale pentru funcționarea unui sistem:
- 0. Opriți
- 1. Mod unic utilizator (cunoscut și ca S sau s )
- 6. Reporniți
În afară de cele standard, sistemele Unix și Unix tratează nivelurile de rulare oarecum diferit. Numitorul comun, /etc/inittabfișierul, definește ceea ce face fiecare nivel de rulare configurat într-un sistem dat.
Niveluri de rulare implicite
| Sistem de operare | Nivel de rulare implicit |
|---|---|
| AIX | 2 |
| antiX | 5 |
| Gentoo Linux | 3 |
| HP-UX | 3 (consolă / server / multiutilizator) sau 4 (grafic) |
| Linux From Scratch | 3 |
| Slackware Linux | 3 |
| Solaris / illumos | 3 |
| UNIX System V lansează 3.x, 4.x | 2 |
| UnixWare 7.x | 3 |
La distribuțiile Linux implicit la nivelul de execuție 5 din tabelul din dreapta, nivelul de execuție 5 invocă un mediu grafic multi-utilizatori care rulează X Window System , de obicei cu un manager de afișare precum GDM sau KDM . Cu toate acestea, sistemele de operare Solaris și illumos rezervă în mod normal nivelul 5 pentru a opri și opri automat mașina.
Pe cele mai multe sisteme, toți utilizatorii pot verifica nivelul de inițializare curent fie cu runlevelsau who -rcomanda. Rădăcină utilizatorul de obicei modifică nivelul de execuție curent prin rularea telinitsau initcomenzi. /etc/inittabFișierul stabilește nivelul de execuție default cu :initdefault:intrarea.
Pe sistemele Unix, schimbarea nivelului de execuție se realizează pornind doar serviciile lipsă (deoarece fiecare nivel definește doar cele care sunt pornite / oprite). De exemplu, schimbarea unui sistem de la nivelul de rulare 3 la 4 ar putea porni doar serverul X local. Revenind la nivelul 3, acesta va fi oprit din nou.
Alte implementări
În mod tradițional, unul dintre dezavantajele majore ale init este că începe sarcinile în serie, așteptând ca fiecare să termine încărcarea înainte de a trece la următoarea. Când procesele de pornire sfârșesc Intrarea / ieșirea (I / O) blocate, acest lucru poate duce la întârzieri mari în timpul pornirii. Accelerarea I / O, de exemplu prin utilizarea SSD-urilor, poate scurta întârzierile, dar nu abordează cauza principală.
S-au depus diverse eforturi pentru a înlocui demonii inițiali tradiționali pentru a rezolva această problemă și alte probleme de proiectare, inclusiv:
- BootScript-uri în GoboLinux
- busybox-init , potrivit pentru sistemele de operare încorporate , utilizat de OpenWrt înainte de a fi înlocuit cu procd
- Epoch , un sistem de inițiere Linux cu un singur fir, axat pe simplitate și gestionarea serviciilor
- Initng , o înlocuire completă a init concepută pentru a porni procesele în mod asincron
- launchd , un înlocuitor pentru init în Darwin / macOS / iOS / tvOS începând cu Mac OS X v10.4 (lansează SystemStarter pentru a rula procesele vechi „rc.local” și SystemStarter)
- OpenRC , un spawner de proces care utilizează inițierea furnizată de sistem, oferind în același timp izolarea procesului, pornirea paralelizată și dependența de servicii; folosit de Alpine Linux , Gentoo și derivatele sale și disponibil ca opțiune în Devuan și Artix Linux
- runit , un înlocuitor complet multiplataforma pentru init cu pornire paralelă a serviciilor, utilizat în mod implicit în Void Linux
- Sun Service Management Facility (SMF), o înlocuire completă / reproiectare inițială de la început în iluminos / Solaris începând cu Solaris 10, dar lansat ca singurul serviciu de inițiativa originală în stil System V
- Shepherd , serviciul GNU și managerul de daemon care oferă inițializare asincronă, bazată pe dependență; scris în schema Guile și menit să fie interactiv hackable în timpul funcționării normale a sistemului
- s6, o suită software care include un sistem init.
- systemd , o suită de software, înlocuitor complet pentru init în Linux care include un daemon init, cu pornire simultană a serviciilor, manager de servicii și alte caracteristici.
- SystemStarter , un spawner de proces pornit de inițierea BSD în Mac OS X înainte de Mac OS X v10.4
- Upstart , o înlocuire completă a init concepută pentru a porni procesele în mod asincron. Inițiat de Ubuntu și utilizate de către acestea , până în 2014. Acesta a fost , de asemenea , utilizat în Fedora 9, Red Hat Enterprise Linux 6 și Google e sistemul de operare Chrome .
Începând din februarie 2019, systemd a fost adoptat de majoritatea distribuțiilor majore Linux.
Vezi si
- Managementul serviciului sistemului de operare
- Subsistem Session Manager - un echivalent în Windows NT