Duboki uvidi u "Ubuntu Linux" sistem - Vidimo li ovo?


LINUX kao što znamo je kernel a ne operativni sistem, isporučuje se s nekoliko distribucija kao što su: Debian, Fedora, Ubuntu itd. i još mnogo toga. Ubuntu OS koji je razvio Mark Shuttleworth je popularno poznat i naširoko ga koriste mnogi. Takođe, pošto je besplatna i otvorenog koda, njena nova verzija izlazi svake godine čemu doprinose hiljade programera koji doprinose njenom razvoju. Ali, kako funkcionira? Koji sve procesi, lista događaja to čine i koji je značaj tih procesa?

Ovaj članak bi vas odveo malo dublje u unutrašnjost Ubuntu OS-a koja je vrlo interesantna i koja će početnicima pomoći da potpuno razumiju njegovo funkcioniranje.

Odložite sistem

Linux ima proces za svoje funkcionisanje, svaki i svaki sistemski servis uključujući upravljanje napajanjem, pokretanje, rukovanje rušenjem sistema je proces koji ima konfiguracionu datoteku u “/etc/init” koja opisuje događaj na kojem on će izvršiti i odgovarajući događaj na kojem bi zaustavio svoje izvršavanje, zajedno s tim, također održava svoje druge konfiguracijske datoteke koje opisuju njegovo ponašanje u vremenu izvođenja u sistemskom direktoriju “/etc/”, čime će sistem događaj vođen.

Ako postoje generirani događaji onda bi neko trebao biti tamo da ih uhvati i izvrši?? Očigledno je da je kontroler naš glavni proces koji postoji kao roditelj svih procesa sa ID-om procesa 1, tj. init. Ovo je proces koji počinje pokretanjem sistema i nikada ne prestaje. Ovaj proces umire tek kada se sistem isključi jer ne postoji proces koji je roditelj init.

Ranije verzije Ubuntua prije 6.10 su uključivale stari stil sysvinit koji je korišten za pokretanje skripti u “/etc/rcx.d b> ” direktorij pri svakom pokretanju i gašenju sistema. Ali, nakon što je taj upstart sistem zamijenio stari sistem sysvinit, ali mu i dalje pruža kompatibilnost unatrag.

Najnovije verzije Ubuntua imaju ovaj sistem za početnike, ali od svoje evolucije od Ubuntu 6.10 prošao je nekoliko revizija trenutne verzije 1.13.2 od 4. septembra 2014. Najnoviji sistem za pokretanje ima 2 init procesa, jedan za sistemske procese i drugi koji upravlja trenutnom prijavljenom korisničkom sesijom i postoji samo dok korisnik nije prijavljen, također se naziva x-session init .

Čitav sistem je postavljen kao hijerarhijski, koji se sastoji od odnosa predak-dijete kroz vrijeme od napajanja do isključivanja sistema.

Na primjer: Mala hijerarhijska relacija između oba init procesa je: sistem init(1) -> upravitelj prikaza (prostor kernela) -> display manager (korisnički prostor) -> init korisnika (ili x-session init).

Konfiguracijske datoteke za procese kojima upravlja sistem init nalaze se u “/etc/init ” a za one kojima upravlja init sesije nalaze se u “/usr/share/upstart” (kao prema trenutnim verzijama iznad 1.12) i ove konfiguracijske datoteke su ključ za mnoge otkrivene tajne o procesima kako je opisano u ovom članku.

Ulazak dublje u hijerarhiju

Ubuntu prepoznaje dvije vrste procesa:

  1. Kratkotrajni poslovi (ili poslovi koji rade i umri).
  2. Dugotrajni poslovi (ili poslovi koji ostaju i rade).

Hijerarhija koja je napravljena na sistemu je zbog odnosa zavisnosti između procesa koje možemo razumjeti gledajući njihove konfiguracijske datoteke. Počnimo najprije od jednostavnog hijerarhijskog odnosa između procesa koji tjeraju sistem da se pokrene i shvatimo značaj svakog od njih.

Hijerarhija pokretanja

Init je prvi proces koji počinje pri uključivanju sistema i klasifikovan je pod rad i boravak posao jer se nikada ne ubija i samo kada je init ubijen je uključen isključivanje, tj. init samo umire i to također jednom po sesiji, a to je pri gašenju. Nakon uključivanja, init generiše prvi događaj na sistemu, tj. startup događaj. Svaka konfiguraciona datoteka u “/etc/init” ima dvije linije koje definiraju događaj koji uzrokuje pokretanje i zaustavljanje procesa. Ove linije su istaknute na donjoj slici:

Ovo je konfiguracijski fajl procesa failsafe-x i oni počinju i prestaju pod uvjetima koji opisuju događaj na kojem će proces započeti. Prilikom generisanja pokretačkog događaja od strane init procesa, oni procesi koji imaju startup kao uslov za početak se izvršavaju paralelno i to samo definira hijerarhiju, a svi procesi koji se izvršavaju pri pokretanju su potomci pokretanja.

Procesi koji se pokreću pri pokretanju su navedeni ispod i sve su to poslovi rada i umri:

1. ime hosta – Ovo je proces koji samo govori sistemu njegovo ime hosta definisano u datoteci /etc/hostname.

2. kmod – Učitava module kernela, tj. sve drajvere iz /etc/modules datoteke.

3. mountall – Ovaj proces generiše mnogo događaja i uglavnom je odgovoran za postavljanje svih sistema datoteka pri pokretanju uključujući lokalne sisteme datoteka i udaljene sisteme datoteka.

Datoteka /proc je također montirana ovim samim procesom i nakon svih radova na montaži posljednji događaj koji je generiran je događaj sistema datoteka koji dalje čini da hijerarhija ide dalje.

4. plymouth – Ovaj proces se izvršava pri pokretanju mountall-a i odgovoran je za prikazivanje tog crnog ekrana koji se vidi pri pokretanju sistema i prikazuje nešto kao ispod:

5. plymouth-ready – Označava da je plymouth podignut.

Slijede glavni procesi, drugi koji se također izvršavaju pri pokretanju uključuju, kao što je udev-fallback-graphics, itd. Vraćajući se na hijerarhiju pokretanja, ukratko, događaji i procesi koji slijede su u nizu:

1. init zajedno s generiranjem startup događaja.

2. mountall montiranje fajl sistema, plymouth (zajedno sa pokretanjem mountall) koji prikazuje početni ekran i kmod učitavanje modula kernela.

3. Događaj local-filesystem generiran od strane mountall-a koji uzrokuje pokretanje dbus-a. (Dbus je sistemska magistrala poruka koja stvara utičnicu omogućavajući drugim procesima da komuniciraju jedni s drugima slanjem poruka na ovu utičnicu, a primalac sluša poruke na ovoj utičnici i filtrira one namijenjene za njega).

4. local-filesystem zajedno sa pokrenutim dbus-om i događajem static-network-up uzrokovanim procesnom mrežom koja također radi na lokalnom-filesystem događaj uzrokuje pokretanje network-managera.

5. Događaj virtual-filesystem generiran od strane mountall-a uzrokuje pokretanje udev-a. (udev je upravitelj uređaja za linux koji upravlja vrućim uključivanjem uređaja i odgovoran je za kreiranje datoteka u /dev direktoriju i upravljanje njima.) udev kreira datoteke za ram, rom itd u /dev direktoriju one koje je mountall završio sa montažom virtualnog -filesystems i generirao je događaj virtualni sistem datoteka koji označava montiranje /dev direktorija.

6. udev uzrokuje pokretanje upstart-udev-bridgea što znači da je lokalna mreža pokrenuta. Zatim nakon što mountall završi montiranje posljednjeg sistema datoteka i generira događaj sistema datoteka.

7. Događaj filesystem zajedno sa događajem static-network-up uzrokuje pokretanje rc-sysinit posla. Ovdje dolazi kompatibilnost unatrag između starijeg sysvinita i upstarta…

9. rc-sysinit pokreće telinit komandu koja govori o nivou pokretanja sistema.

10. Nakon što dobije nivo pokretanja, init izvršava skripte koje počinju sa 'S' ili 'K' (pokretanje poslova koji imaju 'S' u početak njihovog imena i ubijanje onih koji imaju 'K' na početku svog imena) u direktoriju /etc/rcX.d (gdje je 'X' trenutni nivo pokretanja) .

Ovaj mali skup događaja uzrokuje pokretanje sistema svaki put kada ga uključite. I, ovo pokretanje procesa je jedino odgovorno za kreiranje hijerarhije.

Sada, još jedan dodatak gore je uzrok događaja. Koji proces uzrokuje koji događaj je također naveden u istoj konfiguracijskoj datoteci procesa kao što je prikazano ispod u ovim redovima:

Iznad je dio konfiguracijske datoteke procesa mountall. Ovo pokazuje događaje koje emituje. Naziv događaja je onaj koji slijedi nakon riječi 'događaj'. Događaj može biti ili onaj definiran u konfiguracijskoj datoteci kao što je gore ili može biti naziv procesa zajedno s prefiksom 'početak', 'pokrenut', 'zaustavljanje' ili 'zaustavljen'.

Dakle, ovdje definiramo dva pojma:

  1. Generator događaja: Onaj koji ima red 'emituje xxx' u svojoj konfiguracijskoj datoteci gdje je xxx naziv događaja koji posjeduje ili generiše.
  2. Hvaćač događaja: Onaj koji ima svoj početak ili zaustavljanje kao xxx ili koji počinje ili zaustavlja događaj koji je generirao jedan od generatora događaja.

Dakle, slijedi hijerarhija, a time i ovisnost između procesa:

Event generator (parent) -> Event catcher (child)

Dodavanje složenosti hijerarhiji

Do sada ste morali razumjeti kako je hijerarhija zavisnosti roditelj-dijete između procesa postavljena mehanizmom pokretanja događaja putem jednostavnog mehanizma pokretanja.

Ova hijerarhija nikada nije odnos jedan-na-jedan sa samo jednim roditeljem za jedno dijete. U ovoj hijerarhiji možemo imati jednog ili više roditelja za jedno dijete ili jedan proces koji je roditelj više od jednog djeteta. Kako se to postiže?? Pa, odgovor leži u samim konfiguracijskim datotekama.

Ove linije su preuzete iz procesa – umrežavanja i ovdje se uvjet za početak čini previše složenom sastavljen od puno događaja, naime – local-filesystems, udevtrigger, container, nivo pokretanja, mrežavanje.

Local-filesystems emituje mountall, udevtrigger je ime posla, kontejnerski događaj emituje container-detect, runlevel događaj emituje rc-sysinit, a umrežavanje je opet posao.

Dakle, u hijerarhiji je umrežavanje procesa dijete mountall-a, udevtrigger-a i container-detect-a jer ne može nastaviti svoje funkcioniranje (funkcionisanje procesa su sve linije koje su definirane pod skriptom ili exec sekcijama u konfiguracijskoj datoteci procesa) sve dok gore navedeni procesi ne generiraju svoje događaje.
Isto tako, možemo imati jedan proces koji je roditelj mnogih ako je događaj generiran od strane jednog procesa keširan od strane mnogih.

Razlikovanje tipova poslova

Kao što je prethodno definirano, možemo imati ili kratkotrajne (ili radi i umri poslove) ili dugovječne (ili ostani i radi) poslove, ali kako razlikovati između njih??

Poslovi koji imaju i 'početak' i 'zaustavljanje' uvjete navedene u svojim konfiguracijskim datotekama i imaju riječ 'zadatak' u svojim konfiguracijski fajl su poslovi radi i umri koji počinju na generiranom događaju, izvršavaju svoju skriptu ili exec odjeljak (dok se izvršavaju blokiraju događaje koji su ih uzrokovali) i umiru nakon toga otpuštajući one događaje koje su blokirali .

Oni poslovi koji nemaju uvjet 'stop on' u svojoj konfiguracijskoj datoteci su dugotrajni ili ostani i radi poslovi i nikada ne umiru. Sada se poslovi boravka i rada mogu dalje klasificirati kao:

  1. One koje nemaju stanje ponovnog pojavljivanja i mogu ih ubiti root korisnik.
  2. Oni koji imaju stanje ponovnog pokretanja u svojoj konfiguracijskoj datoteci i tako se restartuju nakon što su ubijeni osim ako njihov posao nije završen.

Zaključak

Dakle, svaki proces u LINUX-u zavisi od nekih i ima neke procese koji su zavisni od njega, a ovaj odnos je mnogo na mnogima i specificiran je sa sistemom za početnike zajedno sa drugim detaljima procesa.