第一章
冯诺伊曼体系结构
控制器(Control Unit)+数据通路(Datapath)=处理器(Processor)
- 数据在功能部件之间传送的路径称为数据通路,路径上的部件称为数据通路部件,如ALU、通用寄存器等。
五个组成部分:控制器、存储器、数据通路、输入、输出
性能计算方法
CPI(Clock Per Instruction)、MIPS(Million Instructions Per Second)
加速比是原时间/现时间。不是百分比
第二章
MIPS指令基本语法
常用指令:
add $s1,$s2,$s3
sw $s1,20($s2)
bne 不相等跳转 beq 相等跳转
slt 小于则置1
mips按字节编址。字的起始地址必须是4的倍数。大端。
比如读a[8]应该就要lw $s0,32($s1)
sll $t1,$t1,4
R型
用于Register
op6 rs5 rt5 rd5 shamt5 funct6
op:opcode 操作码
rs:Source Register 第一个源
rt:Temporary Register 第二个源
rd:Destination Register
shamt:shift amount field 位移量
funct:function code 指定操作的特定变式
I型
用于Immediate
op6 rs5 rt5 immediate16
J型
跳转
前6位(操作码)是2,表示J指令,后26位是地址
调用过程 寄存器
$a0~$a3 参数寄存器
$v0~$v1 返回值
$ra 返回起始点用的地址寄存器
栈指针$sp,不够用就会往栈里放
$t0~$t9 临时寄存器,不必存下来
$s0~$s7 保留寄存器,要存进栈里
$gp 全局指针
$fp 帧指针
$ra 返回地址
$zero 常数0
另外三个是保留给汇编器和操作系统的
寻址模式
立即数寻址
寄存器寻址
基址寻址 操作数在内存中,内存中的位置在基址寄存器+常数
PC相对寻址 地址是PC+指令中常数
伪直接寻址 26位和PC高位相连
不知道归到哪里
DLL是程序运行时候才会被加载,为了避免不需要加载整个包的时候加载整个包。
第三章
主要是这些名词代表啥意思
IEEE754
1符号 8指数 23尾数
偏阶:为了方便浮点数比较,指数都加上1111111
子字并行:对许多字并行做同样的操作 SIMD
浮点数做结合律的时候容易出问题(精度损失导致)
第四章
处理数据值的单元-组合单元(比如ALU、多路选择器)
包含状态的、带有内部存储功能的-状态单元(比如寄存器、指令存储器、数据存储器)
寄存器在register file(寄存器堆)中
冒险hazard
前推forwarding 旁路bypassing
流水线寄存器:把执行到当前阶段的指令存下来(不然怎么知道接下来要干啥)。宽度会很宽,因为还要放上一步搞出来的数据、控制信号以及优化需要用到的数据
异常:打断程序正常执行的突发事件
中断:来自处理器外部的异常
发生时在异常程序计数器EPS中保存出错指令的地址,然后跳转到某个位置交给操作系统去处理。mips同时设置了状态寄存器记录原因。
另一种方法是向量中断,控制权转移到问题对应的处理位置。比如提前搞好溢出应该干什么,那就跳过去
指令级并行:把某个长周期拆成小步骤。越小越有可能增加并行程度
多发射:同时执行好几个同周期的指令
静态发射:编译器决定哪几个一起走
动态发射(超标量superscalar):cpu运行时决定
推测:编译器预测条件分支往哪走
指令延迟:执行一条指令实际花费的时间
需要做道延时相关的和一道流水线相关的
第五章
一些概念
时间局部性temporal locality 某个数据如果被访问了,那就很有可能近期会再被访问
空间局部性spatial locality 附近的
存储器层次结构memory hierarchy 多存储器层次组成的结构,距离远的慢
高层指离处理器近的层
两级层次结构中存储信息交换的最小单位称为块block或行line
命中时间hit time包括判断命中或缺失的时间。缺失代价miss penalty是将相应的块从低层存储器替换到高层中以及将信息块传给处理器的时间之和。
各层
DRAM动态随机存取存储器。内存用的。用电容存数据,隔一段时间就要刷一次。
SRAM静态随机存取存储器。cache用的。类似D触发器的存储。
flash闪存。U盘、固态硬盘。
磁盘。
DRAM
同步DRAM-SDRAM,加了时钟信号
DDR:上升下降沿都能传输信息
磁盘
磁道track:一圈圈的同心圆
扇区sector:每条磁道的扇区
寻道seek:找到正确的磁道
旋转延时rotational latency:磁头寻道之后过多久可以找到指定扇区(平均是半圈)
柱面:多个盘片的同一圈磁道
cache
cache表中
标记tag 标记了这项原本放在哪
有效位valid bit 标记这里是否有有效数据
cache大小计算(索引、标记位数等)
cache块大可以更好利用空间局部性。但是块太大的话空间局部性会降低,且块太大的话块数就会减小。缺失代价(从低层搞上来的时间)也会上升
提前重启early restart:拿到想要的就开始执行,不等整个块更新完
请求字优先requested word first:重新组织存储器,使被请求的字先传,然后再传其他部分。
缺失时候干的事情:
1 把PC的原始值送去存储器
2 通知主存读一次,等主存访问完成
3 写cache(取数据、写地址标记、置有效位)
4 重新执行指令
处理器需要阻塞
写直达write through
写缓冲write buffer
写回write back
直接映射direct mapped
全相联fully associative
组相联set associative
标记位tag:标记在全局中的位置
索引位index:属于哪个块(不用存)
LRU Least Recently Used
虚拟存储器
虚拟内存
块block-页page
缺失miss-缺页page fault
地址映射、地址转换address translation
虚页号virtual page number
页偏移page offset
物理页号physical page number
缺页可以用软件处理,因为实在是开销太大了,软件处理一下开销微乎其微(而搞cache时候显然不能这么玩)
不用write through,只用write back
页表page table
页表寄存器page table register
快表Translation-Lookaside Buffer TLB 放在处理器里
3C模型
强制缺失compulsory miss 冷启动缺失cold-start miss:第一次访问
容量缺失capacity miss:cache容纳不了程序需要的所有块导致有内容被挤出去
冲突缺失conflict miss 碰撞缺失collision miss:多个块竞争同一个组引起的