Linuxin käynnistysprosessi on vaihe, jolla Linux - pohjaiset käyttöjärjestelmät valmistetaan . Tämä prosessi on monella tapaa samanlainen kuin BSD :n ja muiden Unix -tyyppisten järjestelmien käynnistäminen, joista se on peräisin.
Kun tietokone käynnistyy, ohjaus siirtyy sarjamuotoisesti tietokoneen järjestelmän laiteohjelmistosta ( BIOS tai UEFI ) käynnistyslataimeen ja siitä ytimeen . Ydin käynnistää sitten ajastimen (moniajoa varten) ja suorittaa init -ohjelman (joka määrittää käyttäjäympäristön ja mahdollistaa käyttäjän vuorovaikutuksen ja kirjautumisen), minkä jälkeen ydin jää käyttämättä, kunnes se vastaanottaa ulkoisen kutsun.
Tärkeimmät latausvaiheet:
Kun sammutus tapahtuu, init kutsutaan lopettamaan käyttäjätason ohjelmat hallitusti, myös komentosarjojen mukaan. Tämän jälkeen init suljetaan ja ydin suorittaa oman sammutuksensa.
BIOSin kautta käynnistettäessä: Käynnistyslataimen vaiheet vaihtelevat alustasta riippuen. Koska varhaiset käynnistysvaiheet ovat riippumattomia käyttöjärjestelmästä, käynnistysprosessi alkaa yleensä näin:
Tästä eteenpäin lataus jatkuu. Ensimmäinen vaihe lataa loput latauskoodista, joka yleensä kysyy, mitä käyttöjärjestelmää (tai istuntotyyppiä) käyttäjä haluaa käyttää. Käynnistyslataimen koodi luodaan konfiguraatiotiedostosta /etc/lilo.conf (для LILO), joka määrittää käytettävissä olevat järjestelmät. Tämä tiedosto sisältää erityisesti tietoja kunkin järjestelmän käynnistysosiosta ja ytimen sijainnista sekä mahdollisista lisäkäynnistysvaihtoehdoista. Valinnan tuloksena sopiva ydin ladataan RAM -muistiin , minimialkutiedostojärjestelmä konfiguroidaan kuvatiedostosta ( initrd ) ja sitten hallinta siirretään asianmukaisten parametrien kanssa uudelle käyttöjärjestelmälle.
LILOlla ja GRUB:lla on tiettyjä eroja: [1]
UEFI:n kautta käynnistettäessä: UEFI: ssä käynnistyslatain käynnistyy välittömästi suojatussa tilassa (32-bittinen tai 64-bittinen) ja itse asiassa kaikki käynnistyslataimen vaiheet latautuvat kerralla (ottaen huomioon käynnistyksen palveluosiosta, ei ole tarvetta jotta käynnistyslatain jakaa itsensä erillisiin vaiheisiin ja sijoittaa ne eri paikkoihin ). Muuten ytimen lataus- ja alustusprosessi ei eroa BIOS-versiosta.
BIOS:
GRUB tukee sekä suoraa että ketjukäynnistystä, samoin kuin LBA:ta, ext2:ta ja "todellista komentolähtöistä, käyttövaihetta edeltävää ympäristöä x86-koneissa". Siinä on kolme käyttöliittymää: valintavalikko, asetuseditori ja komentokonsoli. [neljä]
UEFI:
LILO on vanhempi kuin GRUB ja toiminnaltaan lähes identtinen, paitsi että se ei sisällä komentorivikäyttöliittymää. Siksi kaikki muutokset on tehtävä sen asetuksiin ja kirjoitettava MBR:ään, minkä jälkeen järjestelmä käynnistetään uudelleen. Siten virheellinen kokoonpano voi tehdä levystä käynnistymättömän ilman erillistä käynnistyslaitetta ( levyke jne.), joka sisältää ohjelman virheen korjaamiseksi. [3] LILO ei myöskään tunnista tiedostojärjestelmiä; sen sijaan kuvatiedostojen osoitteet tallennetaan suoraan MBR:ään [3] ja niitä käytetään suoraan BIOS:n kautta.
Toinen tapa käynnistää Linux on DOS- tai Windows 9x -käyttöjärjestelmästä , jossa Linux-ydin korvaa kokonaan käynnissä olevan käyttöjärjestelmän kopion. Tästä voi olla hyötyä, jos laitteiston on oltava mukana ohjelmistossa, ja vastaavat ohjelmat ovat olemassa vain DOS:lle, eivät Linuxille, koska ne ovat valmistajan oma ohjelmisto ja liikesalaisuus. Tämä käynnistysmenetelmä ei ole erityisen relevantti, koska Linuxissa on ajurit monille laitteistolaitteille, vaikka se on ollut aika hyödyllinen aiemmin.
Toinen esimerkki on, kun Linux on tallennuslaitteella, jota ei ole suunniteltu käynnistettäväksi BIOSista: DOS tai Windows voi ladata sopivat ohjaimet ohittaakseen tämän BIOS-rajoituksen ja käynnistää sitten Linuxin sieltä.
Linux-ydin hallitsee tärkeitä toimintoja, kuten muistinhallintaa , tehtävänhallintaa , I/O :ta , prosessien välistä viestintää ja yleistä järjestelmänhallintaa. Lataus tapahtuu kahdessa vaiheessa: ensin ydin (pakatun kuvatiedoston muodossa) ladataan RAM-muistiin ja puretaan, sitten konfiguroidaan perustoiminnot, kuten perusmuistin hallinta. Ohjaus siirretään sitten viimeisen kerran ytimen pääkäynnistysprosessiin. Kun ydin on täysin toimintakuntoinen (eli ladattu ja suorittanut koodinsa), se etsii ja käynnistää init-prosessin, joka määrittää itsenäisesti käyttäjätilan ja prosessit, jotka ovat välttämättömiä käyttäjäympäristön toiminnalle ja mahdolliselle kirjautumiselle järjestelmään. Ydin itse menee lepotilaan ja on valmis kutsumaan muita prosesseja.
Ydin käynnistetään yleensä kuvatiedostona, joka on pakattu zImage- tai bzImage -muotoon käyttämällä zlib -tiedostoa . Se sisältää pääohjelman, joka suorittaa minimaalisen laitteiston asennuksen, purkaa koko kuvan korkeaan muistiin ja asentaa RAM-levyn , jos sellainen on. [5] Sen jälkeen se suorittaa ytimen käynnistyksen kautta ./arch/x86/boot/headja prosessi startup_32()(x86-perheen prosessoreille).
Ytimen käynnistystoiminto (kutsutaan myös swapperiksi tai prosessiksi 0 ) järjestää muistinhallinnan ( sivutaulukot ja muistin sivut), määrittää prosessorin tyypin ja lisäominaisuudet (kuten matemaattisen apuprosessorin olemassaolon ) ja vaihtaa sitten arkkitehtuurista riippumattomiin toimintoihin. Linux-ytimestä soittamalla start_kernel().
start_kernel()suorittaa monia alustustehtäviä. Se määrittää keskeytyskäsittelijät ( IRQ ), määrittää sitten muistin, käynnistää init-prosessin (ensimmäinen käyttäjätilaprosessi) ja käynnistää sitten lepotilan tehtävän kutsumalla cpu_idle(). Huomaa, että ytimen käynnistysprosessi liittää myös alkuperäisen RAM-levyn ("initrd"), joka oli aiemmin ladattu väliaikaisena juuritiedostojärjestelmänä käynnistysvaiheen aikana. Tämä mahdollistaa ohjainmoduulien lataamisen turvautumatta muihin fyysisiin laitteisiin ja ohjaimiin ja pitää ytimen koon pienenä. Juuritiedostojärjestelmä korvataan myöhemmin kutsulla pivot_root(), joka purkaa väliaikaisen tiedostojärjestelmän ja korvaa sen todellisella juuritiedostojärjestelmällä heti, kun jälkimmäinen tulee saataville. Väliaikaisen järjestelmän käyttämä muisti vapautetaan sitten.
Siten ydin alustaa laitteet, liittää käynnistyslataimen määrittämän tiedostojärjestelmän vain luku -tilassa ja käynnistää init ( /sbin/init) -prosessin, joka on nimetty järjestelmän ensimmäiseksi käynnistämäksi prosessiksi (prosessitunnuksella PID = 1). [1] Ydin (liitettäessä tiedostojärjestelmää) ja init (kun käynnistetään samanniminen prosessi) näyttävät vastaavat viestit. Ydin voi myös suorittaa initrd :n käsitelläkseen asetuksia ja alustaakseen laitteita ennen juuritiedostojärjestelmän asentamista. [yksi]
Red Hatin mukaan käynnistysprosessin yksityiskohdat tässä vaiheessa voidaan tiivistää seuraavasti: [2]
Kun ydin käynnistyy, se alustaa ja määrittää välittömästi tietokoneen muistin ja määrittää järjestelmään liitetyt laitteistot, mukaan lukien kaikki prosessorit, I/O-alijärjestelmät ja tallennuslaitteet. Sitten se etsii pakatun initrd-kuvan ennalta määritetystä paikasta muistista, purkaa sen, asentaa sen ja lataa tarvittavat ohjaimet. Sitten se alustaa tiedostojärjestelmään liittyvät virtuaaliset laitteet, kuten LVM- tai ohjelmisto - RAID - ryhmät, ennen kuin irrottaa aloituslevykuvan ja ottaa takaisin kuvan aiemmin käyttämän muistin. Ydin luo sitten juurilaitteen, liittää vain luku -oleman juuriosion ja vapauttaa käyttämättömän muistin. Tähän mennessä ydin on ladattu muistiin ja on toiminnassa. Koska ei kuitenkaan ole olemassa käyttäjäohjelmia, jotka antaisivat mielekkään syötteen järjestelmään, sillä ei ole juurikaan tehtävissä.
Nyt kun keskeytykset ovat käytössä, lähettäjä voi ottaa järjestelmän yleisen hallinnan haltuunsa ennaltaehkäisevän moniajon mahdollistamiseksi, ja aloitusprosessi jää jatkaa käyttäjäympäristön lataamista käyttäjätilaan.
Init on kaikkien prosessien vanhempi. Sen päätehtävänä on luoda komentosarjoja prosesseja /etc/inittab. Tämä tiedosto sisältää yleensä merkintöjä, jotka käskevät initin luomaan gettyn jokaiselle riville, jolle käyttäjät voivat kirjautua. Se myös ohjaa minkä tahansa järjestelmän vaatimia offline-prosesseja. Ajotaso on järjestelmän ohjelmallinen konfiguraatio, joka sallii vain tietyn prosessiryhmän olemassaolon. Prosessit, jotka init synnyttää kullakin näistä ajotasoista, on määritelty /etc/inittab. [6]
Pohjimmiltaan init järjestää ja ylläpitää kaikkea käyttäjätilaa , joka sisältää myös tiedostojärjestelmien tarkistuksen ja asennuksen, tarvittavien käyttäjäpalvelujen käynnistämisen ja vaihtamisen käyttäjätilaan, kun järjestelmä on käynnistynyt. Se on samanlainen kuin Unix- ja BSD - aloitusprosessit , joista se on peräisin, mutta joissain tapauksissa sitä on muutettu tai suunniteltu uudelleen. Tyypillisessä Linux-järjestelmässä initillä on parametri, joka tunnetaan nimellä runlevel , joka ottaa arvot 1 - 6 ja määrittää, mitkä alijärjestelmät otetaan käyttöön. Jokaisella ajotasolla on omat komentosarjansa, jotka hallitsevat kyseisen ajotason määrittämiseen tai poistamiseen liittyviä eri prosesseja, ja juuri näitä komentosarjoja pidetään tarpeellisina käynnistysprosessissa. Init-skriptit tallennetaan yleensä hakemistoihin, joiden nimet ovat kuten /etc/rc…. Init:n päätason asetustiedosto on /etc/inittab. [7]
Järjestelmän käynnistyksen aikana se tarkistaa, onko oletustaso kuvattu kohdassa /etc/inittab, ja jos ei, se pyytää sitä järjestelmäkonsolin kautta. Sitten se suorittaa kaikki asiaankuuluvat käynnistyskomentosarjat kyseiselle tasolle, mukaan lukien moduulien lataaminen, tiedostojärjestelmän eheyden tarkistaminen (joka liitettiin vain luku -muotoon), sen uudelleenasennus luku-kirjoitus ja verkon asetukset. [yksi]
Erityisesti Red Hatin mukaan aloitusprosessi seuraa tätä kaavaa: [2]
Kun se on synnyttänyt kaikki annetut prosessit, se siirtyy lepotilaan ja odottaa yhtä kolmesta tapahtumasta:
Tämä viittaa UNIX System V - tyyliin aloitusohjelmaan . Muut init-ohjelmat voivat toimia toisin.