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?
Odpowiedzi:
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:
(Jeśli nie jesteś z nimi zaznajomiony, rejestry można traktować jako zmienne, które żyją w procesorze.) Dojdziemy do magicznych liczb
2
i5
za 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,
5
któ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ącC
rejestr z numerem funkcji (2
dla wyjścia konsoli) iE
rejestr 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 nazywana
CONOUT
, 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.źródło
call 5
. Nierst 8
był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 ...)?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 .Istnieje wiele różnych możliwości:
źródło