操作系统要点二锁

锁:

1.死锁:两个或者两个以上的进程由于竞争资源而导致系统无法推进,这个时候我们称系统的状态为死锁。

2.产生原因:1.资源相对不足,2.进程推进的次序不合理。

死锁产生的必要条件:1.互斥2.占有并等待3.非抢占4.循环等待/环路等待。

3.系统模型:资源分配图用来查看进程是否有死锁,注意:对于多个实例的资源,资源分配图即使有环,也不一定有死锁;对于实例只有一个资源,资源分配图有环,则一定死锁。如果一个系统没有环,则一定没有死锁。

4.死锁预防:即提前做好措施,

⑴基本思路:破坏死锁的必要条件之一。注意有些条件,虽然可以破坏,但是有可能出现其他错误,例如:互斥条件和非抢占条件,eg:打印机属于低速度设备,即打印机在同一时间段只能被一个进程使用,如果破坏互斥条件,则会切换打印机资源进行打印,但是会造成打印数据的混乱,想要保持有序,则需要进行相应的设置(后面介绍输入输出调度中的spooling联机操作,来并行的调度打印机执行任务),更浪费资源,都尽量不要去破坏。占有并等待条件:可以破坏为占有不等待,这种方法称为一次性资源分配法,缺点:资源的浪费很严重。也可以破坏为等待而不占有,不太合适。破坏环路等待,采用有序资源使用法,所有的资源进行编号,使用资源的时候,只能按照资源的编号顺序进行申请,缺点:资源浪费。

5.死锁避免:执行一个死锁避免算法来确认进程不会进入死锁,称这个算法为银行家算法。声明进程需要的最大资源数,然后动态的执行死锁检测算法。

安全状态:根据已有的资源,进程申请的最大数,以及分配的资源数,如果还可以找到一个次序,保证每个进程都可以执行完,则表示安全。

银行家算法:每个进程必须提前声明自己需要的最大的资源数,当进程请求资源的时候,它必须进行wait()(信号量,wait()表示申请资源,signal()表示释放资源,wait(),signal()用于进程的同步,资源的申请只能通过wait,signal),当进程得到所有的资源时,它必须释放所有的资源singal()。

Available:系统中可用资源的数量[j]=k.表示j类资源还有k个,

Max:最大资源,n*m的矩阵,n进程数,m为资源数,max[i,j] = k ,表示i进程,对j资源的使用申请最多为k个,

Allocation:是n*m矩阵,n为进程,m为资源数,Allocation[i,j]=k,表示p进程已经获取j个资源,

Need:是一个n*m矩阵,Need[i,j]表示i进程还需要j个资源。 need[I,j] = max[I,j] – Allocation[I,j],

安全性检测:

1.work,finsh为工作向量,分别是m(资源)和n(进程)维的,刚开始:

work := Available  //已有的资源

finsh[i] = false for I = 1,2,3,…n;  //finsh表示进程的状态,初始化为false,代表进程还没有完成。

2.寻找满足下列条件的:

finsh[i] = false;     //进程的状态

need < work;    //检查已有的资源是否大于需要的资源,进行分配

没有找到,跳转到4, // 即进程已经获取所需要的资源

3.work := work+allocation  //   将执行完毕的进程的资源进行回收,allocation为某进程已经使用完毕的资源数,

finsh[i] = true;  // 将该进程标记为true,进程已经得到资源,运行结束。

跳转到2; //继续进入2,寻找符合条件的进程,对其分配资源

4.如果所有的finsh[i] = true,则系统进行安全状态,否则没有, // 总的输出结果,

资源请求算法

request[i]  =  k ,表示p进程想要申请k个资源,

1.if Request < need ,表示申请的资源和合理的,即小于你需要的,

2.if Request < Avaliable, 表示现有足够的资源可以满足申请的数量,(1,2是进行合理性判断)

3.假定给进程资源:

Avaliable := Avalibale – Request;

Allocaiton:= Allocation + Request;

need := need – Request;

然后进行安全性检测,

if safe,进程申请的资源就会被分配,

if unsafe,进程申请的资源不会给与分配。

6.死锁检测:允许系统进入死锁状态,不断调用死锁检测算法,

7.恢复

⑴.终止所有进程,

⑵.每次终止一个进程,直到环路被消除(根据占用资源数,运行时间,优先级,运行还需要多少资源,根据情景来终止相应的进程)

 

 

 

观看《操作系统原理》-中南大学,,,如有异议,敬请指出,与君共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值