Algoritm de încărcare a sistemului de operare. Open Library - deschideți biblioteca de informații educaționale Încărcarea nucleului sistemului de operare

Un bootloader este un program de sistem care efectuează bootstrapping. Multe încărcătoare de încărcare asigură, de asemenea, mutarea și conectarea. Unele sisteme separă funcția de legare de funcțiile de mișcare și încărcare. Conectarea se face de către un program special de legare (sau editor de linkuri), mutarea și încărcarea se face de către un încărcător.

Conectarea este conectarea a două sau mai multe programe traduse separate.

Relocarea este o modificare a unui program obiect, astfel încât să poată fi încărcat de la o altă adresă.

Funcții de încărcare:

  1. distribuirea OP;
  2. mutarea programului;
  3. module de conectare;

Distribuție EP

Mutarea programului

Dacă există module de adresă în interiorul modulelor, care sunt calculate de la începutul modulului, atunci adresele vor fi corectate în raport cu baza.

Module de conectare

Tipuri de încărcătoare

Încărcătoare Compile-Run

Una dintre modalitățile posibile de a îndeplini funcția de încărcător poate fi o astfel de organizare a lucrării asamblorului, în care asamblatorul, lucrând într-o parte a memoriei, plasează instrucțiunile și datele mașinii, deoarece acestea sunt asamblate direct în celulele de memorie alocate acestora. După finalizarea compilării, ansamblul transferă controlul la punctul de intrare al programului rezultat. Aceasta este o soluție foarte simplă care elimină necesitatea oricăror proceduri suplimentare. Aceasta se numește compile-execute, iar încărcătorul constă dintr-o singură instrucțiune care transferă controlul către programul asamblat.

Încărcătoarele absolute sunt ușor de implementat, dar au o serie de caracteristici:

  • sarcina de distribuire a OP este realizată de programator (folosind directiva de stabilire a valorii inițiale a OP);
  • sarcina de a muta programul este realizată de compilator;
  • module de conectare - decise de programator (apel 600);
  • încărcarea programelor în PO și lansarea lor pentru executare.

Avantaje:

  • dimensiune mai mică a încărcătorului de încărcare (în ceea ce privește dimensiunea memoriei);
  • separarea fazelor de compilare și încărcare, ceea ce reduce timpul pentru procesarea modulelor;
  • abilitatea de a utiliza mai multe limbaje de programare, deoarece structurile modulelor de obiecte create sunt identice.

Defecte:

O mare cantitate de muncă revine programatorului. Este necesar să monitorizați constant modificările adreselor de pornire atunci când modificați modulele, deoarece lungimea lor se schimbă.

Structura fișierului obiectului Loader absolut

Înregistrarea informațiilor constă din:

  1. semn;
  2. adresa absolută a PO unde informațiile pot fi transferate;
  3. numărul de octeți de informații din mesaj;
  4. octeți de informații;
  5. sume de control;
  6. numerotare.

Înregistrarea de control constă din:

  1. semn;
  2. adresa punctului de intrare.

Operare simplă a încărcătorului absolut:

  1. Verificați dacă există suficientă memorie pentru acest program (vizualizarea primei înregistrări).
  2. Citirea secvențială a corpului programului și plasarea la adresa specificată.
  3. Transferul controlului la adresa pentru executarea programului.

Bootloader personalizat

Pentru a evita necesitatea de a reasambla toate subrutinele atunci când se face o modificare a unuia dintre ele și, de asemenea, pentru a elibera programatorul de sarcinile de alocare a memoriei și comunicarea subrutinelor, au fost dezvoltate așa-numitele încărcătoare. Acest încărcător permite să fie prezente în program mai multe segmente de program și un segment de date (segment comun). Asamblatorul traduce fiecare segment separat și oferă încărcătorului text și informații cu privire la mișcări și referințe încrucișate între segmente.

Ieșirea asamblorului cu o astfel de schemă este un program obiect și informații despre toate celelalte programe la care există apeluri în acest program. În plus, există informații despre locurile care ar trebui schimbate în timpul încărcării (informații despre mișcare), adică despre celule, al căror conținut depinde de locația programului în memorie.

Pentru fiecare program sursă, ansamblorul generează text (rezultatul traducerii) ca informație de ieșire, precedat de un vector ramură care conține adresele numelor subrutinelor care sunt accesate în programul sursă. De exemplu, dacă subrutina SQRT este prima subrutină care este apelată, atunci prima celulă din vectorul ramură va conține numele simbolic SQRT. Propozițiile care conțin un apel către subrutina SQRT vor fi traduse într-o instrucțiune de ramură care indică adresa elementului vector de ramură asociat cu SQRT. Asamblatorul va transmite, de asemenea, informații suplimentare, cum ar fi lungimea totală a programului și lungimea vectorului de ramură. După încărcarea textului programului și a vectorului de ramificare în memorie, încărcătorul va încărca fiecare subrutină specificată în vector. Apoi va pune o comandă pentru a merge la subrutina corespunzătoare din fiecare element al vectorului. Astfel, un apel către subrutina SQRT va duce la executarea comenzii jump către prima celulă a vectorului jump, care va conține comanda jump către subrutina numită.

O astfel de schemă de încărcare cu transfer de control în două etape este adesea utilizată în computerele cu un format de comandă fix și adresare directă.

Acest încărcător are mai multe dezavantaje:

  • vectorul de tranziție nu este destul de convenabil pentru încărcarea și salvarea datelor externe (situate într-un alt segment de program);
  • vectorul de ramură mărește lungimea programului obiect;
  • încărcătorul funcționează cu segmente de program, dar nu facilitează accesul la segmente de date care pot fi partajate de mai multe rutine.

Conectarea directă a încărcătorului de încărcare

Încărcătorul cu legătură directă oferă cea mai completă capacitate de a muta programe și date în memorie și este în prezent cel mai comun. Un astfel de încărcător are avantajul că permite utilizarea unui număr mare atât de segmente de programe cât și segmente de date și oferă programatorului libertatea completă de a accesa datele situate în alte segmente, permițând în același timp traducerea separată.

Asamblatorul (traducătorul) trebuie să transmită încărcătorului următoarele informații cu fiecare program și segment de date:

  1. lungimea segmentului;
  2. o listă cu toate simbolurile segmentelor care pot fi accesate din alte segmente și adresele lor relative;
  3. o listă cu toate caracterele care nu sunt definite în acest segment, care sunt accesate în acest segment;
  4. informații despre localizarea constantelor de adresă în segment și o descriere a modului în care valorile lor ar trebui modificate;
  5. coduri de mașini obținute ca urmare a traducerii și adrese relative atribuite.

Unul dintre dezavantajele unui încărcător de legătură directă în forma sa cea mai simplă este necesitatea de a executa din nou funcțiile de alocare a memoriei, mișcare, legare și încărcare a tuturor subrutinelor necesare de fiecare dată când programul este executat. Aceste probleme pot fi rezolvate prin efectuarea încărcării cu două programe separate: un combinator și un încărcător de module. Ieșirea combinatorului este un set de date într-un format care permite încărcarea programului în memorie și se numește modul de încărcare. Există mai multe tipuri de combinatoare. Unul este așa-numitul linker, care stochează informațiile necesare pentru a muta un modul în memorie, astfel încât modulul în ansamblu să poată fi apoi configurat și încărcat într-o locație arbitrară în memorie. În acest caz, încărcătorul de module trebuie să îndeplinească funcțiile de alocare și mișcare a memoriei, dar rămâne liber de a rezolva problema complexă a legării modulelor obiect și a subrutinelor.

Încărcător dinamic

În fiecare dintre schemele luate în considerare, s-a presupus că toate subrutinele necesare sunt încărcate în memorie în același timp. Dacă cantitatea totală de memorie necesară pentru rutine este mai mică decât memoria disponibilă a aparatului, devine dificilă. Aceste dificultăți sunt depășite prin utilizarea unei scheme de încărcare dinamică cu un combinator și încărcător secvențial. Această schemă se bazează pe faptul că, de obicei, sunt necesare subrutine diferite în momente diferite și pot fi reciproc excluzive. Definind în mod explicit care subrutină conține apeluri către alte subrutine, puteți defini așa-numita structură de suprapunere (structură de suprapunere) care specifică subrutine care se exclud reciproc.

Se formează un modul de încărcare. Este relocabil, trebuie să conțină un tabel de relocare. De asemenea, structura modulului de încărcare trebuie să conțină informații despre legături. Încărcătorul ar trebui să conțină o parte ca managerul de suprapunere, selectează dintre modulele de încărcare exact cele care sunt cele de pornire, în procesul de lucru organizează încărcarea modulelor necesare în OP.

Conectare dinamică

Există cazuri când, pentru eficiența utilizării memoriei mașinii, legătura dinamică a subrutinelor se realizează deja în timpul executării programului. Adică subrutinele sunt încărcate în memorie doar așa cum sunt numite. Acest lucru poate fi benefic pentru că în anumite condiții din program, este posibil ca unele subrutine să nu fie deloc necesare. Să luăm în considerare un exemplu:

dacă (condiția 1)
apel subrutină 1
dacă (condiția 2)
apel de subrutină 2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dacă (condiția m)
apel de subrutină m

Multe dintre ramuri vor fi omise și nu va trebui să încărcați în OP, de exemplu, subrutina 2 dacă nu este îndeplinită condiția 2. În acest caz, încărcătorul trebuie să funcționeze simultan cu programul și să îndeplinească funcțiile de conectare și încărcarea subrutinelor.

Sistemul de operare este stocat în memoria externă, de obicei pe un hard disk, mai rar pe o dischetă. Pentru funcționarea normală a computerului, este necesar ca principalele module ale sistemului de operare să fie în RAM. Prin urmare, după pornirea computerului, se organizează o rescriere (încărcare) automată a sistemului de operare de pe disc în RAM. Cele mai importante aspecte ale acestei descărcări sunt prezentate în diagrama de flux din Fig. 9.13.

Orez. 9.13. Algoritm pentru încărcarea sistemului de operare de pe disc în RAM

După ce porniți computerul, observați schimbarea numerelor pe ecran. Aceste numere reprezintă procesul de testare a RAM în programul BIOS. Dacă este detectată o defecțiune în celulele RAM, va fi afișat un mesaj.

După finalizarea cu succes a testării hardware, se accesează unitatea de dischetă A, iar indicatorul luminos de lângă acesta se aprinde. Dacă porniți sistemul de operare de pe o dischetă, trebuie să introduceți discul de sistem în unitatea A înainte sau în timpul testării. În caz contrar, dacă nu există niciun sistem de operare pe discul A, hard diskul este accesat, după cum dovedește indicatorul luminos următor la ea.

Începe citirea în memoria RAM a celui de-al 0-lea sector al celei de-a 0-a laturi a discului, în care se află bootloader-ul (BOOT RECORD). Controlul este transferat către încărcător, care verifică prezența modulului de expansiune IO.SYS și a modulului de bază MSDOS.SYS pe discul de sistem. Dacă se află la locul lor desemnat (cm. orez. 9.10), apoi le încarcă în RAM, altfel va fi afișat un mesaj despre absența lor. În acest caz, se recomandă repornirea. Semnalul de repornire transferă controlul către modulul BIOS persistent, care rescrie blocul de pornire de pe disc pe RAM și așa mai departe.

Tine minte! Pentru repornirea sistemului de operareîn memorie, apăsați simultan tastele .

După încărcarea cu succes a extensorului IO.SYS și a modulului de bază MSDOS.SYS în RAM, se încarcă procesorul de comandă COMMAND.COM și se procesează fișierul de configurare CONFIG.SYS, care conține comenzile pentru conectarea driverelor necesare. Este posibil ca acest fișier să nu fie prezent dacă sunteți mulțumit de versiunea de bază a sistemului de operare.



Apoi, fișierul lot AUTOEXEC.BAT este procesat. Cu ajutorul acestui fișier puteți configura parametrii mediului de operare. De exemplu, creați un disc virtual, furnizați o schimbare a modurilor de imprimare, încărcați programe auxiliare etc.

Atenţie! Fișierele cu extensia .BAT joacă un rol special atunci când lucrează în mediul de sistem. Acestea conțin o colecție de comenzi ale sistemului de operare sau nume de fișiere executabile. După pornirea fișierului cu extensia .BAT, toate comenzile înregistrate în acesta sunt executate automat una după alta.

Fișierul cu numele standard AUTOEXEC.BAT diferă de alte fișiere de tip .BAT prin faptul că executarea comenzilor plasate în acesta începe automat imediat după încărcarea sistemului de operare.

Dacă fișierul AUTOEXEC.BAT lipsește, vi se va solicita să introduceți data și ora:

dacă apăsați tasta Enter, atunci așa-numiții parametri de sistem, care sunt determinați de temporizatorul computerului, vor fi luați ca data și ora curente;

dacă doriți să resetați data și ora sistemului, atunci ca răspuns la prompt, introduceți valori într-unul dintre formularele furnizate, de exemplu:

10-25-1997 (lună zi an)

7:30: 10.00 RUB (ore: minute: secunde)

După terminarea fișierului AUTOEXEC.BAT și, de asemenea, dacă acest fișier nu este găsit, promptul discului de sistem va fi afișat pe ecranul de afișare, de exemplu C: \>. Acest lucru indică faptul că procesul de încărcare s-a finalizat în mod normal și puteți începe să lucrați introducând numele programului de aplicație sau a comenzii sistemului de operare.

Notă. Este posibil să lipsească fișierele CONFIG.SYS și AUTOEXEC.BAT. În acest caz, setările mediului de operare vor fi setate în mod implicit.

Tine minte! Sistemul de operare trebuie să fie stocat permanent pe hard disk.

Toate unitățile de dischetă trebuie să fie deschise atunci când porniți computerul.

Introduceți discheta cu programe de aplicații în unitatea de dischetă după finalizarea descărcării.



TEHNOLOGIA MUNCII ÎN MS DOS

§ Înțelegerea comenzilor

§ Comenzi de bază pentru lucrul cu directoare

§ Comenzi de bază pentru lucrul cu fișiere

§ Comenzi de bază pentru lucrul cu discuri

§ Crearea și utilizarea unui fișier batch

§ Fișierul de comandă de reglare automată a sistemului de operare AUTOEXEC.BAT

§ Configurarea sistemului de operare utilizând fișierul de configurare CONFIG.SYS

INFORMAȚII GENERALE DESPRE ECHIPE

Sistemul de operare este stocat în memoria externă, de obicei pe un hard disk, mai rar pe o dischetă. Pentru funcționarea normală a computerului, este necesar ca principalele module ale sistemului de operare să fie în RAM. Prin urmare, după pornirea computerului, se organizează o rescriere (încărcare) automată a sistemului de operare de pe disc în RAM. Cele mai importante aspecte ale acestei descărcări sunt prezentate în diagrama de flux din Fig. 9.13.

Orez. 9.13. Algoritm pentru încărcarea sistemului de operare de pe disc în RAM

După ce porniți computerul, observați schimbarea numerelor pe ecran. Aceste numere reprezintă procesul de testare a RAM în programul BIOS. Dacă este detectată o defecțiune în celulele RAM, va fi afișat un mesaj.

După finalizarea cu succes a testării hardware, se accesează unitatea de dischetă A, iar indicatorul luminos de lângă acesta se aprinde. Dacă porniți sistemul de operare de pe o dischetă, trebuie să introduceți discul de sistem în unitatea A înainte sau în timpul testării. În caz contrar, dacă nu există niciun sistem de operare pe discul A, hard diskul este accesat, după cum dovedește indicatorul luminos următor la ea.

Începe citirea în memoria RAM a celui de-al 0-lea sector al celei de-a 0-a laturi a discului, în care se află bootloader-ul (BOOT RECORD). Controlul este transferat către încărcător, care verifică prezența modulului de expansiune IO.SYS și a modulului de bază MSDOS.SYS pe discul de sistem. Dacă se află la locul lor desemnat (cm. orez. 9.10), apoi le încarcă în RAM, altfel va fi afișat un mesaj despre absența lor. În acest caz, se recomandă repornirea. Semnalul de repornire transferă controlul către modulul BIOS persistent, care rescrie blocul de pornire de pe disc pe RAM și așa mai departe.

Tine minte! Pentru repornirea sistemului de operareîn memorie, apăsați simultan tastele .

După încărcarea cu succes a extensorului IO.SYS și a modulului de bază MSDOS.SYS în RAM, se încarcă procesorul de comandă COMMAND.COM și se procesează fișierul de configurare CONFIG.SYS, care conține comenzile pentru conectarea driverelor necesare. Este posibil ca acest fișier să nu fie prezent dacă sunteți mulțumit de versiunea de bază a sistemului de operare.

Apoi, fișierul lot AUTOEXEC.BAT este procesat. Cu ajutorul acestui fișier puteți configura parametrii mediului de operare. De exemplu, creați un disc virtual, furnizați o schimbare a modurilor de imprimare, încărcați programe auxiliare etc.

Atenţie! Fișierele cu extensia .BAT joacă un rol special atunci când lucrează în mediul de sistem. Acestea conțin o colecție de comenzi ale sistemului de operare sau nume de fișiere executabile. După pornirea fișierului cu extensia .BAT, toate comenzile înregistrate în acesta sunt executate automat una după alta.

Fișierul cu numele standard AUTOEXEC.BAT diferă de alte fișiere de tip .BAT prin faptul că executarea comenzilor plasate în acesta începe automat imediat după încărcarea sistemului de operare.

Dacă fișierul AUTOEXEC.BAT lipsește, vi se va solicita să introduceți data și ora:

dacă apăsați tasta Enter, atunci așa-numiții parametri de sistem, care sunt determinați de temporizatorul computerului, vor fi luați ca data și ora curente;

dacă doriți să resetați data și ora sistemului, atunci ca răspuns la prompt, introduceți valori într-unul dintre formularele furnizate, de exemplu:

10-25-1997 (lună zi an)

7:30: 10.00 RUB (ore: minute: secunde)

După terminarea fișierului AUTOEXEC.BAT și, de asemenea, dacă acest fișier nu este găsit, promptul discului de sistem va fi afișat pe ecranul de afișare, de exemplu C: \>. Acest lucru indică faptul că procesul de încărcare s-a finalizat în mod normal și puteți începe să lucrați introducând numele programului de aplicație sau a comenzii sistemului de operare.

Notă. Este posibil să lipsească fișierele CONFIG.SYS și AUTOEXEC.BAT. În acest caz, setările mediului de operare vor fi setate în mod implicit.

Tine minte! Sistemul de operare trebuie să fie stocat permanent pe hard disk.

Toate unitățile de dischetă trebuie să fie deschise atunci când porniți computerul.

Introduceți discheta cu programe de aplicații în unitatea de dischetă după finalizarea descărcării.

Trimite-ți munca bună în baza de cunoștințe este simplu. Folosiți formularul de mai jos

Studenții, studenții absolvenți, tinerii oameni de știință care folosesc baza de cunoștințe în studiile și munca lor vă vor fi foarte recunoscători.

Universitatea Volga numită după V. N. Tatishchev

Facultatea de Informatică și Telecomunicații

Departamentul de Informatică și Sisteme de Control

LUCRU DE CURS

pe discipline: „Software de sistem”

Subiect: " Încărcător

Este realizat de un student. IS-303

Krasnoseltsev ÎN. NS.

Profesor: Trubacheva S.I.

Tolyatti

Introducere

1. Partea teoretică

2. Partea de proiectare

2.1 Declarația problemei

2.2 Dezvoltarea unui algoritm pentru rezolvarea problemei

2.3 Descrierea algoritmului pentru încărcarea programului de aplicație

2.4 Descrierea algoritmului de boot al sistemului de operare

2.5 Descrierea algoritmului de încărcare Unix utilizând încărcătorul de încărcare LILO

Concluzie

Referințe

Introducere

Relevanța cursurilor mele constă în faptul că dezvoltarea computerelor și a sistemelor de operare ale acestora a mers paralel cu dezvoltarea diferitelor programe de încărcare. Anumite sisteme de operare necesită încărcătoare de încărcare diferite pentru a porni. De exemplu, un sistem de operare Unix multi-utilizator necesită încărcătorul LILO și diverse utilități. Orice încărcare a sistemului de operare afectează memoria RAM, cu care funcționează atât încărcătorul primar, cât și cel secundar. La încărcare, apar diferite tipuri de erori, pe care încărcătorul le ocolește sau finalizează procesul de încărcare (afișează un mesaj informativ).

Un bootloader este un program de care mai mult de un computer și mai multe sisteme de operare pur și simplu nu se pot lipsi.

1 . Partea teoretică

Procesul de boot al sistemului de operare Microsoft

Indiferent de sistemul de operare pe care îl luăm în considerare, pentru ca sistemul de operare să înceapă să controleze computerul, acesta trebuie încărcat în RAM. Prin urmare, vom analiza modul în care are loc procesul de încărcare a diferitelor sisteme de operare. Deoarece suntem interesați doar de pornirea de pe hard disk-uri, nu vom lua în considerare specificul pornirii de pe o dischetă, CD-ROM și prin rețea. Să începem cu MS-DOS și MS Windows.

După cum știți, când porniți computerul, pornește mai întâi programul POST (Power On Self Test). Determină cantitatea de memorie disponibilă, o testează, determină prezența altor componente (tastatură, hard disk etc.), inițializează cardurile adaptor. Ecranul afișează de obicei mesaje despre cantitatea de memorie, despre testarea acesteia, o listă de dispozitive detectate (dischete și hard disk-uri, procesor, porturi COM etc.).

După finalizarea testării, POST sună la Int 19h, care încearcă să găsească dispozitivul de boot. Căutarea se efectuează în ordinea definită în BIOS-ul de instalare și se efectuează prin interogarea sectoarelor zero ale dispozitivelor corespunzătoare. Dacă discul este bootabil, atunci sectorul său zero conține Master Boot Record (MBR). Ultimii doi octeți ai MBR sunt un „număr magic”, ceea ce indică faptul că acest sector este MBR și, prin urmare, discul este bootabil. În plus față de „numărul magic”, MBR conține tabela de partiții a discului, care a fost deja menționată mai sus, și un program mic - încărcătorul principal, cu un volum de numai 446 (0 * 1BE) octeți.

Tabelul 2.1 prezintă structura sectorului de boot principal creat în timpul instalării Windows.

Tabelul 2.1 Structura sectorului master boot

BIOS-ul de 19 ore încarcă încărcătorul principal de boot în memoria computerului și transferă controlul către acest program. Dar un program atât de mic nu poate încărca sistemul de operare; tot ce poate face este să încarce un program mai puternic în memorie - încărcătorul secundar.

Pentru a face acest lucru, caută partiția activă în tabela de partiții și citește încărcătorul secundar în memorie, care este situat pornind de la primul sector logic al partiției active. Acordați atenție cuvântului „început”. Ideea este că bootloader-ul secundar are lungimi diferite pe sisteme diferite.

Încărcătorul secundar încarcă primul strat de programe necesare pentru a porni sistemul de operare. În cazul MS - DOS, programul de încărcare încarcă IO.SYS la 700h, apoi MSDOS.SYS și transferă controlul către secțiunea SYSINIT a modulului IO.SYS.

Dacă dintr-un anumit motiv nu se găsește nicio partiție activă pe disc, procesul de boot continuă prin procesarea întreruperii 18h. Această ramură este rar utilizată în întregime, dar poate fi foarte utilă în unele situații. În boot-ul la distanță, când sistemul de operare este pornit de pe server, această întrerupere este redirecționată de programul POST către ROM-ul plăcii de rețea.

Probleme cu unitățile mari

În MS - DOS și în primele versiuni de Windows, accesul la discuri a fost organizat prin BIOS de întrerupere 13 (Int 13h). În acest caz, adresarea sectoarelor de pe disc a fost utilizată pe baza indicației numerelor cilindrului, capului și sectorului de pe pistă (C / H / S). Mai precis:

1) AH - selectarea operației;

2) СР - coborâți 8 biți din numărul cilindrului;

3) CL - biții 7-6 corespund celor mai semnificativi biți ai numărului cilindrului, biții 5-0 corespund numărului sectorului;

4) DH - numărul capului de citire;

5) DL - numărul discului (80h sau 81h).

Trebuie remarcat faptul că toate restricțiile de mai sus sunt semnificative doar în etapa de pornire a sistemului de operare, deoarece Linux în sine și cele mai recente versiuni de Windows nu mai folosesc BIOS întrerup 13 când lucrează cu discuri, ci folosesc propriile lor drivere pentru lucrul cu discuri. Dar înainte ca sistemul să poată utiliza propriul driver, trebuie să-l încarce cel puțin. Prin urmare, la etapa de boot, orice sistem este obligat să utilizeze BIOS-ul. Acest lucru determină restricții privind amplasarea multor sisteme dincolo de 8 GB, acestea nu pot porni de acolo, deși după o pornire reușită pot funcționa cu discuri mult mai mari. Pentru a înțelege cum să ocolim aceste restricții, avem nevoie de cunoștințe despre modul în care bootează Linux.

Bootloader LILO din distribuția Linux

Înainte de a continua cu instalarea celui de-al doilea sistem de operare, trebuie să alegeți o metodă de organizare a alegerii sistemului de operare în etapa de pornire a computerului. Programele Downloader rezolvă această problemă. Există mai multe programe de acest gen. Întrucât vorbim despre Linux, primul lucru de menționat este programul LILO, care este inclus în orice distribuție Linux.

LILO este un set de mai multe programe: bootloader-ul în sine, programe utilizate pentru instalarea și configurarea bootloader-ului și fișiere de service:

Programul / sbin / lilo, care rulează sub Linux, este folosit pentru a scrie toate informațiile necesare în momentul pornirii în locurile corespunzătoare. Trebuie repornit de fiecare dată când se face o modificare a kernelului sau a fișierului de configurare LILO;

Diverse fișiere de service de care LILO are nevoie la pornire. Aceste fișiere sunt de obicei localizate în directorul / boot. Cele mai importante dintre acestea sunt încărcătorul de boot în sine și fișierul hartă (/ boot / map), care specifică locația nucleului. Un alt fișier important este fișierul de configurare LILO, care este de obicei /etc/lilo.conf;

Bootloader-ul în sine este partea LILO care este încărcată mai întâi în memorie printr-o întrerupere BIOS și care încarcă nucleul Linux sau sectorul de boot al altui sistem de operare. Încărcătorul are, de asemenea, două părți. Prima parte scrie în sectorul de încărcare și servește la încărcarea celei de-a doua părți, care are o dimensiune mult mai mare. Ambele părți sunt de obicei stocate pe disc în fișierul /boot/boot.b.

Sectorul de încărcare LILO poate fi amplasat în următoarele locații în timpul instalării sistemului:

Sectorul de boot al unei dischete în format Linux (/ dev / fd0, ...);

MBR al primului hard disk (/ dev / had, / dev / sda, ...);

Sectorul de boot al partiției primare a sistemului de fișiere Linux pe primul hard disk (/ dev / hda1, / dev / hda2, ...);

Sectorul de boot al partiției logice din partiția extinsă a primului hard disk (/ dev / hda5, ...). Este adevărat, majoritatea programelor precum fdisk nu presupun că este posibil să porniți de pe o partiție extinsă și refuză să o declarați activă. Prin urmare, LILO include un program special (activ) pentru a ocoli această limitare. Dar programul fdisk din distribuția Linux acceptă capacitatea de a activa o partiție extinsă. Pentru a face acest lucru, trebuie folosită fie opțiunea -b, fie variabila BOOT.

Sectorul de încărcare LILO nu poate fi plasat în următoarele locații:

Sectorul de boot al unei dischete sau partiții primare, formatat în alte sisteme de fișiere;

Într-o partiție swap Linux;

Pe lângă faptul că LILO are nevoie de următoarele fișiere la momentul pornirii:

- / boot / map (creat la pornirea / sbin / lilo);

Toate versiunile kernel bootabile (dacă selectați o versiune kernel la momentul bootării);

Sectoarele de boot ale altor sisteme de operare care vor fi încărcate prin LILO;

Mesaje emise la boot (dacă există)

Când LILO pornește, acesta afișează cuvântul „LILO” pe afișaj. În acest caz, ieșirea fiecărei litere indică finalizarea unei anumite acțiuni sau etape a boot-ului LILO. Dacă descărcarea eșuează, atunci după numărul de litere afișate, puteți judeca cauza problemei.

Nu se scoate nimic - nu a fost încărcată nicio parte din LILO. Fie LILO nu a fost instalat, fie partiția pe care se află nu este activă

L [cod de eroare] - încărcătorul primar s-a încărcat și a pornit (controlul a fost transferat către acesta), dar nu a reușit să încarce încărcătorul secundar. Codul de eroare din două cifre indică cauza specifică a problemei. Acest lucru se datorează de obicei defectelor suportului sau geometriei discului setate incorect. Dacă LILO nu se oprește în acest moment cu un șir nesfârșit de coduri de eroare, problema este de obicei ușor de rezolvat.

LI - încărcătorul primar a putut încărca încărcătorul secundar, dar nu a reușit să-l pornească pentru executare. Acest lucru ar putea fi cauzat de o eroare la setarea geometriei discului sau de faptul că fișierul /boot/boot.b a fost mutat fără a reporni / sbin / lilo.

LIL - Încărcătorul secundar a pornit, dar nu a putut porni tabelul descriptor din fișierul hartă. Acest lucru se datorează de obicei unui defect al discului sau al unei geometrii a discului setate incorect.

LIL? - încărcătorul de încărcare secundar a fost încărcat la adresa greșită. De obicei cauzată de o eroare la setarea geometriei discului sau de mutarea fișierului /boot/boot.b fără a reporni / sbin / lilo.

LIL- - tabelul descriptor distrus. De obicei cauzată de o eroare la setarea geometriei discului sau de mutarea fișierului /boot/boot.b fără a reporni / sbin / lilo.

LILO - Toate piesele LILO au fost încărcate cu succes.

Procesul inițial și fișierul / etc / inittab

După cum știți, după ce ați pornit computerul și ați terminat testarea hardware-ului, BIOS-ul este citit din primul sector al discului de boot, care este programul bootloader. Acest program pornește încărcătorul principal de boot (cum ar fi LILO), care, la rândul său, încarcă nucleul sistemului în memorie, care este de obicei stocat în fișierul vmlinuz-x.y.z-a din directorul / boot.

De îndată ce pornește, nucleul montează sistemul de fișiere rădăcină și pornește procesul de inițiere. Procesul init este programul care este responsabil pentru continuarea procesului de boot și aducerea sistemului din starea sa inițială după pornirea nucleului într-o stare standard pentru gestionarea cererilor de la mulți utilizatori.

Lista exactă a acestor operațiuni depinde de ceea ce se numește nivelul de rulare. Nivelul de execuție definește lista acțiunilor efectuate de procesul inițial și starea sistemului după pornire, adică configurarea proceselor care rulează. Nivelul de rulare este identificat printr-un singur caracter. Există 8 niveluri de rulare principale în sistemul de operare Linux:

1) Opriți sistemul;

2) Mod unic utilizator (pentru cazuri speciale de administrare);

3) Mod multi-utilizatori fără NFS (la fel ca 3 dacă computerul nu funcționează cu rețeaua);

4) Mod multiplayer complet;

5) Utilizarea nu este reglementată;

6) De obicei folosit pentru a porni sistemul în modul grafic;

S) (sau s) - aproximativ la fel ca modul single user, dar S și s sunt utilizate în principal în scripturi.

În primul rând, după pornire, procesul inițial își citește fișierul de configurare / etc / inittab. Acest fișier este format din linii separate. Dacă linia începe cu un semn # sau este goală, atunci este ignorată. Toate celelalte linii sunt formate din 4 câmpuri separate prin două puncte:

id : niveluri de rulare : acțiune : proces

id - identificator rând;

runlevels - niveluri de rulare;

proces - proces;

acțiune - acțiune;

Câmpul de acțiune conține un cuvânt cheie care definește condiții suplimentare pentru comanda specificată de câmpul de proces. Valori valide pentru câmpul de acțiune:

respawn - reporniți procesul dacă se termină;

o dată - executați procesul o singură dată când treceți la nivelul specificat;

așteptați - procesul va fi lansat o dată la trecerea la nivelul specificat;

sysinit - Acest cuvânt cheie indică acțiunile care trebuie efectuate în timpul pornirii sistemului, indiferent de nivelul de rulare (câmpul id este ignorat).

boot - procesul va fi lansat în etapa de încărcare a sistemului de la nivelul de rulare;

bootwait - procesul va fi pornit în etapa de pornire a sistemului de la nivelul de execuție și init va aștepta finalizarea acestuia;

initdefault - linia în care apare acest cuvânt în câmpul de acțiune definește nivelul de rulare la care sistemul merge în mod implicit.

off - ignorați acest element;

powerwait - Permite procesului inițial să oprească sistemul atunci când se pierde puterea.

Ctrlaltdel - Permite inițial să repornească sistemul atunci când utilizatorul apasă o combinație de taste pe tastatură.

Această listă nu este exhaustivă. Pentru mai multe informații despre fișierul inittab, consultați paginile man init (8), inittab (5) și getty (8).

2 . Partea proiectului

2.1 Declarația problemei

Este necesar să studiați materialul teoretic pe tema selectată, să dezvoltați un algoritm pentru bootloader atunci când implementați metoda (prezentată sub forma unei diagrame bloc) și să descrieți algoritmul.

2.2 Dezvoltarea unui algoritm pentru rezolvarea problemei

Intrare: sistem uniprocesor, program de aplicație, încărcător LILO, program POST, excludere reciprocă.

Figura 1 prezintă algoritmul pentru „încărcarea unui program de aplicație”.

Figura 2 prezintă algoritmul pentru „încărcarea sistemului de operare”

2.3 Descrierea algoritmului pentru încărcarea programului de aplicație

1) Programul de aplicare este lansat pentru executare. După aceea, programul de sistem „Loader” este activat.

2) După activare, începe scanarea RAM pentru a găsi zone libere.

3) Dacă se găsesc astfel de zone, începe determinarea începutului adresei de alocare a zonei libere. Apoi mergem la această adresă și stabilim dimensiunea zonei libere.

4) După aceea, se determină dimensiunea codului programului de aplicație, care este lansat pentru executare.

5) Comparați dimensiunea codului și dimensiunea zonei libere din RAM.

6) Dacă există suficient spațiu în RAM pentru a copia codul programului aplicației, atunci numărul de pagini virtuale de pagini fizice este instalat în tabelul de pagini. Apoi, codul aplicației este copiat în memoria RAM. Și sfârșitul procesului.

7) În caz contrar, vom afla dacă există suficient spațiu în RAM pentru o parte din codul programului de aplicație. Dacă da, atunci repetăm ​​acțiunile respective atunci când există suficient spațiu pentru codul complet al programului de aplicație. Dar după copierea codului în RAM, o parte din cod este copiată în zona de swap.

8) Dacă nu există suficient spațiu pentru o parte a codului, atunci există o tranziție la etapa de scanare a RAM pentru a găsi zone libere.

2.4 Descrierea algoritmului de boot al sistemului de operare (Sistem de operare)

1) Începe programul POST. Cu ajutorul acestui program, memoria disponibilă este testată, se determină prezența altor componente (diferite dispozitive PC, de exemplu: tastatură, hard disk etc.) și cardurile adaptorului sunt inițializate.

2) După ce programul rulează, POST este afișat pe ecran despre rezultatele muncii sale.

3) Numim programul 19H, care încearcă să găsească dispozitivul de boot.

4) BIOS-ul de întrerupere 19H încarcă bootloader-ul principal în memoria computerului și transferă controlul către acest program

5) Din cauza lipsei de putere a acestui program, încărcați sistemul de operare. Prin urmare, ea caută un program mai puternic care să poată face acest lucru - un încărcător secundar. Pentru a face acest lucru, caută în tabela de partiții partiția activă și citește încărcătorul secundar în memorie.

6) Încărcătorul secundar încarcă primul strat de programe necesare pentru a porni sistemul de operare. Programul de încărcare încarcă modulul IO.SYS la 700h, apoi MSDOS.SYS transferă controlul către secțiunea SYSINIT a modulului IO.SYS.

7) Dacă, dintr-un anumit motiv, o partiție activă nu a fost găsită pe disc în tabela de partiții, procesul de încărcare continuă prin procesarea întreruperii 18h.

2.5 Descrierea algoritmului de descărcareUnixfolosind bootloader-ulLILO

1) Rulați programul / sbin / lilo pentru a scrie toate informațiile necesare în etapa de boot în locurile corespunzătoare. Căutați fișierele de service solicitate de LILO în momentul pornirii.

2) Dacă fișierele nu sunt găsite, atunci se afișează un mesaj despre sfârșitul descărcării.

4) În cazul în care încărcătorul principal nu a reușit să-l încarce pe cel secundar, atunci pe ecran se afișează un mesaj informativ despre o eroare în timpul încărcării.

6) Dacă încărcătorul principal a încărcat cu succes încărcătorul secundar, dar nu a reușit să pornească, atunci se afișează un mesaj informativ despre o eroare în timpul încărcării.

7) În caz contrar, pornește bootloaderul secundar.

8) Verificați dacă încărcătorul de încărcare secundar este încărcat la adresa corectă.

9) Dacă nu, atunci apare un mesaj informativ despre o eroare în timpul încărcării.

10) Verificați dacă tabelul descriptorului este corupt. Dacă da, atunci se afișează un mesaj informativ despre o eroare în timpul încărcării. Dacă nu, tabelul descriptor este încărcat din fișierul hartă.

11) Verificarea dacă lansarea tabelului descriptor a avut succes. Dacă nu, trimiteți un mesaj de eroare informațional la pornire.

12) În caz contrar, trimiteți un mesaj informativ despre încărcarea cu succes a LILO.

Concluzie

În acest curs, sunt luate în considerare unele aspecte ale încărcării programelor. Tipuri de încărcătoare: în mișcare, primare, secundare etc. Necesitatea utilizării bootloaderului în diferite medii de operare a fost dovedită. Sunt discutate diverse metode de încărcare, cum ar fi încărcarea unei aplicații, pornirea cu încărcătorul LILO și pornirea sistemului de operare. Materialul teoretic pe subiect a fost studiat, algoritmi pentru funcționarea încărcătorului au fost dezvoltați la implementarea metodei (prezentat sub forma unei diagrame bloc).

Referințe

1. Tanenbaum Andrew. Sisteme de operare moderne / Tanenbaum Andrew. - a 2-a ed. - SPB.: Peter, 2002. - 1037p.: Bolnav. - (Informatică clasică). - ISBN 5-318-00299-4

2. Partyka, T.L. Sisteme de operare, medii și cochilii: un tutorial pentru medii. Prof. Arh. râuri. MO / Partyka, T.L, Popov, I.I. - M.: FORUM: INFRA - M, 2006. - 399 p .: Ill. - (Educatie profesionala). - ISBN 5-8199-0072-5-16-001355-5

3. Olifer, V.G. Sisteme de operare în rețea: Manual. manual pentru universitățile râurilor. MO / Olifer, V.G., Olifer, N.A. - SPb.: Peter, 2003. - 538s .: Ill. - ISBN 5-272-00120-6

4. Trubacheva, S.I. Programare în sisteme de operare: Ghid metodologic / Trubacheva, S.I. - Togliatti: VUiT, 2006 .-- 44p.

5. Terence Chan. Programarea sistemului în C ++ pentru Unix / Ed. Kolomytsev. - Kiev, 2004.

6. Tucket D., Barnet S. Ediție specială. Folosind LINUX / Per. din engleza - ed. A 4-a. SPb.: Williams, 2003.

7. Ivanova G.S. Programare C ++ / Manual. Ed. M.: MGTU, 2002.

Documente similare

    Caracteristicile generale ale sistemului Android, o privire de ansamblu asupra analogilor săi. Cerințe preliminare pentru a începe cu Android. Configurarea configurațiilor Ubuntu. Scrierea de scripturi pentru a simplifica generarea Linux. Depanarea și testarea programului pe placa freescale i.MX53.

    hârtie pe termen adăugată la 10/12/2012

    Luarea în considerare a caracteristicilor managerilor de descărcare. Descrierea Download Accelerator Plus, Download Master, FlashGet, GetRight, ReGet, Go! Zilla. Caracteristici comparative ale managerilor de boot Windows. Programe pentru sistemele de operare Unix, Linux și Mac.

    rezumat, adăugat 09/06/2014

    Conceptul și structura distribuțiilor Linux, istoria originii lor și principalii dezvoltatori. Clasificarea distribuțiilor după natura asamblării și instalării, revizuirea versiunilor lor finite. Descrierea modalităților de a crea propria distribuție.

    termen de hârtie, adăugat 04/02/2014

    Diagrama generală a procesului de încărcare, etapele sale principale și caracteristicile distinctive. Încărcătoare primare și secundare, funcționalitatea și direcțiile lor de acțiune. Locații posibile pentru sectorul de încărcare. Cerințe de spațiu pe disc.

    prezentare adăugată 20.12.2013

    Analiza capacităților tehnice ale sistemului de operare Mandriva Linux - un kit de distribuție GNU / Linux dezvoltat de compania franceză Mandriva, care lansează versiuni gratuite, comerciale și corporative ale kitului său de distribuție. Pași de instalare a shell-ului Linux.

    prezentare adăugată la 23.05.2010

    Repere din istoria sistemelor de operare care leagă hardware și programe de aplicații. Caracteristicile sistemului de operare Microsoft Windows Seven, analiza sistemului de operare Linux. Avantajele și dezavantajele fiecărui sistem de operare.

    hârtie la termen, adăugată la 05/07/2011

    Alegerea instrumentelor pentru dezvoltarea unui program de instalare pentru distribuție. Implementarea unui modul pentru o distribuție Gentoo, funcționând conform manualului de utilizare pentru acest sistem. Testarea instalatorului pe diferite arhitecturi.

    teză, adăugată 18.07.2013

    Etape de încărcare a unui sistem Linux, înregistrare. Gestionarea contului de utilizator. Principiul numirii dispozitivelor, scopul și utilizarea fișierelor speciale. Gestionarea fișierelor, acces la sistemul de fișiere, joburi. Structura de bază a fișierelor Linux.

    manual, adăugat 15.11.2014

    Luarea în considerare a diferitelor distribuții ale sistemului de operare. Studiul protocoalelor de schimb de date și formatelor de stocare fizică a datelor. Dezvoltarea unui kit de distribuție bazat pe Linux pentru funcționarea ca parte a stocării în rețea StarNAS.

    hârtie pe termen adăugată la 11/05/2015

    Caracteristici de încărcare a sistemului de operare Linux în modul terminal, conectarea și înregistrarea utilizatorilor. Efectuarea reatribuirii fișierului, folosindu-l pentru a lucra cu comenzile sistemului de operare. Aplicarea canalelor de programe (conducte).