Mac OS X的内核

时间:2022-03-29 09:34:51
首先,Mac OS X的内核叫 XNU ,它有许多组件构成,如: Mach 、 BSD 、 I/O Kit 、 Platform Expert 、 libkern 、 libsa 。 

XNU 的Mach部分来自 Mach 3.0 (但是 XNU 不是微内核),它负责 XNU 比较底层的任务,譬如: 


抢占式多任务,包括内核线程(Mac OS X用内核线程实现POSIX线程) 
内存保护 
虚拟内存管理 
进程间通信 
中断管理 
实时支持 
内核调试支持 
控制台I/O 


注意, BSD 子系统其实是内核的一部分(包括其它子系统),它主要使用FreeBSD作为主要的参考代码库(当然也有NetBSD和OpenBSD的一些代码)。 BSD 主要负责: 

处理模型 
用户ID、权限,基本安全策略 
POSIX API,BSD风格的系统调用 
TCP/IP协议栈,BSD套接字,防火墙 
VFS和文件系统 
System V IPC 
加密框架 
各种同步机制 


I/O Kit 是 XNU 不同于其他传统系统的设备驱动框架,它是面向对象的,特性有: 


多种设备家族 
可共享设备的面向对象抽象 
即插即用和热插拔 
电源管理 
抢占式多任务,线程,SMP,内存保护和数据管理 
驱动的动态匹配和加载(多种总线类型) 
一个追踪和维护实例对象详细信息的数据库 
一个系统上所有可用I/O Kit类的数据库 
衍生API 
供应用程序和用户空间的驱动与I/O Kit通信的一套机制/接口 
驱动堆栈 


对于 Platform Expert ,你可以把它看作某种驱动,它能系统所运行平台的类型,它负责: 


建立设备树 
语法分析某个引导参数 
辨认机器(包括处理器和总线的时钟频率) 
万一内核崩溃就初始化一个用户界面可用 


I/O Kit 使用的是C++的一个子集,由 libkern 实现,这个库的主要特性: 


动态对象的分配、组建和破坏 
某些微小操作和各种函数 
提供追踪每个类当前的实例数 
避免“Fragile Base Class Problem” 


libsa 提供用于各种目的的乱七八糟的函数:二叉树搜索啊、排序啊、内核扩展管理啊... 

那么,Darwin是什么?Darwin只能说是一个Mac OS X的基础,它有超过250个软体包,其中许多是Apple自己的包(包括内核和其他各种驱动),另外一些就是来自*BSD和GNU等系统,Apple作了很多努力让这些开放源代码的软体整合到Mac OS X中去