计算机组成原理——复习笔记

计算机组成原理-——复习笔记

第一章

系统结构中的8个伟大思想

  1. 面向摩尔定律的设计
  2. 使用抽象简化设计
  3. 加速大概率事件
  4. 通过并行提高性能
  5. 通过流水线提高性能
  6. 通过预测提高性能
  7. 存储器层次
  8. 通过冗余提高可靠性

计算机硬件 :输入设备,输出设备,数据通路(运算器),控制器,存储器

性能

响应时间:也叫执行时间,是计算机完成某任务所需的总时间

吞吐率:也叫带宽,表示单位时间内完成的任务数量

性 能 x = 1 执 行 时 间 x 性能_x = {1 \over 执行时间_x} x=x1

如果X比Y快n倍,在Y上的执行时间是在X上执行时间的n倍
性 能 X 性 能 Y = 执 行 时 间 Y 执 行 时 间 X = n (1) {性能X\over 性能Y} = {执行时间Y \over 执行时间X} = n \tag{1} YX=XY=n(1)

CPU执行时间:也称CPU时间,是执行某一任务在CPU上所花费的时间(不包括I/O,用户感受的是响应时间

时钟间隔时间称为时钟周期,他的倒数称为时钟频率

一 个 程 序 的 C P U 执 行 时 间 = 一 个 程 序 的 C P U 时 钟 周 期 数 × 时 钟 周 期 时 间 (2) 一个程序的CPU执行时间 = 一个程序的CPU时钟周期数 \times 时钟周期时间 \tag{2} CPU=CPU×(2)
一 个 程 序 的 C P U 执 行 时 间 = 一 个 程 序 的 C P U 时 钟 周 期 数 时 钟 频 率 (3) 一个程序的CPU执行时间 = {一个程序的CPU时钟周期数 \over 时钟频率} \tag{3} CPU=CPU(3)

CPI:表示执行某个程序或片段每条指令所需的时钟周期平均数

C P U 时 间 = 指 令 数 × C P I × 时 钟 周 期 时 间 (4) CPU时间=指令数 \times CPI \times 时钟周期时间 \tag{4} CPU=×CPI×(4)

C P U 时 间 = 指 令 数 × C P I 时 钟 频 率 (5) CPU时间={{指令数 \times CPI} \over 时钟频率} \tag{5} CPU=×CPI(5)

不同类指令数量 C i C_i Ci和对应的CPI为 C P I i CPI_i CPIi
总的时钟周期数
C P U 时 钟 周 期 数 = Σ ( C P I i × C i ) (6) CPU时钟周期数 = \Sigma {(CPI_i \times C_i)} \tag{6} CPU=Σ(CPIi×Ci)(6)

总的CPI为
C P I = C P U 时 钟 周 期 数 指 令 数 (7) CPI={CPU时钟周期数 \over 指令数} \tag{7} CPI=CPU(7)

单周期CPU,指令周期数都为1

多周期每类指令所需周期不同,beq,j需要3个时钟周期,R型,sw需要4个时钟周期,lw需要5个时钟周期


MIPS:基于每百万条指令的程序执行速度的一种测量,指令条数除以执行时间与 1 0 6 10^6 106之积得到MIPS,是执行的速率,规定了性能与执行时间成反比,越快的计算机具有越高的MIPS
M I P S = 指 令 数 执 行 时 间 × 1 0 6 MIPS = {指令数 \over {执行时间 \times 10^6}} MIPS=×106


指令

常见指令

或非nor来取代非not

32位立即数加载

      lui $s0,高16位 # 将16位立即数放到寄存器的高16位
      ori $s0,$s0,低16位

三种指令类型

  1. R型

    oprsrtrdshamtfunct
    655556
    [31:26][25:21][20:16][15:11][10:6][5:0]
    操作码第一个源操作数寄存器第二个源操作数寄存器存放结果的目标寄存器位移量功能码

    注意的地方 :32个寄存器需要5位二进制表示( 32 = 2 5 32=2^5 32=25),若寄存器数量大于32,则表示寄存器的字段位数将大于5位

    算术运算 逻辑运算

  2. I型

    oprsrtconstant or address
    65516
    [31:26][25:21][20:16][15:0]
    操作码16位地址或立即数

    beq,bne,addi,lw,sw

    立即数范围 ± 2 15 \pm 2^{15} ±215(带符号数)

    16位立即数的扩展:有符号和无符号的扩展

  3. J型

    optarget
    626
    [31:26][25:0]
    操作码

    j,jal

常用的循环 分支结构

相等则跳转

beq $r1, $r2,L1

若两个寄存器中数值相等,则跳转到标签为L1的语句行

不相等则跳转

beq $r1, $r2,L1

相等时跳转的结构

   bne 寄存器一,寄存器二,Else
   相等时的操作
   j exit
Else:
   不等时执行的操作
exit:

循环:
while循环语句

   J Judeg
Loop:
   执行的操作代码
Judeg:   
   判断(若条件不成立则退出,跳转到Exit)
   j Loop
Exit:

注意:如果是do{}while(条件)则刚刚开始不需要J Judeg这一句

函数

程序的执行与翻译

C语言 编译器 汇编语言

汇编语言 汇编 机器语言

机器语言 链接器 可执行代码 : 将各个独立的汇编机器语言程序组合起来并且解决所有未定义的标记,生产可执行文件

可执行代码 加载器 存储器 : 把目标程序装载到内存中以准备运行的系统程序


五种寻址方式

立即数寻址:i型指令的后16位给定的数据,addi,

寄存器寻址:操作数是寄存器。所有的R型指令

基址偏移量寻址:地址由寄存器给出的基地址和偏移量(16位数做符号位扩展成32位)相加得到 lw,sw指令

PC相对寻址:指令后16位(左移两位)与PC(已更新为PC+4)相加, beq,bne指令
可以跳转到距离当前指令距离为 ± 2 15 \pm 2^{15} ±215

伪直接寻址:跳转地址由指令中26位字段和PC高位相连而成

26位给出的是字地址,左移两位得到28位,代替PC的低28位,PC高4位保持不变。

左移两位的原因16位偏移量左移2位以指示以字为单位的偏移量,这样做将偏移量能表示的有效范围扩大了4倍。

在这里插入图片描述

在这里插入图片描述


寄存器约定

名称用途调用是否保存
$zero常数0不适用
$v0 $v1用于函数返回值
$a0~ $a3用于函数传递参数
$t0~ $t7临时变量
$s0~ $s7保存的寄存器
$t8 $t9更多的临时变量
$gp全局指针:指向静态数据区
$sp栈指针
$fp帧指针
$ra返回地址

计算机的算术运算

溢出的判定

定义:两个操作数的符号位分别为 S A S_A SA S B S_B SB,结果符号位为 S f S_f Sf
符号位直接参与运算,产生的符号位进位为 C f C_f Cf,最高有效位产生的进位为 C C C

方法一:
溢 出 = S A ‾ S B ‾ S f + S A S B S f ‾ 溢出 = {\overline{S_A}\overline{S_B}}S_f + S_AS_B\overline{S_f} =SASBSf+SASBSf
只有同号的数相加才能产生溢出,且溢出的时候结果符号位与操作数符号位相反

方法二:
溢 出 = C f ⨁ C … … ( 异 或 ) 溢出=C_f \bigoplus C ……(异或) =CfC()
产生的符号位进位与最高有效位产生的进位不同

方法三:

操作数采用双符号位,通过运算结果的符号位进行判断

00 结果为正 无溢出

01 结果正溢

10 结果负溢

11 结果为负,无溢出

在这里插入图片描述


有符号数算术运算溢出时会产生异常

无符号数算术运算指令溢出不产生异常


数据的表示

  • 无符号数

  • 带符号数
    原码:最高位为符号位(0表示正,1表示负)剩余部分用二进制表示绝对值

    补码:正数的补码是自己,负数的补码是对应正数全部变反加一

    以8位为例

    二进制补码0000 00000000 0001……0111 11111000 00001000 0001……1111 1111
    对应的真值01……127-128-127……-1

    8位补码表示范围为-128至127(0的表示只有一种)

    2 n 2^n 2n位补码表示范围
    − 2 n − 1 至 2 n − 1 − 1 -2^{n-1}至2^{n-1}-1 2n12n11

  • 浮点数

    浮点数表示

    移码
    [ E ] 移 = E + B i a s [E]_移 = E + Bias [E]=E+Bias
    E为指数的真值,Bias为偏阶

    32bits 单精度浮点数

    Bias偏阶为127

    (例如 若指数为0 指数位则是 ( 127 + 0 ) 10 = 0111111 1 2 {(127+0)}_{10} = 01111111_2 (127+0)10=011111112

    +1表示为 1 + 127 = 1000000 0 2 {1+127} = 10000000_2 1+127=100000002

    3130…………23……………………10
    符号1位指数8位尾数23位

    符号位最高位[31] 1表示负数,0表示正数

    指数8位[30~23]

    尾数23位[22~0]

    64bits 双精度浮点数 1 11 52

    双精度的指数偏阶(Bias)为1023 (记住0对应的指数位011 1111 1111)

    单精度双精度表示对象
    指数尾数指数尾数
    00000
    0非00非0 ± 非 规 格 化 数 \pm 非规格化数 ±(尾数部分无隐含前置0)
    1-254任何数1-2046任何数 ± 浮 点 数 \pm 浮点数 ±
    255020470 ± 无 穷 \pm 无穷 ±
    255非02047非0NaN(not a number)

在这里插入图片描述


乘法

除法

浮点数加法

step操作
1将较小指数的数向较大指数的数对齐
2将有效位相加
3和不是规格化的数,将其进行调整,检查是否溢出
4若有效位超了,进行舍入,然后再回到步骤3

第四章

主要的逻辑单元

组合单元:操作单元 ALU 逻辑门 进行数据处理 输出是输入的函数

状态单元:存储单元 寄存器 存储器 用于存放信息,至少有两个输入(要写入的数据值和决定何时写入的时钟信号)

寄存器堆

RARBRW
register to be read on BusAregister to be read on BusAregister to be written

单周期处理器

指令操作码ALUop
存字取字00
beq01
R型指令10

ALU控制信号功能
000
001
010
110
111小于时置位

单周期处理器的CPI是1,时钟周期由最长的Lw指令决定

最长延时

读取指令-指令解码寄存器装入数据-地址计算-读取内存数据-将数据写回寄存器

lw在写寄存器的多路选择器RegDst

总延时应该是
读 取 指 令 ( I − M e m ) + 寄 存 器 ( R e g ) + 多 选 ( A L u S r c ) + A L U + 内 存 读 取 ( D − M e m ) + 多 选 ( M e m T o R g e ) 读取指令(I-Mem)+寄存器(Reg)+多选(ALuSrc)+ALU+内存读取(D-Mem)+多选(MemToRge) (IMem)+(Reg)+(ALuSrc)+ALU+(DMem)+(MemToRge)

多周期处理器

在每个周期末尾又增加了额外的寄存器,暂存后续周期会用到的数据

IR 指令寄存器 从内存取出的指令放到IR中

MDR 数据缓冲寄存 从内存中取出的数据放到MDR中

A B寄存器 从寄存器中取出的操作数放到A B两个寄存器中

ALUout : 存放ALU的运算结果


第一个周期结束ALUout=PC+4

第二个周期结束 AILUout=PC+sign extendIR[15:0]>>2

第三个周期结束 ALUout=R型A op B 或者 I型A 与IR[15:0]运算

第四个周期 第五个周期 ALUout结果不确定


每条指令都通常占用3~5个周期

三个周期的指令 J型,beq

四个周期的指令 R型,addi,sw

五个周期的指令 lw

指令过程

  1. step1

    取指令

    IR = Mem[PC]
    PC <= PC+4
  1. step2

    指令解码 寄存器A B获取 分支地址计算

    将数据装载到A B两个寄存器中

   A = Reg[IR[25-21]]

   B = Reg[IR[20-16]]

并且完成PC+符号位扩展后并左移两位后的IR[15:0]装载到ALUout中

  ALUout = PC + signExtend(IR[15:0]>>2)

重要的一些控制信号

RegDst=X:第二个周期的时候不需要写回寄存器

ALUop=00:ALU执行加法操作

  1. step3

    执行其中之一

    R型指令计算
    计算内存地址
    分支比较

    分类型

    R型I型J型
    ALUout = A op Bsw lw ALUout = A + IR[15:0]分支beq 如果A==B 则PC=ALUoutIR低26位左移两位变成28位,但PC高四位保持不边
    ALUop=10ALUop=00ALUop=01
  2. step4

    sw存数 lw取数据到MDR寄存器 R型指令将计算结果装回寄存器

    R型swlw
    Reg[IR[15:10]=ALUopt]MEM[ALUout]=BMDR=MEM[ALUout]
    RegDst=1 选择IR[15:11]
  3. step5

    完成lw指令 将MDR寄存器内容放到寄存器中

    lw指令

    Reg[IR[20:16]=MDR

    RegDst=0 选择IR[20:16]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qCnUvR3Z-1652083937821)(pic/5.png)]

多周期的ALUop信号

功能
00ALU执行加法(第一步第二步 sw lw第三步)
01ALU执行减法(beq指令第三步)
10由funct字段决定操作类型(R型指令第三步)
xxj型指令,第四步第五步可为任意值

单周期多周期比较

单周期一个时钟周期执行一条指令简单,容易理解效率低,慢,不实用时钟周期由执行时间最长的那条指令决定
多周期将一条指令的执行过程分为多个阶段,每个阶段占用一个时钟周期可以在不同周期使用同一逻辑功能,执行通路较短的周期占用的周期数较小,可以节省时间

第五章

半导体存储器的分类:

SRAM:速度快,比较贵,规模小,用做二级缓存

DRAM:相对SRAM比较慢,相对便宜,规模可以做大,用作内存

主存用DRAM,cache用SRAM(时间局部性和空间局部性)

闪存

磁盘


名词解释:

块或行:可存在于或不存在于cache中的信息的最小单元。

命中率:在高层存储器中找到目标数据的存储访问比例。

缺失率:在高层存储器中没有找到目标数据的存储访问比例

命中时间:访问某存储器层次结构所需要的时间,包括了判断当前访问是命中还是缺失所需的时间。

缺失代价:将相应的块从低层存储器替换到高层存储器所需的时间。


强制缺失( compulsory miss):对从没有在cache 中出现的块第一次进行访问引起的缺失。

容量缺失( capacity miss):由于cache容纳不了一个程序执行所需要的所有块而引起的cache缺失,当某些块被替换出去,随后再被调入时,将发生容量缺失。

冲突缺失( conflict miss):在组相联或者直接映射的cache中,多个块竞争同一个组时而引起的cache缺失。冲突缺失在直接映射或组相联 cache中存在,而在同样大小的全相联cache 中不存在。

平均访存时间 AMAT
A M A T = 命 中 时 间 + 缺 失 率 × 缺 失 代 价 AMAT = 命中时间 + 缺失率 \times 缺失代价 AMAT=+×
推导 AMAT = 命中率 乘 访问缓存时间 +缺失率 乘 (将数据装入缓存时间+访问缓存时间)

其中 缺失率+命中率=1
将数据装入缓存时间为缺失代价


直接映射
映射后对应的cache块
( 块 地 址 ) m o d ( c a c h e 中 的 块 数 ) (1) (块地址) mod (cache中的块数)\tag{1} ()mod(cache)(1)
块地址
块 地 址 = 字 节 地 址 / 块 大 小 ( 块 的 字 节 数 ) 块地址 = 字节地址/块大小(块的字节数) =/
这个块地址包含了字节地址 字 节 地 址 / 块 大 小 ∗ 块 大 小 字节地址/块大小*块大小 / 字 节 地 址 / 块 大 小 ∗ 块 大 小 + ( 块 大 小 − 1 ) 字节地址/块大小*块大小 + (块大小-1) /+(1) 之间的地址


32位地址,且是直接映射

cache大小为 2 n 2^n 2n,需要n位用来索引

块大小为 2 m 2^m 2m 2 m + 2 2^{m+2} 2m+2字节)需要 m m m位来寻找块中的,2位是字节偏移信息。offset位数需要 m + 2 m+2 m+2

标记域tag大小为
32 − ( n + m + 2 ) 32-(n+m+2) 32n+m+2
直接映射的cache总位数
2 n × ( 块 大 小 + 标 记 域 大 小 ( t a g ) + 有 效 位 大 小 ) 2^n \times {(块大小+标记域大小(tag)+有效位大小)} 2n×(+tag+)
其中,块大小为 2 m 2^m 2m个字( 2 m w o r d = 2 m + 2 B y t e = 2 m + 5 b i t s 2^m word = 2^{m+2}Byte = 2^{m+5}bits 2mword=2m+2Byte=2m+5bits,同时,需要一位标记为,此时,总位数为
2 n × ( 2 m × 32 + ( 32 − n − m − 2 ) + 1 ) 2^n \times {(2^m \times 32 + (32-n-m-2) + 1)} 2n×(2m×32+(32nm2)+1)
cache大小(实际装载数据的位数)
c a c h e 大 小 = 块 大 小 × 块 数 cache大小 = 块大小 \times 块数 cache=×

地址拆分为三个部分
Tag标记 索引index 偏移量Index

(地址前面的修饰符,字地址,块地址,字节地址)

掌握例题

组相连 全相连(两个了解)

虚拟存储(不考)


:一个两路组相连

主存分为256组,每组8块,cache分为8组,每组两块

主存中的各块与Cache的组号之间有固定的映射关系。但可自由映射到对应Cache组中的任何一块。

例如

主存中的第0块、第8块……均映射于Cache的第0组,但可映射到Cache第0组中的第0块或第1块;

主存的第1块、第9块……均映射于Cache的第1组,但可映射到Cache第1组中的第2块或第3块。

组相连的cache组由
( 内 存 中 的 块 地 址 ) m o d ( c a c h e 中 的 组 数 ) (内存中的块地址) mod (cache中的组数) ()mod(cache)
给出

在这里插入图片描述


全相连 组相连 直接映射比较:

直接映射

优点:硬件简单,成本低,地址变换速度快,而且不涉及替换算法问题。
缺点:不够灵活,Cache的存储空间得不到充分利用,每个主存块只有一个固定位置可存放,容易产生冲突,使Cache效率下降,因此只适合大容量Cache采用。

全相联

优点:映射方式比较灵活,主存的各块可以映射到Cache的任一块中,Cache的利用率高,块冲突概率低,只要淘汰Cache中的某一块,即可调入主存的任一块。
缺点:由于Cache比较电路的设计和实现比较困难,这种方式只适合于小容量Cache采用。查找麻烦,需要与缓存进行一一对比

组相联结构:是前两种方法的折中方案,适度兼顾二者的优点,尽量避免二者的缺点


cache写操作处理(了解)

写策略
  1. 写直达

    也叫写贯穿,当CPU进行写操作时,在写cache时候同时将内容写会主存中,两个内容同时改写

  2. 写回

    当CPU写数据时,仅仅写回cache,不写主存

    当已被改写的块被替换时,将内容写会主存

方法比较
(1)写直达法是在每次写Cache时都有写主存的操作,能始终保持数据块的一致性。写回法则仅在数据块被置换时写入主存,可减少访问主存的开销,但存在Cache块与主存块的瞬间不一致。

(2)写直达法一次写入一个字,仅需一个奇/偶校验位;而写回法一次写入一个数据块,需要多个校验位。

(3)写直达法需要较多的缓冲寄存器存放需要写入主存的数据;而写回法相应要简单些。


码距

码距就是两个码字C1与C2之间不同的比特数。

如:1100与1010的码距为2;1111与0000的码距为4。

一个编码系统的码距就是整个编码系统中任意(所有)两个码字的最小距离

若一个编码系统有四种编码分别为:0000,0011,1100,1111,此编码系统中0000与1111的码距为4;0000与0011的码距为2,是此编码系统的最小码距。

因此该编码系统的码距为2。

奇偶校验的码距为2

汉明码

汉明码使用 奇偶校验码 进行错误检测

汉明码纠错步骤:

  1. 将数据从左到右依次编号

  2. 将编号为 2 n 其 中 n = 1 , 2 , … … , n 2^n 其中{n=1,2,……,n} 2nn=1,2,n(也就是1,2,4,16) 的位 作为奇偶校验位

  3. 其余位数作为数据位(位置3,5,6,7,9,10,11,12,13,14,15)

  4. 奇偶校验位的位置决定对应的数据位

    位置123456789101112
    数据位p1p2d1p3d2d3d4p4d5d6d7d8
    覆盖范围p1XXXXXX
    p2XXXXXX
    p3XXXXX
    p4XXXXX

    说明

    校验位1(p1)检查第0001 0011 0101 0111 1001 1011(1,3,5,7,9,11)这些位的最右边第一位均为1

    校验位2(p2)检查第0010 0011 0110 0111 1010 1011(2,3,6,7,10,11)这些位的最右边第二位均为1

    校验位1(p1)检查第0100 0101 0110 0111 1100 1101(4,5,6,7,12,13,14,15)这些位的最右边第三位均为1

  5. 进行奇偶校验位,对每一组进行校验


纠错:最后将发生错误的位数进行纠错

r位指误码 比如p1p2p3p4

2 r 2^r 2r种可能的错误代码

错误码全为0<==>汉明码无错误

剩余 2 r − 1 2^r-1 2r1种错误代码对应只有一位错的情况

参数满足
N = k + r ≤ 2 r − 1 N=k+r \le 2^r-1 N=k+r2r1
k表示数据位位数,r表示检错码位数

k=4 r=3 编码的海明距离为3
k=8 r=4

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《王道计算机组成原理》是计算机相关专业经典教材之一,详细介绍了计算机组成原理的相关知识。GoodNotes是一款非常优秀的电子笔记应用程序,可以帮助用户实现快速、便捷的笔记和整理。结合这两者,可以利用GoodNotes来记录和整理学习《王道计算机组成原理》的内容。 首先,在GoodNotes中创建一个新笔记本,主题可以是《王道计算机组成原理》或者其他与该教材相关的标题。然后,可以根据教材的章节内容,将每个章节都拆分为一个笔记页面,以便进行更好的整理和查找。 接下来,可以使用GoodNotes的手写功能,使用手写笔或手指来记录关键概念、重要公式和定义。可以选择使用不同颜色的笔来区分不同的内容,例如用红色笔标记重要的内容,用蓝色笔绘制图表与示意图,用绿色笔标记关键词等等。 除了手写内容外,GoodNotes还支持插入图片和PDF文件。如果王道计算机组成原理教材中有重要的图表或示意图,可以通过GoodNotes将其插入到相应的笔记页面上,以便更好地理解和复习。 在学习过程中,可以使用GoodNotes的标签功能,给重要的笔记页面添加适当的标签,方便以后的查找和回顾。同时,可以通过GoodNotes的目录功能对整个笔记本进行分类和组织,按照教材的章节顺序或自己的学习进度进行整理。 此外,GoodNotes还提供了多种其他的功能,如文本输入、录音等,可以根据个人需要选择合适的功能来增强学习效果。 总结起来,使用GoodNotes作为《王道计算机组成原理》的笔记工具,可以有效地记录、整理和回顾教材内容,提学习效果和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值