內容簡介
《深入解析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章 達爾文主義: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.3Spotlight
2.3Darwin——UNIX核心
2.3.1Shell
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 進程和線程