欢迎来到天天文库
浏览记录
ID:48589069
大小:344.00 KB
页数:13页
时间:2020-02-26
《处理机调度操作系统实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.学年第学期操作系统课程实验报告学院: 专业:班级: 姓名: 学号: 任课教师: 教育资料.实验题目处理机调度实验地点实验目的1.通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,进一步掌握进程调度的概念和算法,加深对处理机分配的理解。2.了解Linux中进程(线程)的调度机制。3.学习使用Linux中进程(线程)调度算法,掌握相应的与调度有关的函数。实验内容1、程序说明: (1)先来先服务算法:如果早就绪的进
2、程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS:firstcomefirstservice)总是把当前处于就绪队列之首的那个进程调度到运行状态。(2)轮转法就是按一定时间片(记为q)轮番运行各个进程。如果q是一个定值,则轮转法是一种对各进程机会均等的调度方法。(3)优先级调度的基本思想是,把当前处于就绪队列中优先级最高的进程投入运行,而不管各进程的下一个CPU周期的长短和其他因素。2、具体步骤:(1)分析问题,提出解决问题的算法(2)编制程序(3)程序调试(4)记录实验结果,以及思考是否能够改善
3、算法(1)编辑程序jcdd.c,编译并执行。#include#include#defineP_NUM5#defineP_TIME50enumstate{ready,execute,block,finish};structpcbb{charname[4];intpriority;//数越大优先级越高intcputime;//已占用CPU的时间intneedtime;//执行时间intcount;enumstateprocess;structpcbb*next;};typedefstructp
4、cbbpcb;voiddisplay_menu(){教育资料.printf("CHOOSETHEALGORITHM:");printf("1PRIORITY");printf("2ROUNDROBIN");printf("3EXIT");}pcb*get_process(){pcb*q;pcb*p;//头指针pcb*t;//尾指针inti=0;printf("inputnameandtime");while(i5、>name);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_process(pcb*p){pcb*q;while(p!=NULL){q=p;p=p->next;free(q);}}voiddisplay(pcb*p){printf("namecputimen6、eedtimeprioritystate");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){caseready:printf("ready");break;caseexecute:printf("execute");bre7、ak;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){//让t指向优先级最高的进程if(q->process!=finish){q->process=8、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->p
5、>name);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_process(pcb*p){pcb*q;while(p!=NULL){q=p;p=p->next;free(q);}}voiddisplay(pcb*p){printf("namecputimen
6、eedtimeprioritystate");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){caseready:printf("ready");break;caseexecute:printf("execute");bre
7、ak;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){//让t指向优先级最高的进程if(q->process!=finish){q->process=
8、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->p
此文档下载收益归作者所有