Mac OS X and iOS internals: to the apple’s core
副标题:无
作 者:(美)Jonathan Levin著;郑思遥,房佩慈译
分类号:
ISBN:9787302348672
微信扫一扫,移动浏览光盘
简介
《深入解析Mac OS X & iOS操作系统》编著者 莱文。
系统开发者、内核黑客和对苹果感到好奇的人们 注意了!本书探讨了MacOSX系统和iOS系统的方方面 面,深入讲解了两个系统的架构,讨论了框架手册没 有讨论的内容。本书清晰而详细地讨论了苹果操作系 统的内部工作原理,包括苹果私有的API,书中的大 部分内容都是首次披露。
《深入解析Mac OS X & iOS操作系统》在漫游 系统架构的时候,从用户态深入到内核态,通过带注 释的代码示例揭示了每一个层次和组件,还提供了可 上手的实验,并且比较了两个系统实现的区别。
主要内容 ◆引导过程:Mac的EFI、iOS的iBoot以及内核 启动过程 ◆进程、线程以及虚拟内存管理 ◆通过DTrace、ptrace和隐藏的系统调用进行调 试和性能剖析 ◆系统级的API:POSIX调用、Mach陷阱以及OSX /iOS私有的API ◆文件系统架构,包括VFS和HFS+ ◆网络架构:从套接字到网络接口以及网络驱动 程序 ◆内核扩展、驱动程序以及I/OKit架构的讨论 ◆安全特性、强制访问控制(MAC)以及iOS监狱 《深入解析MacOSX&iOS操作系统》的支持网站 (http://www。newosxbook。com)包含了示例 程序、可免费下载的工具、更新的参考资料以及其他 额外的内容。
目录
第Ⅰ部分 高级用户指南
第1章 达尔文主义:OS X的进化史
1.1 前达尔文时代:Mac OS Classic
1.2 浪子回头:NeXTSTEP
1.3 走进新时代:OS X操作系统
1.4 迄今为止的所有OS X版本
1.4.1 10.0——Cheetah,初出茅庐
1.4.2 10.1——Puma,更强大
1.4.3 10.2——Jaguar,渐入佳境
1.4.4 10.3——Panther和Safari
1.4.5 10.4——Tiger,转投Intel的怀抱
1.4.6 10.5——Leopard和UNIX
1.4.7 10.6——Snow Leopard
1.4.8 10.7——Lion
1.4.9 10.8——Mountain Lion
1.5 iOS——走向移动平台的OS X
1.5.1 1.x——Heavenly,第一代iPhone
1.5.2 2.x——App Store、3G和企业级的特性
1.5.3 3.x——告别第一代,迎来iPad
1.5.4 4.x——iPhone 4、Apple TV和iPad 2
1.5.5 5.x——iPhone 4S和更新的硬件
1.5.6 iOS和OS X对比
1.6 OS X的未来
1.7 本章小结
参考文献
第2章 合众为一:OS X和iOS的架构
2.1 OS X架构概述
2.2 用户体验层
2.2.1 Aqua
2.2.2 QuickLook
2.2.3 Spotlight
2.3 Darwin——UNIX核心
2.3.1 Shell
2.3.2 文件系统
2.4 UNIX的系统目录
2.4.1 OS X特有的目录
2.4.2 iOS文件系统的区别
2.5 bundle
2.6 应用程序和app
2.6.1 Info.plist
2.6.2 Resources目录
2.6.3 NIB文件
2.6.4 通过.lproj文件实现国际化
2.6.5 图标文件(.icns)
2.6.6 CodeResources
2.7 框架
2.7.1 框架bundle格式
2.7.2 OS X和iOS公共框架列表
2.8 库
2.9 其他应用程序类型
2.9.1 Java(仅限于OS X)
2.9.2 Widget
2.9.3 BSD/Mach原生程序
2.10 系统调用
2.10.1 POSIX
2.10.2 Mach系统调用
2.11 XNU概述
2.11.1 Mach
2.11.2 BSD层
2.11.3 libkern
2.11.4 I/O Kit
2.12 本章小结
参考文献
第3章 站在巨人的肩膀上:OS X和iOS使用的技术
3.1 BSD相关的特性
3.1.1 sysctl
3.1.2 kqueue
3.1.3 审计(OS X)
3.1.4 强制访问控制
3.2 OS X和iOS特有的技术
3.2.1 用户和组的管理(OS X)
3.2.2 系统配置
3.2.3 记录日志
3.2.4 Apple事件和AppleScript
3.2.5 FSEvents
3.2.6 通知
3.2.7 其他重要的API
3.3 OS X和iOS的安全机制
3.3.1 代码签名
3.3.2 隔离机制(沙盒化)
3.3.3 Entitlement:更严格的沙盒
3.3.4 沙盒机制的实施
3.4 本章小结
参考文献
第4章 庖丁解进程:Mach-O格式、进程以及线程内幕
4.1 关键概念回顾
4.1.1 进程和线程
4.1.2 进程生命周期
4.1.3 UNIX信号
4.2 可执行文件
4.3 通用二进制格式
4.3.1 Mach-O二进制格式
4.3.2 加载命令
4.4 动态库
4.4.1 启动时库的加载
4.4.2 库的运行时加载
4.4.3 dyld的特性
4.5 进程地址空间
4.5.1 进程入口点
4.5.2 地址空间布局随机化
4.5.3 32位地址空间(Intel)
4.5.4 64位地址空间
4.5.5 32位地址空间(iOS)
4.6 进程内存分配(用户态)
4.6.1 alloca()
4.6.2 堆分配
4.6.3 虚拟内存——系统管理员的角度
4.7 线程
参考文献
第5章 进程跟踪和调试
5.1 DTrace
5.1.1 D语言
5.1.2 dtruss
5.1.3 DTrace工作原理
5.2 其他剖析机制
5.2.1 CHUD的衰落
5.2.2 继任者AppleProfileFamily
5.3 进程信息
5.3.1 sysctl
5.3.2 proc_info
5.4 进程和系统快照
5.4.1 system_profiler(8)
5.4.2 sysdiagnose(1)
5.4.3 allmemory(1)
5.4.4 stackshot(1)
5.4.5 stack_snapshot系统调用
5.5 kdebug
5.5.1 基于kdebug的工具
5.5.2 kdebug代码
5.5.3 写入kdebug消息
5.5.4 读取kdebug消息
5.6 应用程序崩溃
5.6.1 应用程序挂起和采样
5.6.2 内存破坏的bug
5.7 内存泄漏
5.7.1 heap(1)
5.7.2 leaks(1)
5.7.3 malloc_history(1)
5.8 标准UNIX工具
5.8.1 通过ps(1)列出进程列表
5.8.2 top(1):系统全局视图
5.8.3 通过lsof(1)和fuser(1)
进行文件诊断
5.9 使用GDB
5.9.1 GDB的Darwin扩展
5.9.2 GDB用于iOS
5.9.3 LLDB
5.10 本章小结
参考文献和深入阅读
第6章 引导过程:EFI和iBoot
6.1 传统形式的引导
6.2 揭秘EFI
6.2.1 EFI的基本概念
6.2.2 EFI服务
6.2.3 NVRAM变量
6.3 OS X和boot.efi
6.3.1 boot.efi的执行流程
6.3.2 引导内核
6.3.3 内核对EFI的回调
6.3.4 Lion中boot.efi的变化
6.3.5 Boot Camp
6.3.6 bless(8)
6.4 iOS和iBoot
6.4.1 初期:引导ROM
6.4.2 普通引导
6.4.3 恢复模式引导
6.4.4 设备固件更新(DFU)模式
6.4.5 降级和回放攻击
6.5 安装镜像
6.5.1 OS X安装过程
6.5.2 iOS文件系统镜像(.ipsw文件)
6.6 本章小结
参考文献和深入阅读
第7章 贯穿始终——launchd
7.1 launchd
7.1.1 启动launchd
7.1.2 系统范围和用户范围的
launchd
7.1.3 守护程序和代理程序
7.1.4 多面手launchd
7.2 LaunchDaemon列表
7.3 GUI shell程序
7.3.1 Finder(OS X)
7.3.2 SpringBoard(iOS)
7.4 XPC(Lion和iOS)
7.5 本章小结
参考文献和深入阅读
第Ⅱ部分 内核
第8章 内核架构
8.1 内核基础知识
8.2 用户态和内核态
8.2.1 Intel架构——ring
8.2.2 ARM架构——CPSR
8.3 内核态/用户态转换机制
8.3.1 Intel上的陷阱处理程序
8.3.2 自愿的内核转换
8.4 系统调用的处理
8.4.1 POSIX/BSD系统调用
8.4.2 Mach陷阱
8.4.3 机器相关的调用
8.4.4 诊断调用
8.5 XNU和硬件抽象
8.6 本章小结
参考文献
第9章 由生到死——内核引导和内核崩溃
9.1 XNU源代码
9.1.1 获得源代码
9.1.2 make XNU
9.1.3 一个内核,多种架构支持
9.1.4 XNU源代码树
9.2 引导XNU
9.2.1 引导过程概览
9.2.2 OS X:vstart
9.2.3 iOS:start
9.2.4 [i386|arm]_init
9.2.5 i386_init_slave()
9.2.6 machine_startup
9.2.7 kernel_bootstrap
9.2.8 kernel_bootstrap_thread
9.2.9 bsd_init
9.2.10 bsdinit_task
9.2.11 睡眠和唤醒
9.3 引导参数
9.4 内核调试
9.4.1 “不要害怕”——避免panic
9.4.2 panic的实现
9.4.3 panic报告
9.5 本章小结
参考文献
第10章 Mach原语:一切以消息为媒介
10.1 Mach概述
10.1.1 Mach设计原则
10.1.2 Mach设计目标
10.2 Mach消息
10.2.1 简单消息
10.2.2 复杂消息
10.2.3 发送消息
10.2.4 端口
10.2.5 Mach接口生成器(MIG)
10.3 深入IPC
10.4 同步原语
10.4.1 锁组对象
10.4.2 互斥体对象
10.4.3 读写锁对象
10.4.4 自旋锁对象
10.4.5 信号量对象
10.4.6 锁集对象
10.5 机器原语
10.5.1 主机对象
10.5.2 时钟对象
10.5.3 处理器对象
10.5.4 处理器集对象
10.6 本章小结
参考文献
第11章 刹那之间——Mach调度
11.1 调度原语
11.1.1 线程
11.1.2 任务
11.1.3 任务和线程相关的API
11.1.4 任务相关的API
11.1.5 线程相关的API
11.2 调度
11.2.1 概述
11.2.2 优先级
11.2.3 运行队列
11.3 Mach调度器的独特特性
11.3.1 控制权转交
11.3.2 续体
11.3.3 抢占模式
11.3.4 异步软件陷阱(AST)
11.3.5 调度算法
11.4 定时器中断
11.4.1 中断驱动的调度
11.4.2 XNU中的定时器中断处理
11.5 异常
11.5.1 Mach异常模型
11.5.2 实现细节
11.6 本章小结
参考文献
第12章 Mach虚拟内存
12.1 虚拟内存架构
12.1.1 虚拟内存全貌
12.1.2 虚拟内存概述
12.1.3 用户态视角
12.2 物理内存管理
12.2.1 pmap的API
12.2.2 API在Intel架构上的实现示例
12.3 Mach Zone
12.3.1 Mach Zone的结构
12.3.2 引导期间的zone设置
12.3.3 zone垃圾回收
12.3.4 zone调试
12.4 内核内存分配器
12.4.1 kernel_memory_allocate()
12.4.2 kmem_alloc()系列函数
12.4.3 kalloc
12.4.4 OSMalloc
12.5 Mach分页器
12.5.1 Mach分页器接口
12.5.2 Universal Page List
12.5.3 分页器类型
12.6 分页策略管理
12.6.1 Pageout守护程序
12.6.2 处理页错误
12.6.3 dynamic_pager(8)
(OS X)
12.7 本章小结
参考文献
第13章 BSD层
13.1 BSD简介
13.1.1 一统天下
13.1.2 POSIX标准中的内容
13.1.3 实现BSD
13.1.4 XNU不是完整的BSD
13.2 进程和线程
13.2.1 BSD进程结构
13.2.2 进程列表和进程组
13.2.3 线程
13.2.4 对应到Mach
13.3 进程创建
13.3.1 用户态的角度
13.3.2 内核态的角度
13.3.3 加载和执行二进制文件
13.3.4 Mach-O二进制文件
13.4 进程控制和跟踪
13.4.1 ptrace (#26)
13.4.2 proc_info (#336)
13.4.3 策略
13.4.4 进程挂起和恢复
13.5 信号
13.5.1 UNIX异常处理程序
13.5.2 硬件产生的信号
13.5.3 软件产生的信号
13.5.4 受害者的信号处理
13.6 本章小结
参考文献
第14章 有新有旧:BSD高级功能
14.1 内存管理
14.1.1 POSIX内存和页面管理系统调用
14.1.2 BSD内部的内存函数
14.1.3 内存压力
14.1.4 Jetsam(iOS)
14.1.5 内核地址空间布局随机化
14.2 工作队列
14.3 换个角度看BSD层
14.3.1 sysctl
14.3.2 kqueue
14.3.3 审计(OS X)
14.3.4 强制访问控制(MAC)
14.4 苹果的策略模块
14.5 本章小结
参考文献
第15章 文件系统和虚拟文件系统交换
15.1 磁盘设备和分区
15.2 通用文件系统的概念
15.2.1 文件
15.2.2 扩展属性
15.2.3 权限
15.2.4 时间戳
15.2.5 快捷方式和连接
15.3 苹果生态圈中的文件系统
15.3.1 苹果原生的文件系统
15.3.2 DOS/Windows文件系统
15.3.3 CD/DVD文件系统
15.3.4 基于网络的文件系统
15.3.5 伪文件系统
15.4 挂载文件系统(仅限于OS X)
15.4.1 automount
15.4.2 磁盘仲裁
15.5 磁盘镜像文件
15.5.1 原始DMG文件
15.5.2 从磁盘镜像引导(Lion)
15.6 虚拟文件系统交换
15.6.1 文件系统条目
15.6.2 挂载条目
15.6.3 vnode对象
15.7 FUSE——用户空间的文件系统
15.8 进程的文件I/O操作
15.9 本章小结
参考文献和深入阅读
第16章 基于B树的HFS+文件系统
16.1 HFS+文件系统概念
16.1.1 时间戳
16.1.2 访问控制表
16.1.3 扩展属性
16.1.4 fork
16.1.5 压缩
16.1.6 Unicode支持
16.1.7 Finder集成
16.1.8 大小写敏感(HFSX)
16.1.9 日志
16.1.10 动态大小调节
16.1.11 元数据区域
16.1.12 热文件
16.1.13 动态碎片整理
16.2 HFS+的设计概念
16.3 组件
16.3.1 HFS+宗卷头
16.3.2 编录文件
16.3.3 extent溢出文件
16.3.4 属性B树
16.3.5 热文件B树
16.3.6 分配文件
16.3.7 HFS日志
16.4 VFS和内核的整合
16.4.1 fsctl(2)的整合
16.4.2 sysctl(2)的整合
16.4.3 文件系统状态通知
16.5 本章小结
参考文献
第17章 遵守协议:网络协议栈
17.1 用户态接口回顾
17.1.1 UNIX Domain套接字
17.1.2 IPv4网络协议
17.1.3 路由套接字
17.1.4 网络驱动程序套接字
17.1.5 IPSec Key Management套接字
17.1.6 IPv6网络协议
17.1.7 系统套接字
17.2 套接字和协议统计信息
17.3 第5层:套接字
17.3.1 套接字描述符
17.3.2 mbuf
17.3.3 内核态中的套接字
17.4 第4层:传输层协议
17.4.1 域和protosw
17.4.2 初始化域
17.5 第3层:网络层协议
17.6 第2层:网络接口层
17.6.1 OS X和iOS中的网络接口
17.6.2 数据链路接口层
17.6.3 ifnet结构体
17.6.4 案例研究:utun
17.7 整合所有层:网络协议栈
17.7.1 接收数据
17.7.2 发送数据
17.8 数据包过滤
17.8.1 套接字过滤器
17.8.2 ipfw(8)
17.8.3 PF包过滤器(Lion和iOS)
17.8.4 IP过滤器
17.8.5 接口过滤器
17.8.6 伯克利数据包过滤器
17.9 流量整形和QoS
17.9.1 综合服务模型
17.9.2 区分服务模型
17.9.3 实现dummynet
17.9.4 在用户态控制参数
17.10 本章小结
参考文献和深入阅读
第18章 内核扩展模块
18.1 扩展内核的功能
18.2 内核扩展(kext)
18.2.1 kext结构
18.2.2 kext安全需求
18.2.3 内核扩展的相关操作
18.2.4 kernelcache
18.2.5 multi-kext
18.2.6 从程序员的视角看kext
18.2.7 kext的内核支持
18.3 本章小结
参考文献
第19章 驱动力——I/O Kit驱动程序框架
19.1 I/O Kit简介
19.1.1 设备驱动程序的编程约束
19.1.2 I/O Kit是什么
19.1.3 I/O Kit不是什么
19.2 libkern:I/O Kit的基类
19.2.1 OSObject
19.2.2 OSMetaClass
19.3 I/O Registry
19.3.1 IORegistryEntry
19.3.2 IOService
19.4 用户态的I/O Kit
19.4.1 访问I/O Registry
19.4.2 获得/设置驱动程序属性
19.4.3 即插即用(通知端口)
19.4.4 I/O Kit电源管理
19.4.5 其他I/O Kit子系统
19.4.6 I/O Kit诊断
19.5 I/O Kit内核驱动程序
19.5.1 驱动程序匹配
19.5.2 I/O Kit族
19.5.3 I/O Kit驱动程序模型
19.5.4 IOWorkLoop
19.5.5 中断处理
19.5.6 I/O Kit内存管理
19.6 整合BSD
19.7 本章小结
参考文献和深入阅读
附录A 了解机器架构
显示全部信息
第1章 达尔文主义:OS X的进化史
1.1 前达尔文时代:Mac OS Classic
1.2 浪子回头:NeXTSTEP
1.3 走进新时代:OS X操作系统
1.4 迄今为止的所有OS X版本
1.4.1 10.0——Cheetah,初出茅庐
1.4.2 10.1——Puma,更强大
1.4.3 10.2——Jaguar,渐入佳境
1.4.4 10.3——Panther和Safari
1.4.5 10.4——Tiger,转投Intel的怀抱
1.4.6 10.5——Leopard和UNIX
1.4.7 10.6——Snow Leopard
1.4.8 10.7——Lion
1.4.9 10.8——Mountain Lion
1.5 iOS——走向移动平台的OS X
1.5.1 1.x——Heavenly,第一代iPhone
1.5.2 2.x——App Store、3G和企业级的特性
1.5.3 3.x——告别第一代,迎来iPad
1.5.4 4.x——iPhone 4、Apple TV和iPad 2
1.5.5 5.x——iPhone 4S和更新的硬件
1.5.6 iOS和OS X对比
1.6 OS X的未来
1.7 本章小结
参考文献
第2章 合众为一:OS X和iOS的架构
2.1 OS X架构概述
2.2 用户体验层
2.2.1 Aqua
2.2.2 QuickLook
2.2.3 Spotlight
2.3 Darwin——UNIX核心
2.3.1 Shell
2.3.2 文件系统
2.4 UNIX的系统目录
2.4.1 OS X特有的目录
2.4.2 iOS文件系统的区别
2.5 bundle
2.6 应用程序和app
2.6.1 Info.plist
2.6.2 Resources目录
2.6.3 NIB文件
2.6.4 通过.lproj文件实现国际化
2.6.5 图标文件(.icns)
2.6.6 CodeResources
2.7 框架
2.7.1 框架bundle格式
2.7.2 OS X和iOS公共框架列表
2.8 库
2.9 其他应用程序类型
2.9.1 Java(仅限于OS X)
2.9.2 Widget
2.9.3 BSD/Mach原生程序
2.10 系统调用
2.10.1 POSIX
2.10.2 Mach系统调用
2.11 XNU概述
2.11.1 Mach
2.11.2 BSD层
2.11.3 libkern
2.11.4 I/O Kit
2.12 本章小结
参考文献
第3章 站在巨人的肩膀上:OS X和iOS使用的技术
3.1 BSD相关的特性
3.1.1 sysctl
3.1.2 kqueue
3.1.3 审计(OS X)
3.1.4 强制访问控制
3.2 OS X和iOS特有的技术
3.2.1 用户和组的管理(OS X)
3.2.2 系统配置
3.2.3 记录日志
3.2.4 Apple事件和AppleScript
3.2.5 FSEvents
3.2.6 通知
3.2.7 其他重要的API
3.3 OS X和iOS的安全机制
3.3.1 代码签名
3.3.2 隔离机制(沙盒化)
3.3.3 Entitlement:更严格的沙盒
3.3.4 沙盒机制的实施
3.4 本章小结
参考文献
第4章 庖丁解进程:Mach-O格式、进程以及线程内幕
4.1 关键概念回顾
4.1.1 进程和线程
4.1.2 进程生命周期
4.1.3 UNIX信号
4.2 可执行文件
4.3 通用二进制格式
4.3.1 Mach-O二进制格式
4.3.2 加载命令
4.4 动态库
4.4.1 启动时库的加载
4.4.2 库的运行时加载
4.4.3 dyld的特性
4.5 进程地址空间
4.5.1 进程入口点
4.5.2 地址空间布局随机化
4.5.3 32位地址空间(Intel)
4.5.4 64位地址空间
4.5.5 32位地址空间(iOS)
4.6 进程内存分配(用户态)
4.6.1 alloca()
4.6.2 堆分配
4.6.3 虚拟内存——系统管理员的角度
4.7 线程
参考文献
第5章 进程跟踪和调试
5.1 DTrace
5.1.1 D语言
5.1.2 dtruss
5.1.3 DTrace工作原理
5.2 其他剖析机制
5.2.1 CHUD的衰落
5.2.2 继任者AppleProfileFamily
5.3 进程信息
5.3.1 sysctl
5.3.2 proc_info
5.4 进程和系统快照
5.4.1 system_profiler(8)
5.4.2 sysdiagnose(1)
5.4.3 allmemory(1)
5.4.4 stackshot(1)
5.4.5 stack_snapshot系统调用
5.5 kdebug
5.5.1 基于kdebug的工具
5.5.2 kdebug代码
5.5.3 写入kdebug消息
5.5.4 读取kdebug消息
5.6 应用程序崩溃
5.6.1 应用程序挂起和采样
5.6.2 内存破坏的bug
5.7 内存泄漏
5.7.1 heap(1)
5.7.2 leaks(1)
5.7.3 malloc_history(1)
5.8 标准UNIX工具
5.8.1 通过ps(1)列出进程列表
5.8.2 top(1):系统全局视图
5.8.3 通过lsof(1)和fuser(1)
进行文件诊断
5.9 使用GDB
5.9.1 GDB的Darwin扩展
5.9.2 GDB用于iOS
5.9.3 LLDB
5.10 本章小结
参考文献和深入阅读
第6章 引导过程:EFI和iBoot
6.1 传统形式的引导
6.2 揭秘EFI
6.2.1 EFI的基本概念
6.2.2 EFI服务
6.2.3 NVRAM变量
6.3 OS X和boot.efi
6.3.1 boot.efi的执行流程
6.3.2 引导内核
6.3.3 内核对EFI的回调
6.3.4 Lion中boot.efi的变化
6.3.5 Boot Camp
6.3.6 bless(8)
6.4 iOS和iBoot
6.4.1 初期:引导ROM
6.4.2 普通引导
6.4.3 恢复模式引导
6.4.4 设备固件更新(DFU)模式
6.4.5 降级和回放攻击
6.5 安装镜像
6.5.1 OS X安装过程
6.5.2 iOS文件系统镜像(.ipsw文件)
6.6 本章小结
参考文献和深入阅读
第7章 贯穿始终——launchd
7.1 launchd
7.1.1 启动launchd
7.1.2 系统范围和用户范围的
launchd
7.1.3 守护程序和代理程序
7.1.4 多面手launchd
7.2 LaunchDaemon列表
7.3 GUI shell程序
7.3.1 Finder(OS X)
7.3.2 SpringBoard(iOS)
7.4 XPC(Lion和iOS)
7.5 本章小结
参考文献和深入阅读
第Ⅱ部分 内核
第8章 内核架构
8.1 内核基础知识
8.2 用户态和内核态
8.2.1 Intel架构——ring
8.2.2 ARM架构——CPSR
8.3 内核态/用户态转换机制
8.3.1 Intel上的陷阱处理程序
8.3.2 自愿的内核转换
8.4 系统调用的处理
8.4.1 POSIX/BSD系统调用
8.4.2 Mach陷阱
8.4.3 机器相关的调用
8.4.4 诊断调用
8.5 XNU和硬件抽象
8.6 本章小结
参考文献
第9章 由生到死——内核引导和内核崩溃
9.1 XNU源代码
9.1.1 获得源代码
9.1.2 make XNU
9.1.3 一个内核,多种架构支持
9.1.4 XNU源代码树
9.2 引导XNU
9.2.1 引导过程概览
9.2.2 OS X:vstart
9.2.3 iOS:start
9.2.4 [i386|arm]_init
9.2.5 i386_init_slave()
9.2.6 machine_startup
9.2.7 kernel_bootstrap
9.2.8 kernel_bootstrap_thread
9.2.9 bsd_init
9.2.10 bsdinit_task
9.2.11 睡眠和唤醒
9.3 引导参数
9.4 内核调试
9.4.1 “不要害怕”——避免panic
9.4.2 panic的实现
9.4.3 panic报告
9.5 本章小结
参考文献
第10章 Mach原语:一切以消息为媒介
10.1 Mach概述
10.1.1 Mach设计原则
10.1.2 Mach设计目标
10.2 Mach消息
10.2.1 简单消息
10.2.2 复杂消息
10.2.3 发送消息
10.2.4 端口
10.2.5 Mach接口生成器(MIG)
10.3 深入IPC
10.4 同步原语
10.4.1 锁组对象
10.4.2 互斥体对象
10.4.3 读写锁对象
10.4.4 自旋锁对象
10.4.5 信号量对象
10.4.6 锁集对象
10.5 机器原语
10.5.1 主机对象
10.5.2 时钟对象
10.5.3 处理器对象
10.5.4 处理器集对象
10.6 本章小结
参考文献
第11章 刹那之间——Mach调度
11.1 调度原语
11.1.1 线程
11.1.2 任务
11.1.3 任务和线程相关的API
11.1.4 任务相关的API
11.1.5 线程相关的API
11.2 调度
11.2.1 概述
11.2.2 优先级
11.2.3 运行队列
11.3 Mach调度器的独特特性
11.3.1 控制权转交
11.3.2 续体
11.3.3 抢占模式
11.3.4 异步软件陷阱(AST)
11.3.5 调度算法
11.4 定时器中断
11.4.1 中断驱动的调度
11.4.2 XNU中的定时器中断处理
11.5 异常
11.5.1 Mach异常模型
11.5.2 实现细节
11.6 本章小结
参考文献
第12章 Mach虚拟内存
12.1 虚拟内存架构
12.1.1 虚拟内存全貌
12.1.2 虚拟内存概述
12.1.3 用户态视角
12.2 物理内存管理
12.2.1 pmap的API
12.2.2 API在Intel架构上的实现示例
12.3 Mach Zone
12.3.1 Mach Zone的结构
12.3.2 引导期间的zone设置
12.3.3 zone垃圾回收
12.3.4 zone调试
12.4 内核内存分配器
12.4.1 kernel_memory_allocate()
12.4.2 kmem_alloc()系列函数
12.4.3 kalloc
12.4.4 OSMalloc
12.5 Mach分页器
12.5.1 Mach分页器接口
12.5.2 Universal Page List
12.5.3 分页器类型
12.6 分页策略管理
12.6.1 Pageout守护程序
12.6.2 处理页错误
12.6.3 dynamic_pager(8)
(OS X)
12.7 本章小结
参考文献
第13章 BSD层
13.1 BSD简介
13.1.1 一统天下
13.1.2 POSIX标准中的内容
13.1.3 实现BSD
13.1.4 XNU不是完整的BSD
13.2 进程和线程
13.2.1 BSD进程结构
13.2.2 进程列表和进程组
13.2.3 线程
13.2.4 对应到Mach
13.3 进程创建
13.3.1 用户态的角度
13.3.2 内核态的角度
13.3.3 加载和执行二进制文件
13.3.4 Mach-O二进制文件
13.4 进程控制和跟踪
13.4.1 ptrace (#26)
13.4.2 proc_info (#336)
13.4.3 策略
13.4.4 进程挂起和恢复
13.5 信号
13.5.1 UNIX异常处理程序
13.5.2 硬件产生的信号
13.5.3 软件产生的信号
13.5.4 受害者的信号处理
13.6 本章小结
参考文献
第14章 有新有旧:BSD高级功能
14.1 内存管理
14.1.1 POSIX内存和页面管理系统调用
14.1.2 BSD内部的内存函数
14.1.3 内存压力
14.1.4 Jetsam(iOS)
14.1.5 内核地址空间布局随机化
14.2 工作队列
14.3 换个角度看BSD层
14.3.1 sysctl
14.3.2 kqueue
14.3.3 审计(OS X)
14.3.4 强制访问控制(MAC)
14.4 苹果的策略模块
14.5 本章小结
参考文献
第15章 文件系统和虚拟文件系统交换
15.1 磁盘设备和分区
15.2 通用文件系统的概念
15.2.1 文件
15.2.2 扩展属性
15.2.3 权限
15.2.4 时间戳
15.2.5 快捷方式和连接
15.3 苹果生态圈中的文件系统
15.3.1 苹果原生的文件系统
15.3.2 DOS/Windows文件系统
15.3.3 CD/DVD文件系统
15.3.4 基于网络的文件系统
15.3.5 伪文件系统
15.4 挂载文件系统(仅限于OS X)
15.4.1 automount
15.4.2 磁盘仲裁
15.5 磁盘镜像文件
15.5.1 原始DMG文件
15.5.2 从磁盘镜像引导(Lion)
15.6 虚拟文件系统交换
15.6.1 文件系统条目
15.6.2 挂载条目
15.6.3 vnode对象
15.7 FUSE——用户空间的文件系统
15.8 进程的文件I/O操作
15.9 本章小结
参考文献和深入阅读
第16章 基于B树的HFS+文件系统
16.1 HFS+文件系统概念
16.1.1 时间戳
16.1.2 访问控制表
16.1.3 扩展属性
16.1.4 fork
16.1.5 压缩
16.1.6 Unicode支持
16.1.7 Finder集成
16.1.8 大小写敏感(HFSX)
16.1.9 日志
16.1.10 动态大小调节
16.1.11 元数据区域
16.1.12 热文件
16.1.13 动态碎片整理
16.2 HFS+的设计概念
16.3 组件
16.3.1 HFS+宗卷头
16.3.2 编录文件
16.3.3 extent溢出文件
16.3.4 属性B树
16.3.5 热文件B树
16.3.6 分配文件
16.3.7 HFS日志
16.4 VFS和内核的整合
16.4.1 fsctl(2)的整合
16.4.2 sysctl(2)的整合
16.4.3 文件系统状态通知
16.5 本章小结
参考文献
第17章 遵守协议:网络协议栈
17.1 用户态接口回顾
17.1.1 UNIX Domain套接字
17.1.2 IPv4网络协议
17.1.3 路由套接字
17.1.4 网络驱动程序套接字
17.1.5 IPSec Key Management套接字
17.1.6 IPv6网络协议
17.1.7 系统套接字
17.2 套接字和协议统计信息
17.3 第5层:套接字
17.3.1 套接字描述符
17.3.2 mbuf
17.3.3 内核态中的套接字
17.4 第4层:传输层协议
17.4.1 域和protosw
17.4.2 初始化域
17.5 第3层:网络层协议
17.6 第2层:网络接口层
17.6.1 OS X和iOS中的网络接口
17.6.2 数据链路接口层
17.6.3 ifnet结构体
17.6.4 案例研究:utun
17.7 整合所有层:网络协议栈
17.7.1 接收数据
17.7.2 发送数据
17.8 数据包过滤
17.8.1 套接字过滤器
17.8.2 ipfw(8)
17.8.3 PF包过滤器(Lion和iOS)
17.8.4 IP过滤器
17.8.5 接口过滤器
17.8.6 伯克利数据包过滤器
17.9 流量整形和QoS
17.9.1 综合服务模型
17.9.2 区分服务模型
17.9.3 实现dummynet
17.9.4 在用户态控制参数
17.10 本章小结
参考文献和深入阅读
第18章 内核扩展模块
18.1 扩展内核的功能
18.2 内核扩展(kext)
18.2.1 kext结构
18.2.2 kext安全需求
18.2.3 内核扩展的相关操作
18.2.4 kernelcache
18.2.5 multi-kext
18.2.6 从程序员的视角看kext
18.2.7 kext的内核支持
18.3 本章小结
参考文献
第19章 驱动力——I/O Kit驱动程序框架
19.1 I/O Kit简介
19.1.1 设备驱动程序的编程约束
19.1.2 I/O Kit是什么
19.1.3 I/O Kit不是什么
19.2 libkern:I/O Kit的基类
19.2.1 OSObject
19.2.2 OSMetaClass
19.3 I/O Registry
19.3.1 IORegistryEntry
19.3.2 IOService
19.4 用户态的I/O Kit
19.4.1 访问I/O Registry
19.4.2 获得/设置驱动程序属性
19.4.3 即插即用(通知端口)
19.4.4 I/O Kit电源管理
19.4.5 其他I/O Kit子系统
19.4.6 I/O Kit诊断
19.5 I/O Kit内核驱动程序
19.5.1 驱动程序匹配
19.5.2 I/O Kit族
19.5.3 I/O Kit驱动程序模型
19.5.4 IOWorkLoop
19.5.5 中断处理
19.5.6 I/O Kit内存管理
19.6 整合BSD
19.7 本章小结
参考文献和深入阅读
附录A 了解机器架构
显示全部信息
Mac OS X and iOS internals: to the apple’s core
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×