1 苹果开发人员技术文档连载之-系统架构

在对Mac OS X设计时的一个关键性考虑是:需要把不同的一组技术集成到一起(其中某些技术在发展历史上有着很大的差异) , 并将这套统一整合后的技术建立在一个高级内核环境的基础上 。本章针对使上述设计构想成为可能的系统架构 , 进行了概括性的探究 。

Mac OS X架构的主要特点是系统软件和接口的分层结构 , 其中一层依赖于它的下一层 。Mac OS X有四个截然不同的系统软件层(按照从属关系区分):

·应用程序环境 包含了五种应用程序(或执行)环境:Carbon、Cocoa、Java、Classic和BSD命令行 。对于开发者来说 , 前三种环境是最重要的 。Mac OS X提供了为这五种环境所设计的开发工具和运行时环境 。
·应用服务 包含了那些与图形用户界面有关的系统服务 , 它们对所有的应用程序环境开放 。应用服务层包括Quartz、QuickDraw、OpenGL和一些基础的系统管理器 。
·核心服务 包含了那些与图形用户界面无关的系统服务 。它包括Core Foundation、Open Transport和Carbon的某些核心部分 。
·内核环境 为Mac OS X提供基础层 。它主要由Mach和BSD组成 , 但它同时也包括了网络协议栈、网络服务、文件系统和设备驱动程序 。内核环境为开发设备驱动(I/OKit)和可装载内核扩展提供了工具 , 其中的可装载内核扩展包括了网络内核扩展(Network Kernel Extensions , NKE) 。

核心服务层、应用服务层以及Carbon、Cocoa应用程序环境在包罗框架中被打包内核环境的许多公共API可以在位于 /usr/include文件夹中的头文件中找到 。

作为前面几段的总结 , 在本章的第一部分从系统软件分层的角度阐述了Mac OS X的架构思想 。接下来的静态透视图则可以动态得来呈现系统内部对用户事件的整个处理过程 。当用户通过输入设备 , 如鼠标或键盘 , 进行操作时 , 就在Mac OS X中产生了一个典型的事件 。设备驱动程序通过I/O Kit产生一个低级事件 , 并把这个事件放入视窗服务器的事件队列中 , 同时通知视窗服务器 。视窗服务器把事件传递给目标进程的特定运行循环端口 。在那里事件被Carbon事件管理器接收并转发给相应的应用程序环境下的事件处理机制 。事件也可以是异步传输的 , 例如一个包含有配置信息的网络数据包 。


分层透视图

分析复杂软件的一种通用方式就是把软件的各个部分分解成不同的“层” 。直观地看来 , 一层位于另一层之上 , 最基础的层位于最底端 。这种视图暗示了软件层与层之间的一般接口与依赖关系 。软件中位置越高的层就越接近于实际的应用程序代码 , 其下又紧紧依赖于其他层的支持 , 层层累加 , 高层依赖于低层 。

Mac OS X可以简述为这样一种透视图 。图1描述了Mac OS X系统软件的一般结构 , 以及库、框架和服务之间的相互依赖关系 。

尽管该图对于理清整个架构体系的思路有所帮助 , 但免不了有对架构内容的阐述过于简化之嫌 。不同的应用程序所使用的Mac OS X服务和子系统 , 以及它们被使用的方式 , 可能会有很大差别 。因此不同标准下的依赖关系与接口可以视程序对程序的个别需要和具体情况而定 。

把警告先放在一边 , 让我们对这张图所描述的层进行深入了解 。

在图1中 , 最上面的一排方块表示了Mac OS X的不同应用程序(或执行)环境 。有五种这样的环境 。其中 , Classic环境和BSD命令环境与系统底层之间进行交互的方式是非常独特的:

Classic“兼容性”环境是指用户在该环境下可以运行Mac OS 8 或 Mac OS 9应用程序 。在这张图中 , Classic环境不再是位于应用服务之上 , 而是用线与其他各层相连 。这些连接表明Classic环境是以“硬布线方式连入Mac OS X的;它不是一种为开发人员在Mac OS X上提供特定代码编译的环境 。换句话说 , 该环境在Mac OS X系统上没有公共的可被编译的Mac OS 8或Mac OS 9 API(非Carbon方式的) 。

推荐阅读