【计算机操作系统实验】进程调度算法

【计算机操作系统实验】进程调度算法

ID:6629445

大小:47.00 KB

页数:16页

时间:2018-01-20

【计算机操作系统实验】进程调度算法_第1页
【计算机操作系统实验】进程调度算法_第2页
【计算机操作系统实验】进程调度算法_第3页
【计算机操作系统实验】进程调度算法_第4页
【计算机操作系统实验】进程调度算法_第5页
资源描述:

《【计算机操作系统实验】进程调度算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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];charstate;//[R]Run,[F]Finish,[P]Pause,[N]Newunsig

3、nedshortpriority;//数字越大,优先级越高,最小为1unsignedshortt_arrive;//到达时间unsignedshortt_start;//开始时间unsignedshortt_finish;//完成时间unsignedshortt_service;//服务时间unsignedshortt_run;//运行时间unsignedshortt_wait;//等待时间structPCB*next;}pcb;pcb*now=NULL,//现在运行的pcb*head=NULL;//pcb链头部指针/**********函数声明**********/voidfcfs()

4、;//先到先服务voidsjf();//短作业优先voidgyxb();//高优先比voidsjplz();//时间片轮转voidinit();//初始化,完成pcb录入pcb*sort(pcb*);//对init()录入的pcb按到达时间排序voidtimer();//定时器,每一个延迟自我调用一次voidresult();//打印结果//先到先服务算法voidfcfs(){if(now->t_arrive>TIME){printf("[时间:%d]t无进程运行",TIME);return;}if(now->state=='N'){now->state='R';now->t_st

5、art=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进程:%s任务完成",TIME,now->name);now=now->next;if(now!=NULL)fcfs();}elseprintf("[时间:%d]t进程:%s正在运行,已运行时间:%d",TIME,now->nam

6、e,now->t_run);}}//短作业优先算法voidsjf(){pcb*p=head,*p_min=NULL;unsignedshortt_min=9999;//从现在时间以前并且未结束的进程中,选出服务时间最小的进程while(p!=NULL&&p->t_arrive<=TIME){if(p->state=='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

7、='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;}//如果选出的进程和之前的不同if(p_min!=now){if(now->state=='R'){now->state='P';printf("[时间:%d]t进程:%s暂停运行"

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。