XNU内核比较庞大复杂,因此这里只是进行主要内容的介绍

XNU据说是一个无限递归的缩写:XNU’s Not UNIX

XNU内核是Mac和iOS的核心,有三个主要部分组成的一个分层体系结构;内核XNU是Darwin的核心,也是整个OS X的核心。

Mach概述

该内核内环称为Mach层,源自卡内基-梅陇大学开发的Mach3.0内核。而iOS中的Mach是指Apple自己实现的内核,而不是原始工程。

Mach作为微内核,是仅提供基础服务的一个薄层,如处理器管理和调度以及IPC(inter-process communication,进程间通信),IPC是mach内核的核心概念。由于是分层体系结构, 所以Mac和iOS的mach版本之间几乎没有区别。

虽然XNU中的mach层与原始工程中的职责相同,但是其他操作系统服务(如文件系统和网络)都在与mach相同的内存空间运行, Apple这样做主要是出于对性能的考虑,因为地址空间切换(上下文切换)的操作代价很高。

在一定程度上mach是一个孤立的部分,很多人常常将XNU称为混合内核而不是微内核或宏内核,在这两种内核中,所有的操作系统服务都在相同的环境中运行。XNU的体系结构如下图: 
XNU的第二个主要部分是BSD层们可以将其看做围绕mach层的一个外环, BSD同样也为最终用户的应用程序提供变成接口,其职责包括进程管理,文件系统和网络。 
最后一个是I/O Kit, 他为设备驱动程序提供一个面向对象的框架。 
实际情况是更加复杂的, 各层之间的界限非常模糊,因为许多操作系统的服务和任务都涉及多个部分。

KEXT(内核扩展) 
XNU内核运行时可将代码动态加载到内核地址空间,这样即使内核运行时也可装载和写在额外功能(如驱动程序)。内核扩展有两个主要类: 第一个类用于I/O Kit的内核扩展这些扩展用于硬件驱动程序,采用C++语言编程。第二类用于通用内核扩展,这些扩展通常采用C语言编写。这些扩展可以实现从新网络协议到文件系统的任何内容。通过内核扩展通常与BSD或mach层进行交互。

Mach 
mach层可以看做内核的核心 
为高层部分(BSD和I/O Kit)提供底层服务, 
mach负责硬件抽象,隐藏power PC体系结构和因特尔X86、X86-64体系结构之间的差别。这包括处理异常和中断的细节以及管理内存(包括虚拟内存和分页)的细节。这种设计可以使内核很容易地移植到新的硬件体系结构,苹果后来转向英特尔x86以后来的iOS转向ARM都证明了这点。 
除了硬件抽象,mach还负责线程调度, mach支持对称多处理(SMP)可以在多个CPU或CPU核心之间调度进程。实际上在现有的BSD Unix内核中实现适当的SMP支持, 对mach开发很有帮助。 
进程间通信IPC是mach设计的核心原则,mach中的IPC作为客户端、服务器系统而实现 
一个任务(客户端)可以请求另一个任务(服务器)的服务。系统中的端点称为端口。端口具有确定客户是否可以访问特定服务的相关权限。IPC机制在XNU内核内部使用。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

用以致学,学以致用