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ść]