书籍 Linux GNU C 程序观察的封面

Linux GNU C 程序观察

罗秋明

出版时间

2020-04-30

ISBN

9787302545491

评分

★★★★★
书籍介绍

本书所讨论的内容是“C语言程序设计”类课程的后续知识,涉及C程序在Linux环境下经过GCC编译/链接生成可执行文件以及在系统中运行的问题。本书能使读者在面对C程序的工程实践问题时,做到心中有数、处处不存疑。

全书共7章,第1章介绍环境准备,第2章介绍C程序的预处理、编译、汇编和链接的全过程,并介绍了一点关于GCC编译命令及编译选项、GDB调试初步概念,第3章专注于编译环节,即从C到汇编的转换,第4章专注于链接过程,第5章介绍可执行文件在系统中运行时,观察进程与系统的关系、进程对库的调用、程序异常行为等问题,第6、7章介绍一些性能剖析方法,包括GCC自带工具、库函数打桩方法、valgrind及perf工具的简单使用等,第8章介绍一个综合性的实例,即如何将HDFS文件系统使用的gzip压缩,从利用zlib库在CPU上计算转换成利用FPGA加速卡的过程。该实例涉及库的使用和修改、makefile以及相应的C程序实现等多方面知识,让读者从一个工程需求的角度考察其方案与实现。每章后面都有一些练习题,其中有一个与zlib库相关的任务贯穿了各章,读者通过这个连贯的练习将各章知识融会贯通。

/* 条目添加者注:大家可以看一下本书的前言,对于了解本书的定位和本书与作者其它书籍的关联有帮助。 */

前言

我们在系统软件的教学和学生培养中,深感教材的缺乏。以往只能在项目实践中,让学生通过网络上的零散资料来完成相关知识的补充学习,然后才能参与到项目中。我们认为,计算机作为实践性很强的学科,如果课堂教学和实验不能紧密联系具体的系统,无法面对和解决工程问题,就不能算成功。Linux系统作为一个开源的资源,为我们提供了良好的机会,可以将底层系统软件的相关技术细节完全呈现出来。为此,我们的第一步计划是提供最基本的一条学习通路,将应用程序和系统打通,形成系统软件技术学习丛书,其进阶学习流程如下。

学生在完成C语言程序设计、数据结构和算法课程的学习之后,可以通过本书补充C程序与系统的知识。C语言程序设计作为“上半部”知识,而本书作为“下半部”知识,从而形成C程序自身完整的知识结构。

然后将视角从一个程序扩展到整个系统中,需要面对多个进程并发的操作系统环境。此时仅靠本科操作系统原理性课程的学习仍是不够充分的。一方面,可以通过《操作系统之编程观察》(清华大学出版社,书号978-7-302-48973-3)介绍的用proc文件系统提供的内核运行数据,直观地观察Linux操作系统的进程调度与均衡、进程间通信、内存管理和文件系统等行为,加深理论概念的认识;另一方面从《操作系统原型: xv6分析与实验》(即将出版)对操作系统实现中的关键机制进行探索,掌握其编码实现的关键细节,弄懂操作系统编码实现的最核心知识。

最后,在有需要的时候学习《Linux技术内幕》(清华大学出版社,书号978-7-302-45100-6)。通过对真实的、完善的(相对于xv6的原型代码而言)、稳定的Linux内核代码进行学习,掌握Linux内核实现细节并可以尝试根据工程需要对Linux系统进行修改增强。

上述4个相关联、递进的知识板块及学习安排,是我们在PHPC(个人高性能计算机)系统研制的学生培养过程中积累下来的,希望能对有志于投身系统软件开发的读者有所帮助。

编者

2018年4月Linux GNU C程序观察

我们在当前的C语言程序设计教学工作中,对C语言的语法和编程技术虽然都已经讨论得非常充分,但是作为计算机的“系统观”的建立,只能说仅完成了一半的任务。从C语言如何转换到汇编语言进而生成机器码形式的可执行文件,以及可执行文件如何装入内存并在操作系统环境中运行的细节,对大多数完成本科课程学习的学生而言,仍未达到解惑的程度。学生也许可以通过在网络上找到的业界大牛们提供的零散材料,自行建立起相应的认识,但这毕竟是一个耗时和低效的学习过程。

本书希望将上述知识,组织成一个相对完整、便于学习与实践的材料,在计算机系统课程学习中(例如深圳大学的“计算机系统2”)作为实验补充材料,让学生全面接触从C语言转换到汇编、进而生成机器码形式的可执行文件直至运行的全过程。在这种学习安排下,即使学生未修学编译原理课程,也能大致理解编译过程所使用的代码转换模板、链接中的符号解析和重定位等知识。除此之外,本书也介绍了程序在系统中运行的各种行为、代码调试和性能剖析工具的使用,对程序生成过程和运行过程都进行细致的观察——类似于电路与系统课程使用的万用表、示波器和频谱仪。有了这些“测量工具”后,C语言的实验教学才能从当前的“犹抱琵琶半遮面”的境况,变得相对完整起来。

罗秋明

于深大荔园

2020.1

本书获得深圳市科创委基础研究项目JCYJ20170302153920897云环境中的异构存储资源分配与性能优化研究、JSGG20170822110100205基于开放技术的可信多路高端计算系统研发的资助。感谢深圳大学计算机与软件学院“计算机系统2”课程组的老师,大家一起完成了广东省教育厅应用型人才培养课程建设项目“计算机系统系列核心课程”的实验内容和教学材料的准备工作,其中的部分工作正是本书的内容。特别感谢刘刚老师在相关实验的设计开发中给予的帮助。

还要感谢2018级的研究生杜海鑫、张靖、吴坤鑫和沙士豪三位同学,他们承担了部分书稿的整理、校对和实验代码的设计及检验等工作。其中,杜海鑫同学完成了第8章zlib库的代码开发和部分撰写工作,并对第4章、第5章和第8章内容进行整理和校对。吴坤鑫同学提供了7.2节、7.3节和7.4节的材料。张靖同学负责第1章、第2章和第3章材料的校对,沙士豪同学负责第6章和第7章材料的校对。

在上述老师和同学的大力支持下,本书终于完稿并与读者见面。再次对他们表示衷心的感谢!

深圳大学计算机与软件学院副教授,广东省国产高性能计算系统工程技术研究中心副主任、深圳市服务计算与应用重点实验室常务副主任,长期从事高性能计算研究。华中科技大学计算机科学与技术博士学位。著《OpenMP编译原理及实现技术》《Linux技术内幕》《操作系统之编程观察》译《Intel Parallel Studio环境下的并行程序设计》。发表论文40多篇(含SCI/EI索引多篇),承担和参与国家、省、市科研项目多项,2009-2010年参与基于龙芯3多核处理器的万亿次个人高性能计算机KD-60研制2011~2012年参与基于龙芯3号8核处理器的普及型高性能计算机KD-90研制,上述成果通过安徽省科技厅鉴定。2004-今,深圳大学计算机与软件学院从事科研与教学工作,本科及研究生课程:《操作系统》《现代操作系统》《操作系统课程设计》《计算机体系结构》《Inte...

(展开全部)

目录
简要目录:
第1章实验环境构建 1
第2章程序编译与运行 38
第3章数据、运算与控制 86
第4章链接与可执行文件 161

显示全部
用户评论
非常棒的一本书,那本程序员的自我修养太老了,这本非常不错。
内容比较详细 有生动的案例