欢迎来到天天文库
浏览记录
ID:37458760
大小:201.00 KB
页数:9页
时间:2019-05-24
《处理机的调度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统实验报告学号540907010126:姓名:刘岩岩班级:计科09-1处理机的调度一、实验目的(1)通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,进一步掌握进程调度的概念和算法,加深对处理机分配的理解。(2)了解Linux中进程(线程)的调度机制。(3)学习使用Linux中进程(线程)调度算法,掌握相应的与调度有关的函数。二、实验内容与步骤:程序说明:1)先来先服务算法:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS:firstcomefirstservice)总是把当前处于就绪队列之首的那个进
2、程调度到运行状态。2)2)轮转法就是按一定时间片(记为q)轮番运行各个进程。如果q是一个定值,则轮转法是一种对各进程机会均等的调度方法。3)优先级调度的基本思想是,把当前处于就绪队列中优先级最高的进程投入运行,而不管各进程的下一个CPU周期的长短和其他因素。三、具体步骤:分析问题,提出解决问题的算法编制程序程序调试记录实验结果,以及思考是否能够改善算法四、程序及运行结果:#include#include#defineP_NUM5#defineP_TIME50enumstate{ready,execute,block,finish};
3、structpcbb{charname[4];intpriority;//数越大优先级越高intcputime;//已占用CPU的时间intneedtime;//执行时间intcount;enumstateprocess;structpcbb*next;};typedefstructpcbbpcb;voiddisplay_menu(){printf("CHOOSETHEALGORITHM:");printf("1PRIORITY");printf("2ROUNDROBIN");printf("3EXIT");}pcb*get_process(){pcb*
4、q;pcb*p;//头指针pcb*t;//尾指针inti=0;printf("inputnameandtime");while(iname);scanf("%d",&q->needtime);q->cputime=0;q->priority=P_TIME-q->needtime;q->process=ready;q->next=NULL;if(i==0){p=q;t=q;}else{t->next=q;t=q;}i++;}returnp;}voidfree_proce
5、ss(pcb*p){pcb*q;while(p!=NULL){q=p;p=p->next;free(q);}}voiddisplay(pcb*p){printf("namecputimeneedtimeprioritystate");while(p){printf("%s",p->name);printf("");printf("%d",p->cputime);printf("");printf("%d",p->needtime);printf("");printf("%d",p->priority);printf("");switch(p->process){ca
6、seready:printf("ready");break;caseexecute:printf("execute");break;caseblock:printf("block");break;casefinish:printf("finish");break;}p=p->next;}}intprocess_finish(pcb*q){intb1=1;while(b1&&q){b1=b1&&q->needtime==0;q=q->next;}returnb1;}voidcpuexe(pcb*q){pcb*t=q;inttp=0;while(q){//让
7、t指向优先级最高的进程if(q->process!=finish){q->process=ready;if(q->needtime==0){q->process=finish;}}if(tppriority&&q->process!=finish){tp=q->priority;t=q;}q=q->next;}if(t->needtime!=0){t->priority-=3;//每执行一次优先级降低三个单位t->needtime--;t->process=execute;t->cputime++;}}voidpriority_c
此文档下载收益归作者所有