首页 > 技术文章 > CSAPP读书笔记:Chapter I

koktlzz 2021-05-26 01:12 原文

信息就是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

20210428011313

系统的硬件组成

  • 总线(Buses):贯穿整个系统的一组电子管道,负责在各个组件之间传递给定大小的字节块(称为word)。word的大小是系统的基本参数,一般有4字节(32位)或8字节(64位)两种;
  • I/O设备:系统与外部世界连接的桥梁。图中的I/O设备有用于用户输入的键盘⌨️和鼠标

推荐阅读