Część II - Sterownik urządzenia

Transkrypt

Część II - Sterownik urządzenia
Programowanie na poziome sprzętu – opracowanie pytań
Część II - Sterownik urządzenia
Autor opracowania: Marcin Skiba
[email protected]
1. Jakie udogodnienia dla programów użytkownika i systemu operacyjnego wynikają z zastosowania
koncepcji sterowników urządzeń?
Funkcje i parametry zawarte w sterownikach są standaryzowane. Dzięki temu wywołanie funkcji odczytu
danych z dwóch różnych urządzeń wygląda tak samo. Urządzenia mogą być w pewnym stopniu traktowane
jednakowo. Twórca sterownika odpowiada ze implementację realizacji udostępnionych funkcji.
2. Jak należy rozumieć ideę „urządzenia logicznego” w systemie komputerowym wykorzystującym
sterowniki urządzeń?
Możliwość rozszerzania bądź ograniczania funkcjonalności urządzenia za pomocą sterownika oraz
oddzielenie samego urządzenia od programów użytkownika i samego jądra systemu sprawia, iż jądro oraz
programu widzą urządzenie logiczne. Dzięki temu wymiana informacji z urządzeniem może wyglądać tak
samo jak praca z plikiem na dysku.
3. Jakie są dwa podstawowe typy urządzeń logicznych rozróżniane przez system operacyjny MS-DOS i
czym się one charakteryzują?
• Znakowe – dane przesyłane są bajt po bajcie za pomocą strumieni. Każde urządzenie znakowe ma
swoją unikalną nazwę, więc sterownik może obsługiwać tylko jedno takie urządzenie.
• Blokowe – dane przesyłane są w blokach wielobajtowych. Identyfikowane poprzez litery. Sterownik
urządzenia blokowego może zawierać w sobie sterowniki podrzędne co pozwala mu sterować
wieloma urządzeniami tego samego rodzaju. Maksymalnie 26 (A-Z) urządzeń blokowych.
4. Co to są sterowniki standardowe, a co — sterowniki zewnętrzne?
Sterowniki urządzeń standardowych (zegar, porty COM, LTP, itp.) oraz sterowniki pozostałych
(niestandardowych) urządzeń.
5. Na czym polega instalacja sterownika w pamięci operacyjnej?
Polega to na załadowaniu sterownika do pamięci oraz jego inicjalizacji. Najpierw instalowane są sterowniki
urządzeń standardowych (plik IO.SYS), a później sterowniki zewnętrzne (plik CONFIG.SYS).
6. W jaką strukturę układane są sterowniki przez system operacyjny MS-DOS i co to w efekcie
umożliwia?
Jednokierunkową listę sterowników. Każdy sterownik zawiera adres kolejnego, ostatni zawiera adres
0FFFFh. Pierwszy sterownik to sterownik urządzenia pustego. Nowe sterowniki zawsze dodawane są za
sterownikiem urządzenia pustego. System operacyjny poszukujący sterownika danego urządzenia
przeszukuje listę aż napotka żądaną nazwę. Umożliwia to przesłonięcie oryginalnego sterownika własnym –
wystarczy, aby był na wcześniejszej pozycji niż sterownik oryginalny i posiadał taką samą nazwę.
7. Jaka jest budowa sterownika w systemie operacyjnym MS-DOS i jakie jest przeznaczenie
poszczególnych jego fragmentów?
•
•
•
•
•
Nagłówek sterownika – koniecznie na początku.
Procedura szeregująca.
Procedura wykonawcza.
Dane lokalne.
Procedury lokalne – w tym procedury odpowiadające za realizację poszczególnych funkcji.
Wszystko w obrębie jednego segmentu bez stosu.
8. W jaki sposób uzyskuje się wersję wykonywalną sterownika?
Kompilacja i konsolidacja daje plik .EXE. Potem przekształcamy go do pliku .SYS na przykład za pomocą
programu EXE2BIN.EXE.
9. Jak odbywa się komunikacja pomiędzy systemem operacyjnym MS-DOS a sterownikiem
urządzenia?
Przy pomocy pakietu zlecenia. Jest to specjalna struktura które zawiera informacje kierowane przez system
do sterownika oraz informacje zwrotne. Postać struktury może się różnić zależnie od wywoływanej funkcji,
jednak pierwsze 13 bajtów zawsze pełni tą samą funkcję.
10. Jakie zasady muszą zostać spełnione przy konstruowaniu kodu sterownika?
• Nagłówek zawsze musi być na początku kodu sterownika.
• Wszystkie funkcje udostępniane przez sterownik podlegają standaryzacji (odpowiedni numer funkcji
zawsze odpowiada tej samej czynności, ilość i kolejność argumentów pozostaje niezmieniona itd.).
• Kod musi realizować procedurę inicjalizacji (nawet nic nierobiącą).
11. Co oznacza, że nazwa urządzenia staje się zastrzeżoną nazwą systemową?
Nazwy tej nie można używać do czegokolwiek innego, chociażby do nazywania plików. Nazwa używana
jest tylko i wyłącznie w odniesieniu do zainstalowanego sterownika.
12. Od czego zależy, które funkcje mogą być realizowane przez sterownik?
• Operacji możliwych do wykonania przez samo urządzenie.
• Typu urządzenia.
• Atrybutów sterownika.
• Wersji systemu, dla której przewidziany został sterownik.
13. Jaka technika wykorzystywana jest podczas inicjalizacji sterownika w celu oszczędności pamięci?
Sztuczka dotyczy wpisania adresu końca rezydencji sterownika w pamięci. Jako że funkcja inicjalizacyjna
jest wykonywana tylko jeden raz to możemy umieścić ją na końcu kodu sterownika i w miejscu
przeznaczonym na adres końca sterownika możemy wpisać adres procedury inicjalizacyjnej.
14. Jakie istnieją formy komunikacji pomiędzy sterownikiem a obsługiwanym przez niego
urządzeniem?
• Bezpośrednia – funkcje sterownik odwołują się do urządzenia przez porty.
• Pośrednia – sterownik odwołuje się do urządzenia za pomocą przerwań BIOS-u.
15. W jakich trybach może odbywać się współpraca pomiędzy sterownikiem a programami
użytkownika i czym się te tryby cechują?
• Pełny tryb funkcji – poprzez udostępniane przez sterownik funkcje. Komunikacja systemu
operacyjnego ze sterownikiem odbywa się przy użyciu pakietów zlecenia.
• Tryb przerwań – sterownik przejmuje jedno lub więcej przerwań. Realizacja funkcji odbywa się
właśnie poprzez przerwania.
16. W jakim celu i w jakich sytuacjach stosuje się kompilację warunkową?
Kompilacja warunkowa jest używana gdy mamy potrzebę uzyskania różnych wersji wykonywalnych
programu lub biblioteki z jednego kodu. Dodatkowo umiejętne skorzystanie z dyrektyw pozwala na
ominięcie powtarzania kodu przy łączeniu wielu modułów. Przy kompilacji warunkowej niektóre fragmenty
kodu mogą w ogóle nie być skompilowane z braku takiej potrzeby.
17. Na czym polegają dwie alternatywne metody wiążące się z definiowaniem symboli, dzięki którym
wskazane zostają fragmenty kodu mające podlegać skompilowaniu w ramach kompilacji
warunkowej?
Możemy zdefiniować takie symbole bezpośrednio w kodzie, np.:
SYMBOL
EQU 12
Lub definiując symbol przy kompilacji:
/dSYMBOL[=wartość]

Podobne dokumenty