进程间的同步和互斥

信号量与P、V操作

操作系统中是利用信号量来对资源和进程进行控制的,分为公用信号量与私有信号量,其中公有信号量一般用于进程间的互斥,私有信号量一般用于进程间的同步。
这里先对P、V操作进行大概的解释。
P、V操作都是对临界区资源进行管理的原语。

P操作

自己的大白话来说:看资源S有没有,如果缺少资源S的话,就把调用P操作的进程给锁住,等到有资源S为止。
书上的定义:

P(S):1.S:=S-1;
	  2.若S>=0,则调用P(S)的进程继续执行;
	  3.若S<0,则调用P(S)的进程被阻塞,并把它插入到等待信号量S的阻塞队列中。

V操作

自己的大白话来说:看资源S有没有,没有的话释放一个资源S,然后继续执行调用V操作的进程。
书上的定义:

V(S):1.S:=S+1;
	  2.若S>0,则调用V(S)的进程继续执行;
	  3.若S<=0,从等待信号量S的阻塞队列中唤醒头一个进程,然后调用V(S)的进程继续执行。

同步

进程之间存在着大量的同步操作,但同步是怎么一个概念呢。
用自己的话来说,相当于就是一个进程的执行时依赖于另一个进程的。这里举个栗子。
公交车的栗子!有两个资源S1和S2,S1表示司机的私有信号量,S2表示售票员的信号量。初值都是0。
司机到站后停车,要等待售票员的进程结束后才能继续开车,售票员等到司机停车后,卖完票开门关门后才能让司机继续开车。这里司机依赖售票员进程结束后才能继续开车,而售票员也依赖司机到站停车后才能继续执行自己的进程。
在这里插入图片描述

互斥

互斥的理解比较简单一点,就是有多个进程要去争一个资源,如果一个进程抢到后,那么其他进程就得等待那个进程释放资源后才可以继续去抢这个资源。
这里就不举实际例子了。。因为比较容易理解,这里设S为公有信号量,初值为1,表示有1个资源且未被占用。

进程P1			进程P2
P(S)			P(s)
S1				S2
V(S)			V(S)

也就比较容易用P、V操作写出来了。

生产者-消费者问题

经常听到生产者消费者问题,因为这是计算机中经常遇到的,实际生活中也有这样的例子。
生产者消费者P、V操作实例:设S为公有信号量,初值为1,表示进程进入临界区,实现进程间的互斥。设S0为私有信号量,初值为0,表示产品数目。设Sn为私有信号量,表示可用缓冲区数目,初值为n。
在这里插入图片描述

死锁

死锁是由于在进程执行中需要多个资源,只有满足时进程才能执行完成,但由于某些资源被其他进程所占用,故造成死锁。当两个或者两个以上的进程同时对多个互斥资源提出使用要求时,才有可能导致死锁。
这里举个例子,比如进程一需要的资源被进程二占用,进程二需要的资源被进程三占用,进程三需要的资源被进程一占用,且互相之间又不释放资源。就形成了一个有向图环路。

产生死锁的四个条件

1.互斥控制。进程对其所要求的资源进行排他控制,一个资源仅能被一个进程独占。
2.非剥夺控制。进程所获得的资源在未被释放之前,不能被其他进程剥夺。
3.逐次请求。进程以随意的零星方式逐次获得资源,而不是集中性的一次请求,这样有利于提高资源的利用率。
4.环路条件。在发生死锁时,其有向图比构成环路,即前一进程保持着后一进程所要求的资源。

对死锁的对策

1.鸵鸟策略。就是不管死锁= =。让他就锁下去。。
2.预防策略。破坏产生死锁四条件之一。
3.避免策略。精心的分配资源,动态的回避死锁。(银行家算法)
4.检测和解除。系统来检测出并采取措施解除。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值