XNU är den operativsystemkärna som Apple förvärvade och utvecklade för att använda i sitt operativsystem Mac OS och har släppts som fri programvara och som öppen källkod som en del av Darwin. Beteckningen "XNU" är en akronym för "X is not Unix" (X är inte Unix)[1]

Ursprungligen utvecklades XNU av NeXT för deras operativsystem Nextstep. XNU var en monolitisk kärna som kombinerade version 2.5 av Mach med komponenter från version 3.4 av BSD och Driver Kit, ett objektorienterat API för att skriva drivrutiner.

Efter att NeXT hade köpts upp av Apple uppgraderades Mach-komponenten till 3.0 som var en mikrokärna, men Apple lade stora delar i samma adressutrymme av prestandaanledning så det är numera en hybridkärna, BSD-komponenterna uppgraderades med kod från FreeBSD-projektet, och Driver Kit ersattes av ett API som hette I/O Kit, baserat på C++.

Design av operativsystemskärnan redigera

Precis som många andra moderna operativsystemskärnor är XNU en hybridkärna som innehåller funktioner från både mikrokärnor och monolitiska kärnor. På så vis kan man utnyttja en del fördelar och undvika en del nackdelar som finns i dessa båda teknologier.

Mach uppfattades från början som en enkel mikrokärna eftersom den kan köra ett operativsystems kärna som en separat process vilket tillåter flexibilitet (man kunde köra flera operativsystem parallellt ovanpå Mach-kärnan) men samtidigt försämrades prestandan. Därför valde Mac OS X utvecklare att implementera funktionalitet från BSD i kärnan tillsammans med Mach. Resultatet blev då alltså en kombination av Mach:s och BSD:s kärna med några fördelar och nackdelar från vardera.

XNU kan köras på Intel- och AMD-baserade datorer (med x86-processorer), såväl som på PowerPC-baserade och ARM-baserade datorer.

Mach redigera

Kärnan av XNU operativsystemskärnan är Mach, och den tillför trådar, processer, hantering av virtuellt minne, väldigt mjukt realtidsstöd, skyddat minne, och konsol-I/O. Mach-komponenten gör det också möjligt för operativsystemet att ha binärer för flera skilda processorarkitekturer inuti samma fil – såsom x86 och PowerPC – eftersom den använder det binära formatet Mach-O.

En variant av Mach (GNU Mach) användes som utgångspunkt för Hurd-kärnan.

BSD redigera

BSD-komponenterna av operativsystemskärnan tillför POSIX API, Unix processmodell ovanpå Machs arbetsuppgifter, grundläggande säkerhetspolicier, användare och grupp-id, tillstånd, nätverksstacken, kod till virtuellt filsystem, kryptografisk struktur, System V IPC och några låsfunktioner. BSD-koden som finns i XNU kom ursprungligen från FreeBSD:s operativsystemskärna. Denna kod har emellertid förändrats högst markant sedan starten, och Apple har tidigare fört en aktiv dialog med FreeBSD Foundation under vidareutvecklingen av XNU.

I/O Kit redigera

I/O Kit beskriver strukturen över drivrutiner. Det är skrivet i C++ och sålunda objektorienterat till sin design, vilket gör att drivrutiner kan skrivas snabbare och med mindre kod än annars. I/O Kit är multi-trådat och SMP-säkert, samt tillåter automatisk, dynamisk enhetskonfiguration.

Många drivrutiner kan skrivas så att de körs från användarrymden, vilket ytterligare ökar stabiliteten av systemet: om en drivrutin kraschar i användarrymden så kommer detta inte medföra att själva operativsystemskärnan också kraschar.

Skydd av delade tillgångar redigera

För att kunna köras säkert på maskiner med flera processorer så måste filer och datastrukturer särskiljas, så att inte trådar eller processer samtidigt försöker ändra samma källa. Exempel på metoder som kan användas för förhindra detta är atomiska operationer, spinlocks, kritiska sektioner, mutexer och särskiljande symboler.

Referenser redigera

Externa länkar redigera