BIOS - wstęp

Skrót BIOS pochodzi od Basic Input/Output Sytem. Czym jest BIOS ? Jest to nic więcej jak program komputerowy – zbiór instrukcji, które mówią procesorowi w naszym komputerze co ma robić. Tym co go wyróżnia spośród innych programów jest miejesce, w którym jest przechowywany oraz funkcje, za które odpowiada.
W przeciwieństwie do innych programów BIOS jest nieodłączną częścią komputera. Nie jest on ładowany z dysku ale jest przechowywany w specjalnych kościach pamięci tylko do odczytu ( Read-Only Memory)( od niedawna dostępne są także inne nośniki). Kod źródłowy programu zapisanego w BIOS’ie różni się od normalnego oprogramowania, jest on integralną częścią komputera, definiując przy tym co nasz komputer może robić. Jest to specyfikacja sprzętowa przyporządkowana dokładnie do jednego komputera.
 

Historia Biosu sięga końca lat 70, kiedy to Intel, wydał dwa procesory nowego typu, 8086 i 8088. Firma IBM zdecydowała się zbudować komputer oparty na procesorze 8088.  IBM skontaktował się z małą, młodą firmą w Seattle – Microsoftem. Obie firmy zgodziły się zbudować system operacyjny dla „Komputera Osobistego”, który miał składać się z dwóch części.  Pierwsza z nich – Basic Input/Output System – została dodana do sprzętu komputerowego w postaci pamięci tylko do odczytu ( Read-Only-Memory – ROM). Druga część, system operacyjny, był dostępny na dysku ( na początku na dyskietce ). System operacyjny składa się z programów, które powinny komunikować się z BIOS’em zapisanym w pamięci ROM i dodatkowo kilku programów użytkowych, które powinny wykonywać dodatkowe zadania, takie jak np. formatowanie dysków. Ta część systemu operacyjnego została nazwana Disk Operating System – DOS.
 System ten został wydany w sierpniu 1981 roku, kiedy IBM zaczął rozprowadzać swój Komputer Osobisty – PC, czerpiąc przy tym ogromne zyski.

W większości najnowszych komputerów BIOS niewiele różni się od BIOS’u stworzonego w 1881 roku, dalej wykonuje on takie same funkcje, jedyne co jest do niego dodawane to obsługa co raz to nowszego sprzętu.
Jednak dzisiejsze systemy operacyjne bardzo sporadycznie korzystają z BIOS’u zastępując większość jego funkcji swoimi, zooptymalizowanymi funkcjami.

Jeśli nie używamy tak przestarzałego systemu jak DOS, jedną z najważniejszych funkcji BIOS’u jest System Setup. Ma ona mały związek z operacjami wejścia, wyjścia, ale jest kluczem do tego aby nasz komputer działał dokładnie jak tego chcemy. Uzyskujemy możliwość dostosowania konfiguracji sprzętowych, począwszy od rzeczy tak prostych jak zegar systemowy, skończywszy na rzeczach tak skomplikowanych jak dostosowywanie prędkości taktowania procesora i pamięci. Jeśli chcemy wycisnąć ze swojego komputera kilka procent ukrytej mocy, ta funkcja BIOS’u jest podstawowym narzędziem – jeśli twórcy płyty głównej udostępnili nam takie możliwości.

Jak początkowo sobie wyobrażano, BIOS miał pełnić cztery funkcje. Powinien upewniać się czy wszystkie komponenty komputera działają prawidłowo poprzez testowanie ich podczas każdego włączenia komputera, funkcja ta została nazwana Power-On-Self-Test – w skrócie POST. Po starcie systemu BIOS przejmował kontrolę nad fundamentalnymi operacjami, upewniając się, że pamięć dynamiczna jest zawsze odświeżana z właściwą częstotliwością (obecnie zajmują się tym inne urządzenia, które pobierają z BIOSU odpowiednie parametry) i wprowadzając okresowo uruchamiane funkcje porządkujące. BIOS także rezerwuje mały blok pamięci RAM nazywany BIOS Data Area, gdzie są przechowywane informacje dotyczące konfiguracji komputera, do których mogą odnosić się inne programy (rysunek i szczegóły poniżej). I ostatecznie BIOS jest pomostem łączącym nasze programy, w tym system operacyjny, ze sprzętem komputerowym.

W jaki sposób BIOS przechowuje dane ?
Bios przechowuje w sobie tylko trywialną część danych wymaganych przez swój kod – kilka bajtów identyfikujących firmę, która napisała BIOS, jego wersję i datę. Poza przechowywaniem swoich własnych informacji BIOS używa niewielkiej przestrzeni, w której zapisuje informacje konfiguracyjne naszego komputera, takie jak np. zainstalowane typy dysków.
Gdy BIOS inicjalizuje komputer,  zbiera informacje o wyposażeniu i zapisuje wyniki w przeznczonych do tego miejscach w pamięci operacyjnej naszego komputera. Sprawdza on liczbę i typy zainstalowanych portów, typ karty graficznej (kolorowa czy monochromatyczna) i inne opcje.
Wśród przechowywanych danych znajdują się tzw. equipmnet flags – podstawowe adresy wejscia/wyjścia zainstalowanego sprzętu, znaki jakie możemy otrzymać z klawiatury oraz tryby operacyjne. BIOS przechowuje te informacje w ściśle określonych miejscach w pamięci tak, żeby inne programy mogły sprawdzać jaki sprzęt jest dostępny lub jest używany. Jak wcześniej wspomniałem, miejsce, w którym zapisywane są te wszystkie dane, nazywa się BIOS data area, która umiejscowiona jest zaraz pod wektorami przerwań,  zawiera 256 bajtów i zaczyna się pod adresem pamięci 000400(Hex), a kończy na adresie 0004FF(Hex). Poniższa tabela pokazuje co jest przechowywane w poszczególnych bajtach BIOS data area:

Adres

Co jest tam przechowywane

400

COM1 base address

402

COM2 base address

404

COM3 base address

406

COM4 based address

408

LPT1 base address

40A

LPT2 base address

40C

LPT3 base address

40E

LPT4 base address

410

Equipment installed

412

Interrupt flag (POST)

413

Memory size in kilobytes

415

Reserved

416

Control flag

417

Keyboard flags

419

Keypad input byte

41A

Key buffer

43E

Diskette seek/recalibrate status

43F

Diskette drive motor status

440

Diskette motor on time

441

Diskette status

442

Diskette controller status

449

Video mode

44A

Video columns

44C

Video length

44E

Video start

450

Cursor locations

460

Cursor size

462

Active page

463

Video controller address

465

Video mode register value

466

Video palette

467

ROM check address

46B

CPU rate control

46C

Timer count

470

Timer overflow byte

471

Break key pressed flag

472

Soft reset flag

474

Hard disk status

475

Number of hard disks

476

Hard disk control

477

Reserved

478

Parallel port time-out values

47C

Serial port time-out values

480

Key buffer

484

Number of VGA video rows

485

Bytes per character

487

EGA status bytes

489

VGA status

48A

Display combination code index

48B

Last diskette data rate

48C

Hard disk status

48D

Hard disk error value

48E

Hard disk interrupt flag

48F

Diskette info nibbles

490

Diskette state information

494

Diskette cylinder number

496

Keyboard control

497

Keyboard flag

498

Real-time clock user flag

49C

Real-time clock time

4A0

Real-time clock wait flag

4A1

Network work area

4A8

EGA/VGA environment pointer

4AC-4FF

Reserved


 

Dzisiaj sprzęt komputerowy i peryferia są generalnie kontrolowane przez system operacyjny i różnorodne sterowniki, jednak BIOS pomaga z niskopoziomową inicjalizacją chipów podczas startu systemu. Jednak duża część systemów operacyjnych pomija parametry BIOS’u podczas wyszukiwania sprzętu i innych operacji. Jeśli kiedykolwiek zastanawialiście się dlaczego jakieś urządzenie jest wyświetlane w menadżerze urządzeń pomimo tego, że wyłączyliście je w BIOS’ie – to jest właśnie powód.
BIOS kontroluje także inny typ pamięci, tzw. CMOS (Complimentary Metal Oxide Semiconductor), gdzie są przechowywane ustawienia wewnętrzne BIOSu. Jedną z najważniejszych cech technologi CMOS jest to, że wymaga ona bardzo mało energii, aby przechowywać dane, mała bateryjka wystarczy, aby dane były przechowywane przez lata. Pomimo tego CMOS działa jak normalna pamięć komputera, w której możemy zapisać wszystko w bardzo łatwy sposób.

 

Co sie dzieje po starcie komputera ?

Bez pewnych instrukcji, nasz systemowy procesor nie robiłby niczego poza pobieraniem mocy. Potrzeba mu powiedzieć co ma robić – jak ma się kontrolować, jak kontrolować resztę systemu, jak inicjalizować pamięć, DMA, jak obsługiwać przerwania.

Wszystkie mikroprocesory oparte na architekturze Intel’a startują w ten sam sposób. Po tym jak chip wykona niewidoczny test samego siebie, zabiera się za szukanie instrukcji skoku w specjalnym miejscu w pamięci. Chip czyta zawartość tego adresu, a następnie wykonuje instrukcje skoku do miejsca gdzie przechowywany jest początek wykonywanego kodu. We wczystkich komputerach klasy PC, BIOS przechowuje adres pierwszego skoku oraz kod pierwszej funkcji, w której procesor znajduje zbiór instrukcji. Miejscem, w którym przechowywany jest adres pierwszego skoku jest 000F:FFFF - ( memory segment address:memory offset address).

Podczas POST'u komputer osobisty postępuje według standardowej procedury - system inicjalizuje i testuje swoje komponenty. Między innymi, zapisuje i odczytuje testowe dane z każdej komórki pamięci dynamicznej, która w nowoczesnych komputerach ma kilkaset megabajtów, co zajmuje pare sekund. Na szczęście większość komputerów osobistych można zmusić do ominięcia tych czasochłonnych testów pamięci, często poprzez system configuration adjustment.

Każda funkcja startowa BIOS'u jest oddzielnym modułem. Budowa BIOS'u pozwala rozpoznawać i dodawać dodatkowe moduły. Ta cecha umożliwia dodawanie dodatkowych kodów inicjalizacyjnych pochodzących z innych urządzeń sprzętowych.
Od prawie pierwszego BIOS'u stworzonego przez IBM'a az po najnowsze dzisiejsze BIOS'y, do znalezienia rozszerzonych pamięci ROM w dodatkowych kartach uzywana się prostego procesu - BIOS rutynowo skanuje specjalnie zarezerwowane miejsca w pamięci szukając specjalnej sekwencji bajtów, które stanowią sygnaturę dodatkowych modułów dla BIOS'u. Ta sygnatura została nazwana preamble bytes, a jej format został ściśle narzucony. Specjalna 2-bajtowa sekwencja wskazuje początek sekcji zawierającej szukany kod. Zaraz za 2-bajtowym preamble-bytes jest 3. bajt, który przechowuje długość dodatkowego BIOS'u. Liczba tam zawarta mówi nam jak wiele 512-bajtowych bloków będziemy potrzebowali, aby zapisać dodatkowy kod. Dziejsze urządzenia Plug-and-Play korzystają z podobnego schematu, lecz korzystają z bardziej złożonych nagłówków.
Po poprawnym zdefiniowaniu dodatkowego kodu, BIOS skacze do czwartego bajtu dodawanego modułu i wykonuje każdą funkcję zapisaną tam w kodzie maszynowym. Typowo, te instrukcje mówią systemowi jak zainicjalizować urządzenie.
Ostatecznie, kiedy instrukcje z rozszerzonego BIOS'u zostaną wykonane, wracamy do głównego BIOS'u. Wtedy system kontynuuje szukanie dodatkowych bloków rozszerzonych BIOS'ów. Kiedy nowoczesny BIOS kończy swoje poszukiwania docierając do adresu 0F0000(Hex), przechodzi on do następnego kroku, uruchamiania urządzeń Plug-and-Play ( Opisane w innej części referatu).
Po tym jak BIOS przeszedł przez POST i inicjalizację procedur, musi oddać kontrolę innemu oprogramowaniu – systemowi operacyjnemu. Oczywiście, to oporgramowanie musi się wziąć z jakiegoś miejsca. Większość komputerów ładuje swój system operacyjny z dysku lub dyskietki, jedak są takie komputery, które ładują system operacyjny z sieci lokalnej lub innych nośników. W każdym przypadku, komputer musi wiedzieć jak załadować system operacyjny do pamięci, tak aby mógł on przejąć kontrolę nad komputerem. Innymi słowy, BIOS musi wiedzieć wystarczająco o twardych i miękkich dyskach, o sieci lokalnej oraz stacjach CD aby móc znaleźć system operacyjny i go uruchomić. Proces zmierzający do uruchamiania systemu nazwany jest initial program load(IPL).

Pomimo, iż najnowsze systemy operacyjne takie jak Winodws przejmują większość funkcji BIOS'u, każdy komputer osobisty ciągle potrzebuje BIOS'u. Proste funkcje są ciągle potrzebne nawet w nowoczesnych Komputerach Osobistych ponieważ potrzebujemy móc kontrolować nasz komputer zanim wystartuje system operacyjny. Klawiatura musi działać abyśmy mogli wybierać opcje. Karta graficzna musi wystartować abyśmy mogli monitorować to co robimy i to co robi system. Proste kontrolery dysków muszą działać abyśmy mogli wczytać system operacyjny z dysku.

Sposób komunikacji pomiędzy aplikacjami, systemem oepracyjnym, biosem i sprzętem.

Ustawienia BIOS'u.

Poniższa lista zawiera najważniejsze ustawienia BIOS'u związane z zarządzaniem energią. Dostosowywanie tych wartości ma sens tylko wtedy, kiedy system operacyjny nie przejmuje sterowania nad zarządzaniem energią. Ta lista zawiera opcje z BIOS'ow róznego typ, a więc nie każdy komputer będzie udostępniał wszystkie spośród tych opcji.

Opcje bootowania (boot options) pozwalają nam na wybranie porządku w jakim komputer szuka bootowalnego urządzenia oraz konfigurowanie innych opcji związanych z bootowaniem. W gruncie rzeczy jest to jedyna funkcja BIOS'u nad jaką kontroli nie przejął system operacyjny Microsoft Windows. Poniżej zamieszczam opcje pochodzące z najbardziej popularnych BIOS'ów:


Niektóre BIOS'y czynią ustawienia klawiatury standardową funkcją; inne przenoszą tę opcję to opcji zaawansowanych.

Oto lista funkcji, które zostały dodane do BIOS'u w celu uniknięcia pewnych konfliktów sprzętowych pomiędzy nowszymi i starszymi urządzeniami, a także pomiędzy sprzętem a oprogramowaniem:

Monitoring Options
Wiele z dzisiejszych płyt głównych ma wbudowaną zdolność monitorowania wielu czynników. Najważniejszymi z nich jest temperatura procesora, mierniki napięcia, prędkość obrotowa wiatraczka, oraz sensory wykrywające błędy w pracy układu chłodzącego.  W BIOS'ach są sekcje, które pozwalają nam na oglądanie danych generowanych przez nasze czujniki. Jednakże wiele płyt głównych posiada wsparcie dla systemu Windows, dzięki któremu także system operacyjny dostaje możliwość kontrolowania danych pochodzących z czujników, dzięki czemu w razie jakis nieprawidłowości użytkownik może zostać ostrzeżony.

Standard CMOS Features

Advanced BIOS Features

Advanced Chipset Features

Integrated Peripherals

PnP/PCI Configurations

PC Health Status