进程互斥与同步

1.解释并发与并行,并说明两者关系。

并发:交替做不同事情,不同的代码块交替执行
并行:同时做不同事情,不同的代码块同时执行

 

并发和并行都是完成多任务更加有效率的方式

 

2.进程间有哪几咱关系?分别要采取什么策略?

竞争关系和协作关系

竞争关系:资源竞争会引发两种问题,一种是死锁,另一种是饥饿。采用进程互斥策略,使若干进程相互争夺独占型资源而产生的竞争制约。

协作关系:采用进程同步策略,使完成共同任务的并发进程基于某个条件来协调其活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约。

 

3.为什么说进程的互斥也是一种同步?

进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源,也是对进程使用资源的次序的一种协调。

 

4.解释死锁与“饥饿”,并说明两者关系

死锁:一组进程因争夺资源陷入永远等待的状态

饥饿:一个可运行进程由于其他进程总是优先于它。而被调度程序无限期地拖延而不能被执行

相同点:死锁和饥饿都是由于竞争资源而引起的。

不同点:

  1. 从进程状态考虑,死锁进程都处于等待状态,忙等待(处于运行或就绪状态)的进程并非处于等待状态,但却可能被饿死;
  2. 死锁进程等待永远不会被释放的资源,饿死进程等待会被释放但却不会分配给自己的资源,表现为等待时限没有上界(排队等待或忙式等待);
  3. 死锁一定发生了循环等待,而饿死则不然。这也表明通过资源分配图可以检测死锁存在与否,但却不能检测是否有进程饿死;
  4. 死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个。
  5. 在饥饿的情形下,系统中有至少一个进程能正常运行,只是饥饿进程得不到执行机会。而死锁则可能会最终使整个系统陷入死锁并崩溃。

5.什么叫做临界区?如何解决进程对临界资源的访问冲突?

临界区:并发进程中与共享变量有关的程序段称为临界区

临界区的调度原则:

  1. 一次至多只有一个进程进入临界区内执行
  2. 如果已有进程在临界区中,试图进入此临界区的其他进程应等待。
  3. 进入临界区内的进程应在有限时间内退出,以便让等待队列中的一个进程进入。

互斥使用,有空让进;

忙则要等,有限等待;

择一而入,算法可行。

6.信号量的物理意义是什么?

(1) 若信号量s为正值,则该值等于在封锁进程之前对信号量s可施行的P操作数,亦即等于s所代表的实际使用的物理资源个数.
(2) 若信号量s为负值,则其绝对值等于登记排列在该信号量s队列之中等待进程的个数,亦即恰好等于对信号量s实施P操作而被封锁起来并进入信号量s队列的进程数.
(3) 通常P操作意味着请求一个资源,V操作意味着释放一个资源.在一定条件下,P操作代表挂起进程操作,而V操作代表唤醒被挂起进程的操作.

7.理解五个哲学家吃面问题,并能盲写出伪代码。

 semaphore fork[5]

  for(int i=0;i<5;i++)

    fork[i]=1;

cobegin

  process philosopher_i()

  {

    while(true)

    {

      think();

      P(fork[i]);

      P(fork[(i+1)%5]);

        eat();

      V(fork[i]);

      V(fork[(i+1)%5]);

    }

  }

coend

8.一个超市有n个顾客购物,只有一个收银员,试用信号量P、V操作描述顾客进程和收银员之间的关系。写伪代码。

int customers=n;
int Cashier=1;
int wait=0;

cobegin

process Cashier()

{

   while(true)

  {

    P(customers);

    wait--;

    V(Cashier);

    balance();

  }

}

process customers()

{   

   while(true)

   {

     if(wait<=0)

       wait++;

     else

       V(Cashier);

   }

}

coend

 

posted @ 2019-04-23 16:07  白丶zt  阅读(369)  评论(0)    收藏  举报