计算机组成
by WeiLin, 2019.5.20
这里推荐2门课:
1.计算机组成:https://www.coursera.org/learn/jisuanji-zucheng
2.Computer Architecture:https://www.coursera.org/learn/comparch?=
这两门课都是 Coursera 上的课程。“计算机组成”讲述计算机的内部结构和工作原理,偏入门;“Computer Architecture”是普林斯顿大学的一门课,较难。目前,我只听了“计算机组成”,第2门课还没听,所以这里对“计算机组成”进行总结:
一、基本结构
1.计算机基本结构:冯诺依曼结构、哈佛结构(ARM是哈佛结构)
2.冯.诺依曼结构:把计算机分为运算器、控制器、存储器、输入和输出设备5个部分。
3.指令执行步骤:取指、译码、执行、访存、回写。(MIPS的5级流水线)
4.指令系统体系结构:x86体系结构(变长指令/CISC),MIPS体系结构(固定长指令/RISC)
二、流水线
1.流水线处理器:
- 单周期处理器每个时钟周期处理一条指令(取指、译码、执行、回写在一个时钟内完成);
- 而流水线处理器将执行步骤拆分成n级,每级一个时钟内完成,从而提高时钟频率。
- 流水线级数越多,时钟频率越高,但处理器也越复杂,现在主流的处理器大多在15级左右。
- Intel处理器是CISC,用流水线实现一条指令比较难,所以后来将CISC指令拆分成多个RISC指令(即多个微操作),从而采用RISC流水线技术实现。
2.超标量流水线(Superscalar):
- 具有两条或两条以上并行工作的流水线称为超标量流水线,对应处理器称为超标量处理器。
- 单周期->标量流水线:时间并行性的优化,主要对现有硬件的切分。
- 标量流水线->超标量流水线:空间并行性的优化,需成倍增加硬件资源。
3.流水线冒险:分为结构冒险、数据冒险、控制冒险
- 结构冒险:不同阶段的执行步骤由于硬件资源冲突不能同时进行。解决办法:将冲突的资源扩展,比如说将数据和指令分开存储,这样就可以同时取数据和指令了。
- 数据冒险:下条指令需要上条指令的结果,解决方法有:
1.流水线停顿,即在流水线中添加空泡,但会降低性能。
2.数据前递,上条指令执行结果数据没有必要执行完写入寄存器后下条指令才能用,事实上在ALU执行阶段就已经产生结果,在此将数据前递就可减少流水线停顿时间。
- 控制冒险:当遇到条件分支指令时,需要跳转指令(本指令执行完才知道是否跳转),而流水线是按顺序取指令的。解决办法有:
1.流水线停顿,流水线冒险问题都可以用停顿来解决。
2.延迟转移技术,在条件分支指令后插入程序中与此无关的指令去执行,当分支指令执行完再执行跳转指令,这样就不需要停顿。
4.out-of-order执行:乱序执行
- Intel处理器将指令分解成多个微指令(便于流水线)。
- 一般的指令都是按顺序执行指令,乱序执行是将没有依赖关系的微指令打乱执行。
- 这种打乱不是随机的,而是根据某种算法排序,从而提升处理器性能。
- 打乱的微指令需要按顺序退出,所以从外部看,指令仍然按顺序执行。
三、存储器
1.存储层次结构:通用寄存器、Cache/SRAM 、主存/DRAM、硬盘/Disk
2.Cache工作原理:计算机程序在时间和空间上都表现出局部性原理:
- 1.时间局部性:即最近被访问的存储器单元(指令和数据)很快还会被访问;
- 2.空间局部性:即正在被访问的存储器单元附近单元很快会被访问。
CPU访问主存都是通过Cache访问的,读入cache的数据块还需记录其块地址,以便判断是否命中。
3.Cache的组织结构:
- Cache命中率会大大影响数据的平均访问时间,提高Cache的容量可以提高命中率,但同时也会增加命中时间(即命中的话,访问数据的时间),从而增加平均访问时间。
- 另外,Cache会产生冲突失效(即不同主存数据会映射到同一个Cache单元里),从而降低命中率。降低冲突失效的解决方法是使用多路组相连Cache(冲突数据存放到相同表项的不同组里)。
4.Cache的写策略:
- “Cache命中”时(即打算写的数据地址已经在cache里了):
1.写穿透(Write Through):数据同时写入Cache和主存;
2.写返回(Write Back):数据只写入Cache,仅当该数据块被替换时才写回主存;
- “Cache失效”时(即打算写的数据地址不在cache里):
1.写不分配(Write Non-Allocate):直接将数据写入主存;
2.写分配(Write Allocate):将数据所在的块读入Cache后,再将数据写入Cache;
简单的Cache在写数据时会使用写穿透和写不分配的策略,而高性能Cache会使用写返回和写分配策略。
四、中断与异常
1.中断和异常:中断一般指外部中断,异常一般指内部中断。
2.中断向量:中断服务程序的入口地址,每个中断类型对应一个中断向量。一般将中断向量表存在内存的最低地址处,当发生中断时,根据中断号查找向量表,跳到对应中断服务程序处理中断。
3.中断处理过程:1.关中断(不再接收其它外部中断请求);2.保护断点;3.识别中断源;4.保护现场;5.执行中断服务程序(在此过程可以适时打开中断,以便允许响应较高优先级的外部中断);6.恢复现场并返回。
感想:这里只是对“计算机组成”这门课核心部分进行简单概括,还有很多东西没列出,建议去 Coursera 上观看该课程。
tags: computer