diff --git a/content/408/《计组》大题.md b/content/408/《计组》大题.md new file mode 100644 index 0000000..956b01b --- /dev/null +++ b/content/408/《计组》大题.md @@ -0,0 +1,582 @@ +--- +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/《计组》大题/历年真题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/《计组》大题/历年真题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/《计组》大题/历年真题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/《计组》大题/存储系统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行有效位为0,Cache访问缺失 + +该主存块取出后存入指令Cache第0组的任意一行,将主存地址有20位填入该行标记字段,设置有效位,修改LRU位 + +根据块内地址0000 11B从该行取出相应内容 + + +--- + +![](../../images/《计组》大题/存储系统2.jpg) + + +(1) + +CPU时钟周期 = $\frac{1}{800M} = 1.25ns$ + +总线时钟周期 = $\frac{1}{200M} = 5ns$ + +总线带宽 = $200M \times \frac{32}{8} = 800MB/S$ + +(2) + +Cache块32B,Cache缺失时要一个读突发传送总线事务读取一个主存块 + +(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/《计组》大题/存储系统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/《计组》大题/存储系统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/《计组》大题/存储系统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 0100B,TLB标记为0000 0010 010B = 012H,组号为0 + +组0有效位 = 1,标记 = 012的项 = TLB命中,即在主存中 + +--- + +![](../../images/《计组》大题/存储系统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/《计组》大题/存储系统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的命中率 = 0,A更快 + + + +--- + +![](../../images/《计组》大题/存储系统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/《计组》大题/数据运算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/《计组》大题/数据运算2.jpg) + +(1) + +乘法可通过加法和移位实现 + +(2) + +控制循环次数,控制加法和移位操作 + +(3) + +a最长,c最短 + +--- + + + +## 指令执行相关 + + +![](../../images/《计组》大题/指令执行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或非全1,OF = 1,加一条溢出自陷指令 + + +--- + +![](../../images/《计组》大题/指令执行2.jpg) + +(1) + +CISC,M的指令长短不一,不符合RISC的指令系统的特点 + +(2) + +长度 = 0040 107FH -0040 1020H +1 = 60H = 96B + +(4) + +不能,$f_2$为浮点数,其有阶码,不能单纯靠左移实现power*2运算 + + +--- + +![](../../images/《计组》大题/指令执行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] + +执行01B2H:B052H - 0008H = B04AH,未溢出 + +执行01B3H:B052H $\times$0008H = 8290H,结果溢出 + +(4) + +符号扩展 + +(5) + +丁型指令 + +--- + +![](../../images/《计组》大题/指令执行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) + +add(R4),(R5)+ + +|OP|Ms|Rs|Md|Rd| +|---|---|---|---|---| +|0010|001|100|010|101| + +十六进制为0010 0011 0001 0101B = 2315H + +将R4内容所指的存储单元的数据与R5内容中所指的存储单元数据相加再将结果送入R5内容所指的存储单元中 + +(R4) = 1234H,(1234H) = 5678H,(D5) = 5678H,(5678) = 1234H + +即5678H + 1234 = 68ACH,之后R5自增 + +R5和存储单元5678H会改变,R5的内容从5678H变为5679H,5678H内容变为68ACH + + +--- diff --git a/content/408/《计组》输入输出系统.md b/content/408/《计组》输入输出系统.md index 4c7de2a..73a88f6 100644 --- a/content/408/《计组》输入输出系统.md +++ b/content/408/《计组》输入输出系统.md @@ -223,4 +223,62 @@ date: 2023-07-22T13:59:04+08:00 * 各种IO控制方式的对比和例题 * ![](../../images/《计组》输入输出系统/IO控制方式对比.png) -* ![](../../images/《计组》输入输出系统/IO例题.jpg) \ No newline at end of file +* ![](../../images/《计组》输入输出系统/IO例题.jpg) + + +## 思维导图 + +* 结构 + * CPU + * 程序查询 + * 中断 + * DMA + * 接口 + * 按字传输型,每次传输一个字 + * DMA型,每次传输一整块 + * 传输总线 + * 并行 + * 多位一起传 + * 串行 + * 一位一位传 + * 可能会有附加的校验位、起始位、结束位 + * 设备 + * 无指挥 + * IO设备按自己的节奏往IO缓冲区冲入数据 + * CPU不及时取走数据,可能导致数据丢失 + * 有指挥 + * IO设备会根据CPU的智慧,往IO缓冲区冲如数据 + * CPU从缓冲区中取走一个字的数据后,会智慧IO设备输入下一个字的数据,不会有数据丢失的问题 +* 重点 + * CPU每次介入的动作 + * 程序查询方式 + * 每次检查IO接口数据是否准备完毕 + * 一次程序查询的时间开销,需要执行多少条指令/多少个时钟周期 + * CPU介入的频率,取决于查询程序上CPU的时间频率 + * 中断控制方式 + * 中断响应(隐指令) + * 时间开销 + * 通常以时钟数作为条件 + * 中断服务程序 + * 时间开销 + * 时钟数 + * 指令总数,结合CPI + * CPU介入的频率 + * 取决于IO接口发来中断的频率 + * DMA控制方式 + * 预处理 + * 让DMA接口输入一块数据 + * 后处理 + * 一整块数据传输完成后,DMA接口给CPU中断,CPU处理中断 + * CPU介入频率 + * 每传一块介入一次 + * 数据丢失问题 + * 程序查询方式 + * 当IO缓冲区大小有限时,每一次数据冲入后,CPU都要及时把数据取走,防止丢失 + * 若CPU每次查询的时间开销太久,可能导致IO接口数据覆盖 + * 中断控制方式 + * 判断是否会数据丢失,中断处理的时间,总共花了多少,是否大于IO接口冲入一次数据的时间 + * 若中断处理时间太久,可能导致IO接口数据覆盖 + * DMA控制方式 + * 不会数据丢失 + diff --git a/static/images/《计组》大题/历年真题1.jpg b/static/images/《计组》大题/历年真题1.jpg new file mode 100644 index 0000000..c483d30 Binary files /dev/null and b/static/images/《计组》大题/历年真题1.jpg differ diff --git a/static/images/《计组》大题/历年真题2.jpg b/static/images/《计组》大题/历年真题2.jpg new file mode 100644 index 0000000..ed4adb2 Binary files /dev/null and b/static/images/《计组》大题/历年真题2.jpg differ diff --git a/static/images/《计组》大题/历年真题3.jpg b/static/images/《计组》大题/历年真题3.jpg new file mode 100644 index 0000000..f8bfb04 Binary files /dev/null and b/static/images/《计组》大题/历年真题3.jpg differ diff --git a/static/images/《计组》大题/存储系统1.jpg b/static/images/《计组》大题/存储系统1.jpg new file mode 100644 index 0000000..2c7eb91 Binary files /dev/null and b/static/images/《计组》大题/存储系统1.jpg differ diff --git a/static/images/《计组》大题/存储系统2.jpg b/static/images/《计组》大题/存储系统2.jpg new file mode 100644 index 0000000..aa1c379 Binary files /dev/null and b/static/images/《计组》大题/存储系统2.jpg differ diff --git a/static/images/《计组》大题/存储系统3.jpg b/static/images/《计组》大题/存储系统3.jpg new file mode 100644 index 0000000..3fecf60 Binary files /dev/null and b/static/images/《计组》大题/存储系统3.jpg differ diff --git a/static/images/《计组》大题/存储系统4.jpg b/static/images/《计组》大题/存储系统4.jpg new file mode 100644 index 0000000..485befa Binary files /dev/null and b/static/images/《计组》大题/存储系统4.jpg differ diff --git a/static/images/《计组》大题/存储系统5.jpg b/static/images/《计组》大题/存储系统5.jpg new file mode 100644 index 0000000..b2d135a Binary files /dev/null and b/static/images/《计组》大题/存储系统5.jpg differ diff --git a/static/images/《计组》大题/存储系统6.jpg b/static/images/《计组》大题/存储系统6.jpg new file mode 100644 index 0000000..6beb279 Binary files /dev/null and b/static/images/《计组》大题/存储系统6.jpg differ diff --git a/static/images/《计组》大题/存储系统7.jpg b/static/images/《计组》大题/存储系统7.jpg new file mode 100644 index 0000000..80fa613 Binary files /dev/null and b/static/images/《计组》大题/存储系统7.jpg differ diff --git a/static/images/《计组》大题/存储系统8.jpg b/static/images/《计组》大题/存储系统8.jpg new file mode 100644 index 0000000..8dfd9c0 Binary files /dev/null and b/static/images/《计组》大题/存储系统8.jpg differ diff --git a/static/images/《计组》大题/指令执行1.jpg b/static/images/《计组》大题/指令执行1.jpg new file mode 100644 index 0000000..9ea8e4d Binary files /dev/null and b/static/images/《计组》大题/指令执行1.jpg differ diff --git a/static/images/《计组》大题/指令执行2.jpg b/static/images/《计组》大题/指令执行2.jpg new file mode 100644 index 0000000..fd68c9f Binary files /dev/null and b/static/images/《计组》大题/指令执行2.jpg differ diff --git a/static/images/《计组》大题/指令执行3.jpg b/static/images/《计组》大题/指令执行3.jpg new file mode 100644 index 0000000..7c75a00 Binary files /dev/null and b/static/images/《计组》大题/指令执行3.jpg differ diff --git a/static/images/《计组》大题/指令执行4.jpg b/static/images/《计组》大题/指令执行4.jpg new file mode 100644 index 0000000..41830ca Binary files /dev/null and b/static/images/《计组》大题/指令执行4.jpg differ diff --git a/static/images/《计组》大题/数据运算1.jpg b/static/images/《计组》大题/数据运算1.jpg new file mode 100644 index 0000000..f4e5cb2 Binary files /dev/null and b/static/images/《计组》大题/数据运算1.jpg differ diff --git a/static/images/《计组》大题/数据运算2.jpg b/static/images/《计组》大题/数据运算2.jpg new file mode 100644 index 0000000..a41df9a Binary files /dev/null and b/static/images/《计组》大题/数据运算2.jpg differ diff --git a/static/images/《计组》大题/数据运算3.jpg b/static/images/《计组》大题/数据运算3.jpg new file mode 100644 index 0000000..c2d846f Binary files /dev/null and b/static/images/《计组》大题/数据运算3.jpg differ