




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业单处理器任务调度1 需求说明1.1 基本需求目标:本次实验的目标是在Linux环境下实现任务调度仿真,利用多线程实现任务池中的多个任务,支持先来先服务、轮转和反馈三种调度策略,提高对Linux环境下多进程、多线程和单处理器调度等知识的理解。问题描述:设有任务A、B、C、D、E,分别具有不同的优先级和处理时间,通过一个调度线程对这5个任务进行调度。功能需求:正确输出三种调度算法下,任务的执行顺序、每个任务占用CPU的时间以及优先级队列(反馈调度)通过一个调度进程实现任务调
2、度有输出界面,在每个时间点输出任务状态、每个任务已经占用CPU时间(TIMECOUNTER)和还需CPU时间,已经执行的任务顺序(order2)和时间(time)。非功能需求:程序应有较好的容错性(即能对用户输入的命令进行判断,并对错误的命令进行错误处理)过程需求:使用vi进行代码的编写使用make工具建立工程将实现不同类别功能的函数写到不同的.c文件中,并使用makefile链接编译。#include#include#includetypedef struct quenchar pname8;int time1;int time2;char state;struct quen *next;
3、QUEN;float t,d;structint id; float ArriveTime;/到达时间 float ServiceTime;/该进程需要的服务时间float StartTime;/进程真正开始运行时间float EndTime;/进程真正结束时间 float RunTime;/运行的时间float DQRunTime;/相对执行时间实际运行/请求的服务时间int status;/进程状态,是否被运行过arrayTask4;void GetTask(); int fcfs(); int sjf(); void new_n(int s); void Printresult(int
4、j); void cl();void GetTask() int i; float a; for(i = 0; i = 4; i+) arrayTaski.id = i + 1; printf(input the number); printf(input the ArriveTime of arrayTask%d:,i); scanf(%f,&a); arrayTaski.ArriveTime = a; printf(input the RequestTime of arrayTask%d:,i); scanf(%f, &a); arrayTaski.RequestTime = a; arr
5、ayTaski.StartTime = 0; arrayTaski.EndTime = 0; arrayTaski.RunTime = 0; arrayTaski.status = 0; int fcfs() int i,j,w; for(i = 0; i = 4; i+) if(arrayTaski.status = 0) t = arrayTaski.ArriveTime; w = 1; if(w = 1) break; for(i = 0; i = 4; i+) if(arrayTaski.ArriveTime t & arrayTaski.status = 0) t = arrayTa
6、ski.ArriveTime; for(i = 0; i = 4; i+) if(arrayTaski.ArriveTime = t) return i; /选择排序,先找到第一个没有执行的任务,然后再对所有任务遍历,找到到达时间最小的任务,返回该任务,执行之 /函数目的:用先来先服务策略,找到当前需要执行的任务int sjf() int i,x=0,a=0,b=0; float g; for(i=0;i=4;i+) if(arrayTaski.status = 1) g = arrayTaski.EndTime; x = 1; if (x=0) t = arrayTask0.ArriveTi
7、me; for(i=0;i=4;i+) if(arrayTaski.ArriveTime t) t=arrayTaski.ArriveTime; a=i; return a; else for(i = 0; i g) g = arrayTaski.EndTime; for(i = 0; i = 4; i+) if(arrayTaski.status = 0 & arrayTaski.ArriveTime = g) t = arrayTaski.RequestTime; a = i; b = 1; if(b != 0) for(i = 0; i = 4; i+) if(arrayTaski.st
8、atus = 0 & arrayTaski.ArriveTime = g & arrayTaski.RequestTime t) t = arrayTaski.RequestTime; a = i; return a; else for(i = 0; i = 4; i+) if(arrayTaski.status = 0) t = arrayTaski.ArriveTime; for(i = 0; i = 4; i+) if(arrayTaski.status = 0 & arrayTaski.ArriveTime t) t = arrayTaski.ArriveTime; a = i; re
9、turn a; void new_n(int s) int i, g = 0; for(i = 0; i = 4; i+) /查找是否有进程未执行,如果没有,令g=0,如果有,令g=1;if(arrayTaski.status=0) continue; else g=1; break; if(g=0) /当前进程为最后一个进程 arrayTasks.StartTime=arrayTasks.ArriveTime; arrayTasks.EndTime=arrayTasks.RequestTime+arrayTasks.ArriveTime; arrayTasks.RunTime=arrayTa
10、sks.RequestTime; arrayTasks.status=1; g=2; if(g=1) arrayTasks.status=1; /将该进程执行 for(i=0;i=4;i+) if(arrayTaski.status=1) d=arrayTaski.EndTime;/找到一个进程的结束时间 for(i=0;id&arrayTaski.status=1) d=arrayTaski.EndTime; /找到这几个进程的最晚结束时间 if(arrayTasks.ArriveTime0) printf(enter the pname:); scanf(%s,str); printf(e
11、nter the need time:); scanf(%d,&t); head=p=(QUEN*)malloc(sizeof(QUEN); strcpy(p-pname,str); p-time1=t; p-time2=0; p-state=R; p-next=NULL; head=p; getchar(); -d; /建立头结点,并初始化while(d0) printf(enter the pname:); scanf(%s,str); printf(enter need time:); scanf(%d,&t); q=(QUEN *)malloc(sizeof(QUEN); strcpy
12、(q-pname,str); q-time1=t; q-time2=0; q-state=R; q-next=NULL; p-next=q; p=q; -d; p-next=head; q=head; /头插法建立链表printf(process name need time runned staticn); do printf( %s%d %d %cn,q-pname,q-time1,q-time2,q-state); q=q-next; while(q!=head); printf(n); do if(head-time2time1) head-time2+; /基于时间片,一次+操作,就
13、是一次的时间片 if(head-time2=head-time1) head-state=END; q=head; printf(The running process is %sn,q-pname); printf(process name left time runned staticn); doprintf( %s %d %d %cn,q-pname,q-time1,q-time2,q-state); q=q-next; while(q!=head); printf(n);head=head-next; q=head; p-next=head; else printf(The runni
14、ng process is %sn,q-pname); printf(process name left time runned staticn); do printf(%s%d%d%cn,q-pname,q-time1,q-time2,q-state); q=q-next;while(q!=head); printf(n); head=head-next; q=head; p=p-next; printf(Is it needing new process?(y or n)n); getchar(); scanf(%c,&f); if(f=Y|f=y) getchar(); printf(E
15、nter the new pname:); scanf(%s,str); printf(Enter the new neededtime:); scanf(%d,&t); m=(QUEN *)malloc(sizeof(QUEN); strcpy(m-pname,str); m-time1=t; m-time2=0; m-state=R; m-next=NULL; if(q-next-state=E) p=m; head=m;p-next=head; q=head; else p-next=m; m-next=head; p=m; while(q-next-state!=E); printf(
16、The processes are finishedn);int main(void) int i,b,k,c = 0; char a; int d4;/clrscr(); /cls(); printf(t 1. FCFS n); printf(t 2. SFJ n); printf(t 3. EXIT n); printf(t 4. cl n); for(i = 0; ; i+) if(c)break; printf(please input the number a:n); scanf(%d, &a); switch(a) case 3:c = 1;break; case 1:printf
17、(please input the different-Arrive Time of arrayTasksn);GetTask(); printf(*the result of fcfsn); printf(NumbertArrivetServertStarttFinishtTurnovetTake power turnover timen); for(b = 0; b = 4; b+) k = fcfs(); db = k; new_n(k); for(b = 0; b = 4; b+) Printresult(db); continue; case 2:printf(please input the different-RequestTime of arrayTasksn); GetTask(); printf(*th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市配送与物流配送环节的个性化服务考核试卷
- 机床附件的供应链优化与成本控制考核试卷
- D打印技术在个性化鞋类设计的应用考核试卷
- 城市规划城市水资源配置考核试卷
- 未来的数字化电影产业考核试卷
- 在家工作租房合同范本
- 代加工药品合同范本
- 工程承包服务合同范本
- 酒店客房服务操作流程制度
- 电力行业电力设备维修合同及免责条款
- 心源性休克护理
- 法律尽职调查
- 2024年山东省公务员考试《行测》真题及答案解析
- 凝固点降低获奖课件
- 化工原理Ⅱ学习通超星期末考试答案章节答案2024年
- 基因家族分析
- 手机以旧换新活动方案
- 高中英语牛津译林版(2020)中国文化+素材
- 施工便道施工方案三工区纵向便道施工方案
- 2024年河南省高考对口升学语文英语试题
- 2024年水利安全员(B证)考试题库-上(单选题)
评论
0/150
提交评论