《操作系统--精髓与设计原理》第五章复习题

第五章    并发性:互斥与同步

一、列出与并发相关的4个设计问题。

进程间通信资源共享和竞争(如内存、文件、I/O访问)、多个进程活动的同步以及给进程分配处理器时间等。

二、产生并发的三种上下文是什么?

  1. 多应用程序:多道程序设计技术允许在多个活动的应用程序间动态共享处理器时间。
  2. 结构化应用程序:作为模块化设计和结构化程序设计的扩展,一些应用程序可被有效地设计成一组并发进程。
  3. 操作系统结构:同样的结构化程序设计优点适用于系统程序,且我们已知操作系统自身常常作为一组进程或线程实现。

三、执行并发进程最基本的要求是什么?

控制对共享资源的访问,加强互斥的能力。

四、列出进程间的三种互相知道的程度,并简要给出各自的定义。

  1. 进程之间相互不知道对方的存在:
  2. 进程间接知道对方的存在(如共享对象)
  3. 进程直接知道对方的存在(它们有可用的通信原语0)

五、竞争进程和合作进程有何区别?

竞争进程需要同时访问相同的资源,像磁盘,文件或打印机。合作进程要么共享访问一个共有的资源,像一个内存访问区,进程必须合作以确保它们共享的数据得到正确管理,控制机制必须确保共享数据的完整性。要么就与其他进程相互通信,在一些应用程序或活动上进行合作,通信提供同步和协调各种活动的方法。

六、列出与竞争进程相关的三个控制问题,并简要给出各自的定义。

  1. 互斥(mutual exclusion):竞争进程仅可以访问一个临界资源(一次仅有一个进程可以访问临界资源),并发机制必须满足一次只有一个进程可以访问临界资源这个规则。当一个进程在临界区访问共享资源时,其他进程不能进入该临界区访问任何共享资源的情形。
  2. 死锁(deadlock):两个或两个以上的进程因每个进程都在等待其他进程做完某些事情而不能继续执行的情形。
  3. 饥饿(starvation):一个可运行进程尽管能继续执行,但被调度程序无限期地忽视,而不能被调度执行的情形。

七、列出对互斥的要求。

  1. 必须强制实施互斥:在与相同资源或共享对象的临界区有关的所有进程中,一次只允许一个进程进入临界区。
  2. 一个在非临界区停止的进程不能干涉其他进程。
  3. 绝不允许出现需要访问临界区的进程被无限延迟的情况,即不会死锁或饥饿。
  4. 没有进程在临界区中时,任何需要进入临界区的进程必须能够立即进入。
  5. 对相关进程的执行速度和处理器的数量没有任何要求和限制。
  6. 一个进程驻留在临界区中的时间必须是有限的。

八、在信号量上可以执行什么操作?

为了达到预期效果,可把信号量视为一个值为整数的变量,整数值上定义了三个操作:

  1. 一个信号量可以初始化为非负数。
  2. semWait操作使信号量减1。若值变成负数,则阻塞执行semWait的进程,否则进程继续执行。
  3. semSignal操作使信号量加1.若值小于等于零,则被semWait操作阻塞的进程解除阻塞。
除了这三个操作外,没有任何其他方法可以检查或操作信号量。

九、二元信号量跟一般信号量有何区别?

二元信号量(binary semaphore)是一种更为严格的形式。二元信号量的值只能是0或1,可由下面三个操作定义:

  1. 二元信号量可以初始化为0或1.
  2. semWaitB操作检查信号的值。若值为0,则进程执行semWaitB就会受阻。若值为1,则将值改为0,并继续执行该进程。
  3. semSignalB操作检查是否有任何进程在该信号上受阻。若有进程受阻,则通过semWaitB操作,受阻的进程会被唤醒;若没有进程受阻,则值设置为1。
理论上,二元信号量更易于实现,且可以证明它和普通信号具有相同的表达能力。

十、强信号量和弱信号量有何区别?

强信号量要求在信号量上等待的进程按照先进先出的规则从队列中移出。弱信号量没有此规则。

十一、什么是管程?

管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块,其主要特点如下:

  1. 局部数据变量只能被管程的过程访问,任何外部过程都不能访问。
  2. 一个进程通过调用管程的一个过程进入管程。
  3. 在任何时候,只能有一个进程在管程中执行,调用管程的任何其他进程都被阻塞,以等待管程可用。

十二、关于消息,阻塞和无阻塞有何区别?

发送者和接收者都可阻塞或不阻塞。通常有三种组合,但任何一个特定系统通常只实现一种或两种组合:

  1. 阻塞send,阻塞receive:发送者和接收者都被阻塞,直到完成信息的投递。这种情况有时也称会合(rendezvous),它考虑到了进程间的紧密同步。
  2. 无阻塞send,阻塞receive:尽管发送者可以继续,但接收者会被阻塞直到请求的消息到达。这可能是最有用的一种组合,它允许一个进程给各个目标进程尽快地发送一条或多条消息,继续工作前必须接收到消息的进程将被阻塞,知道该消息到达。例如,一个服务器进程给其他进程提供服务或资源。
  3. 无阻塞send,无阻塞receive:不要求任何一方等待。
发送者和接收者任一方阻塞则消息传递需要等待,都无阻塞则不需等待。

十三、与读者/写者问题相关的条件通常有哪些?

读者/写者问题定义如下:存在一个多个进程共享的数据区,该数据区可以是一个文件或一块内存空间,甚至可以是一组寄存器;有些进程(reader)只读取这个数据区中的数据,有些进程(writer)只往数据区中写数据。此外,还必须满足以下条件:

  1. 任意数量的读进程可同时读这个文件。
  2. 一次只有一个写进程可以写文件。
  3. 若一个写进程正在写文件,则禁止任何读进程读文件。

猜你喜欢

转载自blog.csdn.net/qq_36414798/article/details/80602211
今日推荐