W jaki sposób program działający na CPU (głównie system operacyjny) może uzyskać dostęp do innego sprzętu komputerowego? Takich jak karta graficzna, dysk twardy i tak dalej?
Z tego, co przeczytałem, w DOS-ie zostało to zrobione przy użyciu wywołań BIOS-u, a konkretnie instrukcji INT. Ale instrukcja INT powinna przeskakiwać tylko do określonego miejsca w pamięci RAM. Jak więc jakiś program przechowywany w pamięci RAM może uzyskać dostęp do innego sprzętu komputerowego, skoro procesor może uzyskać dostęp tylko do pamięci RAM i odbierać przerwania?
Czy system Windows również korzysta z instrukcji INT, czy jest nowy sposób komunikacji ze sprzętem?
Odpowiedzi:
Pełna odpowiedź na to pytanie jest złożona i ogólnie trudna do odpowiedzi. Postaram się więc odpowiedzieć ogólnie i mam nadzieję, że dam wam kilka wskazówek, jak znaleźć dodatkowe informacje do dalszej nauki. Mam nadzieję, że to się przyda.
W przypadku 32/64-bitowych trybów chronionych używanych przez MS Windows 95 i nowsze lub Linux na procesorze x86 (IA-32), przerwania programowe (takie jak kod operacji INT dla x86) przechodzą do odpowiedniej tabeli wektorowej Przerwania (lub wysyłki table), który może skierować procesor w to miejsce, w którym w systemie operacyjnym proces powinien przejść do procedury obsługi przerwań (lub procedury obsługi przerwań, ISR) w celu obsługi żądania.
W trybie rzeczywistym x86 , takim jak MS-DOS, mogą być obsługiwane przez BIOS, który zapewnia szczegółowe informacje o implementacji niskiego poziomu dla tego konkretnego systemu / chipsetu / płyty głównej.
Więc nie chcesz zwykłej falistej odpowiedzi? Spróbuję odpowiedzieć na to pytanie, ale nie jestem inżynierem komputerowym ani ekspertem od architektury komputerowej.
Istnieją różne mechanizmy, w tym
(Src: CS 473 - IO , New Mexico State University, pfeiffer, 2006)
Najprostszym jest we / wy mapowane na pamięć, w którym adres pamięci może być mapowany na rejestry urządzenia sprzętowego (np. Szeregowego UART ) i procesora oraz zapisywać i / lub odczytywać niektóre adresy pamięci, aby uzyskać bezpośredni dostęp do sprzętu. Jest to szybkie i proste, ale zmniejsza zakres adresów pamięci, co może służyć jako pamięć RAM.
Pozostałe to bardziej zaawansowane techniki opracowane w celu umożliwienia nowoczesnym procesorom i bardziej zaawansowanym systemom operacyjnym dostępu do sprzętu w kontrolowany sposób.
W samym systemie operacyjnym są one zwykle nazywane sterownikami urządzeń, ponieważ zawierają szczegółowe informacje na temat obsługiwanych urządzeń sprzętowych.
Tak i tak, ale chyba to wyjaśniłem.
źródło
Istnieje kilka sposobów komunikowania się oprogramowania z procesorem na komputerze PC z resztą sprzętu.
Najprostsze do zrozumienia są porty I / O. Oprogramowanie korzysta z instrukcji OUT, aby zapisać 8, 16 lub 32 bity na raz do portu I / O. W ten sam sposób oprogramowanie wykorzystuje instrukcję IN do odczytu z portu I / O. Porty we / wy znajdują się w osobnej 16-bitowej przestrzeni adresowej, niezwiązanej z przestrzenią adresową używaną przez pamięć główną. Każdy element sprzętowy korzystający z portów I / O ma zakres adresów I / O; pisanie do i czytanie z każdego z tych adresów ma inny efekt (a często czytanie i pisanie pod ten sam adres ma również inne skutki).
Innym sposobem jest mapowanie we / wy pamięci, w którym część przestrzeni adresowej pamięci jest mapowana na element sprzętowy. Zamiast przechodzenia do głównej pamięci, odczyty i zapisy zi do tego regionu pamięci trafiają na odpowiedni sprzęt. Ich znaczenie zależy od sprzętu i regionu (często zdarza się, że więcej niż jeden region I / O odwzorowany w pamięci znajduje się na tym samym sprzęcie); odczyt i zapis do niego może mieć specjalny efekt (jak to zwykle bywa z portami I / O) lub może po prostu odczytywać i zapisywać bezpośrednio do pamięci na sprzęcie (na przykład bufor ramki karty graficznej).
Z drugiej strony (reszta sprzętu rozmawiającego z oprogramowaniem działającym na CPU) istnieje również kilka sposobów. Najprostszym byłoby poczekać, aż oprogramowanie zapyta (albo przez port I / O lub I / O zamapowane w pamięci); użyte osobno może to być bardzo nieefektywne.
Innym sposobem jest zapisywanie przez sprzęt bezpośrednio w pamięci głównej. Jest to bardzo wydajne w przypadku przesyłania dużych ilości danych i może być również używane w innym kierunku (do odczytu z pamięci głównej). Jednak oprogramowanie nadal musi wiedzieć, kiedy transfer zostanie zakończony.
Ostatni sposób to przerwania. CPU otrzymuje żądanie przerwania wraz z numerem przerwania. Procesor przerywa (stąd nazwa) to, co robił, i przełącza się na inną część kodu (która część zależy od numeru przerwania). Zwykle każdy sprzęt odpowiada jednemu numerowi przerwań, ale numery przerwań są często wspólne dla kilku źródeł przerwań. Istnieją również specjalne rodzaje przerwań, które nie mają numeru; na przykład NMI.
Dla praktycznego przykładu weźmy prostą kartę interfejsu sieciowego. Ta karta sieciowa ma zestaw rejestrów, do których można uzyskać dostęp poprzez porty I / O lub I / O zamapowane w pamięci. Może również odczytywać i zapisywać w pamięci głównej oraz ma pin przerwania.
Aby wysłać pakiet do sieci, sterownik karty sieciowej najpierw zapisuje pełny pakiet do pamięci, pod adresem wyrównanym do wielokrotności 4 bajtów. Następnie zapisuje kilka rejestrów na karcie interfejsu sieciowego, podając adres pamięci, rozmiar pakietu i kilka innych informacji. Karta sieciowa następnie odczytuje pakiet z pamięci, wysyła go do sieci i sygnalizuje przerwanie. Kontroler przerwań (oddzielny element sprzętowy) wysyła żądanie przerwania do CPU i podaje mu numer przerwania. W module obsługi przerwań kierowca odczytuje rejestr z karty, który informuje, że przerwanie dotyczyło wysłania pakietu, czyta inny rejestr, aby dowiedzieć się, który pakiet został wysłany, i wie, że może teraz ponownie użyć pamięci, w której zapisał pakiet .
Aby odbierać pakiety z sieci, sterownik karty sieciowej przydziela blok pamięci, który ma być używany jako pamięć dla pakietów, i zapisuje na karcie kilka rejestrów, podając adres pamięci bloku pamięci, jego rozmiar i kilka innych informacji . Gdy pakiet jest odbierany z sieci, karta sieciowa zapisuje go w tym bloku pamięci, wraz z rozmiarem pakietu i innymi informacjami. Aktualizuje niektóre rejestry, które mówią zarówno jemu, jak i sterownikowi, ile wolnego miejsca jest w tym bloku pamięci, gdzie zaczyna się wolne miejsce i gdzie zaczyna się używane miejsce (bufor jest okrągły, więc po dotarciu do końca przewraca się do początku). Wreszcie sygnalizuje jego przerwanie. Sterownik odczyta rejestry i pamięć w celu uzyskania pakietu (pakietów),
Są inne rzeczy, o których karta może powiedzieć kierowcy, zapisując swoje rejestry i sygnalizując przerwanie; na przykład, że kabel sieciowy został odłączony, wystąpił błąd transmisji i tak dalej.
źródło
To, czego szukasz, to „ IRQ ”, żądania przerwania od sprzętu do procesora. Jest to podstawowy artykuł tutaj .
źródło
Właśnie do tego służą sterowniki sprzętowe. Ponadto system Windows używa teraz HAL (Hardware Abstraction Layer) zamiast DOS.
źródło