第Ⅰ部分  高级用户指南
         第1章  达尔文主义:OS X的进化史 3
         1.1  前达尔文时代:Mac OS
         Classic 3
         1.2  浪子回头:NeXTSTEP 4
         1.3  走进新时代:OS X操作系统 4
         1.4  迄今为止的所有OS X版本 5
         1.4.1  10.0——Cheetah,初出茅庐 5
         1.4.2  10.1——Puma,更强大 5
         1.4.3  10.2——Jaguar,渐入佳境 6
         1.4.4  10.3——Panther和Safari 6
         1.4.5  10.4——Tiger,转投Intel的
         怀抱 6
         1.4.6  10.5——Leopard和UNIX 6
         1.4.7  10.6——Snow Leopard 7
         1.4.8  10.7——Lion 7
         1.4.9  10.8——Mountain Lion 8
         1.5  iOS——走向移动平台的
         OS X 9
         1.5.1  1.x——Heavenly,
         第一代iPhone 9
         1.5.2  2.x——App Store、3G和
         企业级的特性 10
         1.5.3  3.x——告别第一代,
         迎来iPad 10
         1.5.4  4.x——iPhone 4、Apple TV和
         iPad 2 10
         1.5.5  5.x——iPhone 4S和
         更新的硬件 11
         1.5.6  iOS和OS X对比 11
         1.6  OS X的未来 13
         1.7  本章小结 14
         参考文献 15
         第2章  合众为一:OS X和iOS的架构 17
         2.1  OS X架构概述 17
         2.2  用户体验层 19
         2.2.1  Aqua 19
         2.2.2  QuickLook 20
         2.2.3 Spotlight 21
         2.3 Darwin——UNIX核心 22
         2.3.1 Shell 22
         2.3.2 文件系统 23
         2.4  UNIX的系统目录 23
         2.4.1  OS X特有的目录 24
         2.4.2  iOS文件系统的区别 25
         2.5  bundle 25
         2.6  应用程序和app 26
         2.6.1  Info.plist 27
         2.6.2  Resources目录 29
         2.6.3  NIB文件 29
         2.6.4  通过.lproj文件实现国际化 30
         2.6.5  图标文件(.icns) 30
         2.6.6  CodeResources 30
         2.7  框架 33
         2.7.1  框架bundle格式 33
         2.7.2  OS X和iOS公共框架列表 35
         2.8  库 41
         2.9  其他应用程序类型 43
         2.9.1  Java(仅限于OS X) 43
         2.9.2  Widget 43
         2.9.3  BSD/Mach原生程序 44
         2.10  系统调用 44
         2.10.1  POSIX 44
         2.10.2  Mach系统调用 45
         2.11  XNU概述 47
         2.11.1  Mach 47
         2.11.2  BSD层 48
         2.11.3  libkern 48
         2.11.4  I/O Kit 48
         2.12  本章小结 48
         参考文献 49
         第3章  站在巨人的肩膀上:OS X和
         iOS使用的技术 51
         3.1  BSD相关的特性 51
         3.1.1  sysctl 51
         3.1.2  kqueue 53
         3.1.3  审计(OS X) 54
         3.1.4  强制访问控制 57
         3.2  OS X和iOS特有的技术 60
         3.2.1  用户和组的管理(OS X) 60
         3.2.2  系统配置 62
         3.2.3  记录日志 64
         3.2.4  Apple事件和AppleScript 66
         3.2.5  FSEvents 68
         3.2.6  通知 73
         3.2.7  其他重要的API 73
         3.3  OS X和iOS的安全机制 73
         3.3.1  代码签名 74
         3.3.2  隔离机制(沙盒化) 75
         3.3.3  Entitlement:更严格的沙盒 77
         3.3.4  沙盒机制的实施 82
         3.4  本章小结 83
         参考文献 84
         第4章  庖丁解进程:Mach-O格式、
         进程以及线程内幕 85
         4.1  关键概念回顾 85
         4.1.1  进程和线程 85
         4.1.2  进程生命周期 86
         4.1.3  UNIX信号 89
         4.2  可执行文件 91
         4.3  通用二进制格式 92
         4.3.1  Mach-O二进制格式 95
         4.3.2  加载命令 98
         4.4  动态库 104
         4.4.1  启动时库的加载 105
         4.4.2  库的运行时加载 113
         4.4.3  dyld的特性 115
         4.5  进程地址空间 120
         4.5.1  进程入口点 120
         4.5.2  地址空间布局随机化 121
         4.5.3  32位地址空间(Intel) 122
         4.5.4  64位地址空间 123
         4.5.5  32位地址空间(iOS) 123
         4.6  进程内存分配(用户态) 128
         4.6.1  alloca() 128
         4.6.2  堆分配 128
         4.6.3  虚拟内存——系统
         管理员的角度 130
         4.7  线程 132
         参考文献 134
         第5章  进程跟踪和调试 135
         5.1  DTrace 135
         5.1.1  D语言 135
         5.1.2  dtruss 138
         5.1.3  DTrace工作原理 139
         5.2  其他剖析机制 142
         5.2.1  CHUD的衰落 142
         5.2.2  继任者AppleProfileFamily 142
         5.3  进程信息 143
         5.3.1  sysctl 143
         5.3.2  proc_info 144
         5.4  进程和系统快照 146
         5.4.1  system_profiler(8) 146
         5.4.2  sysdiagnose(1) 146
         5.4.3  allmemory(1) 147
         5.4.4  stackshot(1) 148
         5.4.5  stack_snapshot系统调用 149
         5.5  kdebug 152
         5.5.1  基于kdebug的工具 152
         5.5.2  kdebug代码 152
         5.5.3  写入kdebug消息 154
         5.5.4  读取kdebug消息 155
         5.6  应用程序崩溃 156
         5.6.1  应用程序挂起和采样 159
         5.6.2  内存破坏的bug 160
         5.7  内存泄漏 161
         5.7.1  heap(1) 162
         5.7.2  leaks(1) 162
         5.7.3  malloc_history(1) 163
         5.8  标准UNIX工具 163
         5.8.1  通过ps(1)列出进程列表 164
         5.8.2  top(1):系统全局视图 164
         5.8.3  通过lsof(1)和fuser(1)
         进行文件诊断 165
         5.9  使用GDB 165
         5.9.1  GDB的Darwin扩展 166
         5.9.2  GDB用于iOS 166
         5.9.3  LLDB 166
         5.10  本章小结 167
         参考文献和深入阅读 167
         第6章  引导过程:EFI和iBoot 169
         6.1  传统形式的引导 169
         6.2  揭秘EFI 171
         6.2.1  EFI的基本概念 171
         6.2.2  EFI服务 173
         6.2.3  NVRAM变量 177
         6.3  OS X和boot.efi 178
         6.3.1  boot.efi的执行流程 179
         6.3.2  引导内核 185
         6.3.3  内核对EFI的回调 187
         6.3.4  Lion中boot.efi的变化 187
         6.3.5  Boot Camp 187
         6.3.6  bless(8) 188
         6.4  iOS和iBoot 192
         6.4.1  初期:引导ROM 193
         6.4.2  普通引导 194
         6.4.3  恢复模式引导 195
         6.4.4  设备固件更新(DFU)模式 195
         6.4.5  降级和回放攻击 196
         6.5  安装镜像 196
         6.5.1  OS X安装过程 196
         6.5.2  iOS文件系统镜像
         (.ipsw文件) 201
         6.6  本章小结 206
         参考文献和深入阅读 206
         第7章  贯穿始终——launchd 207
         7.1  launchd 207
         7.1.1  启动launchd 207
         7.1.2  系统范围和用户范围的
         launchd 208
         7.1.3  守护程序和代理程序 208
         7.1.4  多面手launchd 209
         7.2  LaunchDaemon列表 220
         7.3  GUI shell程序 224
         7.3.1  Finder(OS X) 224
         7.3.2  SpringBoard(iOS) 225
         7.4  XPC(Lion和iOS) 230
         7.5  本章小结 234
         参考文献和深入阅读 235
         第Ⅱ部分  内核
         第8章  内核架构 239
         8.1  内核基础知识 239
         8.2  用户态和内核态 243
         8.2.1  Intel架构——ring 243
         8.2.2  ARM架构——CPSR 244
         8.3  内核态/用户态转换机制 245
         8.3.1  Intel上的陷阱处理程序 246
         8.3.2  自愿的内核转换 254
         8.4  系统调用的处理 259
         8.4.1  POSIX/BSD系统调用 260
         8.4.2  Mach陷阱 263
         8.4.3  机器相关的调用 267
         8.4.4  诊断调用 268
         8.5  XNU和硬件抽象 270
         8.6  本章小结 272
         参考文献 272
         第9章  由生到死——内核引导和
         内核崩溃 273
         9.1  XNU源代码 273
         9.1.1  获得源代码 273
         9.1.2  make XNU 274
         9.1.3  一个内核,多种架构支持 276
         9.1.4  XNU源代码树 278
         9.2  引导XNU 281
         9.2.1  引导过程概览 281
         9.2.2  OS X:vstart 282
         9.2.3  iOS:start 283
         9.2.4  [i386|arm]_init 283
         9.2.5  i386_init_slave() 285
         9.2.6  machine_startup 285
         9.2.7  kernel_bootstrap 286
         9.2.8  kernel_bootstrap_thread 289
         9.2.9  bsd_init 291
         9.2.10  bsdinit_task 296
         9.2.11  睡眠和唤醒 299
         9.3  引导参数 300
         9.4  内核调试 302
         9.4.1  “不要害怕”——
         避免panic 303
         9.4.2  panic的实现 304
         9.4.3  panic报告 306
         9.5  本章小结 310
         参考文献 310
         第10章  Mach原语:一切以消息为
         媒介 311
         10.1  Mach概述 311
         10.1.1  Mach设计原则 312
         10.1.2  Mach设计目标 313
         10.2  Mach消息 313
         10.2.1  简单消息 313
         10.2.2  复杂消息 314
         10.2.3  发送消息 315
         10.2.4  端口 316
         10.2.5  Mach接口生成器(MIG) 318
         10.3  深入IPC 323
         10.4  同步原语 326
         10.4.1  锁组对象 326
         10.4.2  互斥体对象 327
         10.4.3  读写锁对象 328
         10.4.4  自旋锁对象 329
         10.4.5  信号量对象 329
         10.4.6  锁集对象 331
         10.5  机器原语 332
         10.5.1  主机对象 332
         10.5.2  时钟对象 341
         10.5.3  处理器对象 343
         10.5.4  处理器集对象 346
         10.6  本章小结 350
         参考文献 350
         第11章  刹那之间——Mach调度 351
         11.1  调度原语 351
         11.1.1  线程 351
         11.1.2  任务 356
         11.1.3  任务和线程相关的API 360
         11.1.4  任务相关的API 361
         11.1.5  线程相关的API 365
         11.2  调度 369
         11.2.1  概述 369
         11.2.2  优先级 370
         11.2.3  运行队列 373
         11.3  Mach调度器的独特特性 376
         11.3.1  控制权转交 376
         11.3.2  续体 376
         11.3.3  抢占模式 378
         11.3.4  异步软件陷阱(AST) 383
         11.3.5  调度算法 386
         11.4  定时器中断 389
         11.4.1  中断驱动的调度 389
         11.4.2  XNU中的定时器
         中断处理 390
         11.5  异常 394
         11.5.1  Mach异常模型 394
         11.5.2  实现细节 395
         11.6  本章小结 403
         参考文献 403
         第12章  Mach虚拟内存 405
         12.1  虚拟内存架构 405
         12.1.1  虚拟内存全貌 405
         12.1.2  虚拟内存概述 406
         12.1.3  用户态视角 410
         12.2  物理内存管理 419
         12.2.1  pmap的API 420
         12.2.2  API在Intel架构上的
         实现示例 421
         12.3  Mach Zone 423
         12.3.1  Mach Zone的结构 424
         12.3.2  引导期间的zone设置 426
         12.3.3  zone垃圾回收 427
         12.3.4  zone调试 428
         12.4  内核内存分配器 429
         12.4.1  kernel_memory_
         allocate() 429
         12.4.2  kmem_alloc()系列函数 431
         12.4.3  kalloc 432
         12.4.4  OSMalloc 433
         12.5  Mach分页器 434
         12.5.1  Mach分页器接口 435
         12.5.2  Universal Page List 438
         12.5.3  分页器类型 440
         12.6  分页策略管理 447
         12.6.1  Pageout守护程序 448
         12.6.2  处理页错误 450
         12.6.3  dynamic_pager(8)
         (OS X) 451
         12.7  本章小结 452
         参考文献 452
         第13章  BSD层 453
         13.1  BSD简介 453
         13.1.1  一统天下 454
         13.1.2  POSIX标准中的内容 454
         13.1.3  实现BSD 455
         13.1.4  XNU不是完整的BSD 455
         13.2  进程和线程 455
         13.2.1  BSD进程结构 456
         13.2.2  进程列表和进程组 458
         13.2.3  线程 459
         13.2.4  对应到Mach 461
         13.3  进程创建 463
         13.3.1  用户态的角度 463
         13.3.2  内核态的角度 464
         13.3.3  加载和执行二进制文件 467
         13.3.4  Mach-O二进制文件 472
         13.4  进程控制和跟踪 475
         13.4.1  ptrace (#26) 475
         13.4.2  proc_info (#336) 476
         13.4.3  策略 476
         13.4.4  进程挂起和恢复 477
         13.5  信号 478
         13.5.1  UNIX异常处理程序 478
         13.5.2  硬件产生的信号 483
         13.5.3  软件产生的信号 484
         13.5.4  受害者的信号处理 484
         13.6  本章小结 485
         参考文献 485
         第14章  有新有旧:BSD高级功能 487
         14.1  内存管理 487
         14.1.1  POSIX内存和页面
         管理系统调用 487
         14.1.2  BSD内部的内存函数 489
         14.1.3  内存压力 492
         14.1.4  Jetsam(iOS) 493
         14.1.5  内核地址空间布局
         随机化 495
         14.2  工作队列 496
         14.3  换个角度看BSD层 499
         14.3.1  sysctl 499
         14.3.2  kqueue 501
         14.3.3  审计(OS X) 503
         14.3.4  强制访问控制(MAC) 504
         14.4  苹果的策略模块 506
         14.5  本章小结 509
         参考文献 509
         第15章  文件系统和虚拟文件
         系统交换 511
         15.1  磁盘设备和分区 511
         15.2  通用文件系统的概念 522
         15.2.1  文件 522
         15.2.2  扩展属性 522
         15.2.3  权限 522
         15.2.4  时间戳 522
         15.2.5  快捷方式和连接 523
         15.3  苹果生态圈中的文件系统 524
         15.3.1  苹果原生的文件系统 524
         15.3.2  DOS/Windows文件系统 524
         15.3.3  CD/DVD文件系统 525
         15.3.4  基于网络的文件系统 526
         15.3.5  伪文件系统 528
         15.4  挂载文件系统(仅限于OS X) 531
         15.4.1  automount 531
         15.4.2  磁盘仲裁 531
         15.5  磁盘镜像文件 533
         15.5.1  原始DMG文件 533
         15.5.2  从磁盘镜像引导(Lion) 534
         15.6  虚拟文件系统交换 534
         15.6.1  文件系统条目 535
         15.6.2  挂载条目 535
         15.6.3  vnode对象 538
         15.7  FUSE——用户空间的
         文件系统 541
         15.8  进程的文件I/O操作 543
         15.9  本章小结 547
         参考文献和深入阅读 547
         第16章  基于B树的HFS+文件系统 549
         16.1  HFS+文件系统概念 549
         16.1.1  时间戳 549
         16.1.2  访问控制表 550
         16.1.3  扩展属性 550
         16.1.4  fork 552
         16.1.5  压缩 553
         16.1.6  Unicode支持 558
         16.1.7  Finder集成 558
         16.1.8  大小写敏感(HFSX) 559
         16.1.9  日志 560
         16.1.10  动态大小调节 561
         16.1.11  元数据区域 561
         16.1.12  热文件 562
         16.1.13  动态碎片整理 562
         16.2  HFS+的设计概念 564
         16.3  组件 570
         16.3.1  HFS+宗卷头 571
         16.3.2  编录文件 572
         16.3.3  extent溢出文件 579
         16.3.4  属性B树 579
         16.3.5  热文件B树 580
         16.3.6  分配文件 581
         16.3.7  HFS日志 581
         16.4  VFS和内核的整合 584
         16.4.1  fsctl(2)的整合 584
         16.4.2  sysctl(2)的整合 585
         16.4.3  文件系统状态通知 585
         16.5  本章小结 586
         参考文献 586
         第17章  遵守协议:网络协议栈 587
         17.1  用户态接口回顾 588
         17.1.1  UNIX Domain套接字 589
         17.1.2  IPv4网络协议 589
         17.1.3  路由套接字 590
         17.1.4  网络驱动程序套接字 590
         17.1.5  IPSec Key Management
         套接字 592
         17.1.6  IPv6网络协议 592
         17.1.7  系统套接字 593
         17.2  套接字和协议统计信息 595
         17.3  第5层:套接字 597
         17.3.1  套接字描述符 597
         17.3.2  mbuf 598
         17.3.3  内核态中的套接字 603
         17.4  第4层:传输层协议 604
         17.4.1  域和protosw 605
         17.4.2  初始化域 609
         17.5  第3层:网络层协议 610
         17.6  第2层:网络接口层 613
         17.6.1  OS X和iOS中的
         网络接口 613
         17.6.2  数据链路接口层 614
         17.6.3  ifnet结构体 614
         17.6.4  案例研究:utun 616
         17.7  整合所有层:网络协议栈 620
         17.7.1  接收数据 620
         17.7.2  发送数据 623
         17.8  数据包过滤 626
         17.8.1  套接字过滤器 627
         17.8.2  ipfw(8) 628
         17.8.3  PF包过滤器(Lion和iOS) 629
         17.8.4  IP过滤器 630
         17.8.5  接口过滤器 632
         17.8.6  伯克利数据包过滤器 633
         17.9  流量整形和QoS 637
         17.9.1  综合服务模型 637
         17.9.2  区分服务模型 637
         17.9.3  实现dummynet 638
         17.9.4  在用户态控制参数 638
         17.10  本章小结 639
         参考文献和深入阅读 639
         第18章  内核扩展模块 641
         18.1  扩展内核的功能 641
         18.2  内核扩展(kext) 643
         18.2.1  kext结构 645
         18.2.2  kext安全需求 647
         18.2.3  内核扩展的相关操作 647
         18.2.4  kernelcache 647
         18.2.5  multi-kext 651
         18.2.6  从程序员的视角看kext 651
         18.2.7  kext的内核支持 652
         18.3  本章小结 661
         参考文献 662
         第19章  驱动力——I/O Kit驱动
         程序框架 663
         19.1  I/O Kit简介 664
         19.1.1  设备驱动程序的
         编程约束 664
         19.1.2  I/O Kit是什么 664
         19.1.3  I/O Kit不是什么 666
         19.2  libkern:I/O Kit的基类 667
         19.2.1  OSObject 668
         19.2.2  OSMetaClass 668
         19.3  I/O Registry 669
         19.3.1  IORegistryEntry 671
         19.3.2  IOService 671
         19.4  用户态的I/O Kit 671
         19.4.1  访问I/O Registry 672
         19.4.2  获得/设置驱动程序属性 674
         19.4.3  即插即用(通知端口) 675
         19.4.4  I/O Kit电源管理 676
         19.4.5  其他I/O Kit子系统 677
         19.4.6  I/O Kit诊断 678
         19.5  I/O Kit内核驱动程序 680
         19.5.1  驱动程序匹配 680
         19.5.2  I/O Kit族 682
         19.5.3  I/O Kit驱动程序模型 685
         19.5.4  IOWorkLoop 687
         19.5.5  中断处理 689
         19.5.6  I/O Kit内存管理 691
         19.6  整合BSD 693
         19.7  本章小结 694
         参考文献和深入阅读 695
         附录A  了解机器架构 697
      · · · · · ·     (
收起)