OS X 和 iOS 的架构

OS X 和 iOS 是根据简单的架构原则和基础模块构建的. iOS 实际上是完整 OS X 精简之后的版本, 和 OS X 有两大主要区别: 首先 iOS 的架构是基于 ARM(而不是 Intel x86 或 x86_64); 第二, 为了满足移动设备的局限性或特性需求, 有一些组件被简化了或干脆被移除了. 诸如 GPS, 动作感应和触摸等概念最早是出现在 iOS 上的, 这些概念也在逐步地整合进主流的 OS X 中.

OS X 架构概述

苹果的官方 OS X 和 iOS 文档展示了一种非常优雅分层的方法, 当然这个层次结构有一点过于简化:

  • 用户体验层: 包括 Aqua, Dashboard, Spotlight 和辅助功能( accessibility )等. 在 iOS 中, 用户体验层包括 SpringBoard, 同时还支持 Spotlight.
  • 应用框架层: 包括 Cocoa, Carbon 和 Java. 而在 iOS 中只有 Cocoa(严格地说应该是 Cocoa 的衍生品 Cocoa Touch).
  • 核心框架: 有时候称为图形和媒体层. 包括核心框架, Open GL 和 QuickTime.
  • Darwin: 操作系统核心 --- 包括内核和 UNIX shell 环境.

在这些层次中, Darwin 是完全开源的, 是整个系统的基础, 并提供了底层 API. 而上面那些层次则是闭源的, 属于苹果私有的知识产权.


OS X 和 iOS 架构框图

上图展示了这些层次的高层次架构. 这幅图和苹果官方给出的图之间的差别在于这幅图以阶梯的形式画出了各个层次. 这种阶梯式表示的意思是应用程序可以以直接和底层接口的方式编写, 甚至可以完全存在于更低的层次中. 例如, 命令行应用程序虽然没有"用户体验层"的交互, 但是可以和应用框架层或核心框架层交互.

简化到这个抽象程度时, 两个系统的架构都可用这幅图表示. 但是深入其中, 还是可以发现差别的. 例如, 两个系统的用户体验层是不一样的: OS X 使用的是 Aqua, 而 iOS 使用的是 SpringBoard. 框架大体上是相似的, 但是 iOS 包含一些 OS X 不包含的框架, OS X 也包含一些 iOS 不包含的框架.

每一层都可以进一步分解为多个组件, 我们关注的主要内容是 Darwin, 而 Darwin 本身并不是一个单层的组件, 而是一个层次化的架构. 如下图:


Darwin 架构.png

上图更接近 Darwin(特别是内核XNU)的真实架构, 不过也有一定的简化. 这幅图揭示了一个恼人的事实: XNU 实际上是由两种技术混合在一起的: Mach 和 BSD, 此外还添加了一些其他的组件, 主要是 IOKit. 意料之中的是, 苹果提供的简图和文档都没有达到这个细节层次. 事实上苹果几乎不愿意承认 Mach 的存在.

关于这些简化的好处在于, 忽略这些内容也是有好处的. 大部分用户态的应用程序, 特别是通过 Objective-C 编写的应用程序只需要使用到框架的接口 --- 主要是 Cocoa 框架, 这是添加使用的应用框架; 有时候还会使用一些核心框架的接口. 因此大部分 OS X 和 iOS 开发者实际上都忽略了这些更低层次, Darwin的存在, 更不用说内核了. 尽管如此, 用户态的每一个层次都可以被应用程序访问. 具体地说, 是 Darwin 的 shell 环境.

推荐阅读更多精彩内容