- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统进程调算法模拟实验报告
进程调度算法模拟
专业:XXXXX
学号:XXXXX
姓名:XXX
实验日期:20XX年XX月XX日
一、实验目的
通过对进程调度算法的模拟加深对进程概念和进程调度的理解。实现对个进程的调度模拟,要求至少采用两种不同的调度算法分别进行模拟调度。进程调度过程:
算法中用到的数据结构
struct fcfs{ //先来先服务算法从这里开始
char name[10];
float arrivetime;
float servicetime;
float starttime;
float finishtime;
float zztime;
float dqzztime;
}; //定义一个结构体,里面包含的有一个进程相关的信息
主要的常量变量
vectorPCBm_ProcessQueue;//进程输入队列
vectorPCBm_WaitQueue;//进程就绪队列
vectorPCBm_FinishQueue;//完成队列
vectorPCB::iterator m_iter;//迭代器
PCB m_runProcess;//运行中的进程
int m_ProcessCount;//进程数
float m_RunTime;//运行时间
int m_tagIsRun;//是否在运行标志。表示正在运行,表示没有
float m_TimeSlice;//时间片大小
int m_TimeSliceCount;//指时间片轮转中一次分到的时间片个数
char m_SchedulerAlgorithm;//调度算法
主要模块
void PCBInput();//输入进程信息
void PCBSort();//对进程控制块按照优先级排序(采用冒泡排序)
void ProcessSelect();//若当前就绪队列不为空则根据选择的调度算法开始调度。否则,系统时间加.以等待新的进程到来
void PCBDisplay();//打印当前状况下。就绪队列、完成队列、运行中的进程信息
void ProcessRun();//进程运行一次。运行时间加个时间片。并判断进程是否达到完成条件。若是则ProcessStatus=f.否则为w;
void ProcessQueueProcess();//查看当前时间下,有无进程加入。若有则把该进程调入就绪队列
void ProcessDispatch();//进程分派,进程执行完成后决定进程该进入哪个队列(就绪、完成)
void TimePast(){ m_RunTime +=m_TimeSlice; ProcessQueueProcess();}//当前系统时间加个时间片,并检查是否有新的进程加入
void SchedulerStatistics();//调度统计,计算周转时间等
void FCFS();//先来先服务
void SJF();//最短进程优先调度
void RR();//简单时间片轮转
void PD();//最高优先数优先
四、实验代码
#include cstdlib
#include iostream
#includeiomanip
using namespace std;
struct fcfs{ //先来先服务算法从这里开始
char name[10];
float arrivetime;
float servicetime;
float starttime;
float finishtime;
float zztime;
float dqzztime;
}; //定义一个结构体,里面包含的有一个进程相关的信息
fcfs a[100];
void input(fcfs *p,int N)
{
int i;
coutendl;
printf( 请您输入进程的 名字 到达时间 服务时间: (例如: a 0 100)\n\n);
for(i=0;i=N-1;i++)
{
printf( 请您输入进程%d的信息:\t,i+1);
scanf(\t\t\t%s%f%f,p[i].name,p[i].arrivetime,p[i].servicetime);
}
}
void Print(fcfs *p,float arrivetime,float servicetime,float st
文档评论(0)