1.1 Information Is Bits + Context
每个源程序是有一连串二进制值组成,在不同的Context中,这个二进制序列多代表的意义不同。
C 语言好处:
1. C与Unix操作系统更紧密
2. C 是更小更简单的语言
3. C 有实用目的
但是C缺乏有用的支持(类,对象,异常)
1.2 Programs Are Translated byOther Programs into Different Forms
一个高级C程序需要被其他程序转换成低级的机器语言序列,称之为可执行对象程序并以二进制存储。在Unix 系统中,可运行此命令:gcc -o hello hello.c
GCC 编译器执行的四个阶段:
1. Preprocessing phase. Thepreprocessor(cpp) 根据#character修改源文件
。例如,#include<stdio.h>在第一行,把文件stdio.h直接插入到源文件。后缀名 .i。
2. Compilation phase。The compiler(ccl) (assembly-language program)把文件 .i 翻译成 .s 文件。 Assembly-languageprogram 能够把每个语句转换成低级的机器指令(即使不同的高级语言最后可被转换成相同的低级语言)。
3. Assembly phase。The assembler(as) 把 .s 翻译成机器语言并打包成可定位的对象程序 .o(binary file).
4. Linking phase. The linker(ld) 把需要的 .o 文件链接起来并生成可执行文件。
GCC 是 GNU(short for GNU’s not unix)开发的。The GNU 环境包括EMACS editor, GCC compiler,GDB debugger, assembler, linker。
1.3 汇编系统如何工作
为什么要理解汇编系统如何工作?
优化项目性能。
理解链接时错误。大部分复杂项目错误是由于链接器操作。
避免安全漏洞。大部分是由于buffer溢出。
1.4 处理器读并理解存储在内存中的指令
Shell 是一个命令行解释器,它不断地等待命令行的输入并执行输入的命令。如果输入的命令与内嵌的shell命令不一致,它假定这是一个可执行文件,然后加载并执行。
1.4.1 系统的硬件组织
Buses:是一个电子管道的收集者。在各个组件之间进行数据的传输,一般一次传输一个字(大部分系统为4Bytes)
I/O Devices: I/O用于连接外部世界的连接器。每个I/O设备通过连接器或者适配器跟I/Obus连接。连接器是一个嵌入到主板的芯片,适配器是一个可插入主板上的卡。
内存: 当处理器运行时,内存临时存储正在运行的程序和所需的数据。它由动态随机存储芯片组成。不同的机器,对应的数据项大小可能不同。例如IA32,short数据类型需要2个字节,int,float,long数据类型需要4个字节,double数据类型需要8个字节。
处理器:它是一个执行存储在内存程序的引擎,在处理器中最主要的PC,在任何时候,PC都指向正在运行指令的下一条指令的地址。处理器根据指令集对指令进行操作,每个指令都涉及多个步骤。寄存器文件是一个小的存储设备(由字大小的寄存器组成并且有唯一的名字)。
CPU执行一个指令的简单操作:
1、 Load:从内存copy一个字节或者字到寄存器。
2、 Store:从寄存器copy一个字节或者字到内存。
3、 Operate:从两个寄存器中copy两个内容到ALU,计算之后结果存储到其中一个寄存器。
4、 Jump:从指令本身取出一个字并copy到PC中。
1.4.2 运行的hello程序
最初,shell程序已经开始执行并等待输入命令,当在命令行输入“./hello”之后,shell把这些字符存储到寄存器和内存中,当按“enter”键之后(shell将知道已完成输入),shell将把存储在硬盘上的可执行文件(代码和数据)加载到内存(使用DMA技术直接从硬盘加载到内存而不需要经过处理器)。一旦代码和数据加载完成,处理器则从main开始执行机器语言指令。
1.5 高速缓存至关重要
1.6 存储设备的层次结构
1.7 操作系统管理硬件
基本功能:1. 防止硬件被滥用 2. 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
1.7.1 进程
它是操作系统对一个正在运行的程序的一种抽象。(并发机制:上下文切换)
1.7.2 线程
一个进程可有多个线程执行单元组成,每个线程都运行在进程的上下文中。
1.7.3 虚拟存储器(每个进程看到的是一致的存储器,称为虚拟地址空间)
1. 程序代码和数据
2. 堆
3. 共享库
4. 栈
5. 内核虚拟存储器
1.7.4 文件
文件就是字节序列,每个I/O设备都可视为文件。系统中的输入输出都是通过UNIX I/O的系统函数调用读写文件来实现的。
1.8 系统之间利用网络通信
一个熟悉的telnet应用在一个远程主机上运行hello程序。
1.9 重要主题
1.9.1 并发和并行
并发是一个通用概念,指一个同时具有多个活动的系统。
并行指的是用并发使一个系统运行的更快。
1. 线程级并发
2.指令级并行
3. 单指令、多数据并行
1.9.2 计算机系统中抽象的重要性
文件是对I/O的抽象
虚拟存储器是对程序存储器的抽象
进程是对一个正在运行的程序的抽象
虚拟机是对整个计算机的抽象