CSAPP 学习笔记(一)计算机系统漫游
1.5 高速缓存至关重要
- 机械原理:较大的存储设备要比较小的存储设备运行得慢,而快速设备的造价远高于同类低速设备
- 为了处理处理器与主存之间的速度差异,采用更小更快的存储设备,称为高速缓存存储器(cache)
- L1和L2高速缓存是用一种叫做静态随机访问存储器(SRAM)的硬件技术实现的
- 通过让高速缓存里存放可能经常访问的数据,大部分内存操作都能在快速的高速缓存中完成
1.6 存储设备形成层次结构
- 存储器层次的主要思想是上一层的存储器作为低一层存储器的高速缓存
1.7 操作系统管理硬件
- 操作系统的两个基本功能:防止硬件被失控的应用程序滥用;向应用程序提供简单的机制来控制复杂而又通常大不相同的低级硬件设备
- 操作系统抽象
原来的 | 抽象 |
---|---|
I/O设备 | 文件 |
I/O设备,主存 | 虚拟内存 |
处理器 | 指令集架构 |
I/O设备,主存,处理器(指令集架构) | 进程 |
I/O设备,主存,处理器,操作系统 | 虚拟机 |
抽象
进程
- 进程:进程是操作系统对一个正在运行的程序的一种抽象(程序:静态保存的可执行的代码和数据)
- 在一个系统上可以同时运行多个进程,而每个进程好像独占地使用硬件
- 并发运行:一个进程与另一个进程交错执行
- 无论单核还是多核系统,一个CPU看上去都像是在并发地执行多个进程,这是通过处理器在进程间切换来实现的。操作系统把这种交错执行的机制称为上下文切换(上下文:程序运行所需的所有状态信息称为上下文,例如PC和寄存器文件的值,以及主存的内容。)操作系统决定要把控制器权从一个进程给到另外一个进程的时候就会进行上下文切换
- 一个进程到另一个进程的转换是由操作系统内核管理的,内核是操作系统代码常驻主存的部分。内核不是一个独立的进程,相反他是系统管理全部进程所用的代码和数据结构结合
- 线程:一个进程实际上可以由多个称为线程的执行单位组成,每个线程都运行在进程上下文中,并共享同样的代码和全局数据。多线程比多进程之间更容易共享数据,也因为线程一般来说比进程高效,所以有多处理器可用的时候,可以用多线程加速
虚拟内存
- 虚拟内存:给每个进程提供了一个假象,每个进程都在独占地使用主存,每个进程看到的内存都是一致的
- 背下虚拟地址空间的图片和详细情况
- 虚拟内存的运作需要硬件和操作系统软件之间精密交互,基本思想是:把一个进程虚拟内存的内容存在磁盘上,然后主存作为磁盘的高速缓存。
文件
- 文件:文件就是字节序列,所有I/O设备都可以看作是文件。这种抽象可以让程序员不必了解具体I/O设备技术来进行操作
1.8系统之间利用网络通信
- 网络可以视为I/O设备
- 系统从主存复制一串字节到网络适配器时,数据经过网络到达另一台机器,同样的系统也可以读取从其他机器发来的数据
1.9 重要主题
Amdahl
- Amdahl定律:当我们对系统某部分加速的时候,其对系统整体性能的影响取决与该部分的重要性和加速程度。要想显著加速整个系统,必须提升全系统中相当大部分的速度(公式熟练记忆并应用)
并发与并行
- 并发和并行:并发是一个通用的概念,指一个同时具有多个活动的系统。并行指的是用并发使得一个系统运行的更快
线程级并发(不是并行)
- 并发需求产生:在进程抽象的基础上我们能设计出同时运行多个程序的系统,并且这又很大的实际用途
- 线程级并发:使用线程在一个进程中执行多个控制流。
- 传统:单核处理器必须在多个任务间快速切换实现并发。现代:多核处理器将多个CPU集成到一个集成电路芯片上,每个核有自己的L1和L2高速缓存,L1高速缓存分为两部分一个存最近得到的指令,另一个放数据,这些核共享更高层次的高速缓存
- 超线程(多线程):一项允许一个CPU执行多个控制流的技术,常规处理器需要大约20000个时钟周期做不同的线程转换,而超线程的处理器可以在单个周期的基础上决定执行哪个线程,这样更高效地利用CPU资源
- 多处理器的使用可以从两方面提高系统性能。首先减少了在执行多个任务的时候模拟并发的需要,其次可以通过多线程让应用程序运行更加高效(干得更少,干得更快)
指令级并行
- 现代处理器可以同时执行多条指令的属性被称为指令级并行,早期要多个时钟周期来执行一条指令,后来通过硬件优化流水线处理之类的来让速度接近1个时钟周期1条,如果可以比这更快则称为超标量
单指令多数据并行
- 许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式被称为单指令多数据并行(即SIMD
抽象的重要性
- 计算机系统中的一个重大主题就是提供不同层次的抽象表示来隐藏实际实现的复杂性
- 虚拟机是对整个计算机系统的抽象,如果要让应用程序运行在不同操作系统,虚拟机就很重要