标签:临界资源 进程 维护 进入 map 为什么 通信 总结 表示
1.解释并发与并行,并说明两者关系。
答:并发指的是一个处理器在同一时间段内执行多个进程,但注意不是同一时刻同时执行,只是以极快的速度进行进程的切换执行,从而形成并行的效果。
并行指的是多个处理器同时处理多个进程,即同一时刻同时执行多个进程。并发和并行在处理速度上基本相当,但在本质上有所区别。
例如吃饭的时候电话响了,并发指的是先停止吃饭,然后迅速去接听电话,两者是交替进行的;而并行则是在边吃饭的同时边接听电话,两者是同时进行的。
解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
解释三:并行在多台处理器上同时处理多个任务,并发的是在一台处理器上“同时”处理多个任务。
2.进程间有哪几种关系?分别要采取什么策略?
答:进程间存在竞争与和协作两种基本关系。
当出现竞争关系时会引发两个控制问题:死锁与饥饿。解决方法:向并发进程提供锁机制,在使用共享资源之前表达互斥要求,系统需要保证诸进程能互斥访问共享资源,既要解决死锁问题,又要解决饥饿问题。
当出现协作关系时,解决方法为:在未输入完一块数据之前不能加工处理,未加工处理完一块数据之前不能打印输出,每个进程都要接收到协作进程完成一次数据处理的消息之后,才能进行下一步工作。如双方不知道对方名字的间接协作,可以通过访问共享资源进行松散式协作;如知道对方名字,可以通过通信机制进行的紧密协作。
3.为什么说进程的互斥也是一种同步?
答:进程的互斥指的是在一个进程执行时,要求另一个进程需要进行等待,即需要两个进程相互协调合作,这在一定程度上也是一种同步。
4.解释死锁与“饥饿”,并说明两者关系。
答:死锁:即一组进程因为争夺资源而陷入永远等待的状态。
“饥饿”:即一个可运行的进程由于其他进程总是优先于它,而被调度程序无限期地拖延而导致不能被执行。
两者的关系:死锁和饥饿都最终都是导致进程因为进程之间的竞争而无法执行,但前者是由于竞争双方的资源争夺而导致双方都无法继续进行,后者则是个别进程因为优先级过低,而一直处于等待状态无法进行。
5.什么叫做临界区?如何解决进程对临界资源的访问冲突?
答:并发进程中与共享变量有关的程序段称为临界区;共享变量所代表的资源称为临界资源。
遵循临界区调度的三个原则:
(1)一次至多只有一个进程进入临界区内执行。
(2)如果已有进程在临界区中,试图进入临界区的其他进程应等待。
(3)进入临界区内的进程应在有限时间内退出,以便让等待队列中的一个进程进入。
即总结为:互斥使用,有空让进;忙则要等,有限等待;择一而入,算法可行。
6.信号量的物理意义是什么?
信号量表示物理资源的实体,是一个与队列有关的整型变量。主要用于封锁临界区、进程同步即维护资源计数。
7.理解五个哲学家吃面问题,并能盲写出伪代码。
semaphore fork[5]; for(int i=0;i<5;i++){ fork[i]=1; } begin{ process philosophers_i(){ //i=1,2,3,4,5 while(true){ think(); hungry(); P(fork[i]); p(fork[(i+1)%5]); eat(); V(fork[i]); V(fork[(i+1)%5]); } } }end
8.一个超市有n个顾客购物,只有一个收银员,试用信号量P、V操作描述顾客进程和收银员之间的关系。写伪代码。
semaphore cashier; cashier = 1; //收银员作为信号量被占用,且只有一个 int length = n; int []P = new int[length]; //完成购买用户队列,用户排队,且最大值为n int []V = {}; //完成结账用户队列,初值为空 begin do{ for(int i =0; i<length; i++ ){ //用户排队 P.remove(i); //用户占用收银员 payment(); //用户结账 V.add(i); //用户解除占用收银员 length --; //待结账用户减一 } }while(length == 0) //用户结账完毕,交易结束 end
标签:临界资源 进程 维护 进入 map 为什么 通信 总结 表示
原文地址:https://www.cnblogs.com/heshaojian/p/10757881.html