操作系统模拟进程调度算法

上传人:re****.1 文档编号:476826273 上传时间:2023-12-18 格式:DOCX 页数:9 大小:53.42KB
返回 下载 相关 举报
操作系统模拟进程调度算法_第1页
第1页 / 共9页
操作系统模拟进程调度算法_第2页
第2页 / 共9页
操作系统模拟进程调度算法_第3页
第3页 / 共9页
操作系统模拟进程调度算法_第4页
第4页 / 共9页
操作系统模拟进程调度算法_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《操作系统模拟进程调度算法》由会员分享,可在线阅读,更多相关《操作系统模拟进程调度算法(9页珍藏版)》请在金锄头文库上搜索。

1、操作系统项目文档报告 进程调度算法专业:班级:指导教师:姓名:学号:一、核心算法思想1 .先来先服务调度算法先来先服务调度算法是一种最简单的调度算法,该算法既可以用于作业调度,也可用 于进程调度。当在作业调度中采用该算法时, 每次调度都是从后备作业队列中选择一个或多 个最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程, 然后放入就绪队列。在进程调度中采用 FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列 的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才 放弃处理机。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。2 .短

2、作业(进程)优先调度算法短作业(进程)优先调度算法 SJ (P) F,是指对短作业或短进程优先调度的算法。它 们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。该算法对长作业不利,完全未考虑作 业的紧迫程度。3 .高响应比优先调度算法在批处理系统中,短作业优先算法是一种比

3、较好的算法,其主要不足之处是长作业的 运行得不到保证。如果我们能为每个作业引人动态优先权,并使作业的优先级随着等待时间的增加而以速率a提高,则长作业在等待一定的时间后,必然有机会分配到处理机。 该优先权的变化规律可描述为:优先权=(等待时间+要求服务时间)/要求服务时间即 优先权=响应时间/要求服务时间如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因而该算法有利 于短作业。当要球服务的时间相同时,作业的优先权决定于其等待时间,等待时间越长,优先权 越高,因而它实现的是先来先服务对于长作业,作业的优先级可以随着等待时间的增加而提高,当其等待时间足够长时, 其优先级便可以升到很高,从

4、而也可获得处理机。4 .时间片轮转算法在时间片轮转算法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每 次调度时,把 CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由 一个计数器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执 行时间。换言之,系统能在给定的时间内响应所有用户的请求。二、核心算法流程图1 .先来先服务算法流程图开始 J1U建进程PCB按到达时间排序调用action,执行

5、进程2.短进程优先算法3.时间片轮转算法输出结果结束在每个时间片执行程序进程结束获得1鲍信息调用时间片轮转算法4.高响应比优先算法首先进行第一个进程计算剩余进程的响应比按优先级排序运行少先级最高的.程Y结束卜四、源代码下面给出的是用 C实现程序的源代码:#include#include #include typedef struct pcbint name;int needtime;int arrivetime;int pri;int state;int cputime;plist;void action(plist * nowpro);void action(plist * nowpro)d

6、elay(1000);printf(now is process %d ,nowpro-name);nowpro-needtime-;if(nowpro-needtime=0)printf( the process %d is endn,nowpro-name);/* nowpro-state=1; */ printf(n);elseprintf(process %d needtime is %dn,nowpro-name,nowpro-needtime); printf(n);void creatpro(int n,plist * process )int j;for(j=0;jn;j+)p

7、rocessj.name= j;processj.needtime=rand()%10+1;processj.arrivetime=rand()%10;processj.pri=randO%4;processj.state=0;processj.cputime=0;void show( int n,plist * process)int j;for (j=0 卜n;j+)printf(name of process%dt,processj.name);printf(needtime %dt,processj.needtime);printf(arrivetime %dt,processj.ar

8、rivetime);printf(pri %dn,processj.pri);printf(state %dt,processj.state);printf(cputime %dn,processj.cputime);void main()void creatpro(int n,plist * process );void show( int n,plist * process);void fcfs(int n,plist * process);void sjf(int n,plist * process);void rr(int n,plist * prol);void hrrn(int n

9、,plist * prol);int n; /*the number of process*/int k;plist process10;printf(please input the number of process from 0 to 10n);scanf(%d,&n);creatpro(n,process);show(n,process);printf(please choose the what you want to usen);printf(1 FCFSt 2 SJFt 3 HRRNt 4 RRn);scanf(%d,&k);switch(k)case 1:fcfs(n,proc

10、ess);break;case 2:sjf(n,process);break;case 3:hrrn(n,process);break;case 4:rr(n,process);break;defaultbreak;getch(); void fcfs(int n,plist * prol)void show( int n,plist * process);int i,j,k;int m=0;int time;plist temp;plist pro210;for(i=0;in;i+)k=0;while(pro1k.state=1)k+;temp=pro1k;for(j=k+1;jpro1j.

11、arrivetime&pro1j.state!=1)temp=pro1j;k=j;pro2m+=temp;pro1k.state=1;show(n,pro2);for(i=0;i0)action(&pro2i);void sjf(int n,plist * prol)void show( int n,plist * process);int i,j,k;int m=0;plist temp;plist pro210;for(i=0;in;i+)k=0;while(pro1k.state=1)k+;temp=pro1k;for(j=k+1;jpro1j.needtime&pro1j.state!

12、=1)temp=pro1j;k=j;pro2m+=temp;pro1k.state=1;show(n,pro2);for(i=0;i0)action(&pro2i);void rr(int n,plist * prol)void show( int n,plist * process);int i,j,k;int m=0;int time;plist temp;plist pro210;for(i=0;in;i+)k=0;while(pro1k.state=1)k+;temp=pro1k;for(j=k+1;jpro1j.arrivetime&pro1j.state!=1)temp=pro1j

13、;k=j;pro2m+=temp;pro1k.state=1;show(n,pro2);time=pro20.needtime;for(i=0;in;i+)if(time0)for(i=0;i0)action(&pro2i);time-;void hrrn(int n,plist * prol)int cal(int a ,plist * pro2);int i,k,j,m;int curtime=0;plist temp;for(i=0;in;i+)k=0;while(pro1k.state=1)k+;temp=pro1k;m=cal(curtime,&temp);for(j=0;jn;j+)if(pro1j.state!=1)pro1j.pri=cal

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号