首页

《深入解析Mac OS X & iOS操作系统》PDF版本下载

标签:作者:[美] Jonathan Levin,操作系统,OSX和iOS的架构,进程以及线程内幕,launchd     发布时间:2017-03-03   
  • 云盘下载:
  • [提取码:0000]
  • 本地下载:
       ( 需积分:2  )

一、目录介绍

深入解析Mac OS X & iOS操作系统副本.jpg

第Ⅰ部分高级用户指南

第1章  达尔文主义:OSX的进化史
1.1    前达尔文时代:MacOSClassic3
1.2    浪子回头:NeXTSTEP4
1.3    走进新时代:OSX操作系统4
1.4    迄今为止的所有OSX版本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和Safari6
1.4.5  10.4——Tiger,转投Intel的怀抱6
1.4.6  10.5——Leopard和UNIX6
1.4.7  10.6——SnowLeopard7
1.4.8  10.7——Lion7
1.4.9  10.8——MountainLion8
1.5    iOS——走向移动平台的OSX9
1.5.1  1.x——Heavenly,第一代iPhone9
1.5.2  2.x——AppStore、3G和企业级的特性10
1.5.3  3.x——告别第一代,迎来iPad10
1.5.4  4.x——iPhone4、AppleTV和iPad210
1.5.5  5.x——iPhone4S和更新的硬件11
1.5.6  iOS和OSX对比11
1.6    OSX的未来13
1.7    本章小结14
       参考文献15
       
第2章  合众为一:OSX和iOS的架构
2.1    OSX架构概述17
2.2    用户体验层19
2.2.1  Aqua19
2.2.2  QuickLook20
2.2.3  Spotlight21
2.3     Darwin——UNIX核心22
2.3.1  Shell22
2.3.2  文件系统23
2.4    UNIX的系统目录23
2.4.1  OSX特有的目录24
2.4.2  iOS文件系统的区别25
2.5    bundle25
2.6    应用程序和app26
2.6.1  Info.plist27
2.6.2  Resources目录29
2.6.3  NIB文件29
2.6.4  通过.lproj文件实现国际化30
2.6.5  图标文件(.icns)30
2.6.6  CodeResources30
2.7    框架33
2.7.1  框架bundle格式33
2.7.2  OSX和iOS公共框架列表35
2.8    库41
2.9    其他应用程序类型43
2.9.1  Java(仅限于OSX)43
2.9.2  Widget43
2.9.3  BSD/Mach原生程序44
2.10   系统调用44
2.10.1 POSIX44
2.10.2 Mach系统调用45
2.11   XNU概述47
2.11.1 Mach47
2.11.2 BSD层48
2.11.3 libkern48
2.11.4 I/OKit48
2.12   本章小结48
       参考文献49
       
第3章  站在巨人的肩膀上:OSX和iOS使用的技术
3.1    BSD相关的特性51
3.1.1  sysctl51
3.1.2  kqueue53
3.1.3  审计(OSX)54
3.1.4  强制访问控制57
3.2    OSX和iOS特有的技术60
3.2.1  用户和组的管理(OSX)60
3.2.2  系统配置62
3.2.3  记录日志64
3.2.4  Apple事件和AppleScript66
3.2.5  FSEvents68
3.2.6  通知73
3.2.7  其他重要的API73
3.3    OSX和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格式、进程以及线程内幕
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章  进程跟踪和调试
5.1    DTrace135
5.1.1  D语言135
5.1.2  dtruss138
5.1.3  DTrace工作原理139
5.2    其他剖析机制142
5.2.1  CHUD的衰落142
5.2.2  继任者AppleProfileFamily142
5.3    进程信息143
5.3.1  sysctl143
5.3.2  proc_info144
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    kdebug152
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  内存破坏的bug160
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    使用GDB165
5.9.1  GDB的Darwin扩展166
5.9.2  GDB用于iOS166
5.9.3  LLDB166
5.10   本章小结167
       参考文献和深入阅读167
       
第6章  引导过程:EFI和iBoot
6.1    传统形式的引导169
6.2    揭秘EFI171
6.2.1  EFI的基本概念171
6.2.2  EFI服务173
6.2.3  NVRAM变量177
6.3    OSX和boot.efi178
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  BootCamp187
6.3.6  bless(8)188
6.4    iOS和iBoot192
6.4.1  初期:引导ROM193
6.4.2  普通引导194
6.4.3  恢复模式引导195
6.4.4  设备固件更新(DFU)模式195
6.4.5  降级和回放攻击196
6.5    安装镜像196
6.5.1  OSX安装过程196
6.5.2  iOS文件系统镜像(.ipsw文件)201
6.6    本章小结206
       参考文献和深入阅读206
       
第7章  贯穿始终——launchd
7.1    launchd207
7.1.1  启动launchd207
7.1.2  系统范围和用户范围的launchd208
7.1.3  守护程序和代理程序208
7.1.4  多面手launchd209
7.2    LaunchDaemon列表220
7.3    GUIshell程序224
7.3.1  Finder(OSX)224
7.3.2  SpringBoard(iOS)225
7.4    XPC(Lion和iOS)230
7.5    本章小结234
       参考文献和深入阅读235
       
第Ⅱ部分内核

第8章  内核架构
8.1    内核基础知识239
8.2    用户态和内核态243
8.2.1  Intel架构——ring243
8.2.2  ARM架构——CPSR244
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章  由生到死——内核引导和内核崩溃
9.1    XNU源代码273
9.1.1  获得源代码273
9.1.2  makeXNU274
9.1.3  一个内核,多种架构支持276
9.1.4  XNU源代码树278
9.2    引导XNU281
9.2.1  引导过程概览281
9.2.2  OSX:vstart282
9.2.3  iOS:start283
9.2.4  [i386|arm]_init283
9.2.5  i386_init_slave()285
9.2.6  machine_startup285
9.2.7  kernel_bootstrap286
9.2.8  kernel_bootstrap_thread289
9.2.9  bsd_init291
9.2.10 bsdinit_task296
9.2.11 睡眠和唤醒299
9.3    引导参数300
9.4    内核调试302
9.4.1  “不要害怕”——避免panic303
9.4.2  panic的实现304
9.4.3  panic报告306
9.5    本章小结310
       参考文献310
       
第10章  Mach原语:一切以消息为媒介
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    深入IPC323
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调度
11.1    调度原语351
11.1.1  线程351
11.1.2  任务356
11.1.3  任务和线程相关的API360
11.1.4  任务相关的API361
11.1.5  线程相关的API365
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虚拟内存
12.1    虚拟内存架构405
12.1.1  虚拟内存全貌405
12.1.2  虚拟内存概述406
12.1.3  用户态视角410
12.2    物理内存管理419
12.2.1  pmap的API420
12.2.2  API在Intel架构上的实现示例421
12.3    MachZone423
12.3.1  MachZone的结构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  kalloc432
12.4.4  OSMalloc433
12.5    Mach分页器434
12.5.1  Mach分页器接口435
12.5.2  UniversalPageList438
12.5.3  分页器类型440
12.6    分页策略管理447
12.6.1  Pageout守护程序448
12.6.2  处理页错误450
12.6.3  dynamic_pager(8)(OSX)451
12.7    本章小结452
        参考文献452
        
第13章  BSD层
13.1    BSD简介453
13.1.1  一统天下454
13.1.2  POSIX标准中的内容454
13.1.3  实现BSD455
13.1.4  XNU不是完整的BSD455
13.2    进程和线程455
13.2.1  BSD进程结构456
13.2.2  进程列表和进程组458
13.2.3  线程459
13.2.4  对应到Mach461
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高级功能
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  sysctl499
14.3.2  kqueue501
14.3.3  审计(OSX)503
14.3.4  强制访问控制(MAC)504
14.4    苹果的策略模块506
14.5    本章小结509
        参考文献509
        
第15章  文件系统和虚拟文件系统交换
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    挂载文件系统(仅限于OSX)531
15.4.1  automount531
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+文件系统
16.1    HFS+文件系统概念549
16.1.1  时间戳549
16.1.2  访问控制表550
16.1.3  扩展属性550
16.1.4  fork552
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章  遵守协议:网络协议栈
17.1    用户态接口回顾588
17.1.1  UNIXDomain套接字589
17.1.2  IPv4网络协议589
17.1.3  路由套接字590
17.1.4  网络驱动程序套接字590
17.1.5  IPSecKeyManagement套接字592
17.1.6  IPv6网络协议592
17.1.7  系统套接字593
17.2    套接字和协议统计信息595
17.3    第5层:套接字597
17.3.1  套接字描述符597
17.3.2  mbuf598
17.3.3  内核态中的套接字603
17.4    第4层:传输层协议604
17.4.1  域和protosw605
17.4.2  初始化域609
17.5    第3层:网络层协议610
17.6    第2层:网络接口层613
17.6.1  OSX和iOS中的网络接口613
17.6.2  数据链路接口层614
17.6.3  ifnet结构体614
17.6.4  案例研究:utun616
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    流量整形和QoS637
17.9.1  综合服务模型637
17.9.2  区分服务模型637
17.9.3  实现dummynet638
17.9.4  在用户态控制参数638
17.10   本章小结639
        参考文献和深入阅读639
        
第18章  内核扩展模块
18.1    扩展内核的功能641
18.2    内核扩展(kext)643
18.2.1  kext结构645
18.2.2  kext安全需求647
18.2.3  内核扩展的相关操作647
18.2.4  kernelcache647
18.2.5  multi—kext651
18.2.6  从程序员的视角看kext651
18.2.7  kext的内核支持652
18.3    本章小结661
        参考文献662
        
第19章  驱动力——I/OKit驱动程序框架
19.1    I/OKit简介664
19.1.1  设备驱动程序的编程约束664
19.1.2  I/OKit是什么664
19.1.3  I/OKit不是什么666
19.2    libkern:I/OKit的基类667
19.2.1  OSObject668
19.2.2  OSMetaClass668
19.3    I/ORegistry669
19.3.1  IORegistryEntry671
19.3.2  IOService671
19.4    用户态的I/OKit671
19.4.1  访问I/ORegistry672
19.4.2  获得/设置驱动程序属性674
19.4.3  即插即用(通知端口)675
19.4.4  I/OKit电源管理676
19.4.5  其他I/OKit子系统677
19.4.6  I/OKit诊断678
19.5    I/OKit内核驱动程序680
19.5.1  驱动程序匹配680
19.5.2  I/OKit族682
19.5.3  I/OKit驱动程序模型685
19.5.4  IOWorkLoop687
19.5.5  中断处理689
19.5.6  I/OKit内存管理691
19.6    整合BSD693
19.7    本章小结694
        参考文献和深入阅读695
附录A   了解机器架构697

��