文章
16
粉丝
42
获赞
14
访问
4.9k
(1) PCB 位置与进程状态
• PCB(进程控制块) 位于内核区,因为 PCB 是操作系统管理进程的数据结构,由内核维护。
• 执行 scanf() 等待键盘输入时,该进程处于阻塞状态(等待 I/O 完成)。
(2) main() 代码区域与需驱动函数
• main() 函数的代码位于只读代码区(因为程序代码是只读的)。
• 直接调用的 scanf() 函数需要通过执行驱动程序实现,因为它涉及键盘输入的硬件交互。
(3) 变量分配区域
• 指针变量 ptr 是局部变量,在函数栈中分配,因此位于用户栈区域。
• 如果 length 没有分配在寄存器中,它是局部变量,也会位于用户栈区域。
• ptr 指向的字符串是通过 malloc 动态分配的,位于堆区
评分及理由
(1)得分及理由(满分2分)
学生答案正确指出PCB位于内核区,以及执行scanf()时进程处于阻塞状态。这两点与标准答案完全一致,因此得满分2分。
(2)得分及理由(满分3分)
学生正确指出main()函数的代码位于只读代码区,并正确识别scanf()需要通过驱动程序实现。但遗漏了printf()函数,printf()输出到控制台同样需要执行驱动程序。因此扣1分,得2分。
(3)得分及理由(满分3分)
学生正确指出ptr指向的字符串位于堆区,但错误地认为ptr变量本身在用户栈区域。ptr是全局变量,应分配在可读写数据段,而不是用户栈。length变量的分配位置回答正确。由于ptr变量的区域回答错误,扣1分,得2分。
题目总分:2+2+2=6分
登录后发布评论
暂无评论,来抢沙发