进程调度算法设计报告

进程调度算法设计报告

ID:12291148

大小:78.50 KB

页数:10页

时间:2018-07-16

进程调度算法设计报告_第1页
进程调度算法设计报告_第2页
进程调度算法设计报告_第3页
进程调度算法设计报告_第4页
进程调度算法设计报告_第5页
资源描述:

《进程调度算法设计报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、操作系统课程设计进程调度算法姓名班级学号第10页共10页一,实验目的:通过时间片轮转调度算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。二,实验内容:用C++语言来实现对N个进程采用优先算法以及轮转算法的进程调度。三,程序设计细节:1.定义描述程序的结构体PCBtypedefstructpcb{charpname[N];//进程名intruntime;//运行时间intarrivetime;//到达时间charstate;//进程状态str

2、uctpcb*next;//连接指针}PCB;第10页共10页staticcharR='r',C='c';//可选进程的状态unsignedlongcurrent;//记录系统当前时间的变量2.建立进程的函数voidinputprocess(){PCB*p1,*p2;intnum;printf("Howmanyprocessdoyouwanttorun:");scanf("%d",&num);//输入进程数p1=&head_input;p2=p1;p1->next=newPCB;p1=p1->nex

3、t;//P1指向头指针的下一个结点for(inti=0;ipname);printf("runtime:");scanf("%d",&(p1->runtime));printf("arrivetime:");scanf("%d",&(p1->arrivetime));第10页共10页p1->runtime=(p1->runtime)*1000;p1->arrivetime=

4、(p1->arrivetime)*1000;p1->state=R;p1->next=newPCB;p2=p1;p1=p1->next;}//采用链表的尾插法将所有进程连接起来deletep1;p1=NULL;p2->next=NULL;}//P2始终指向最后一个进程3.判断是否有就绪进程的函数intreadydata()//判断就绪队列是否为空的函数{if(head_input.next==NULL){if(head_run.next==NULL)//当就像且运行队列均为空时{return0;}e

5、lse第10页共10页{return1;}}PCB*p1,*p2,*p3;p1=head_run.next;p2=&head_run;while(p1!=NULL)//判断运行队列是否为空{p2=p1;p1=p2->next;}p1=p2;p3=head_input.next;p2=&head_input;while(p3!=NULL)//判断就绪队列不空时,将它们移到运行队列{if(((unsignedlong)p3->arrivetime<=current)&&(p3->state==R)){p

6、rintf("Timeis%4d;Process%sstart,",(current+500)/1000,p3->pname);第10页共10页p2->next=p3->next;p3->next=p1->next;p1->next=p3;p3=p2;}p2=p3;p3=p3->next;}return1;}4.运行进程的函数intrunprocess(){PCB*p1,*p2;if(head_run.next==NULL)//运行队列为空时,修改当前时间{current++;第10页共10页

7、return1;}else{p1=head_run.next;//指向下一个进程p2=&head_run;while(p1!=NULL)//由运行队列顺序取一个进程运行{p1->runtime--;current++;if(p1->runtime<=0){printf("Timeis%4d;Process%send,",(current+500)/1000,p1->pname);p1->state=C;第10页共10页p2->next=p1->next;deletep1;p1=NULL;}el

8、se{p2=p1;p1=p2->next;}}return1;}}5.检查就绪队列并准备运行进程的函数intreadyprocess()第10页共10页{while(1){if(readydata()==0)//判断就绪队列是否为空的函数{return1;}else{runprocess();//运行进程函数}}}6.主函数voidmain()第10页共10页{printf("timel=1000timeslice");//定义时间片为1000current=0;

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

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

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