什么是临界资源?什么是临界区?对临界资源的访问有哪些原则?
临界资源:一次仅允许一个进程使用的共享资源。
临界区:每个进程中访问临界资源的那段程序。
访问原则:
空闲让进,如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
忙则等待,任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其他所有试图进入临界区的进程必须等待。
有限等待,进入临界区的进程要在有限时间内退出,以便其他进程能及时进入自己的临界区。
让权等待,如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
请给出P、V操作的定义。如何用P、V操作实现进程间的互斥?
P的原语操作的动作是:
sem减1
若sem减1后仍大于或等于零,则进程继续执行
若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度
V原语操作的动作是:
sem加1
若相加结果大于零,则进程继续执行
若想加结果小于或等于零,则该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度
由于用于互斥的信号量sem与所有的并发进程有关,所以称之为公有信号量。公有信号量的值反映了公有资源的数量。只要把临区置于P(sem)和V(sem)之间,即可实现进程间的互斥,sem的初始值通常设置成1。
使用P,V操作实现进程互斥时应该注意的是:
每个进程中,用户实现互斥的P,V操作必须成对出现。先做P操作,进入临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。
P,V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能出现有死循环。
互斥信号量的初值一般为1。
请用P、V操作写出一个不会出现死锁的哲学家进餐问题的解?
至多只允许四个哲学家共同进餐,以保证至少有一个哲学家能进餐,最终会释放出它所使用过的两支筷子,从而可使更多的哲学家进餐。以下将以room作为信号量,只允许四个则学家同时进入餐厅就餐。这样就能保证至少有一个哲学家可以就餐而申请进入餐厅的哲学家进入room的等待队列。根据FIFO原则总会进入到餐厅就餐,因此不会出现饿死和死锁的现象。
semaphore chopstick [5]={
1,1,1,1,1