4.4 控制冒险
两种停顿:
- 清零
- 气泡
条件转移:MEM才能计算出目标地址,需要stall3个时钟周期
解决方法:尽早得知目标地址:在译码阶段完成新地址计算,但仍需要stall一个周期
转移预测: - 静态预测:not taken
- 动态预测:转移历史表Branch History Table(BHT)
1位预测器,2位预测器
5 存储器
5.1 cache
利用了数据访问的时间局部性和空间局部性
miss
- cold miss:cache是空的
- conflict miss:0,8,0,8,0,8二者相互竞争
- capacity miss:cache容量太小,小于实际活跃的容量大小
cache 类型 - direct mapped:
- E-way associative
按什么规则替换block? - 随机
- LRU:least recently used
- FIFO:first in,first out
- NMRU:not most recently used
Using blocking to improve temporal locality:
5.2 虚拟内存
虚拟内存的好处
- 比物理地址大的程序也能运行
- 保护
- Simplifies loading a program for execution by providing for code relocation (i.e., the code can be loaded anywhere in main memory)
页表:虚拟地址到物理地址的映射
每个进程都有一个页表,多个进程则有多个页表
32位的机器,一个页大小为4kB,那么一个页表就有220个页表项
太占空间了怎么办?多级页表
页表放在内存中,访问起来太慢了怎么办?TLB,放在cache中
TLB实际是页表的缓存
一般是write back,需要记录是不是dirty的
一般TLB应该覆盖L1 cache,比如说L1 cache是64kb,一个页是4kb,那么TLB要至少16项
以前的TLB是全关联的,现在多是2~4关联,因为现在TLB项数更多了
TLB是page table的子集,是一个特制的硬件
linux进程的数据结构,记录数据段、代码段的起始虚拟地址
Linux地址异常 - segmentation fault:段错误,虚拟内存压根不存在
- protection exception:没有权限读写
- normal page fault:不在page table中,说明页是在磁盘上的
6 输入输出与中断
6.1 外设工作原理
发生中断时,EPC记录当前PC
I/O设备的类型
- 慢速设备:键盘鼠标
- 中速设备:打印机
- 高速设备:光盘、磁盘机
所以需要I/O设备控制器解决信息的缓冲、同步、格式的转换
x86用in/out指令读写I/O设备
6.2 输入输出的控制方式
- 数据查询方式:循环不多查询设备状态,浪费大量CPU时间
- 中断的方式:适合少量数据的不定时输入和输出的控制
- DMA(direct memory access):适合成组交换数据的场合
DMA带来的问题: DMA进行数据传输的时候CPU可执行其他程序,可能同时访问主存,引起主存使用权的冲突
解决方法:周期挪用法: 发生访存冲突时,DMA优先访问,CPU现场暂停一个或多个存储周期。
DMA自己传数据,CPU自己做自己的,涉及到lw/sw指令,如何cache命中,不涉及主存,如果没命中,造成主存访问冲突,DMA有优先权,完成一次传输之后,CPU在下一次DMA请求之前访问主存
DMA与程序中断的区别
中断通过程序实现数据传送,DMA靠硬件实现。
DMA每次传输数据之前先要先发一个DMA请求,并且DMA请求的优先级比中断请求高,CPU优先响应DMA请求,避免DMA所连接的告诉外设丢失数据。