XNU
内核XNU是Darwin 的核心,也是整个OS X 的核心。XNU由一下几个组件组成:
-
Mach 微内核
- 进程和线程抽象
- 虚拟内存管理
- 任务调度
- 进程间通讯和消息传递机制
-
BSD层
BSD层建立在Mach之上是一个很可靠且更现代的API,提供POSIX 兼容性。
BSD层提供更高层的抽象: - UNIX 进程模型
- POSIX线程模型(Pthread)及相关的同步原语
- UNIX 用户和组
- 网络协议栈(BSD Socket API)
- 文件系统访问
- 设备访问(通过/dev目录访问)
-
libKern
内核是C语言和汇编语言编写;I/OKit是C++ 编写的;为了支持C++运行时并提供所需要的基类,libKern库是一个內建的自包含的C++库。 -
I/O Kit
这是一个在内核中的完整的自包含的执行环境,让开发者可以快速创建优雅稳定的设备驱动程序。
系统调用
-
POSIX
POSIX 兼容性是由XNU中BSD层提供的。- 系统调用原型:所有的POSIX 系统调用(不论底层实现如何)都有相同的原型,也就是说具有相同的参数和返回值。
- 系统调用编号:除了固定的原型之外,POSIX还完整定义了系统调用的编号。
-
Mach 系统调用
BSD层是对Mach内核的包装,但是Mach系统调用仍然可以在用户态访问。
在32位系统上,Mach系统调用的编号都为负数,POSIX调用编号为非负。
在64位系统上,Mach系统调用为正数,但是以0x2000000开头,而POSIX调用编号以0x1000000开头。