helloworld.c 的一次系统旅行(1) 读书笔记
#include <stdio.h> int main() { printf("hello, world\n"); }
跟随helloworld.c的脚步,来一次操作系统的短暂地观光之旅。
这条语句可能被无数地程序员写过,其内在就是一连串地010110...bits 序列, 它们8个一起构成bytes,每一个bytes代表1个 ASCII 字符。比如 35 对应着 ASCII表中的 '#'。 这里阐述了一个基本的概念,就是所有系统里的信息,包括文件、用户的数据、helloworld.c、memory里的信息;其根本都是010100110...。这些数据可能在不同的环境下表示不同的含义,可能是int number, float number, or machine instruction 。下图是helloworld.c 对应的 ascii 码。
为了让计算机识别这种高级语言, helloworld.c 会经过以下几个步骤:
编译系统完成了四步 c-i-s-o-eo ,首先加载 studio.h 到 program text 中,简称预编译。第二步,转换为汇编语言,包含些机器指令。第三步,将汇编语言转化成机器语言指令,最后一步,生成可执行二进制文件。
当你运行后,结果大概是这样,
那当我们运行这个程序时,到底后面发生了那些不为人知的故事呢?为此,我们得了解下系统的硬件基本结构:
bus 电子管道,在不同的部件中每次来回运送 4bytes (32bits)/8bytes(64bits) 数据。
当我们按下 执行这个编译好的 helloworld.c 文件,操作系统会依次执行以下 3个操作 reading/loading/writing 。
hello,world.