进程调度模拟设计先来先服务优先级法.docx
- 文档编号:29813801
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:29
- 大小:155.29KB
进程调度模拟设计先来先服务优先级法.docx
《进程调度模拟设计先来先服务优先级法.docx》由会员分享,可在线阅读,更多相关《进程调度模拟设计先来先服务优先级法.docx(29页珍藏版)》请在冰豆网上搜索。
进程调度模拟设计先来先服务优先级法
学号:
012091034002
课程设计
题目
进程调度模拟设计——先来先服务、优先级法
学院
计算机科学与技术学院
专业
计算机科学与技术专业
班级
计算机009班
姓名
永
指导教师
汪祥莉
2012
年
01
月
13
日
目录
课程设计任务书......................................................................................................2
1.需求分析...............................................................................................................3
1.1设计目的...............................................................................................................................3
1.2设计要求...............................................................................................................................3
2.功能设计...............................................................................................................3
2.1数据结构.....................................................................................................3
2.2先来先服务算法设计...........................................................................................................4
2.2.1先来先服务算法的定义及说明......................................................................................4
2.3优先级算法的设计...............................................................................................................6
2.3.1优先级算法的定义及说明..............................................................................................6
2.3.2优先级进程调度及实现过程...........................................................................................6
2.3.3优先级调度流程图..........................................................................................................10
2.4进程参数的输入...................................................................................................................11
2.5调度结果的输出...................................................................................................................12
3.源程序的主要部分..............................................................................................12
4.程序测试..............................................................................................................14
4.1先来先服务测试用例...........................................................................................................14
4.2先来先服务运行结果...........................................................................................................15
4.3优先级算法测试用例...........................................................................................................15
4.4优先级算法运行结果...........................................................................................................16
5.程序流程图..........................................................................................................17
6.自我评价与总结..................................................................................................18
7.源程序清单..........................................................................................................19
课程设计任务书
学生姓名:
永专业班级:
计算机0909班
指导教师:
汪祥莉工作单位:
计算机科学与技术学院
题目:
进程调度模拟设计——先来先服务、优先级法
初始条件:
1.预备内容:
阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
2.实践准备:
掌握一种计算机高级语言的使用。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.模拟进程调度,能够处理以下的情形:
⑴能够选择不同的调度算法(要求中给出的调度算法);
⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;
⑶根据选择的调度算法显示进程调度队列;
⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.设计报告内容应说明:
⑴课程设计目的与功能;
⑵需求分析,数据结构或模块说明(功能与框图);
⑶源程序的主要部分;
⑷测试用例,运行结果与运行情况分析;
⑸自我评价与总结:
)你认为你完成的设计哪些地方做得比较好或比较出色;
)什么地方做得不太好,以后如何改正;
)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);
)完成本题是否有其他方法(如果有,简要说明该方法);
)对实验题的评价和改进意见,请你推荐设计题目。
时间安排:
设计安排一周:
周1、周2:
完成程序分析及设计。
周2、周3:
完成程序调试及测试。
周4、周5:
验收、撰写课程设计报告。
(注意事项:
严禁抄袭,一旦发现,抄与被抄的一律按0分记)
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
进程调度模拟设计
——先来先服务、优先级法
1.需求分析
1.1设计目的
(1)阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
(2)掌握一种计算机高级语言的使用。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.2设计要求
(1)能够选择不同的调度算法(要求中给出的调度算法);
(2)能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;
(3)根据选择的调度算法显示进程调度队列;
(4)根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.功能设计
2.1数据结构
1.进程的结构定义:
structProcess//定义进程控制块
{charname[10];//进程名
intpriority;//进程优先级
floatarive;//进程到达时间
floatrun;//进程运行时间
floatfinish;//进程完成时间
floatzz;//进程周转时间
floatdqzz;//进程带权周转时间
boolrun_flag;//进程是否运行标志
}
2.2先来先服务算法设计
2.2.1先来先服务算法的定义及说明
将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理,是一种最普遍和最简单的方法。
在该算法中,每个作业或进程按照它们在队列中等待时间长短来决定它们是否优先享受服务。
在没有特殊理由要优先调度某类作业或进程时,从处理的角度来看,FCFS方式是一种最合适的方法,因为无论是追加还是取出一个队列元素在操作上都是最简单的。
2.2.2进程调度及实现过程
voidfcfs(Processpro[],intk)//先来先服务法
{
for(inti=0;i<=k-2;i++)
{
intmin=i;
for(intj=i+1;j { if(pro[j].arive { min=j; } } ProcesstmpPrp; memcpy(&tmpPrp,&pro[i],sizeof(Process)); memcpy(&pro[i],&pro[min],sizeof(Process)); memcpy(&pro[min],&tmpPrp,sizeof(Process)); } intn; cout<<"进程调度顺序为: "; for(n=0;n<=k-1;n++) cout< cout< pro[0].finish=pro[0].arive+pro[0].run; pro[0].zz=pro[0].finish-pro[0].arive; pro[0].dqzz=pro[0].zz/pro[0].run; for(n=1;n<=k;n++) { pro[n].finish=pro[n].run+pro[n-1].finish; pro[n].zz=pro[n].finish-pro[n].arive; } floataveragezz,averagedqzz; averagezz=0; averagedqzz=0; for(n=0;n<=k-1;n++) {averagezz+=pro[n].zz; } averagezz=averagezz/k; cout<<"平均周转时间为: "< for(n=0;n<=k-1;n++) { pro[n].dqzz=pro[n].zz/pro[n].run; averagedqzz+=pro[n].dqzz; } averagedqzz=averagedqzz/k; cout<<"带权平均周转时间为: "< } 2.3优先级算法的设计 2.3.1优先级算法的定义及说明 优先级法可被用作作业或进程的调度策略。 首先,系统或用户按某种原则为作业或进程指定一个优先级来表示该作业或进程所享有的调度优先权。 该算法的核心是确定进程或作业的优先级。 确定优先级的方法可分为两类。 即动态法和静态法静态法根据作业或进程的静态特性,在作业或进程开始执行之前就确定它们的优先级,一旦开始执行之后就不能改变。 动态法则不然,它把作业或进程的静态特性和动态特性结合起来确定作业或进程的优先级,随着作业或进程的执行过程,其优先级不断变化。 静态优先级中,可以由用户自己根据作业的紧急程度输入一个适当的优先级,为防止各用户都将自己的作业冠以高优先级,系统应对高优先级用户收取较高的费用;也可以由系统或操作员根据作业类型指定优先级。 动态优先级中,基于静态优先级的调度算法实现简单,系统开销小,但由于静态优先级一旦确定之后,直到执行结束为止始终保持不变,从而系统效率较低,调度性能不高。 现在的操作系统中,如果使用优先级调度的话,则大多采用动态优先级的调度策略。 2.3.2优先级进程调度及实现过程 首先是判定优先级并返回在进程表中索引 intFindShouldBeRun(Processpro[],intn)//判定优先级并返回在进程表中索引 { intindex=-1; for(inti=0;i { if(pro[i].arive<=finish&&pro[i].run_flag==false) { index=i; if(i { for(i=i+1;i<=n-1;i++) { if(pro[i].arive<=finish&&pro[i].priority >pro[index].priority&&pro[i].run_flag==false) { index=i; } } returnindex; } returnindex; } } returnindex; } 然后是进行优先级调度 voidpri(Processpro[],intn)//优先级法 { inti,j; intmin=0;//找出提交时间最早的与第一个交换数据 for(i=1;i { if(pro[i].arive { min=i; } } ProcesstmpPrp; memcpy(&tmpPrp,&pro[0],sizeof(Process)); memcpy(&pro[0],&pro[min],sizeof(Process)); memcpy(&pro[min],&tmpPrp,sizeof(Process)); cout<<"进程调度顺序为: "; cout< pro[0].finish=pro[0].arive+pro[0].run; pro[0].zz=pro[0].finish-pro[0].arive; pro[0].dqzz=pro[0].zz/pro[0].run; pro[0].run_flag=true; finish=pro[0].finish; for(i=1;i<=n-1;i++) { intindex=FindShouldBeRun(pro,n); if(index==-1) { cout<<"ERROR"< return; } cout< pro[index].run_flag=true; pro[index].finish=finish+pro[index].run; pro[index].zz=pro[index].finish-pro[index].arive; pro[index].dqzz=pro[index].zz/pro[index].run; finish+=pro[index].run; } floatzzTime=0.0f; floatdqzzTime=0.0f; for(j=0;j { zzTime+=pro[j].zz; dqzzTime+=pro[j].dqzz; } zzTime/=n; dqzzTime/=n; cout<<"平均周转时间: "< cout<<"平均带全周转时间: "< return; } 2.3.3优先级调度流程图 是 否 是 否 2.4进程参数的输入 该过程主要完成各数据的输入,包括进程个数、各进程的名称、各进程的到达时间,各进程的运行时间和各进程的优先级,以及完成初始化各数据。 intpinput() { inti; printf("请输入进程个数: "); scanf("%d",&counter); printf("请输入各进程名称: "); for(i=0;i scanf("%s",tasks[i].name); printf("请输入各进程的到达时间: "); for(i=0;i scanf("%f",&tasks[i].come_time); printf("请输入各进程的运行时间: "); for(i=0;i scanf("%f",&tasks[i].run_time); printf("请输入各进程的优先级: "); for(i=0;i scanf("%d",&tasks[i].priority); for(i=0;i { pro[i].arive=0; pro[i].finish=0; pro[i].order=0; t[i].run_flag=0; } return0; } 2.5调度结果的输出 该过程主要完成各数据的输出,包括进程名、到达时间、运行时间、优先级、执行顺序,以及将结果显示在界面上。 voidprint(Processpro[],intn)//显示进程 { for(inti=0;i<=n-1;i++) { cout<<"进程"< "< cout<<"进程"< "< cout<<"进程"< "< cout<<"进程"< "< } } 3.源程序的主要部分 主程序主要完成调用各个函数完成相应的功能,以及选择调度算法的输出提示,根据提示并完成相应的算法实现过程。 intmain() { while(true) { inti,j; intn; cout<<"请输入进程个数: "; cin>>n; Process*pro=newProcess[n]; for(i=0;i { memset(&pro[i],0,sizeof(Process)); } cout<<"请输入进程名: "; for(i=0;i<=n-1;i++) cin>>pro[i].name; cout<<"请输入进程优先级: "; for(i=0;i<=n-1;i++) cin>>pro[i].priority; cout<<"请输入各进程到达时间: "; for(i=0;i<=n-1;i++) cin>>pro[i].arive; cout<<"请输入各进程运行时间: "; for(i=0;i<=n-1;i++) cin>>pro[i].run; cout<<"请选择您要使用的进程调度算法"< cout<<"1.先来先服务法: "< cout<<"2.优先级法: "< cout<<"其他.退出: "< cin>>j; if(j==1) {print(pro,n); fcfs(pro,n); } elseif(j==2) {print(pro,n); pri(pro,n); } else { return0; } } } 4.程序测试 4.1先来先服务测试用例 进程序号 进程名称 到达时间 执行时间 1 a 0 4 2 b 1 3 3 c 2 2 4 d 3 3 4.2先来先服务运行结果 4.3优先级算法测试用例 进程序号 进程名称 优先级 到达时间 执行时间 1 a 1 0 4 2 b 4 1 6 3 c 2 2 4 4 d 3 3 5 4.4优先级算法运行结果 5.程序流程图 执行完执行完 6.自我评价与总结 本次课程设计的内容基本上是老师在课堂上所讲的,所以我还是比较熟悉先来先服务算法和优先级算法。 看到这个题目时,我还是感觉相当轻松的,因为我还是比较熟悉该内容,比较熟悉算法思想。 设计过程中要注意流程的条理清晰,易于读懂和规划,程序编写完成以后,实现了预期的效果,达到了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 调度 模拟 设计 先来先 服务 优先级