深入理解计算机系统
第一章 计算机系统漫游
1.2 编译过程
1.4 运行hello.c
在terminal下:
$ gcc -o filename filename.c
会产生一个filename的可执行文件,执行可执行文件的命令
$ ./filename
在UNIX上编译可执行文件,是将文件名输入到称为外壳shell的应用程序中,外壳是一个命令行解释器。
1.6 储存设备层次结构
1.7 进程与线程
大多数系统中,可以运行的进程数是多余cpu数量的,这依赖于“上下文切换”。进程简单说是,当操作系统遇到新的进程,暂停并保存原有进程,执行新的进程,当新进程结束,操作系统返回旧的进程。
而线程比进程更高效。
一切皆文件,每个I/O设备都可以看作文件,包括磁盘、键盘、显示器,甚至是网络。
1.9 并发和并行
并发(concurrency)指一个同时具有多个活动的系统;并行(parallelism)指用并发使一个系统更快。
线程级并行、指令级并行、单指令多数据并行
抽象:文件是对IO的抽象、虚拟储存器是对程序储存器的抽象、进程是对一个正在运行的程序的抽象、虚拟机是对整个计算机的抽象。
第二章 信息的表示和处理
gcc可以编译不同版本的C语言程序,指令:$ gcc -std=c99 filename.c
,而$ gcc -std=c89 filename.c
或者gcc -ansi filename.c
是执行c90标准。
2.1 信息储存
二进制文件不具有可移植性,在不同的操作系统上具有不同的编码规则,因此二进制代码是不兼容的。