进程互斥与同步
1.解释并发与并行,并说明两者关系。
并发:交替做不同事情,不同的代码块交替执行
并行:同时做不同事情,不同的代码块同时执行
并发和并行都是完成多任务更加有效率的方式
2.进程间有哪几咱关系?分别要采取什么策略?
竞争关系和协作关系
竞争关系:资源竞争会引发两种问题,一种是死锁,另一种是饥饿。采用进程互斥策略,使若干进程相互争夺独占型资源而产生的竞争制约。
协作关系:采用进程同步策略,使完成共同任务的并发进程基于某个条件来协调其活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约。
3.为什么说进程的互斥也是一种同步?
进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源,也是对进程使用资源的次序的一种协调。
4.解释死锁与“饥饿”,并说明两者关系
死锁:一组进程因争夺资源陷入永远等待的状态
饥饿:一个可运行进程由于其他进程总是优先于它。而被调度程序无限期地拖延而不能被执行
相同点:死锁和饥饿都是由于竞争资源而引起的。
不同点:
- 从进程状态考虑,死锁进程都处于等待状态,忙等待(处于运行或就绪状态)的进程并非处于等待状态,但却可能被饿死;
- 死锁进程等待永远不会被释放的资源,饿死进程等待会被释放但却不会分配给自己的资源,表现为等待时限没有上界(排队等待或忙式等待);
- 死锁一定发生了循环等待,而饿死则不然。这也表明通过资源分配图可以检测死锁存在与否,但却不能检测是否有进程饿死;
- 死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个。
- 在饥饿的情形下,系统中有至少一个进程能正常运行,只是饥饿进程得不到执行机会。而死锁则可能会最终使整个系统陷入死锁并崩溃。
5.什么叫做临界区?如何解决进程对临界资源的访问冲突?
临界区:并发进程中与共享变量有关的程序段称为临界区
临界区的调度原则:
- 一次至多只有一个进程进入临界区内执行
- 如果已有进程在临界区中,试图进入此临界区的其他进程应等待。
- 进入临界区内的进程应在有限时间内退出,以便让等待队列中的一个进程进入。
互斥使用,有空让进;
忙则要等,有限等待;
择一而入,算法可行。
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

浙公网安备 33010602011771号