"Ubuntu Linux" süsteemi sügav ülevaade - kas me näeme seda?


Nagu me teame, on LINUX kernel, mitte operatsioonisüsteem, tarnitakse mitme jaotusega, näiteks: Debian, Fedora, Ubuntu jne ja palju muud. Mark Shuttleworthi välja töötatud Ubuntu OS on paljudele tuntud ja laialt levinud. Samuti on igal aastal tasuta uus versioon ja avatud lähtekoodiga uus versioon, mille panustavad tuhanded arendajad, kes panustavad selle arendamisse. Aga kuidas see toimib? Mis kõik protsessid, sündmuste loetelu selle tööle panevad ja mis on nende protsesside tähendus?

See artikkel viiks teid natuke sügavale Ubuntu OS sisemusse, mis on väga huvitav ja aitaks algajal täiel määral mõista selle toimimist.

Süsteemi paigutamine

Linuxil on toimimisprotsess, iga süsteemiteenus, sealhulgas toitehaldus, käivitamine, süsteemi krahhide käsitlemine, on protsess, mille\"/etc/init " konfiguratsioonifail kirjeldab sündmust mille ta käivitab ja sellele vastava sündmuse, mille peatamise ta peatab, lisaks hoiab ta ka teisi konfiguratsioonifaile, mis kirjeldavad tema käitusaega käitumist süsteemi kataloogis\"/etc/", seega süsteemi muutmine sündmusest juhitavaks.

Kui genereeritakse sündmusi, peaks keegi seal olema, et neid tabada ja ellu viia ?? Ilmselt on kontroller meie peamine protsess, mis eksisteerib kõigi protsesside vanemana protsessi ID-ga 1 st init . See on protsess, mis algab süsteemi käivitamisest ja ei peatu kunagi. See protsess sureb alles siis, kui süsteem on välja lülitatud, kuna pole ühtegi protsessi, kes oleks init vanem.

Varasemad versioonid Ubuntu enne 6.10 sisaldasid vana stiili sysvinit , mida kasutati skriptide käitamiseks kataloogis\" /etc/rcx.d ”kataloog iga süsteemi käivitamise ja väljalülitamise ajal. Kuid pärast seda asendas käivitamise süsteem vana stiili sysvinit süsteemi, kuid pakub sellega siiski tagurpidi ühilduvust.

Uusimatel Ubuntu versioonidel on see uuendatud süsteem, kuid alates selle arendamisest versioonist Ubuntu 6.10 on see 4. septembri 2014. aasta seisuga mitu versiooni praegune versioon olnud 1.13.2 . on 2 init -protsessi, üks süsteemiprotsesside jaoks ja teine, mis haldab praegust sisselogitud kasutaja seanssi ja eksisteerib ainult kuni kasutaja on sisse logitud, nimetatakse ka x-session init .

Kogu süsteem on seatud hierarhiliseks, mis koosneb esivanemate ja laste suhetest kogu süsteemi väljalülitamise ajal.

Näiteks : väike hierarhiline suhe mõlema init-protsessi vahel on: süsteemi init (1) -> kuvahaldur (kerneli ruum) -> kuvahaldur (kasutajaruum) -> kasutaja init (või x- seansi init).

Süsteemi init hallatavate protsesside konfiguratsioonifailid asuvad\"/etc/init " ja seansiga init hallatavad failid\"/usr/share/upstart " (vastavalt praegustele uuendatud versioonidele üle 1.12 ) ja need konfiguratsioonifailid on võtmetähtsusega paljudele selles artiklis kirjeldatud protsesside saladustele.

Hierarhiasse sügavamale jõudmine

Ubuntu tunneb kahte tüüpi protsesse:

  1. Lühiajalised töökohad (või siis tööd ja tööd surevad)
  2. Pikaealised töökohad (või töökohad töökohal).

Süsteemis loodud hierarhia on tingitud protsesside sõltuvussuhtest, millest saame aru nende konfiguratsioonifaile vaadates. Alustame kõigepealt lihtsast hierarhilisest seosest protsesside vahel, mis panevad süsteemi käivitama ja mõistavad igaühe olulisust.

Init on esimene protsess, mis alustab süsteemi sisselülitamist ja liigitatakse töö ja viibimine töö alla, kuna seda ei tapeta kunagi ja sisse lülitatakse ainult aeg, mil init on tapetud toide, st init sureb ainult ja see on ka üks kord seansi jooksul ja see on sisselülitamisel. Toite sisselülitamisel genereerib init süsteemi esimese sündmuse, st käivitussündmuse. Igal konfiguratsioonifailil\"/etc/init " on kaks rida, mis määratlevad sündmuse, mis põhjustab protsessi alguse ja peatumise. Need read on toodud alloleval joonisel:

See on protsessi failsafe-x konfiguratsioonifail ja need algavad ja peatuvad tingimustel, mis kirjeldavad sündmust, kus protsess algab. Käivitamissündmuse genereerimisel init-protsessi kaudu käivitatakse paralleelselt need protsessid, mille käivitamine on tingimuslik, ja see määratleb ainult hierarhia ning kõik käivitamisel käivitatavad protsessid on init-i lapsed.

Käivitamisel käivituvad protsessid on loetletud all ja need on kõik töö ja surm:

1 . hostinimi - see on protsess, mis lihtsalt ütleb süsteemile failis/etc/hostname määratletud hostinime.

2 . kmod - laadib tuuma moodulid, st kõik draiverid failist/etc/modules.

3 . mountall - see protsess genereerib palju sündmusi ja vastutab peamiselt kõigi käivitamisel olevate failisüsteemide, sealhulgas kohalike failisüsteemide ja kaugfailisüsteemide, ühendamise eest.

/proc -fail on ühendatud ka selle protsessiga ja pärast kõiki paigaldustöid on viimane selle genereeritud sündmus failisüsteemide sündmus, mis paneb hierarhia veelgi edasi liikuma.

4 . plymouth - see protsess käivitatakse mountalli käivitamisel ja vastutab süsteemi käivitamisel nähtava musta ekraani näitamise eest, mis näitab järgmist:

5 . plymouth-ready - näitab, et plymouth on üleval.

Järgnevad põhiprotsessid, muud käivitamisel käivitatavad protsessid hõlmavad näiteks udev-fallback-graphics jne. Alglaadimise hierarhia juurde naastes on lühidalt öeldes järgmised sündmused ja protsessid järjestuses:

1 . init koos käivitussündmuse genereerimisega.

2 . mountall kinnitusfailisüsteemid, plymouth (koos mountalli algusega), mis kuvab splash-ekraani, ja kmod laadivad tuuma mooduleid.

3 . kohaliku failisüsteemi sündmus, mille on loonud mountall, mis põhjustab dbusi käitamise. (Dbus on kogu süsteemi hõlmav sõnumibuss, mis loob pistikupesa, mis võimaldab teistel protsessidel omavahel suhelda, saates sellesse pesasse sõnumeid ning vastuvõtja kuulab selles pesas olevaid sõnumeid ja filtreerib neile mõeldud.)

4 . kohalik-failisüsteem koos käivitatud dbusi ja staatilise võrgu-üles-sündmusega, mis on põhjustatud protsessivõrgust, mis töötab ka lokaalse failisüsteemi sündmusel, põhjustab võrguhalduri käitamise.

5 . mountalli loodud virtuaalse failisüsteemi sündmus põhjustab udevi käitamise. (udev on Linuxi seadmehaldur, mis haldab seadmete kiirühendamist ja vastutab failide loomise eest/dev kataloogis ja ka nende haldamise eest.) udev loob failid rammide, romide jne jaoks kataloogides/dev, mille mountall on virtuaalse paigaldamise lõpetanud -filesüsteemid ja on loonud sündmuse virtuaalse failisüsteemi, mis tähistab kataloogi/dev paigaldamist.

6 . udev käivitab upstart-udev-silla, mis tähendab, et kohalik võrk on üleval. Siis, kui mountall on viimase failisüsteemi installimise lõpetanud ja failisüsteemi sündmuse genereerinud.

7 . failisüsteemi sündmus koos staatilise võrguga üles sündimisega põhjustab rc-sysiniti töö käivitamise. Siin on vanemate sysviniti ja upstardi ühilduvus tagasiulatuvalt ...

9 . rc-sysinit käivitab teliniti käsu, mis ütleb süsteemi jooksutaseme.

10 . Pärast käivitustaseme hankimist käivitab init kataloogis S etc/rcX.d (kus 'X' on praegune töötase).

See väike sündmuste komplekt käivitab süsteemi iga kord, kui see sisse lülitate. Ja see protsesside käivitav sündmus on ainus asi, mis hierarhia loomise eest vastutab.

Nüüd on sündmuse põhjuseks veel üks ülaltoodud lisand. Milline protsess põhjustab, milline sündmus on määratud ka protsessi samas konfiguratsioonifailis, nagu on näidatud allpool nendel ridadel:

Eespool on osa protsessi mountalli konfiguratsioonifailist. See näitab sündmusi, mida see kiirgab. Sündmuse nimi on järgmine sõna sündmus . Sündmus võib olla kas ülalpool konfiguratsioonifailis määratletud sündmus või protsessi nimi koos eesliitega ‘start’, ‘start’, ‘stopping’ või ‘stop’.

Niisiis, siin määratleme kaks mõistet:

  1. Sündmuste generaator : üks, mille konfiguratsioonifailis on rida „emiteerib xxx”, kus xxx on tema omatava või genereeritava sündmuse nimi.
  2. Sündmuste püüdja u200bu200b: üks, mille algus- või peatamistingimus on xxx või mis algab või peatub sündmusel, genereeris ühe sündmuse genereerijast.

Seega järgneb hierarhia ja seega sõltuvus protsesside vahel:

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

Siiani peate olema aru saanud, kuidas sündmuste käivitamise mehhanism lihtsa alglaadimise mehhanismi kaudu määrab protsesside vahelise vanema ja lapse sõltuvuse hierarhia.

Nüüd pole see hierarhia kunagi üks-ühele suhe, kus ühe lapse jaoks on ainult üks vanem. Selles hierarhias võib meil olla üks või mitu vanemat ühe lapse jaoks või üks protsess olla rohkem kui ühe lapse vanem. Kuidas see saavutatakse? Noh, vastus peitub konfiguratsioonifailides endas.

Need read on võetud protsessist - võrguühendus ja siin tundub tingimuse algus liiga keeruline, mis koosneb paljudest sündmustest, nimelt kohalikud failisüsteemid , udevtrigger , konteiner , jooksutase , võrguühendus .

Kohalikke failisüsteeme väljastab mountall, udevtrigger on töö nimi, konteinerite sündmust väljastab konteiner-tuvastamine, runlevel-sündmust rc-sysinit ja võrguühendus on jällegi töö.

Seega on hierarhias protsessivõrgu loomine mountalli, udevtriggeri ja konteinerituvastuse laps, kuna see ei saa oma tööd jätkata (protsessi toimimine on kõik read, mis on määratletud protsessi konfiguratsioonifailis skripti või täitmisjaotiste all) kuni ülaltoodud protsessid genereerivad nende sündmused.
Samamoodi võib meil olla üks protsess paljude vanem, kui ühe protsessi loodud sündmus on vahemällu salvestatud.

Nagu eelnevalt määratletud, võivad meil olla kas lühikese elueaga (või töötavad ja surevad töökohad) või pikaealised (või jääda ja töötada ) töökohad, kuid kuidas eristada neid ??

Tööd, mille seadistustefailides on määratletud tingimused „ algavad ja peatuvad ja mille sõna„ ülesanne ” konfiguratsioonifail on töö ja surm tööd, mis algavad loodud sündmuselt, täidavad oma skripti või täitmisjaotust (käivitamise ajal blokeerivad nad nende põhjustanud sündmused) ja surevad pärast blokeeritud sündmuste vabastamist .

Need töökohad, mille konfiguratsioonifailis pole tingimust peatus , on pikaealised või jää ja tööta tööd ning nad ei sure kunagi. Nüüd saab töö ja viibimise töökohad liigitada järgmiselt:

  1. Need, kellel pole uuesti proovimise tingimusi ja mille juurkasutaja saab tappa.
  2. Need, kelle konfiguratsioonifailis on taaskäivitamise tingimus, ja nad alustavad pärast tapmist uuesti, kui nende töö pole lõpule jõudnud.

Järeldus

Seega sõltub LINUX iga protsess mõnest ja sellest sõltub ka mõni protsess ning see seos on paljudest paljudest ja see on täpsustatud koos käivitatava süsteemiga koos protsessi muude üksikasjadega.