计算机系统漫游
1.1 信息就是位+上下文
hello程序的生命周期是从一个源程序开始的
源程序实际上就是一个由值0和1组成的位序列,8个位组织成一组称为字节
像hello.c这样由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件
基本思想:系统中所有信息都是由一串比特表示的,区分不同数据对象的唯一方法就是我们读到这些数据对象时的上下文
1.2 程序被其他程序翻译成不同的格式
- 预处理阶段:根据以字符#开头的命令,修改原始的C程序
- 编译阶段:将文本文件翻译成汇编语言程序的文本文件
- 汇编阶段:将汇编语言程序的文本文件翻译成机器语言指令
- 链接阶段:负责处理合并库函数
GNU项目已经开发出一个包含Unix操作系统的所有主要部件的环境,但内核除外
1.3 了解编译系统如何工作是大有益处的
优化程序性能
理解链接时出现的错误
避免安全漏洞
缓冲区溢出错误是造成大多数网络和Internet服务器上安全漏洞的主要原因
1.4处理器读并解释储存在内存中的指令
Unix系统运行可执行文件,需要运用shell,shell是一个命令行解释器
1.4.1 系统的硬件组成
1.总线
贯穿整个系统高德是一组电子管道,称作总线,携带信息字节并负责在各个部件间传递
2.I/O 设备
系统与外部世界的联系通道
3.主存
临时存储设备,处理器执行程序时,用来存放程序和程序处理的数据
4.处理器
解释(或执行)存储在主存中指令的引擎
1.4.2 运行hello程序
1.5 高速缓存至关重要
针对处理器与主存之间的这种差异,采用高速缓存存储器,作为暂时的集结区域
高速缓存存储器存在的应用程序员能够利用高速缓存将程序的性能提高一个数量级
1.6 存储设备形成层次结构
1.7 操作系统管理硬件
操作系统两个基本功能:
- 1.防止硬件被失控的应用程序滥用;
- 2.向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备
1.7.1 进程
操作系统对一个正在运行的程序的一种抽象.在一个系统上可以同时运行多个进程,而每个进程都好像是独占地使用硬件.而并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的
操作系统保持跟踪进程运行所需的所有状态信息.这种状态也就是上下文包括许多信息
1.7.2 线程
一个进程实际上由许多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同一代码和全局数据
1.7.3 虚拟内存
1.7.4 文件
文件就是字节序列.系统中的所有输入输出都是通过使用以小组称为Unix I/O 的系统函数调用读写文件来实现的
1.8 系统之间利用网络通信
1.9 重要主题
系统是硬件和系统软件相互交织的几何体,它们必须共同协作以达到运行应用程序的最终目的
1.9.1 Amdahl定律
Amdahl定律主要观点:要想显著加速整个系统,必须提升全系统中相当大的部分的速度
1.9.2 并发和并行
1.线程级并发
超线程是一项允许一个CPU执行多个控制流的技术
2.指令级并行
在较低的抽象层次上,现代处理器可以同时执行多条指令的属性称为指令级并行
如果处理器可以达到比一个周期一条指令更快的执行速率,就称之为超标量处理器
3.单指令,多数据并行
在最低层次上,许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式称为单指令,多数据即SIMD并行