BIOS a systemy operacyjne
Sterowniki urządzeń zawarte w BIOS'ie
Obsługa przerwań
Przerwania w procesorach rodziny x86 mogą być zgłaszane
- zewnętrznie (przez urządzenia)
- wewnętrznie przez procesor w wyniku wywołania rozkazu INTR
- wewnętrznie przez procesor w wyniku błędu
W momencie wywołania przerwania procesor umieszcza na stosie bieżącą
zawartość rejestrów CS i IP oraz słowo stanu. I wykonuje skok do
procedury
obsługi przerwania. Tablica z adresami procedur obsługi poszczególnych
przerwań znajduje się na początku pamięci (od adresu 0000:0000 do
0040:0000)
i zawiera 256 adresów
Przerwania komputera PC zgłaszane przez procesor:
- 00h - błąd dzielenia przez zero
- 01h - przy debuggowaniu - pojedynczy krok
- 02h - przerwanie niemaskowalne
- 03h - przy debuggowaniu - punkt wstrzymania
- 04h - błąd nadmiaru
- 06h - błąd nieprawidłowego rozkazu procesora
- 07h - błąd braku koprocesora
- 18h - w komputerach PC/XT wywołanie tego przerwania powodowało
uruchomienia interpretera języka BASIC zawartego w pamięci ROM
- 19h - uruchomienie systemu operacyjnego
Przerwania komputera PC zgłaszane przez sprzęt:
- 08h - IRQ0 - zegar czasu rzeczywistego - wywoływane około 18.2
raza na sekunde
- 09h - IRQ1 - klawiatura
- 0Ah - IRQ2 - zarezerwowane (podłączenie drugiego kontrolera
przerwań)
- 0Bh - IRQ3 - zwykle kontroler portu szeregowego COM2
- 0Ch - IRQ4 - zwykle kontroler portu szeregowego COM1
- 0Dh - IRQ5
- 0Eh - IRQ6 - zwykle kontroler stacji dyskietek
- 0Fh - IRQ7
- 70h - IRQ8 - zegar czasu rzeczywistego
- 71h - IRQ9
- 72h - IRQ10
- 73h - IRQ11 - zwykle karta graficzna
- 74h - IRQ12 - zwykle kontroler myszy PS/2
- 75h - IRQ13 - koprocesor matematyczny
- 76h - IRQ14 - zwykle sterownik dysku twardego IDE
- 77h - IRQ15
BIOS komputerów PC wykorzystuje mechanizm przerwań do realizacji
procedur obsługi urządzeń przez program użytkownika. Mechanizm ten
działa w sposób następujący:
- użytkownik umieszcza w rejestrach parametry wywołania (w
rejestrze AH jest z reguły numer funkcji)
- użytkownik wywołuje przerwanie związane z konkretnym urządzeniem
(rozkaz INT)
- procesor wykonuje procedurę znajdującą się pod określonym adresem
w tablicy wektorów przerwań
- po wykonaniu procedury obsługi przerwania wykonany zostaje rozkaz
IRET, który powoduje powrót sterowania do programu użytkownika
- w rejestrach umieszczony jest wynik działania procedury (z reguły
w rejestrze AX informacja o błędach)
Standardowy PC przewidywał obsługę następujących urządzeń przez
przerwania BIOS:
- 10h - obsługa karty graficznej
- 11h - odczyt informacji o konfiguracji komputera
- 12h - odczyt rozmiaru zainstalowanej pamięci
- 13h - obsługa dysków
- 14h - obsługa interfejsów szeregowych
- 15h - w komputerach PC/XT obsługa magnetofonu kasetowego, w PC/AT
i nowszych zbiór rożnych funkcji
- 16h - obsługa klawiatury
- 17h - obsługa drukarki
Przykładowy program przełączający kartę graficzną w tryb graficzny 320
x 200 x 256 kolorów
xor ah, ah ;funkcja numer 0 - zmiana trybu graficznego
mov al, 13h ;parametr - numer trybu graficznego
int 10h ;wywołanie przerwania programowego karty graficznej
Ponieważ tablica wektorów przerwań znajduje się w pamięci RAM możliwa
jest podmiana programu obsługi przerwania przez program użytkownika.
Pozwala to na wygodną realizację sterowników urządzeń, których nie
przewidział producent komputera. I tak n.p. sterowniki myszy instalują
się jako przerwanie 33h.
Mechanizm przerwań programowych jest również wykorzystywany przez
systemy operacyjne do realizaji funkcji systemowych i tak wszystkie
fukcje systemowe DOS'a dostępne są poprzez przerwanie 21h, a funkcje
systemowe Linuxa pod przerwaniem 80h
Ograniczenia sterowników urządzeń zawartych w BIOS'ie
Dyski twarde - przerwanie 13h
Komputery standardu PC przewidziane były do pracy z dyskami IDE - BIOS
obsługiwał
tylko takie dyski. Niektóre kontrolery SCSI dodawały własną obsługę
tego przerwania
Standardowe funkcje BIOS'u obsługujące dyski twarde przyjmowały
numer cylindra z zakresu 0-1023, numer głowicy 0-255 a numer sektora od
1 do 63. Pozwalało to teoretycznie na obsługę dysków o pojemności do
8GB. Z drugiej strony pojawiały się ograniczenia standardu IDE,
pozwalającego na numery cylindra od 0-65535, głowicy 0-15, numery
sektora od 0-255. Dysk może mieć zatem pojemność do 128GB, jednak
połączenie ograniczeń przerwania 13h i kontrolera IDE spowodowało
powstanie bariery wielkości wynoszącej 504MB. Aby obejść to
ograniczenie twórcy BIOS'ów musieli zastosować pewną sztuczkę.
Z punktu widzenia użytkownika nie jest tak naprawdę ważne jaka jest
geometria dysku. Dotychczas sektory opisywane były trzema liczbami
numerem cylindra, numerem głowicy i numerem sektora na ścieżce (CHS) -
razem są to 24 bity. Nowsze BIOSy umożliwiają liniowe adresowanie
sektorów i automatyczną translację 24bitowego numeru sektora na
współrzędne CHS. Dzięki temu możliwa jest obsługa dysków do 8 GB.
Niestety nie jesteśmy w stanie zaadresować przestrzeni powyżej tej
wielkości korzystając z funkcji BIOS'a.
Oczywiście współczesne systemy operacyjne posiadają własne programy
sterujące dyskami, a funcje BIOS'a używane są tylo przez program
ładujący. Zatem jedyne ograniczenie polega na tym aby jądro systemu
operacyjnego było zapisane w pierwszych ośmiu gigabajtach dysku.
Karty graficzne - przerwanie 10h
VGA/VESA SVGA
Standard komputera PC zatrzymał się na etapie karty VGA. Przewidywał
obsługę
maksymalnej rozdzielczości obrazu 640x480 przy 16 kolorach. Dodatkowe
funkcje nowocześniejszych
kart graficznych nie były obsługiwane przez BIOS.
W 1989 roku producenci kart graficznych ustalili standard rozszerzeń
przerwania 10h,
który przewidywał obsługe dodatkowych trybów graficznych do
rozdzielczości 1280x1024
w maksymalnie 24bitowej głebi koloru. Realizacja tych rozszerzeń była
realizowana
albo przez BIOS karty graficznej, albo przez specjalny program
uruchamiany przez użytkownika.
Wydajność
Podstawową operacją wykonywaną podczas pracy na karcie graficznej jest
rysowanie piksela
Inne ograniczenia
- Przerwanie obsługujące port szeregowy pozwala ustawić największą
prędkość transmisji na 9600bps
- Przerwanie portu równoległego nie obsługuje portów ECP/EPP
- Brak obs.ugi myszy PS/2, USB, Firewire.
Uruchamianie systemu operacyjnego
Po pomyślnym przejściu POST'u BIOS wykonuje przerwanie INT19h.
Procedura obsługująca przerwanie INT19h próbuje znaleźć system
operacyjny. W tym celu wczytuje pod adres 0000:7C000 sektor zerowy z
dysku twardego lub napędu dyskietek i wykonuje skok do znalezionego tam
kodu. Zwykle znajduje się tam program ładujący system operacyjny lub -
w przypadku dysku na którym nie ma systemu operacyjnego - program
wyświetlający komunikat o błędzie.
W przypadku nie wykrycia sektora startowego wywoływane jest przerwanie
INT18h.
Jak wcześniej zostało powiedziane, podczas POST'u uruchamiany jest
kod zawarty w pamięciach ROM znajdujących się na kartach rozszerzeń. W
przypadku kart takich jak sterowniki sieci i sterowniki dysków kod ten
podmienia przerwanie INT19h na takie, które próbuje uruchomić system z
danego urządzenia a w przypadku niepowodzenia wykonuje skok do
poprzedniej procedury obsługi tego przerwania. Dzięki temu możemy
uruchomić system z dysków SCSI oraz kart sieciowych.
Plug and Play
Architektura PC nie posiadała mechanizmu pozwalającego na automatyczne
przydzielanie urządzeniom zewnętrzym zasobów takich jak porty
wejścia/wyjścia, przerwania IRQ, kanały DMA, zakresy pamięci.
W przypadku kart ISA aby przydzielić urządzeniu określone zasoby
należało ustawić zworki na karcie. Później w programie obsługującym
dane urządzenie należało wpisać przydzielone zakresy.
W 1994 firma Intel zaproponowała standard Plug and Play na którego
składały się rozszerzenia architektury ISA (architektura PCI od
początku implementowała PnP) oraz BIOS'a pozwalające na automatyczne
przydzielanie zasobów oraz pozwalające na odczytanie przez programy
użytkownika informacji o urządzeniach zainstalowanych w systemie.
Zasada działania PnP
- Wyłączenie wszystkich konfigurowalnych urządzeń
- BIOS identyfikuje wszystkie dostępne urządzenia Plug-Play na
szynie ISA i PCI w systemie. Sprawdza również które z tych urządzeń są
potrzebne do startu systemu.
- BIOS tworzy listę dostępnych zasobów systemowych. Sprawdza jakie
zasoby zostały już zajęty przez urządzenie nie PnP
- Uruchamiane są urządzenia wejscia/wyjścia (takie jak karty
graficzne)
- Inicjalizacja pamięci Option ROM w urządzeniach uznanych za
startowe
- Urządzeniom Plug-and-Play przydzielane są bezkonfliktowe zasoby
- Urzuchamiane są nie uruchomione dotychczas urządzenia
- Następuje inicjalizacja ewentualnych pamięci Option ROM nie
uruchomionych dotychczas urządzeń
- Program chcący korzystać z urządzenia Plug and Play musi
skorzystać z funkcji biosu zwracających informacje o urządzeniach -
funkcje te opisane są w specyfikacji Plug and Play
W przypadku szyn ISA pewnym problemem jest odizolowanie od siebie
poszczególnych kart od siebie aby móc komunikować się tylko z jedną z
nich. Tego problemu nie ma w przypadku szyny PCI ponieważ każde złącze
ma swój unikalny numer.
Powrót do strony głównej prezentacji