老谭笔记

OSX系统编程环境的介绍

从事OSX的开发也已经很长一段时间了,随着工作中的一些积淀,也让我对OSX开发有了更直观的了解,所以想到总结一下OSX系统编程的整个环境,当然,于是本人的才疏学浅,并且很多部分也参照于网络,所以如果有解释有误的地方,也希望读者斧正。


  • OSX系统的整体架构(见下图)



  • 内核态编程环境

1.BSD - 来自FreeBSD的内核部分。


FreeBSD是一个高效、稳定的UNIX操作系统,是众多BSD UNIX分支中的一个。正是因为OSX基于FreeBSD的内核,也让它继承了其身上很多的优势,包括相当多的工具支持。这也是为什么Linux的用户可以很容易的适应OSX的主要原因。


2.IOKit - 苹果抽象的驱动模型,面向对象的设计。


IOKit是一个面向对象的驱动模型框架,它是早期DriverKit的一个翻版,Driver Kit是使用Objective-C写的,而IOKit是一个C++的驱动架构,它在DriverKit的基础上做了很大的改进,比如IOKit可以写在用户空间跑的驱动(虽然大多仍是跑在内核空间上的),因而驱动挂了而系统不会挂。另外IOKit考虑到了计算机发展的趋势,所以在电源管理、即插即用、动态加载上做得更好。


  • 用户态程序环境


1.BSD - UNIX POSIX API


OSX 早期版本基于 FreeBSD 内核修改,提供了类UNIX的Shell,支持了许多UNIX的命令。POSIX API接口由内核直接支持,故POSIX API使用标准的C语言,其引用的接口文件的实现均直接由内核实现。


2.Carbon - 苹果早期的API,封装了部分底层接口


Carbon为早期的OSX所用,但至今仍然保留,其基于 Core Foundation框架,提供了更多更底层的支持,Carbon的接口均为C语言,但所提供的很多类型却可以Cocoa中的对象无缝转换(CF与NS的对象转换)。


3.Cocoa - 苹果建议Application使用的框架


Cocoa框架是用Objective-C提供的一套面向对象的接口,提供了丰富了UI界面及用户交互体验,并且极大的方便了程序员快速开发一个完整的Application,所以它提供了完善的App的bundle标准(info.plist、resource、frameworks、多语言等)。