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.