深入理解计算机系统这本书在豆瓣评分竟罕见的到了9.9分!
目前在读第三版,已读完前两章,补充在阅读过程中的笔记部分,如有任何疑问请评论指出。
本系列读书笔记不会记录全部内容,只是记录与实战相关、存在疑惑的部分,个人认为本书中的每一段话每一个字都很重要!

信息=位+上下文

#include <stdio.h>
int main()
{
    printf("Hello,world\n");
    return 0;
}

在linux中可以通过hexdump -C hello.c的ASCII码表示:

由于书中显示的是十进制,故转换成十进制与书中一致,例如\n 十六进制0a 对应的10进制 10

高级语言-->机器语言

为了能让hello.c运行,每条C语言(高级语言)需转换为低级语言指令。然后这些指令按照一种称为可执行目标程序的格式打包好,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行目标文件。
例如:
gcc -o hello hello.c

预处理阶段

由于程序第一行包含了stdio.h头文件,在预处理阶段会把stdio.h的内容直接插入程序文本中,从hello.c--->hello.i.

编译阶段

编译器将文本文件hello.i翻译成文本文件hello.s,它包含汇编语言.

汇编阶段

汇编器将hello.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序(relocatable object program)的格式。生成文件hello.o,hello.o是一个而仅仅只文件。

链接阶段

hello程序调用了printf()函数,printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中。最后生成可执行文件hello.

操作系统内核是应用程序和硬件之间的媒介。它提供三个基本的抽象:
1)文件时对I/O设备的抽象
2)虚拟内存是对主存和磁盘的抽象
3)进程是处理器、主存和I/O设备的抽象