XNU - XNU

XNU
Grafika jądra XNU.svg
Jądro XNU
Deweloper Apple Inc.
Napisane w C , C++
Rodzina systemów operacyjnych Uniksopodobny , Unix
Stan pracy Aktualny
Model źródłowy Otwarte źródło
Pierwsze wydanie grudzień 1996 ; 24 lata temu ( 1996-12 )
Magazyn Edytuj to na Wikidata
Dostępne w angielski, inni
Platformy Obecne: x86-64 , 64-bit ARM , 32-bit ARM (32-bit ARM obsługuje zamknięte źródło)
Historyczne: PowerPC (32-bit i 64-bit), IA-32
Typ jądra Hybrydowy
Licencja Licencja Apple Public Source 2.0
Poprzedzony Mach , Nukernel
Oficjalna strona internetowa opensource .apple .com /źródło /xnu

XNU to jądro systemu operacyjnego (OS) opracowane przez firmę Apple Inc. od grudnia 1996 r. do użytku w systemie operacyjnym Mac OS X (obecnie macOS ) i wydane jako bezpłatne oprogramowanie o otwartym kodzie źródłowym jako część systemu operacyjnego Darwin , który jest podstawa dla oprogramowania Apple TV , iOS , iPadOS , watchOS i tvOS OS . XNU to skrót od X is Not Unix .

Pierwotnie opracowany przez NeXT dla systemu operacyjnego NeXTSTEP , XNU był jądrem hybrydowym wywodzącym się z wersji 2.5 jądra Mach opracowanego na Uniwersytecie Carnegie Mellon , który sam jest potomkiem 4.3BSD i zawiera większość jądra 4.3BSD, wraz z programowaniem aplikacji interfejs (API) w Objective-C do pisania sterowników o nazwie Driver Kit.

Po tym, jak Apple nabył NeXT, jądro zostało zaktualizowane kodem pochodzącym z OSFMK 7.3 z OSF i projektu FreeBSD , a Driver Kit został zastąpiony C++ API do pisania sterowników o nazwie I/O Kit.

Projekt jądra

XNU to jądro hybrydowe , zawierające cechy zarówno jąder monolitycznych, jak i mikrojądra , próbujące jak najlepiej wykorzystać obie technologie, takie jak zdolność do przekazywania komunikatów przez mikrojądra, umożliwiająca większą modułowość i większe części systemu operacyjnego, aby korzystać z ochrony pamięci i zachowywania szybkość monolitycznych jąder dla niektórych krytycznych zadań.

Od 2021 r. XNU działa na procesorach ARM64 i x86-64 , zarówno jednoprocesorowych, jak i symetrycznych (SMP). Obsługa PowerPC została usunięta od wersji w Mac OS X 10.6 . Wsparcie dla IA-32 zostało usunięte od wersji w Mac OS X 10.7 ; obsługa 32-bitowego ARM została usunięta od wersji w iOS 11 .

Mach

Podstawą jądra XNU jest mocno zmodyfikowane (hybrydowe) jądro Open Software Foundation Mach ( OSFMK ) 7.3. W związku z tym jest w stanie uruchomić rdzeń systemu operacyjnego jako oddzielne procesy, co pozwala na dużą elastyczność (może uruchomić kilka systemów operacyjnych równolegle nad rdzeniem Mach), ale często zmniejsza to wydajność z powodu czasochłonnego jądra/ przełączniki kontekstowe trybu użytkownika i narzut wynikający z mapowania lub kopiowania komunikatów między przestrzeniami adresowymi jądra i demonów usług. W przypadku macOS projektanci próbowali uprościć niektóre zadania, a tym samym funkcje BSD zostały wbudowane w rdzeń Mach. Rezultatem jest mocno zmodyfikowane (hybrydowe) jądro OSFMK 7.3, licencjonowane przez Apple OSFMK 7.3, które jest mikrojądrem z OSF. OSFMK 7.3 zawiera odpowiedni kod z jądra University of Utah Mach 4 oraz z wielu wariantów Mach 3.0 rozwidlonych z oryginalnego mikrojądra Carnegie Mellon University Mach 3.0.

BSD

Część jądra Berkeley Software Distribution (BSD) zapewnia interfejs programowania aplikacji Portable Operating System Interface ( POSIX ) (API, wywołania systemowe BSD), model procesów uniksowych nad zadaniami Mach, podstawowe zasady bezpieczeństwa, identyfikatory użytkowników i grup, uprawnienia, stos protokołów sieciowych (protokoły), kod wirtualnego systemu plików (w tym warstwa dziennika niezależnego od systemu plików ), kilka lokalnych systemów plików, takich jak Hierarchiczny system plików (HFS, HFS Plus (HFS+)) i Apple File System (APFS), Klient i serwer sieciowego systemu plików (NFS), struktura kryptograficzna, komunikacja międzyprocesowa (IPC) systemu UNIX System V , podsystem kontroli, obowiązkowa kontrola dostępu i niektóre podstawowe elementy blokujące. Kod BSD obecny w XNU został ostatnio zsynchronizowany z kodem z jądra FreeBSD . Chociaż wiele z nich zostało znacznie zmodyfikowanych, udostępnianie kodu nadal ma miejsce między Apple a projektem FreeBSD od 2009 roku.

K32/K64

XNU w systemie Mac OS X Snow Leopard , v10.6, ( Darwin wersja 10) jest dostępny w dwóch odmianach, 32-bitowej wersji o nazwie K32 i 64-bitowej wersji o nazwie K64 . K32 może uruchamiać aplikacje 64-bitowe w przestrzeni użytkownika . Nowością w systemie Mac OS X 10.6 była możliwość uruchamiania XNU w 64-bitowej przestrzeni jądra . K32 było domyślnym jądrem serwera 10.6 Server, gdy było używane na wszystkich komputerach z wyjątkiem modeli Mac Pro i Xserve od 2008 r. i może uruchamiać aplikacje 64-bitowe. K64 ma kilka zalet w porównaniu do K32:

  • Może zarządzać więcej niż 32 GB pamięci RAM, ponieważ mapa pamięci zajmowałaby nieproporcjonalnie duży obszar 32-bitowej przestrzeni jądra.
  • Rozmiary buforów pamięci podręcznej mogą być większe niż pozwala na to 32-bitowa przestrzeń jądra, potencjalnie zwiększając wydajność operacji we/wy.
  • Wydajność jest zwiększona przy użyciu wysokiej wydajności urządzeń lub wielu sieciowych grafiki Obudowy (GPU), jako jądro może odwzorowywać wszystkie urządzenia w przestrzeni 64-bitowym, nawet jeśli jest ich kilka mają bardzo duże bezpośredni dostęp do pamięci (DMA) bufory.

Uruchamianie z przytrzymaniem 6 i 4 wymusza uruchomienie K64 na maszynach obsługujących jądra 64-bitowe. K64 będzie uruchamiać aplikacje 32-bitowe, ale nie uruchomi 32-bitowych rozszerzeń jądra (KEXT), więc muszą one zostać przeniesione do K64, aby można było je załadować.

XNU w systemie OS X Mountain Lion w wersji 10.8 i nowszych udostępnia tylko jądro 64-bitowe.

Zestaw we/wy

I/O Kit to framework sterowników urządzeń , napisany w podzbiorze C++ opartym na Embedded C++ . Wykorzystując projekt zorientowany obiektowo , w ramach udostępniane są funkcje wspólne dla dowolnej klasy sterowników, pomagając w pisaniu sterowników urządzeń w krótszym czasie i krótszym kodzie. Zestaw I/O jest bezpieczny dla wielowątkowego, symetrycznego przetwarzania wieloprocesowego (SMP) i umożliwia podłączanie urządzeń podczas pracy oraz automatyczną, dynamiczną konfigurację urządzeń.

Wiele sterowników można napisać do uruchamiania z przestrzeni użytkownika , co dodatkowo zwiększa stabilność systemu. Awaria sterownika w przestrzeni użytkownika nie spowoduje awarii jądra. Jeśli jednak sterownik działający w przestrzeni jądra ulegnie awarii, spowoduje to awarię jądra. Przykłady sterowników obszaru jądra obejmują sterowniki kart dyskowych i kart sieciowych, sterowniki grafiki, sterowniki kontrolerów hosta Universal Serial Bus ( USB ) i FireWire oraz sterowniki oprogramowania maszyn wirtualnych , takich jak VirtualBox , Parallels Desktop for Mac i VMware Fusion .

Zobacz też

Bibliografia

  • Loepere, Keith. „MK++: Mikrojądro o wysokiej wydajności i wysokiej pewności” .

Linki zewnętrzne