Procesul de încărcare Linux - l

O prezentare generală a procesului

Principalele etape de incarcare:

  1. BIOS execută pașii de pornire specifice hardware-ul.
  2. Atunci când toate dispozitivele sunt recunoscute și să fie difuzate în mod corespunzător, sarcinile BIOS și execută codul de pornire de la una dintre secțiunile dispozitivului de pornire specificat care conține faza de boot loader Linux 1. Faza 1 Faza 2 sarcini (dimensiune majoră cod bootloader). Unele incarcator poate fi utilizat pentru această etapă intermediară (numita faza 1.5), deoarece unitățile de curent un volum mare poate fi citit corect, fără nici un cod suplimentar.
  3. Loader oferă de multe ori utilizatorul cu un meniu de opțiuni de pornire disponibile. Apoi încarcă kernel-ul, care este decomprimat în memorie, acesta reglează funcțiile sistemului, cum ar fi memoria și echipamente de gestionare a paginilor necesare de lucru, apoi face start_kernel) apel (.
  4. După aceea, start_kernel () realizează o configurație de sistem de bază (întrerupere, gestionarea memoriei rămase, dispozitiv de inițializare, drivere, etc ...), apoi generează managerul de proces inactiv, și în afară de ei - un init proces (care rulează în spațiul utilizator).
  5. Scheduler începe să gestioneze mai eficient sistem, în timp ce miezul se mută într-un impas.
  6. Procesul de inițializare efectuează scripturile necesare care configurează toate serviciile și structurile care nu se referă la nivelul nucleului, rezultând într-un mediu de utilizator va fi creat, iar ecranul de conectare de utilizator vor fi furnizate în sistem.

Atunci când o oprire, init este solicitat oprirea controlată a programelor la nivel de utilizator, de asemenea, conform scenariilor. După aceasta, se închide de inițializare și de bază produce propria sa oprire.

faza de încărcător

Faza de încărcător variază în funcție de platformă. Deoarece etapele timpurii ale încărcare nu depinde de procesul de încărcare a sistemului de operare, de obicei, începe după cum urmează:

  • Pentru x86 sau x86-64. cod dintr-un sector partiție disc de încărcare se efectuează în mod real și încarcă prima etapă încărcătorul de boot (ca regulă - o parte a LILO sau larva).

Din acest moment de încărcare continuă. Prima fază a codului încarcă restul încărcătorului, care întreabă de obicei, ce sistem de operare (sau tipul sesiunii sale) utilizatorul dorește să ruleze. Dacă utilizați LILO se face prin citirea /etc/lilo.conf fișierul de configurare. care definește sistemele disponibile. Acest fișier conține, printre altele, informații cu privire la partiția de boot și locația kernel-ului pentru fiecare dintre aceste sisteme, precum și opțiunile avansate de boot, în cazul în care acestea sunt stabilite. Prin selectarea kernel-ul corespunzător încărcat în memoria RAM. Sistemul inițial minim fișier este configurat de un fișier imagine (initrd), și apoi, împreună cu parametrii corespunzători de control este trecut la un nou sistem de operare.

LILO GRUB și au unele diferențe: [1]

  • LILO nu recunoaște sistemul de fișiere, așa că folosește direct (brut) compensate pe disc, și informațiile din BIOS pentru a încărca datele. Se încarcă meniul de cod și apoi, în funcție de alegerea, descărcați sectoare de disc de 512 bytes pentru sistemul bazat pe MBR-ul (de exemplu, Microsoft Windows), o imagine de bază pentru Linux. [1]
  • GRUB, dimpotrivă, detectează sistemele de fișiere comune (cum ar fi ext2 și ext3). [2] Deoarece grub stochează datele în fișierul de configurare, dar nu și în înregistrarea de încărcare, și o interfață de linie de comandă, este parametrii GRUB adesea mai ușor pentru a corecta sau de a modifica, dacă este configurat incorect sau este deteriorat. [3]

Un alt mod de a descărca Linux - de la DOS sau Windows 9x. în cazul în care nucleul Linux înlocui complet o copie de funcționare a sistemului de operare. Acest lucru poate fi util în cazul în care hardware-ul și software-ul ar trebui să fie incluse, ca și programe adecvate există doar pentru DOS, dar nu și pentru Linux, ca un producător de software de proprietate și sub rezerva secretelor comerciale. Această metodă plictisitoare de încărcare nu mai este foarte relevant, deoarece Linux are drivere pentru o varietate de dispozitive hardware, deși în trecut a fost foarte util.
Un alt exemplu: atunci când Linux este un dispozitiv de stocare a datelor, care nu este destinat pentru descărcare de BIOS: DOS sau Windows poate descărca driverele adecvate pentru a ocoli o limitare BIOS, apoi încărcați în Linux.

Nucleul Linux gestionează principalele funcții, cum ar fi managementul memoriei, task manager. IO. comunicare interprocese, și controlul total al sistemului. Se încarcă are loc în două faze: prima kernel (ca un fișier de imagine comprimat) este încărcat în memorie și decomprimat, apoi configurați astfel de funcții de bază ca managementul memoriei principale. Apoi, controlul este transferat la ultima dată când principalul proces de lansare nucleu. Odată ce kernel-ul devine complet operațional (de ex., F. Încărcat și executa codul), se localizează și începe procesul de inițializare, care ajustează automat spațiul utilizator și procesele necesare pentru funcționarea mediului utilizatorului și intrarea finală în sistem. Nucleul se trece în modul sleep și gata pentru provocările altor procese.

etapa de bază de încărcare

Kernel-ul la boot ia de obicei forma fișierului imagine comprimată într-un format zImage sau bzImage folosind zlib. Acesta conține programul părinte care realizează configurația hardware minime, decomprimă imaginea în întregime în memoria RAM și-discul superior se montează. dacă sunt prevăzute. [5] Apoi, execută un nucleu de pornire prin ./arch/i386/boot/head și procesul startup_32 () (pentru familia de procesoare x86).

nucleu de lansare Etapa

Funcția start nucleu (de asemenea, numit svopper sau proces 0) organizează gestionarea memoriei (pagina de masă și o entitate de memorie pagină) definește tipul de procesor și caracteristici suplimentare (de exemplu, prezența unui coprocesor matematic), apoi comută la arhitectura independent functional nucleul Linux prin apelarea start_kernel ().

start_kernel () efectueaza o varietate de sarcini de inițializare. Se configurează stivuitoare de întrerupere (IRQ), apoi se ajustează memoria, începe procesul de init (primul proces de user-mode), iar apoi se execută inactiv sarcina de asteptare cpu_idle (). Trebuie remarcat faptul că procesul de pornire nucleu, de asemenea, initierea RAM-Montarea sistemele ROM ( «initrd»), care a fost încărcat anterior ca sistem de fișiere rădăcină temporar în faza de încărcare. Acest lucru vă permite să încarce modulele, fără a se baza pe alte dispozitive fizice și drivere, și să mențină dimensiunea redusă a nucleului. Sistemul de fișiere rădăcină este înlocuit ulterior prin pivot_root apel (). care descalecă timpul și îl înlocuiește cu sistem de fișiere rădăcină reală, de îndată ce acesta devine disponibil. Utilizarea sistemului de memorie temporară este apoi eliberat.

Astfel, nucleul inițializează suporturile dispozitivului respectivul sistem de fișiere încărcător în modul „read-only“ și începe procesul de inițializare (/ sbin / init), care este desemnat ca un prim sistem de proces care rulează (identificatorul PID = 1 proces). [1] Mesajele ieșirile respective miezului (la montarea unui sistem de fișiere) și inițializare (proces de pornire același nume). Miezul poate efectua, de asemenea procesarea pentru setările de inițializare initrd și dispozitive pentru a monta un sistem de fișiere rădăcină. [1]

Potrivit companiei «Red Hat», parte a procesului de boot în această etapă pot fi rezumate după cum urmează: [2]

Atunci când este încărcat kernel-ul, acesta inițializează imediat și configurează memoria calculatorului și configurează diferite hardware-ul atașat la sistem, inclusiv toate procesoarele, un subsistem de intrare-ieșire, și dispozitivele de stocare. Se caută apoi imaginea initrd comprimat într-o locație de memorie predefinită, decomprimă, monturile lor și sarcini toate driverele necesare. În continuare, se inițializează dispozitive virtuale legate de sistemul de fișiere, cum ar fi LVM sau RAID software-ul -massivy înainte de a demonta o imagine initrd disc și pentru a elibera toate memorie ocupat anterior de imagini. Apoi kernel-ul creează un dispozitiv de rădăcină, montează partiția rădăcină doar pentru citire, și eliberează orice memorie neutilizate. Prin acest timp, kernel-ul este încărcat în memorie și operațională. Cu toate acestea, deoarece nu există nici o programare personalizată pentru datele de intrare semnificative în sistem, sunt puține lucruri de făcut.

Acum, care include controlerul de întrerupere poate prelua controlul total al sistemului de a oferi multitasking, iar procesul de inițializare este de a continua încărcarea mediul utilizatorului în spațiul de utilizare.

init proces (numai tip UNIX System V)

Init este părintele tuturor proceselor. principala sa sarcină - de a crea un proces pentru script-ul din fișierul / etc / inittab. Acest fișier conține de obicei intrări care indică inițializare miceliu getty pentru fiecare linie, pe care utilizatorii se pot conecta în sistem. Acesta controlează, de asemenea procese autonome cerute de orice sistem. Nivelul de performanță - o configurație de software a sistemului, care permite doar un grup predeterminat de procese există. Procesele init generate la fiecare dintre aceste niveluri de performanță sunt definite în fișierul / etc / inittab. [6]

De fapt, init organizează și menține tot spațiul utilizator, care include, de asemenea, verificarea și montarea sistemelor de fișiere, servicii de lansare și utilizatorul este necesar, comutați la mediul de utilizare, atunci când pornirea sistemului este finalizată. Este similar cu procesul de inițializare în Unix și BSD. din care a existat, dar în unele cazuri, este modificat sau alterat. Într-un sistem tipic de inițializare Linux are un parametru cunoscut sub numele de nivelul de performanță. este de la 1 la 6, și determinarea zonelor trebuie incluse. Pentru fiecare nivel de implementare are propriul scenariu, care reglementează diverse procese implicate în stabilirea sau eliminarea acestui nivel, iar aceste scenarii sunt considerate esențiale pentru procesul de boot. scripturi de inițializare sunt de obicei stocate în directoare cu nume, cum ar fi / etc / rc .... Fișierul principal de configurare pentru nivelul de inițializare - / etc / inittab. [7]

La pornirea sistemului, se verifică dacă nivelul implicit în / etc / inittab este descrisă. și, dacă nu - îi solicită prin intermediul consolei de sistem. Apoi, el continuă să-și îndeplinească toate scenariile de încărcare relevante pentru acest nivel, inclusiv încărcarea modulelor, verificați integritatea sistemului de fișiere (care a fost montat doar pentru citire), remontați-l citire-scriere și de configurare a rețelei. [1]

În special, în conformitate cu Red Hat. procesul de inițializare urmează următoarea schemă: [2]

  1. El arată scenariul sysinit. care „setează calea pentru mediu declanșează swap. verifică sistemul de fișiere și face tot ceea ce este necesar pentru a inițializa sistemul. În special, sistemul și ceasul hardware, procese speciale pentru portul serial, și așa mai departe. n.
  2. Apoi, init arată configurația specificată pentru un anumit nivel de performanță.
  3. După aceasta, de inițializare setează biblioteca funcția de sursă pentru sistem. Acesta definește modul de a începe sau de a elimina un program, și modul în care pentru a determina PID acestuia.
  4. Apoi începe toate procesele prescrise și creează o sesiune de Log on utilizator.

După ce a dat naștere întregului proces dat, init comută în modul standby și așteaptă pentru una din cele trei evenimente:

  1. terminare normală sau anormală a dat naștere proceselor.
  2. Semnal de pană de curent.
  3. Solicitare din / sbin / telinit pentru a modifica nivelul de execuție. [6]

Aceasta se referă la programul de inițializare în sistemul UNIX V. Alte programe de stilul de inițializare se pot comporta diferit.

notițe