1. 计算机系统漫游
跟踪“hello world”程序的生命周期,来开始对系统的学习
1.1 信息就是位+上下文
系统中的所有信息都是由一串比特表示的,区分不同数据对象的唯一办法就是读到这些数据对象时的上下文
1.2 程序被其他程序翻译成不同的格式
在Unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的
linux> gcc -o hello hello.c
在这里,GCC读取hello.c,并把它翻译成可执行目标文件hello
如图所示,执行这四个阶段的程序(预处理器、编译器、汇编器和链接器)一起构成了编译系统(compilation system)
1.3 了解编译系统如何工作大有益处
- 优化程序性能
- 理解链接时出现的错误
- 避免安全漏洞
1.4 处理器读并解释存储在内存中的指令
要想在unix运行可执行文件hello,将文件名hello输入到称为shell的应用程序中
linux> ./hello
hello, world
linux>
1.4.1 系统的硬件组成
- 总线
- I/O设备
- 主存
- 处理器
1.4.2 运行hello程序
键盘输入"./hello",shell程序将字符读入寄存器,再存到内存
敲回车后,shell加载可执行的hello文件,从磁盘到主存
//直接存储器读取技术DMA,可以使数据不通过处理器直接从磁盘到主存
处理器开始执行hello程序,"hello, world\n"字符串从主存复制到寄存器,再复制到显示设备,最终显示
1.5 高速缓存至关重要
高速缓存cache弥补了处理器和主存的差异
//利用好cache可以极大地提升程序性能
1.6 存储设备形成层次结构
寄存器
高速缓存(SRAM)
主存(DRAM)
本地磁盘
远程存储(web服务器,分布式文件系统)
1.7 操作系统管理硬件
操作系统是应用程序和硬件之间插入的一层软件
- 防止失控的应用程序滥用硬件
- 向应用程序提供简单的机制来操作复杂的低级硬件
1.7.1 进程
进程是操作系统对一个正在运行的程序的一种抽象
1.7.2 线程
现代系统中,一个进程实际上可以由多个称为线程的执行单元组成
1.7.3 虚拟内存
虚拟内存为每个进程提供了一种假象,即每个进程都在独占内存
1.7.4 文件
文件向应用程序提供了了一个统一的视图,来看待系统中可能含有的各式各样的I/O设备
1.8 系统之间利用网络通信
1.9 重要主题
1.9.1 Amdahl定律
加速比 S = T o l d / T n e w = 1 ( 1 − α ) + α / k 加速比S=T_{old}/T_{new}=\frac{1}{(1-\alpha)+\alpha/k} 加速比S=Told/Tnew=(1−α)+α/k1
1.9.2 并发和并行
并发指一个具有多个活动的系统
并行指的是用并发来是一个系统运行得更快
- 线程级并发
- 指令级并发
- 单指令、多数据并行
1.9.3 计算机系统中抽象的重要性
文件是对I/O设备的抽象,虚拟内存是对程序存储器的抽象,而进程是对一个正在运行的程序的抽象
虚拟机是对整个计算机的抽象