采用静态优先权优先算法的进程调度程序Word文档下载推荐.docx
《采用静态优先权优先算法的进程调度程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《采用静态优先权优先算法的进程调度程序Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
3.2测试用例及运行结果7
第4部分源代码9
第5部分总结及参考文献16
5.1总结16
5.2参考文献17
第1部分课设简介
1.1课程设计题目
1.2课程设计目的
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
1)进一步巩固和复习操作系统的基础知识。
2)培养学生结构化程序、模块化程序设计的方法和能力。
3)提高学生调试程序的技巧和软件设计的能力。
4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
1.3课程设计内容
设计并实现一个采用静态优先权算法的进程调度演示程序
1.4时间安排
1)分析设计贮备阶段(1天)
2)编程调试阶段(7天)
3)写课程设计报告、考核(2天)
第2部分实验原理分析
2.1问题描述
(1)每一个进程有一个PCB,其内容可以根据具体情况设定。
(2)进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定
(3)可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化
(4)可以在运行中显示各进程的状态:
就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态)
(5)采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列
(6)有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间
(7)具有一定的数据容错性
2.2程序设计流程图
2.3解决方法
通过数组容纳所有数据,根据冒泡排序把数据按从小到大顺序排列,在分析a[0]和其他数据的大小,如果a[0]的完成时间大于其他数据就按照冒泡的排列顺序,如果小,就比较其他数据的优先级,按优先级大小排序。
第3部分主要的功能模块
3.1主要的函数
voidfcfs()
{
inti,j,n,min,px;
floatsum1,sum2;
printf("
\t请输入有n个进程(0<
n<
=50):
\t"
);
scanf("
%d"
&
n);
while(n>
50||n<
=0)
{
printf("
n\t请重新输入:
"
scanf("
}
\n\n"
structGzuo{
intid;
//进程名字
intdt;
//到达时刻
intst;
//服务时间
intwct;
//完成时刻
floatzt;
//周转时间
floatdczt;
//带权周转时间
};
Gzuoa[N];
for(i=0;
i<
n;
i++)
a[i].id=i+1;
\t到达时间:
a[i].dt);
\t服务时间:
a[i].st);
\n"
for(j=n-1;
j>
=0;
j--)
{
for(i=0;
j;
{
if(a[i].dt>
a[i+1].dt)
{
min=a[i].dt;
a[i].dt=a[i+1].dt;
a[i+1].dt=min;
min=a[i].st;
a[i].st=a[i+1].st;
a[i+1].st=min;
min=a[i].id;
a[i].id=a[i+1].id;
a[i+1].id=min;
}
}
a[0].wct=a[0].st+a[0].dt;
a[0].zt=(float)a[0].st;
a[0].dczt=a[0].zt/a[0].st;
for(i=1;
if(a[i].dt>
a[i-1].wct)
a[i].wct=a[i].dt+a[i].st;
a[i].zt=(float)a[i].st;
a[i].dczt=a[i].zt/a[i].st;
}
else
a[i].wct=a[i-1].wct+a[i].st;
a[i].zt=(float)(a[i].wct-a[i].dt);
}
3.2测试用例及运行结果
第4部分源代码
#include"
stdio.h"
#defineN50
voidmain()
{voidfcfs();
voidyxj();
inta;
while(true)
\t\t/*************************/"
\n\t\t/*1、先到先服务调度*/"
\n\t\t/*2、优先级优先调度*/"
\n\t\t/*0、退出*/\n"
\n\n\t请选择菜单项:
a);
switch(a)
case1:
fcfs();
break;
case2:
yxj();
default:
break;
if(a<
0&
&
a>
2)break;
}
\t1、按id号依次输出\n"
\t2、按完成顺序依次输出\n"
\n\t请选择输出顺序:
px);
\nid:
到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n"
sum1=0;
sum2=0;
switch(px)
{
for(i=0;
{
printf("
%d:
%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n"
a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);
sum1+=a[i].zt;
sum2+=a[i].dczt;
printf("
\n平均周转时间:
%.2f\n"
sum1/n);
\n平均带权周转时间:
%.2f\n\n"
sum2/n);
break;
for(j=0;
j<
j++)
for(i=0;
if(a[i].id==j+1)
{
printf("
sum1+=a[i].zt;
sum2+=a[i].dczt;
}
voidyxj()
intb=0,z;
\n\t\