进程调度程序.docx
《进程调度程序.docx》由会员分享,可在线阅读,更多相关《进程调度程序.docx(32页珍藏版)》请在冰豆网上搜索。
进程调度程序
进程调度程序
摘要
进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。
在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。
本文通过两种算法模拟实现了进程之间的调度。
关键词:
创建进程;先来先服务;优先级调度
目录
1绪论1
2模块代码算法2
2.1创建进程2
2.2创建PCB2
2.3CPU调度与分配模块2
2.4CPU模拟运行模块3
2.5可强占优先进程调度模块4
3函数调用关系图7
3.1总体流程图7
3.2可强占优先调度流程图8
3.3先来先服务调度流程9
4测试结果10
5结论13
参考文献14
致谢15
附录16
1绪论
在操作系统中,调度的实质是一种资源分配,调度算法即指:
根据系统的资源分配策略所规定的资源分配算法。
对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;在分时系统中,为保证系统具有合理的响应时间,采用轮转法进行调度。
采用算法时,则要考虑多方面因素,以便达到最佳效果。
做好这个课程设计,有利于加深对操作系统进程调度知识的理解。
在这次进程调度程序设计中采用两种算法,最高优先级数优先的调度算法和先来先服务算法,对多个进程进行调度,每个进程有三个基本状态,初始状态为就绪状态、运行状态和结束状态。
最高优先级数优先的调度算法中,程序的某进程运行时间以时间片为单位计算,各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
在优先级数优先的调度算法中,优先级数的值设计为100与运行时间的差值,即Pro_time-process->needtime,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1,对于遇到优先数一致的情况,采用先来先服务策略解决。
基于这种思想设计下面的程序流程图,在流程图的基础上采用c++语言和进程调度算法设计了进程运行程序。
2模块代码算法
2.1创建进程
structProcessPcb,定义PCB相关变量
processPcb(){next=NULL;}
charpro_name[20];//进程的名字
inttime_submit;//提交时间,从时间为1开始计时
inttime_exe;//进程所需的运行时间
intpro_id;//进程ID(系统生成)
intpro_priority;//进程优先级
inttime_start;//开始执行的时间
inttime_end;//结束的时间
inttime_wait;//等待的时间
intpro_state;//进程的状态(就绪,执行,完成)
inttime_left;//还需多少时间单位,初始化为所需的执行时间
inttime_turn;//周转时间
doubletime_aver;//带权周转时间
2.2创建PCB
CpuModel{
CpuModel(){pcbnum=0;}
voidcpurun();//cpu模拟运行函数
boolGetPcb();//进程输入函数
voidShowPcb();//将输入的进程展示出来
voidPriModel();//可强占的优先进程调度模式
voidFcfsModel();//先到先服务调度模式
ProcessPcbPcbList[100];//按提交时间排的未就绪进程队列()
}
2.3CPU调度与分配模块
classCpuModel
{public:
CpuModel()
{pcbnum=0;
}
voidcpurun();//cpu模拟运行函数
boolCreatePcb();//进程输入函数
voidShowPcb();//将输入的进程展示出来
voidPriModel();//可强占的优先进程调度模式
voidFcfsModel();//先到先服务调度模式
private:
ProcessPcbPcbList[100];//按提交时间排的未就绪进程intpcbnum;//进程数量
intfreetime;//cpu空闲时间
intallturn;//总周转时间
floatallaver;//总带权周转时间
};
2.4cpu模拟运行模块
voidCpuModel:
:
cpurun()
{intchoose=0;
while
(1)
{cout<<"***主菜单***"<cout<<"----------------------------------"<cout<<"***1:
创建进程***"<cout<<"***2:
显示已创建的进程***"<cout<<"***3:
可强占的优先进程调度***"<cout<<"***4:
先到先服务调度***"<cout<<"***5:
退出系统***"<cout<<"\n***请选择:
";
cin>>choose;
cout<switch(choose)
{case1:
CreatePcb();//创建进程
break;
case2:
ShowPcb();//显示已创建的进程
break;
case3:
PriModel();//可强占的优先进程方式
break;
case4:
FcfsModel();//先到先服务调度方式
break;
case5:
return;//结束程序
}
cout<}
}
2.5可强占优先进程调度模块
voidCpuModel:
:
PriModel()
{cout<<"********可强占的优先进程调度过程如下********\n";
freetime=0;//初始化系统空闲时间为0
inttime=0;//时间
intnextid=0;
intpnum=0;//已就绪进程数目
ProcessPcb*head;//就绪队列
ProcessPcb*pcb,*pcb1,*pcb2;
head=(ProcessPcb*)malloc(sizeof(ProcessPcb));
head->next=NULL;
while(head->next!
=NULL||pnum{Sleep(1000);
time++;
cout<<"*Time:
第"<