进程调度的方式有非剥夺方式和剥夺方式。
非剥夺方式:
分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。
剥夺方式:
当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。
进程调度算法:
1、先进先出算法(FIFO):
算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。
举例:有三个进程P1、P2和P3先后进入就绪队列,它们的执行期分别是21、6和3个单位时间,对于P1、P2、P3的周转时间为21、27、30,平均周转时间为26。可见,FIFO算法服务质量不佳,容易引起作业用户不满,常作为一种辅助调度算法。
2、最短CPU运行期优先调度算法(SCBF--Shortest CPU Burst First):
该算法从就绪队列中选出下一个“CPU执行期最短”的进程,为之分配处理机。
举例:在就绪队列中有四个进程P1、P2、P3和P4,它们的下一个执行进程调度期分别是16、12、4和3个单位时间,P1、P2、P3和P4的周转时间分别为35、19、7、3,平均周转时间为16。该算法虽可获得较好的调度性能,但难以准确地知道下一个CPU执行期,而只能根据每一个进程的执行历史来预测。
3、时间片轮转法:
前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。简单轮转法:系统将所有就绪进程按FIFO规则排队,按一定的时间间隔把处理机分配给队列中的进程。这样,就绪队列中所有进程均可获得一个时间片的处理机而运行。
4、多级反馈队列:
多级队列方法:将系统中所有进程分成若干类,每类为一级。 多级反馈队列方式是在系统中设置多个就绪队列,并赋予各队列以不同的优先权。
前两天做 *** 作系统作业的时候学习了一下几种进程调度算法,在思考和讨论后,有了一些自己的想法,现在就写出来,跟大家讨论下。,或者说只有有限的CPU资源,当系统中有多个进程处于就绪状态,要竞争CPU资源时, *** 作系统就要负责完成如何分配资源的任务。在 *** 作系统中,由调度程序来完成这一选择分配的工作,调度程序所使用的算法即是调度算法。调度算法需要考虑的指标主要有尽量保证CPU资源分配的公平性;按照一定策略强制执行算法调度;平衡整个计算机系统,尽量保持各个部分都处于忙碌状态。而根据系统各自不同的特点和要求,调度算法又有一些侧重点和目标不同,因此,算法按照系统差异主要分为三大类:批处理系统中的调度算法,代表调度算法有:先来先服务、最短作业优先、最短剩余时间优先。交互式系统中的调度算法,代表调度算法有:轮转调度、优先级调度、多级队列、最短进程优先、保证调度、**调度、公平分享调度。实时系统中的调度算法,代表调度算法有:速率单调调度、最早最终时限优先调度。下面就上述提到的调度算法中挑出几个进行重点分析:保证调度保证调度是指利用算法向用户做出明确的性能保证,然后尽力按照此保证实现CPU的资源分配。利用这种算法,就是定一个进程占用CPU的时间的标准,然后按照这个标准去比较实际占用CPU的时间,调度进程每次使离此标准最远的进程得到资源,不断满足离所保证的标准最远的进程,从而平衡资源分配满足这个标准的要求。保证调度算法的优点是:能很好的保证进程公平的CPU份额,当系统的特点是:进程的优先级没有太大悬殊,所制定的保证标准差异不大,各个进程对CPU的要求较为接近时,比如说系统要求n个进程中的每个进程都只占用1/n的CPU资源,利用保证调度可以很容易的实现稳定的CPU分配要求。但缺点是,这种情况太过理想,当系统的各个进程对CPU要求的紧急程度不同,所制定的保证较为复杂的时候,这个算法实现起来比较困难。**调度**调度这种算法的大意是指向进程提供各种系统资源如CPU资源的**,当系统需要做出调度决策时,随机抽出一张**,由此**的拥有者获得资源。在**调度系统中,如果有一个新的进程出现并得到一些**,那么在下一次的抽奖中,该进程会有同它持有**数量成正比例的机会赢得奖励。进程持有的**数量越多,则被抽中的可能性就越大。调度程序可以通过控制进程的**持有数量来进行调度。**调度有很多优点:首先,它很灵活,系统增加分给某个进程的**数量,就会大大增加它占用资源的可能性,可以说,**调度的反应是迅速的,而快速响应需求正是交互式系统的一个重要要求。其次,**调度算法中,进程可以交换**,这个特点可以更好的保证系统的平衡性,使其各个部分都尽可能的处于忙碌状态。而且利用**调度还可以解决许多别的算法很难解决的问题,例如可以根据特定的需要大致成比例的划分CPU的使用。速率单调调度速率单调调度算法是一种可适用于可抢占的周期性进程的经典静态实时调度算法。当实时系统中的进程满足:每个周期性进程必须在其周期内完成,且进程之间没有相互依赖的关系,每个进程在一次突发中需要相同的CPU时间量,非周期的进程都没有最终时限四个条件时,并且为了建模方便,我们假设进程抢占即刻发生没有系统开销,可以考虑利用速率单调算法。速率单调调度算法是将进程的速率(按照进程周期所算出的每秒响应的次数)赋为优先级,则保证了优先级与进程速率成线性关系,这即是我们所说的速率单调。调度程序每次运行优先级最高的,只要优先级较高的程序需要运行,则立即抢占优先级低的进程,而优先级较低的进程必须等所有优先级高于它的进程结束后才能运行。速率单调调度算法可以保证系统中最关键的任务总是得到调度,但是缺点是其作为一种静态算法,灵活性不够好,当进程数变多,系统调度变得复杂时,可能不能较好的保证进程在周期内运行。最早最终时限优先调度最早最终时限优先调度算法是一个动态算法,不要求进程是周期性的,只要一个进程需要CPU时间,它就宣布它的到来时间和最终时限。调度程序维持一个可运行的进程列表,按最终时限排序,每次调度一个最终时限最早的进程得到CPU。当新进程就绪时,系统检查其最终时限是否在当前运行的进程结束之前,如果是,则抢占当前进程。由于是动态算法,最早最终优先调度的优点就是灵活,当进程数不超过负载时,资源分配更优,但也同样由于它的动态属性,进程的优先级都是在不断变化中的,所以也没有哪个进程是一定可以保证满足调度的,当进程数超过负载时,资源分配合理度会急速下降,所以不太稳定。
进程调度是真正让某个就绪状态的进程到处理机上运行,而作业调度只是使作业具有了竞争处理机的机会。
进程调度(又称微观调度、低级调度、短程调度):是按照某种调度算法从就绪状态的进程中选择一个进程到处理机上运行。负责进程调度功能的内核程序称为进程调度程序。
作业调度(又称高级调度、宏观调度、长程调度):是按某种调度算法从后备作业队列中选择作业装入内存运行;另外当该作业执行完毕后,还负责回收系统资源。完成作业调度功能的程序称为作业调度程序。
只帮你写点开头,后面你应该会的
#include <stdioh>
#include <stdlibh>
#include <stringh>
#include <iostreamh>
typedef struct node
{
char name[10];
int prio;
int round;
int cputime;
int needtime;
int count;
char state;
struct node next;
}PCB;
PCB finish,ready,tail,run,; //队列指针
int N; //进程数
void zhunbei()
{
run=ready; //就绪队列头指针赋值给运行头指针
run->state='G'; //进程状态变为运行态]
ready=ready->next; //就绪队列头指针后移到下一进程
}
//输出标题函数
void output1(char a)
{
if(toupper(a)=='P') //优先级法
cout<<" "<<endl;
cout<<"进程名 占用CPU时间 已运行时间 还要的时间 轮转时间片 状态"<<endl;
}
进程控制基于原语。
进程调度决定就绪队列中哪个进程将获得处理机。
当处理机空闲时,进程调度程序必将处理机分配给一个处于就绪态的进程
,该进程便由就绪态转换为运行态。当处于运行态的进程在运行过程中需要等待某一事件发生后(例如因I/O请求等待I/O完成后),才能继续运行,则该进程放弃处理机,从运行态转换为阻塞态。当处于阻塞态的进程,若其等待的事件已经发生,于是进程由阻塞态转换为就绪态。当处于运行状态的进程在其运行过程中,因分给它的处理机时间片已用完,而不得不让出(被抢占)处理机,于是进程由运行态转换为就绪态。
而阻塞态――>运行态和就绪态――>阻塞态这二种状态转换不可能发生。
以上就是关于进程调度的方式有哪两种试列举至少4种进程调度算法。全部的内容,包括:进程调度的方式有哪两种试列举至少4种进程调度算法。、几种进程调度算法分析、进程调度与作业调度的本质区别是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)