第1章
1.1 信息就是位+上下文
- 源程序实际上就是一个由值0和1组成的位(又称位比特)序列,8个位被组织成一组,称为字节(表示程序中的文本字符)。程序是以字节序列的方式存储在文件中的,每个字节都有一个整数值,对应于某些字符,每个文本行都是以一个看不见的换行符’\n‘来结束。只由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
- 系统中的所有信息———包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示。区分不同的数据对象的唯一方法就是读到这些数据对象时的上下文。
1.2 程序被其他程序翻译成不同的格式
- 程序为了能够在系统上运行必须转化为一系列的低级机器语言指令,然后这些指令按照一种称为可执行目标程序的格式打包,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行目标文件。
- Unix系统,从源文件到目标文件的转化是由编译器驱动程序完成:
linux> gcc -o hello hello.c
-GCC编译器驱动程序读取源程序文件hello.c,把它翻译成可执行目标文件hello。如图:
1)、预处理阶段: 修改原始C程序。
2)、编译阶段:编译器翻译文本文件,包含一个汇编语言程序。
3)、汇编阶段:汇编器(as)将编译阶段的文本文件翻译成机器语言指令,将这些指令打包成可重定位目标程序的格式,并保存在目标文件hello.o中。
4)、链接阶段:连接器(ld)负责处理合并标准C库中的函数合并,比如printf函数。结果得到一个可执行的目标文件,被加载到内存中有系统执行。
1.3 了解编译系统如何工作是大有益处的
- 优化程序性能
- 理解链接时出现的错误
- 避免俺去安全漏洞
1.4 处理器读并解释储存在内存中的指令
运行源程序被编译系统翻译成可执行目标文件。
1.4.1 系统的硬件组成
- 总线
- 贯穿整个系统的一组电子管道,它携带信息字节并负责在各个部件间传递。现在大多数机器的字长4个字节(32位)或8个字节(64位).
- I/O设备
- 是系统与外界联系的通道。通过一个控制器或适配器与I/O总线相连。控制器和适配器的区别主要在于它们的封装方式。控制器是I/O设备本身或者系统的主印刷电路板(主板)上的芯片组。而适配器则是一块插在主板插槽上的卡。两者的功能都是在I/O总线和I/O设备之间传递信息。
- 主存
- 用来存放程序和程序处理的数据。
- 处理器
- 中央处理单元(CPU),是解释或执行主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),也就是程序计数器(PC)。
CPU指令可能执行的操作:加载、存储、操作、跳转。
- 中央处理单元(CPU),是解释或执行主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),也就是程序计数器(PC)。
1.4.2 运行程序
- 一些目标文件中的代码和数据被加载到主存,处理器就开始执行程序的mian程序中的机器语言指令。这些指令将“hello,word\n”字符串中的字节复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。步骤如图:
1.5 高速缓存
- 程序的机器指令最初是存放在磁盘上的,当程序加载时,它们被复制到主存;但处理器运行程序时,指令又从主存复制到处理器。复制的过程减慢了程序的工作。
- 高速缓存存储器(cache或高速缓存),解决处理器与主存之间的差异。
1.6 存储设备形成的层次结构
1.7 操作系统管理软件
- 可以把操作系统看成是应用程序和硬件之间插入的一层软件。
- 操作系统的两个基本功能:(1)防止硬件被失控的应用程序滥用;(2)向应用程序提供简单一致的的机制来控制复杂而又通常大不相同的低级硬件设备。主要通过进程、虚拟内存、文件来实现这两个功能。
- 文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。
1.7.1 进程
- 进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程就好像独占地使用硬件。
- 并发运行是指一个进程的指令与另一个进程的指令是交错执行。
- 无论实在单核还是多核系统,,一个CPU看上去都像是在并发的执行多个进程,这是通过处理器在进程间来回切换的。操作系统的这种机制叫做上下文切换。
- 进程的上下文切换
1.7.2 线层
- 一个进程实际上由多个线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局的数据,线程一般比进程更高效。
1.7.3 虚拟内存
- 虚拟内存是一个抽象的概念,,它为每个进程提供了一种抽象,每个进程看到的内存地址是一致的。
1.7.4 文件
- 文件就是字节序列,包括每个I/O设备、键盘、显示器,甚至网络都可以看成是文件。系统中所有的输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件来实现的。
1.8 系统之间利用网络进行通信
- 现代系统经常通过网络和其他系统连接到一起。网络相当于I/O设备。当系统从主存复制一串字节到网络适配器,数据流经过网
- 络到达另一台机器,相似地,系统可以读取其他机器发送来的数据,并把数据复制到自己的主存中。
1.9 重要主题
1.9.1 Amdahl定律
1.9.2 并发和执行
- 并发指一个同时具有多个活动的系统,并行指的是用并发来使一个系统运行得更快。
- 1、线程级并发
- 使用线程可以在一个进程中执行多个控制流。
- 多核处理器将多个CPU(核)集成到一个电路芯片上。
- 超线程也称为同时多线程,是一项允许一个CPU执行多个控制流的技术。
- 2、指令级并行
- 可以同时执行多条指令
- 3、单指令、多数据并行
- 允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据,即是SIMD并行
1.10 小结
第二章
第三章
2月阅读笔记
4月阅读笔记