Skip to content

2021年 408 操作系统 第 45 题

操作系统2021年综合题7分

题目 ​

下表给出了整型信号量 S 的 wait() 和 signal() 操作的功能描述,以及采用开/关中断指令实现信号量操作互斥的两种方法。

功能描述 ​

c
Semaphore S;

wait(S) {
    while (S <= 0);
    S = S - 1;
}

signal(S) {
    S = S + 1;
}

方法 1 ​

c
wait(S) {
    关中断;
    while (S <= 0);
    S = S - 1;
    开中断;
}

signal(S) {
    关中断;
    S = S + 1;
    开中断;
}

方法 2 ​

c
wait(S) {
    关中断;
    while (S <= 0) {
        开中断;
        关中断;
    }
    S = S - 1;
    开中断;
}

signal(S) {
    关中断;
    S = S + 1;
    开中断;
}

请回答下列问题:

(1) 为什么在 wait() 和 signal() 操作中对信号量 S 的访问必须互斥执行?

(2) 分别说明方法 1 和方法 2 是否正确。若不正确,请说明理由。

(3) 用户程序能否使用开/关中断指令实现临界区互斥?为什么?

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题