深入解析 Mac OS X & iOS 操作系統 (Mac OS X and iOS Internals: To the Apple's Core) 深入解析Mac OS X & iOS操作系统

萊文 (Jonathan Levin)

無法訂購

買這商品的人也買了...

相關主題

商品描述

<內容簡介>

系統開發者、內核黑客和對蘋果感到好奇的人們註意了!本書探討了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的進化史  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