文章

164

粉丝

0

获赞

1

访问

43.8k

头像
2024年(408)计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年12月3日 11:18
阅读数 1

(1)为临界区,因为B中仅有一个数据分组,并且仅有B为空时才可执行C1,说明对B的C1操作需要进行互斥操作,若一个已经写入,另一个则不能进行写入

(2)Semaphore full=0;//缓冲区空

进程P1

{

C1;

signal(full);

}

进程P2

wait(full);

C2;

(3)Semaphore full=n;

进程p1

{

wait(full);

C3;

}

进程p2

{

wait(full);

C3;

}


评分及理由

(1)得分及理由(满分2分)

学生正确指出C1操作为临界区,并给出了合理的解释:因为缓冲区B只能存放一个数据分组,且B为空时才能执行C1,所以多个进程执行C1时需要互斥。该回答与标准答案核心思想一致,表述清晰。得2分。

(2)得分及理由(满分3分)

学生答案存在逻辑错误。首先,信号量定义`full=0`正确,用于表示缓冲区是否为空。但是,学生的代码中缺少了对缓冲区B的互斥保护。进程P1执行C1和进程P2执行C2时,如果仅用`full`进行同步,当多个进程并发执行C1或C2时,可能同时访问缓冲区B,导致数据不一致。标准答案中使用了互斥信号量`mutex`来保护对缓冲区的访问。此外,学生代码中P1执行C1前没有检查缓冲区是否为空的条件(虽然题目假设初始为空,但作为通用同步逻辑不完整)。因此,该部分答案不完整且存在逻辑缺陷。扣2分,得1分。

(3)得分及理由(满分3分)

学生答案存在严重逻辑错误。学生定义信号量`full=n`,但题目并未定义`n`的含义,且C3操作要求“B非空时才能执行”,信号量`full`的用法与同步逻辑不符。学生试图用`wait(full)`来控制对C3的访问,但这实际上限制了同时执行C3的进程数量,而非确保B非空。正确的做法应使用互斥信号量(如`mutex`)来保证对缓冲区B的修改操作C3是互斥的,因为C3是修改操作,多个进程同时修改会导致数据竞争。学生答案未能正确实现互斥,也未体现“B非空”的条件(虽然题目假设初始不为空,但逻辑不完整)。因此,该部分答案逻辑错误,扣3分,得0分。

题目总分:2+1+0=3分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发