进程调度算法模拟实验报告.docx
- 文档编号:26729498
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:6
- 大小:17.22KB
进程调度算法模拟实验报告.docx
《进程调度算法模拟实验报告.docx》由会员分享,可在线阅读,更多相关《进程调度算法模拟实验报告.docx(6页珍藏版)》请在冰豆网上搜索。
进程调度算法模拟实验报告
竭诚为您提供优质文档/双击可除
进程调度算法模拟实验报告
篇一:
操作系统进程调度算法模拟实验报告
进程调度算法模拟
专业:
xxxxx学号:
xxxxx姓名:
xxx
实验日期:
20xx年xx月xx日
一、实验目的
通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。
二、实验要求
编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算
法分别进行模拟调度。
三、实验方法内容
1.算法设计思路
将每个进程抽象成一个控制块pcb,pcb用一个结构体描述。
构建一个进程调度类。
将进程调度的各种算法分装在一个类中。
类中存
在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。
还有一个pcb实例。
主要保存正在运行的进程。
类中其他方法都是围绕这三个容器可以这个运行中的pcb展开。
主要用到的技术是sTL中的vector以维护和保存进程容器、就绪容器、
完成容器。
当程序启动时,用户可以选择不同的调度算法。
然后用户从控制台输入
各个进程的信息,这些信息保存到进程容器中。
进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。
判断进程容器中是否有新的进程可以加入就绪队列。
2.算法流程图主程序的框架:
();//先来先服务
();//最短进程优先调度//简单时间片轮转//最高优先数优先//输入进程信息
();.m_waitQueue.empty()||.m_processQueue.empt()
();
();
进程调度过程:
;
3.算法中用到的数据结构
structfcfs{//先来先服务算法从这里开始charname[10];floatarrivetime;floatservicetime;floatstarttime;floatfinishtime;floatzztime;floatdqzztime;
};//定义一个结构体,里面包含的有一个进程相关的信息
4.主要的常量变量
vector m_processQueue;//进程输入队列
vector m_waitQueue;//进程就绪队列vector m_FinishQueue;//完成队列vect(:
进程调度算法模拟实验报告)or :
:
iteratorm_iter;//迭代器pcbm_runprocess;//运行中的进程
intm_processcount;//进程数floatm_RunTime;//运行时间
intm_tagIsRun;//是否在运行标志。
表示正在运行,表示没有floatm_Timeslice;//时间片大小
intm_Timeslicecount;//指时间片轮转中一次分到的时间片个数charm_schedulerAlgorithm;//调度算法
5.主要模块
voidpcbInput();//输入进程信息
voidpcbsort();//对进程控制块按照优先级排序(采用冒泡排序)
voidprocessselect();//若当前就绪队列不为空则根据选择的调度算法开始调度。
否则,系统时间voidpcbDisplay();//打印当前状况下。
就绪队列、完成队列、运行中的进程信息
voidprocessRun();//进程运行一次。
运行时间加个时间片。
并判断进程是否达到完成条件。
若是则voidprocessQueueprocess();//查看当前时间下,有无进程加入。
若有则把该进程调入就绪队列voidprocessDispatch();//进程分派,进程执行完成后决定进程该进入哪个队列(就绪、完成)voidTimepast(){m_RunTime+=m_Timeslice;processQueueprocess();}//当前系统时间加个时间voidschedulerstatistics();//调度统计,计算周转时间等voidFcFs();//先来先服务voidsJF();//最短进程优先调度voidRR();//简单时间片轮转voidpD();//最高优先数优先
加.以等待新的进程到来
processstatus=f.否则为w;
片,并检查是否有新的进程加入
四、实验代码
#include#include#include
usingnamespacestd;
structfcfs{//先来先服务算法从这里开始charname[10];floatarrivetime;floatservicetime;floatstarttime;floatfinishtime;floatzztime;floatdqzztime;
};//定义一个结构体,里面包含的有一个进程相关的信息
fcfsa[100];
voidinput(fcfs*p,intn){inti;
cout for(i=0;i }}
voidprint(fcfs*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intn)
{intk;
printf("\n\n调用先来先服务算法以后进程运行的顺序是:
");printf("%s",p[0].name);for(k=1;k%s",p[k].name);}
cout printf("\t进程名到达时间服务时间开始时间结束时间周转时间带权周转时间\n");
for(k=0;k printf("\t%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\n",p[k].name,p[k].arrivetime,
p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);
}
getchar();//此处必须要有这个函数,否则就看不到显示器上面的输出,可以看到的结果只是一闪而过的一个框剪
}
voidsort(fcfs*p,intn)//排序
篇二:
操作系统c进程调度算法实验报告
华北科技学院计算机系综合性实验
实验报告
课程名称操作系统c实验学期20XX至20XX学年第2学期学生所在系部计算机系年级20XX专业班级网络b10学生姓名学号
任课教师杜杏菁实验成绩
计算机系制
《操作系统c》课程综合性实验报告
篇三:
进程调度算法实验报告
操作系统实验报告
(二)
实验题目:
进程调度算法
实验环境:
c++
实验目的:
编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不
同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较
各种算法的性能优劣。
实验内容:
编程实现如下算法:
1.先来先服务算法;
2.短进程优先算法;
3.时间片轮转调度算法。
设计分析:
程序流程图:
1.先来先服务算法
2.短进程优先算法
3.时间片轮转调度算法
实验代码:
1.先来先服务算法
#include
#definen20
typedefstruct
{
intid;//进程名
intatime;//进程到达时间
intruntime;//进程运行时间
}fcs;
voidmain()
{
intamount,i,j,diao,huan;
fcsf[n];
cout cin>>amount;
for(i=0;i {
cout>f[i].id;
cin>>f[i].atime;
cin>>f[i].runtime;
}
for(i=0;i {//如果两个进程同时到达,按在屏幕先输入的先运行for(j=0;j {if(f[j].atime>f[j+1].atime)
{diao=f[j].atime;
f[j].atime=f[j+1].atime;
f[j+1].atime=diao;
huan=f[j].id;
f[j].id=f[j+1].id;
f[j+1].id=huan;
}
}
}
for(i=0;i {
cout开始" f[i+1].atime=f[i].atime+f[i].runtime;
}
}
2.短进程优先算法
#include
#definen5
#definenum5
#definemax65535
typedefstructpro
{intpRo_ID;
intarrive_time;
intsum_time;intflag;
}pro;//整数排序
intbubble(inttemp[])
{
inti,j,tem=0;
for(i=1;i }
//进程排序
probubble(prop[])
{
inti,j;protemp={0};pros[num];for(i=0;itemp[j+1])}if(lastx==1)break;{tem=temp[j];temp[j]=temp[j+1];temp[j+1]=tem;lastx=0;}
{s[i]=p[i];
}for(i=1;is[j+1].sum_time){temp=s[j];s[j]=s[j+1];s[j+1]=temp;lastx=0;}
returns[0];
}
voidspF(intp)
{
if(n>0){inti,j,k,l,tc=0;proseq[n];protemp_seq[n];printf("短进程优先调度算法spF\n");printf("请依次输入5个进程的进程号、到达时间和执行时间\n");printf("成员变量用逗号隔开;进程间用回车隔开\n");for(i=0;i //flag表示对应i的pro的队列情况
//-1表示未进入过队列,0表示在队列中,1表示被清除了
for(i=0;i for(i=0;i for(j=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 调度 算法 模拟 实验 报告