Jak dokładnie program komunikuje się ze sterownikiem urządzenia?

12

Więc jestem zdezorientowany, jak dokładnie my, jako programiści, rozmawiamy z urządzeniami na komputerze. Teraz nie mówię o wielkich pomysłach. Wiem, że istnieją sterowniki urządzeń umieszczone na sprzęcie, dzięki czemu różne programy mogą korzystać z tych funkcji.

Ale ogólnie, kto dokładnie rozmawia z kierowcami? Czy programista pisze aplikację odpowiedzialną za wywołanie funkcji w sterowniku? Czy też programista wywołuje funkcję za pośrednictwem systemu operacyjnego, który następnie obsługuje połączenie ze sterownikiem?

Jason
źródło
1
Trochę obu i różni się w zależności od systemu operacyjnego i typu urządzenia.
whatsisname

Odpowiedzi:

12

W przypadku systemu operacyjnego programy nie rozmawiają ze sterownikami urządzeń, a przynajmniej nie bezpośrednio. Programy mówią do abstrakcji, które, bez wiedzy, ostatecznie rozmawiają ze sterownikami urządzeń za pomocą jednej lub więcej warstw abstrakcji.

Pominę złożoność współczesnych systemów operacyjnych i jako przykład użyję CP / M , mikrokomputerowego systemu operacyjnego opracowanego 45 lat temu. CP / M był warstwowym ciastem z trzema warstwami:

Program. Górna warstwa to program, który robi coś pożytecznego (edytor tekstu, gra Space Invaders), wykonując obliczenia i operacje wejścia / wyjścia. Powiedzmy, że w pewnym momencie program chce wyświetlić literę „A”, aby użytkownik mógł ją zobaczyć. CP / M zapewnia abstrakcję zwaną konsolą , na której powinien szukać użytkownik wchodzący w interakcję z programem. Konwencjonalny sposób wysłania postaci z kilkoma instrukcjami montażu:

LD C,2   ; Load 2 into register C
LD E,65  ; Load the ASCII code for 'A' into register E
CALL 5   ; Call CP/M's routine for getting things done

(Jeśli nie jesteś z nimi zaznajomiony, rejestry można traktować jako zmienne, które żyją w procesorze.) Dojdziemy do magicznych liczb 2i 5za chwilę. Zaletą jest to, że wszystko, co program wie, to to, że jest konsola i istnieje sposób, aby na nią pisać. Nie wie ani nie dba o nic poza tym. Jest to pierwsza z dwóch abstrakcji, których CP / M używa dla I / O.

BDOS . Adres, 5który wywołuje program, jest punktem wejścia do następnej warstwy, podstawowego systemu operacyjnego dysku lub BDOS . BDOS zapewnia całą gamę funkcji numerowanych, które są jak zamawianie według numeru z menu restauracji. Mówisz, że chcesz wyjść z konsoli, ładując Crejestr z numerem funkcji ( 2dla wyjścia konsoli) i Erejestr ze znakiem, który ma zostać wysłany. Wyjście z konsoli jest bardzo prostą operacją, a BDOS tak naprawdę nie musi wiele z tym robić, poza wywołaniem kolejnej warstwy.

BIOS. System BIOS lub Basic Input / Output System to warstwa, na której znajduje się cały kod specyficzny dla sprzętu. W nowoczesnych systemach byłby to zestaw sterowników urządzeń. Podobnie jak BDOS, BIOS zapewnia wywołanie standardowego zestawu bardzo prymitywnych operacji , których BDOS używa do prowadzenia swojej działalności. Jedna z tych operacji jest nazywanaCONOUT, który dba o to, aby postać poprosiła program o napisanie dwóch warstw powyżej na dowolnym sprzęcie, który to robi. (W przeciwieństwie do komputerów PC, rzeczy nie były wtedy jednorodne. Każdy system miał różne sposoby na to, aby tak się stało). Wyjście konsoli jest prostym przejściem dla BDOS, ale wykonanie czegoś bardziej złożonego, jak utworzenie pliku na dysku, może wymagać wielu Wywołania BIOS do manipulowania mediami. Ponownie, ponieważ BIOS ma standardowy, abstrakcyjny interfejs, BDOS zawsze wie, jak uzyskać to, czego chce i nie dba o to, jak BIOS to robi.

Prawdopodobnie zastanawiasz się, dlaczego istnieją dwie abstrakty (program na BDOS i BDOS na BIOS) zamiast tylko jednej. Odpowiedź jest taka, że ​​CP / M i jego BDOS mogą być dostarczane w formie binarnej producentom komputerów, napisaliby niestandardowy BIOS ze sterownikami urządzeń dla swojego sprzętu, złączyli oba systemy i wysłali go jako system operacyjny dla swoich systemów. To była wielka sprawa, ponieważ BDOS był obsługiwany przez jedną organizację i dlatego zawsze był znaną ilością programów użytkownika, umożliwiając uruchamianie tych samych aplikacji na bardzo szerokim (jak na razie) sprzęcie. Dlatego istnieją systemy operacyjne, a my nie piszemy programów, które bezpośrednio zmieniają sprzęt .

Wszystko, co tu opisałem, dotyczy również nowoczesnych systemów operacyjnych. Na przykład Unix wyodrębnia wszystko jako pliki. Daje Programy sam zestaw wywołań systemowych ( open(), write(), close(), etc.) do komunikowania się, czy jest to dysk lub port szeregowy. Zbiór decyzji i abstrakcji jest znacznie bardziej złożony, ale ostatecznie sprowadza się do wybrania kodu sterownika urządzenia w dolnej warstwie, aby operacja się odbyła.

Blrfl
źródło
Tak naprawdę nigdy wcześniej nie patrzyłem na kod CP / M (to trochę za wcześnie ... Używałem komputerów CP / M, ale nigdy nie pisałem dla nich kodu), ale raczej jestem zaskoczony jego użyciem call 5. Nie rst 8byłby o wiele bardziej skuteczny (poświęciłby 3 bajty pamięci pod adresem docelowym, ale oszczędziłby 2 za każdym razem, gdy się nazywa ...)?
Jules
@Jules: CP / M został opracowany dla 8080, który miał tylko jeden tryb przerwania, w którym urządzenia przerywające umieszczałyby instrukcję jednobajtową (zwykle a RST) na szynie danych. Nie mogę powiedzieć na pewno, ale mogło się zdarzyć, że nie było wystarczającej liczby gniazd, aby obejść potrzeby wszystkich urządzeń plus DDT (który wykorzystał je do stworzenia punktów przerwania) oraz użycie jednego, aby wejść do BDOS .
Blrfl,
Ach To ma sens, tak. Moje 8-bitowe doświadczenie programistyczne jest ograniczone do maszyn, które miały tylko jedno źródło przerwań, więc nie musiałem się tak bardzo przejmować takimi rzeczami ... :)
Jules
Szybkie pytanie, w jaki sposób ten proces ma się bardziej do systemu operacyjnego Windows i jądra systemu Windows? Czy powinienem zadać nowe pytanie?
Jason
@Jason: Wikipedia ma stronę opisującą architekturę i zapewniającą odpowiedź. Wszystko, co Microsoft produkuje od 1993 roku, wykorzystuje tę architekturę. To prawie to samo, tylko z większą ilością warstw w cieście.
Blrfl,
0

Istnieje wiele różnych możliwości:

  • W przypadku często używanych urządzeń system operacyjny często zawiera interfejs API, który są implementowane przez sterowniki i które dostosowuje standardowa biblioteka języka. Typowe przykłady: systemy plików, drukarki, sieć, instrumenty MIDI.
  • W przypadku bardziej egzotycznych urządzeń producent urządzenia musi dostarczyć sterowniki, a czasem będą one również zawierać powiązania językowe dla popularnych języków. Przynajmniej będą istnieć wiązania C i prawie wszystkie języki mają jakiś sposób na wywoływanie bibliotek C.
  • Nieco pomiędzy tymi dwoma przypadkami, proste urządzenia mogą po prostu korzystać z połączenia ogólnego przeznaczenia, takiego jak port szeregowy, a producent publikuje tylko protokół, którego można następnie użyć za pomocą ogólnego sterownika portu szeregowego.
Michael Borgwardt
źródło