• 1.摘要
  • 2.基本信息
  • 3.基本介绍
  • 3.1.内容简介
  • 3.2.作者简介
  • 4.图书目录

深入解析Mac OS X & iOS操作

莱文著书籍

《深入解析Mac OS X & iOS操作系统》探讨了MacOSX系统和iOS系统的方方面面,深入讲解了两个系统的架构,讨论了框架手册没有讨论的内容。《深入解析Mac OS X & iOS操作系统》清晰而详细地讨论了苹果操作系统的内部工作原理,包括苹果私有的API,书中的大部分内容都是首次披露。 《深入解析Mac OS X & iOS操作系统》在漫游系统架构的时候,从用户态深入到内核态,通过带注释的代码示例揭示了每一个层次和组件,还提供了可上手的实验,并且比较了两个系统实现的区别。

基本信息

  • 书名

    深入解析Mac OS X & iOS操作

  • 外文名

    Mac OS X and IOS Internals:To the Apple's Core

  • 作者

    莱文(Jonathan Levin)

  • 译者

    郑思遥

  • 类型

    计算机与互联网

基本介绍

内容简介

《深入解析Mac OS X & iOS操作系统》由苹果系统专家执笔,深入MacOSX和iOS的内部,剖析苹果系统的内核及本质,并详解各种内核工具的用法。内容包括内核的任务和基本组成、进程管理和调度、内存管理、虚拟内存、锁与进程间通信、模块、虚拟文件系统、网络、系统调用、内核活动、时间管理、页缓存和块缓存、数据同步、页面收回和交换、审计等主题。

作者简介

作者:(美国)莱文(Jonathan Levin) 译者:郑思遥 房佩慈

图书目录

第Ⅰ部分高级用户指南 第1章达尔文主义:OSX的进化史3 1.1前达尔文时代:MacOSClassic3 1.2浪子回头:NeXTSTEP4 1.3走进新时代:OSX操作系统4 1.4迄今为止的所有OSX版本5 1.4.110.0——Cheetah,初出茅庐5 1.4.210.1——Puma,更强大5 1.4.310.2——Jaguar,渐入佳境6 1.4.410.3——Panther和Safari6 1.4.510.4——Tiger,转投Intel的怀抱6 1.4.610.5——Leopard和UNIX6 1.4.710.6——SnowLeopard7 1.4.810.7——Lion7 1.4.910.8——MountainLion8 1.5iOS——走向移动平台的OSX9 1.5.11.x——Heavenly,第一代iPhone9 1.5.22.x——AppStore、3G和企业级的特性10 1.5.33.x——告别第一代,迎来iPad10 1.5.44.x——iPhone4、AppleTV和iPad210 1.5.55.x——iPhone4S和更新的硬件11 1.5.6iOS和OSX对比11 1.6OSX的未来13 1.7本章小结14 参考文献15 第2章合众为一:OSX和iOS的架构17 2.1OSX架构概述17 2.2用户体验层19 2.2.1Aqua19 2.2.2QuickLook20 2.2.3 Spotlight21 2.3 Darwin——UNIX核心22 2.3.1 Shell22 2.3.2 文件系统23 2.4UNIX的系统目录23 2.4.1OSX特有的目录24 2.4.2iOS文件系统的区别25 2.5bundle25 2.6应用程序和app26 2.6.1Info.plist27 2.6.2Resources目录29 2.6.3NIB文件29 2.6.4通过.lproj文件实现国际化30 2.6.5图标文件(.icns)30 2.6.6CodeResources30 2.7框架33 2.7.1框架bundle格式33 2.7.2OSX和iOS公共框架列表35 2.8库41 2.9其他应用程序类型43 2.9.1Java(仅限于OSX)43 2.9.2Widget43 2.9.3BSD/Mach原生程序44 2.10系统调用44 2.10.1POSIX44 2.10.2Mach系统调用45 2.11XNU概述47 2.11.1Mach47 2.11.2BSD层48 2.11.3libkern48 2.11.4I/OKit48 2.12本章小结48 参考文献49 第3章站在巨人的肩膀上:OSX和iOS使用的技术51 3.1BSD相关的特性51 3.1.1sysctl51 3.1.2kqueue53 3.1.3审计(OSX)54 3.1.4强制访问控制57 3.2OSX和iOS特有的技术60 3.2.1用户和组的管理(OSX)60 3.2.2系统配置62 3.2.3记录日志64 3.2.4Apple事件和AppleScript66 3.2.5FSEvents68 3.2.6通知73 3.2.7其他重要的API73 3.3OSX和iOS的安全机制73 3.3.1代码签名74 3.3.2隔离机制(沙盒化)75 3.3.3Entitlement:更严格的沙盒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.3UNIX信号89 4.2可执行文件91 4.3通用二进制格式92 4.3.1Mach—O二进制格式95 4.3.2加载命令98 4.4动态库104 4.4.1启动时库的加载105 4.4.2库的运行时加载113 4.4.3dyld的特性115 4.5进程地址空间120 4.5.1进程入口点120 4.5.2地址空间布局随机化121 4.5.332位地址空间(Intel)122 4.5.464位地址空间123 4.5.532位地址空间(iOS)123 4.6进程内存分配(用户态)128 4.6.1alloca()128 4.6.2堆分配128 4.6.3虚拟内存——系统管理员的角度130 4.7线程132 参考文献134 第5章进程跟踪和调试135 5.1DTrace135 5.1.1D语言135 5.1.2dtruss138 5.1.3DTrace工作原理139 5.2其他剖析机制142 5.2.1CHUD的衰落142 5.2.2继任者AppleProfileFamily142 5.3进程信息143 5.3.1sysctl143 5.3.2proc_info144 5.4进程和系统快照146 5.4.1system_profiler(8)146 5.4.2sysdiagnose(1)146 5.4.3allmemory(1)147 5.4.4stackshot(1)148 5.4.5stack_snapshot系统调用149 5.5kdebug152 5.5.1基于kdebug的工具152 5.5.2kdebug代码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.1heap(1)162 5.7.2leaks(1)162 5.7.3malloc_history(1)163 5.8标准UNIX工具163 5.8.1通过ps(1)列出进程列表164 5.8.2top(1):系统全局视图164 5.8.3通过lsof(1)和fuser(1) 进行文件诊断165 5.9使用GDB165 5.9.1GDB的Darwin扩展166 5.9.2GDB用于iOS166 5.9.3LLDB166 5.10本章小结167 参考文献和深入阅读167 第6章引导过程:EFI和iBoot169 6.1传统形式的引导169 6.2揭秘EFI171 6.2.1EFI的基本概念171 6.2.2EFI服务173 6.2.3NVRAM变量177 6.3OSX和boot.efi178 6.3.1boot.efi的执行流程179 6.3.2引导内核185 6.3.3内核对EFI的回调187 6.3.4Lion中boot.efi的变化187 6.3.5BootCamp187 6.3.6bless(8)188 6.4iOS和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.1OSX安装过程196 6.5.2iOS文件系统镜像(.ipsw文件)201 6.6本章小结206 参考文献和深入阅读206 第7章贯穿始终——launchd207 7.1launchd207 7.1.1启动launchd207 7.1.2系统范围和用户范围的 launchd208 7.1.3守护程序和代理程序208 7.1.4多面手launchd209 7.2LaunchDaemon列表220 7.3GUIshell程序224 7.3.1Finder(OSX)224 7.3.2SpringBoard(iOS)225 7.4XPC(Lion和iOS)230 7.5本章小结234 参考文献和深入阅读235 第Ⅱ部分内核 第8章内核架构239 8.1内核基础知识239 8.2用户态和内核态243 8.2.1Intel架构——ring243 8.2.2ARM架构——CPSR244 8.3内核态/用户态转换机制245 8.3.1Intel上的陷阱处理程序246 8.3.2自愿的内核转换254 8.4系统调用的处理259 8.4.1POSIX/BSD系统调用260 8.4.2Mach陷阱263 8.4.3机器相关的调用267 8.4.4诊断调用268 8.5XNU和硬件抽象270 8.6本章小结272 参考文献272 第9章由生到死——内核引导和内核崩溃273 9.1XNU源代码273 9.1.1获得源代码273 9.1.2makeXNU274 9.1.3一个内核,多种架构支持276 9.1.4XNU源代码树278 9.2引导XNU281 9.2.1引导过程概览281 9.2.2OSX:vstart282 9.2.3iOS:start283 9.2.4[i386|arm]_init283 9.2.5i386_init_slave()285 9.2.6machine_startup285 9.2.7kernel_bootstrap286 9.2.8kernel_bootstrap_thread289 9.2.9bsd_init291 9.2.10bsdinit_task296 9.2.11睡眠和唤醒299 9.3引导参数300 9.4内核调试302 9.4.1“不要害怕”——避免panic303 9.4.2panic的实现304 9.4.3panic报告306 9.5本章小结310 参考文献310 第10章Mach原语:一切以消息为媒介311 10.1Mach概述311 10.1.1Mach设计原则312 10.1.2Mach设计目标313 10.2Mach消息313 10.2.1简单消息313 10.2.2复杂消息314 10.2.3发送消息315 10.2.4端口316 10.2.5Mach接口生成器(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调度351 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.3Mach调度器的独特特性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.2XNU中的定时器中断处理390 11.5异常394 11.5.1Mach异常模型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.1pmap的API420 12.2.2API在Intel架构上的实现示例421 12.3MachZone423 12.3.1MachZone的结构424 12.3.2引导期间的zone设置426 12.3.3zone垃圾回收427 12.3.4zone调试428 12.4内核内存分配器429 12.4.1kernel_memory_allocate()429 12.4.2kmem_alloc()系列函数431 12.4.3kalloc432 12.4.4OSMalloc433 12.5Mach分页器434 12.5.1Mach分页器接口435 12.5.2UniversalPageList438 12.5.3分页器类型440 12.6分页策略管理447 12.6.1Pageout守护程序448 12.6.2处理页错误450 12.6.3dynamic_pager(8) (OSX)451 12.7本章小结452 参考文献452 第13章BSD层453 13.1BSD简介453 13.1.1一统天下454 13.1.2POSIX标准中的内容454 13.1.3实现BSD455 13.1.4XNU不是完整的BSD455 13.2进程和线程455 13.2.1BSD进程结构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.4Mach—O二进制文件472 13.4进程控制和跟踪475 13.4.1ptrace(#26)475 13.4.2proc_info(#336)476 13.4.3策略476 13.4.4进程挂起和恢复477 13.5信号478 13.5.1UNIX异常处理程序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.1POSIX内存和页面管理系统调用487 14.1.2BSD内部的内存函数489 14.1.3内存压力492 14.1.4Jetsam(iOS)493 14.1.5内核地址空间布局随机化495 14.2工作队列496 14.3换个角度看BSD层499 14.3.1sysctl499 14.3.2kqueue501 14.3.3审计(OSX)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.2DOS/Windows文件系统524 15.3.3CD/DVD文件系统525 15.3.4基于网络的文件系统526 15.3.5伪文件系统528 15.4挂载文件系统(仅限于OSX)531 15.4.1automount531 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.3vnode对象538 15.7FUSE——用户空间的文件系统541 15.8进程的文件I/O操作543 15.9本章小结547 参考文献和深入阅读547 第16章基于B树的HFS+文件系统549 16.1HFS+文件系统概念549 16.1.1时间戳549 16.1.2访问控制表550 16.1.3扩展属性550 16.1.4fork552 16.1.5压缩553 16.1.6Unicode支持558 16.1.7Finder集成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.2HFS+的设计概念564 16.3组件570 16.3.1HFS+宗卷头571 16.3.2编录文件572 16.3.3extent溢出文件579 16.3.4属性B树579 16.3.5热文件B树580 16.3.6分配文件581 16.3.7HFS日志581 16.4VFS和内核的整合584 16.4.1fsctl(2)的整合584 16.4.2sysctl(2)的整合585 16.4.3文件系统状态通知585 16.5本章小结586 参考文献586 第17章遵守协议:网络协议栈587 17.1用户态接口回顾588 17.1.1UNIXDomain套接字589 17.1.2IPv4网络协议589 17.1.3路由套接字590 17.1.4网络驱动程序套接字590 17.1.5IPSecKeyManagement套接字592 17.1.6IPv6网络协议592 17.1.7系统套接字593 17.2套接字和协议统计信息595 17.3第5层:套接字597 17.3.1套接字描述符597 17.3.2mbuf598 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.1OSX和iOS中的网络接口613 17.6.2数据链路接口层614 17.6.3ifnet结构体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.2ipfw(8)628 17.8.3PF包过滤器(Lion和iOS)629 17.8.4IP过滤器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章内核扩展模块641 18.1扩展内核的功能641 18.2内核扩展(kext)643 18.2.1kext结构645 18.2.2kext安全需求647 18.2.3内核扩展的相关操作647 18.2.4kernelcache647 18.2.5multi—kext651 18.2.6从程序员的视角看kext651 18.2.7kext的内核支持652 18.3本章小结661 参考文献662 第19章驱动力——I/OKit驱动程序框架663 19.1I/OKit简介664 19.1.1设备驱动程序的编程约束664 19.1.2I/OKit是什么664 19.1.3I/OKit不是什么666 19.2libkern:I/OKit的基类667 19.2.1OSObject668 19.2.2OSMetaClass668 19.3I/ORegistry669 19.3.1IORegistryEntry671 19.3.2IOService671 19.4用户态的I/OKit671 19.4.1访问I/ORegistry672 19.4.2获得/设置驱动程序属性674 19.4.3即插即用(通知端口)675 19.4.4I/OKit电源管理676 19.4.5其他I/OKit子系统677 19.4.6I/OKit诊断678 19.5I/OKit内核驱动程序680 19.5.1驱动程序匹配680 19.5.2I/OKit族682 19.5.3I/OKit驱动程序模型685 19.5.4IOWorkLoop687 19.5.5中断处理689 19.5.6I/OKit内存管理691 19.6整合BSD693 19.7本章小结694 参考文献和深入阅读695 附录A了解机器架构697