XNU is the computer operating system kernel developed at Apple Inc. since
December 1996 for use in the Mac OS X operating system and released as free
and open source software as part of the Darwin operating system. XNU is an
acronym for X is Not Unix. Originally developed by NeXT for the
NeXTSTEP operating system, XNU was a hybrid kernel combining version 2.5 of
the Mach kernel developed at Carnegie Mellon University with components from
4.3BSD and an Objective-C API for writing drivers called Driver Kit.
After Apple acquired NeXT, the Mach component was upgraded to 3.0, the BSD
components were upgraded with code from the FreeBSD project and the Driver Kit
was replaced with a C++ API for writing drivers called I/O Kit.
Kernel design XNU is a hybrid kernel, containing
features of both monolithic kernels and microkernels, attempting to make the
best use of both technologies, such as the message passing capability of
microkernels enabling greater modularity and larger portions of the OS to benefit
from protected memory, as well as retaining the speed of monolithic
kernels for certain critical tasks. Currently, XNU runs on ARM, IA-32, and
x86-64 processors, both single processor and SMP models. PowerPC support is
removed as of version 10. = Mach=
The basis of the XNU kernel, Mach, is a simple microkernel. As such, it is able
to run the core of an operating system as separated processes, which allows a
great flexibility, but this often reduces performance because of time
consuming kernel/user mode context switches and overhead stemming from
mapping or copying messages between the address spaces of the microkernel and
that of the service daemons. With Mac OS X, the designers have attempted to
streamline certain tasks and thus BSD functionality was built into the core
with Mach. The result is a combination of Mach and a classical BSD kernel, with
some advantages and disadvantages of both.
= BSD= The Berkeley Software Distribution
portion of the kernel provides the POSIX API, the Unix process model atop Mach
tasks, basic security policies, user and group ids, permissions, the networking
protocols, the virtual file system code, several local file systems such as
HFS/HFS+, the Network File System client and server, cryptographic framework,
UNIX System V inter-process communication, Audit subsystem,
mandatory access control, and some of the locking primitives. The BSD code
present in XNU came from the FreeBSD kernel. Although much of it has been
significantly modified, code sharing still occurs between Apple and the
FreeBSD Project. = K32/K64=
XNU in Mac OS X 10.6 Snow Leopard and later comes in two varieties, a 32-bit
version called K32 and a 64-bit version called K64. K32 can run 64-bit
applications in userland. What's new in Mac OS X 10.6 is the ability to run XNU
in 64-bit kernel space. K32 is the default kernel for 10.6 Server when used
on all machines except newer Mac Pro and Xserve models and can run 64-bit
applications. K64 has several benefits compared to K32:
Can manage more than 32 GB RAM, as the memory map would consume a
disproportionately large area of the 32-bit kernel space.
Cache buffer sizes can be larger than what the 32-bit kernel space allows,
potentially increasing I/O performance. Performance is increased when using
high-performance networking devices or multiple GPUs, as the kernel can map all
of the devices in 64-bit space even if several have very large DMA buffers.
Booting while holding down 6 and 4 will force the machine to boot K64 on
machines supporting 64-bit kernels. K64 will run 32-bit applications but it will
not run 32-bit kernel extensions so these must be ported to K64 to be able
to load. = I/O Kit=
I/O Kit is the device driver framework, written in a subset of C++ based on
Embedded C++. Using its object-oriented design, features common to any class of
driver are provided within the framework itself, helping device drivers be
written more quickly and using less code. The I/O Kit is multi-threaded,
Symmetric multiprocessing-safe, and allows for hot pluggable devices and
automatic, dynamic device configuration. Many drivers can be written to run from
user space, which further enhances the stability of the system; if a user-space
driver crashes, it will not crash the kernel. However, if a kernel-space
driver crashes it will crash the kernel. Examples of kernel-space drivers include
disk adapter and network adapter drivers, graphics drivers, drivers for
USB and FireWire host controllers, and drivers for virtual machine software
such as Parallels Desktop for Mac and VMware Fusion.
Protecting shared resources In order to run safely on multiprocessor
machines, access to shared resources must be serialized so that threads or
processes do not attempt to modify the same resource at the same time. Atomic
operations, spinlocks, critical sections, mutual exclusions, and
serializing tokens are all possible methods that can be used to prevent
concurrent access. Like recent versions of Linux and FreeBSD, XNU, as of Mac OS
X 10.4 and Darwin 8.0, employs a fine-grained mutex model to achieve
higher performance on multiprocessor systems.
See also Columbia Cycada
References External links
Apple Open Source Browser - XNU Unofficial mirror of XNU at GitHub
XNU: The Kernel - an overview of the components of XNU, written by Amit Singh
in December 2003 Inside the Mac OS X Kernel - "This talk
intends to clear up the confusion by presenting details of the Mac OS X
kernel"