资源描述:
《操作系统实验-先来先服务的调度算法和短作业优先》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、学号P71514032专业计算机科学与技术姓名实验日期2017.10.27教师签字成绩实验报告【实验名称】进程调度算法FCFS、FJF【实验目的】在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。也就是说能运行的进程数远远大于处理机个数,为了使系统中的各进程能有条不紊的运行,必须选择某种调度策略,以选择一进程占用处理机,所以,要求使用某一种编程语言设计实现模拟单处理机调度的算法,以巩固和加深处理机调度的概念。本实验要求采用先来先服务的调度算法和短作业优先的调度算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解进程调度、进程队列的概念。【实
2、验原理】FCFS调度算法先来先服务(FCFS)调度算法是一种最简单的调度算法。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。SJF调度算法短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。【实验内容】问题分析输入:进程的名称、到达时间、服务时间输出:进程的完成时间、周转时间
3、、带权周转时间其中对于任意进程有:周转时间=完成时间-到达时间带权周转时间=周转时间/服务时间因此,两个算法的关键是求完成时间l数据结构及函数说明使用的数据结构是数组,进程的名称、到达时间、服务时间、进程的完成时间、周转时间、带权周转时间分别对应于一个数组,这些数组长度相等.structfcfs//定义进程的结构体{charname[10];//进程名floatarrivetime;//到达时间floatservicetime;//服务时间floatstarttime;//开始时间floatfinishtime;//完成时间floatzztime;//周转时
4、间floatdqzztime;//带权周转时间};fcfsa[100];//结构体数组函数说明voidFinput(fcfs*p,intN);//输入函数,初始化voidFsort(fcfs*p,intN);//按到达时间排序,先到达排在前面voidFsort2(fcfs*p,intN);//按进程大小排序,先到达排在前面voidF_method(fcfs*p,intN)//先来先服务算法voidF_method2(fcfs*p,intN)//短作业优先程序voidSJF(fcfs*p,intN);//短作业优先voidFCFS(fcfs*p,intN);/
5、/先来先服务voidSJF(fcfs*p,intN)//短作业优先voidFPrint(fcfs*p,intN)//输出函数求完成时间算法1)FCFS算法流程图2)SJF算法流程图l程序#includestructfcfs//定义进程的结构体{charname[10];//进程名floatarrivetime;//到达时间floatservicetime;//服务时间floatstarttime;//开始时间floatfinishtime;//完成时间floatzztime;//周转时间floatdqzztime;//带权周转时间};flo
6、atarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;fcfsa[100];//定义先来先服务算法进程的最大数量voidFinput(fcfs*p,intN)//输入函数{inti;printf("输入进程的名称、到达时间、服务时间:(例如:x0100)");for(i=0;i<=N-1;i++){printf("输入第%d进程的名称、到达时间、服务时间:",i+1);scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p
7、[i].servicetime);}}//输出函数voidFPrint(fcfs*p,intN)//输出函数{intk;printf("执行顺序:");printf("%s",p[0].name);for(k=1;k8、.2ftt",p[k].name,p[k