本章主要通过hello.c文件从编辑到执行的生命周期,简单的描述了信息的表示、编译步骤、系统组成、程序运行步骤等,并向读者介绍了计算机存储结构和计算机系统相关内容。
1.编写hello.c程序
在计算机中,所有的文件实际上都是由0、1组成的序列。文中提到的hello.c文件就是以字节序列的方式存在文件中的。这种文件通常成为文本文件,文本文件实际是由ASCII字符或GBK等标准字符编码而成的文件,除了文本文件还有二进制文件。在书中介绍的Unix系统中,一切皆文件的思想想必大家都早有耳闻,其本质就是系统中所有的信息,都是由一串比特表示的。如果要对计算机中信息的表示由深入的思考,则要深入探究书中第二章的内容。
2.编译hello.c代码
在hello.c文件中,写入符合规范的C语言代码后,若想让计算机认识我们所写的代码,编译这个步骤将会发挥很大的作用。
编译指的是将高级语言翻译成计算机能够认识的二进制文件,并且这个文件是可执行的。在书中介绍的编译系统几乎可以使用于所有的编译型语言。编译主要分为阶段分别为预处理阶段、编译器阶段、汇编阶段、链接阶段。每个阶段都分别负责不同的功能。
预处理阶段:预处理器将会修改我们写入的C语言代码,根据我们引入的一些文件头、宏定义等。此步骤会生成.i结尾的文件,在gcc中通常使用 -E 命令来生成。
编译阶段:编译器回将文本文件hello.i翻译成一个汇编语言程序。这个汇编程序会根据gcc的不同版本而有所不同,因为不同的计算机的系统略有不同。编译阶段通常会生成.s结尾的文件,在gcc中使用-s命令生成。
汇编阶段:汇编器会将生成的.i文件翻译成机器能够识别的二进制文件,并将结果保存在.o结尾的文件中。
链接阶段:链接阶段的主要功能是将编译器生成的目标文件和库文件合并成可执行文件,包括符号解析、重定位、去重复和生成可执行文件。
在工作中,认识并理解编译步骤具有非常大的作用,通常能够帮助我们及时排除bug,并且能够优化系统的性能。
3.执行hello程序
在第二步中,我们将文本文件hello.c编译成hello可执行文件,在Linux系统中,我们可以在命令行中输入./hello运行这个可执行文件,在我们输入这个命令,并回车之后,shell将会把它存放到内存中,并交给CPU进行调度。最终执行结果会通过总线输出到显示屏上。
4.总结
第一章主要介绍了计算机系统的基本概念和组成部分,以及计算机系统的层次结构和运行方式。分别介绍了计算机系统的五个主要组成部分:硬件、操作系统、应用程序、用户和数据。计算机系统的层次结构,包括硬件、操作系统、应用程序和用户四个层次。计算机系统的运行方式,包括指令周期、时钟周期和总线周期等。