科目组合
计算机: 数据结构 、计算机组成原理 、操作系统 、计算机网络

评分及理由
(1)得分及理由(满分4分)
学生给出了算法的基本设计思想:分别遍历第 i 行和第 i 列来统计出度和入度,然后比较出度与入度,若出度大于入度则记录并输出该顶点。这一思路与标准答案一致,正确描述了核心步骤。因此,本部分得满分 4 分。
(2)得分及理由(满分9分)
学生尝试用代码描述算法,但存在多处严重逻辑错误:
1. 代码中使用了未定义的变量(如 n、m、count 未初始化,且 n 应为图的顶点数 G.numVertices)。
2. 循环结构混乱:第二个 for(j = 0; j < n; i++) 中循环变量递增错误(应为 j++),且内部嵌套循环 for(int i2 = 0; i2 < n; i++) 的循环变量递增也错误(应为 i2++),同时循环体中的 Edge[i][j] 下标使用不当(应为 Edge[i2][j] 来统计入度)。
3. 统计逻辑错误:出度统计中 count++ 误用于统计边数而非顶点计数;入度统计的嵌套循环完全错误,无法正确计算入度。
4. 缺少顶点名称输出步骤,且整体代码无法正确实现算法功能。
尽管思路正确,但代码实现存在根本性错误,无法正确运行。根据评分标准,逻辑错误需扣分。考虑到代码部分满分9分,此处仅给予基本思路分,扣除大部分实现分数。给予 2 分(思路描述部分得分)。
题目总分:4+2=6分

评分及理由
(1)得分及理由(满分8分)
学生回答生成了3个初始归并段,与标准答案一致,得2分。
第一个归并段内容为“37,51,63,92,94,99”,与标准答案完全一致,得2分。
第二个归并段内容为“14,15,23,31,48,56,60,90,166”,与标准答案完全一致,得2分。
第三个归并段内容为“8,17,42,100”。标准答案为“8,17,43,100”。学生答案中“42”应为“43”的识别错误(数字2和3在部分字体下容易混淆)。根据禁止扣分规则第1条和第4条,由于是图片识别导致的相似字符误写,且不影响核心逻辑(归并段数量和整体结构正确),此处不扣分。因此第三个归并段得2分。
本小题共得8分。
(2)得分及理由(满分2分)
学生回答最大可能长度为n,最小可能长度为m,与标准答案完全一致。各得1分,本小题共得2分。
题目总分:8+2=10分

评分及理由
(1)得分及理由(满分3分)
学生答案正确。数组a共24行64列,每个int占4B,总大小=24×64×4B=6KB。页面大小4KB,因此需要2个页面存储。访问数组a时,按行优先访问,第一个页面(存放a[0][0]~a[15][63])会触发一次缺页,第二个页面(存放a[16][0]~a[23][63])会触发第二次缺页。页故障地址分别是起始地址0042 2000H和下一个页面起始地址0042 3000H(因为4KB=0x1000)。学生答案与此一致,得3分。
(2)得分及理由(满分2分)
学生答案基本正确。题目问“不考虑变量i和j,该程序段的数据访问是否具有时间局部性?为什么?”。标准答案指出每个元素仅被访问一次,没有重复访问,因此没有时间局部性。学生回答“只有空间局部性”,并解释“有相邻元素在不久后被访问,而没有相同的元素在不久后被访问”,虽然没有直接说“没有时间局部性”,但通过“只有空间局部性”和解释,已经正确表达了时间局部性不存在的意思。因此不扣分,得2分。
(3)得分及理由(满分4分)
学生答案部分正确,部分错误。
① 块内地址:主存块大小32B=2^5B,所以低5位(A4~A0)是块内地址。学生答“第0~4位是块内地址”,正确。
② Cache组号:数据Cache大小8KB,4路组相联,块大小32B。组数 = (8KB / 32B) / 4 = 256 / 4 = 64组。组号需要6位(2^6=64)。块内地址占5位,因此组号位于地址位A10~A5。学生答“第5~12位是组号”,这是错误的,应该是A10~A5(即第5位到第10位),学生多算了位数。
③ a[1][0]的虚拟地址:数组起始地址0042 2000H,按行优先,a[1][0]的偏移量为(1×64+0)×4 = 256 = 0x100。所以虚拟地址为0042 2000H + 0x100 = 0042 2100H。学生答0042 2040H,计算错误(可能误将行索引当作字节偏移直接加,或计算有误)。
④ Cache组号:根据正确地址0042 2100H,取A10~A5。0042 2100H二进制为...,低12位为0x100(0001 0000 0000),A10~A5是第10位到第5位:从低到高编号,A10~A5对应二进制位为“001000”(即十进制8)。学生答组号为2,错误。
综合:学生答对块内地址部分(1分),但组号位数、虚拟地址、具体组号均错误。考虑到组号位数和具体地址计算是核心,扣分较多。给1分(仅块内地址正确)。
(4)得分及理由(满分5分)
学生答案部分正确,部分错误。
① 数组a占多少主存块:数组总大小6KB,主存块大小32B,块数=6KB/32B=192块。学生计算正确。
② 按行优先循环的Cache命中率:Cache采用4路组相联,数据区8KB,块大小32B,共64组。按行访问时,每个主存块装入Cache后,后续访问同一块中的其他7个int会命中(因为一个块有8个int)。所以命中率=7/8=87.5%。学生计算正确。
③ 按列优先循环的Cache命中率:学生答“命中率为0”,这是错误的。虽然列访问会破坏空间局部性,导致频繁换出块,但由于Cache有64组,且数组a只有192块,且访问过程中不会和其他数据冲突,只要数组a的块映射到不同组,在列访问时仍然可能因为Cache容量足够大(8KB)而保留部分块,不会必然导致命中率为0。实际上,标准答案给出列访问命中率也是87.5%(因为虽然访问顺序改变,但每个块内的8个元素仍然是连续访问的,只不过跨块访问顺序不同;在Cache容量足够且不发生冲突的情况下,命中率与行访问相同)。学生回答0显然错误。
综合:前两问正确(占3分),第三问错误扣2分。得3分。
题目总分:3+2+1+3=9分

评分及理由
(1)得分及理由(满分3分)
学生答案正确给出第20条指令的虚拟地址为004010B9H(标准答案为004010B9H)。得3分。
(2)得分及理由(满分3分)
第一问:学生正确指出两条指令都采用相对寻址方式,与标准答案一致。第二问:学生给出了计算过程“00401079 + 02 + 09 = 00401084H”,并说明“02是PC+1的结果”,这本质上是正确的(PC更新为下一条指令地址,即当前指令地址+指令长度2字节),计算过程与标准答案一致。得3分。
(3)得分及理由(满分2分)
第一问:学生回答“源操作数采用变址寻址方式”是错误的。题目问的是源操作数(即数值10)的寻址方式,应为立即寻址。学生可能混淆了目的操作数的寻址方式(基址变址寻址)。扣1分。
第二问:学生回答“ecx中存放的是前i-1行的值,前i-1行有多少元素”,表述模糊不准确。标准答案为“ecx存放的是i×256”。学生答案未给出明确数值,且“前i-1行”概念错误(应为前i行)。扣1分。
第三问:学生回答“该系统用小端存储”正确。得1分。
本小题总计得1分(第一问0分,第二问0分,第三问1分)。
(4)得分及理由(满分1分)
学生回答“不缺页”结论正确。理由“因为页号都是00401H”基本正确(标准答案为虚页号相同,均为00401H)。得1分。
题目总分:3+3+1+1=8分

评分及理由
(1)得分及理由(满分4分)
学生答案指出了两处错误并给出了正确的修改:
if (key == TRUE) 改为 while (key == TRUE)。lock = TRUE; 改为 lock = FALSE;。这两处修改与标准答案完全一致,正确实现了临界区互斥。因此,本小题得满分4分。
(2)得分及理由(满分3分)
学生答案第一问回答“不可以”,正确。
第二问给出的理由是“因为交换值的过程要保证其原子性,否则可能会发生错误访问临界区”。该理由准确地指出了问题的核心:swap指令是原子操作,而函数调用newSwap在多线程并发执行时无法保证原子性,可能导致互斥失效。理由与标准答案的核心观点一致。
因此,本小题得满分3分。
题目总分:4+3=7分

评分及理由
(1)得分及理由(满分3分)
学生答案:①的前一个操作是③,①的后一个操作是⑤,⑥的后一个操作是④。
标准答案:①的前一个操作是③,后一个操作是⑤;⑥的后一个操作是④。
学生的答案与标准答案完全一致。得3分。
(2)得分及理由(满分2分)
学生答案:②会使CPU从P进程切换到其他进程;①之后,调度器可以调度P。
标准答案:CPU一定会从进程P切换到其他进程的操作是②;CPU调度程序才能选择进程P执行的操作是①。
学生的答案与标准答案完全一致。得2分。
(3)得分及理由(满分1分)
学生答案:③是由键盘驱动程序完成的。
标准答案:属于键盘驱动程序的操作是③。
学生的答案与标准答案完全一致。得1分。
(4)得分及理由(满分2分)
学生答案:中断处理时,P处于阻塞态;CPU处于内核态。
标准答案:键盘中断处理程序执行时,进程P处于阻塞状态;CPU处于内核态。
学生的答案与标准答案完全一致。得2分。
题目总分:3+2+1+2=8分

评分及理由
(1)得分及理由(满分3分)
学生答案:FTP的控制连接是持久的,数据连接是非持久的,H登录时建立的TCP连接是控制连接。
标准答案:控制连接是持久的;数据连接是非持久的;控制连接。
分析:学生答案与标准答案完全一致,全部正确。
得分:3分。
(2)得分及理由(满分2分)
学生答案:F的第一个字节序号为101,断开连接的过程中FTP发送的第二次Ack序号是18101。
标准答案:101, 18102。
分析:第一个字节序号101正确。第二次挥手的ACK序号应为18102(服务器期望收到的下一个序号,即已收到的最后一个字节序号18000+初始序号101+1=18102)。学生答案为18101,计算错误。
得分:1分(仅第一个空正确)。
(3)得分及理由(满分2分)
学生答案:收到2101的确认段时,调整为2MSS;收到7101的确认段时,调整为1MSS。
标准答案:3MSS, 5MSS。
分析:学生答案完全错误。根据TCP拥塞控制(慢启动和拥塞避免),在未发生丢包的情况下,收到确认段会调整拥塞窗口。收到确认序号2101时,表明字节2100及之前已确认,此时拥塞窗口应增长。收到确认序号7101时同理。学生答案的2MSS和1MSS不符合拥塞窗口增长逻辑。
得分:0分。
(4)得分及理由(满分2分)
学生答案:至少需要19RTT = 190ms。
标准答案:需要6个RTT,即至少60ms,平均发送速率2.4Mbps。
分析:学生答案的19RTT和190ms完全错误。计算过程应考虑建立连接(三次握手,1个RTT)、数据传输(根据MSS和拥塞窗口计算所需轮次)、以及连接释放(四次挥手,但最后两个挥手可与数据传输重叠,通常不计入额外RTT)。标准答案为6RTT。学生未计算平均发送速率。
得分:0分。
题目总分:3+1+0+0=4分