闲逛计算机系统(一):从HelloWorld说起

  最近开始看《深入理解计算机系统》,为了记录自己的理解和感悟,打算开博来记录自己的心得体会,也算是一个读书笔记吧。今天是这一系列的第一篇,废话不多,马上开始。

  想必大家学习一门编程语言的时候都是从helloworld开始的,我们今天也从helloworld开始,深入了解下计算机系统。

1 #include<stdio.h>
2 int main()
3 {
4   printf("hello world\n") ;          
5 }

  helloworld程序首先由程序员利用编辑器把它编辑出来并存为hello.c的源文件,这是一个文本文件,现代操作系统中大部分都是使用ASCII编码方式来表示文本字符。在现代操作系统中,只有两种文件,一种是文本文件,一种是二进制文件。

  hello.c由程序员写出来之后,需要经过一个编译的过程,通过gcc编译器编译成目标文件。这个编译的过程分为四步:

  1. 预处理过程

    预处理过程把程序中的头文件用这些头文件中的实际代码代替,把它们直接插入到程序中。这样就得到了一个hello.i的文件

  2. 编译过程

    在编译过程中,编译器把C程序代码翻译成汇编语言,并产生一个名为hello.s的文件。汇编语言是高级语言和机器语言之间的一个桥梁。

  3. 汇编过程

    这个过程中,汇编器就把汇编语言翻译成机器所能看懂的机器语言,并保存在hello.o中。hello.o是一个二进制文件,文件中保存的都是机器指令。

  4. 连接过程

    经过上面三个过程,我们已经把C源代码翻译成了机器能理解的机器语言,但是在程序中会有一些C库函数,这些函数都已经被预先编译成机器语言保存在.o的文件中,例如helloworld中的printf函数,所以我们只需要把这些文件跟我们的hello.o文件链接起来就可以了。最后得到了hello文件,这是一个可执行文件,可以被加载到内存中,被系统调用执行。

  经过上面四个过程,我们就可以把一个源代码文件编译成机器能运行的可执行文件。

  接下来,我们再来说说计算机运行hello这个程序的整个过程。

  这个可执行文件刚开始是保存在磁盘上,当计算机要运行这个程序的时候,hello就被加载到内存中,接着程序指令被不断复制到寄存器中由CPU来执行,最后把"hello world"从寄存器中打到显示设备上。这就是hello程序整个执行过程。

  真实情况下hello程序运行过程还有很多细节,在这并没有提到,在以后的文章中会一一说明。今天就到这吧,希望自己可以坚持把深入理解计算机系统看完并且及时完成心得记录。

原文地址:https://www.cnblogs.com/lakb248/p/2950139.html