收藏 分享(赏)

采用静态优先权优先算法的进程调度程序.doc

上传人:cjc2202537 文档编号:6545852 上传时间:2019-04-16 格式:DOC 页数:19 大小:575.50KB
下载 相关 举报
采用静态优先权优先算法的进程调度程序.doc_第1页
第1页 / 共19页
采用静态优先权优先算法的进程调度程序.doc_第2页
第2页 / 共19页
采用静态优先权优先算法的进程调度程序.doc_第3页
第3页 / 共19页
采用静态优先权优先算法的进程调度程序.doc_第4页
第4页 / 共19页
采用静态优先权优先算法的进程调度程序.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、 采用静态优先权优先算法的进程调度程序学 号: 姓 名: 专 业: 指导教师: 日 期: 目 录第 1 部分 课设简介 .31.1 课程设计题目 .31.2 课程设计目的 .31.3 课程设计内容 .31.4 时间安排 .3第 2 部分 实验原理分析 .32.1 问题描述 32.2 解决方法 4第 3 部分 主要的功能模块 .53.1 主要的函数 53.2 测试用例及运行结果 .7第 4 部分 源代码 .9第 5 部分 总结及参考文献 165.1 总结 165.2 参考文献 .17第 1 部分 课设简介1.1 课程设计题目采用静态优先权优先算法的进程调度程序1.2 课程设计目的操作系统课程设计

2、是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。1)进一步巩固和复习操作系统的基础知识。2)培养学生结构化程序、模块化程序设计的方法和能力。3)提高学生调试程序的技巧和软件设计的能力。4)提高学生分析问题、解决问题以及综合利用 C 语言进行程序设计的能力。1.3 课程设计内容设计并实现一个采用静态优先权算法的进程调度演示程序1.4 时间安排1)分析设计贮备阶段 (1 天)2)编程调试阶段 (7 天)3)写课程设计报告、考核(2 天)第 2 部分 实验原理分析2.1 问题描述(1)每一个进程有一个 PCB,其内容可

3、以根据具体情况设定。 (2)进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定 (3)可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化 (4)可以在运行中显示各进程的状态:就绪、执行 (由于不要求设置互斥资源与进程间的同步关系,故只有两种状态) (5)采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列 (6)有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间 (7)具有一定的数据容错性2.2 程序设计流程图2.3 解决方法通过数组容纳所有数据,根据冒泡排序把数据按从小到大顺序排列,

4、在分析 a0和其他数据的大小,如果 a0的完成时间大于其他数据就按照冒泡的排列顺序,如果小,就比较其他数据的优先级,按优先级大小排序。第 3 部分 主要的功能模块3.1 主要的函数void fcfs()int i,j,n,min,px;float sum1,sum2;printf(“t 请输入有 n 个进程(050|n=0;j-) for(i=0;iai+1.dt) min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; a0.wc

5、t=a0.st+a0.dt;a0.zt=(float)a0.st;a0.dczt=a0.zt/a0.st;for(i=1;iai-1.wct)ai.wct=ai.dt+ai.st;ai.zt=(float)ai.st;ai.dczt=ai.zt/ai.st;elseai.wct=ai-1.wct+ai.st;ai.zt=(float)(ai.wct-ai.dt);ai.dczt=ai.zt/ai.st; 3.2 测试用例及运行结果第 4 部分 源代码#include“stdio.h“#define N 50void main() void fcfs();void yxj();int a;whi

6、le(true)printf(“nn“);printf(“tt/*/“);printf(“ntt/* 1、先到先服务 调 度 */“);printf(“ntt/* 2、优先级优先 调 度 */“);printf(“ntt/* 0、 退 出 */n“);printf(“tt/*/“);printf(“nnt 请选择菜单项:t“);scanf(“%d“,printf(“n“);switch(a)case 1: fcfs();break;case 2: yxj();break;default: break;if(a2) break;void fcfs()int i,j,n,min,px;float

7、sum1,sum2;printf(“t 请输入有 n 个进程(050|n=0;j-) for(i=0;iai+1.dt) min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; a0.wct=a0.st+a0.dt;a0.zt=(float)a0.st;a0.dczt=a0.zt/a0.st;for(i=1;iai-1.wct)ai.wct=ai.dt+ai.st;ai.zt=(float)ai.st;ai.dczt=ai.zt/a

8、i.st;elseai.wct=ai-1.wct+ai.st;ai.zt=(float)(ai.wct-ai.dt);ai.dczt=ai.zt/ai.st; printf(“t1、按 id 号依次输出n“);printf(“t2、按完成顺序依次输出n“);printf(“nt 请选择输出顺序:t“);scanf(“%d“,printf(“nid:到达时间t 服务时间t 完成时间t 周转时间t 带权周转时间n“);sum1=0;sum2=0;switch(px)case 2: for(i=0;i50|n=0;j-) for(i=0;iai+1.dt) min=ai.dt;ai.dt=ai+1.

9、dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min;min=ai.yxj;ai.yxj=ai+1.yxj;ai+1.yxj=min;if(ai.dt=ai+1.dtelse b+;for(j=b-1;j=1;j-) for(i=1;iai-1.wct)ai.wct=ai.dt+ai.st;ai.zt=(float)ai.st;ai.dczt=ai.zt/ai.st;elseai.wct=ai-1.wct+ai.st;ai.zt=(float)(ai.wct-ai.dt);

10、ai.dczt=ai.zt/ai.st; for(j=i+1,b=j;jai.wct) ;else b=b+1;for(j=b-1;j=i;j-) for(z=i;zj;z+)if(az.yxjaz+1.yxj) min=az.dt;az.dt=az+1.dt;az+1.dt=min;min=az.st;az.st=az+1.st;az+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; printf(“nt 请选择输出顺序n“);printf(“t1、按 id 号依次输出n“);printf(“t2、按完成顺序依次输出n“);scanf(“%d“,p

11、rintf(“nid:到达时间t 服务时间t 优先级t 完成时间t 周转时间t 带权周转时间n“);sum1=0;sum2=0;switch(px)case 2: for(i=0;in;i+) printf(“%d: %dtt%dtt%dtt%dtt%.0ftt%.2fn“,ai.id,ai.dt,ai.yxj,ai.st,ai.wct,ai.zt,ai.dczt);sum1+=ai.zt;sum2+=ai.dczt;printf(“n 平均周转时间: %.2fn“,sum1/n);printf(“n 平均带权周转时间: %.2fnn“,sum2/n);break;case 1: for(j=

12、0;jn;j+) for(i=0;in;i+)if(ai.id=j+1)printf(“%d: %dtt%dtt%dtt%dtt%.0ftt%.2fn“,ai.id,ai.dt,ai.yxj,ai.st,ai.wct,ai.zt,ai.dczt);sum1+=ai.zt;sum2+=ai.dczt;printf(“n 平均周转时间: %.2fn“,sum1/n);printf(“n 平均带权周转时间: %.2fnn“,sum2/n);break; default: break;第 5 部分 总结及参考文献5.1 总结1)多线程编程对于解决一些并发性的问题是很高效的,而且也很必要,现在学会了使用

13、多线程编程,对于以后解决类似的并发性问题(例如网络编程中经常遇到的多客户线程同时访问的问题) ,都会很有用。2)虽然我们学习的操作系统理论课里面说多线程间的执行顺序具有随机性和不确定性,但我们毕竟是在一个特定的操作系统平台上实验,Windows 的线程调度机制我是不得而知的,所以出现的一些奇怪的问题也很难调试,只好人为地去5.2 参考文献1)宗大华,宗涛,陈吉人著 操作系统 北京:人民邮电出版社,20092)李爱华,程磊著 面相对象程序设计(C+语言) 北京: 清华大学出版社,20103)宋晓宇 , windows 操作系统核心编程实验教程 中国铁道出版社4)张丽芬 刘利雄 王金玉编著 操作系统实验教程 清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 数据结构与算法

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报