进程互斥与同步

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

  并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

  并行是指一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。要区别于并发。

  并行与并发的区别在于是否同时处理多个任务,并发具有同时处理多个任务的能力,但不一定同时处理,而并行的关键就在于具有同时处理多个任务。

 

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

  进程间存在两种基本关系:竞争和协作。

  竞争是指分时系统中建立多个交互式进程,它们共享一套计算机系统资源,使得原本不存在逻辑关系的诸进程因共享资源而产生交互和制约关系,这是间接制约关系,又称互斥关系,操作系统必须协调进程对共享资源的争用。竞争资源的独立进程之间不交换信息,一个进程的执行可能影响到竞争资源的其他进程,如果它们要访问同一独占型资源,那么一个进程通过操作系统分配获得这一资源,另一个进程不得不等待。在极端情况下,被租塞进程永远得不到访问权,从而不可能成功的终止。资源竞争将引发两个问题一是死锁,二是饥饿。

  为了解决这些问题最简单策略就是FCFS资源分配策略,等待最久的进程将会是下一个被调度的进程。

  协作是指一个作业可涉及一组并发进程,它们为了完成共同任务需要分工协作,由于每个进程都有独立的以不可预知的速度推进,在执行的先后次序上就要有约束,需要相互协作的进程在某些关键点上协调各自的工作。当其中一个进程到达关键点后,在尚未得到其伙伴进程发来的消息或信号之前应租塞自己,等待协作者发来信号或消息后方可被唤醒并继续执行、这种协作进程之间需要排定次序的协调关系是直接制约关系。称为进程同步。

  

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

  因为进程的互斥要逐次使用互斥共享资源,这也是对进程使用资源的一种协调。

 

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

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

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

  死锁是同步的,饥饿是异步的。也就是说,死锁可以认为是两个进程同时在请求对方占有的资源,饥饿可以认为是一个线程或是进程在无限的等待另外两个或多个线程或进程占有的但是不会往外释放的资源。

 

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

  并发进程中与共享变量有关的程序段称为临界区。临界区必须以一种相对于其他进程而言互相排斥的方式执行。

  位正确有效地使用临界资源,共享变量的并发进程应遵守临界区调度的三个原则:

  (1)一次至多只有一个进程进入临界区内执行

  (2)如果已有进程在临界区中,试图进入此临界区的其他进程应等待。

  (3)进入临界区内的进程应在有限时间内退出,以便让等待队列中的一个进程进入。

 

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

semaphore fork[5];
    for( int i=0 ; i<5 ; i++)
        fork[i] =1 ;
cobegin
    process philosoper_i(){
  while(true){
    think();
   P(fork[i]);
   P(fork[(i+1)%5]) ;
        eat() ;
    V(fork[i]) ;
   V(fork[(i+1)%5]) ;   
    }          
}
coend

 

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

 

posted on 2019-04-23 17:27  施伟康  阅读(343)  评论(0编辑  收藏  举报

导航