Duboki uvidi sustava "Ubuntu Linux" - vidimo li ovo?


LINUX kao što znamo je kernel, a ne operativni sustav, isporučuje se s nekoliko distribucija poput: Debian, Fedora, Ubuntu itd. i mnogim drugima. Ubuntu OS koji je razvio Mark Shuttleworth popularno je poznat i mnogi ga koriste. Također, budući da je besplatna i otvorena je izvorna verzija, godišnje se izdaje čemu pridonose tisuće programera koji doprinose njenom razvoju. Ali, kako funkcionira? Koji sve procesi, popis događaja čine da funkcionira i koji je značaj tih procesa?

Ovaj članak će vas odvesti malo duboko u unutrašnjost Ubuntu OS-a koji su vrlo zanimljivi i pomoći će početniku da u potpunosti razumije njegovo funkcioniranje.

Položite sustav

Linux ima postupak za svoje funkcioniranje, svaka sistemska usluga, uključujući upravljanje napajanjem, pokretanje sustava, rukovanje padovima sustava je proces koji ima konfiguracijsku datoteku u “/etc/init ” koja opisuje događaj na kojem izvršit će i odgovarajući događaj na kojem će zaustaviti njegovo izvršavanje, uz to održava i ostale svoje konfiguracijske datoteke koje opisuju njegovo ponašanje tijekom izvođenja u direktoriju "/etc/" sustava, čineći tako sustav jedan događaj vođen.

Ako se generiraju događaji, onda bi netko trebao biti tamo da ih uhvati i izvrši ?? Pa očito, kontroler je naš glavni proces koji postoji kao nadređeni svim procesima s ID-om procesa 1 tj. init . To je proces koji započinje pokretanjem sustava i nikad se ne zaustavlja. Ovaj proces umire tek kad se sustav isključi, jer ne postoji proces koji je roditelj init-a.

Ranije verzije Ubuntua prije 6.10 uključivale su stari stil sysvinit koji se koristio za pokretanje skripti u « /etc/rcx.d ”direktorij pri svakom pokretanju i isključivanju sustava. No, nakon što je taj upstart sustav zamijenio stari stil sysvinit sustava, ali mu i dalje pruža povratnu kompatibilnost.

Najnovije verzije Ubuntua imaju ovaj sistem za nadogradnju, ali od evolucije od Ubuntu 6.10 prošlo je nekoliko izmjena, a trenutna verzija je bila 1.13.2 4. rujna 2014. Najnoviji sustav za pokretanje ima 2 init procesa, jedan za sistemske procese i drugi koji upravlja trenutnom prijavljenom korisničkom sesijom i postoji samo dok se korisnik ne prijavi, također nazvan x-session init .

Čitav sustav postavljen je kao hijerarhijski, koji se sastoji od odnosa predak-dijete tijekom snage do isključenja sustava.

Na primjer : Mala hijerarhijska veza između oba procesa init je: sistem init (1) -> upravitelj zaslona (prostor jezgre) -> upravitelj zaslona (korisnički prostor) -> korisnički init (ili x- sjednica init).

Konfiguracijske datoteke za procese kojima upravlja sistemski init nalaze se u “/etc/init ”, a za one kojima upravlja init sesije nalaze se u “/usr/share/upstart ” (kao prema trenutnoj verziji iznad verzije 1.12 ) i ove su konfiguracijske datoteke ključne za mnoge iskopane 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 umru).
  2. Dugovječni poslovi (ili poslovi ostajanja i rada).

Hijerarhija koja je napravljena u sustavu nastala je zbog odnosa ovisnosti između procesa koji možemo razumjeti pregledavanjem njihovih konfiguracijskih datoteka. Krenimo prvo od jednostavne hijerarhijske veze između procesa zbog kojih se sustav pokreće i shvatiti značaj svakog od njih.

Init je prvi postupak koji započinje s uključivanjem sustava i klasificiran je pod posao-i-ostani , jer se nikada ne ubija i samo je vrijeme init-a ugašeno isključivanje tj. init samo umire i to jednom po sesiji i to je isključivanje. Po uključivanju init generira prvi događaj u sustavu, tj. Događaj pokretanja. Svaka konfiguracijska datoteka u “/etc/init ” ima dva retka koji definiraju događaj koji uzrokuje pokretanje i zaustavljanje procesa. Ti su redovi istaknuti na donjoj slici:

Ovo je konfiguracijska datoteka procesa failsafe-x , a oni se pokreću i zaustavljaju pod uvjetima koji opisuju događaj na kojem će proces započeti. Nakon generiranja pokretanja događaja init procesom, oni procesi kojima je pokretanje pokrenuto pod uvjetom da se izvršavaju paralelno i to samo definira hijerarhiju, a svi procesi koji se izvršavaju prilikom pokretanja djeca su init-a.

Procesi koji se pokreću pri pokretanju navedeni su kao pod, a to su svi radni zadaci:

1 . ime hosta - Ovo je postupak koji samo govori sustavu svog imena hosta definiranog u datoteci/etc/hostname.

2 . kmod - učitava module jezgre, tj. sve upravljačke programe iz/etc/modules datoteke.

3 . planinarski - Ovaj postupak generira puno događaja i uglavnom je odgovoran za pronalaženje svih datotečnih sustava pri pokretanju, uključujući lokalne datotečne sustave i udaljene datotečne sustave.

Datoteka /proc je također montirana upravo ovim postupkom i nakon svih radova na montaži posljednji događaj koji je generirao je događaj datotečnih sustava što dalje čini da hijerarhija nastavlja dalje.

4 . plymouth - Ovaj se postupak izvršava pri pokretanju i montira i odgovoran je za prikaz crnog zaslona koji se vidi pri pokretanju sustava i prikazuje nešto poput dolje:

5 . spreman za plymouth - označava da je plymouth podignut.

Slijede glavni procesi, drugi koji se također izvršavaju prilikom pokretanja uključuju, poput udev-backupback-graphics , itd. Vraćajući se u hijerarhiju pokretanja, ukratko su događaji i procesi koji slijede u slijedu:

1 . init zajedno s generacijom startup događaja.

2 . Mountall montažni datotečni sustavi, plymouth (zajedno s početnim mounttall-om) koji prikazuje početni ekran i kmod moduli za učitavanje kernela.

3 . Događaj lokalnog datotečnog sustava koji je generirao Mountall zbog čega je dbus pokrenut. (Dbus je sistemska sabirnica poruka koja stvara utičnicu dopuštajući drugim procesima da međusobno komuniciraju slanjem poruka u ovu utičnicu, a prijemnik osluškuje poruke u toj utičnici i filtrira one namijenjene njoj).

4 . lokalni-datotečni sustav zajedno s pokrenutim dbusom i događajem statične mreže-uzrokovanim procesnom mrežom koja se također izvodi na događaju lokalnog-datotečnog sustava uzrokuje pokretanje upravitelja mreže.

5 . događaj virtualnog datotečnog sustava koji generira mountall uzrokuje pokretanje udeva. (udev je upravitelj uređaja za linux koji upravlja vrućim priključivanjem uređaja i odgovoran je za stvaranje datoteka u/dev direktoriju i upravljanje njima.) udev stvara datoteke za ram, rom itd. u/dev direktoriju onima u kojima je Mountall završio montažu virtualnih -filesystems i generirao je virtualni-datotečni sustav događaja 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 je Mountall završio montiranje posljednjeg datotečnog sustava i generirao događaj datotečnog sustava.

7 . Događaj datotečnog sustava zajedno sa događajem statične mreže uzrokuje pokretanje rc-sysinit posla. Evo povratne kompatibilnosti između starijih sysvinit-a i upstarta ...

9 . rc-sysinit pokreće telinit naredbu koja govori razini pokretanja sustava.

10 . Nakon dobivanja razine pokretanja, init izvršava skripte koje započinju s 'S' ili 'K' (početni poslovi koji imaju "S" na početku svog imena i ubijaju one koji imaju "K" na početku svog imena) u direktoriju/etc/rcX.d (gdje je 'X' trenutna razina pokretanja).

Ovaj mali skup događaja uzrokuje pokretanje sustava svaki put kad ga uključite. A ovaj događaj pokretanja procesa jedina je stvar odgovorna za stvaranje hijerarhije.

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

Iznad je odjeljak konfiguracijske datoteke procesa plantall. To pokazuje događaje koje emitira. Naziv događaja je onaj koji nasljeđuje riječ ‘ događaj ’. Događaj može biti onaj definiran u konfiguracijskoj datoteci kao gore ili može biti naziv procesa zajedno s prefiksom "pokretanje", "pokretanje", "zaustavljanje" ili "zaustavljanje".

Dakle, ovdje definiramo dva pojma:

  1. Generator događaja : Onaj koji ima liniju 'emitira xxx' u svojoj konfiguracijskoj datoteci, gdje je xxx naziv događaja koji je vlasnik ili generira.
  2. Hvatač događaja : Onaj čiji je početak ili zaustavljanje kao xxx ili koji započinje ili zaustavlja događaj događaja koji je generirao jedan od generatora događaja.

Dakle, slijedi hijerarhija, pa tako i ovisnost između procesa:

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

Do sada ste morali razumjeti kako se hijerarhija ovisnosti roditelj-dijete između procesa postavlja mehanizmom pokretanja događaja putem jednostavnog mehanizma za pokretanje sustava.

Ova hijerarhija nikada nije jedan-na-jedan odnos koji ima samo jednog roditelja 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.

Ovi su retci preuzeti iz umrežavanja procesa i ovdje se početak pod uvjetom čini previše složenim i sastoji se od puno događaja, naime - lokalni-datotečni sustavi , udevtrigger , spremnik , razina pokretanja , umrežavanje .

Lokalni datotečni sustav emitira Mountall, udevtrigger je naziv posla, događaj spremnika emitira detektor spremnika, događaj na razini pokretanja emitira rc-sysinit, a umrežavanje je opet posao.

Dakle, u hijerarhiji je umrežavanje procesa podređeno od mounttall-a, udevtrigger-a i detektor-spremnika jer ne može nastaviti s funkcioniranjem (funkcioniranje procesa su svi redovi koji su definirani u odjeljcima skripte ili exec u konfiguracijskoj datoteci procesa) dok gore navedeni procesi ne generiraju svoje događaje.
Isto tako, možemo imati jedan proces koji je roditelj mnogih ako događaj generiran jednim procesom mnogi predmemoriraju.

Kao što smo prethodno definirali, možemo imati ili kratkotrajne (ili raditi i umrijeti poslove) ili dugovječne (ili ostati i raditi ), ali kako razlikovati ih??

Poslovi koji imaju uvjete " pokreni se " i " zaustavi se " navedeni su u njihovim konfiguracijskim datotekama i imaju riječ "zadatak " u svojim konfiguracijska datoteka su radni i umrijeti poslovi koji započinju s generiranim događajem, izvršavaju svoju skriptu ili izvršni odjeljak (tijekom izvršavanja blokiraju događaje koji su ih uzrokovali) i umiru nakon toga otpuštajući one događaje koje su blokirali .

Oni poslovi koji u svojoj konfiguracijskoj datoteci nemaju uvjet ‘ zaustaviti se ’ dugovječni su ili ostaju i rade i nikad ne umiru. Sada se poslovi ostanka i posla mogu dalje klasificirati kao:

  1. Oni koji nemaju stanje ponovnog pokretanja i može ih ubiti root korisnik.
  2. Oni koji su se ponovno pojavili u svojoj konfiguracijskoj datoteci i tako se ponovno pokreću nakon što su ubijeni, osim ako njihov posao nije završen.

Zaključak

Dakle, svaki postupak u LINUX-u ovisi o nekima i ima neke procese koji ovise o njemu, a ovaj je odnos velik o mnogima i specificiran je s nadograđenim sustavom zajedno s ostalim detaljima procesa.