西电操作系统大作业任务调度(附代码).docx

西电操作系统大作业任务调度(附代码).docx

ID:58568616

大小:16.96 KB

页数:18页

时间:2020-10-19

西电操作系统大作业任务调度(附代码).docx_第1页
西电操作系统大作业任务调度(附代码).docx_第2页
西电操作系统大作业任务调度(附代码).docx_第3页
西电操作系统大作业任务调度(附代码).docx_第4页
西电操作系统大作业任务调度(附代码).docx_第5页
资源描述:

《西电操作系统大作业任务调度(附代码).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].ArriveTime

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。