Bootowanie

Bootowanie systemu polega na przeniesieniu części systemu operacyjnego do pamięci i polecenie procesorowi wykonania jej. Bootowanie systemu musi być napisane w języku asemblera, gdyż sam proces ładowania jądra systemu jest związany z architekturą. Ładowanie się systemu jest podzielone na kilka faz.

BIOS

BIOS przeprowadza testy na obecność i poprawność działania sprzętu.

Następnie inicjuje urządzenia sprzętowe. Ta faza ma zagwarantować, że nie będzie kofliktów na liniach IRQ i adresach portów I/O.

W zależności od ustawieć poszukuje systemu operacyjnego do załadowania.

Jeżeli znajdzie urządzenie z systemem, kopiuje zawartość jego pierwszego sektora począwszy od adresu 0x00007c00 i uruchamia ten kod.

Boot Loader

Programem, który powinien zostać uruchomiony jest Boot Loader. W zależności od tego, czy system ładowany jest z dyskietki, czy też z dysku twardego, proces ten przebiega trochę odmiennie.

Ładowanie z dysku twardego

Master Boot Record, czyli pierwszy sektor dysku twardego zawiera tabicę partycji oraz program ładujący pierwszy sektor partycji zawierającej system operacyjny.

W Linuxie w MBR może znajdować się część programu LILO. Program ten przenosi się pod inny adres (0x0009a000), ustawia stos trybu rzeczywistego, i ładuje swoją drugą część.

Następnie czyta listę dostępnych systemów operacyjnych i dla wybranego systemu kopiuje program ładujący obraz jądra (0x00090000), kod setup (0x00090200), i resztę obrazu jądra (0x00010000) lub (0x00100000).

Ładowanie z dyskietki

Podczas ładowania systemu z dyskietki wykonywany jest program zakodowany w pliku: arch/i386/boot/bootsect.S

Program ten podobnie do LILO przenosi się pod adres (0x00090000), ustawia stos trybu rzeczywistego (ale też na inny adres). Następnie kopiuje funkcje setup i resztę obrazu jądra tak samo jak LILO.

Funkcja setup

Funkcja setup (0x00090200) inicjuje urządzenia, odwzorowywuje przerwania IRQ na przedział od 32 do 47. Włącza tryb chroniony procesora i wykonuje skok do funkcji startup_32 .

Funkcja startup_32

Funkcja ta znajduje się w pliku arch/i386/boot/compressed/head.S

Funkcja ta inicjuje rejestry segmentacji i tymczasowy stos, wypelnia zerami niezainicjowany obszar jądra i wywołuje funkcje decompress_kernel, w celu zdekompresowania jądra.

Zdekompresowane jądro zaczyna się od innej funkcji startup_32. Ta funkcja znajduje się w pliku arch/i386/kernel/head.S. Kończy ona inicjację rejestrów, ustawia stos trybu jądra dla procesu 0, identyfikuje parametry systemu i wykonuje skok do funkcji start_kernel.

Funkcja start_kernel

Jest to pierwsza funkcja wywoływana podczas bootowania systemu napisana w C. Inicjuje ona złożone struktury danych, takie jak tablicę stron czy czas systemowy.
Powrót