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.
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