任务调度 实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大作业三任务调度

姓名:

学号:

班级:

日期:2015年7月

1 需求说明

本次实验的目标是在Linux环境下实现任务调度仿真,利用多线程实现任务池中的多个任务,支持先来先服务、轮转和反馈三种调度策略,提高对Linux环境下多进程、多线程和单处理器调度等知识的理解。

2 设计说明

设有任务A、B、C、D、E,分别具有不同的优先级和处理时间,通过一个调度线程对这5个任务进行调度。

2.1 结构设计

将先来先服务与优先级队列用结构体数组进行设计,对到达时间、运行时间结束时间进行相关的调度与修改

将时间片轮转用循环队列来表示,使五种不同任务不断的论寻,直至运行结束。

2.2 功能设计

●正确输出三种调度算法下,任务的执行顺序、每个任务占用CPU的时间以及优先

级队列(反馈调度)

●通过一个调度进程实现任务调度

●有输出界面,在每个时间点输出任务状态、每个任务已经占用CPU

时间和还需CPU时间,已经执行的任务顺序和时间。

3 测试和使用说明

3.1 使用说明

3.2 测试说明

4 程序清单

[cpp] view plaincopy

OBJS=main.o fcfs_sjf.o cl.o

a.out:$(OBJS) common.h

gcc $(OBJS) -o a.out main.o:main.c common.h

gcc -c main.c

fcfs_sjf.o:fcfs_sjf.c common.h

gcc -c fcfs_sjf.c

cl.o:cl.c common.h

gcc -c cl.c

common.h

#include

#include"stdio.h"

#include"string.h"

#define NULL0

/*定义结构*/

typedef struct quen

{

char pname[8];

int time1;

int time2;

char state;

struct quen*next; }QUEN;

float t,d;

struct{

int id;

float ArriveTime;

float RequestTime;

float StartTime;

float EndTime;

float RunTime;

float DQRunTime;

int status;

}arrayTask[4];

void GetTask();

nt fcfs();

int sjf();

void new_n(int s);

void Printresult(int j);

void cl();

fcfs_sjf.c

void GetTask()

{

int i;

float a;

for(i=0;i<=4;i++)

{

arrayTask[i].id=i+1;

printf("input the number");

printf("input the ArriveTime of arrayTask[%d]:",i);

scanf("%f",&a);

arrayTask[i].ArriveTime=a;

printf("input the RequestTime of arrayTask[%d]:",i);

scanf("%f",&a);

arrayTask[i].RequestTime=a;

arrayTask[i].StartTime=0;

arrayTask[i].EndTime=0;

arrayTask[i].RunTime=0;

arrayTask[i].status=0;

}

}

/*定义FCFS中寻找未执行的进程的最先到达时间*/

int fcfs()

{

int i,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

{

t=arrayTask[i].ArriveTime;

}

}

for(i=0;i<=4;i++)/*返回最小到达时间的数组的下标*/

{

if(arrayTask[i].ArriveTime==t)

{

return i;

}

}

}

//最短作业优先算法SJF

int sjf()/*定义FCFS中寻找未执行的进程的最先到达时间*/

{

int i,x=0,a=0,b=0;/*判断是不是第一个执行的进程*/

float g;

for(i=0;i<=4;i++)

{

if(arrayTask[i].status==1)

相关文档
最新文档