欢迎来到天天文库
浏览记录
ID:14174680
大小:47.00 KB
页数:16页
时间:2018-07-26
《【计算机操作系统实验】进程调度算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、【计算机操作系统实验】进程调度算法/*****************************************************************************Copyright:2012?liuwenwuFilename:main.cDescription:用于操作系统进程调度的仿真,包括先到先服务、短作业优先、高优先比、时间片轮转Author:刘文武Version:0.1Date:2012年4月10日History:**********************************************
2、*******************************/#include#include//使用timer()函数#include//时间延迟#defineDELAY100//时间片#defineSJP4/**********全局变量声明**********/unsignedshortTIME=0;//时间unsignedshortNUM=0;//进程数量charTYPE='1';//模拟类型//PCB结构体定义typedefstructPCB{charname[16];c
3、harstate;//[R]Run,[F]Finish,[P]Pause,[N]Newunsignedshortpriority;//数字越大,优先级越高,最小为1unsignedshortt_arrive;//到达时间unsignedshortt_start;//开始时间unsignedshortt_finish;//完成时间unsignedshortt_service;//服务时间unsignedshortt_run;//运行时间unsignedshortt_wait;//等待时间structPCB*next;}pcb;pcb*now=
4、NULL,//现在运行的pcb*head=NULL;//pcb链头部指针/**********函数声明**********/voidfcfs();//先到先服务voidsjf();//短作业优先voidgyxb();//高优先比voidsjplz();//时间片轮转voidinit();//初始化,完成pcb录入pcb*sort(pcb*);//对init()录入的pcb按到达时间排序voidtimer();//定时器,每一个延迟自我调用一次voidresult();//打印结果//先到先服务算法voidfcfs(){if(now->t_a
5、rrive>TIME){printf("[时间:%d]t无进程运行",TIME);return;}if(now->state=='N'){now->state='R';now->t_start=TIME;printf("[时间:%d]t进程:%s首次运行",TIME,now->name);}elseif(now->state=='R'){(now->t_run)++;if(now->t_run>=now->t_service){now->state='F';now->t_finish=TIME;printf("[时间:%d]t
6、进程:%s任务完成",TIME,now->name);now=now->next;if(now!=NULL)fcfs();}elseprintf("[时间:%d]t进程:%s正在运行,已运行时间:%d",TIME,now->name,now->t_run);}}//短作业优先算法voidsjf(){pcb*p=head,*p_min=NULL;unsignedshortt_min=9999;//从现在时间以前并且未结束的进程中,选出服务时间最小的进程while(p!=NULL&&p->t_arrive<=TIME){if(p->s
7、tate=='F'){p=p->next;continue;}if((p->t_service-p->t_run)t_service;p_min=p;}p=p->next;}//如果为空,判断全部进程是否都已完成if(p_min==NULL){chark='Y';p=head;while(p!=NULL){if(p->state!='F')k='N';p=p->next;}if(k=='Y')now=NULL;elseprintf("[时间:%d]t无进程运行",TIME);return;}//如果选
8、出的进程和之前的不同if(p_min!=now){if(now->state=='R'){now->state='P';printf("[时间:%d]t进程:%s暂停运行"
此文档下载收益归作者所有