osdev.labedz.org

Program ładujący system

Program ładujący system (ang. bootloader) jest krótkim programem ładowanym przez BIOS komputera w chwili jego startu. Program ten jest niezbędny, gdyż BIOS nie ma informacji na temat środowiska wymaganego przez ładowany system operacyjny. Tworzenie środowiska i ładowanie systemu operacyjnego wraz z odpowiednimi modułami jest właśnie zadaniem programu ładującego.

BIOS ładuje program bootloader'a ze z góry określonej pozycji i przekazuje mu sterowanie. Jest on umieszczony na zerowej ścieżce dysku, pod zerową głowicą (ang. bootsector). Urządzenie pamięci masowej, które ma być użyte do ładowania systemu jest zdefiniowane przez konfigurację BIOS'u. BIOS ładuje pojedynczy sektor o rozmiarze 512 bajtów do obszaru pamięci o adresie 0x0:7C00h. W celu weryfikacji czy ładowany jest właściwy sektor, BIOS sprawdza ostatnie dwa bajty odczytanego sektora czy są one równe wartości 0xAA55. Jeżeli wartość pod tym adresem jest inna, BIOS sygnalizuje błąd bootsektor'a i, zależnie od konfiguracji, próbuje uruchomić system z innego urządzenia pamięci masowej, lub też zawiesza działanie komputera. Jeżeli pod wskazanym adresem znajduje się odpowiednia wartość, BIOS wykonuje instrukcję skoku pod adres 0x0:7C00 tym samym przekazując kontrolę programowi ładującemu.

Program zawarty w bootsektorze nie może przekraczać 510 bajtów (wielkość sektora minus znacznik bootsektora) i jest napisany najczęściej w języku assemblera trybu rzeczywistego procesora. Przykładowy, najprostszy program umieszczony w bootsektorze ma postać:

.;************************************** [BITS 16] ORG 0 INT 0x18 TIMES 510-($-$$) DB 0 DW 0xAA55 ;*************************************

Ponieważ najczęściej programy ładujące są rozbudowane na tyle, że się nie mieszczą w 510 bajtach, program w bootsektorze ma za zadanie jedynie zainicjować właściwy proces bootowania - czyli uruchomić większy program zawarty w innym miejscu na przestrzeni dyskowej.

Pisanie programów ładujących system operacyjny jest najczęściej odrębnym zagadnieniem od właściwej implementacji systemów operacyjnych, dlatego warto jest zapoznać się z gotowymi już, uniwersalnymi programami tego typu.