02操作系统
02-进程管理
2021-07-24 218 4
简介 文章介绍进程的三态、五态模型,进程的同步与互斥、生产者消费者问题、PV操作、死锁问题
1. 进程的状态模型
1.1 三态模型
(1)运行态→阻塞态:阻塞态,也称为等待态, 一个进程运行过程中如果需要请求外围设备,它就变成等待外围设备传输信息的状态;进程在运行中申请资源(主存储空间及外围设备因得不到满足)时,变成等待资源状态
(2)阻塞态→就绪态:外围设备工作结束后等待外围设备传输信息的进程结束等待并进入就绪态;等待的资源能得到满足时(可能因为另一个进程归还了资源),则等待资源者就结束等待;任何一个结束等待的进程必须先变成就绪状态,待分配得到CPU资源后才能运行。
(3)运行态→就绪态:进程用完了一个使用处理器的时间后强迫该进程暂时让出处理器(CPU时间片到);或者当有更高优先权的进程要运行时也迫使正在运行的进程让出处理器。由于自身或外界原因成为等待状态的进程让出处理器时,它的状态就变成就绪状态。
(4)就绪态→运行态:系统按一某种算法或策略从处于就绪状态的进程中选择一个进程,让它占用处理器,那个被选中的进程就变成了运行态。等待的条件满足, 同时CPU满足,进程就可以运行。
2.2 五态模型
在一些系统中,增加了进程的一些新状态,其中最重要的是挂起状态。引入挂起状态的原因有:
(1)对换的需要。为了缓和内存紧张的情况,而将内存中处于阻塞状态的进程换至外存上,使进程又处于一种有别于阻塞状态的新状态。因为即使该进程所期待的事件发生,该进程仍不具备执行条件而不能进入就绪队列,称这种状态为挂起状态。
(2)终端用户的请求。当终端用户在自己的程序运行期间,发现有可疑问题时,往往希望使自己的进程暂停下来。也就是说,使正在执行的进程暂停执行,若是就绪进程,则不接受调度以便研究其执行情况或对程序进行修改。把这种静止状态也称为挂起状态。
(3)父进程请求。父进程常希望挂起自己的子进程,以便考查和修改子进程,或者协调各子进程间的活动。
(4)负荷调节的需要。当实时系统中的工作负荷较重,有可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统正常运行。
(5)操作系统的需要。操作系统希望挂起某些进程,以便检查运行中资源的使用情况及进行记账。
(1)被挂起的进程,原来可能处于就绪状态,此时被挂起的进程的状态称为;若被挂起的进程原来处于阻塞状态,此时的状态称为静止阻塞(挂起阻塞)。不论哪种挂起的状态的进程,都是不可能直接被调度而执行的,需要经过中间活跃阻塞的过程才可以运行。
(2)处于静止阻塞(挂起阻塞)状态的进程,其阻塞条件与挂起条件无关;当进程所期待的事件出现后,进程虽不再被阻塞,但仍不能运行,这时,应将该进程从静止阻塞状态转换为静止就绪(挂起就绪)状态。
(3)运行中的进程可以由其自身挂起,也可由用户或操作系统等将之挂起。其目的都在于阻止进程继续运行,被挂起的进程只能用显式方式来恢复或激活,以便从挂起状态中解脱出来。
2.3 三态模型到五态模型
三态中的运行、等待、就绪对应五态的 运行、活跃阻塞、活跃就绪,增加了静止就绪、静止阻塞
活跃就绪、活跃阻塞通过挂起操作到达静止就绪和静止阻塞
运行态的进程也可通过挂起到达静止就绪状态
五态模型中的静止就绪和静止阻塞可理解为在三态的基础上添加的两个状态,满足操作系统更为复杂的调度任务。
2. 同步与互斥的概念
互斥: 同一时刻,只能有一个(或N个)进程申请某一个(或N个)资源,同类资源的竞争问题。(反义为共享)
同步:速度有差异,快的需要等待(反义为异步), A完成任务,要等B完成, A才能继续。同步是有协作关系
3. 生产者与消费者问题
生产者与生产者是互斥资源:
单缓冲区的时候, 生产者与生产者之间是互斥关系, 生产者与消费者是同步关系
生产者、消费者是同步关系
生产者生产一个商品,放入市场,此时生产者不能继续往市场放入商品(互斥),只有等消费者取出商品(体现了同步),生产者才能放入市场商品。
4. 临界资源、临界区、信号量、PV操作
临界资源:诸进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等
临界区:每个进程中访问临界资源的那段代码称为临界区
信号量:是一种特殊的变量
信号量为负数时, 信号量的绝对是 |S| 为进程队列中等待的进程个数
PV操作是中的P是对信号量-1,V操作是对信号量+1(如果做过Linux C开发,那么对于PV操作应该非常熟悉了...),高级语言中的一些并发操作,其实底层都是使用了信号量和PV操作,可见操作系统的基础是多么重要,如果只是会用高级语言开发,但是不懂操作系统的底层,只能做到知其然不知其所以然。
5. 死锁问题
进程管理是操作系统的核心,但如果设计不当,就会出现死锁的问题如果一个进程在等待一件不可能发生的事,则进程就死锁了。而如果个或多个进程产生死锁,就会造成系统死锁。
例:系统有3个进程:A、B、C。这3个进程都需要5个系统资源。如果系统至少有多少个资源;则不可能发生死锁
每个进程所需资源数-1的和再+1则不可能发生死锁。
3 * (5 - 1) + 1 = 13
6. 死锁的四个必要条件
互斥:资源不共享
保持和等待:持有自己的资源,等待别的进程释放资源给自己。
不剥夺:资源已经被某个进程持有,此时不能被其他进程夺取。
环路等待: A等待B的资源释放, B等待C的资源释放, C等待A的资源释放。
7. 解决死锁问题两种方案:
7.1 死锁的预防:
打破四大条件
7.2 死锁的避免:
有序资源分配法:效率比较低, 比如按预定义的顺序执行进程。
银行家算法: 提前知道会不会导致死锁, 如果有隐患,就不会分配资源。
7.3 银行家算法
银行家算法中分配资源的规则
当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程
进程可以分期请求资源,但请求的总数不能超过最大需求量
当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配但总能使进程在有限的时间里得到资源
8. 死锁的避免和死锁的预防的区别
死锁预防是设法至少破坏产生死锁的四个必要条件之一,严格的防止死锁的出现,
死锁避免则不那么严格的限制产生死锁的必要条件的存在,因为即使死锁的必要条件存在,也不一定发生死锁。死锁避免是在系统运行过程中注意避免死锁的最终发生。