BIOS - procedura startowa


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.



Copyright © by MiniMax 1997/2007. All rights reserverd!