《深入理解计算机系统》这本书的主要目的在于帮助你理解计算机系统在执行Hello系统时,系统发生了什么以及为什么会这样?
深入理解计算机系统从程序员的角度来认识计算机是怎么样运行程序的,也就是说C程序在计算机系统是怎么样的运行,才能都显示出我们想要的结果,众所周知,计算机系统有硬件和软件组成,他们共同运作来运行应用程序,那么,当我们敲入Hello程序时,计算机的软硬件是如何运行的呢,C语言程序如何被计算机组所理解,按照程序的设计来展示我们想要的结果?
在计算机系统中,如何将计算机编程及其能够识别的语言,进而运行出我们想要的结果,首先就C语言变成的程序转换成计算机 所能够识别的汇编语言程序,然后对汇编程序在机器级进行程序的运行处理,进而得出我们想要的结果。
《深入理解计算机系统》全书共分为三个部分来介绍计算机系统,
第一章概论,介绍Hello程序在计算机中是怎么样的运行过程,
第一部分:程序的结构和执行 第二章为信息的表示和处理, 第三章,程序的机器及表示 第四部分 处理器体系结构 第五章 优化程序性, 第六章 存储器层次结构
第二部分:在系统上运行程序 第七章 链接 第八章 异常控制流 第九章 虚拟内存
第三部分:程序间的交互和通信 第十章 系统及级IO 第十一章 网络编程 第十二章 并发编程
各章主要内容:
第一章:通过讲解Hello 程序,来简单介绍计算机系统的主要概念和主题。
第一部分:程序的结构和运行
第二章: 信息的表示和处理 我们描述计算机的算术运算,重点描述程序有重点影响的无符号数和数的补码表述的特性,我们考虑数是如何表述的,以及由此确定对于一个给定的字长,其可能编码值的范围。我们探讨无符号数和有符号数之间类型转换的效果,并阐述算术运算的数学特性。补码的运算能满足很多整数运算的代数特性,此外,从两个方面描述浮点格式,即如何用它来表示数值,和浮点运算的数学特性。(在计算机系统层面数据的表示形式)
第三章:程序的机器及表示 如何阅读由c编译器生成的x86-84机器代码,我们说明不同控制结构生成的基本指令模式,描述过程的实现,包括栈分配,寄存器使用惯例,参数传递,来讨论不同数据结构的分配和访问方式,说明实现整数和浮点型算术运算的指令,分析程序机器的样子作为途径,来理解程序的安全漏洞。(在计算机系统程序的运行)
第四章:处理器体系结构 这一章描述基本的组成和时序逻辑元素,并展示这些通路是如何在数据通路中组合到一起,来执行X86-84指令集的一个简化子集,我们从设计单时钟周期数据通路开始,引入流水线的思想,将处理一条指令所需要的不同步骤实现为独立的阶段。(执行指令时硬件层面的操作)
第五章:优化程序性能 这一章里,我们介绍许多提高代码性能的技术,主要思想就是让程序员通过使编译器能够生成更有效的机器代码来学习编写C代码,一开始介绍的是减少程序需要走的工作变换,然后介绍增加生成机器代码中指令级并行度的变换,而提高了程序在现代化超标量处理器上的性能。
第六章 : 存储器结构层次 存储器系统实际上是由不同容量造价和访问时间的存储设备徐成的层次结构,我们描述的是不同类型的随机存储器(RAM)和只读存储器(ROM)以及磁盘和固态硬盘的几何形状和组织构造,我们描述这些存储设备是如何放置在层次结构中,讲述访问局部性是如何是这种层次结构成为可能的。(计算机的存储结构)
第二部分:在系统上运行程序
第七章:链接 本章讲述动态和静态链接,包括的概念有可重定位和可执行的目标文件,符号解析,重定位,静态库,共享目标库,位置无关代码,以及库打桩。
第八章: 异常控制流 我们通过介绍异常控制流的一般概念,打破单一程序的模型,给出存在于系统所有层次的异常控制流的例子,从底层硬件异常和中断,到并发进程的上下文切换,由于接收Linux信号引起的控制流突变,到语言中破坏栈原则的非本地跳转。(程序的异常控制)
第九章:虚拟内存 通过描述虚拟内存系统,了解为什么不同的并发进程各自都有一个完全相同的地址范围,能够动向某些页,而又能够独立占领某些页,我们还讲了管理和操作虚拟内存的问题,特别的,我们讨论了存储分配操作。(对于计算机存储器的虚拟分配)
第十章: 系统级IO 我们描述了unix IO的基本概念,如何共享文件,IO重定向是如何工作的,如何访问文件的元数据,我们阐述C的标准IO库,及其局限性,这些局限性使之不适合网络编程,总体来说,本章的主题是后面两章 网络好并发编程的基础。(文件读取)
第十一章:网络编程 通过本章的学习,能够编写一个简单的WEB服务器。并讲述位于所有网络程序底层的客户端和服务器模型,能用套间字来编写一个Internet客户端和服务器,最后介绍文本传输协议,开发一个简单的迭代式Web服务器。
第十二章 :并发编程 这一章以Internet服务器设计为例子介绍并发编程,我们比较对照三种编写并发程序的基本机制(进程,IO多路复用,线程),并展示如何用他们来建造Internrt服务器,探讨用P,V信号操操作来实现同步,线程安全,和可重入,竞争安全和死锁等基本原则,最后,描述线程级编程的使用方法,并用这种方法来表达应用程序的并行性,使得程序在多核处理器上能够执行得更快。
综上:十二章的内容,以c语言为主设计的程序,来介绍计算机系统是如何运行程序并获得我们想要的结果,在c语言的知识体系中,包括基本数据类型,程序控制,IO流,异常控制,并发编程等部分,而深入理解计算机系统的整体设计也是如此。
第一部分讲的是程序的结构和执行,先从c语言中的基本数据类型开始,说明基本数据类型是如何表示在计算系统中,以怎么样的方式保存,其次介绍程序的设计在什么样的计算机系统中,即c语言程序在计算机系统中如何运行,包括软件层和硬件层,鉴于此,如何优化程序呢?最后介绍数据的存储形式和位置,也就是计算机中的存储器层次结构;首先介绍了数据信息的表示和处理,也就是数据的存储形式,整型浮点型数据的表示,通常在c语言层面我们用数字来表示数据,如有符号数或者无符号数,那么,这些数据是怎么样存储计算机硬件层的呢?以二进制数的存储在计算机内存中,通常以补码的形式表示,第三章表示的是程序的机器及表示,程序涉及基本流程,数据表示等,这些内容是如何在计算机系统中运行的呢?首先c语言程序转化为计算机能够理解的汇编语言,汇编语言在计算机系统中运行,显示结果。第四章处理器系统是指能够在硬件层计算机是怎么样来运行程序的,这方面就会涉及到时钟时序和电路的逻辑门和二极管等方面的知识。第五章设计到程序的优化,如何才能狗设计程序最大限度中使用计算机资源。第六章为存储器结构,程序中的数据值如何保存在计算机中,计算机是如何调用有用的信息,并且,存储器的结构是怎么样的。
第二部分为在系统中运行程序。当我们需要在系统中运行程序,需要考虑程序的异常和虚拟内存的问题,当在系统中运行程序,需要考虑程序的性能和内存分配问题,第七章讲的是链接的问题,第八章说明当程序出现异常时,在计算机系统中会出现什么样的操作过程,来处理异常,第九章将虚拟内存,计算机有自己的存储器层次,但是在运行程序时,徐娅萍考虑讲不痛的程序存储在不同的位置,以提高程序运行的效率,因此将计算机存储划分为不同的区域,存储计程序的不同部分,进而来提高计算机运行的效率。
第三部分讲的是程序时间的交互和通信,既然是程序之间的通信,就需要在不同程序时间进行文件的传递,文件的传递需要在不同的程序之间进行,则需要考虑文件传输问题,网络编程从一定程度上来讲可以认为是文件传输的一种方式,并发编程时基于计算机多核处理器而实现的文件处理方式,第十章讲的是系统级IO,io文件传输系统是计算机程序与外界进行文件交互的方式,第十一章讲的是计算机网络编程,基于C的网络编程,以实现文档的传输,第十二章讲的是计算机并发编程,通过并发编程,使得程序在多核处理器上能够执行得更快。