计算机系统基础 第2版
作者 : 袁春风 余子濠 编著
出版日期 : 2018-07-19
ISBN : 978-7-111-60489-1
适用人群 : 本书内容详尽,反映现实,概念清楚,通俗易懂,实例丰富,并提供大量典型习题以供读者练习。本书可以作为计算机专业本科或大专院校学生计算机系统方面的基础性教材,也可以作为有关专业研究生或计算机技术人员的参考书。
定价 : 59.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 434
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书主要介绍与计算机系统相关的核心概念,解释这些概念如何相互关联并最终影响程序执行的结果和性能。本书共分8章,主要内容包括数据的表示和运算、程序的转换及机器级表示、程序的链接、程序的执行、存储器层次结构、虚拟存储器、异常控制流和I/O操作的实现等。

图书特色

图书前言

后PC时代的到来,使得原先基于PC而建立起来的专业教学内容已经远远不能反映现代社会对计算机专业人才的培养要求,原先计算机专业人才培养强调“程序”设计也变为更强调“系统”设计。这需要我们重新规划教学课程体系,调整教学理念和教学内容,加强学生系统能力培养,使学生能够深刻理解计算机系统整体概念,更好地掌握软/硬件协同设计和程序设计技术,从而更多地培养出满足业界需求的各类计算机专业人才。不管培养计算机系统哪个层面的计算机技术人才,计算机专业教育都要重视学生“系统观”的培养。
本书的主要目的就是为加强计算机专业学生的“系统观”而提供一本关于“计算机系统基础”课程教学的教材。
1.本书的写作思路和内容组织
本书从程序员视角出发,重点介绍应用程序员如何利用计算机系统相关知识来编写更有效的程序。本书以高级语言程序的开发和运行过程为主线,将该过程中每个环节所涉及的硬件和软件的基本概念关联起来,试图使读者建立一个完整的计算机系统层次结构框架,了解计算机系统的全貌和相关知识体系,初步理解计算机系统中的每一个抽象层及其相互转换关系,建立高级语言程序、ISA、OS、编译器、链接器等之间的相互关联;对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强读者在程序的调试、性能优化、移植和健壮性保证等方面的能力,并为后续的“计算机组成与设计”“操作系统”“编译技术”“计算机体系结构”等课程打下坚实基础。
本书的具体内容包括:程序中处理的数据在机器中的表示和运算、程序中各类控制语句对应的机器级代码的结构、可执行目标代码的链接生成、可执行目标代码中的指令序列在机器上的执行过程、存储访问过程、打断程序正常执行的机制以及程序中的I/O操作功能如何通过请求操作系统内核提供的系统调用服务来完成等。
不管构建一个计算机系统的各类硬件和软件多么千差万别,计算机系统的构建原理以及在计算机系统上的程序转换和执行机理是相通的,因而,本书仅介绍一种特定计算机系统平台下的相关内容。本书所用的平台为IA-32/x86-64+Linux+GCC+C语言。
本书共有8章,分两个部分。第一部分主要是系统概要并介绍可执行目标文件的生成,包含第1~4章;第二部分主要介绍可执行目标文件的运行,包含第5~8章。第1章是计算机系统概述;第2章和第3章分别介绍高级语言程序中的数据和语句所对应的底层机器级表示,展示的是高级语言程序到机器级语言程序的对应转换关系;第4章主要介绍如何将不同的程序模块链接起来构成可执行目标文件,展示的是程序的链接环节;第5章和第6章着重介绍程序的运行环节,包括与程序运行密切相关的硬件部分——CPU及存储器的组织;第7章介绍打断程序正常运行的事件机制——异常控制流;第8章主要介绍程序中I/O操作的实现机制。此外,附录A中还补充了数字逻辑电路的基础内容,为那些没有数字逻辑电路基础知识的读者阅读本书提供方便。
2.读者所需的背景知识
本书假定读者对C语言程序设计有一定的基础,已经掌握了C语言的语法和各类控制语句、数据类型及其运算、各类表达式、函数调用和C语言的标准库函数等相关知识。
此外,本书对于程序中指令的执行过程进行了介绍,这涉及布尔代数、逻辑运算电路、存储部件等内容,因而,本书正文内容假定读者具有数字逻辑电路基础知识。不过,如果读者不具备这些背景知识的话,可以参看本书附录A。
本书所用的平台为IA-32/x86-64+Linux+GCC+C语言。书中大多数C语言程序对应的机器级表示都是基于IA-32+Linux平台用GCC编译器生成的,本书会在介绍程序的机器级表示之前,先简要介绍IA-32的指令集体系结构,包括其机器语言和汇编语言的介绍,因而,读者无须任何机器语言和汇编语言的背景知识。
XII3.使用本书作为教材的课程及教学建议
目前国内大学计算机专业课程设置,大多是按计算机系统层次结构进行横向切分,自下而上分解成数字逻辑电路、计算机组成原理、汇编程序设计、操作系统、编译原理、程序设计等课程,而且,每门课程都仅局限在本抽象层,相互之间几乎没有关联,因而学生对整个计算机系统的认识过程就像“瞎子摸象”一样,很难形成一个对完整计算机系统的全面认识。虽然国内有些高校也有计算机系统概论、计算机系统入门或导论之类的课程,但通常内容较广且结构较松散,基本上是计算机课程概论,因而很难使学生真正形成计算机系统层次结构整体框架。
笔者对美国几所顶级大学近年来相关课程体系进行了跟踪调查,发现他们都非常注重计算机系统能力的培养,都在讲完高层的编程语言及程序设计课程后开设一门关于计算机系统的基础课程,如MIT的6.004、UC-Berkeley的CS 61C、CMU的CS 213、斯坦福大学的CS 107等。这些课程在内容上特别注重计算机系统各抽象层的纵向关联,将高级语言程序、汇编语言程序、机器代码及其执行串联起来,为学生进一步学习后续相关课程打下坚实的基础。
本书在借鉴国外相关课程教学内容和相关教材的基础上编写,适合于在完成程序设计基础课程后进行学习。本书内容贯穿计算机系统各个抽象层,是关于计算机系统的最基础的内容,因而使用本书作为教材开设的课程适用于所有计算机相关专业。
使用本书作为教材开设的课程名称可以是“计算机系统基础”“计算机系统导论”或类似名称,可以有以下几种安排方案。
章号 内容 课程
① ② ③ ④ ⑤
1 计算机系统概述√√√√√
2数据的机器级表示与处理√√√√√
3程序的转换及机器级表示√√√√
4程序的链接√√√
5程序的执行√√√√
6层次结构存储系统√√√√
7异常控制流√√
8I/O操作的实现√√
附录A数字逻辑电路基础√√√√√
上表的课程安排及教学建议说明如下:
第①种课程适合于软件工程等不需要深入掌握底层硬件细节的专业。开设该课程后,则无须再开设“数字逻辑电路”“汇编程序设计”“计算机组成原理”和“微机原理与接口技术”课程,因为本书基本涵盖了上述课程中的所有主要内容,并将它们与高级语言程序、操作系统中的部分概念、编译和链接中的基本内容有机联系在一起了。这样做,不仅能缩减大量课时,还可以通过该课程的讲授为学生系统能力培养打下坚实的基础。因为课程内容较多,建议开设为一个一学年课程,第一学期学习附录A和第1~4章,第二学期学习第5~8章。每学期的总学时数为60左右。
第②种课程适合于计算机工程、计算机系统等偏系统或硬件的专业。可以在该课程后开设一门将数字逻辑电路和计算机组成及设计的内容合并的课程,专门介绍计算机微体系结构的数字系统设计技术;也可以在该课程之前先开设“数字逻辑电路”课程,之后再开设“计算机组成与设计”课程。美国几个顶级大学采用的是前面一种做法。建议开设为一个一学期课程,总学时数为80左右。
第③、④和⑤种课程,适合于其他与计算机相关的非计算机专业或那些大专类计算机专业,在学时受限的情况下,可以选择一些基本内容进行讲授。建议开设为一个一学期课程,总学时数在60~80。
本书对于存储访问机制和异常控制流这两部分内容,在介绍基本原理的基础上,还简要介绍了IA-32/x86-64+Linux平台的具体实现(书中带*的章节)。由于基本原理在一个具体平台中的实现往往比较复杂,因而带*章节的内容相对烦琐。若本书用作教材的话,这部分可以选择不作为课堂教学内容。但是,如果后续的操作系统课程实验内容是基于IA-32+Linux平台实现的话,建议将这部分内容作为重点讲解。
4.第2版修订内容
由于第1版教材编写时间比较仓促,因而导致部分内容不太完善,示例不太丰富,特别是,近年来计算机系统相关技术发生了一些变革,64位系统的使用越来越广泛。为了更好地完善教材内容,丰富教学示例,反映技术的进步,拓宽本领域知识的覆盖面,更加合理地构建知识框架,第2版在第1版的基础上进行了若干修订,主要包括以下几个方面。
第1章(计算机系统概述):删除了关于计算机发展历史和计算机硬件的介绍,增加了对冯·诺依曼结构模型机及其指令系统的介绍,并通过模型机中具体程序例子简要介绍了高级语言程序与机器级代码的对应关系,以及在模型机上执行程序和指令的过程。此外,在计算机系统层次结构部分,增加了对系统核心层之间关联的介绍,包括语言规范中的未定义行为、不确定行为,以及应用程序二进制接口(ABI)和应用编程接口(API)等的介绍;在性能评价部分,还增加了对阿姆达尔定律的介绍。
第2章(数据的机器级表示与处理):增加了大量的C程序示例,将高级编程语言规范与具体程序执行结果结合起来介绍,以使读者充分理解程序中数据在机器中的表示与运算所涉及的各层面概念之间的关联关系。
第3章(程序的转换及机器级表示):增加了在C语言中直接嵌入汇编代码的方法、Intel架构指令格式及其指令机器码解析举例、非静态局部变量的分配、缓冲区溢出概念解释、栈随机化机制和栈破坏检测举例、64位架构程序举例等内容。
第4章(程序的链接):增加了ELF头解析举例、节头表结构及其解析举例、可执行文件的存储器映像举例、动态链接时程序无关代码(PIC)的实现等内容。
第5章(程序的执行):增加了对MIPS单周期数据通路结构的介绍。
第6章(层次结构存储系统):增加了DDR/DDR2/DDR3 SDRAM等主存芯片技术和64位架构Intel Core i7+Linux的存储系统介绍。
第7章(异常控制流):增加了进程的存储器映射及其共享对象和私有的写时拷贝对象的基本概念、程序加载处理过程、故障的信号处理和非本地跳转等内容。
第8章(I/O操作的实现):增加了文件流缓冲区及其读写操作、QPI总线、存储器总线、PCI-Express总线以及基于总线的硬件互连结构等内容。
5.如何阅读本书
本书的出发点是试图将计算机系统每个抽象层中涉及的重要概念通过程序的开发和运行过程这个主线串起来,因而本书涉及的所有问题和内容都是从程序出发的。这些内容或者涉及程序中数据的表示及运算;或者涉及程序对应的机器级表示;或者涉及多个程序模块的链接;或者涉及程序的加载及运行;或者涉及程序执行过程中的异常中断事件;或者涉及程序中的I/O操作等。从读者熟悉的程序开发和运行过程出发来介绍计算机系统基本概念,可以使读者将新学的概念与已有的知识关联起来,不断拓展和深化知识体系。特别是,因为所有内容从程序出发,所以所有内容都可以通过具体程序进行验证,边学边干中使所学知识转化为实践能力。
本书虽然涉及内容较广,但所有内容之间具有非常紧密的关联,因而,建议读者在阅读本书时采用“整体性”学习方法,通过第1章的学习先建立一个粗略的计算机系统整体框架,然后不断地通过后续章节的学习,将新的内容与前面的内容关联起来,以逐步细化计算机系统框架内容,最终形成比较完整的、相互密切关联的计算机系统整体概念。
本书提供了大量的例题和课后习题,这些题目大多是具体的程序示例,通过对这些示例的分析或验证性实践,读者可以对基本概念有更加深刻的理解。因此,在阅读本书时,若遇到一些难以理解的概念,可以先不用仔细琢磨,而是通过具体的程序示例对照基本概念和相关手册中的具体规定进行理解。
本书提供的小贴士对理解书中的基本概念很有用,但是,由于篇幅有限,这些补充资料不可能占用很大篇幅,因而大多是简要内容。如果读者希望了解更多的细节内容,可以自行到互联网上查找。
本书内容虽然涉及高级语言程序设计、数字逻辑电路、汇编语言程序、计算机组成与系统结构、操作系统、编译和链接等,但是,本书主要讲解它们之间的关联,而不提供其细节,如果读者想要了解更详细的关于数字系统设计、操作系统、编译技术、计算机体系结构等方面的内容,则还要阅读关于这些内容的专门书籍。不过,若读者学完本书后再去阅读这些方面的专门书籍,则会轻松很多。
6.致谢
衷心感谢在本书的编写过程中给予我热情鼓励和中肯建议的各位专家、同事和学生们,正是因为有他们的鞭策、鼓励和协助,才能顺利完成本书的编写。
在本书的编写过程中,得到了国防科技大学王志英教授、北京航空航天大学马殿富教授、西北工业大学周兴社教授、武汉大学何炎祥教授、北京大学陈向群教授等各位专家的悉心指导和热情鼓励;浙江大学城市学院杨起帆教授对本书的前三章进行仔细审阅,提出了许多宝贵的修改意见;西安邮电大学陈莉君教授、山东大学杨兴强教授和中国石油大学张琼声副教授从书稿的篇章结构到内容各方面都提出了许多宝贵的意见;中国海洋大学蒋永国副教授对本书的编写修改提出了很好的建议;中国石油大学范志东同学对本书第8章部分内容提出了宝贵的修改意见,并提供了第4章中某可执行文件程序头表中的部分信息。在此对以上各位老师、学生和有关院系一并表示衷心的感谢。
本书是以作者在南京大学从事“计算机组成与系统结构”“计算机系统基础”两门课程教学所积累的部分讲稿内容为基础编写而成的,感谢南京大学各位同仁和各届学生对讲稿内容和教学过程所提出的宝贵反馈和改进意见,使得本教材的内容得以不断改进和完善。特别感谢本书第2作者余子濠博士的辛勤付出,他对书中大部分程序进行了验证,并对书中相关内容与对应手册中的规定进行了详细的核对和审查,对一些关键内容提出了许多有益的修改意见。此外,唐杰副教授和路通教授对本书的内容和篇章结构提出了宝贵的意见,并提供了部分编程实例;2015级唐瑞泽和谢旻晖同学等也为本书的编写和修订提供了有益的素材;蒋炎岩博士对本书的结构和编写思路提出了宝贵的意见。
特别感谢机械工业出版社华章分社在本书的编写过程中提供的极大支持,包括提供大量国外优秀的相关图书资料,并多次组织国内权威专家进行相关研究和具体指导等。最后,要特别感谢本书的责任编辑刘立卿女士,她极其专业和非常细致的审校和编辑工作为本书的出版质量提供了可靠的保证。
7.结束语
本书广泛参考了国内外相关的经典教材和教案,在内容上力求做到取材先进并反映技术发展现状;在内容的组织和描述上力求概念准确、语言通俗易懂、实例深入浅出,并尽量利用图示和实例来解释和说明问题。但是,由于计算机系统相关技术在不断发展,新的思想、概念、技术和方法不断涌现,加之作者水平有限,在编写中难免存在不当或遗漏之处,恳请广大读者对本书的不足之处给予指正,以便在后续的版本中予以改进。

袁春风
2018年5月于南京

上架指导

计算机\计算机组成

封底文字

计算机教学的改革是一项需要付出艰苦努力的长期任务,“系统思维”能力的提高更是一件十分困难的事。计算机的教材还需要与时俱进,不断反映技术发展的最新成果。一本好的教材应能激发学生的好奇心和愿意终身为伴的激情。愿更多的学校参与“计算机系统”教学的改革,愿这本教材在教学实践中不断完善,为我国培养从事系统级创新的计算机人才做出更大贡献。
—— 中国工程院院士 李国杰

本书在培养学生计算机系统能力方面的积极作用受到国内许多高校的认可,第2版修订广泛吸取了这些高校的反馈意见,并结合近年来计算机系统相关技术的变革,拓宽了领域知识的覆盖面,更加合理地构建了知识框架。
本书基于“IA-32+Linux+GCC+C语言”平台介绍计算机系统基础内容,通过讲解高级语言中的数据、运算、语句、过程调用和I/O操作等在计算机系统中的实现细节,使读者能够很好地将高级语言程序、汇编语言、编译和链接、组成原理、操作系统等相关的基础内容有机贯穿起来,以建立完整的计算机系统概念,从而能深刻理解计算机系统中各个抽象层之间的等价转换关系;同时,由于本书描述了高级语言程序对应的机器级行为,因此它可以为程序员解疑答惑,从而帮助程序员在了解程序的机器级行为的基础上编写出高效的程序,并在程序调试、性能提升、程序移植和保证健壮性等方面成为高手。
本书主要内容:
● 计算机系统概述 ● 数据的机器级表示与处理
● 程序的转换及机器级表示 ● 程序的链接
● 程序的执行 ● 层次结构存储系统
● 异常控制流 ● I/O操作的实现

袁春风 南京大学计算机科学与技术系教授。主要研究领域为大数据计算与并行处理技术、Web信息检索与文本挖掘技术等。在相关领域承担科研项目近40项,发表论文近70篇,两次获江苏省科技进步二等奖,并获江苏省优秀软件一等奖。主持的“计算机组成原理”和“计算机组成与系统结构”课程被遴选为国家级精品课程、国家级精品资源共享课、江苏省精品课程;主编的《计算机组成与系统结构》以及《计算机组成与系统结构习题解答与教学指导》获“十二五”普通高等教育国家级规划教材和江苏省精品教材;作为主要成员获2013年江苏省教学成果特等奖和2014年国家教学成果二等奖。“计算机系统基础(一):程序的表示、转换与链接”获国家精品在线开放课程,“计算机组成与系统结构”课程网站获江苏省优秀多媒体课件特等奖。

图书序言

(中国工程院院士 李国杰)
随着移动互联网、普适计算、云计算和物联网的普及,计算机的应用已渗透到经济和社会生活的各个角落。各行各业的应用需求千差万别,要求未来的计算机性能更高、适应性更强、使用更方便、成本和功耗更低、安全性更好等等,但能从事这种创新设计的人才从哪里来?我国的计算机专业培养的毕业生能否担当起这一重任?计算机界的有识之士一直在思考这个影响长远发展的大事情。
 李国杰院士是我国计算机界的老一辈科学家,在并行处理、计算机体系结构、人工智能、组合优化等方面成果卓著,荣获过多项国家级奖励,领导中科院计算所和曙光公司为发展我国高性能计算机产业、研制龙芯高性能通用CPU芯片做出了重要贡献,对国内计算机科技、教育和产业的发展也提出过有影响的政策建议。
计算机专业已为我国培养了大量有用人才,但随着其他专业的学生也普遍学习计算机课程,计算机专业似乎有点迷失了方向。社会上开始流行这样的说法:计算机本科学生的硬件设计能力不如电子工程专业,行业应用软件开发能力不如熟悉本行业的其他专业学生,问题分析和算法设计能力不如数学专业学生。有些高中毕业生报考大学时不愿意报考计算机专业,他们认为通信专业学的计算机课程甚至比计算机专业还多。这些现象迫使我们回答:究竟计算机专业的特征和强项是什么?
一言以蔽之,计算机专业的重要特征是“系统思维”。所谓“系统思维”是指对系统不同层次的抽象和归纳、对整机系统的性能分析和优化、对系统出现的各类错误的诊断和维护、对计算机技术发展趋势全局性的理解等等。其他专业学计算机知识是为了应用计算机技术解决不同领域的实际问题,而计算机专业的目标之一是培养能设计和制造计算机、在计算技术领域实现创新的人才,不只是培养会编程序的“码农”。计算机专业的学生应具有系统层面的理解能力,能站在系统的高度解决应用问题。总之,对计算机系统是否有较深入的了解是区别计算机专业人才和非专业人才的重要标志。
计算机是处理信息的复杂系统。但长期以来我们采用“解剖学”的思路进行计算机教学,按照硬件、软件、应用等分类横切成几门相对独立的课程,使得计算机系毕业的学生对整个计算机系统缺乏完整的理解。如果问已经学完全部课程的学生,从你在键盘上敲一个字母键到屏幕上出现一个字母,在这一瞬间计算机中哪些硬件和软件在运转,如何运转?可能绝大多数学生都讲不清楚。对于更复杂的一段应用程序,计算机内部究竟如何一步一步地实现,不但学生们感到茫然,估计能讲明白的老师也不太多。造成这种局面的原因是我们不重视“计算机系统”的教育,缺乏“系统”思维观念。我国计算机一级学科中,最薄弱的二级学科是计算机系统结构,计算机专业的大学生中有兴趣从事系统结构研究的学生也很少,这可能是我国计算机领域自主创新不足的重要原因。未来计算机应用的性能和满意度越来越依靠软硬件磨合、优化的程度,也就是说,掌握系统知识的人将越来越受重视。
目前国内大学的计算机专业课程,如数字逻辑电路、计算机组成原理、汇编程序设计、操作系统、编译原理、程序设计等,都局限在一个抽象层次,很少讲授层次之间的关联,缺乏全局观。虽然少数学校开设了“计算机系统概论”之类的课程,但多数是专业课程的粗浅介绍,还没有上升到“系统思维”的高度。
南京大学计算机系很重视计算机教学的改革,对美国麻省理工学院、加州大学伯克利分校、斯坦福大学、卡内基梅隆大学等著名大学与计算机系统有关的课程进行了深入的对比分析,找出了我国大学在课程设置和教学内容上的差距。他们将过去的“计算机系统概论”和“计算机组成与系统结构”两门课的内容重新组合,形成新的“计算机系统基础”和“计算机组成与设计”两门课,前者是全系学生的必修课。南京大学为提高学生计算机系统思维能力做了有益的尝试。
摆在读者面前的这本《计算机系统基础》是南京大学袁春风教授多年来致力于计算机教学改革的结晶。袁教授在计算机组成和系统结构的教学方面积累了丰富的经验,目前正在主持国家精品课程和国家级精品资源共享课“计算机组成原理”的教学工作,并主持完成了《计算机系统基础》教材的编写工作。这本教材通过讲解高级语言中数据、运算、过程调用和I/O操作等在计算机系统中的实现细节,使读者在学习时将程序设计、汇编语言、系统结构、操作系统、编译链接中关键的系统概念贯穿起来,真正明白计算机系统如何运转。这本教材是从程序员如何认识系统的角度编写的,书中通过解释计算机如何执行非常简单的一段打印“hello”的程序,让程序员理解与高级语言程序对应的机器行为,这是一种训练“系统思维”的好方式。我相信本书将为读者在软硬件磨合、性能调试优化、软件移植等方面打下更坚实的基础。
计算机教学的改革是一项需要付出艰苦努力的长期任务,“系统思维”能力的提高更是一件十分困难的事。计算机的教材还需要与时俱进,不断反映技术发展的最新成果。一本好的教材应能激发学生的好奇心和愿意终身为伴的激情。愿更多的学校参与到“计算机系统”教学的改革中来,愿这本教材在教学实践中不断完善,为我国培养从事系统级创新的计算机人才做出更大贡献。
是为序。

李国杰

作者简介

袁春风 余子濠 编著:袁春风 南京大学计算机科学与技术系教授。主要研究领域为大数据计算与并行处理技术、Web信息检索与文本挖掘技术等。在相关领域承担科研项目近40项,发表论文近70篇,两次获江苏省科技进步二等奖,并获江苏省优秀软件一等奖。主持的“计算机组成原理”和“计算机组成与系统结构”课程被遴选为国家级精品课程、国家级精品资源共享课、江苏省精品课程;主编的《计算机组成与系统结构》以及《计算机组成与系统结构习题解答与教学指导》获“十二五”普通高等教育国家级规划教材和江苏省精品教材;作为主要成员获2013年江苏省教学成果特等奖和2014年国家教学成果二等奖。“计算机系统基础(一):程序的表示、转换与链接”获国家精品在线开放课程,“计算机组成与系统结构”课程网站获江苏省优秀多媒体课件特等奖。

图书目录

丛书序言
序  言
前  言
第一部分 系统概述和可执行目标文件的生成
第1章 计算机系统概述2
 1.1 计算机基本工作原理2
   1.1.1 冯·诺依曼结构基本思想2
   1.1.2 冯·诺依曼机基本结构3
   1.1.3 程序和指令的执行过程4
 1.2 程序的开发与运行7
   1.2.1 程序设计语言和翻译程序7
   1.2.2 从源程序到可执行文件9
   1.2.3 可执行文件的启动和执行10
 1.3 计算机系统的层次结构12
   1.3.1 计算机系统抽象层的转换12
   1.3.2 计算机系统核心层之间的关联14
   1.3.3 计算机系统的不同用户16
 1.4 计算机系统性能评价18
   1.4.1 计算机性能的定义19
   1.4.2 计算机性能的测试19
   1.4.3 用指令执行速度进行性能评估21
   1.4.4 用基准程序进行性能评估22
   1.4.5 Amdahl定律23
 1.5 本书的主要内容和组织结构24
 1.6 小结27
 习题27
第2章 数据的机器级表示与处理30
 2.1 数制和编码30
   2.1.1 信息的二进制编码30
   2.1.2 进位计数制32
   2.1.3 定点与浮点表示36
   2.1.4 定点数的编码表示36
 2.2 整数的表示41
   2.2.1 无符号整数和带符号整数的表示41
   2.2.2 C语言中的整数及其相互转换42
 2.3 浮点数的表示44
   2.3.1 浮点数的表示范围44
   2.3.2 浮点数的规格化45
   2.3.3 IEEE 754浮点数标准45
   2.3.4 C语言中的浮点数类型49
 2.4 十进制数的表示51
   2.4.1 用ASCII码字符表示51
   2.4.2 用BCD码表示51
 2.5 非数值数据的编码表示52
   2.5.1 逻辑值52
   2.5.2 西文字符52
   2.5.3 汉字字符53
 2.6 数据的宽度和存储55
   2.6.1 数据的宽度和单位55
   2.6.2 数据的存储和排列顺序57
 2.7 数据的基本运算61
   2.7.1 按位运算和逻辑运算61
   2.7.2 左移运算和右移运算61
   2.7.3 位扩展运算和位截断运算63
   2.7.4 整数加减运算64
   2.7.5 整数乘除运算68
   2.7.6 常量的乘除运算71
   2.7.7 浮点数运算72
 2.8 小结78
 习题79
第3章 程序的转换及机器级表示87
 3.1 程序转换概述87
   3.1.1 机器指令及汇编指令88
   3.1.2 指令集体系结构89
   3.1.3 生成机器代码的过程89
 3.2 IA-32指令系统概述94
   3.2.1 数据类型及其格式95
   3.2.2 寄存器组织和寻址方式96
   3.2.3 机器指令格式101
 3.3 IA-32常用指令类型及其操作103
   3.3.1 传送指令103
   3.3.2 定点算术运算指令106
   3.3.3 按位运算指令109
   3.3.4 控制转移指令110
   3.3.5 x87浮点处理指令115
   3.3.6 MMX/SSE指令集116
 3.4 C语言程序的机器级表示118
   3.4.1 过程调用的机器级表示118
   3.4.2 选择语句的机器级表示132
   3.4.3 循环结构的机器级表示136
 3.5 复杂数据类型的分配和访问139
   3.5.1 数组的分配和访问139
   3.5.2 结构体数据的分配和访问144
   3.5.3 联合体数据的分配和访问146
   3.5.4 数据的对齐148
 3.6 越界访问和缓冲区溢出151
   3.6.1 缓冲区溢出151
   3.6.2 缓冲区溢出攻击153
   3.6.3 缓冲区溢出攻击的防范155
 3.7 兼容IA-32的64位系统158
   3.7.1 x86-64的发展简史158
   3.7.2 x86-64的基本特点159
   3.7.3 x86-64的基本指令和对齐159
   3.7.4 x86-64的过程调用161
   3.7.5 x86-64的浮点操作与SIMD指令165
 3.8 小结166
 习题167
第4章 程序的链接182
 4.1 编译、汇编和静态链接182
   4.1.1 编译和汇编182
   4.1.2 可执行目标文件的生成184
 4.2 目标文件格式186
   4.2.1 ELF目标文件格式186
   4.2.2 可重定位目标文件格式187
   4.2.3 可执行目标文件格式190
   4.2.4 可执行文件的存储器映像192
 4.3 符号表和符号解析193
   4.3.1 符号和符号表193
   4.3.2 符号解析196
   4.3.3 与静态库的链接199
 4.4 重定位201
   4.4.1 重定位信息202
   4.4.2 重定位过程202
 4.5 动态链接206
   4.5.1 动态链接的特性207
   4.5.2 程序加载时的动态链接207
   4.5.3 程序运行时的动态链接209
   4.5.4 位置无关代码210
 4.6 小结214
 习题215
第二部分 可执行目标文件的运行
第5章 程序的执行222
 5.1 程序执行概述222
   5.1.1 程序及指令的执行过程222
   5.1.2 CPU的基本功能和组成224
   5.1.3 打断程序正常执行的事件226
 5.2 数据通路基本结构和工作原理227
   5.2.1 数据通路基本结构227
   5.2.2 数据通路的时序控制229
   5.2.3 总线式数据通路230
   5.2.4 单周期数据通路235
 5.3 流水线方式下指令的执行238
   5.3.1 指令流水线的基本原理238
   5.3.2 适合流水线的指令集特征241
   5.3.3 CISC和RISC风格指令集242
   5.3.4 指令流水线的实现245
   5.3.5 高级流水线实现技术248
 5.4 小结249
 习题250
第6章 层次结构存储系统253
 6.1 存储器概述253
   6.1.1 存储器的分类253
   6.1.2 主存储器的组成和基本操作255
   6.1.3 存储器的主要性能指标255
   6.1.4 各类存储元件的特点256
   6.1.5 存储器的层次结构257
 6.2 主存与CPU的连接及其读写操作257
   6.2.1 主存芯片技术257
   6.2.2 主存与CPU的连接及其读写260
   6.2.3 “装入”指令和“存储”指令操作过程263
 6.3 硬盘存储器266
   6.3.1 磁盘存储器的结构266
   6.3.2 磁盘存储器的性能指标268
   6.3.3 磁盘存储器的连接269
   6.3.4 固态硬盘270
 6.4 高速缓冲存储器271
   6.4.1 程序访问的局部性271
   6.4.2 cache的基本工作原理273
   6.4.3 cache行和主存块的映射275
   6.4.4 cache中主存块的替换算法281
   6.4.5 cache一致性问题282
   6.4.6 影响cache性能的因素283
   6.4.7 IA-32的cache结构举例284
   6.4.8 cache和程序性能285
 6.5 虚拟存储器289
   6.5.1 虚拟存储器的基本概念289
   6.5.2 虚拟地址空间290
   6.5.3 虚拟存储器的实现291
   6.5.4 存储保护299
 *6.6 IA-32+Linux中的地址转换300
   6.6.1 逻辑地址到线性地址的转换301
   6.6.2 线性地址到物理地址的转换306
 *6.7 实例:Intel Core i7+Linux存储系统308
   6.7.1 Core i7的层次化存储器结构308
   6.7.2 Core i7的地址转换机制308
   6.7.3 Linux系统的虚拟存储管理311
 6.8 小结314
 习题315
第7章 异常控制流322
 7.1 进程与进程的上下文切换322
   7.1.1 程序和进程的概念322
   7.1.2 进程的逻辑控制流323
   7.1.3 进程的上下文切换325
   7.1.4 进程的存储器映射326
   7.1.5 程序的加载和运行329
 7.2 异常和中断332
   7.2.1 基本概念333
   7.2.2 异常的分类334
   7.2.3 中断的分类337
   7.2.4 异常和中断的响应过程338
 *7.3 IA-32+Linux中的异常和中断340
   7.3.1 IA-32的中断向量表340
   7.3.2 IA-32的中断描述符表341
   7.3.3 IA-32中异常和中断的处理342
   7.3.4 Linux对异常和中断的处理344
   7.3.5 IA-32+Linux的系统调用348
 7.4 小结350
 习题351
第8章 I/O操作的实现354
 8.1 I/O子系统概述354
 8.2 用户空间I/O软件357
   8.2.1 用户程序中的I/O函数358
   8.2.2 文件的基本概念359
   8.2.3 系统级I/O函数361
   8.2.4 C标准I/O库函数363
   8.2.5 用户程序中的I/O请求368
 8.3 I/O硬件与软件的接口370
   8.3.1 I/O设备370
   8.3.2 基于总线的互连结构371
   8.3.3 I/O接口的功能和结构374
   8.3.4 I/O端口及其编址376
   8.3.5 I/O控制方式377
 8.4 内核空间I/O软件384
   8.4.1 与设备无关的I/O软件384
   8.4.2 设备驱动程序386
   8.4.3 中断服务程序387
 8.5 小结389
 习题390
附录A 数字逻辑电路基础395
附录B gcc的常用命令行选项409
附录C GDB的常用命令411
参考文献414

教学资源推荐
作者: [美]莫里斯·赫利希(Maurice Herlihy),[美]尼尔·沙维特(Nir Shavit),[美]维克多·卢昌科(Victor Luchangco),[美]迈克尔·斯皮尔(Michael Spear) 著
作者: 李平 杜涛 王靖
作者: Arnold S. Berger
参考读物推荐
作者: 高显生 编著
作者: NVIDIA 技术服务(北京)有限公司 著
作者: [美] 沃尔弗拉姆·多纳特(Wolfram Donat) 著