模拟一种处理机调度算法讲解
进程调度模拟算法
进程调度模拟算法进程调度是操作系统中的重要组成部分之一,它负责决定在多道程序环境下,哪个进程将获得CPU的使用权。
进程调度模拟算法是为了研究和评估不同调度策略的性能而开发的一种仿真方法。
在实际系统中,调度算法会受到多种因素的影响,如进程优先级、进程的I/O需求、进程的实际执行时间等。
通过模拟这些因素,可以更好地理解不同调度算法之间的差异,并选择最合适的算法来满足特定需求。
下面介绍两种常见的进程调度模拟算法:先来先服务(FCFS)和最短作业优先(SJF)算法。
1. 先来先服务(FCFS)算法:该算法按照进程到达的顺序来调度任务。
当一个进程完成或阻塞时,下一个已到达的进程将获得CPU的使用权。
这种算法非常简单,但是不适用于长作业时间和短作业时间交替出现的情况。
在短作业启动时,长作业仍然在运行,使得短作业的等待时间增加。
2. 最短作业优先(SJF)算法:该算法根据任务的执行时间来调度进程。
在该算法中,每个进程的执行时间都是已知的,并且操作系统根据已知的执行时间来决定哪个进程获得CPU的使用权。
在短作业优先算法中,短作业将会先被调度,这样有助于减少平均周转时间和等待时间。
但是,短作业优先算法容易产生“饥饿”现象,即长作业可能会一直等待,而短作业一直得到CPU的使用权。
除了以上两种算法,还有其他的进程调度模拟算法。
例如:- 时间片轮转(RR)调度算法:使用固定的时间片来调度进程,当时间片用完后,该进程被放入就绪队列的末尾。
- 优先级调度算法:每个进程都拥有一个优先级,优先级越高的进程越早被调度。
这种方法可以根据不同进程的紧迫程度和重要性来进行调度。
- 多级反馈队列调度算法:将就绪队列划分为多个队列,并根据进程的性质和优先级将进程放入不同的队列。
每个队列都有不同的优先级和时间片大小,进程可以通过提高优先级或时间片大小来提高被调度的机会。
在实际应用中,需要根据系统需求和性能指标选择合适的调度算法。
常用的性能指标包括平均周转时间、平均等待时间、CPU利用率等。
操作系统进程调度算法的模拟
操作系统进程调度算法的模拟其次,我们来介绍短作业优先(Shortest Job Next,SJN)算法。
SJN算法按照任务的运行时间来决定运行顺序,即先运行运行时间最短的进程。
该算法能够最大程度地减少平均等待时间,但对于长任务可能导致长时间的等待。
接下来,我们介绍轮转(Round Robin,RR)算法。
RR算法是一种基于时间片的调度算法,将CPU分为若干个时间片,并依次分配给各个进程。
当一个进程的时间片用完后,将其放入队列尾部,继续运行下一个进程。
该算法具有公平性和响应性较高的特点,但对于长时间运行的进程,可能会导致较大的上下文切换开销。
此外,还有最高响应比优先(Highest Response Ratio Next,HRRN)算法。
HRRN算法通过计算等待时间和服务时间的比例来决定运行顺序,即选取响应比最高的进程先执行。
该算法能够尽可能减少平均响应时间,但对于长任务可能存在运行时间过长的问题。
最后,我们介绍最短剩余时间优先(Shortest Remaining Time First,SRTF)算法。
SRTF算法是SJN算法的抢占版本,当有新进程到达时,会比较其剩余运行时间与当前运行进程的时间,如果新进程的剩余时间较短,则立即进行进程切换。
该算法能够最大程度地减少平均等待时间和响应时间,但对于切换开销较大。
针对这几种进程调度算法,我们可以通过编写模拟程序来验证其性能和特点。
首先,我们需要定义进程的数据结构,包括进程ID、到达时间、服务时间等属性。
然后,我们可以编写一个模拟函数来按照不同的算法进行调度,并统计平均等待时间、平均响应时间、吞吐量等指标。
通过对比不同算法在不同场景下的表现,可以评估其优劣。
总结起来,不同的进程调度算法有着各自的优缺点,根据实际需求选择合适的算法能够提高系统的性能和用户体验。
通过模拟和评估这些算法,我们可以更好地理解其原理和适用范围,并为实际系统的设计和优化提供参考。
希望这篇文章能够帮助你更好地理解和应用进程调度算法。
实验三模拟进程调度算法
实验三模拟进程调度算法先进先出算法算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。
最高优先权(FPF)优先调度算法该算法总是把处理机分配给就绪队列中具有最高优先权的进程。
常用以下两种方法来确定进程的优先权:轮转法前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。
简单轮转法:系统将所有就绪进程按FIFO规则排队,按一定的时间间隔把处理机分配给队列中的进程。
这样,就绪队列中所有进程均可获得一个时间片的处理机而运行。
多级队列方法:将系统中所有进程分成若干类,每类为一级。
多级反馈队列多级反馈队列方式是在系统中设置多个就绪队列,并赋予各队列以不同的优先权。
实验内容①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。
②为了便于处理,程序中的某进程运行时间以时间片为单位计算。
各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
③在优先数算法中,优先数可以先取值为98,进程每执行一次,优先数减3, CPU时间片数加1,进程还需要的时间片数减1。
在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时, CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。
④对于遇到优先数一致的情况,采用FIFO策略解决。
实验的示例程序如下:#include<stdio.h>#include <dos.h>#include<stdlib.h>#include<conio.h>#include<iostream.h>#define P_NUM 5#define P_TIME 50#define clrscr()enum state{ready,execute,block,finish};/* 定义进程控制块PCB */ struct pcb{char name[4];int priority;int cputime;int needtime;int count;int round;state process;pcb * next;};pcb * get_process(); pcb * get_process(){pcb *q;pcb *t;pcb *p;int i=0;cout<<"input name and time"<<endl; while (i<P_NUM){q=(struct pcb *)malloc(sizeof(pcb)); cin>>q->name;cin>>q->needtime;q->cputime=0;q->priority=P_TIME-q->needtime;q->process=ready;q->next=NULL;if (i==0){p=q;t=q;}else{t->next=q;t=q;}} //whilereturn p;}/*建立进程显示函数*/void display(pcb *p){cout<<"name"<<" "<<"cputime"<<" "<<"needtime"<<" "<<"priority"<<" "<<"state"<<endl;while(p){cout<<p->name;cout<<" ";cout<<p->cputime;cout<<" ";cout<<p->needtime;cout<<" ";cout<<p->priority;cout<<" ";switch(p->process){case ready:cout<<"ready"<<endl;break; case execute:cout<<"execute"<<endl;break; case block:cout<<"block"<<endl;break; case finish:cout<<"finish"<<endl;break; }p=p->next;}}int process_finish(pcb *q){int bl=1;while(bl&&q){bl=bl&&q->needtime==0;q=q->next;}return bl;}void cpuexe(pcb *q){pcb *t=q;int tp=0;while(q){if (q->process!=finish){q->process=ready;if(q->needtime==0){q->process=finish;}}if(tp<q->priority&&q->process!=finish){ tp=q->priority;t=q;}q=q->next;}if(t->needtime!=0){t->priority-=3;t->needtime--;t->process=execute;t->cputime++;}}//计算优先权void priority_cal(){pcb * p;clrscr();p=get_process();int cpu=0;clrscr();while(!process_finish(p)){cpu++;cout<<"cputime:"<<cpu<<endl;cpuexe(p);display(p);sleep(2);clrscr();}printf("All processes have finished,press any key to exit"); getch();}void display_menu(){cout<<"CHOOSE THE ALGORITHM:"<<endl;cout<<"1 PRIORITY"<<endl;cout<<"2 ROUNDROBIN"<<endl;cout<<"3 EXIT"<<endl;}pcb * get_process_round(){pcb *q;pcb *t;pcb *p;int i=0;cout<<"input name and time"<<endl; while (i<P_NUM){q=(struct pcb *)malloc(sizeof(pcb)); cin>>q->name;cin>>q->needtime;q->cputime=0;q->round=0;q->count=0;q->process=ready;q->next=NULL;if (i==0){p=q;t=q;}else{t->next=q;t=q;}i++;} //whilereturn p;}void cpu_round(pcb *q){ q->cputime+=2;q->needtime-=2;if(q->needtime<0) {q->needtime=0;}q->count++;q->round++;q->process=execute;}pcb * get_next(pcb * k,pcb * head){pcb * t;t=k;do{t=t->next;}while (t && t->process==finish);if(t==NULL){t=head;while (t->next!=k && t->process==finish){ t=t->next;}}return t;}//设置进程状态void set_state(pcb *p){while(p){if (p->needtime==0){p->process=finish;}if (p->process==execute){p->process=ready;}p=p->next;}}void display_round(pcb *p){cout<<"NAME"<<" "<<"CPUTIME"<<" "<<"NEEDTIME"<<" "<<"COUNT"<<" "<<"ROUND"<<" "<<"STA TE"<<endl;while(p){cout<<p->name;cout<<" ";cout<<p->cputime;cout<<" ";cout<<p->needtime;cout<<" ";cout<<p->count;cout<<" ";cout<<p->round;cout<<" ";switch(p->process){case ready:cout<<"ready"<<endl;break; case execute:cout<<"execute"<<endl;break; case finish:cout<<"finish"<<endl;break; }p=p->next;}}void round_cal(){pcb * p;pcb * r;clrscr();p=get_process_round();int cpu=0;clrscr();r=p;while(!process_finish(p)){ cpu+=2;cpu_round(r);r=get_next(r,p);cout<<"cpu "<<cpu<<endl; display_round(p);set_state(p);sleep(5);clrscr();}}void main(){display_menu();int k;scanf("%d",&k);switch(k){case 1:priority_cal();break; case 2:round_cal();break; case 3:break;display_menu();scanf("%d",&k);}}。
处理机调度的常用算法
处理机调度的常用算法包括以下几种:
1. 先来先服务调度算法(FCFS,First Come First Service):这是一种最简单的调度算法,按先后顺序进行调度。
既可用于作业调度,也可用于进程调度。
2. 短作业优先调度算法(SJF/SPF,Shortest Job First):该算法根据作业长短进行调度,有利于短作业(进程)的完成。
3. 高响应比优先调度算法(HRRN,Highest Response Raito Next):该算法综合考虑了作业长短和等待时间,能够适用于短作业较多的批处理系统中,但长作业的运行可能得不到保证。
4. 基于时间片的轮转调度算法(RR,Round Robin):该算法将系统中所有的就绪进程按照FCFS原则,排成一个队列。
每次调度时将CPU 分派给队首进程,让其执行一个时间片。
时间片的长度从几个ms到几百ms。
在一个时间片结束时,发生时钟中断。
调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前就绪的队首进程。
进程阻塞情况发生时,未用完时间片也要出让CPU。
这些算法各有优缺点,需要根据实际应用场景选择合适的算法。
操作系统-模拟进程调度算法-最新
操作系统——项目文档报告进程调度算法专业:班级:指导教师:姓名:学号:一、核心算法思想1.先来先服务调度算法先来先服务调度算法是一种最简单的调度算法,该算法既可以用于作业调度,也可用于进程调度。
当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。
该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。
2.短作业(进程)优先调度算法短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。
它们可以分别用于作业调度和进程调度。
短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。
SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。
该算法对长作业不利,完全未考虑作业的紧迫程度。
3.高响应比优先调度算法在批处理系统中,短作业优先算法是一种比较好的算法,其主要不足之处是长作业的运行得不到保证。
如果我们能为每个作业引人动态优先权,并使作业的优先级随着等待时间的增加而以速率a提高,则长作业在等待一定的时间后,必然有机会分配到处理机。
该优先权的变化规律可描述为:优先权=(等待时间+要求服务时间)/要求服务时间即优先权=响应时间/要求服务时间如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因而该算法有利于短作业。
当要球服务的时间相同时,作业的优先权决定于其等待时间,等待时间越长,优先权越高,因而它实现的是先来先服务对于长作业,作业的优先级可以随着等待时间的增加而提高,当其等待时间足够长时,其优先级便可以升到很高,从而也可获得处理机。
进程调度模拟算法
进程调度模拟算法进程调度模拟算法是操作系统中的关键之一,通过合适的进程调度算法可以达到合理分配资源、提高系统吞吐量和响应速度等目的。
下面将介绍几种常用的进程调度算法以及它们的优缺点。
1. 先来先服务调度算法(FCFS)FCFS是最简单也是最常见的调度算法之一,即先请求的进程先获得CPU资源。
FCFS实现简单,易于理解和实现,但是存在短作业等待长作业的现象,进程响应时间长、带来的影响不容忽视。
2. 短作业优先调度算法(SJF)SJF调度算法采用短作业优先原则,即拥有最短执行时间的进程优先获得CPU资源。
SJF可以减少平均等待时间,提高系统吞吐量,但可能出现“饥饿”的情况,即长作业一直无法得到CPU资源。
此外,SJF需要提前得知作业执行时间,实现起来比较困难。
3. 时间片轮转调度算法(RR)RR算法将进程分配一个时间片,CPU在该时间片内运行进程,时间片结束后,CPU将被切换到下一个进程。
RR算法顺序公平,避免长作业等待短作业,但需要设置适当的时间片大小,过小的时间片会导致频繁切换进程,造成系统开销大,过长的时间片会影响系统响应速度。
4. 优先级调度算法优先级调度算法将进程划分为不同的优先级,高优先级的进程优先获得CPU资源。
优先级可以是系统静态设定或动态变化,利用此算法可以实现多种调度策略,如SJF、FCFS等。
但是优先级调度可能导致低优先级进程长时间得不到CPU资源,出现“饥饿”的情况。
总体来说,不同的进程调度算法有着各自的优缺点,需要根据具体情况选择合适的算法。
实际操作中,操作系统往往综合多种算法,采取多种策略来管理进程,以达到最优的效果。
处理机调度算法
处理机调度算法处理机调度算法(CPU Scheduling Algorithm)是操作系统中一个非常重要的概念,它指的是在多个进程需要占用系统处理器的情况下,如何高效地分配时间片,使得每个进程都能得到公平的处理机时间,系统能够充分利用处理器的资源。
算法分类常见的处理机调度算法主要有以下几种:1. 先来先服务(FCFS)调度算法先来先服务是最简单的处理机调度算法。
它的基本思想是,一个进程需要处理时,处理器按照进程提交的顺序进行调度。
即,先提交的进程先执行,等前一个进程执行完后,下一个进程才会被处理。
这种算法的优点是简单易行,缺点是可能导致一些进程等待时间较长。
2. 短作业优先(SJF)调度算法短作业优先是一种非抢占式的算法,它的基本思想是根据每个进程需要处理的总时间长短来排序,先处理需要处理时间较短的作业,这种方法可以最小化平均等待时间。
但是,由于它需要知道每个进程的总执行时间,因此难以实现。
3. 时间片轮转(RR)调度算法时间片轮转是一种抢占式的算法,它的基本思想是将处理机分为时间片,每个进程都可以运行一个时间片,时间片到期后,如果还未结束,则该进程被挂起,另一个就绪进程插入,并重新分配一个时间片。
这种算法能够避免某些进程长时间占用资源,每个进程都能在一定时间内得到处理机的时间。
4. 优先级调度(Priority Scheduling)算法优先级调度是一种非抢占式的算法,它的基本思想是为每个进程设置不同的优先级,进程具有最高优先级的先被处理,如果存在两个相等的进程优先级,那么会使用先来先服务的方式进行处理。
缺点是可能导致低优先级的进程等待时间太长。
5. 多级反馈队列(MFQ)调度算法多级反馈队列是一种复杂的算法,它的基本思想是将所有进程按照其优先级分为多个队列,优先级相同的进程被分成同一个队列,不同队列之间根据时间片大小相差不同。
例如,第一队列的时间片为10ms,第二队列的时间片为20ms,第三队列的时间片为40ms,以此类推。
处理机调度算法rr案例
处理机调度算法rr案例
那咱们就来个简单又有趣的时间片轮转(RR Round Robin)调度算法的案例吧。
想象一下,你是一个超级繁忙的餐厅经理,餐厅里有好多桌客人,而服务员就那么几个,这服务员就好比是处理机,客人就是各个进程啦。
比如说现在有三个客人(进程),分别是甲、乙、丙。
每个客人点菜、吃饭、聊天啥的就相当于进程在执行自己的任务。
这个时间片呢,就假设是10分钟(在计算机里时间片可是超级短的,这里为了好理解就设长一点啦)。
服务员先到甲客人这桌,开始服务甲客人点菜啥的,这就是甲进程开始占用处理机啦。
10分钟一到,不管甲客人点完菜没,服务员就得按照RR调度算法,去乙客人那桌啦,这时候甲客人就只能先等等,乙客人就开始占用服务员(处理机)10分钟,乙客人可能正跟服务员说自己的特殊要求呢,时间一到,服务员又得去丙客人那桌,丙客人就开始享受这10分钟的专属服务,可能是在加菜或者询问菜品之类的。
等丙客人这10分钟用完了,服务员又轮回到甲客人这桌啦。
这时候甲客人可能因为之前被打断了,得重新和服务员沟通,不过没关系,按照RR算法就是这样循环着来,保证每个客人(进程)都能得到相对公平的服务(处理机时间)。
如果甲客人很快就结束了自己的事情,比如说点完菜了,那甲客人就可以先在那等着上菜,服务员还是按照RR算法去服务乙和丙客人。
直到所有客人都完成了他们在餐厅的流程(进程结束)。
这样通过RR调度算法,每个客人(进程)都能得到一些时间的服务(处理机时间),不会出现一个客人(进程)一直霸占着服务员(处理机),而其他客人(进程)干等的情况。
是不是还挺好理解的呀 。
处理器调度算法模拟实现与比较
处理器调度算法模拟实现与比较处理器调度算法是操作系统中的一个重要组成部分,用于决定哪个进程可以分配到处理器来执行。
处理器调度算法的选择会直接影响到系统的性能和响应时间,在不同的系统和场景下,可能存在最适合的处理器调度算法。
下面介绍几种常见的处理器调度算法及其实现原理和比较。
1. 先来先服务(FCFS,First-Come, First-Serve)FCFS 算法是最简单的处理器调度算法,按照作业到达的先后顺序进行调度。
作业到达时间早的先被调度执行,直到完成或者被阻塞。
这种算法不考虑作业的长度和优先级,容易导致短作业等待时间过长的问题。
示例代码:```pythondef FCFS(scheduler, jobs):ready_queue = []current_time = 0for job in jobs:while current_time < job.arrival_time:current_time += 1ready_queue.append(job)job.waiting_time = current_time -job.arrival_timejob.turnaround_time = job.waiting_time +job.service_timecurrent_time += job.service_time```2. 最短作业优先(SJF,Shortest Job First)SJF 算法将短作业优先执行,将作业按照服务时间从小到大排序,服务时间短的作业先执行。
这种算法可以最大程度地减少平均等待时间,并且每个作业的等待时间都得到了保障,但可能会对长作业造成饥饿状态。
示例代码:```pythondef SJF(scheduler, jobs):ready_queue = []current_time = 0while jobs or ready_queue:if not ready_queue:current_time = jobs[0].arrival_timefor job in jobs:if job.arrival_time <= current_time:ready_queue.append(job)ready_queue.sort(key=lambda x: x.service_time) job = ready_queue.pop(0)job.waiting_time = current_time -job.arrival_timejob.turnaround_time = job.waiting_time + job.service_timecurrent_time += job.service_timejobs.remove(job)```3. 优先级调度(Priority Scheduling)优先级调度算法是一种将作业按照优先级进行调度的算法。
处理机调度算法的实现
处理机调度算法的实现标题:处理机调度算法的实现正文:处理机调度算法是操作系统中的关键部分,它决定了处理机如何分配给各个进程以提高系统的性能和效率。
本文将介绍几种常见的处理机调度算法以及它们的实现方式。
1.先来先服务调度算法(FCFS):先来先服务调度算法是最简单的调度算法之一。
它按照进程到达的顺序来分配处理机。
实现这个算法时,需要维护一个就绪队列,并按照进程到达的时间将进程依次加入队列。
当处理机空闲时,从队列中选择最先到达的进程进行执行。
2.短作业优先调度算法(SJF):短作业优先调度算法是一种非抢占式调度算法,它根据进程的执行时间来进行调度。
在实现这个算法时,需要预测每个进程的执行时间,并将执行时间最短的进程优先分配处理机。
这需要对每个进程的执行时间进行估计,可以通过历史数据或统计方法来获得。
3.优先级调度算法:优先级调度算法根据进程的优先级来进行调度。
每个进程都有一个与之相关联的优先级,优先级较高的进程会被先执行。
实现这个算法时,需要定义一个合适的优先级评估方式,并在处理机空闲时选择优先级最高的进程进行执行。
4.时间片轮转调度算法:时间片轮转调度算法是一种抢占式调度算法,它将处理机的时间分割成多个时间片,每个进程在一个时间片内执行一段时间,然后让出处理机给下一个进程。
实现这个算法时,需要设置合适的时间片长度,并使用一个计时器来控制每个进程的执行时间。
以上只是几种常见的处理机调度算法,实际应用中还有其他各种调度算法,如多级反馈队列调度算法、最短剩余时间优先调度算法等。
选择合适的调度算法可以提高系统的性能和响应速度。
在实际实现时,还需要考虑多线程、多核处理器、资源分配等因素来优化调度算法的性能。
总结起来,处理机调度算法的实现需要根据实际需求选择合适的算法,并结合系统特性进行调优。
这些算法的实现应该具有清晰的思路,流畅的表达,并遵循文章中提到的几点注意事项,以确保文章的质量和阅读体验。
处理机调度算法实现
处理机调度算法实现
1.先来先服务(FCFS)调度算法:
先来先服务调度算法是最简单的调度算法之一,按照进程请求处理机
的先后顺序进行调度。
实现该算法的关键是维护一个就绪队列,按照进程
到达的先后顺序将进程加入队列,并按顺序执行。
2.短作业优先(SJF)调度算法:
短作业优先调度算法是根据进程的执行时间来进行调度的。
实现该算
法的关键是维护一个就绪队列,按照进程执行时间的从小到大顺序将进程
加入队列,并按顺序执行。
3.优先级调度算法:
优先级调度算法根据进程的优先级来进行调度。
实现该算法的关键是
为每个进程分配一个优先级,并维护一个就绪队列,按照进程优先级的从
高到低顺序将进程加入队列,并按顺序执行。
4.时间片轮转(RR)调度算法:
时间片轮转调度算法是将处理机的使用时间划分为固定长度的时间片,按顺序分配给就绪队列中的进程。
实现该算法的关键是维护一个就绪队列
和一个时间片队列,按照进程到达的先后顺序将进程加入就绪队列,当一
个时间片结束时,将当前进程放入时间片队列尾部,并选取就绪队列中的
下一个进程执行。
以上是几种常见的处理机调度算法。
在实际的处理机调度实现中,需
要考虑诸多因素,如进程的优先级、执行时间、I/O等待时间等。
算法的
选择应根据实际情况进行权衡,以提高系统性能和资源利用率。
模拟处理机调度的SJF调度算法
实验二模拟处理机调度的SJF调度算法一、实验目的:用c++模拟SJF调度算法二、实验内容:本实验首先输入进程的个数,然后输入进程名称,最后输入每个进程提交到系统的时间和每个进程所需要的处理时间。
然后通过模拟程序,显示以下信息:1)处理机对进程的调度过程。
2)计算这N个进程的平均周转时间。
三、示例:若输入:3A 0.0 8.0B 0.4 4.0C 1.0 1.0进程名称提交时间进程需要工作的时间显示:作业提交时间所需时间开始时间完成时间1 0.0 8.0 0.0 8.03 1.0 1.0 8.0 9.02 0.4 4.0 9.0 13.0平均周转时间为:9.53四:源程序#include<iostream>#include<string.h>using namespace std;struct pcb{char name;//进程名称double startTime;//提交时间double runTime;//运行时间double achive;//完成时间bool state;//进程运行的状态double time;//开始运行时间};int main(){int n;double first;int t=0;struct pcb a[100];double max,min;int b[100];cin>>n;cout<<"进程名称"<<'\t'<<"提交时间"<<'\t'<<"进程需要工作的时间"<<endl;for(int i=0;i<n;i++){cin>>a[i].name>>a[i].startTime>>a[i].runTime;a[i].state=0;}first=a[0].startTime;max=a[0].runTime;double temp1=a[0].startTime;for(int i=0;i<n;i++){if(first>=a[i].startTime){t=i;first=a[i].startTime;}if(max<a[i].runTime)max=a[i].runTime;if(temp1<a[i].startTime)temp1=a[i].startTime;}min=max;for(int i=0;i<n;i++){if(first==a[i].startTime&&a[i].runTime<a[t].runTime)t=i;}a[t].state=true;a[t].achive=a[t].startTime+a[t].runTime;a[t].time=a[t].startTime;int c=1;int y;double temp=max;cout<<"作业"<<'\t'<<"提交时间"<<'\t'<<"所需时间"<<'\t'<<"开始时间"<<'\t'<<"完成时间"<<endl;cout<<a[t].name<<'\t'<<a[t].startTime<<'\t'<<a[t].runTime<<'\t'<<a[t].time<<'\t'<<a[t].achiv e<<endl;while(c<n){int k=n+1;min=max;for(int j=0;j<n;){if((false==a[j].state)&&(a[j].startTime<a[t].achive)&&(min>=a[j].runTime)){min=a[j].runTime;k=j;j++;}else j++;}if(k==n+1){first=temp1;for(int i=0;i<n;i++)if(a[i].state==false&&first>=a[i].startTime){t=i;first=a[i].startTime;}a[t].achive=a[t].startTime+a[t].runTime;a[t].time=a[t].startTime;cout<<a[t].name<<'\t'<<a[t].startTime<<'\t'<<a[t].runTime<<'\t'<<a[t].time<<'\t'<<a[t].achiv e<<endl;}else{a[k].achive=a[t].achive+a[k].runTime;a[k].time=a[t].achive;a[k].state=true;t=k;cout<<a[t].name<<'\t'<<a[t].startTime<<'\t'<<a[t].runTime<<'\t'<<a[t].time<<'\t'<<a[t].achiv e<<endl;}c++;}double sum;for(int y=0;y<n;y++){sum=sum+a[y].achive;}cout<<"平均周转时间:"<<sum/n<<endl;return 0;}五.实验结果六:实验总结当考虑到运行一些程序后,可能还有后部分程序会等待一段时间才运行,所以程序要考虑很多,运行时间可能不是从0开始。
处理机调度-调度算法
处理机调度-调度算法处理机调度-调度算法先来先服务(FCFS)调度算法概念将⽤户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,按照先来先服务的⽅式进⾏调度处理。
公平性1.直观看,该算法在⼀般意义下是公平的。
即每个作业或进程都按照它们在队列中等待时间长短决定它们是否优先享受服务2.但如果执⾏时间较短的作业或进程在某些执⾏时间很长的作业或进程之后到达,则它们将等待很长时间轮转法基本思路基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成⽐例过程将CPU的处理时间分成固定⼤⼩的时间⽚。
如果⼀个进程在被调度选中之后⽤完了系统规定的时间⽚,但未完成要求的任务,则它⾃⾏释放⾃⼰所占有的CPU⽽排到就绪队列的末尾,等待下⼀次调度。
同时,进程调度程序⼜去调度当前就绪队列中的第⼀个进程或作业。
轮转法只能调度可抢占资源轮转法只能⽤来调度分配那些可以抢占的资源。
将它们随时剥夺再分配给别的进程例⼦:CPU是可抢占资源的⼀种但如打印机等资源是不可抢占的作业调度不使⽤轮转法:由于作业调度是对除了CPU之外的所有系统硬件资源的分配,其中包含有不可抢占资源,所以作业调度不使⽤轮转法轮转法的时间⽚选取问题时间⽚长度的选择会直接影响系统开销和响应时间过短的问题:如果时间⽚长度过短,则调度程序剥夺处理机的次数增多。
这将使进程上下⽂切换次数也⼤⼤增加,从⽽加重系统开销过长的问题:如果时间⽚长度选择过长,例如⼀个时间⽚能保证就绪队列中所需执⾏时间最长的进程能执⾏完毕,则轮转法变成了先来先服务法由于时间⽚的选取要满⾜相应时间的要求,所以是有如下的关系:q=R/NmaxR:系统对响应时间的要求RNmax:就绪队列中所允许的最⼤进程数Nmax相应的关系:1.在q为常数的情况下,如果就绪队列中的进程数远⼩于Nmax,则响应时间R看上去会⼤⼤减⼩2.由于q值固定,从⽽进程上下⽂切换的时机不变,系统开销也不变。
3.CPU的整个执⾏时间等于各进程执⾏时间加上系统开销。
处理机调度算法流程
处理机调度算法流程一、引言处理机调度是操作系统中的一个重要组成部分,主要任务是根据作业的特性和系统资源的情况,合理地安排和分配处理机的使用,以提高系统的运行效率和资源利用率。
在本文中,将介绍几种常见的处理机调度算法及其流程。
二、先来先服务(FCFS)调度算法先来先服务调度算法是最简单的一种调度算法,其流程如下:1. 将所有进程按照到达时间的先后顺序排列;2. 从队首开始,依次执行每个进程,直到完成;3. 如果有新的进程到达,将其加入队尾。
三、最短作业优先(SJF)调度算法最短作业优先调度算法是根据作业的执行时间来进行调度的,其流程如下:1. 将所有进程按照执行时间的从小到大进行排序;2. 执行执行时间最短的进程;3. 如果有新的进程到达,比较其执行时间与当前正在执行的进程,如果新进程的执行时间更短,则抢占CPU,并执行新进程。
四、优先级调度算法优先级调度算法是根据进程的优先级来进行调度的,其流程如下:1. 每个进程都有一个优先级,优先级越高表示优先级越高;2. 执行优先级最高的进程;3. 如果有新的进程到达,比较其优先级与当前正在执行的进程,如果新进程的优先级更高,则抢占CPU,并执行新进程。
五、时间片轮转调度算法时间片轮转调度算法是按照时间片的大小来进行调度的,其流程如下:1. 将所有进程按照到达时间的先后顺序排列;2. 按照时间片的大小依次执行每个进程,直到时间片用完或进程完成;3. 如果进程未完成但时间片用完,则将其放入队尾,执行下一个进程。
六、多级反馈队列调度算法多级反馈队列调度算法是将进程按照优先级划分成多个队列,每个队列有不同的时间片大小,其流程如下:1. 将所有进程按照到达时间的先后顺序排列;2. 执行最高优先级的队列中的进程,如果时间片用完或进程完成,则将进程移到下一个优先级的队列中;3. 如果进程未完成但时间片用完,则将其放入下一个优先级的队列中。
七、总结处理机调度算法是操作系统中的一个重要组成部分,不同的调度算法适用于不同的场景和需求。
处理机调度算法的模拟
实验三:处理器调度算法的模拟实验学时:3实验类型:(设计)一、实验目的1. 理解多道程序系统中处理机调度算法;2. 掌握单处理机情况下,常用处理机调度算法的模拟实现方法;3. 培养学生分析和设计程序的能力。
二、实验条件Windows 2000/Windows ME/Linux等操作系统,装有JA V A、C、C++等语言工具的环境。
三、实验原理及相关知识在采用多道程序系统中,往往有若干个进程同时处于就绪状态。
当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。
本实验模拟在单处理器情况下的处理器调度,包括先来先服务算法、短作业优先算法、时间片轮转算法等,帮助学生加深了解处理器调度的相关知识。
四、实验步骤本实验模拟单处理器系统的进程调度,加深对进程的概念及进程调度算法的理解。
用某种语言编写和调试一个进程调度的算法程序,有一些简单的界面,能够运行,仿真操作系统中进程调度的原理和过程。
1、先来先服务调度算法①假设系统有5个进程,每个进程由一个进程控制块标识。
进程控制块内容如下:1)进程名即进程标识。
2)链接指针:按照进程到达系统的时间将处于就绪状态的进程连接成一个就绪队列。
指针指出下一个到达进程的进程控制块首地址。
最后一个进程的链接指针为NULL。
3)估计运行时间:可由设计者任意指定一个时间值。
4)到达时间:进程创建时的系统时间或由用户指定。
调度时,总是选择到达时间最早的进程。
5)进程状态:为简单起见,这时假定进程有两种状态:就绪和完成。
并假定进程一创建就处于就绪状态,用R 表示。
当一个进程运行结束时,就将其置成完成态,用C 表示。
② 设置一个队首指针head ,用来指出最先进入系统的进程,各就绪进程通过链接指针连在一起。
③ 处理机调度时总是选择队首指针指向的进程投入运行。
由于本实验只是模拟实验,所以对被选中的进程并不实际启动运行,而只是执行:估计运行时间减一,用这个操作来模拟进程的一次运行,而且省去进程的现场保护和现场恢复工作。
处理机调度算法详解
关于处理机调度算法《操作系统》教材中,介绍了常用的作业调度算法和进程调度算法。
其中先来先服务法(FCFS)和优先级法对作业调度和进程调度都适用,时间片轮转法(RR)适用于进程调度。
此外,还介绍了其他调度算法,如短作业优先法、最短剩余时间优先法、多级队列法和多级反馈队列法,这4个算法不是课程的重点内容,不作为考核要求。
需要指出的是:(1)在作业调度和进程调度中同时出现的算法,如FCFS、优先级法,其使用原理是基本相同的;(2)作业调度算法和进程调度算法应严格与存储管理中的“请求淘汰换页算法”相区别,注意不要混淆。
下面,结合具体的例题,详解调度算法:1. 先来先服务法(FCFS)算法描述:每次调度时,从后备作业队列或就绪队列中选择一个最先进入该队列的作业或进程。
【例1】下表给出作业l,2,3的到达时间和运行时间。
采用先来先服务调度算法,试问作业调度的次序和平均周转时间各为多少?(时间单位:小时,以十进制进行计算。
)分析解题关键是要根据系统采用的调度算法,弄清系统中各道作业随时间的推进情况。
我们可以用一个作业执行时间图来形象地表示作业的执行情况,帮助我们理解此题。
先来先服务调度算法是按照作业到达的先后次序挑选作业,先进入的作业优先被挑选。
即按照“排队买票”的办法,依次选择作业。
其作业执行时间图如下:或者简化为下图:作业1 作业2 作业3| | | | 时间0 8 12 13由于作业1,2,3是依次到来的,所以刚开始时系统中只有作业1,于是作业1被选中。
在8.0时刻,作业1运行完成,这时作业2和作业3已经到达,都在系统中等待调度,按照先来先服务法的规定,每次调度最先进入就绪队列中的作业,由于作业2比作业3先到达,于是作业2被优先选中运行。
待作业2运行完毕,最后运行作业3。
因此,作业调度的次序是1,2,3。
另外,要记住以下周转时间和平均周转时间的算术公式: 作业i 的周转时间T i =作业i 的完成时间-作业i 的提交时间系统中n 个作业的平均周转时间nT T ni i 1)(1⨯=∑=,其中Ti 为作业i 的周转时间。
处理机的调度算法原理
处理机的调度算法原理处理机调度算法原理处理机调度算法是指负责调度CPU执行任务的算法。
现在的操作系统很多都支持多任务操作,因此如何高效地调度多个任务变得非常重要。
这篇文章将介绍处理机调度算法的原理以及常见的调度算法,帮助读者更好地了解处理机调度。
一、调度算法原理处理机调度算法的主要目标是提高系统的性能和响应时间。
具体地,它需要通过合理的任务分配和优化运行顺序来使CPU资源得到更好的利用。
CPU调度算法的原理可以归纳为以下几个方面:1. 多种调度算法:由于不同操作系统之间的实现方式不同,所以CPU调度算法也有很多不同的实现方式。
例如一些常见的调度算法如抢占式调度、非抢占式调度、时间片轮转调度等。
2. 进程队列管理:处理机调度算法通过对进程队列的管理来实现任务的分配。
进程队列分为就绪队列、等待队列和完成队列,操作系统会动态分配可执行的进程,然后在就绪队列中等待执行。
3. 优先级管理:操作系统为每个进程分配一个优先级,并根据该优先级来决定哪个进程优先执行。
优先级的设置和调整对于整个系统的性能和稳定性有着重要的影响。
二、调度算法1. 先来先服务(FCFS)FCFS算法实现简单,按照进程到达的先后顺序执行。
但是,该算法可能会导致长进程优先原则的问题,即一个长进程进入等待队列后,后面到达的短进程需要等待很长时间才能得到CPU资源。
2. 最高优先级优先调度算法(HPF)HPF算法以优先级作为调度依据,优先级高的进程先执行。
但是,该算法可能会导致低优先级进程永远得不到CPU资源。
3. 时间片轮转调度算法时间片轮转调度算法是根据时间片的大小,对CPU进行优先级扫描并使执行领域进程拥有相同的可用CPU时间。
时间片大小越小,CPU在进行进程切换时的频率就越高。
4. 抢占式调度算法抢占式调度算法将当前进程从CPU中抢占,然后调度另一个进程在剩余的时间片内执行。
这种算法可以防止一个进程占用CPU太久的问题,并且可以由一个高优先级进程抢占低优先级进程的CPU资源。
模拟调度算法及其应用场景
模拟调度算法及其应用场景随着科技的不断进步,人们对于数据处理和系统管理的要求越来越高。
在这样的需求下,模拟调度算法成为了一个重要的工具。
它可以帮助我们更好地管理数据,提高系统效率。
那么,什么是模拟调度算法?它有哪些应用场景呢?接下来,本文将为您一一探究。
一、什么是模拟调度算法?模拟调度算法,是一种基于模拟的调度算法。
其核心思想是通过模拟来生成具有实际意义的样本数据,然后通过计算机进行调度优化。
其实现方法通常为:1、使用概率分布函数生成样本数据;2、基于样本数据,通过建立相应的系统模型来模拟调度过程;3、根据系统模型中描述的调度策略,对生成的样本进行调度。
这种方法具有适用范围广、精度高的优点。
因此,在实际应用中得到了广泛的应用。
二、模拟调度算法的应用场景模拟调度算法能够模拟并优化多种场景,下面简单介绍一些应用场景。
1、工厂生产线优化在工厂生产中,生产线负责将原材料加工成最终产品。
但是,由于加工过程中存在很多参数的变化,这些参数对生产线的运行效率有很大的影响。
因此,利用模拟调度算法来优化工厂生产线的效率,可以有效提升生产效率、降低资源浪费。
2、电网调度电网调度是指在保证全国电网运行安全的前提下,有效控制电网各部分的运行状态,以达到最低运行成本和最大供电量的目的。
电网中存在多个节点,在节点之间需要将电力传输,因此整个调度过程十分繁琐。
利用模拟调度算法,可以将电网调度过程模拟出来,并通过调度算法进行优化。
3、城市公交车调度城市公交车的调度需要考虑到乘客数量、车辆数量、路线等多方面因素。
而且,这些因素之间相互影响,很难直接得到最优调度方案。
利用模拟调度算法,可以通过对乘客数量、车辆数量、路线等因素进行模拟,最终获得一个最优调度方案。
三、总结模拟调度算法具有很强的实用性和适应性,是可以应用于众多领域的工具。
在工作和学习中,需要利用模拟调度算法,能够更好地解决问题,提高效率和准确性。
调度算法模拟
调度算法模拟调度算法是计算机科学中的一个重要概念,它涉及到如何合理地分配计算机资源和任务,以达到最优的效果。
调度算法在操作系统、网络传输、任务分配等领域都有广泛的应用。
在操作系统中,调度算法主要用于管理CPU的使用。
操作系统需要根据不同的调度算法,合理地分配CPU的时间片,以确保各个进程都能得到适当的执行时间。
常见的调度算法有先来先服务(FCFS)、最短作业优先(SJF)、时间片轮转等。
先来先服务算法简单直接,按照进程的到达顺序进行调度;最短作业优先算法根据进程的执行时间进行排序,选择执行时间最短的进程先执行;时间片轮转算法将CPU的执行时间划分为固定的时间片,每个进程依次执行一个时间片,然后轮转到下一个进程。
网络传输中的调度算法主要用于管理数据包的传输。
网络中存在着大量的数据包需要传输,调度算法的目标是尽可能地减少传输延迟和提高带宽利用率。
常见的调度算法有先来先服务(FCFS)、最短剩余时间优先(SRTF)、最短传输时间优先(STF)等。
先来先服务算法按照数据包的到达顺序进行调度;最短剩余时间优先算法根据数据包的大小和到达时间进行排序,选择剩余传输时间最短的数据包先传输;最短传输时间优先算法根据数据包的大小和传输时间进行排序,选择传输时间最短的数据包先传输。
任务分配中的调度算法主要用于分配任务给合适的处理器。
在分布式系统中,存在着大量的任务需要执行,调度算法的目标是尽可能地减少任务执行时间和提高系统的吞吐量。
常见的调度算法有最短作业优先(SJF)、最高响应比优先(HRRN)、最小剩余时间优先(SRT)等。
最短作业优先算法根据任务的执行时间进行排序,选择执行时间最短的任务先执行;最高响应比优先算法根据任务的等待时间和执行时间进行计算响应比,选择响应比最高的任务先执行;最小剩余时间优先算法根据任务的剩余执行时间进行排序,选择剩余执行时间最短的任务先执行。
调度算法的选择应根据具体的应用场景和需求来确定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告设计名称:模拟实现一种处理机调度算法学生姓名: xxx专业:计算机科学与技术班别: xxxxxxxx 学号: xxxxxx 指导老师: xxxxx日期: 2014 年 6 月 20 日初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟进程调度,能够处理以下的情形:⑴能够选择不同的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.设计报告内容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);进程调度模拟设计——先来先服务、优先级法1、背景:当计算机系统是多道程序设计系统时,通常会有多个进程或线程同时竞争CPU。
只要有两个或更多的进程处于就绪状态,这种情形就会发生。
如果只有一个CPU可用,那么就必须选择下一个要运行的进程。
在操作系统中,完成选择工作的这一部分称为调度程序,该程序使用的算法成为调度算法。
进程调度的核心问题是采用什么样的算法把处理机分配给进程,好的算法将提高资源利用率,减少处理机的空闲时间,避免有些作业长期得不到相应的情况发生等,从而设计出受欢迎的操作系统。
较常见的几种进程调度算法有:先来先服务调度算法;短作业优先调度算法;时间片轮转调度算法;优先级调度算法;高响应比优先算法和多级反馈队列调度算法等。
2.1设计目的无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。
另外,系统进程也同样需要使用处理机。
这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。
本次课程设计的主要任务是用高级语言模拟进程调度的算法,包括先来先服务和优先级法。
通过输入进程的信息,模拟某种调度算法,得到进程调度的顺序,从而进一步分析进程的调度过程,并通过分析程序的运行,探讨各种调度算法的优劣。
2.2 设计内容及要求1)充分体现设计、实现过程;2)报告包括算法流程描述、数据结构代码描述、算法实现代码描述、模拟执行过程截图;3)单人完成课程设计,每人一份报告;4)报告双面打印;2.3算法与设计的思想2.3.1算法思想:·一个进程的生命期可以划分为一组状态,这些状态刻画了整个进程。
系统根据PCB结构中的状态值控制过程。
在进程的生命期内,一个进程至少具有5种基本状态,它们是:初始态、执行状态、等待状态、就绪状态和终止状态。
通过系统设计,实现进程相关数据结构的创建和查看功能;实现多种进程调度算法:先来先服务算法、优先级调度算法、时间片轮转法等;实现对执行进程的阻塞,对等待进程的唤醒等功能。
进程的转换过程如上·进程的先来先服务调度算法:首先定义进程结构体,用于记录进程的基本信息,包括进程名,优先级,进程到达时间,进程运行时间,然后将用户输入的进程信息保存到定义的结构数组中,并按进程到达的先后时间对数组进行排序,并记录它们的周转时间、带权周转时间、平均周转时间及平均带权周转时间。
·进程的优先级调度算法:同样先定义进程结构替,记录进程信息,将用户输入的进程信息保存在结构体数组中。
遍历数组,找出最先到达的进程,若有多个,则取优先级最高的一个,与数组中的第一个位置的进程互换位置,记录此进程执行完的时间,然后从第二个位置开始遍历数组,找到在第一个进程执行结束前到达的进程,若没有,则找到余下进程中到达时间最早的进程,找到优先级最高的一个,若并与数组的第二个位置的进程互换位置。
按同样的方法为余下的进程排序。
同样记录它们的周转时间,带权周转时间,并算出平均周转时间和平均带权周转时间。
2.3.2设计思想:a)每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:进程名、优先级数、到达时间、需要运行时间等等。
b)进程的信息,包括到达时间,优先数及需要的运行时间等都是事先人为地指定。
c)每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。
2、功能设计(数据结构及模块说明);3.1 系统流程如下:3.2数据结构及模块说明:(1)输入模块能够满足输入进程基本信息的功能,尽可能提供友好的交互界面。
给用户很好的提示,使用户能够方便的操作。
(2)算法模块先来先服务算法:可以根据进程到达的先后顺序来确定进程的运行顺序,并算出进程的周转时间,平均周转时间等。
优先级法:根据进程的优先级和进程到达的时间来确定进程的调度顺序,并算出周转时间,带权周转时间等。
(3)输出模块根据算法得到的进程调度顺序以及算出的其他参数,将其输出。
3、开发平台及源程序的主要部分;4.1软硬件环境●硬件设备: PC机●软件设备:WINDOWSXP、Microsoft Visual C++ 6.04.2 源代码主要部分:(1)信息输入函数:void getInput(char *pname,int *priority,char *begintime,float *runtime) {printf("请输入进程名:");scanf("%s",pname);printf("请输入优先级");scanf("%d",priority);printf("请输入到达时间:");scanf("%s",begintime);printf("请输入¨运行时间(min):");scanf("%f",runtime);}(2)先来先服务的算法:void fcfs(struct process *pro,int n){int i,j;struct process p;for(i = 0;i < n;i ++){for(j = 0;j < n - i -1;j ++){if(!timecompare(pro[j],pro[j+1])){p = pro[j + 1];pro[j + 1] = pro[j];pro[j] = p;}}}}(3)优先级法的算法:void prior(struct process *pro,int n) {int i,j,pt,t,bt,m;bt = 0;int a[MAXPROCESS];struct process p;float curtime = 1500;for(i = 0;i < n;i ++){if(curtime > pro[i].btime){curtime = pro[i].btime;}}for(i = 0;i < n;i ++){t = 0;pt = 0;for(j = i;j < n;j++){if(pro[j].btime <= curtime){a[t++] = j;}}if(t == 0){curtime = 1500;for(j = i;j < n;j ++){if(curtime > pro[j].btime){curtime = pro[j].btime;}}for(j = i;j < n;j++){if(pro[j].btime <= curtime){a[t++] = j;}}}for(j = 0;j < t;j++){bt = a[j];if(pro[bt].priority > pt){pt = pro[bt].priority;m = bt;}}if(m != i){p = pro[m];pro[m] = pro[i];pro[i] = p;}curtime = curtime + pro[i].runtime;}}4、测试用例,运行结果与运行情况分析;5.1测试用例:①进程个数为4②进程名唯一③预计运行结果:先来先服务:c a d b优先级法:c a b d进程名进程到达时间运行时间优先级a 2:12 34 2b 3:10 31 3c 1:15 21 1d 2:13 11 25.2运行结果:。