文章
438
粉丝
0
获赞
0
访问
76.5k
(1)内核区,阻塞态
(2)用户栈,scanf,printf
(3)用户栈,运行时堆,可读写数据段
评分及理由
(1)得分及理由(满分2分)
学生答案:“内核区,阻塞态”。
标准答案:进程控制块(PCB)位于内核区;执行scanf()等待输入时,进程处于阻塞态。
学生答案与标准答案完全一致,表述准确。
得分:2分
(2)得分及理由(满分3分)
学生答案:“用户栈,scanf,printf”。
标准答案:main()函数的代码位于只读代码段;其直接调用的scanf()和printf()需要通过执行驱动程序实现。
学生答案存在逻辑错误:main()函数的代码应位于只读代码段(.text段),而非用户栈。用户栈用于存放函数调用时的局部变量、返回地址等信息,不存放可执行代码。此部分错误属于对进程地址空间布局的基本概念理解有误。
对于“需要通过执行驱动程序实现的函数”部分,学生答出了scanf和printf,这是正确的。
由于第一问(main函数位置)存在根本性错误,扣分。
得分:1分(仅答对后半部分)
(3)得分及理由(满分3分)
学生答案:“用户栈,运行时堆,可读写数据段”。
标准答案:变量ptr(全局变量)位于可读写数据段;变量length(若不在寄存器)位于用户栈;ptr指向的字符串(由malloc分配)位于运行时堆。
学生答案顺序与问题顺序不一致。根据学生答案的三个位置,分别对应:
第一空“用户栈”对应的是问题中的变量ptr,这是错误的,ptr是全局变量,应位于可读写数据段。
第二空“运行时堆”对应的是问题中的变量length,这是错误的,length是局部变量,应位于用户栈。
第三空“可读写数据段”对应的是问题中ptr指向的字符串,这是错误的,字符串是动态分配的内存,应位于运行时堆。
学生答案的三个位置全部错位,且每个位置对应的变量均不正确,表明对变量存储区域的理解存在混淆。
得分:0分
题目总分:2+1+0=3分
登录后发布评论
暂无评论,来抢沙发