Microkernel

Minimalistyczna architektura jądra, w której większość usług systemowych działa jako oddzielne procesy w przestrzeni użytkownika. Przeciwieństwo jądra monolitycznego.

Microkernel to architektura jądra systemu operacyjnego oparta na zasadzie „im mniej w jądrze, tym lepiej”. W trybie uprzywilejowanym (kernel space) zostaje tylko absolutne minimum: zarządzanie pamięcią na najniższym poziomie, scheduling procesów oraz komunikacja międzyprocesowa (IPC). Cała reszta — sterowniki, systemy plików, stos sieciowy — działa jako zwykłe procesy w przestrzeni użytkownika (user space). To dokładne przeciwieństwo monolitycznego jądra (jak Linux), gdzie te wszystkie usługi siedzą razem w jednym wielkim bloku kodu z pełnymi uprawnieniami.

Jak to działa

Skoro sterownik czy system plików to osobny proces w user space, to nie może po prostu wywołać funkcji jądra. Zamiast tego komponenty gadają ze sobą przez IPC — wysyłają sobie komunikaty (message passing), które microkernel przekazuje dalej. Klikasz w plik, a request wędruje przez kilka procesów: aplikacja pyta serwer systemu plików, ten odpytuje sterownik dysku, a microkernel tylko routuje te wiadomości i pilnuje uprawnień.

Główny zysk to izolacja. Gdy w Linuksie wysypie się sterownik karty sieciowej, masz kernel panic i cały system leży. W microkernelu padający sterownik to padający proces — można go ubić i wystartować ponownie, a reszta systemu nawet nie mrugnie. Płacisz za to wydajnością: każdy przeskok przez IPC i przełączanie kontekstu kosztuje cykle, których monolit by nie spalił.

Przykład z praktyki

Najciekawszy współczesny przykład to seL4 — microkernel z formalnie udowodnioną poprawnością (matematyczny dowód, że kod robi dokładnie to, co specyfikacja). Używany tam, gdzie awaria zabija ludzi: drony, sprzęt medyczny, systemy wojskowe. Drugi gigant to QNX — siedzi w milionach samochodów (systemy infotainment, ECU). Z edukacyjnych: MINIX 3 Andrew Tanenbauma, na którym pół świata uczyło się architektury OS. Ciekawostka — MINIX przez lata jechał w Intel Management Engine, więc statystycznie mogłeś mieć go w komputerze, nie wiedząc o tym.

Chcesz pobawić się sam? Zainstaluj MINIX 3 w maszynie wirtualnej i zatrzymaj usługę przez service down, a potem podnieś ją z powrotem — zobaczysz reincarnation server w akcji, czyli automatyczne wskrzeszanie padłych sterowników.

Częste mity

Mit pierwszy: „microkernel zawsze przegrywa wydajnościowo”. Kiedyś tak było (słynna flame war Tanenbaum vs Torvalds z 1992 r.), ale nowoczesne implementacje L4 zbiły narzut IPC do poziomu, który dla wielu zastosowań jest nieistotny. Mit drugi: że macOS i Windows NT to czyste microkernele. To hybrydy — XNU (macOS) bazuje na Machu, ale dla wydajności wpakowano sterowniki i BSD z powrotem do kernel space. Czysty microkernel w mainstreamowym desktopie to wciąż rzadkość.

Pojęcia powiązane: monolithic kernel, hybrid kernel, IPC (message passing), user space i kernel space, system call, kernel panic, Mach, seL4, QNX, MINIX, GNU Hurd.