【自用】【408笔记】计算机组成原理

第1-4章使用课程来自b站:复旦发哥带学408
第6-7章使用王道课程
第5章二者皆有

目录

第1章 计算机系统概述

计算机层次结构

计算机硬件

冯诺伊曼基本思想

计算机功能部件

MAR和MDR

内存容量:8*8
$2^{MAR} × MDR$
例:p13 3.
n位的计算机”means:计算字长n位,即一次可以处理n位的数据
以m位来表示地址”means:地址码的长度,即MAR的位数
=> 地址空间:$2^m$

这里有很多的概念,看书p3-4

PC->MAR->地址总线->定位到具体地址->数据总线(指令)->MDR->IR(OP)->CU
...IR(Ad)->MAR(看图片)

3取指令,#8取数据

计算机性能指标

计算机主要指标

书p12-p14:
概念
CPU执行时间的计算(两个公式)

第2章 数据的表示与运算

数值与编码

进制转换

2转10
类比十进制书写

10转2
麻烦的做法:短除法

快一些的做法(用这个):拼凑

2转1616转2
从后往前,4个一组,不够就补0

10转16
类比计算十进制每位的数值


得出的余数从后往前排,某一次商在16以内就停下(比如这里是1)
也可以拼凑法,但不太好拼(上图中下面使用的方法)
先转成二进制再转到十六进制也行

常见二进制

1)1后面有几个0,就是2的几次方
2)有几个1,就是2的几次方-1
类比二叉树的结点计算

$2^{15} = 32768$
$2^{16} = 65536$

16个1就是 65536-1=65535

定点数的编码表示

定点整数和定点小数

定点小数:小数点在前,每位2^(-n)

(记一下前面几位的数值)
小数点不会存进去,题目没说默认是整数

机器数和真值

补码和原码

转换

算补码
正数补码=原码
负数:符号位不动, 按位取反,末位+1(算得很慢)
(用这种方法快:)符号位不动,从右往左数到第一个1,右边0不变,符号位和右边第一个1中间的位数全部取反

补码转原码,原码转补码操作一样

补码的性质

补充:
0的补码是唯一的
(以8bit为例)
0的原码是0000 0000(即正零)
1000 0000(负零)是-128



补码全1:原码为-1
(特殊情况)1后面全0:几个0,就是-2的几次方

补码相加,符号位可以参与运算,但要判断
注意:判断溢出时,若使用方法(3)进位来判断,不能用十六位看,要看转成二进制后看进位

① 变符号位
② 再按转补码规则变补码

0101-1110
类比十进制减法
最高位都不够借位,可以认为前面有个1,算完之后不要最高位

补码相减,符号位也可以参与运算,但依旧要判断溢出
如:


十六进制+ 谁,能变成1后面全0,加的这个数就是它的绝对值
有的时候常规方法更好用
这种方法要注意区分正负:
正数直接算就行


反过来,十进制原码 + 十六进制的谁,能变成1后面全0,加的这个数就是它的补码。
数字比较小时好用
又一例:

无符号数和有符号数

有符号数
第一位 1 -; 0+

类型转换

无符号数和有符号数的转换

机器数不变,加上符号,真值变
例:p31 表2.1

不同字长整数间的转换

大字长->字长:高位截断,位赋值
例如:32位--赋-->16位,只保留低16位

小字长->字长:对位进行扩展——零扩展和符号扩展
零扩展:前面补0
符号扩展:前面补符号位(对于原码来说数值不变)

运算方法和运算电路

定点数的移位计算

移位是把数据相对于小数点进行移动
逻辑移位
缺的补0
算数移位
缺的左边补符号位,右边补0

移位的意义

左移:*2,或溢出(移动后符号位变了就溢出
右移:/2,或丢失精度
以十进制为类比来理解:
只能存4位时
1234左移2位,只能存4位:本该是123400,结果是3400
右移2位:本该是12.34,结果是0012
算术移位判断溢出左移被移出的若有和符号位不同的,就会溢出。右移不会溢出,只有1被移出会影响精度
逻辑左移判断溢出:若高位的1移除,则发生溢出

定点数的加减计算

加减运算电路

标志位:ZF OF SF CF
书p43


无符号数只看CF
CF=1,表示进位,溢出
OF无意义

有符号数只看OF
OF=0说明没溢出


机器数一样,$C{in}$、$C{out}$ 、$Cn$、$C{n-1}$都一样,但表示的值不一样,因为有符号数存的是补码

可以这样理解记忆(结果论):

浮点数的表示与运算

浮点数的表示

表示格式

符号、尾数、阶码概念:书p56
符号 +1 -0

IEEE 754标准

概念什么的见书p57-58划线部分

注意2.中,0.M,M如果是二进制,0.M就是二进制的

给浮点数,求机器数
① 整数、小数部分分别转为二进制
② 移 . 小数点改次数,转换为$±(1. xxx)_{2}×2^n$
③ S(1位):+0-1
④ E(8位):次数的真值+偏置值(127)
⑤ M(23位):. 小数点后面的直接抄,不够位数末尾补0

计算真值+127的时候有技巧:算(n-1)+128(n-1+1000 0000)

原码的1和小数点不用存,存小数点后面的就行,后面补0
建议写成:___(3) ____(4) _(1),方便后续转成16进制


给机器数,求浮点数

先转二进制
手动添上1.
n-127不好算,技巧:n-128+1(蓝色框框)
最后不好算可以左移小数点3位(黑色下划线)

数据的大小端和对齐存储

占用空间:
int 4B
short 2B
char 1B

书写格式:
0x...、...H:16进制
大小端存储

“边界对齐”方式存储
满足两个要求(见下图)

第3章 存储系统

存储器概述

概念看书本p81

主存储器

SRAM和DRAM

DRAM
书p86

行列地址引脚复用:用相同地址线传送行、列地址(分两次传送),地址引脚减半
比如图上传入行号和列号,用2根地址线

共 $2^{a+b}$ 个存储单元(比如这里是 16)
可以写成 $2^a$ 行 $2^b$ 列(比如这里是 $2^2$行 $2^2$列
地址线数量=max{a, b}

静态RAM(SRAM)和动态RAM(DRAM)区别
书p87

只读存储器ROM

特点、类型:书p88

多模块存储器

单体并行存储器

多体并行存储器

高位交叉编址(顺序方式)
高位是自己芯片(存储体)的编号,低位是自己内部的地址

例:

每个存储体1M($2^{20}$),说明低20位表示内部的地址,高3位表示是哪一个存储体

低位交叉编址(交叉方式)(说“交叉编址”默认)
高位是自己内部的地址,低位是自己存储体的编号


例:

每个存储体1M($2^{20}$),说明高20位表示内部的地址,低3位表示是哪一个存储体

交叉存储器可采用轮流启动同时启动两种方式

判断是哪种方式只需要看数据线是=单个模块数or汇总数

扩展了解
高位划掉,对于每个存储体只有4个地址,2位即可表示
拿到4位地址后,通过高两位锁定某个存储体后,只要看低两位就行

本节例题

30.

地址引脚:地址线(这里11)
数据引脚:数据线(这里8)
答:A.

33.

宽度为32位的存储器总线(也就是数据线)
4个64M×8位=>每个地址内容8位
=>4个加起来32位
=>同时启动

交叉编址:判断每个地址在哪个模块,用地址对模块总数(这里是4)取余即可
如图中的例子:6、7,分别在2、3模块
10%=4,x从2开始

double占8字节Byte(64位),每个模块8位bit
同时启动,一次能读所有模块相同的地址,拼到一起变成32位(4模块*8位(2bit4*4)*)
共占3行=>3个存储周期
答:C.

主存储器与CPU的连接

位扩展:地址不变,每个地址能放的位数变多了(变宽)
8个芯片取出的地址一样,数据汇总到一起

CPU数据线数>存储芯片数据位数

字扩展:总地址(即存储字长,每个单元叫一个存储字长)变多(变长)

CPU数据线位数=芯片数据线位数,CPU地址线位数>芯片地址线位数

字位同时扩展

示意图


14根地址线,但CPU传16位地址,高2位是芯片编号,经过译码器翻译到对应的芯片(模块),芯片内具体位置只用低14找即可

本节习题

15.

4000H~5FFFH 有2000H=$2×16^3$(8K)个地址
按字节编址=>1个地址1字节=>8K×8位
=>ROM 8KB
共64KB=>RAM 56KB=56K×8位
8K->56K:×7组
4位->8位:×2
=>14个芯片

外部存储器

高速缓冲存储器 Cache

Cache总容量 = 行数×每行容量(内含数据和标记)

Cache 和主存的映射方式

时间局部性:访问过的数据可能再一次访问;空间局部性:访问过的数据的邻近空间可能被访问

直接映射

已知内存地址,计算块内地址(下下图上左边)

已知内存块号,计算Cache行号(也就是块号)(下图上右边和左边下方)
看标记判断放的是是哪个内存块的

CPU找21:
内存:21
Cache:1行块内地址1

上面是十进制表示地址,二进制表示也一样

就图上这样取余

例:
CPU找21(0001 0101):直接拆分就行
(21/4) 0001 0101/$2^2$
=>低位 01 表示块内地址,高位 0001 01 表示块号
0001 01/$2^2$
=>低2位表示余数,是块内内地址,高位是标记

全相联映射


内存块号作为标记,记录放的是哪一块

组相连

cache分组

具体放到这组哪个位置随便放,组间直接映射,组内全相联

Cache 中主存块替换算法

LRU

最久未使用 LRU(Least Recently Used, 近期最少使用)算法(记忆:Longest Remaining Unused)
计数值的位数:$log_2路数$

Cache 的一致性问题

p123

总结



标记相等,且有效位为1(防止是旧数据,比如关机前的),才能说明cache是你想要的
Cache总容量=标记阵列=地址映射表:书p121


Cache访问流程比较器在书本p119顶部

3.5课后习题

3.5.6

【例 3.3】

3)

p124

29.

31.

代码从a[0]开始读,但是a[0]没有,所以缺失
cache以块为单位,一块4个数据(块大小16B/一个数据占4B),最开始cache为空,找不到第一个数据,就会把整个块16B导入
这里对每个cache块进行读+写,第一个元素读的时候缺失了,把整个cache块放进来,写的时候就不会缺失
这种题目的做法:看一个cache块能放几个数据,一般第一个缺失;再看读/写几次
如果问缺失次数:1000×2×1/8(总次数/缺失率)0

第4章 指令系统

指令系统

概念见书p156-160

定长操作码与扩展操作码


随着地址减少,操作码变多

指令的寻址方式

基址寻址

变址寻址

基址寻址 v.s. 变址寻址

变址寻址处理数组问题

double 8字节 64位
例:书p172 32.

课后习题

27.

29.

34.
如果改成间接寻址:
要看内存存储单元多大,假设是n位,寻址范围为0~$2^n-1$

如果改成相对寻址:(PC)+A,既要看A又要看PC

CISC 和 RISC 的基本概念

书p201-203

第5章 中央处理器:发哥版

CPU功能和基本架构

书p206-208

课后习题

26.
相关知识点——边界对齐:首地址是该类型大小的整数倍;整个大小是最大类型大小的整数倍

本题解答:

按边界对齐,PC也可以放4位,0000~1111,但很多用不到会浪费,好处是访问内存不需要变换
算PC位数:看指令能有多少个位置可以放,再取多少个2
PC位数=内存数量/一个指令占多少个地址(内存器容量/指令字长)

指令执行过程

p213-216

数据通路的功能和基本结构

p219-222

控制器的功能和工原理

异常和中断机制

指令流水线

概念

执行过程:p254

k级流水线执行n条指令的时间:$(k+(n-1))t$
两种理解方式,第一种:

第二种:

当指令足够多的时候,k->0

流水线对指令集的要求

数据不用的时候先放在寄存器里
OP 100 200 拆分成三条指令:
① LOAD 2 100:100号地址的x取出来,放到2号寄存器
② LOAD 5 200:200号地址的y取出来,放到5号寄存器
③ OP 2 5:2号寄存器和5号寄存器内容相加
拆分指令可以使各条时间缩短,让各条指令时间相近
故设计时,一条指令要么访问内存,要么计算

流水线的冒险与处理

结构冒险
数据冒险
控制冒险

性能指标

吞吐量TP
加速比S
见书p259-260

习题

31.

load在MEM阶段拿到数据,下条指令的EXE应在load的MEM之后
转移指令下条的IF 要在转移指令的MEM之后

第5章 中央处理器:王道版



第6章 总线

总线概述

总线的分类


地址总线也可以作为数据通路的媒介

总线的性能指标

e.g.:

总线事务和定时

总线定时

第7章 输入/输出系统

I/O接口

I/O接口基本结构

I/O端口及其编址

I/O方式

程序查询方式

查询方式示例:

例题:

程序中断方式



e.g.1:

e.g.2:

DMA方式



发表评论