|
Wstęp
BIOS to zestaw instrukcji wykonywanych przez procesor bezpośrednio po
uruchomieniu komputera. Instrukcje te są zamieszczone w pamięci ROM umieszczonej
na płycie głównej. Wykonanie tych instrukcji zwykle skutkuje zainicjowaniem
urządzeń i uruchomieniem programu ładującego system operacyjny. Ponadto BIOS
modyfikuje wektor przerwań, ustawiając własne procedury obsługi niektórych
przerwań, które wykorzystywać można do komunikacji ze sprzętem.
Nazwa BIOS to akronim od Basic Input Output System, w języku greckim słowo bios
(βιος) oznacza "życie".
W dokumentacji w języku angielskim BIOS często określa się mianem firmware, co
oznacza program na trwałe wpisany do pamięci ROM.
Niektóre urządzenia podłączane do płyty głównej, na przykład karty graficzne,
kontrolery napędów zawierają własny BIOS, zastępujący lub uzupełniający BIOS
płyty głównej o obsługę danego urządzenia.
Pierwszy BIOS (zaprojektowany przez firmę IBM) ujrzał światło dzienne w sierpniu
1981. Od tego czasu nie uległ większym zmianom, co prawda był stale rozszerzany
o nowe funkcje, ponadto zmienił się sposób zapisu BIOSu na płycie głównej
(zamiast pamięci ROM używa się obecnie pamięci flash), natomiast podstawowa
koncepcja nie uległa zmianie. Dzisiejsze BIOSy zachowują kompatybilność ze
swoimi poprzednikami sprzed 20 lat.
BIOS od strony fizycznej i procedura startowa
Podstawowe informacje
Gdzie znajduje się BIOS?
BIOS znajduję się na płycie głównej komputera. Poza tym, niektóre urządzenia (np.
karty sieciowe) posiadają swój BIOS. Można go łatwo odnaleźć na płycie, ponieważ
jest oznaczony nazwą producenta (np. Award, AMI, Phoenix).
Na jakim nośniku znajduje się BIOS?
BIOS znajduje się w pamięci ROM, jest to zazwyczaj pamięć EEPROM (electrically-erasable
read-only memory), która umożliwia ponowne nagrywanie zawartości BIOSu - na taki
BIOS mówi się zazwyczaj "flash BIOS".
Czym jest BIOS?
BIOS jest zwykłym programem dla procesora np. z linii x86. Różni sie od innych
programów tym, że uruchamia się z pamięci ROM i nie potrzebuje do działania
systemu operacyjnego - jest wręcz odwrotnie: system operacyjny jest ładowany
przez BIOS, a potem z niego korzysta (chociaż ostatnio systemy operacyjne rzadko
korzystają z jego funkcji).
Pamięć CMOS
Ustawienia BIOSu muszą być zapisywane w pamięci, która nie ulegnie wyczyszczeniu
przy ponownym uruchomieniu komputera. Tę rolę odgrywa pamięć typu CMOS (Complementary
Metal Oxide Semiconductor). Często na pamięć BIOSu mówi się "CMOS", ale trzeba
pamiętać, że pamięć typu CMOS jest używana również w innych częściach komputera.
Kiedyś jedynym miejscem, w którym występowała, był BIOS - stąd brak nazwy
własnej jego pamięci.
W pamięci BIOSu zachowywane są informacje o dacie systemowej, konfiguracji
dysków oraz wszystkich innych ustawieniach, do których mamy dostęp przez program
konfiguracyjny BIOSu.
Pamięć ta jest podtrzymywana przez baterię, ale zużywa bardzo małą ilość pamięci
- to jej podstawowe założenie konstrukcyjne. Ma ona zazwyczaj pojemność jedynie
64 bajtów.
Co się dzieje po uruchomieniu komputera?
Uruchomienie
Po włączeniu komputera, procesor wykonuje pierwszą instrukcję w BIOSie. Rejestry
CS i IP świeżo uruchomionego procesora zawierają wartości F000 i FFF0. W
komputerach osobistych ten adres wskazuje na obszar zarezerwowany dla BIOSu;
również później wykonywany kod nie wychodzi poza ten obszar.
Procesor jako pierwszą wykonuje instrukcję spod adresu F000:FFF0, czyli
szesnaście bajtów przed górnym krańcem pamięci w trybie rzeczywistym (jest to
jeden megabajt). Należy przypomnieć, że aby zachować kompatybilność wstecz,
wszystkie procesory Intela uruchamiają się w trybie 16-bitowym. BIOS (za
wyjątkiem fazy POST, gdzie tryb ten może być testowany) nie przełącza procesora
w tryb 32-bitowy. Przełączenie na stałe nie jest zresztą proste: należy
zainicjować globalną i lokalne tablice deskryptorów, zaplanować segmentację
(wiele systemów nie wykorzystuje jej całkowicie), włączyć stronicowanie itd., a
tryb ten nie jest raczej do niczego BIOSowi potrzebny. Ponieważ można korzystać
z mechanizmów ochrony pamięci udostępnionych przez procesor na wiele sposobów,
BIOS zostawia to systemowi operacyjnemu, a ten dopiero decyduje o dalszym trybie
pracy.
W oryginalnym IBM ROM BIOSie pod adresem F000:FFF0 znajduje się skok pod adres
F000:E05B, ale nie można na tym polegać przy pisaniu przenośnych programów (o
ile można w ogóle o czymś takim mówić w wypadku kodu w asemblerze). W każdym
razie, w tym momencie rozpoczyna się tak zwany POST (Power-On-Self-Test).
POST - test komputera
Aby upewnić się, że komputer jest sprawny, BIOS przeprowadza test wszystkich
podzespołów i w razie błędu daje o tym znać użytkownikowi. Potem BIOS wykonuje
następujące testy:
● test rejestrów procesora
● sprawdzenie sumy kontrolnej BIOSu
● test sterownika klawiatury
● test zegara systemowego
● sprawdzenie dostępu do bazowych 64 Kb
pamięci
● test pamięci cache
● test sprawności baterii systemowej
● test karty graficznej
● test trybu chronionego
● próba odczytu i zapisu do pamięci
konwencjonalnej
● test pamięci rozszerzonej
● test sterownika DMA
● sprawdzenie konfiguracji systemu
Jeżeli komputer był po zwykłym restarcie bez odłączenia zasilania, pod adresem
0000:0472 znajduje się wartość 0x1234 i BIOS pomija niektóre testy. W innym
przypadku przeprowadzane są wszystkie.
Ciekawe jest, że BIOS w trakcie testowania systemu zapisuje rezultaty do jednego
z portów (zazwyczaj jest to port 0x80). Wysyłane są do niego kody diagnostyczne
POST, a do ich odczytania może się przydać karta POST. W trakcie testu można
przycisnąć pewien klawisz (np. Del), aby przejść do trybu konfiguracji BIOSu.
Jeżeli błąd przy testowaniu nastąpi po przygotowaniu do pracy karty graficznej,
na ekranie wypisywany jest odpowiedni komunikat. Błędy ze wcześniejszej fazy są
przedstawiane przy pomocy systemowego głośnika.
Karta POST
Karta POST służy do zbierania informacji o przebiegu testowania komputera przez
BIOS. Informacje te są zapisywane do portu, na co reaguje odpowiednia karta
podłączona do komputera. Takie karty przydają się przede wszystkim osobom
zajmującym się sprzedażą i naprawą komputerów osobistych. Kartę taką można nawet
skonstruować samemu, ale należy posiadać odpowiednie umiejętności z zakresu
elektroniki.

Okazuje się, że karty POST bywają wykorzystywane przez programistów, którzy nie
zajmują się bezpośrednio sprawami sprzętowymi. Jeżeli piszą oni programy
systemowe działające w trybie pełnych uprawnień do procesora, wysyłają różne
wartości do karty POST i na podstawie tych informacji odpluskwiają swoje
programy.
Listę wartości zapisywanych przez BIOS i odczytywanych przez karty POST można
znaleźć pod adresem:
http://www.bioscentral.com
Ładowanie systemu operacyjnego
Po zakończeniu testowania, BIOS wywołuje przerwanie 0x19. Kod, do którego
przekazywane jest sterowanie, próbuje załadować pierwszy sektor z zerowej
ścieżki aktualnego urządzenia uruchamiającego (dyskietka, dysk twardy, CD-ROM)
do pamięci. W razie powodzenia operacji, jest on zamieszczany pod adresem
0000:7C00. Następnie BIOS skacze pod ten adres. Dlatego pisanie swojego systemu
operacyjnego można rozpocząć od umieszczenia skompilowanego kodu na pierwszym
sektorze zerowej ścieżki i włożenia jej do stacji. To proste!
Jeżeli ładowanie systemu nie powiedzie się z powodu braku sektora startowego,
wywoływane jest przerwanie 0x18. I tu ciekawostka: najstarsze komputery
uruchamiały wtedy interpreter języka BASIC, od którego swoją przygodę z
komputerami rozpoczęło wielu informatyków (w tym autor tych słów).
W dzisiejszych czasach, wyświetlany jest po prostu tekst: "NO BOOT DEVICE
AVAILABLE" i nie można nic zrobić.
Umieszczanie BIOSu w pamięci RAM (shadowing)
Kod BIOSu jest zwykle umieszczony w pamięci ROM. Pamięci ROM są jednak znacznie
wolniejsze od pamięci RAM - dostęp do pamięci ROM odbywa się w blokach
ośmiobitowych, do pamięci RAM w blokach trzydziestodwubitowych. Poza tym czas
dostępu do pamięci ROM jest większy - od 150 do 200 nanosekund, dla pamięci RAM
- od 60 do 70 nanosekund. Z tego powodu często spotykaną techniką jest
kopiowanie kodu BIOSu do pamięci RAM podczas startu komputera - tak zwany
shadowing.
Dostęp do pamięci ROM BIOS odbywa się poprzez adresy F000-FFFF. Ten sam zakres
adresów istnieje także w pamięci RAM. Jeżeli shadowing jest aktywny, zawartość
pamięci ROM BIOS jest kopiowana do pamięci RAM pod ten zakres adresów po
uruchomieniu komputera.
Istnieje ponadto opcja umieszczania w pamięci RAM BIOSu karty graficznej. BIOS
karty graficznej jest zwykle umieszczony na kościach ROM wbudowanych kartę (w
przypadku płyt głównych z wbudowaną kartą graficzną BIOS karty graficznej jest
umieszczony w tej samej kostce, co BIOS płyty). Dostęp do BIOSu karty graficznej
odbywa się zwykle przez adresy C000-C7FF. Jeżeli shadowing BIOSu karty
graficznej jest aktywny, po uruchomieniu komputera zawartość BIOSu karty
graficznej zostanie skopiowana do pamięci RAM pod adresy C000-C7FF.
Niektóre BIOSy umożliwiają także umieszczanie w pamięci RAM BIOSów innych
urządzeń, na przykład karty sieciowej.
Autorzy:
Filip Noworyta
Jerzy Papiorek
D.F.
|