进程和线程

进程和线程

7.1 线程和进程的关系

(1)一个线程只能属于一个进程,一个进程可以有多个线程。

(2)资源分配给一个进程时,该进程下的所有线程共享该资源。

(3)线程在执行时需要协作同步。不同进程的线程需要利用消息通信的办法实现同步。

(4)真正在处理机上运行的是线程。

(5)线程是指进程内的一个执行单元,也是进程内的可调度实体。

7.2 线程和进程的区别

(1)调度线程是调度和分配的基本单位;进程作为拥有资源的基本单位。

(2)并发性: 不仅进程之间可以并发执行,同一个进程下的不同线程也可以并发执行。

(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。

(4)系统开销:在创建或撤销进程的时候,由于系统都要为之分配和回收资源,导致系统明显大于创建或撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式下不会对其他进程产生影响,而线程有自己的堆栈和局部变量,一个线程死掉就等于一个进程死掉,所以多进程比多线程的程序更健壮,但是在进程切换时,耗费的资源较大。

7.3 进程调度的方法

(1)先来先服务算法:按照各个作业进入系统的自然顺序来调度作业。这种调度算法的优点就是实现简单,公平。缺点就是没有考虑到系统中各种资源的综合使用情况。

(2)短作业优先算法: 优先调度和处理短作业。所谓的短作业就是指运行时间短的作业。

(3)最高相应比优先算法:选择相应比最高的作业处理。 相应比 = 1 + 作业等待的时间 / 作业处理的时间

(4)基于优先数调度算法:每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入并调入内存处理时,优先选择优先数高的作业。

(5)时间片轮转算法:系统将所有就绪进程按照到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中的第一个进程执行,集先来先服务的原则,但仅能运行一个时间片,在使用完一个时间片后,即使进程并为完成运行,他也必须释放处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队。

7.4 死锁

7.4.1 死锁产生的必要条件

(1)互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一个进程占有时,则申请者等待直到资源被占有者释放。

(2)不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。

(3)请求和保持等待条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配的资源。

(4)循环等待条件:在发生死锁时,必然存在一个进程等待环路,环路中的每一个进程所占有的资源同时被另一个申请,也就是前一个进程所占有后一个进程所申请的资源。

以上就是导致死锁产生的四个必要条件,只要死锁发生,则四个必要条件至少有一个会成立。

7.4.2 死锁的预防

我们可以通过破坏死锁产生的四个必要条件来预防死锁,由于资源互斥是资源使用的固有特性是无法改变的。

(1)破坏 “不可剥夺条件”:一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释放重新加入到系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行。

(2)破坏 “请求与保持条件”:第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源。第二种是动态分配即每个进程在申请所需要的资源时它本身不占用系统资源。

(3)破坏 ”循环等待“条件:采用资源有序分配其基本思想是系统中的所有资源顺序编号,将紧缺的、稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程。

7.4.3 死锁的避免

死锁避免的基本思想:系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值