-
进程调度方式
进程调度方式是指当某一处进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。
通常有以下两种进程调度方式:
(1)非剥夺调度方式(非抢占方式):实现简单,系统开销小,适用于大多数的批处理系统,但它不能用于分时系统和大多数的实时系统。
(2)剥夺调度方式(抢占方式):要遵循一定的原则,主要有:优先级、短进程优先和时间片原则。
-
衡量调度性能的指标
(1)CPU利用率:CPU在忙碌状态所占的时间比
(2)系统吞吐量:单位时间内CPU完成作业的数量
(3)周转时间:从作业提交到作业完成所经历的时间,包括作业等待、在就绪队列中排队、在处理机上运行以及进行输入\输出操作所花费的时间的总和。
(4)等待时间:进程处理等处理机状态时间之和。处理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间。因此,衡量一个高度算法的优劣,常常只需简单地考察等待时间。等待时间=周转时间-处理机上运行时间-输入\输出所花费的时间。
(5)响应时间:从用户提交请求到系统首次产生响应所用的时间。
- 典型的调度算法
(1)先来先服务(FCFS first come first serve):属于不可剥夺算法。算法每次从后备作业队列中选择最先进入该队列的一个或几个作业进行处理。特点:算法简单,效率低,对长作业有利,对短作业不利。
(2)短作业优先(SJF short job first):算法从后备队列中选择一个或若干个估计运行时间最短的作业处理。直到完成作业或发生某事件而阻塞时,才释放处理机。缺点:(1)对长作业不利,造成“饥饿”现象(2)未考虑作业紧迫程度(3)由于运行时间是估计所得,所以并不一定能做到短作业优先。
(3)优先级:可分为(1)非剥夺式(2)剥夺式;其中优先级可分为:(1)静态优先级(2)动态优先级
(4)高响应比优先:响应比=(等待时间+处理时间)/处理时间=1+等待时间/处理时间
(5)时间片轮转
-
进程(数据库也适用)死锁
两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
(1)产生进程死锁的原因
1)系统资源不足。
2)资源分配不当。
3)进程运行推进顺序不合适。
(2)产生进程死锁的必要条件:四点
1)互斥条件:线程在某一时间内独占资源。
2)不剥夺条件:线程已获得资源,在末使用完之前,不能强行剥夺。
3)请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放。
4)循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系。
(2)怎样避免死锁
1)加锁顺序:确保所有的进程都是按照相同的顺序获得锁。
2)加锁限时:在尝试获取锁的时候加一个超时时间,若超过了这个时限该进程则放弃对该锁请求。
3)银行家算法,每次在分配资源之前,先判断资源分配后,系统是否会进入不安全的状态,会则不分配,不会则分配。
3)死锁检测:检测如果发生死锁,通过外边破坏产生死锁的四个必要条件,打破死锁。
-
饥饿(无限期阻塞)
当进程的等待时间过长,给进程推进和响应带来明显影响时,称发生了进程“饥饿”。当“饥饿”到一定程度的进程被赋予的任务即使完成也不再具有实际意义时称该进程被“饿死”。
饥饿产生的主要原因:进程所请求的资源(可以是CPU资源)长时间得不到满足,从而长时间处于阻塞或就绪状态。
饥饿与死锁的区别:(1)进入饥饿的进程可以只有一个,而死锁的进程至少有两个。(2)饥饿状态的进程可以是就绪状态和阻塞状态,而处于死锁的进程一定是阻塞状态。