操作系统作业调度实验报告.docx
《操作系统作业调度实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统作业调度实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
操作系统作业调度实验报告
昆明理工大学信息工程与自动化学院学生实验报告
(2011—2012学年第二学期)
课程名称:
操作系统开课实验室:
信自楼2012年4月10日
年级、专业、班
计科103
学号
201010405318
姓名
李波
成绩
实验项目名称
作业调度
指导教师
舒国锋
教师评语
教师签名:
年月日
一、实验目的
通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。
以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。
二、所用仪器、材料(设备名称、型号、规格等)。
计算机一台,VC++6.0。
三、源程序:
#include
#include
#include"assert.h"
usingnamespacestd;
classJob{
public:
intm_runtime;//作业运行时间
intm_level;//优先级
intm_arrivenum;//作业到达次序
intm_start;//作业开始时间
intm_end;//作业结束时间
Job*m_next;//指向下一个结点
public:
Job()
{
m_next=NULL;
m_runtime=0;
m_level=0;
m_arrivenum=0;
m_start=0;
m_end=0;
}
~Job()
{
}
};
classJobList{
public:
JobList()
{
Head=newJob;
assert(Head);
length=0;
intnum,runtime,level,arrivenum;
Job*pt,*st;
st=Head;
cout<<"请输入作业个数:
";
cin>>num;
while(length{
pt=newJob;
assert(pt);
cout<<"请输入第"<cin>>runtime>>level>>arrivenum;
pt->m_runtime=runtime;
pt->m_level=level;
pt->m_arrivenum=arrivenum;
st->m_next=pt;
st=pt;
length++;
}
}
~JobList()//由于Job类调用自己的析构函数,故而此处不需要操作
{
}
Job*GetHead()
{
returnHead;
}
intGetLength()
{
returnlength;
}
private:
Job*Head;
intlength;
};
voidFCFS(JobListjoblist)
{
inttimetag=0,i=0;
Job*pt;
while(i{
pt=joblist.GetHead()->m_next;//头结点不用
while(pt->m_arrivenum!
=i)
{
pt=pt->m_next;
}
pt->m_start=timetag;
timetag+=pt->m_runtime;
pt->m_end=timetag;
i++;//下一作业
}
intovertime=0;
pt=joblist.GetHead()->m_next;
while(pt!
=NULL)
{
overtime+=(pt->m_end-pt->m_arrivenum);
pt=pt->m_next;
}
cout<<"FCFS的平均作业周转时间为:
"<<(double)overtime/joblist.GetLength()<}
voidSJF(JobListjoblist)
{
inttag,i=0,timetag=0;
Job*pt,*st;
pt=joblist.GetHead()->m_next;
//pt->m_start=timetag;
timetag+=pt->m_runtime;
pt->m_end=timetag;
pt->m_runtime=100;
while(i<(joblist.GetLength()-1))
{
st=pt->m_next;
tag=100;
while(st)//找到最小
{
if(st->m_runtimetag=st->m_runtime;
st=st->m_next;
}
st=pt->m_next;
while(st->m_runtime!
=tag)
st=st->m_next;
st->m_start=timetag;
timetag+=st->m_runtime;
st->m_end=timetag;
st->m_runtime=100;//重新标记
i++;//下一作业
}
intovertime=0;
while(pt)
{
overtime+=(pt->m_end);//-pt->m_arrivenum);
pt=pt->m_next;
}
cout<<"SJF的平均周转时间为:
"<<(double)overtime/joblist.GetLength()<}
voidRR(JobListjoblist)
{
Job*pt;
inttimetag=0,remaintime=0;
booltag=true;
pt=joblist.GetHead()->m_next;
while(pt)
{
remaintime+=pt->m_runtime;
pt=pt->m_next;
}
while(tag)
{
pt=joblist.GetHead()->m_next;
while(pt)
{
if(pt->m_runtime==0)
pt=pt->m_next;
else
{
timetag+=2;
pt->m_runtime-=2;
remaintime-=2;
if(pt->m_runtime<0)//作业结束自行退出
{
pt->m_runtime=0;
timetag--;
}
if(pt->m_runtime==0)
pt->m_end=timetag;
pt=pt->m_next;
}
}
if(remaintime==0)
tag=false;
}
pt=joblist.GetHead()->m_next;
intovertime=0;
while(pt)
{
overtime+=pt->m_end;
pt=pt->m_next;
}
cout<<"RR的平均周转时间为:
"<<(double)overtime/joblist.GetLength()<}
voidHLF(JobListjoblist)//优先级算法
{
inttimetag=0,i=0,leveltag;
Job*pt;
while(i{
leveltag=0;
pt=joblist.GetHead()->m_next;
while(pt)//找到最高优先级别的
{
if(pt->m_level>leveltag)
leveltag=pt->m_level;
pt=pt->m_next;
}
pt=joblist.GetHead()->m_next;
while(pt->m_level!
=leveltag)
{
pt=pt->m_next;
}
pt->m_start=timetag;
timetag+=pt->m_runtime;
pt->m_end=timetag;
pt->m_level=0;
i++;
}
pt=joblist.GetHead()->m_next;
intovertime=0;
while(pt)
{
overtime+=pt->m_end;
pt=pt->m_next;
}
cout<<"HLF的平均作业周转时间为:
"<<(double)overtime/joblist.GetLength()<}
voidmain()
{
intchoice;
cout<<"请选择调度算法"<<cin>>choice;
while(choice!
=0)
{
switch(choice)
{
case1:
{
cout<<"建立作业"<JobListmyjoblist;
FCFS(myjoblist);
break;
}
case2:
{
cout<<"建立作业"<JobListmyjoblist;
HLF(myjoblist);
break;
}
case3:
{
cout<<"建立作业"<JobListmyjoblist;
SJF(myjoblist);
break;
}
case4:
{
cout<<"建立作业"<JobListmyjoblist;
RR(myjoblist);
break;
}
}
cout<<"请选择调度算法"<<cin>>choice;
}
//FCFS(joblist);
//HLF(joblist);
//SJF(joblist);
//RR(joblist);
}
四、程序截图:
五、实验结果、分析和结论(误差分析与数据处理、成果总结等。
其中,绘制曲线图时必须用计算纸)
操作系统是计算机系统中必不可少的系统软件,它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。
操作系统采用时间片法调度进程,使系统资源得到充分利用,用户可以花更少的时间完成过多的工作。
通过本次上机进程管理,对操作系统中的进程管理,整体上有了一定的了解,也对上学期所学的数据结构的知识进行了复习,巩固了基础知识,通过编写进程管理的算法,掌握了整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。
对进程中的PCB的数据结构模拟进程的控制,加深了对课本上的进程概念的理解,虽然有的时候还是错误还是很多,不过经过问老师、同学已经解决,自己编程能力还是很欠缺呢,我会继续好好的编写一些程序,看书,来提高自己的编程水平。