第四章:进程的通信课后习题


单项选择题

  1. (1)有3个进程P1、P2、P3共享同一个程序段,而每次最多允许两个进程进入该程序段,则信号量S的初值为
    • A. 0
    • B. 1
    • C. 2
    • D. 3

答案:C. 2
解释:信号量用于控制对共享资源的访问。如果每次最多允许两个进程进入程序段,信号量S的初值应为2。

  1. (2)在操作系统中,wait、signal操作是一种
    • A. 机器指令
    • B. 系统调用命令
    • C. 作业控制命令
    • D. 低级进程通信

答案:D. 低级进程通信
解释:wait和signal操作是用于进程间通信的低级原语,它们用于实现进程同步和互斥。

  1. (3)用signal操作唤醒一个进程时,被唤醒进程的状态应变成状态。
    • A. 等待
    • B. 运行
    • C. 就绪
    • D. 完成

答案:C. 就绪
解释:signal操作用于唤醒处于等待状态的进程,将其状态改变为就绪状态。

  1. (4)用信箱实现并发进程间的通信需要两个基本的通信原语,它们是
    • A. wait原语和signal原语
    • B. send原语和receive原语
    • C. R(S)和W(S)
    • D. 以上都不是

答案:B. send原语和receive原语
解释:send和receive是信箱通信中的基本原语,用于发送和接收消息。

  1. (5)设与某资源关联的信号量初值为3,当前值为1。若M表示当前该资源的可用个数,N表示当前等待该资源的进程数,则M、N分别是
    • A. 0、1
    • B. 1、0
    • C. 1、2
    • D. 2、0

答案:B. 1、0
解释:信号量的当前值为1,表示有一个资源可用(M=1)。由于没有进程在等待(信号量值不是负数),N=0。

  1. (6)用来实现进程同步与互斥的wait操作和signal操作,实际上是的过程。
    • A. 一个可被中断
    • B. 一个不可被中断
    • C. 两个可被中断
    • D. 两个不可被中断

答案:D. 两个不可被中断
解释:wait和signal操作通常是原子操作,不可被中断,以确保进程同步和互斥的正确性。

填空题

  1. (1)临界资源是一次只允许一个进程使用的资源,临界区是访问临界资源的那段代码
  2. (2)信号量s>0时,表示资源的空闲数量;当s=0时,表示资源已经耗尽,但没有进程在等待;若s<0,则表示有|s|个进程在等待
  3. (3)设计进程同步机制的准则有空闲让进忙则等待有限等待让权等待

基本概念解释和辨析

  1. 同步与互斥

    • 同步:指协调进程间的执行顺序,使得进程按照一定的顺序执行。
    • 互斥:指确保在任何时刻,只有一个进程能访问临界资源。
  2. 临界资源与临界区

    • 临界资源:指一次只能被一个进程使用的资源。
    • 临界区:指访问临界资源的代码段,需要互斥执行。
  3. 高级通信与低级通信

    • 高级通信:指操作系统提供的进程间通信机制,如消息队列、共享内存等。
    • 低级通信:指基本的通信原语,如信号量、管程等。
  4. 直接通信与间接通信

    • 直接通信:指进程间直接交换信息,如通过共享内存。
    • 间接通信:指进程间通过某种中介(如信箱、消息队列)交换信息。

论述题

(1)什么是“忙等待”?如何克服“忙等待”?

**“忙等待”**是指当一个进程试图进入一个已经被占用的临界区时,该进程不断检查资源是否可用的状态,而不是挂起等待资源释放。这种状态下,进程白白消耗CPU时间,不做任何有用的工作。

**克服“忙等待”**的方法是让试图进入忙状态的临界区的进程进入“睡眠”状态,即阻塞状态,这样它就不会消耗CPU资源。当资源被释放时,由释放资源的进程通过某种机制(如信号量)来唤醒等待的进程。

(2)在解决进程互斥时,如果TS指令的执行可以中断,则会出现什么情况?而如果wait、signal的执行可分割,又会出现什么情况?

如果TS(Test and Set)指令的执行可以中断,则可能破坏互斥条件。TS指令用于设置一个标志位,并返回设置前的标志位值。如果TS指令在测试和设置之间被中断,其他进程可能错误地认为资源可用,导致多个进程同时进入临界区。

如果wait、signal操作的执行可分割,则可能破坏信号量机制的原子性。wait操作应该原子性地减少信号量的值,而signal操作应该原子性地增加信号量的值。如果这些操作可以被中断,它们可能不会正确地更新信号量的值,导致进程同步问题。

(3)设有n个进程共享一互斥段,对于如下两种情况:

(1)每次只允许一个进程进入临界区;
(2)最多允许m个进程(m<n)同时进入临界区。
所采用的信号量是否相同?信号量值的变化范围如何?
对于这两种情况,所采用的信号量是不同的。第一种情况使用的是互斥信号量,其初值设为1,允许一个进程进入临界区。第二种情况使用的是计数信号量,其初值设为m,允许最多m个进程同时进入临界区。信号量值的变化范围为:

  • 第一种情况:信号量的值变化范围为0到1。
  • 第二种情况:信号量的值变化范围为0到m。
(4)下面是两个并发执行的进程,它们能正确执行吗?若不能正确执行,请举例说明,并改正之(x是公共变量)。

这两个进程不能正确执行,因为它们对共享变量x的访问没有进行同步,导致了竞态条件。进程P1和P2中的代码片段不是原子操作,它们可以被中断,导致x、y、z的值可能不正确。

改正方法
使用信号量或其他同步机制来确保对共享变量x的操作是原子的,并且避免竞态条件。例如:

struct semaphore s;
s.value = 1;

void P1() {
   
    int y, z;
    wait(s);
    x = 1;
    y = 0<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值