计算机系统漫游
1.这一章通过跟踪hello程序的生命周期开始系统的学习
#include <stdio.h> int main() { printf("hello, world\n"); }
hello 程序的生命周期从一个 源程序开始或者说源文件。源程序实际上就是由值0和1组成的位(bit)序列,8个位组成一组成为字节,每个字节表示程序中某个文本字符。大部分的现代系统使用ASCII标准表示文本字符,这种方式实际上就是用给一个唯一的单字节大小的整数值来表示每个字符。如图:
通过hello.c说明了 系统中所有的信息包括磁盘文件、存储器中的程序、存储器中存放的用户数据、网络上传送的数据,都是由一串为表示的。区分不同的数据对象的方法就是根据我们读到这些数据对象时的上下文。
2.hello.c被编译的过程 从源文件 编译之后变成可执行文件
- 预处理阶段(cpp)----hello.i(被修改源程序(文本))
- 编辑器(ccl) ----hello.s(汇编程序(文本))
- 汇编器(as) ----hello.o(可重定位目标程序(二进制))
- 连接器(ld) ----hello(可执行目标程序(二进制))
3.描述系统硬件组成:总线、I/O设备、处理器(CPU)、主存
4.hello运行的时候发生了什么:
- 外壳程序等待我们输入命令,我们在键盘上输入字符串./hello 然后外壳程序将字符串读入到寄存器中,在把它放到存储器中。
- 回车,外壳程序知道我们已经输入结束, 执行一系列指令加载可执行的hello文件,将hello目标文件中的代码和数据从磁盘复制到主存
- 一旦hello中的代码和数据被加载到主存中,处理器就开始执行hello程序的main程序的机器语言指令,这些指令将"hello, world\n" 字符串中的字节从主存复制到寄存器文件,在从寄存器文件中复制到显示设备,最终显示。
5.存储器的层次结构--CPU寄存器在顶部,接着是多层的硬件高速缓存存储器,DRAM主存和磁盘存储器。上层的存储设备比低层的存储设备更快,单位比特开销也更高。层次结构中,较高层次存储设备可以作为较低层次设备的高速缓存.
6.操作系统内核是应用程序和硬件之间的媒介,提供三个基本的抽象
- 文件是对I/O设备的抽象
- 虚拟存储器是对主存和磁盘的抽象
- 进程是对处理器、主存和I/O设备的抽象