Jądro systemu operacyjnego Jądro (ang. kernel) jest to podstawowa część systemu operacyjnego, która jest odpowiedzialna za wszystkie jego zadania. Zapewnia ono usługi systemowe takie jak: komunikacja między składnikami systemu, synchronizacja procesów, zarządzanie pamięcią, zarządzanie urządzeniami, przydzielanie czasu procesora procesom, obsługa błędów.
Jądra systemów operacyjnych jądro monolityczne Wszystkie zadania są wykonywane przez jądro, będące jednym, dużym programem działającym w trybie jądra. Przykładami takiego jądra mogą być: UNIX, Linux, OpenBSD, FreeBSD. mikrojądro z monolitycznego jądra zostaje tylko jego podstawowa część, a części odpowiedzialne za bardziej wyrafinowane funkcje są wydzielone do funkcjonalnych bloków albo realizowane jako zwykłe procesy w trybie użytkownika.
Jądra systemów operacyjnych nanokernel działanie zbliżone do techniki działania mikrojądra, ale nanojądro jest jeszcze mniejsze. exokernel architektura będąca odmianą nanojądra. Cechą wyróżniającą jest możliwość zarządzania zasobami systemu przez nieuprzywilejowanego użytkownika, a rola jądra sprowadza się do zabezpieczania zasobów. cachekernel w tej technice jądro systemu buforuje obiekty systemowe takie jak wątki czy przestrzenie adresowe tak jak sprzęt komputerowy buforuje pamięć. Jądra aplikacji trybu użytkownika są odpowiedzialne za ładowanie tych danych i ponowne ich zapisanie stosując specyficzne dla danej aplikacji mechanizmy.
Jądra systemów operacyjnych jądro hybrydowe kompromis między architekturą jądra monolitycznego i mikrojądra. W krytycznych usługach - np. stos sieci - usługi są na stałe wkompilowane w główny kod jądra, inne usługi pozostają oddzielone od głównego jądra i działają jako serwery (w przestrzeni jądra). Dzięki temu rozwiązaniu możliwe jest zachowanie wydajności jądra monolitycznego dla kluczowych usług.
Jądro monolityczne
Jądro monolityczne Większa część funkcji jądra zaimplementowana jest w pojedynczym obrazie pamięci, który ładowany jest na stałe do pamięci komputera przez bootloader. Zdarza się jednak, że do jądra monolitycznego (zwanego wtedy modularnym) dopisywana jest możliwość ładowania modułów, które jednak nie realizują najbardziej podstawowych funkcji jądra. Jądro monolityczne cechuje się wyższą wydajnością niż mikrojądro, zwłaszcza w systemach jednoprocesorowych oraz przy obciążaniu systemu tylko jednym procesem. Z drugiej strony awaria (np. błąd programisty) w dowolnym miejscu jądra monolitycznego może spowodować awarię całego systemu (np. błędne żądanie dostępu do pamięci w sterowniku każdego, nawet nieistotnego urządzenia, może zniszczyć dane na dysku, albo "zawiesić" cały system
Mikrojądro
Mikrojądro Zawiera tylko najbardziej niezbędne elementy, takie jak funkcje zarządzania wątkami, komunikacją między- procesową, oraz obsługą przerwań i wyjątków. Wszelkie inne zadania, takie jak np. obsługa systemów plików, sieci, sprzętu realizowane są w przestrzeni użytkownika przez osobne serwery. Mniejszymi wersjami mikrojądra są: nanojądro (nanokernel) i pikojądro (picokernel). Systemami opartymi na mikrojądrze są Amoeba, MINIX, QNX, BeOS, Haiku czy Hurd, mikrojądrami są także (używane w Hurdzie) Mach i L4. Firma Microsoft pracuje nad własnym rozwiązaniem tego typu w projekcie Singularity.
Jądro hybrydowe
Jądro hybrydowe oparte na zmodyfikowanych architekturach jądra monolitycznego oraz mikrojądra używanych w systemach operacyjnych. Jądro jest strukturą podobną do mikrojądra, ale zaimplementowaną jak jądro monolityczne. W przeciwieństwie do mikrojądra, wszystkie (lub prawie wszystkie) usługi wykonywane są w przestrzeni jądra. Podobnie jak w jądrze monolitycznym, nie ma strat w wydajności wywołanych przepływem komunikatów mikrojądra i przełączaniem kontekstu między przestrzenią użytkownika a jądra. Jednakże, podobnie jak w jądrach monolitycznych, nie ma korzyści wynikających z umieszczenia usług w przestrzeni użytkownika. Z tego typu jądra korzystają m.in. systemy operacyjne z rodziny Mac OS X i Windows.
Linux - jądro monolityczne
Jądro Linux Jądro Linux jest w dużym stopniu zgodne ze standardami ANSI i POSIX, obsługuje wielozadaniowość, wielowątkowość, wielobieżność, pamięć wirtualną, biblioteki współdzielone, ładowanie na żądanie, współdzielony kod wykonywalny (ang. copyon-write), dobre zarządzanie pamięcią i obsługę sieci TCP/IP. Jest ono jądrem monolitycznym z ładowalnymi modułami. Sterowniki urządzeń i rozszerzenia jądra zwykle pracują w trybie ring 0, z pełnym dostępem do sprzętu; nieliczne jednak działają w trybie użytkownika. W przeciwieństwie do typowych jąder monolitycznych, sterowniki urządzeń są zwykle kompilowane jako moduły, które można załadować i wyładować na działającym systemie. Podobnie, sterowniki mogą być wywłaszczone w określonych warunkach. Ta funkcja została dodana w celu poprawnej obsługi przerwań sprzętowych i systemów wieloprocesorowych.
Jądro Solaris
QNX - mikrojądro rozmiar ok. 8kB (jądro UNIX > 700kB), stąd nazwa mikrojądra - Neutrino. To, co odróżnia ten system ten od rodziny UNIX, to przede wszystkim struktura modułowa oraz architektura oparta o przesyłanie komunikatów (model klient - serwer). QNX daje możliwość zdeterminowania czasu reakcji na zdarzenia występujące w systemie. dzięki rozbudowanym możliwościom definiowania priorytetów, QNX jest stosowany jako system służący do sterowania automatyką przemysłową, gdzie pewne zdarzenia są krytyczne (np. otwarcie zaworu bezpieczeństwa w zbiorniku kiedy gwałtownie wzrasta ciśnienie) i muszą być zawsze obsłużone na czas.
QNX budowa mikrojądra neutrino (~8kB)
QNX budowa mikrojądra IPC - (ang. Interprocess communication) - obsługuje komunikację między procesami. Network Interface - przeźroczysta komunikacja pomiędzy procesami w obrębie sieci lokalnej. Hardware Interrupt Redirector - przechwytuje pojawiające się przerwania oraz przekazuje je do odpowiednich procesów obsługujących je. Część ta sama nie obsługuje przerwań! Realtime Scheduler - decyduje, który proces ma uzyskać dostęp do procesora w danej chwili (POSIX 1003.4 - dotyczy zagadnień czasu rzeczywistego).
Jądro Windows NT Modularna architektura Windows NT składa się z dwóch głównych warstw: trybu użytkownika i trybu jądra. Programy i podsystemy w trybie użytkownika są ograniczone do zasobów systemowych, do których mają dostęp; w trybie jądra natomiast posiadają nieograniczony dostęp do pamięci systemowej i urządzeń zewnętrznych. Jądra systemów operacyjnych w technologii NT są określane jako jądra hybrydowe, ale właściwie są to jądra monolityczne o strukturze zbliżonej do mikrojądra. Architektura NT składa się z jądra hybrydowego, warstwy abstrakcji sprzętowej (HAL), sterowników i egzekutora. Wszystkie te moduły działają w trybie jądra. Usługi o wyższym poziomie abstrakcji są implementowane przez egzekutor.
Tryb użytkownika w technologii Windows NT składa się z podsystemów, umożliwiających przekazywanie zamówień wejścia/wyjścia za pomocą menedżera wejścia/wyjścia do odpowiedniego sterownika programowego, działającego w trybie jądra. Warstwa użytkownika Windows 2000 składa się z dwóch podsystemów: podsystemu środowiska (uruchamia aplikacje napisane dla wielu różnych typów systemów operacyjnych) i podsystemu integralności (uruchamia specyficzne dla systemu funkcje w zastępstwie podsystemu środowiska). Tryb jądra w Windows 2000 ma pełny dostęp do sprzętu i zasobów systemowych komputera. Tryb jądra blokuje dostęp dla usług i aplikacji trybu użytkownika do krytycznych elementów systemu operacyjnego, do których nie powinny mieć one dostępu.
Egzekutor komunikuje się ze wszystkimi podsystemami trybu użytkownika. Obsługuje wejście/wyjście, zarządza obiektami, zabezpieczeniami, oraz procesami. Jądro umieszczone jest pomiędzy HAL i Egzekutorem, zapewniając synchronizację wieloprocesorową, szeregowanie zadań i przerwań wraz z ich przydzielaniem, oraz zarządzanie obsługą pułapek i rozdzielaniem wyjątków. Jądro jest odpowiedzialne również za inicjalizację sterowników sprzętu podczas uruchamiania systemu. Sterowniki poziomu jądra występują na trzech poziomach: wysokim, pośrednim, oraz niskim. Windows Driver Model (WDM - model tworzenia sterowników dla Windows) występuje na poziomie pośrednim i został zaprojektowany tak, aby zachować zgodność binarną i kodu źródłowego pomiędzy Windows 98 a Windows 2000. Sterowniki niskiego poziomu są albo sterownikami Windows NT starszego typu, kontrolującymi urządzenie bezpośrednio, albo szyną systemową typu Plug-and-play.