代码改变世界

进程互斥与同步

2019-04-23 17:34  陆许  阅读(400)  评论(0编辑  收藏  举报

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

       并发:任一时刻仅有一个程序的一个操作在处理器上执行,一个CPU上不可以同时进行一个以上的进程,只能将CPU分为若干个时间段,使之分时地交替进行。

       并行:一个进程在一个CPU上执行时,另一个CPU可以执行另外一个进程,两个进程之间不互相抢夺资源。

       并发不是并行,两者是相似但是又有区别的,并发是指两个或多个事件在同一时间间隔发生,而并行是指两个或多个事件在同一时刻发生。


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

        进程的交互有两种关系:竞争和协作。竞争关系采取进程互斥的策略,协作关系采取进程同步的策略。


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

        进程的互斥是指两个进城之间不可以同时运行,会相互排斥,只有当一个进程完成才能进行下一个进程的执行,两个进程之间是否完成需要信号的传递,进程之间逐次使用互斥共享资源,也是进程使用资源次序的一种协调。


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

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

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

        死锁和“饥饿”都是由于竞争资源而引起的,但是死锁进程都处于等待状态,处于非等待状态的进程却有可能被饿死;死锁进程等待永远不会释放资源,“饥饿”进程等待会被释放资源但不会给自己分配资源;死锁一定会发生循环等待,而“饥饿”不一定;死锁一定涉及多个进程,而“饥饿”则不一定;死锁情形下,系统可能会因为没有任何一个进程运行而导致崩溃,但是“饥饿”一定至少有一个进程在正常运行。

 

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

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

       与同一共享变量有关的临界区分散在各个并发进程的程序段中,而进程的执行速度不可预知,如果能够保证一个进程在临界区执行时不让另一个进程进入相同的临界区,即各进程对共享变量的访问时互斥的,那么就不会引发与时间有关的错误。

 

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

        用信号量表示物力资源的实体,是一个与队列有关的整型变量。信号量在操作系统中主要用于封锁临界区、进程同步及维护资源计数。

        如果定义一个二元信号量mutex。使mutex=1,在各个进程申请资源访问时,只能有一个进程抢占到此临界区进入P(mutex),当此进程完成后,利用V(mutex)退出后下一进程才可以进入此临界区,在进入临界区的此进程没有完成之前任何进程不能进入此临界区,因为PV操作具有不可中断性。

 

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

semophore fork[n];

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

   fork[n]=1;

cobegin

    process Pi() {                           

        while(true){

             line();    //排队

             P(fork[i]);                               

             /*临界区*/

             V(fork[i]);                                 

         }

    }

coend