Bios a dyski twarde


Rola BIOSu w dostępie do dysków twardych

BIOS pełni różne funkcje związane z dostępem do dysków twardych:
Udostępnia przerwania do zarządzania dyskiem twardym. Dzięki przerwaniu 0x13, programy mają standardowy sposób odwoływania się do dysku i nie muszą osobno rozpatrywać różne modele dysków. W dzisiejszych czasach systemy operacyjne często pomijają BIOS przy odwoływaniu się do sprzętu, ale mimo to warto o tym wspomnieć, gdyż wiedza o funkcjach BIOSu może się przydać przy programowaniu niskopoziomowym.

BIOS pozwala na skonfigurowanie różnych ustawień dysków twardych zgodnych ze standardem IDE/ATA; w większości przypadków potrafi nawet dokonać tego automatycznie, bez pomocy użytkownika.

BIOS wspiera różne sposoby odwoływania się do twardego dysku, np. przez DMA (bezpośredni dostęp kontrolera dysku do pamięci) albo w trybie blokowym (grupowanie operacji odczytu i zapisu).


Przerwanie 0x13

W celu ułatwienia pisania przenośnych programów niskopoziomowych, BIOS udostępnia przerwanie 0x13 do pracy z dyskami twardymi. Niestety, jego możliwości są znacznie ograniczone. Interfejs tego przerwania używa jedynie 24 bitów do opisu geometrii dysku.
Na tę liczbę składa się:

  • 10 bitów na numer cylindra

  • 8 bitów na numer głowicy

  • 6 bitów na numer sektora

Daje to razem 2^24 sektorów - jeżeli każdy ma 512 bajtów, to BIOS obsługuje dyski do wielkości ok. 8 GB. W czasach, gdy powstał pierwszy BIOS, była to nieprawdopodobnie duża liczba, dziś istnieją już dyski o znacznie większych pojemnościach.

Starsze BIOSy miały jeszcze jedno ograniczenie - kod ładujący system operacyjny musiał się znajdować przed pierwszą połową pierwszego gigabajta dysku. Dlatego ludzie instalujący w połowie lat dziewięćdziesiątych Linuksa musieli używać dodatkowych dysków, usuwać stare systemy operacyjne lub dzielić dysk na partycje, by sektor startowy mieścił się w dopuszczalnym przez BIOS zakresie.
Na szczęście, jakiś czas temu pojawiły się rozszerzenia przerwania 0x13 BIOSu umożliwiające korzystanie z większych dysków twardych. Są to po prostu nowe funkcje tego przerwania, które wykorzystują 64 bity do adresowania dysku.

Przykładowe funkcje przerwania

Funkcja 1 - odczytanie stanu dysku

Parametry:
AH - 01

Zwracane wartości:
AL - stan (00 - bez błędu, 01 - zły rozkaz, 04 - sektor nie znaleziony itp.
Zwracana jest tak naprawdę zawartość spod adresu 0040:0041 Bios Data Area.



Funkcja 2 - odczytanie sektorów dysku

Parametry:
AH - 02
AL - liczba sektorów do odczytania (1-128)
CX - numer ścieżki (głowicy)/cylindra (0-1023) to 8 bitów CH
oraz 2 bity CL, 6 najmłodszych bitów CL to numer sektora
DH - numer głowicy (0-15)
DL - numer urządzenia (0x00 - stacja dysków 1, 0x01 - stacja dysków 1,
0x80 - dysk 0, 0x81 - dysk 2
ES:BX - wskaźnik na bufor

Zwracane wartości:
AX - stan
AL - liczba przeczytanych sektorów
flaga carry (CF) - 0 gdy nie było błędu, 1 gdy nastąpił błąd



Funkcja 3 - zapisanie sektorów dysku

Parametry:
AH - 02
AL - liczba sektorów do zapisania (1-128)
Pozostałe parametry są takie, jak dla funkcji numer 2.

Zwracane wartości:
AX - stan, 0 jeśli flaga carry równa 0
AL - liczba zapisanych sektorów
flaga carry (CF) - 0 gdy nie było błędu, 1 gdy nastąpił błąd



Przy pomocy tych funkcji można już napisać prosty program odczytujący zawartość dysku, który może się przydać w razie awarii komputera. Należy go zamieścić na pierwszym sektorze zerowej ścieżki dyskietki (dysku) i uruchomić komputer, a BIOS go sam załaduje i uruchomi.

Autor: Filip Noworyta


D.F.



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