欢迎来到天天文库
浏览记录
ID:58568616
大小:16.96 KB
页数:18页
时间:2020-10-19
《西电操作系统大作业任务调度(附代码).docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单处理器任务调度1需求说明1.1基本需求目标:本次实验的目标是在Linux环境下实现任务调度仿真,利用多线程实现任务池中的多个任务,支持先来先服务、轮转和反馈三种调度策略,提高对Linux环境下多进程、多线程和单处理器调度等知识的理解。问题描述:设有任务A、B、C、D、E,分别具有不同的优先级和处理时间,通过一个调度线程对这5个任务进行调度。功能需求:l正确输出三种调度算法下,任务的执行顺序、每个任务占用CPU的时间以及优先级队列(反馈调度)l通过一个调度进程实现任务调度l有输出界面,在每个时间点输出任务状态、每个任务已经占用CPU时间(TIMECOUNTE
2、R)和还需CPU时间,已经执行的任务顺序(order2)和时间(time)。非功能需求:l程序应有较好的容错性(即能对用户输入的命令进行判断,并对错误的命令进行错误处理)过程需求:l使用vi进行代码的编写l使用make工具建立工程l将实现不同类别功能的函数写到不同的.c文件中,并使用makefile链接编译。#include#include#includetypedefstructquen{charpname[8];inttime1;inttime2;charstate;structquen*next
3、;}QUEN;floatt,d;struct{intid;floatArriveTime;//到达时间floatServiceTime;//该进程需要的服务时间floatStartTime;//进程真正开始运行时间floatEndTime;//进程真正结束时间floatRunTime;//运行的时间floatDQRunTime;//相对执行时间实际运行/请求的服务时间intstatus;//进程状态,是否被运行过}arrayTask[4];voidGetTask();intfcfs();intsjf();voidnew_n(ints);voidPrintre
4、sult(intj);voidcl();voidGetTask(){inti;floata;for(i=0;i<=4;i++){arrayTask[i].id=i+1;printf("inputthenumber");printf("inputtheArriveTimeofarrayTask[%d]:",i);scanf("%f",&a);arrayTask[i].ArriveTime=a;printf("inputtheRequestTimeofarrayTask[%d]:",i);scanf("%f",&a);arrayTask[i].RequestTi
5、me=a;arrayTask[i].StartTime=0;arrayTask[i].EndTime=0;arrayTask[i].RunTime=0;arrayTask[i].status=0;}}intfcfs(){inti,j,w;for(i=0;i<=4;i++){if(arrayTask[i].status==0){t=arrayTask[i].ArriveTime;w=1;}if(w==1){break;}}for(i=0;i<=4;i++){if(arrayTask[i].ArriveTime6、){t=arrayTask[i].ArriveTime;}}for(i=0;i<=4;i++){if(arrayTask[i].ArriveTime==t){returni;}}//选择排序,先找到第一个没有执行的任务,然后再对所有任务遍历,找到到达时间最小的任务,返回该任务,执行之}//函数目的:用先来先服务策略,找到当前需要执行的任务intsjf(){inti,x=0,a=0,b=0;floatg;for(i=0;i<=4;i++){if(arrayTask[i].status==1){g=arrayTask[i].EndTime;x=1;}}if(x=7、=0){t=arrayTask[0].ArriveTime;for(i=0;i<=4;i++){if(arrayTask[i].ArriveTimeg){g=arrayTask[i].EndTime;}}for(i=0;i<=4;i++){if(arrayTask[i].status==0&&arrayTask[i].ArriveTime<=g){t=arrayTask[i].8、RequestTime;a=i;b=1;}}if(b
6、){t=arrayTask[i].ArriveTime;}}for(i=0;i<=4;i++){if(arrayTask[i].ArriveTime==t){returni;}}//选择排序,先找到第一个没有执行的任务,然后再对所有任务遍历,找到到达时间最小的任务,返回该任务,执行之}//函数目的:用先来先服务策略,找到当前需要执行的任务intsjf(){inti,x=0,a=0,b=0;floatg;for(i=0;i<=4;i++){if(arrayTask[i].status==1){g=arrayTask[i].EndTime;x=1;}}if(x=
7、=0){t=arrayTask[0].ArriveTime;for(i=0;i<=4;i++){if(arrayTask[i].ArriveTimeg){g=arrayTask[i].EndTime;}}for(i=0;i<=4;i++){if(arrayTask[i].status==0&&arrayTask[i].ArriveTime<=g){t=arrayTask[i].
8、RequestTime;a=i;b=1;}}if(b
此文档下载收益归作者所有