《深入理解计算机系统》1.1计算机系统漫游

信息就是位+上下文

系统中所有信息都是由一串位表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。

程序被其他程序翻译成不同的格式

范例代码
#include <stdio.h> 
int main()
{  
    printf("hello world\n");
} 

每条C语言都必须被其他程序转化为机器指令,以可执行目标程序的格式打包好,以二进制文件形式存放

转化过程分为:
  • 预处理阶段:读取系统头文件stdio.的h内容,并把它直接插入到程序文本中.重新得到另一个程序
  • 编译阶段:将.i文本翻译成.s文本,它包含汇编语言程序。
  • 汇编阶段:将.s文本翻译成机器语言指令,并将这些指令打包成可重定位目标程序的格式,将结果保存到目标文件.o中。
  • 链接阶段:printf函数存在于printf.o的独立编译好的目标文件,以某种方式合并到hello.o程序中



系统的硬件组成






处理器(CPU)

解释或执行存储在主存中指令的引擎,处理器的核心是程序计数器(PC)的字长大小的存储设备(或寄存器)。PC指向主存中的某条机器语言指令(内含其地址)。

处理器从PC指向的存储器中读取指令,解释指令中的位,执行该指令指示的简单操作,然后更新PC,使其指向下一条指令,但这条指令并不与刚刚的指令相邻




运行hello程序

执行过程

命令键入->数据冲磁盘到内存->寄存器->显示器



高速缓存至关重要

根据上述hello程序执行过程,可知执行该程序步骤复杂速度缓慢,故设计高速缓存,作为暂时的集结区域,用来存放处理器近期可能会需要的信息。


存储器层次结构的主要思想是一层上的存储器作为低一层存储器的高速缓存



操作系统管理硬件

操作系统有两个基本功能:
防止硬件被失控的应用程序滥用;
向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
操作系统通过几个基本抽象概念(进程,虚拟存储器,文件)来实现这两个功能
 

进程


进程是操作系统对一个正在运行的程序的一种抽象
进程数可以多于CPU个数,无论单核多核CPU,一个CPU看起来都像是在并发的执行多个进程,这是通过上下文切换(进程间切换)实现的,线程也有切换只是,不需要MMU等切换,故线程切换更快



 

 线程

 一个进程中能有多个线程,每个线程都执行在进程的上下文,共享同进程的内存,数据
由于进程过大,如果进行进程间切换,其速度可能很慢,所以把进程分成小块,即线程,在线程间切换    
例子:LOL是一个进程,游戏中聊天功能是个线程,接收玩家输入是个线程......


虚拟存储器

利用硬盘中的部分空间代替内存

每个进程都有一个存储器,名为虚拟地址空间

重要主题


并发和并行


并发  指同时具有多个活动的系统,实际是CPU快速在多个任务间的切换,看上去像同时执行(上下文切换),但消耗时间不会减少
并行  一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的,使用多核(可以是逻辑核心)进行多任务工作

线程级并发

多处理器系统下:
多个核心都有自己的L1,L2高速缓存器,但共享更高层次的高速缓存以及到主存的接口
超线程:奔腾的技术可以使一个CPU模拟出两个逻辑CPU,在查看硬件信息时线程数即逻辑CPU数



指令级并行

同时执行多条指令的属性称为指令级并行
流水线:将执行一条指令所需要的活动分化成不用步骤,将处理器的硬件组成一系列的阶段每个阶段执行一个步骤

单指令、多少数据并行

在最低层次上,许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式称之为单指令、多数据,即SIMD并行。

计算机系统中抽象的重要性

文件是对I/O的抽象;
虚拟存储器是对程序存储器的抽象;
进程是对一个正在运行的程序的抽象。
虚拟机:它提供了对整个计算机(操作系统、处理器和程序)的抽象。






 

Pre: Urllib
Next: 异步
comments powered by Disqus