《Mac OS X技术内幕》PDF下载

  • 购买积分:32 如何计算积分?
  • 作  者:(美)阿米特·辛格(Amit Singh)著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2019
  • ISBN:9787302509097
  • 页数:1302 页
图书介绍:本书深入剖析了Mac OS X操作系统的技术内核,全书共12章,内容包括Mac OS X起源、Mac OS X概述、Apple内核、固件与自举加载器、内核与用户级启动、Mac OS X内核体系结构、进程、内存、进程间通信、内核扩展、文件系统、HFS Plus文件系统等。

第1章 Mac OS X起源 1

1.1 Apple对操作系统的探求 1

1.1.1 Star Trek 2

1.1.2 Raptor 2

1.1.3 NuKernel 3

1.1.4 TalOS 3

1.1.5 Copland 3

1.1.6 Gershwin 5

1.1.7 BeOS 5

1.1.8 A计划 6

1.2 NeXT篇章 7

1.2.1 NEXTSTEP 7

1.2.2 OpenStep 10

1.3 Mach因素 11

1.3.1罗切斯特智能网关 11

1.3.2 Accent 12

1.3.3 Mach 13

1.3.4 MkLinux 16

1.3.5音乐名称 17

1.4战略 17

1.4.1 Mac OS 8和Mac OS 9 18

1.4.2 Rhapsody 20

1.5朝着Mac OS X前进 22

1.5.1 Mac OS X Server 1.x 23

1.5.2 Mac OS X Developer Previews 23

1.5.3 Mac OS X Public Beta版本 24

1.5.4 Mac OS X 10.x 25

第2章 Mac OS X概述 30

2.1固件 31

2.2引导加载程序 32

2.3 Darwin 32

2.3.1 Darwin程序包 32

2.3.2 Darwin的优点 33

2.3.3 Darwin和Mac OS X 33

2.4 xnu内核 33

2.4.1 Mach 34

2.4.2 BSD 35

2.4.3 I/O Kit 36

2.4.4 libkern库 37

2.4.5 libsa库 38

2.4.6 Platform Export 38

2.4.7内核扩展 39

2.5文件系统的用户空间视图 39

2.5.1文件系统域 40

2.5.2 /System/Library/目录 40

2.6运行时体系结构 42

2.6.1 Mach-O文件 43

2.6.2胖二进制文件 45

2.6.3链接 48

2.7 C库 52

2.8捆绑组件和框架 54

2.8.1捆绑组件 54

2.8.2属性列表文件 58

2.8.3框架 59

2.8.4预绑定 62

2.9 Core Services 64

2.10应用程序服务 65

2.10.1图形和多媒体服务 65

2.10.2其他应用程序服务 72

2.11应用程序环境 73

2.11.1 BSD 73

2.11.2 X Window System 74

2.11.3 Carbon 74

2.11.4 Cocoa 76

2.11.5 WebObjects 81

2.11.6 Java 81

2.11.7 QuickTime 82

2.11.8 Classic 82

2.11.9 Rosetta 83

2.12用户界面 84

2.12.1可视化效果 84

2.12.2与分辨率无关的用户界面 85

2.12.3效率特性 85

2.12.4通用访问支持 86

2.13编程 87

2.13.1 Xcode 87

2.13.2编译器和库 89

2.13.3解释器 89

2.13.4工具 92

2.14安全 94

2.14.1内核空间的安全 95

2.14.2用户空间的安全 96

2.14.3系统管理 100

2.14.4审计系统 103

2.15 Mac OS X Server 105

2.15.1 Xgrid 105

2.15.2 Xsan 108

2.16网络 111

第3章 Apple内幕 112

3.1 Power Mac G5 113

3.1.1 U3H系统控制器 113

3.1.2 K2 I/O设备控制器 114

3.1.3 PCI-X和PCI Express 115

3.1.4 HyperTransport 117

3.1.5 Elastic I/O互连 118

3.2 G5:血统和路线图 120

3.2.1 G5的基本方面 121

3.2.2新一代POWER 122

3.2.3 PowerPC 970、970FX和970MP 123

3.2.4 Intel Core Duo 125

3.3 PowerPC 970FX 125

3.3.1基本知识 125

3.3.2缓存 126

3.3.3内存管理单元(MMU) 130

3.3.4各式各样的内部缓冲区和队列 133

3.3.5预取 134

3.3.6寄存器 135

3.3.7重命名寄存器 141

3.3.8指令集 142

3.3.9 970FX核心 146

3.3.10 AltiVec 153

3.3.11电源管理 158

3.3.12 64位体系结构 160

3.3.13软补丁功能 161

3.4软件约定 161

3.4.1字节序 162

3.4.2寄存器使用 163

3.4.3栈使用 166

3.4.4函数形参和返回值 172

3.5示例 173

3.5.1递归阶乘函数 174

3.5.2原子式比较和存储函数 177

3.5.3函数重定向 179

3.5.4 970FX的周期精确的模拟 188

第4章 固件和引导加载程序 193

4.1简介 193

4.1.1固件的种类 194

4.1.2优先存储 194

4.2全新的世界 195

4.2.1“新”是好消息 196

4.2.2现代的Boot ROM(PowerPC) 197

4.3上电复位 199

4.4 Open Firmware 199

4.4.1与Open Firmware交互 200

4.4.2 Open Firmware仿真器 204

4.5 Forth 204

4.5.1基本单元 204

4.5.2栈 204

4.5.3字 205

4.5.4字典 206

4.5.5调试 212

4.6设备树 213

4.6.1属性 216

4.6.2方法 220

4.6.3数据 220

4.7 Open Firmware接口 221

4.7.1用户接口 222

4.7.2客户接口 222

4.7.3设备接口 222

4.8编程示例 222

4.8.1转储NVRAM内容 223

4.8.2确定屏幕尺寸 224

4.8.3处理颜色 224

4.8.4绘制颜色填充的矩形 225

4.8.5创建“汉诺塔”问题的动画式解决方案 226

4.8.6创造和使用鼠标指针 236

4.8.7窃取字体 239

4.8.8实现时钟 241

4.8.9绘制图像 242

4.8.10创建窗口 243

4.9固件引导序列 244

4.9.1脚本 246

4.9.2锁键 246

4.10 BootX 247

4.10.1文件格式 247

4.10.2结构 249

4.10.3操作 249

4.11备用的引导方案 257

4.11.1引导备用内核 257

4.11.2从软件RAID设备引导 259

4.11.3通过网络引导 262

4.12固件安全 264

4.12.1管理固件安全 264

4.12.2找回Open Firmware密码 266

4.13启动内核 266

4.14 BootCache优化 267

4.15 引导时的内核参数 268

4.16 EFI 273

4.16.1遗留的伤痛 273

4.16.2新的开始 275

4.16.3 EFI 276

4.16.4 EFI的抽样 278

4.16.5 EFI的好处 285

第5章 内核和用户级启动 287

5.1安排内核执行 287

5.1.1异常和异常矢量 288

5.1.2内核符号 290

5.1.3运行内核 291

5.2低级处理器初始化 292

5.2.1每个处理器的数据 292

5.2.2复位类型 296

5.2.3处理器类型 298

5.2.4内存补丁 301

5.2.5特定于处理器的初始化 303

5.2.6其他早期的初始化 304

5.3高级处理器初始化 307

5.3.1在虚拟内存之前 308

5.3.2低级虚拟内存初始化 311

5.3.3在虚拟内存之后 316

5.4 Mach子系统初始化 320

5.4.1调度器初始化 322

5.4.2高级虚拟内存子系统初始化 322

5.4.3 IPC初始化 327

5.4.4完成VM和IPC初始化 327

5.4.5初始化其他的子系统 328

5.4.6任务和线程 328

5.4.7启动内核自举线程 329

5.5第一个线程 329

5.6 I/O Kit初始化 331

5.7 BSD初始化 338

5.7.1其他的BSD初始化(第1部分) 339

5.7.2文件系统初始化 341

5.7.3其他的BSD初始化(第2部分) 342

5.7.4网络子系统初始化 343

5.7.5其他的BSD初始化(第3部分) 346

5.7.6挂接根文件系统 348

5.7.7创建进程1 355

5.7.8共享内存区域 357

5.8启动第一个用户空间的程序 359

5.9从处理器 360

5.10用户级启动 362

5.10.1 launchd 362

5.10.2多用户启动 374

5.10.3单用户启动 382

5.10.4安装启动 382

第6章 xnu内核 386

6.1 xnu源 386

6.2 Mach 391

6.2.1内核基础 392

6.2.2异常处理 396

6.3 Mach API的性质 397

6.3.1显示主机信息 397

6.3.2访问内核的时钟服务 399

6.3.3使用时钟服务发出警报 402

6.3.4显示主机统计信息 404

6.4进入内核 407

6.4.1控制转移的类型 408

6.4.2实现系统进入机制 410

6.5异常处理 418

6.5.1硬件中断 423

6.5.2各种陷阱 424

6.5.3系统调用 426

6.6系统调用处理 426

6.7系统调用类别 429

6.7.1 BSD系统调用 429

6.7.2 Mach陷阱 446

6.7.3 I/O Kit陷阱 453

6.7.4仅支持PowerPC的系统调用 453

6.7.5超快陷阱 454

6.7.6公共页 460

6.8对调试、诊断和跟踪的内核支持 467

6.8.1 GDB(基于网络或者基于FireWire的调试) 467

6.8.2 KDB(基于串行线路的调试) 468

6.8.3 CHUD支持 470

6.8.4内核分析(kgmon和gprof) 476

6.8.5每个进程的内核跟踪(ktrace(2)和kdump) 480

6.8.6审计支持 482

6.8.7细粒度的内核事件跟踪(kdebug) 486

6.8.8低级诊断和调试接口 499

6.8.9低级内核跟踪 508

6.9虚拟机监视器 516

6.9.1特性 517

6.9.2使用VMM设施 518

6.9.3示例:在虚拟机中运行代码 519

6.10编译内核 533

6.10.1获取必要的程序包 533

6.10.2编译必要的程序包 534

6.10.3编译xnu程序包 536

6.10.4 DarwinBuild 536

第7章 进程 538

7.1进程:从早期的UNIX到Mac OS X 538

7.1.1 Mac OS X进程限制 539

7.1.2 Mac OS X执行风格 540

7.2 Mach抽象、数据结构和API 541

7.2.1关系总结 542

7.2.2处理器集 542

7.2.3处理器 544

7.2.4任务和任务API 553

7.2.5线程 555

7.2.6线程相关的抽象 561

7.3新系统的许多线程 571

7.3.1 Mach任务和线程 572

7.3.2 BSD进程 592

7.3.3 POSIX线程(Pthreads) 602

7.3.4 Java线程 604

7.3.5 Cocoa中的NSTask类 605

7.3.6 Cocoa中的NSThread类 606

7.3.7 Carbon Process Manager 609

7.3.8 Carbon Multiprocessing Services 611

7.3.9 Carbon Thread Manager 613

7.4调度 616

7.4.1调度基础设施初始化 616

7.4.2调度器操作 628

7.4.3调度策略 639

7.5 execve()系统调用 647

7.5.1 Mach-O二进制文件 650

7.5.2胖(通用)二进制文件 658

7.5.3解释器脚本 658

7.6启动应用程序 660

7.6.1把实体映射到处理程序 660

7.6.2统一类型标识符 662

第8章 内存 665

8.1回顾 665

8.1.1虚拟内存和UNIX 665

8.1.2虚拟内存和个人计算 666

8.1.3 Mac OS X虚拟内存子系统的根源 666

8.2 Mac OS X内存管理概览 667

8.2.1从用户空间中读取内核内存 669

8.2.2查询物理内存大小 673

8.3 Mach VM 674

8.3.1概述 674

8.3.2任务地址空间 676

8.3.3 VM映射 677

8.3.4 VM映射条目 677

8.3.5 VM对象 677

8.3.6分页器 679

8.3.7写时复制 685

8.3.8物理映射(pmap) 687

8.4驻留内存 690

8.4.1 vm_page结构 690

8.4.2搜索驻留页 691

8.4.3驻留页队列 692

8.4.4页置换 692

8.4.5物理内存簿记 693

8.4.6页错误 696

8.5自举期间的虚拟内存初始化 697

8.6 Mach VM用户空间的接口 698

8.6.1 mach_vm_map() 700

8.6.2 mach_vm_remap() 703

8.6.3 mach_vm_allocate() 703

8.6.4 mach_vm_deallocate() 703

8.6.5 mach_vm_protect() 704

8.6.6 mach_vm_inherit() 704

8.6.7 mach_vm_read() 704

8.6.8 mach_vm_write() 705

8.6.9 mach_vm_copy() 706

8.6.10 mach_vm_wire() 706

8.6.11 mach_vm_behavior_set() 706

8.6.12 mach_vm_msync() 708

8.6.13统计 709

8.7使用Mach VM接口 710

8.7.1控制内存继承 710

8.7.2调试Mach VM子系统 713

8.7.3保护内存 714

8.7.4访问另一个任务的内存 715

8.7.5命名和共享内存 718

8.8内核和用户地址空间布局 724

8.9通用页列表(UUL) 726

8.10统一缓冲区缓存(UBC) 727

8.10.1 UBC接口 729

8.10.2 NFS缓冲区缓存 730

8.11动态分页器程序 732

8.12更新守护进程 734

8.13系统共享内存 735

8.13.1共享内存的应用 735

8.13.2 Shared Memory Server子系统的实现 738

8.13.3动态链接器的共享目标文件加载 742

8.13.4通过系统应用程序使用shared_region_map_file_np() 745

8.13.5关于预绑定的注释 751

8.14任务工作集检测和维护 752

8.14.1 TWS机制 752

8.14.2 TWS实现 753

8.15 用户空间中的内存分配 757

8.15.1历史性突破 757

8.15.2内存分配器内幕 759

8.15.3 malloc()例程 771

8.15.4最大的单个分配(32位) 773

8.15.5最大的单个分配(64位) 774

8.15.6枚举所有指针 775

8.15.7显示可伸缩区域的统计信息 778

8.15.8记录malloc操作 780

8.15.9实现malloc层 783

8.16内核中的内存分配 784

8.16.1页级分配 784

8.16.2 kmem_alloc 787

8.16.3 Mach区域分配器 788

8.16.4 kalloc函数家族 794

8.16.5 OSMalloc函数家族 795

8.16.6 I/O Kit中的内存分配 796

8.16.7内核的BSD部分的内存分配 799

8.16.8 libkem的C++环境中的内存分配 801

8.17内存映射的文件 802

8.18 64位计算 809

8.18.1引入64位计算的原因 810

8.18.2 Mac OS X 10.4:64位用户地址空间 813

8.18.3为什么不使用64位的可执行文件 817

8.18.4 64位“场景” 817

第9章 进程间通信 818

9.1简介 818

9.1.1 IPC的演化 819

9.1.2 Mac OS X中的IPC 820

9.2 Mach IPC:概述 821

9.2.1 Mach端口 822

9.2.2 Mach IPC消息 825

9.3 Mach IPC:Mac OS X实现 832

9.3.1 IPC空间 833

9.3.2 Mach端口的构成 835

9.3.3任务和IPC 838

9.3.4线程和IPC 840

9.3.5端口分配 841

9.3.6消息传递实现 846

9.3.7 IPC子系统初始化 848

9.4名称服务器和自举服务器 850

9.4.1网络消息服务器 850

9.4.2自举服务器 851

9.4.3自举服务器API 854

9.5使用Mach IPC 864

9.5.1简单的客户-服务器示例 865

9.5.2死名 869

9.5.3端口集 870

9.5.4介入 872

9.5.5传输页外内存和端口权限 874

9.6 MIG 878

9.6.1 MIG规范文件 879

9.6.2使用MIG创建客户-服务器系统 882

9.6.3内核中的MIG 890

9.7 Mach异常 893

9.7.1 Mach的异常处理设施的程序员可见的方面 895

9.7.2 Mach异常处理链 898

9.7.3示例:Mach异常处理程序 902

9.8信号 908

9.8.1可靠性 909

9.8.2信号的数量 910

9.8.3应用程序定义的信号 910

9.8.4异步I/O的基于信号的通知 910

9.8.5信号和多线程 913

9.8.6信号动作 913

9.8.7信号生成和递送 915

9.8.8 Mach异常与UNIX信号共存 917

9.8.9异常、信号和调试 919

9.8.10 ptrace()系统调用 920

9.9管道 920

9.10命名管道(fifo) 921

9.11文件描述符传递 922

9.12 XSI IPC 929

9.13 POSIX IPC 929

9.13.1 POSIX信号量 930

9.13.2 POSIX共享内存 934

9.14 Distributed Objects 938

9.15 Apple Events 945

9.15.1在AppleScript中使用Apple Events平铺应用程序窗口 947

9.15.2在C程序中构建和发送Apple Event 949

9.15.3通过发送AppleEvent导致系统睡眠 951

9.16通知 953

9.16.1 Foundation通知 953

9.16.2 notify(3)API 956

9.16.3内核事件通知机制(kqueue(2)) 963

9.16.4 Core Foundation通知 967

9.16.5 fsevents 967

9.16.6 kauth 967

9.17 Core Foundation IPC 967

9.17.1通知 968

9.17.2运行循环 971

9.18同步 980

9.18.1用于原子操作的接口 981

9.18.2低级锁定 982

9.18.3 BSD条件变量 985

9.18.4 Mach锁集 986

9.18.5 Mach信号量 986

9.18.6 Pthreads同步接口 990

9.18.7 I/O Kit中的锁定 990

9.18.8漏斗 991

9.18.9 SPL 996

9.18.10劝告模式的文件锁定 996

第10章 扩展内核 999

10.1沿着内存通道的驱动程序 999

10.1.1驱动程序编程被认为是困难的 999

10.1.2良好的继承 999

10.1.3一切都是文件 1000

10.1.4扩展内核不仅仅是驱动设备 1000

10.2 I/O Kit 1000

10.2.1嵌入式C++ 1002

10.2.2 I/O Kit类层次结构 1003

10.2.3 I/O Kit家族 1004

10.2.4 I/O Kit驱动程序 1005

10.2.5结点 1006

10.2.6一般I/O Kit类 1006

10.2.7工作循环 1008

10.2.8 I/O Registry 1013

10.2.9 I/O Catalog 1014

10.2.10 I/O Kit初始化 1014

10.2.11 I/O Kit中的驱动程序匹配 1016

10.3 DART 1017

10.4动态扩展内核 1018

10.4.1内核扩展的结构 1018

10.4.2内核扩展的创建 1019

10.4.3内核扩展的管理 1024

10.4.4内核扩展的自动加载 1025

10.5与内核通信 1026

10.6创建内核扩展 1027

10.6.1通用内核扩展 1027

10.6.2使用通用kext实现sysctl变量 1031

10.6.3 I/O Kit设备驱动程序kext 1035

10.7 I/O Kit功能的编程之旅 1042

10.7.1旋转帧缓冲区 1042

10.7.2访问帧缓冲区内存 1046

10.7.3获取固件变量的列表 1048

10.7.4获取关于加载的内核扩展的信息 1049

10.7.5从SMS获取加速计数据 1051

10.7.6列出PCI设备 1055

10.7.7获取计算机的序号和型号信息 1056

10.7.8获取温度传感器读数 1057

10.7.9获取以太网接口的MAC地址 1060

10.7.10实现一种加密式磁盘过滤方案 1062

10.8调试 1073

10.8.1内核恐慌 1073

10.8.2远程核心转储 1074

10.8.3日志记录 1075

10.8.4使用GDB进行调试 1078

10.8.5使用KDB进行调试 1080

10.8.6各种各样的调试工具 1085

10.8.7 stabs 1086

第11章 文件系统 1092

11.1磁盘和分区 1092

11.1.1 Apple分区方案 1095

11.1.2 PC风格的分区 1097

11.1.3基于GUID的分区 1098

11.2 DiskArbitration 1098

11.2.1获取磁盘的描述 1100

11.2.2参与磁盘挂接决策 1102

11.2.3从I/O Kit接收媒体通知 1103

11.3磁盘设备的实现 1106

11.4磁盘映像 1110

11.4.1使用hdiutil程序 1110

11.4.2 RAM磁盘 1113

11.4.3 BSD虚拟结点磁盘驱动程序 1113

11.4.4从头开始创建虚拟磁盘 1114

11.5文件和文件描述符 1116

11.6 VFS层 1118

11.7文件系统类型 1127

11.7.1 HFS+和HFS 1128

11.7.2 ISO 9660 1129

11.7.3 MS-DOS 1130

11.7.4 NTFS 1131

11.7.5 UDF 1131

11.7.6 UFS 1131

11.7.7 AFP 1133

11.7.8 FTP 1134

11.7.9 NFS 1135

11.7.10 SMB/CIFS 1135

11.7.11 WebDAV 1136

11.7.12 cddafs 1136

11.7.13 deadfs 1138

11.7.14 devfs 1139

11.7.15 fdesc 1139

11.7.16 specfs和fifofs 1140

11.7.17 synthfs 1141

11.7.18联合 1142

11.7.19 volfs 1144

11.8 Spotlight 1145

11.8.1 Spotlight的体系结构 1146

11.8.2 fsevents机制 1151

11.8.3导入元数据 1163

11.8.4查询Spotlight 1165

11.8.5 Spotlight命令行工具 1173

11.8.6克服粒度限制 1173

11.9访问控制列表 1175

11.10 kauth授权子系统 1178

11.10.1 kauth概念 1179

11.10.2实现 1182

11.10.3虚拟结点级文件系统活动监视器 1184

第12章 HFS+文件系统 1201

12.1分析工具 1202

12.1.1 HFSDebug 1202

12.1.2用于获取文件系统基本属性的接口 1204

12.1.3 Mac OS X命令行工具 1204

12.1.4 HFS+源和技术说明TN 1150 1204

12.2基本概念 1205

12.2.1卷 1205

12.2.2分配块 1206

12.2.3区段 1206

12.2.4文件分支 1207

12.2.5簇 1208

12.2.6 B树 1208

12.3 HFS+卷的结构 1215

12.4保留区域 1216

12.5卷头 1217

12.5.1查看卷头 1217

12.5.2查看卷控制块 1222

12.6 HFS包装器 1223

12.7特殊文件 1226

12.7.1分配文件 1226

12.7.2编目文件 1230

12.7.3区段溢出文件 1237

12.7.4基本属性文件 1242

12.7.5启动文件 1247

12.8检查HFS+特性 1247

12.8.1大小写敏感性 1247

12.8.2文件名编码 1249

12.8.3权限 1250

12.8.4日志记录 1254

12.8.5配额 1260

12.8.6硬链接 1261

12.8.7解除链接打开的文件 1265

12.8.8符号链接 1266

12.8.9别名 1267

12.8.10资源分支 1268

12.9优化 1270

12.9.1即时的碎片整理 1270

12.9.2元数据区域 1273

12.9.3热文件群集 1274

12.10其他各种特性 1280

12.10.1特殊的系统调用 1280

12.10.2冻结和解冻卷 1280

12.10.3扩展和收缩卷 1281

12.10.4卷通知 1281

12.10.5对稀疏设备的支持 1283

12.11 比较Mac OSX文件系统 1284

12.12比较HFS+与NTFS 1290

附录A 基于x86的Macintosh计算机上的Mac OS X 1293

A.1硬件区别 1293

A.2固件和引导 1294

A.3分区 1295

A.4通用二进制文件 1296

A.5 Rosetta 1297

A.6字节序 1299

A.7其他各种改变 1299

A.7.1无双重映射的内核地址空间 1299

A.7.2不可执行的栈 1299

A.7.3线程创建 1300

A.7.4系统调用 1301

A.7.5没有/dev/mem或/dev/kmem 1302

A.7.6新的I/O Kit平面 1302