进程,线程 and 死锁

进程CPU资源分配的最小单元。(电脑打开个qq,打开个迅雷等都是进程)

线程CPU调度的最小单元。(qq里发送一段文字,和女朋友开个视频都是线程)

线程是建立在进程基础上的一次程序运行单位。

进程的状态:


相关知识点:

1)一个进程,至少包含一个线程,同一个进程,可以包含多个线程。

2)线程共享同个进程的所有资源(寄存器,堆栈,上下文等),所以线程在进行时一般要进行同步和互斥。

3)进程结束后它拥有的所有线程都将销毁,而线程结束不会影响同个进程中其他线程的结束。

4)所有操作系统中的执行功能都是线程是去完成的。

5)线程和进程都有自己的私有属性,不被共享线程:线程ID,寄存器,硬件上下文等 进程:进程控制块PCB

6)线程属于进程。

多线程编程优点:

1)线程可以有效提高系统的执行效率,当多个任务需要处理机处理时,减少处理机的切换时间 。

2)线程创建和结束所需要的系统开销比进程的创建和结束要小的多。

3)因为同一进程中的线程共享资源,便于通信,而进程间的通信(IPC)则很困难且消耗更多资源。


死锁:

什么是死锁?

多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进


死锁产生的原因:

1)系统资源(不可抢占的资源和可消耗资源)的竞争。

2)进程推进顺序非法。


产生死锁的四个必要条件: (即需要同时满足四个条件才会发生死锁)

1)互斥条件:进程要求对所分配的资源进行排他性控制,即在某段时间内,资源只能被该进程占有,此时其他进程请求该资源那只能等待。

2)不剥夺条件:进程所获得的资源在没有使用完成之前,不能被其他进程强行夺走,即只能由该进程自己来释放资源(只能是主动地释放)。

3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而新的资源已被其他进程占有,此时请求进程会被阻塞,但对自己已经持有的资源保持不放。

4)循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被下一个进程所请求,即存在一个处于等待状态的进程集合{P1, P2, P3, P4....PN},其中Pi等待的资源被Pi+1占有,Pn等待资源被P0占有,如图。


右图则说明了循环等待条件 != 死锁条件  资源可能为环外进程所占有。

如何处理死锁?

(一)预防死锁:破坏四个必要条件。

1)破坏互斥条件:即允许进程同时访问某些资源,缺点:有些资源本身的属性决定了他不能被同时访问,比如打印机。

2)破坏不剥夺条件:即允许进程强行从其他进程中抢夺某些资源,缺点:这种方法实现困难,且会降低系统性能。

3)破坏请求-保持条件:采取资源预先分配策略,即进程运行前一次性向系统申请所需要的全部资源,只有当要到全部资源时进程才运行。缺点:1.许多情况下一个进程运行前不可能知道他所需要的全部资源,因为进程执行时是动态的。2.资源利用率低。3.降低了进程的并发性。

4)破坏循环等待条件:实行资源有序分配策略,采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成回路。缺点:1.给所有资源编号费时耗力2.为了遵循按编号申请的次序,暂不使用的资源也需要提前申请,增加了进程对资源的占有时间。

(二)避免死锁:动态策略,它不限制进程有关申请资源的命令,而是对进程所发出的每一个申请资源命令加以动态地检查,并根据检查结果决定是否进行资源分配。就是说,在资源分配过程中若预测有发生死锁的可能性,则加以避免。这种方法的关键是确定资源分配的安全性。

1)安全序列  2)银行家算法

(三)检测死锁:运行时出现死锁,能及时发现死锁,把程序解脱出来。

(四)解除死锁:发生死锁后,解脱进程,通常撤销进程,回收资源,再分配给正处于阻塞状态的进程。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值