信息就是Bits + Context
一堆bit可以表示系统中的所有信息,包括磁盘中的文件、内存中的程序和用户数据以及网络中传输的数据,区分它们的唯一方式便是我们查看这些数据对象时所处的上下文(Context)。例如,相同的一串bit在不同的Context中可能代表一个整数,也可能代表一个浮点数,甚至字符串。
程序的转化过程
一个简单的C程序hello.c如下:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
高级的C程序文件hello.c被转化为一系列低级的机器语言指令,最后以二进制可执行文件存储在磁盘中。
- 预处理阶段(Preprocessor):预处理器修改C程序文件中以#号开头的命令。如hello.c中的
#include <stdio.h>
命令将会告诉预处理器系统头文件stdiio.h的内容,然后将其直接插入到程序文本中。生成的新程序文件为hello.i; - 编译阶段(Compilation):编译器将hello.i文件转化为由汇编语言组成的hello.s文件。每条汇编语句都描述了一条低级的机器语言指令,不同高级语言编译后的汇编语句是通用的;
- 汇编阶段(Assembly):汇编器将hello.s文件转化为由二进制机器语言指令的hello.o文件。如果我们用文本编辑器打开该文件,将会展现出一堆乱码;
- 链接阶段(Linking):由于我们的程序调用了
printf
函数,而它存在于一个名为printf.o的预编译文件中。链接器负责将该文件并入,得到最终的可执行文件hello。
系统的硬件组成
- 总线(Buses):贯穿整个系统的一组电子管道,负责在各个组件之间传递给定大小的字节块(称为
word
)。word
的大小是系统的基本参数,一般有4字节(32位)或8字节(64位)两种; - I/O设备:系统与外部世界连接的桥梁。图中的I/O设备有用于用户输入的键盘⌨️和鼠标