电脑技术学习

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

dn001
在对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方式的)。

   ·BSD命令环境提供了一个可以在命令行上执行BSD程序的外壳。标准的BSD工具、脚本以及自定义或第三方程序在该环境上都有效。该图显示了BSD命令环境与内核环境层之间有着直接的联系。注意,您可以在命令行上运行建立在非BSD环境中的程序,例如基于Cocoa Foundation框架上的程序。
   ·内核环境通过usr/lib中的系统库把BSD服务输出给系统的高层(头文件在/usr/include内)。BSD命令对开发者也是有用的;然而,在某些已安装的Mac OS X中,可能没有包含BSD命令。这是因为BSD命令环境是一个特殊的可选择的环境,在这篇文档中并不做更深入的描述。

对Mac OS X开发者而言Carbon、Cocoa和Java是三个主要的应用程序环境:

   ·Carbon是为Mac OS X设计的,并能适应Mac OS 9的API和库。它保留了大部分先前的 API(70%的函数)以及包括一些专门为Mac OS X开发的API和服务。
   ·Cocoa是一组先进的面向对象的API集合。可以用Java和Objective-C来开发Cocoa应用程序。
   ·Java环境是用于开发和部署100%纯Java及混合API 的Java应用程序和applet的。

系统软件的各个层可直接支持Carbon、Cocoa和Java环境,这些层为所有应用程序环境提供服务。这些层以宽度递减的方式堆加,应用程序代码可以访问较低位置的层,而无需中间层的介入。

这些层的第一层是应用服务层。它包含了Mac OS X的图形和视窗环境,主要由Quartz和QuickDraw来实现。这个环境负责处理屏幕渲染、打印、事件处理、低级别的视窗和指针管理。并且它也包含了用来实现图形用户界面的库、框架和后台服务器。

QuickTime是对操作系统的一种扩展,它在结构上跨越了系统软件的不同层。它是一个交互的多媒体环境,QuickTime具备了针对图形环境和应用程序环境的一致特点和功能性。图3-1显示QuickTime跨越了应用服务层和应用程序环境层。在执行时,QuickTime需要一个主应用程序环境(或浏览器),但由QuickTime所提供的具有独特性和成熟性的多媒体构件通常只存在于应用程序环境中。

应用服务层位于核心服务层之上。在核心服务层中,通常的服务与图形用户界面没有直接的联系。在这里您会发现一些跨环境执行的与编程相关的基本抽象概念,例如:字符串、运行循环和集合。在核心服务中,也有用来管理进程、线程、资源、虚拟内存和用来与文件系统进行交互的API。“核心服务”讨论了软件系统的这一层。

内核环境是系统软件中最低的一个阶层,正好位于核心服务层的下面。内核环境为它上面的层提供了重要的操作系统功能,例如:

   ·抢占式多任务处理
   ·具有内存保护和和动态内存分配的高级虚拟内存
   ·对称多处理(SMP)
   ·多用户访问
   ·基于VFS的文件系统(虚拟文件系统)
   ·设备驱动程序
   ·网络
   ·基本的线程包

它是一个高性能和高度模块化的内核,可以支持设备驱动程序的动态装载、网络扩展和文件系统。内核环境由五个主要部件构成:

   ·Mach 提供了对任务、线程、端口、虚拟地址、内存管理和任务间通信的基本抽象概念和具体实现。Mach也是操作系统的一部分,用于管理处理器的使用,控制时序安排及强制内存保护。另外,它为操作系统的其他部分提供了计时服务、同步基本单元和以消息为中心的底层构造。
   ·BSD BSD的4.4版本用于支持Mach的抢占式多任务处理、内存保护、动态内存分配和对称多处理。在Mac OS X中,BSD构成网络和文件系统的基础。它所提供或支持的一些其他方面的特性,包括:进程的生成与管理、信号处理、系统启动与关闭、一般输入/输出设备的操作、基本文件的操作,以及对终端和其它设备的处理。它也能实现用户和组的身份识别技术,以及对文件和其他资源进行访问限制的相关功能。BSD提供了许多POSIX API。
   ·设备驱动程序和I/O Kit 在Mac OS X中,设备驱动程序由I/O Kit生成。I/OKit是一种提供面向对象编程模型(基于限制性的C++形式)以改善设备驱动程序开发效率的框架。I/O Kit已经考虑到了潜在的操作系统特性,例如:虚拟内存、内存保护和抢占权,因此减轻了程序员对编写驱动程序的额外负担。内核环境包括有许多现成的设备驱动程序。(参见“系统技术”一章)
   ·网络 内核环境实现了许多的本地网络协议以及功能,该内容在“系统技术”一章的“网络与互联网”里有详细介绍。作为网络内核扩展(NKE),实现了一些Mac OSX的网络功能和协议栈。并且可以在不进行重新编译和重新连接的情况下动态地对内核的网络底层结构进行扩展。
   ·文件系统 内核环境支持许多不同类型的文件系统和卷格式,包括Mac OS扩展文件系统(HFS+)、Mac OS标准文件系统(HFS)、UFS、NFS和ISO 9660 CD-ROM。Mac OS扩展文件系统是默认的文件系统,且Mac OS X通常由其引导,并将其作为"根"(即内核使用在一个HFS+卷上的文件系统作为首先装载的文件系统)。通过使用虚拟文件系统(VFS)底层构造,开发者可以编写内核扩展以增加对其他文件系统的更多支持。有关对支持格式的概述,参见“系统技术”一章中的“文件系统”。

正如在“系统技术”一章中的“Darwin和开放源码开发”里所说,内核环境是Darwin(苹果的开放源码技术)的一个子集。Darwin包含了Mac OS X内核环境、BSD命令和BSD命令环境中的基本库。关于Mac OS X内核环境和它与Darwin关系的更多内容参见“Inside Mac OS X: Kernel Programming(内核编程)”。

Mac OS X的内核环境、核心服务和应用程序服务层作为包罗框架被打包。它的两个主要应用程序环境Carbon和Cocoa也作为包罗框架被打包。

标签: