操作系统作业调度实验报告.docx

上传人:b****5 文档编号:7432120 上传时间:2023-01-23 格式:DOCX 页数:12 大小:184.28KB
下载 相关 举报
操作系统作业调度实验报告.docx_第1页
第1页 / 共12页
操作系统作业调度实验报告.docx_第2页
第2页 / 共12页
操作系统作业调度实验报告.docx_第3页
第3页 / 共12页
操作系统作业调度实验报告.docx_第4页
第4页 / 共12页
操作系统作业调度实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统作业调度实验报告.docx

《操作系统作业调度实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统作业调度实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统作业调度实验报告.docx

操作系统作业调度实验报告

昆明理工大学信息工程与自动化学院学生实验报告

(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_runtime

tag=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的数据结构模拟进程的控制,加深了对课本上的进程概念的理解,虽然有的时候还是错误还是很多,不过经过问老师、同学已经解决,自己编程能力还是很欠缺呢,我会继续好好的编写一些程序,看书,来提高自己的编程水平。

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1