计算机系统结构
Abstract
初见计算机系统结构,包含一些概览、流水线、缓存,已封存,寻找新的学习路径中...
TODO
老师讲到了第4章指令级并行
今天看了5级流水线和3类冒险,下次就学指令级并行
前言
计算机组成原理学的不好,然后这学期又要学这个计算机系统结构,根据老师的说法,我们学校就是把计算机组成原理这门课拆成计算机组成原理和计算机系统结构来上的,这就导致我分不清我们的计算机系统结构要讲什么,别人的计算机组成原理里又讲的是什么、讲了哪些我们计算机系统结构里才会讲的知识,别人的计算机系统结构又在讲什么...还在研究中
梳理学习逻辑
- 第1章计算机系统结构的概念
- 第2章计算机指令集结构 很快跳过了
- 第3章流水线技术
- 第4章指令级并行
- 第5章 存储系统
- 第6章输入输出系统
- 第8章多处理机
- 第9章机群系统
1-2章 建立评价标准
3-4章 流水线和ILP(Instruction Level Paralleism 指令集并行)
第5章 存储系统
第6-9章 多处理机与并行
流水线
第四周开始讲的
5级流水线
初见
取指->译码->执行->访存->写回
graph LR
A[取指<br/>IF<br/>Instruction Fetch] --> B[译码<br/>ID<br/>Instruction Decode]
B --> C[执行<br/>EX<br/>Execute]
C --> D[访存<br/>MEM<br/>Memory Access]
D --> E[写回<br/>WB<br/>Write Back]
冲突会在哪呢?

I1MEM的时候,和I4IF取指争用同一内存
并非只有这一种冲突哦,流水线冲突就分为王姐叽里呱啦讲的:数据冒险、控制冒险、结构冒险。
这里这个是结构冒险中的资源冲突
?解决办法?
A: 让 I4 停顿一拍,错开冲突时间
B: 一种更彻底的方法,使用哈佛架构,将数据存储器(D-MEM)和指令存储器(I-MEM)分开(现代CPU就是通过分离缓存(I-Cache/D-Cache))
另外两个冒险:
数据冒险
这条指令需要用到的数据,上一条指令还没算出来
解决方式:
A: 在下一条指令前插入阻塞周期,等待写回完成。缺点:消耗时钟周期
B: 旁路技术,上一条指令写回直接写到下一条指令执行的输入里面,不等WB再去读寄存器,这样就可以节省一个指令周期
其实可以分成3种典型冲突
-
写后读(RAW, Read After Write)
-
写后写(WAW, Read After Write)
-
读后写(RAW, Write After Write)
控制冒险
解决方法:
A: 延迟槽,延迟转移,由编译器进行优化,在跳转指令还没判断出来的空转阶段,先运行跳转指令肯定不会影响到的指令
B: 转移预测
时空图
横坐标:时间
纵坐标:代表流水线的各个段

第一个进入流水线的是1
每一个块里的数字代表的是第几个任务
缓存
主存和缓存的映射关系
局部性原理
缓存会有效的一个隐藏原因:
- 空间局部性:访问某个位置的数据后,很有可能会访问其周围的数据
- 时间局部性:访问某个位置的数据后,很有可能在不久后再次访问
不管主存中一个地址代表几个字节
反正先按主存内的地址排列出来
然后主存是会分块的
如果把4个地址分成一块
那么在块内偏移索引就需要2位(而且恰好可以用内存地址的最后两位)
然后块也是会有块号的
主存块与缓存块之间怎么映射?!
映射方法分类:
主存物理地址就是一串二进制数
- 全相联映射:\(主存物理地址 = 标记 + 块内地址\)
相联 = 随便,全相联 = 全随便
- 组相联映射:\(主存物理地址 = 标记 + 组号 + 块内地址\)
题目会说几路组相联
- 直接映射:\(主存物理地址 = 标记 + cache行号 + 块内地址\)
就是一路组相联,就是CS61C里讲的那种,根据缓存的总大小循环存入对应的组