文章

115

粉丝

0

获赞

0

访问

7.8k

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


评分及理由

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

学生答案:不是。执行结果与P1、P2执行C1的先后次序有关。
标准答案:是的,实现的代码可以被视为临界区。
评分:得0分。
理由:题目问实现C1的代码是否为临界区。C1操作是向共享缓冲区B写入数据分组,当多个进程(P1和P2)都需要执行C1时,它们会并发地访问和修改共享资源B。为了防止数据不一致(例如,两个进程同时写入导致数据覆盖或混乱),必须保证互斥访问,因此执行C1的代码是临界区。学生回答“不是”,并解释为与执行次序有关,这恰恰说明了并发访问会导致结果不确定,这正是需要互斥(即定义为临界区)的原因。因此,学生的判断和理由均错误,本题不得分。

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

学生答案:定义信号量mutex=0。P1执行C1后signal(mutex),P2执行wait(mutex)后C2。
标准答案:需要两个信号量,一个互斥信号量(mutex=1)保证对缓冲区的互斥访问,一个同步信号量(full=0)保证“B非空时才能执行C2”。进程P1需先wait(mutex)执行C1,然后signal(mutex)再signal(full)。进程P2需先wait(full),再wait(mutex)执行C2,然后signal(mutex)。
评分:得1分。
理由:学生只定义了一个信号量mutex,且初值为0。这个设计实现了P1和P2之间的基本同步:P1先执行C1,然后signal使mutex变为1,P2的wait得以通过并执行C2。这保证了“B为空时才能执行C1”和“B非空时才能执行C2”的先后顺序。但是,该方案存在严重逻辑错误:信号量mutex被同时用于互斥和同步,且初值为0会导致任何进程都无法先进入临界区获取互斥锁(如果后续需要互斥的话)。更重要的是,题目场景中缓冲区B是共享资源,C1和C2对B的读写操作本身需要互斥保护,而学生的代码中C1()和C2()的执行没有互斥保护,这是错误的。因此,学生答案实现了基本同步,但缺失了关键的互斥保护,扣2分。

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

学生答案:定义信号量mutex=1。P1和P2均执行wait(mutex); C3(); signal(mutex);
标准答案:需要一个互斥信号量(mutex=1)来保证对缓冲区B的互斥访问。P1和P2均执行wait(mutex); C3()...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发