文章

986

粉丝

5

获赞

20

访问

247.9k

头像
2025 年 10 月第 1 次 408 月考试卷 - 第45题回答
操作系统
发布于2025年12月3日 14:56
阅读数 132


评分及理由

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

得分:1分

理由:学生定义了四个信号量,其中 `full` 和 `empty` 的含义和初始值(`full=0`,`empty=k`)与标准答案一致,各得0.5分,共1分。但存在严重逻辑错误:
1. `mutex-1` 和 `mutex-2` 初始值设为0是错误的,这会导致所有生产者和消费者一开始就被阻塞,无法进行。互斥信号量初始值应为1。
2. 信号量命名和含义不清晰,`mutex-1` 和 `mutex-2` 意图可能是分别控制生产者和消费者的指针操作,但标准答案需要的是对每个缓冲区的互斥访问(`mutex[0..k-1]`)和指针互斥(`ptr_mutex`),学生答案中缺少对单个缓冲区的互斥保护,且用两个信号量分别控制生产者和消费者无法正确实现环形缓冲区的顺序访问和互斥要求。
因此,扣除3分。

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

得分:0分

理由:学生的伪代码存在多处逻辑错误:
1. 第一个 `Process 生产者` 代码块中,只有对 `mutex-1` 的互斥操作,没有对 `empty` 和 `full` 信号量的同步操作,无法保证缓冲区有空才写,也无法通知消费者。
2. 第二个 `Process 生产者` 代码块中,虽然使用了 `wait(empty)` 和 `signal(full)`,但顺序和逻辑混乱:`signal(full)` 在写入缓冲区之前执行,意味着还未写入数据就通知消费者缓冲区已满,这是错误的。正确的顺序应该是先申请空位,再互斥写入,最后通知有数据。
3. 缺少关键的指针操作(确定写入哪个缓冲区)以及对特定缓冲区的互斥访问。整个流程无法满足题目要求的“按缓冲区编号递增顺序循环写入”。
因此,该部分答案不得分。

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

得分:0分

理由:学生的伪代码存在严重逻辑错误:
1. 消费者进程中同时 `wait(full)` 和 `wait(empty)`,这意味着消费者需要同时满足“缓冲区有数据”和“缓冲区有空位”才能运行,这违背了消费者只应在有数据时运行的逻辑,会导致死锁或无法执行。
2. `signal(mutex-2)` 放在最后,但之前没有对应的 `signal` 来释放可能由其他操作占用的资源,且 `mutex-2` 的初始值为0会导致进程一开始就阻塞。
3. ...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发