综合性实验模板.docx
- 文档编号:9488496
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:16
- 大小:209.79KB
综合性实验模板.docx
《综合性实验模板.docx》由会员分享,可在线阅读,更多相关《综合性实验模板.docx(16页珍藏版)》请在冰点文库上搜索。
综合性实验模板
华北科技学院计算机系综合性实验
实验报告
课程名称操作系统C
实验学期至学年第学期
学生所在院部计算机学院
年级专业班级
学生姓名学号
任课教师
实验成绩
计算机系制
《操作系统》课程综合性实验报告
开课实验室:
基础五机房2014年11月25日
实验题目
进程调度算法模拟
一、实验目的
通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。
二、设备与环境
PC机一台,VisualC++6.0
三、实验内容及要求
(1)用C语言编程实现对5个进程采用动态优先权调度算法进行调度的过程。
数据如下:
5个进程的到达时刻和服务时间见下表,忽略I/O以及其它开销时间,使用动态优先权算法进行调度,优先权初始值为100,请输出各个进程的完成时刻、周转时间、带权周转时间。
进程
到达时刻
服务时间
A
0
3
B
2
6
C
4
4
D
6
5
E
8
2
(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段。
✧进程标识数ID。
✧进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。
✧进程已占用CPU时间CPUTIME。
✧进程还需占用的CPU时间ALLTIME。
当进程运行完毕时,ALLTIME变为0。
✧进程状态STATE。
✧队列指针NEXT,用来将PCB排成队列。
✧其它。
(3)优先数改变的原则:
✧进程在就绪队列中呆一个时间片,优先数增加1。
✧进程每运行一个时间片,优先数减3。
(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。
(5)分析程序运行的结果。
四、实验结果及分析
1.实验代码
#include
#include
#include
structpro
{
intID_1;//进程标识符
intID;//进程标识符
intPRIORITY;//优先权
intCPUTIME;//进程已占用CPU的时间
intALLTIME;//进程还需占用的CPU时间ALLTIME
intFinshtime;//完成时刻
intarrive;//到达时间
intruntine;//周转时间
doubleavgtime;//带权周转时间
char*STATE;//队列的状态
}
p[5]={
{0,'A',100,0,3,0,0,0,0,"READY"},//ready:
就绪状态
{1,'B',100,0,6,2,2,0,0,"null"},
{2,'C',100,0,4,4,4,0,0,"null"},
{3,'D',100,0,5,6,6,0,0,"null"},
{4,'E',100,0,2,8,8,0,0,"null"}
};
inttime=0;
//输出函数
voidPrint()
{
printf("================================================================================");
printf("ID%-10C%-10C%-10C%-10C%-10C\n",p[0].ID,p[1].ID,p[2].ID,p[3].ID,p[4].ID);
printf("优先权%-10d%-10d%-10d%-10d%-10d\n",p[0].PRIORITY,p[1].PRIORITY,p[2].PRIORITY,p[3].PRIORITY,p[4].PRIORITY);
printf("进程已占用CPU时间%-10d%-10d%-10d%-10d%-10d\n",p[0].CPUTIME,p[1].CPUTIME,p[2].CPUTIME,p[3].CPUTIME,p[4].CPUTIME);
printf("进程还需占用的CPU时间%-10d%-10d%-10d%-10d%-10d\n",p[0].ALLTIME,p[1].ALLTIME,p[2].ALLTIME,p[3].ALLTIME,p[4].ALLTIME);
printf("进程的到达时间%-10d%-10d%-10d%-10d%-10d\n",p[0].arrive,p[1].arrive,p[2].arrive,p[3].arrive,p[4].arrive);
//printf("进程等待的时间%-10d%-10d%-10d%-10d%-10d\n",p[0].waittine,p[1].waittine,p[2].waittine,p[3].waittine,p[4].waittine);
//printf("进程完成时刻%-10d%-10d%-10d%-10d%-10d\n",p[0].Finshtime,p[1].Finshtime,p[2].Finshtime,p[3].Finshtime,p[4].Finshtime);
printf("STATE%-10s%-10s%-10s%-10s%-10s\n",p[0].STATE,p[1].STATE,p[2].STATE,p[3].STATE,p[4].STATE);
}
voidrun()
{
inti;
for(i=0;i<5;i++)
{
p[i].runtine=p[i].Finshtime-p[i].arrive;
p[i].avgtime=((double)(p[i].runtine))/((double)(p[i].CPUTIME));
}
printf("================================================================================");
printf("ID%-10C%-10C%-10C%-10C%-10C\n",p[0].ID,p[1].ID,p[2].ID,p[3].ID,p[4].ID);
printf("进程完成时刻%-10d%-10d%-10d%-10d%-10d\n",p[0].Finshtime,p[1].Finshtime,p[2].Finshtime,p[3].Finshtime,p[4].Finshtime);
printf("周转时间%-10d%-10d%-10d%-10d%-10d\n",p[0].runtine,p[1].runtine,p[2].runtine,p[3].runtine,p[4].runtine);
printf("带权周转时间%10.3f%10.3f%10.3f%10.3f%10.3f\n",p[0].avgtime,p[1].avgtime,p[2].avgtime,p[3].avgtime,p[4].avgtime);
}
voidjudge()
{
inti;
for(i=0;i<5;i++)
{
if(p[i].ALLTIME!
=0&&time>=p[i].arrive)
{
p[i].STATE="READY";
}
else
{
if(p[i].ALLTIME==0)
{
p[i].STATE="END";
}
}
}
}
voidjudge_1()
{
inti;
for(i=0;i<5;i++)
{
if(p[i].Finshtime==20)
{
p[i].STATE="END";
}
}
}
intfind()
{
inti;
intmax=0;
intid=0;
for(i=0;i<5;i++)
{
if(p[i].STATE=="READY"&&p[i].PRIORITY>max)//如果进程已经就绪,并且优先权>max
{
id=i;
max=p[i].PRIORITY;
}
}
returnid;
}
voidmain()
{
inti,j;
intmaxid=-1;
Print();//调用输出函数
printf("按enter键继续……\n");
getchar();
for(j=0;j<20;j++)
{
judge();
maxid=find();//寻找优先数最高用例
for(i=0;i<5;i++)//进程在就绪队列中呆一个时间片,优先数增加1
{
if(i==maxid)
{
p[i].PRIORITY=p[i].PRIORITY-3;//进程每运行一个时间片,优先数减3。
p[i].ALLTIME--;
p[i].CPUTIME++;
p[i].Finshtime++;
}
elseif(p[i].ALLTIME>=0&&p[i].STATE=="READY")
{
p[i].PRIORITY++;
p[i].Finshtime++;
}
}
judge_1();
Print();
printf("进程进行当前时间片:
%d\n",time+1);
printf("RUNNINGPROG:
%c\n",p[maxid].ID);
time++;
printf("按enter键继续……\n");
getchar();
}
run();
}
2.实验结果
3.实验结果分析
本程序采用动态优先权的进程调度算法,初始化一定的初始值,然后每按一下回车键执行一步,实行了逐步进行的要求。
当优先权的相同时,采用先来先服务算法,最先进入等待队列的进程获得CPU,进程还需要CPU时间为0是,进程的状态变为END,最后根据公式算出各个进程的完成时刻、周转时间、带权周转时间并输出。
4.实验心得
本次实验利用C语言对动态优先权的进程调度算法进行了设计和模拟实现。
并充分考虑了进程在执行过程中可能发生的多种情况,更好的体现了进程的就绪态、执行态、阻塞态三者之间的关系以及相互的转换。
程序的运行过程清晰的体现了动态优先权的调度算法的执行过程,有利于加深对算法的理解和掌握。
由于抢占式调度算法与硬件密切相关,由软件实现非常困难,所以本程序实现的是非抢占式的动态优先权进程调度算法。
教师评价
评定项目
A
B
C
D
评定项目
A
B
C
D
算法正确
界面美观,布局合理
程序结构合理
操作熟练
语法、语义正确
解析完整
实验结果正确
文字流畅
报告规范
题解正确
其他:
评价教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合性 实验 模板