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

11 KiB
Raw Permalink Blame History

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通用寄存器
  • 指令字长:指令的二进制长度
  • 数据字长:数据总线一次能并行传送信息的次数

历年真题

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%


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个时钟周期

关中断、保护断点和程序状态、识别中断源


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%

存储系统相关

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从该行取出相应内容


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$


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位


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组


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命中即在主存中


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-主存层次用直写

在主存-外存层次,用回写策略


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更快


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命中


数据运算相关

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位加法器可实现


1

乘法可通过加法和移位实现

2

控制循环次数,控制加法和移位操作

3

a最长c最短


指令执行相关

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加一条溢出自陷指令


1

CISCM的指令长短不一不符合RISC的指令系统的特点

2

长度 = 0040 107FH -0040 1020H +1 = 60H = 96B

4

不能,f_2为浮点数其有阶码不能单纯靠左移实现power*2运算


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

丁型指令


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