深入理解计算机系统概述· 零

本书概述
关键词:计算机系统,程序优化,存储器,网络编程,并发编程
第1章:计算机系统漫游。 这一章通过研究“hello,world”这个简单程序的生命周期,介绍计算机系统的主要概念和主题。
第2章:信息的表示和处理。我们讨论计算计算书,重点描述对程序员有影响的无符号和二进制补码的数字表示法的特性。我们考虑数字是如何表示的,以及由此确定对于一个给定的字长,其可能编码值的范围。我们探讨有符号和无符号之间类型的转换效果,还阐述算数操作的数学特性。学生们很惊奇地了解到(二进制补码表示的)两个整数的和或者积可以为负。另一方面。二进制补码算法满足环的特性,因此编译器把一个常量乘法转换为一系列的移位和加法。我们用C的位级操作来说明布尔代数的原理和应用。我们从如何表示服点至和浮点操作的数学属性方面讲述IEEE标准的浮点格式。
对计算机算数的深刻理解是写出可靠程序的关键,比如不能用(x-y<0)来取代(x<y),因为可能会产生溢出。甚至也不能用表达式(-y<-x)来取代,因为在二进制补码中表示负数和正数的范围是不对称的。算术溢出是程序错误中的一个常见根源,然而很少有书从一个程序员的角度去讲述计算机算术的特性。
第3章:程序的机器级表示。我们教学生如何读有C编译器生成的IA32汇编语言。我们说明为不同控制结构,比如条件、循环和开关语句,生成的基本指令模式。我们还讲述过程的执行,包括栈分配、寄存器使用惯例和参数传递。我们讨论不同数据结构如结构、联合和数组的分配和访问方式。学习本章的概念能够帮助学生成为更好的程序员,因为他们懂得他们的程序在机器上是如何表示的。另外一个妙处在于学生们对指针有了具体的了解。
第4章:处理器体系结构。这一章讲述基本的组合和时序逻辑元素,并展示这些元素在数据路径中如何组合到一起的,来执行IA32指令集的一个称谓“Y86”的简化子集。我们从设计单时钟周期、非流水线化的数据路径开始,然后扩展成一个五阶段、流水线化的设计。本章中处理器设计的控制逻辑是用一种称为HCL的简单硬件描述语言来描述的。用HCL写的硬件设计能够编译和链接成本中提供的图形处理器的模拟器。
第5章:优化程序性能。在这一章里,我们介绍许多提高代码性能的技术。我们从与机器无关的程序转换开始,这些标准是在任何机器上写任何程序时都应该遵循的。然后是那些功效有赖于目标机器和编译器特性的转换,为了促进这些转换,我们介绍了一个简单的操作模型,它描述了现代乱序处理器是如何工作的,然后向学生们展示了怎样利用这个模型来改进C程序的性能。
第6章:存储器层次结构。对应用程序员来说,存储器系统是计算机系统中最直接可见的部分之一。到目前为止,学生们一直认同这样一个存储器系统概念模型,认为它是一个一致访问时间的线性数组。实际上,存储器系统是一个由不同容量、造价和访问时间的存储设备组成的层次结构。我们讲述不同类型的随机存取存储器(RAM)和只读村暑期(ROM)以及现代磁盘驱动器的几何形状和组织结构。我们描述这些存储设备是如何放置在层次结构中的,讲述访问局部性是如何使用这种层次结构成为可能的。我们通过一个独特的观点使这些理论具体化、形象化,那就是将存储器系统视为“存储器山”,山脊是时间局部性,而斜坡式空间局部性。最后向学生们阐述如何通过改善时间和空间局部性来提高应用程序的性能。
第7章:链接。本章讲述静态和动态链接,包括的概念有可重定位的(relocatable)和可执行的目标文件、符号解析、重定位(relocation)、静态库、共享目标库,以及与位置无关的代码。大多数系统中都不涉及链接,而我们出于下面几个原因要讲述它。第一,学生们遇到的最迷惑的问题中,有一些是链接时的小故障有关,尤其是对那些大型软件包来说。第二,链接器生成的目标文件是与一些加载、虚拟存储器和存储器映射这样的概念相关的。
第8章:异常控制流。在课程的这个部分,我们通过介绍异常控制流(比如,正常转移和过程调用以外的控制流变化)的一般概念被打破单一程序的模型。我们给出存在于系统所有层次的异常控制流的例子,从底层的硬件异常和冲突,到并发进程的上下文切换,到Unix信号传送引起的控制流图扁,到C中破坏栈原则的非本地跳转(nonlocal jump)。
在这一章,我们还向学生们介绍进程是如何工作的,以及如何在应用程序中创建和操作进程。我们向他们展示应用程序员如何通过Unix系统调用使用多进程。学完本章,他们就能够编写带作业控制的Unix脚本了。
第9章:测量程序运行时间。这一章教给学生计算机是如何理解时间的【时间间隔计时器、CPU周期]计时器(cycle timer)和系统时钟 】, 当我们试图用这些时间测量程序运行时时间的错误根源,以及怎样运用这些知识来得到准确的度量值。据我们所知,这是唯一的在以前还未以任何常规的方式讨论过的内容。我们在此讨论这个主题是因为它需要对汇编语言、进程和高速缓存有所了解。
第10章:虚拟存储器。我们讲述虚拟存储器系统是希望学生们对它的工作和特性有所了解。我们想让学生了解为什么不同的并发进程各自都有一个相同的地址范围,能够像某些页,但另外一些页又是独占的。我们还覆盖一些管理和操作虚拟存储器的问题。特别地,我们讨论了存储分配操作,比如Unix的malloc和free操作。阐述这些内容是出于下面几点目的。它加强了虚拟存储空间只是字节数组,程序可以把它划分成不同存储单元的概念。它帮助学生理解包含有像程序存储泄露和非法指针引用这样存储器引用错误的程序的后果。最后,许多应用程序员编写自己的优化了的存储分配来满足应用程序的需要和特性。
第11章:系统级I/O。我们讲述Unix I/O的基本概念,例如文件和描述符。我们描述如何共享文件,I/O重定向是如何工作的,还有如何访问文件的元数据。我们还开发了一个健壮的带缓冲区I/O包,可以正确处理short counts。我们阐述C的标准I/O库,以及它与Unix  I/O的关系,重点谈到标准 I/O的局限性,这些局限性使之不适合网络编程。总的说来,本章的论题是后面两张网络和并发编程的基础。
第12章:网络编程。对编程而言,网络是非常有趣 I/O设备,将许多我们前面文中学习的概念,比如进程、信号、字节顺序、存储器映射和动态存储器分配,联系在一起。网络程序还为并发提供了强制性上下文,这是下一章的论题。本章是网络编程的小片段,使学生们能够编写Web服务器。我么讲述位于所有网络程序底层的客户端-服务器模型。我们展现了一个程序员对Internet的观点,并且教给学生如何使用套接字借口来编写Internet客户端和服务器。最后,我们介绍超文本传输协议HTTP,并开发了一个简单的迭代式(iterative) Web服务器。
第13章:并发编程。这一章以Internet服务器设计为例向学生们介绍了并发编程。我们比较对照了三种编写并发程序的基本机制(进程、I/O多路复用技术以及线程 ),并且展示如何用它们来建造并发Internet服务器。我们探讨了用P、V信号操作、线程安全、和可重入、竞争条件以及死锁等来实现同步的基本原则。
参考文献
Bryant R E, 布赖恩特, O'Hallaron D, et al. 深入理解计算机系统[M]. 中国电力出版社, 2004.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ACMSunny

赠人玫瑰,手有余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值