深入理解计算机系统
深入理解计算机系统学习笔记(一)
计算机系统漫游
信息就是位+上下文
0和1组成的位序列,又称为比特序列,8个位被组织成一组,成为字节。每个字节表示程序中的某些文本字符。
系统中的所有信息–包括磁盘文件、内存中的程序、内存中存放的的用户数据以及网络上传送的数据,都是有一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。
大部分Unix内核(操作系统的核心)以及所有支撑工具和函数库都是用C语言编写的。
C语言程序执行流程
每条C语句必须被其他程序装华为一系列的低级机器语言指令,然后打包成可执行目标程序的格式,以二进制磁盘文件存放起来。
在Unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:
gcc -o hello hello.c
编译过程:
- 预处理阶段
预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。通常以”.i”为扩展名。 - 编译阶段
编译器(ccl)将“.i”文件翻译成“.s”文件,它包含一个汇编语言程序。 - 汇编阶段
汇编器(as)将“.s”文件翻译成机器语言指令,打包成克重定位目标程序的格式,保存在“.o”的二进制文件中。 - 链接阶段
链接器(ld)将“.o”文件与其中引用函数的预编译好的目标文件合并,得到可执行目标文件。
系统的硬件组成
- 总线
贯穿整个系统的一组电子管道,负责携带信息在各个部件之间传递。 - I/O设备
系统与外部世界的联系通道。键盘、鼠标、显示器、磁盘驱动器。每个I/O设备都通过一个控制器或者适配器与I/O总线相连。 - 主存
临时存储设备,用来存放处理器执行程序时程序和其处理的数据。物理上,主存是一组动态随机存取存储器(DRAM)芯片组成的;逻辑上,存储器是一个线性的字节数组。 - 处理器
解释或执行存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备或寄存器,成为程序计数器(PC)。任何时刻,PC都指向主存中的某条机器语言指令。
高速缓存
根据机械原理,较大的存储设备比较小的存储设备运行的慢,而快速设备的造价远高于同类的低速设备。
高速缓存存储器,作为暂时的的集结区域,存放处理器近期可能会需要的信息。L1和L2高速缓存是用一种叫做静态随机访问存储器(SRAM)的硬件技术实现的。
操作系统管理硬件
shell 和可执行程序并没有直接访问硬件,而是依靠操作系统提供的服务。
操作系统基本功能:
- 防止硬件被失控的应用程序滥用;
- 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
实现方式:
通过几个基本的抽象概念(进程、虚拟内存和文件)。文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。
进程
进程间的切换是由操作系统内核管理的。内核是操作系统代码常驻主存的部分。
虚拟内存
每个进程看到的内存是一致的,称为虚拟地址空间。
文件
字节序列。每个I/O设备都可以看成是文件。文件向应用程序提供了一个统一的视图,来看待系统中可能含有的所有的I/O设备。
Amdahl定律
主要思想:
当我们对系统的某个部分加速时,其对系统的整体性能的影响取决于该部分的重要性和加速程度。α为某部分所需执行时间占总时间的比例,该部分性能提升k。总的执行时间:
加速比
并发和并行
并发指一个同时具有多个活动的系统。并行指用并发来是一个系统运行的更快。
- 线程级并发
单处理器模拟并发、多核处理器、超线程 - 指令级并行
现代处理器可以同时执行多条指令的属性
3.单指令、多数据并行
许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据,即SIMD并行。