第一章

冯诺伊曼体系结构

控制器(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:多个块竞争同一个组引起的