文章
60
粉丝
0
获赞
0
访问
3.7k
(1)
第一问:上述程序执行时,其进程控制块位于内核区。
第二问:执行scanf()等待键盘输入时 ,该进程处于阻塞态。
(2)
第一问:main()函数的代码位于用户栈。
第二问:main()函数直接调用的scanf,printf功能需要通过执行驱动程序实现。
(3)
第一问:变量ptr被分配在运行时堆。
第二问:若变量length没有被分配在寄存器中,会被分配在可读写数据段。
第三问:ptr指向的字符串位于可读写数据段。
评分及理由
(1)得分及理由(满分2分)
学生答案:进程控制块位于内核区,执行scanf()时进程处于阻塞态。
标准答案:PCB位于内核区,执行scanf()时进程处于阻塞态。
评分:两问均回答正确,得2分。
(2)得分及理由(满分3分)
学生答案:main()函数代码位于用户栈;其直接调用的scanf、printf需要通过驱动程序实现。
标准答案:main()函数代码位于只读代码段;scanf()和printf()需要执行驱动程序。
评分:第一问错误,main()函数的代码应位于只读代码段(.text段),而非用户栈。用户栈用于存放函数调用时的局部变量、返回地址等,不存放代码。此处存在逻辑错误,扣1分。第二问正确,scanf和printf确实需要驱动程序(如终端I/O驱动)实现。得2分。本小题总计得2分。
(3)得分及理由(满分3分)
学生答案:变量ptr分配在运行时堆;变量length分配在可读写数据段;ptr指向的字符串位于可读写数据段。
标准答案:变量ptr分配在可读写数据段;变量length分配在用户栈;ptr指向的字符串位于堆区。
评分:
第一问错误。ptr是全局变量,应分配在可读写数据段(.data或.bss段),而非运行时堆。运行时堆(heap)是动态内存分配的区域,ptr本身作为一个指针变量,其存储位置是静态的。扣1分。
第二问错误。length是main函数内的局部变量,若未分配在寄存器中,应分配在用户栈(stack),而非可读写数据段。扣1分。
第三问错误。ptr指向的字符串是通过malloc(100)动态分配的内存,应位于运行时堆(heap),而非可读写数据段。扣1分。
本小题总计得0分。
题目总分:2+2+0=4分
登录后发布评论
暂无评论,来抢沙发