计算机译丛:MacOSX技术内幕pdf下载pdf下载

计算机译丛:MacOSX技术内幕百度网盘pdf下载

作者:
简介:本篇主要提供计算机译丛:MacOSX技术内幕pdf下载
出版社:清华大学出版社
出版时间:2019-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

内容简介

  本书从系统设计的角度,以一种面向实现的方法,详尽剖析MacOSX内部工作原理的具体细节,揭示MacOSX及其组件的核心体系结构和实现。全书共分12章和一个附录,通过丰富而详细的插图、函数调用图、加注释代码段和编程示例等,引领读者学习实用的知识和技能,加深对所学知识的理解,并在实践中加以运用。

精彩书摘

  第3章 Apple内幕
  Apple于1994年发起了从68K硬件平台向PowerPC的迁移。在接下来的两年内, Apple的整个计算机系列都迁移到了PowerPC。在任何给定时间可用的各个基于PowerPC的Apple计算机家族通常在计算机体系结构①、使用的特定处理器以及处理器供应商方面有所区别。例如,在2003年10月推出G4 iBook以前,Apple当时最新的系统包括三代PowerPC:G3、G4和G5。其中G4处理器系列是由Motorola提供的,而G3和G5则来自IBM。表3-1列出了Apple使用的多个PowerPC处理器②。
  表3-1 基于PowerPC的Apple系统中使用的处理器
  处 理 器
  推 出 时 间
  停止使用时间
  PowerPC 601
  1994年3月
  1996年6月
  PowerPC 603
  1995年4月
  1996年5月
  PowerPC 603e
  1996年4月
  1998年8月
  PowerPC 604
  1995年8月
  1998年4月
  PowerPC 604e
  1996年8月
  1998年9月
  PowerPC G3
  1997年11月
  2003年10月
  PowerPC G4
  1999年10月
  —
  PowerPC G5
  2003年6月
  —
  PowerPC G5(双核)
  2005年10月
  —  2005年6月6日,在旧金山的全球开发者大会上,Apple宣布了它的计划,使Macintosh计算机的未来型号基于Intel处理器。这个迁移过程持续了两年:Apple声明尽管基于x86的Macintosh型号到2006年中期将变得可用,但是所有的Apple计算机直到2007年末才会迁移到x86平台。迁移的速度比预期的更快,首批x86Macintosh计算机在2006年1月就出现了。这些系统——iMac和MacBook Pro——基于Intel Core Duo③双核处理器系列,它们构建在65nm处理器技术之上。
  在本章中,将探讨特定类型的Apple计算机的系统体系结构:基于G5的双处理器Power Mac。而且,还将讨论这些系统中使用的特定PowerPC处理器:970FX。我们将重点介绍基于G5的系统,因为一般来讲970FX比它的前身更高级、更强大并且更有趣。它还是第一个64位双核PowerPC处理器(970MP)的基础。
  3.1 Power Mac G5
  Apple在2003年6月宣布了Power Mac G5——它的第一个64位桌面系统。最初基于G5的计算机使用IBM的PowerPC 970处理器,之后的系统基于970FX处理器。2005年后期,Apple通过迁移到双核970MP处理器,更新了Power Mac系列。970、970FX和970MP都源于POWER4处理器家族的执行核心,它是为IBM的高端服务器设计的。G5是Apple用于970及其变体的市场营销口号。
  IBM的其他G5
  还有另外一个来自IBM的G5——S/390 G5系统中使用的微处理器,它是在1998年5月宣布的。S/390 G5是IBM的CMOS④大型机家族的成员。与970处理器家族不同,S/390 G5具有CISC(Complex Instruction Set Computer,复杂指令集计算机)体系结构。  在研究任何特定的Power Mac G5的体系结构之前,要注意多种Power Mac G5型号可能具有稍微不同的系统体系结构。在下面的讨论中,将参考图3-1中所示的系统。
  3.1.1 U3H系统控制器
  U3H系统控制器结合了内存控制器⑤和PCI总线桥⑥的功能。它是一个自定义的集成芯片(Integrated Chip,IC),并且是许多关键系统组件的交汇点,包括:处理器、DDR(Double Data Rate,双倍数据速率)内存系统、AGP(Accelerated Graphics Port,加速图形端口)⑦插槽和进入PCI-X桥的HyperTransport总线。U3H通过在这些组件之间执行点对点路由,提供了桥接功能。它支持GART(Graphics Address Remapping Table,图形地址重映射表),允许AGP桥把AGP事务中使用的线性地址转换成物理地址。这改进了直接内存访问(Direct Memory Access,DMA)事务的性能,它们涉及在虚拟内存中通常不连续的多个页。U3H支持的另一个表是DART(Device Address Resolution Table,设备地址解析表)⑧,它为连接到HyperTransport总线的设备把线性地址转换成物理地址。在第10章中讨论I/O Kit时,将会遇到DART。
  图3-1 双处理器Power Mac G5系统的体系结构
  3.1.2 K2 I/O设备控制器
  U3H通过16位的HyperTransport总线连接到PCI-X桥。PCI-X桥则通过8位的HyperTransport总线进一步连接到K2自定义的IC。K2是一个自定义的集成I/O设备控制器。特别是,它提供了磁盘和多处理器中断控制器(Multiprocessor Interrupt Controller,MPIC)功能。
  3.1.3 PCI-X和PCI Express
  图3-1中显示的Power Mac系统提供了3个PCI-X 1.0插槽。具有双核处理器的Power Mac G5系统使用PCI Express。
  1.??PCI-X
  开发PCI-X是为了提高总线速度和减少PCI等待时间(参见第116页框注“关于本地总线的基础知识”)。PCI-X 1.0基于现有的PCI体系结构。特别是,它还是一种共享总线。它解决了PCI的许多(但并非全部)问题。例如,它的分割事务协议改进了总线带宽利用率,导致了远远超过PCI的吞吐率。它完全向后兼容,这是由于PCI-X卡可以用在传统的PCI插槽中,传统的PCI卡(包括33MHz和66MHz)反过来也可以用在PCI-X插槽中。不过,PCI-X在电学上并不与仅支持5V的卡或者仅支持5V的插槽兼容。
  PCI-X 1.0使用64位的插槽。它提供了两种速度等级:PCI-X 66(66MHz的信令速度,高达533MB/s的峰值吞吐量)和PCI-X 133(133MHz的信令速度,高达1GB/s的峰值吞吐量)。
  PCI-X 2.0提供了如下增强。
  * 纠错码(Error Correction Code,ECC)机制,用于提供自动的1位错误恢复和2位的错误检测。
  * 新的速度等级:PCI-X 266(266MHz的信令速度,高达2.13GB/s的峰值吞吐量)和PCI-X 533(533MHz的信令速度,高达4.26GB/s的峰值吞吐量)。
  * 新的16位接口,用于嵌入式或可移植应用程序。
  注意在图3-1中插槽是如何连接到PCI-X桥的:其中一个插槽是“单独”连接的(点对点(point-to-point)负载),而另外两个插槽则“共享”一条连接(多点(Multidrop)负载)。PCI-X速度限制是:仅当负载是点对点的时,才支持它的最高速度等级。确切地讲,两个PCI-X 133负载都将以100MHz的最高速度工作⑨。相应地,这台Power Mac中有两个插槽是100MHz,而第三个插槽则是133MHz。
  ……

前言/序言

  译者序
  操作系统(Operating System,OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,其他任何软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。它提供各种形式的用户界面,使用户有一个良好的工作环境,以及为其他软件的开发提供必要的服务和相应的接口等。
  Mac OS X以及一般意义上的Apple近年来吸引了许多人的注意力。鉴于Apple“受到狂热崇拜”的状况,以及Mac OS X独特的文化和技术组合,大量具有不同背景和兴趣的人(包括Mac OS X用户和非Mac OS X用户)都对这个操作系统非常感兴趣。
  本书从系统设计的角度描述Mac OS X,对其进行详细剖析,并逐一剥去它的神秘外衣。Mac OS X具有众多用户级和内核级的IPC机制,其中一些广为人知并且形成了文档。本书不仅将说明如何使用这些机制,而且将解释最基本的机制(Mach IPC)的设计和实现,然后讨论其他机制彼此之间是如何层叠的。
  本书提供了详细的插图、函数调用图、加注释的代码段和编程示例,可以引领读者学习实用的知识和技能,并能实际地运用它们,加深对所学知识的理解。本书的主要目标是为在Mac OS X上编程的任何人构建一个稳固的基础,因此非常适合应用程序员阅读。Mac OS X用户也可以阅读本书,以更好地理解系统是如何设计的以及它是如何组建的。系统管理员和技术支持人员也可以在本书中发现有价值的信息。
  参加本书翻译的人员有陈宗斌、傅强、宋如杰、蔡江林、陈征、戴锋、蔡永久、何正雄、黄定光、李刚生、李韬、欧婷、苏高、孙朝辉、孙丽、许瑛琪、叶守运、易陈丽、叶淑英、易小丽、喻四容、易志东、殷小俊、张景友、张旭、张志强、陈丽丽、尼朋、王亚坤、张敬伟、张丽、张悦、宫生文、黄艳、王萍萍、解本巨、肖进、李海燕、张班班、郝军启、蒋珊珊、周为华、张宝霞等。
  由于时间紧迫,加之译者水平有限,错误在所难免,恳请广大读者批评指正。
  译 者
  2019年1月
  致谢
  本书是我曾经做过的最艰巨、最费时和最伤元气的项目。我能完成这项任务的唯一原因是得到了我妻子Gowri的爱和支持。在我决定编写本书的差不多同一时间,我们意识到我们想要一个孩子。由于我全部的空闲时间都投入到编写这本书上,Gowri的责任就呈指数级增长了,尤其是在小Arjun降生后。Gowri以其似乎无限的力量和耐心,最终把一切都搞定了,我要给她致以最伟大的谢意。Arjun则通过他灿烂的笑容和滑稽的动作继续给我提供能量。我还要感谢我的家庭给予的爱和支持,尤其是Gowri的妈妈和她的姐姐 Gayethri,在我花了两年时间编写这本书期间,当我们需要家庭支持时,她们数次从世界的另一端飞过来帮助我们。
  我要特别感谢我在IBM Research的经理Steve Welch,他给我提供了令人难以置信的支持,并且容忍了我飘忽不定的工作日程表。
  无论怎样,都不足以表达我对Snorri Gylfason的谢意。他独自一人负责向我引荐Macintosh。如果不是他,我可能还没有开始使用Mac OS X,也不会对这个系统抱有好奇心,这本书也不可能问世。Snorri还是本书的最高效、最勤勉的评审者——他精心阅读过本书的每一页、每一幅插图和每个示例,并且做了非常好的标记。我们经历了数不清的通宵达旦的评审会议。在其他许多时间(基本上是每天),Snorri都会耐心地倾听一位过于劳累的作者的满腹牢骚,甚至在Snorri迁回他的祖国冰岛之后,他仍然履行了所有的评审 承诺。
  我要感谢Mark A. Smith,尽管他最初对Mac OS X不感兴趣,但他仍然评审了本书的几乎全部内容。Mark提供了非常有价值的反馈,他经常以令人困惑的速度阅读本书,但他能够如此细致地捕捉到错误,以至于都有些违背逻辑。感谢Ted Bonkenburg、?lfar Erlingsson和Amurag Sharma,他们不折不扣地详细审查了书中的多个章节。当我从Ted极其忙碌的日程表中挤占他的时间时,他和蔼地与我进行了多次讨论。
  感谢Addison-Wesley团队中所有人的辛勤工作和奉献精神。我要特别感谢我的编辑Catherine Nolan管理这个项目(以及与我打交道)。感谢Mark Taub、John Wait、Denise Mickelsen、Stephane Nakib、Kim Spilker、Beth Wickenhiser、Lara Wysong以及所有其他我不知名的人在制作本书的过程中所起的作用。
  最后,感谢我的文字编辑Chrysta Meadowbrooke所做的一流工作。
  关 于 作 者
  Amit Singh是一位操作系统研究员,目前在Google工作。在此之前,Amit就职于IBM Almaden Research Center。再往前,他曾经为硅谷的启动做过一些工作,从事操作系统虚拟化方面的前沿性工作。Amit还是贝尔实验室Information Sciences Research Center(信息科学研究中心)技术人员中的一员,他在这里从事操作系统和网络方面的工作。他创建并维护了两个Web站点:www.osxbook.com和www.kernelthread.com。
  献给我的父母Sharda和Amar Singh,感谢他们教会我去努力学习一切知识,感谢他们给予我需要(或者想要)从他们那里得到的一切,感谢他们一路的陪伴和无微不至的关照。
  前 言
  尽管Mac OS X是一种相对较新的操作系统,它的血统其实相当多姿多彩,并且它的大多数组件的历史也非常悠久。Mac OS X以及一般意义上的Apple近年来吸引了许多的注意力。鉴于Apple“受到狂热崇拜”的状况,以及Mac OS X独特的文化和技术组合,大量具有不同背景和兴趣的人(包括Mac OS X用户和非Mac OS X用户)都对这个系统感到好奇就不令人感到诧异了。
  多年来在使用、编程和扩展了多个操作系统之后,2003年4月1日有人给我引荐了Mac OS X①。很快,我就对这个系统的结构充满了好奇心。尽管有几本介绍Mac OS X的优秀图书,但令我沮丧的是,我无法从一本书中学到Mac OS X内部工作原理的具体细 节——不存在这样一本书。有一些图书描述了如何在Mac OS X上执行多种任务;如何配置、自定义和调整系统;以及在某些用户看来在Mac OS X与Windows之间有何区别。还有一些图书介绍了特定的Mac OS X编程主题,比如Cocoa和Carbon API。其他图书则使UNIX②用户能够更轻松地迁移到Mac OS X——这样的图书通常讨论的是操作系统的命令行界面。尽管这些图书在促进人们理解Mac OS X方面起到了重要的作用,但是Mac OS X及其组件的核心体系结构和实现仍然保持神秘。更糟糕的是,除了信息缺乏之外,还经常能发现关于Mac OS X的组成结构的错误信息。由于长期形成的神话和固定印象,该系统经常被误解,或者给人的感觉像是一个黑盒。
  本书的目的是从系统设计的角度描述Mac OS X,对其进行解析,并剥去它的神秘外衣。本书采用一种面向实现的方法来理解该系统。考虑进程间通信(InterProcess Communication,IPC)的示例。Mac OS X具有众多用户级和内核级的IPC机制,其中一些广为人知并且形成了文档。本书不仅仅将说明如何使用这些机制,而且将解释最基本的机制(Mach IPC)的设计和实现,然后讨论其他机制彼此之间是如何层叠的。我的目标不是教会你如何做一些具体的事情,而是给你提供足够的知识和示例,使得在读完本书后,依赖于你的兴趣和背景,你就可以基于最近获得的知识,做出自己的选择。
  除了文字内容之外,本书还使用了详细的插图、函数调用图、加注释的代码段和编程示例,对Mac OS X进行详细的分析研究。为了使主题保持有趣和容易理解——甚至对于临时起意的读者也是如此,本书包含了相关的琐碎知识、与主题无关的段落以及其他花絮③。
  本书读者对象
  我希望任何对Mac OS X的组成结构和工作原理感到好奇的人都可以通过阅读本书而获益。
  应用程序员可以对他们的应用程序将如何与系统交互获得更深的理解。系统程序员可以把本书作为一份参考,并且更好地理解核心系统是如何工作的。作为一名程序员,依我的经验看,切实理解系统的内部工作原理对于设计、开发和调试是极其有用的。例如,你可以知道系统能够做什么,什么是切实可行的,在给定情况下的“最佳”选项是什么,以及出现某些程序行为的可能的原因是什么。本书的主要目标是为在Mac OS X上编程的任何人构建一个稳固的基础。
  Mac OS X用户可以阅读本书,更好地理解系统是如何设计的以及它是如何组建的。系统管理员和技术支持人员也可以在本书中发现有价值的信息。
  除了那些使用Mac OS X的人之外,预期的读者还包括其他技术社区的成员,比如BSD、Linux和Windows社区。鉴于Mac OS X的许多内部方面与这些系统有着根本的不同(例如,Mach内核是如何使用的),本书将帮助这些读者拓宽他们的知识,并将帮助他们比较和对照Mac OS X与其他操作系统。
  在学习高级操作系统课程时,尤其是如果你希望执行关于Mac OS X的案例研究,那么本书也将是有用的。不过,本书不适合用作入门性教材。尽管我在介绍许多高级主题时附带了一些背景信息,但是大多数内容介绍都超越了入门级的层次。
  本书组织结构
  现代操作系统变得如此巨大和复杂,以至于不可能在一本书中合理地描述整个系统。本书有点野心勃勃,这是由于它尝试切切实实地从广度和深度上介绍Mac OS X。对本书的深度最重要的贡献者是精心挑选的编程示例。本书被组织成12章。尽管本书的大量内容相当有技术性,但是每一章中都包含一些小节,它们对于非程序员也应该很容易理解。
  第1章Mac OS X起源:描述了Mac OS X以及衍生出它的系统的技术发展史。该章介绍了Apple所有过去和当前的操作系统,在本书的配套Web站点上可以找到该章的未删节版本。
  第2章Mac OS X概述:是关于Mac OS X及其重要特性的漫谈,其中包含构成该系统的多个层次的简要概述。
  第3章Apple内幕:描述了PowerPC体系结构,并且使用PowerPC 970(“G5”)处理器系列作为特定的示例,其中还讨论了PowerPC汇编语言和调用约定。
  第4章固件和引导加载程序:描述了开放固件(Open Firmware)和可扩展固件接口(Extensible Firmware Interface,EFI)以及它们各自的引导加载程序,其中还讨论了固件和引导加载程序在系统的操作、使用场景以及在早期的自引导(bootstrapping)期间所发生的事件中所起的作用。
  第5章内核和用户级启动:描述了事件的序列——包括内核子系统的初始化——从内核开始执行的位置到内核运行第一个用户空间程序(launchd)的位置,其中讨论了launchd的函数和实现。
  第6章xnu内核:描述了Mac OS X的核心内核体系结构,讨论包括系统调用家族以及它们的实现、低级跟踪和调试机制以及一些特殊的特性,比如内核的PowerPC版本中的虚拟机监视器。
  第7章进程:描述了Mac OS X子系统中存在的多种抽象形式(比如任务、线程和进程)以及处理器调度,其中讨论了使用多种内核级和用户级接口,用于操纵上述的抽象。
  第8章内存:描述了Mac OS X内存子系统的体系结构,其中讨论了Mach虚拟内存体系结构、分页、统一缓冲区缓存、工作集检测机制、内核级和用户级内存分配器以及对64位寻址的支持。
  第9章进程间通信:描述了Mac OS X中提供的多种IPC和同步机制,尤其是其中讨论了Mach IPC的实现和使用。
  第10章扩展内核:描述了I/O Kit,它是Mac OS X中的面向对象的驱动程序子系统。
  第11章文件系统:描述了Mac OS X中总体的文件系统层,包括每种文件系统类型的简要讨论,其中还讨论了分区模式、磁盘管理和Spotlight搜索技术。
  第12章HFS+文件系统:描述了HFS+文件系统,其中通过使用为本章编写的自定义的文件系统调试器来帮助进行讨论。
  附录A基于x86的Macintosh计算机上的Mac OS X:突出强调了基于x86与基于PowerPC的Mac OS X版本之间的关键区别。除了这个附录之外,本书还介绍了几个关键的特定于x86的主题的详细知识,比如EFI、基于GUID的分区和通用二进制(Universal Binaries)。Mac OS X的大多数方面都是独立于体系结构的,因此本书的绝大多数内容也是独立于体系结构的。
  鉴于本书篇幅比较长,我选择排除了几个在其他图书中介绍得比较好的主题。TCP/IP栈就是一个示例——本书中没有关于“联网”的章节,因为Mac OS X TCP/IP栈大体上是FreeBSD栈的衍生品,而FreeBSD栈已经形成了良好的文档。一般而言,本书中没有包括跨UNIX变体通用并且在标准文档中可以找到的信息。
  如何阅读本书
  由于本书的前两章分别提供了Mac OS X的背景知识和总体介绍,建议首先阅读这两章。后续各章最好也按顺序阅读。尽管如此,读者仍然可以根据自己的兴趣以及对某些主题的熟悉程度,跳过某些小节(也许甚至可以跳过某几章),以便从本书中获得有价值的 信息。
  如果你对操作系统概念比较熟悉并且使用过UNIX操作系统,将会是有帮助的。
  鉴于本书具有大量的C程序和程序代码段,你应该具有一些编程经验,尤其要具有C编程语言的知识。我有时不仅使用代码来演示概念的工作原理,而且还用于描述概念。我意识到“阅读”代码通常被认为是“困难”的,而一些作者通常期望许多读者将会简单地跳过代码。我的信念是:阅读本书中的代码(而不是仅仅运行它)对于程序员将特别有 帮助。
  尽管本书的内容具有技术性,但是书中有几部分可以被程序员和非程序员轻松阅读。
  作为一本Mac OS X内部工作原理的参考书,我希望本书及其示例在往后一段较长的时间对于它的读者都是有用的。
  如何使用示例
  本书中包括了许多自含式示例。其中许多示例都有比较重要的价值,这是由于它们做的事情既有用,又有趣。我希望这些示例能够发人深省,并且充当其他项目的构件。本书中显示的几乎所有的示例都带有命令行,用于编译和运行它们。
  在合适的地方,在基于PowerPC和基于x86的Macintosh计算机上测试了这些示例。值得注意的是:在代码仅适用于PowerPC的情况下,比如在PowerPC汇编语言示例中,它通常可以在基于x86的Macintosh上编译和运行——这样的代码将可以在Rosetta二进制转换软件下运行。不过,本书中的少量示例将需要PowerPC Macintosh——它们将不会在Rosetta下运行。
  相关的材料
  当今,技术进步是如此之快,以至于几乎不可能出版一本全新的图书。幸运的是,Internet访问允许作者和出版社在图书出版之后使各种材料可供读者使用。本书最有用的资源是它的配套网站www.osxbook.com,它提供了以下资源:
  * 勘误表和更新。
  * 本书中的源代码。
  * 本书的博客,其中具有关于新材料可用性的新闻和公告。
  * 一组论坛,其中可以讨论与本书(以及一般意义上的Mac OS X)相关的主题。
  * 额外的内容区,其中包含与本书相关的额外文章、演示文稿、二进制代码和源代码。
  * 本书中的示例内容,包括详细的目录。
  ① 这个日期很有趣,因为巧合的是,Apple是在1976年4月1日成立的。
  ② 我使用术语“UNIX”代表UNIX系统、源于UNIX的系统或者类UNIX系统之一。
  ③ 脚注也是一个有益的补充!