InkSoul/content/408/《计组》大题.md

583 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: "《计组》大题"
date: 2023-07-23T11:15:49+08:00
---
## 换算单位及公式
* 1G = $2^{10}$M = $2^{20}$K当表示传输率时K = $10^3$;表示容量时K = $2^{10}$
* 1ns = $10^3$ms【毫秒】 = $10^6$us【微秒】=$10^9$ns【纳秒】 = $10^{12}$ps【皮秒】
* 1B【字节】 = 8bit【位】【比特】
* 存储容量 = 存储字数 * 字长
* 存储器的数据传输率 = 数据宽度/存储周期
* 数据线的宽度 = MDR的宽度 = 存储字长
* 地址线的宽度 = MAR的宽度 = 存储字数
* C语言中
* double = 8字节 = 64位
* float = 4字节 = 32位
* int = 4 字节
* char = 1字节
* short = 2字节
* long = 4字节
* 存储元存储二进制的电子元件每个存储元可存1bit
* 存储单元:每个存储单元存放一串二进制代码
* 存储字字:存储单元中二进制代码的组合
* 存储字长:存储单元中二进制代码的位数
* 机器字长:计算机一次能处理的二进制代码长度,可通过寄存器的位数判断机器字长
* 一定与机器字长相同的部件ALU通用寄存器
* 指令字长:指令的二进制长度
* 数据字长:数据总线一次能并行传送信息的次数
## 历年真题
![](../../images/408/《计组》大题/历年真题1.jpg)
1
A准备32位数据所需要的时间 = $\frac{4B}{2MB/S} = 2us$即最多每隔2us查一次
每次查询次数为$\frac{1s}{2us} = 5\times 10^5$
每秒CPU用于A输入输出的时间至少为$5\times10^5\times10\times4 = 2\times 10^7$个时钟周期
百分比 = $\frac{2 \times 10^7}{500M} = 4%$
2
中断响应和中断处理的时间 = 400$\times \frac{1}{500M} = 0.8us$
B准备32位数据需要的时间 = $\frac{4B}{40MB/S} = 0.1us$<中断处理时间
因此数据会被刷新B不适合采用中断IO方式
3
B每秒的DMA次数最多 = $\frac{40MB}{1000B} = 40000$次
CPU用于B输入输出时间 = $40000\times500 = 2\times10^7$个时钟周期
百分比 = $\frac{2\times10^7}{500M} = 4%$
---
![](../../images/408/《计组》大题/历年真题2.jpg)
1
传送一个ASCII码传输一个起始位7位数据位1个校验位1位停止位共1+7+1+1=10
1S可接收$\frac{1}{0.5\times10^{-3}}$= 20000个字符
2
时钟周期 = $\frac{1}{50M} = 20ns$
将字符送到端口的时间 = $\frac{0.5ms}{20ns} = 2.5\times10^4$个时钟周期
1000个字符所需时钟周期 = $1000\times(2.5\times10^4+10+15\times4) = 25070000$个
CPU的时间 = $1000\times(10+20\times4) = 90000$个时钟周期
关中断、保护断点和程序状态、识别中断源
---
![](../../images/408/《计组》大题/历年真题3.jpg)
1
1S内申请的中断次数 = $\frac{0.5MB}{4B} = 125000$次
CPU每次用于数据传送的时钟周期 = $5\times18 + 5\times2$ = 100个时钟周期
1S用于中断的开销 = 100$\times125000 = 12.5M$个时钟周期
因此百分比 = $\frac{12.5M}{500M} = 2.5%$
2
1SDMA次数 = $\frac{5MB}{5000B} = 1000$次
DMA的开销 = $1000\times500 = 0.5M$个时钟周期
百分比 = $\frac{0.5M}{500M} = 0.1%$
## 存储系统相关
![](../../images/408/《计组》大题/存储系统1.jpg)
1
主存块大小64B = $2^6B$ ,主存地址低6位为块内地址
Cache组数 = $\frac{32KB}{64B\times8} = 2^6$主存中地址6位为Cache组号
Tag位为32-6-6 = 20位
LRU位占3位$2^3$ = 8
采用直写方式,无修改位
2
0080 0000H 低6位全为0
因此S位于主存块的开始处
每块可容纳$\frac{64B}{4B} = 16个int$数据
Cache缺失次数 = $\frac{1024}{16} = \frac{2^{10}}{2^4} = 2^6 = 64$次
3
0010 0003H组索引为0让地址映射到指令Cache的第0组
Cache初始为空Cache行有效位为0Cache访问缺失
该主存块取出后存入指令Cache第0组的任意一行将主存地址有20位填入该行标记字段设置有效位修改LRU位
根据块内地址0000 11B从该行取出相应内容
---
![](../../images/408/《计组》大题/存储系统2.jpg)
1
CPU时钟周期 = $\frac{1}{800M} = 1.25ns$
总线时钟周期 = $\frac{1}{200M} = 5ns$
总线带宽 = $200M \times \frac{32}{8} = 800MB/S$
2
Cache块32BCache缺失时要一个读突发传送总线事务读取一个主存块
3
一次读突发传送总线事务 = 1次地址传送 + 32B数据传送 = 5ns+40+8$\times$5 = 85ns
4
Cache中1条指令用的时间 = 1.25$\times$4 = 5ns
Cache缺失的额外开销 = 平均访存次数 $\times$Cache缺失率$\times$1次总线突发时间 = 1.2$\times$5% $\times$ 85ns = 5.1ns
即执行时间 = 100$\times 15 + 5.1 = 1505.1ns$
---
![](../../images/408/《计组》大题/存储系统3.jpg)
1
页大小4KB即页内地址占12位
因此高18位表示虚页号低122位表示页内地址
2
8组3位表示组号
|TLB15位|3位组号|12位页内地址|
|---|---|---|
3
LRU最近最少使用
TLB组号 = 虚页号 mod TLB组数
TLB组号依次为2,4,0,7,3,4,4,4
4号组虚页号为12,4,12,20
替换虚页号4
4
虚页号增减32 - 30 = 2位TLBTag字符增加2位
TLB表位数增加2位
---
![](../../images/408/《计组》大题/存储系统4.jpg)
1
物理地址 = 实页号 + 页内地址 = 16+12 = 28位
2
全相联映射TLB用SRAM
3
Cache采用组相联映射1位LRU位1位脏位
Cache总容量 = $2^3\times2(20+1b+1b+1b+23B) = 4464b = 558B$
有效位用来指出所在Cache行中的信息是否有效
4
0008 C040的虚页号为0008H对应实页号0040H
物理地址0040040H组号010 = 2组
有对应项,但有效位=0因此Cache不命中
0007C60后12位 = 260H = 0010 0110 0000
组号011=3第3组
---
![](../../images/408/《计组》大题/存储系统5.jpg)
1
虚拟地址24位$2^{24} = 16MB$
物理地址20位$2^{20} = 1MB$
页面大小4KB = 页面偏移量占12位
因此高12位表示虚页号高8位表示页框号
2
Cache8行 = Cache块号占3位$2^3$ = 8
块大小32B = 块内偏移量占5位$2^5 = 32$
主存字块标记占20-8 = 12位
|主存字块标记12为|Cache字块标记3位|字块内标记5位|
|---|---|---|
3
001C60H = 0000 0000 0001 1100 0110 0000
虚页号为 0000 0000 0001 = 1且有效位为1 = 在主存中对应页框04
即物理地址为0000 0100 1100 0110 0000 = 04C60H
Cache字块号为011=3有效位为1值为105H不等于04CH
因此Cache未命中
4
024BACH = 0000 0010 0100 1011 1010 1100
TLB有2个组 = 高11位为TLB标记最低1位为TLB组号
虚页号为0000 0010 0100BTLB标记为0000 0010 010B = 012H组号为0
组0有效位 = 1标记 = 012的项 = TLB命中即在主存中
---
![](../../images/408/《计组》大题/存储系统6.jpg)
1
页大小8KB = 页内偏移地址为13位
A = B = 32 -13 = 19,D = 13,C = 24-13 = 11
Cache行数 = $\frac{64KB}{64KB\times2} = 512 $ => F = 9
主存块大小 = 64KB => G = 6
因此A=B=19,C=11,D=13,E=24-9-6=9,F=9,G=6
2
4099 = 00 0001 0000 0000 0011
cache组号 = 0 0000 0011 = 3
对应H字段内容为 0 0000 1000B
3
缺页更大缺页处理需要访问磁盘Cache缺失访问主存
4
直写策略同时写快速存储器而慢速磁盘速度更慢所以在Cache-主存层次用直写
在主存-外存层次,用回写策略
---
![](../../images/408/《计组》大题/存储系统7.jpg)
1
|有效位|脏位|替换控制位|标记位|
|---|---|---|---|
地址总长度28位$2^28$ = 256MB
块内地址6位$2^6 = 64$
cache块号3位$2^3 = 8$
所以Tag位数 = 28-6-3 = 19位1位有效位
所以cache行为
|有效位1位|19位标记位|64B存储的数据|
|---|---|---|
数据cache容量 = $8\times(64+\frac{20}{8})B = 532B$
2
a[0][3]地址 = $320+32\times4B = 101000000+001111100 = 110111100_B$=>cache行号为$110_B = 6$
a[1][1]地址 = $320+256\times4+1\times4 = 1348 = 10101000100_B$=>Cache行号为$101_B = 5$
3
数组A按行存放程序A按行存取
每个字块存16个int数型A的命中率 = $\frac{15}{16} = 93.7%$,B的命中率 = 0A更快
---
![](../../images/408/《计组》大题/存储系统8.jpg)
1
4KB = $2^{12}B$ =>虚拟地址高20位为虚拟页号
1行和30行都为00401H=>都在同一页中
2
Cache有$\frac{64}{4} = 16组 $=>组号占4位
主存块大小64B =>块内地址占6位
|22位Tag|4位组号|6位块内地址|
|---|---|---|
3
16行00401025H
025H = 0000 0010 0101B
页大小4KB =>虚地址与物地址低12位相同
组号为0000B = 0 =>对应cache组号为0命中
---
## 数据运算相关
![](../../images/408/《计组》大题/数据运算1.jpg)
1
X = $(134)_{10} = 1000 0110B =>R_1的内容为86H$
$y = (246)_{10} = 1111 0110B$
$x-y = 1000 0110 + 0000 1010 = 1001 0000$
=>$R_5的内容为90H$
x+y = 1000 0110 +1111 0110 = 0111 1100 = 7CH
=>$R_6的内容为7CH$
2
$m = 1000 0110_{[补]} = 1111 1010_{[原]} = -122$
$ n = 1111 0110_{[补]} = 1000 1010_{[原]} = -10$
3
n位加法器可实现
---
![](../../images/408/《计组》大题/数据运算2.jpg)
1
乘法可通过加法和移位实现
2
控制循环次数,控制加法和移位操作
3
a最长c最短
---
## 指令执行相关
![](../../images/408/《计组》大题/指令执行1.jpg)
1
10次16行的call指令
2
12行是条件转移指令
16行20行30行一定会使程序跳转执行
3
0040 1025 + 5 = 0040 102AH
目标地址 = PC+ 偏移量 => 偏移量 = 00401000H - 0040 102AH = FFFF FFD6H
小端方式
4
f(13) > $2^{32} - 1$,发生了溢出的错误结果,可将$f_1$的返回值类型改为double
5
乘积的高33位非全0或非全1OF = 1加一条溢出自陷指令
---
![](../../images/408/《计组》大题/指令执行2.jpg)
1
CISCM的指令长短不一不符合RISC的指令系统的特点
2
长度 = 0040 107FH -0040 1020H +1 = 60H = 96B
4
不能,$f_2$为浮点数其有阶码不能单纯靠左移实现power*2运算
---
![](../../images/408/《计组》大题/指令执行3.jpg)
1
ALU宽度16位可寻址大小 = $2^{20}B = 1MB$
指令寄存器长度 = 单条指令长度 = 16位
MAR20位MDR8位
2
R型$2^4 = 16$种操作
通用寄存器 = $2^2 = 4个$
I、J型2^6 -1 = 63种操作
3
01B2H = 0000 0001 1011 0010B
功能为R[3]$\leftarrow$ R[1]-R[2]
执行01B2HB052H - 0008H = B04AH,未溢出
执行01B3HB052H $\times$0008H = 8290H结果溢出
4
符号扩展
5
丁型指令
---
![](../../images/408/《计组》大题/指令执行4.jpg)
1
最多 $2^4$ = 16条指令操作码占4位
操作数占6位寻址方式占3位寄存器编号占3位=>$2^3$ = 8个通用寄存器
MAR需16位128KB = $2^{17}B$
字长为16位 => MDR至少为16位
2
PC的范围 0~$2^{16}-1$(存储器字长16位)
$R_n$的相对偏移量 $-2^{15}\backsim2^{15}-1$
主存地址空间$2^16$
因此转移指令的目标范围为0000H ~ FFFFH($0\backsim2^{16}-1)$
3
addR4,R5+
|OP|Ms|Rs|Md|Rd|
|---|---|---|---|---|
|0010|001|100|010|101|
十六进制为0010 0011 0001 0101B = 2315H
将R4内容所指的存储单元的数据与R5内容中所指的存储单元数据相加再将结果送入R5内容所指的存储单元中
R4 = 1234H1234H = 5678HD5 = 5678H5678 = 1234H
即5678H + 1234 = 68ACH之后R5自增
R5和存储单元5678H会改变R5的内容从5678H变为5679H5678H内容变为68ACH
---