第一次实验——时间片调度轮转算法
实验时间:2014.11.7 院系:计算机科学与技术学院 班级:软件2班
实验要求:
(1) 实验选题: 时间片调度轮转算法 (2) 程序流程图及程序代码
流程图 进 行 下 一 次 执 行
程序代码:
开始 确定时间片大小 空则等待 就绪队列 为空 否 选择队首进程进行执行一个时间片 该进程运行 完成 否 是 送到就绪队列末尾 #include typedef struct pcb{ char pname[N]; int runtime; int arrivetime; char state; struct pcb*next; }PCB; PCB head_input; PCB head_run; PCB * pcb_input; static char R='r',C='c'; unsigned long current; void inputprocess(); int readyprocess(); int readydata(); int runprocess(); FILE *f; int readyprocess() { while(1) { if(readydata()==0) return 1; else runprocess(); } } int readydata() { if(head_input.next==NULL) { if(head_run.next==NULL) return 0; else return 1; } 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(((unsigned long)p3->arrivetime<=current)&&(p3->state==R)) { printf(\"时间片为 %8d(时间 始,\\n\ fprintf(f,\"时间片为 %8d(时间始,\\n\ p2->next=p3->next; p3->next=p1->next; p1->next=p3; p3=p2; } p3=p3; p3=p3->next; } return 1; } int runprocess() { PCB *p1,*p2; if(head_run.next==NULL) { current++; return 1; } else { p1=head_run.next; p2=&head_run; while(p1!=NULL) { p1->runtime--; current++; if(p1->runtime<=0) { printf(\"时间片为 %8d 时间束.\\n\ %4d);进程%4d);进程%4d 进程%s 开%s 开%s 结 fprintf(f,\"时间片为 %8d 时间 %4d 进程 %s 结束.\\n\ p1->state=C; p2->next=p1->next; delete p1; p1=NULL; } else { p2=p1; p1=p2->next; } } return 1; } } void inputprocess() { PCB *p1,*p2; int num; unsigned long max=0; printf(\"请输入进程的数量:\"); fprintf(f,\"请输入进程的数量:\"); scanf(\"%d\ fprintf(f,\"%d\\n\ p1=&head_input; p2=p1; p1->next=new PCB; p1=p1->next; for(int i=0;i p1->arrivetime=(p1->arrivetime)*1000; p1->state=R; if((unsigned long)(p1->arrivetime)>max) max=p1->arrivetime; p1->next=new PCB; p2=p1; p1=p1->next; } delete p1; p1=NULL; p2->next=NULL; } void main() { f=fopen(\"result.txt\ printf(\"时间 1=1000 时间片\\n\"); fprintf(f,\"\\ntime 1=1000 time slice\\n\"); current=0; inputprocess(); readyprocess(); getch(); fclose(f); } (3) PCB数据结构 typedef struct pcb{ char pname[N]; int runtime; int arrivetime; char state; struct pcb*next; }PCB; (4)程序运行结果 (5) 总结 掌握了时间片轮转调度算法,时间片的大小确定很重要。同时体会到用手实践能帮助我们对理论知识的理解,要开动脑筋,勤于动手。 因篇幅问题不能全部显示,请点此查看更多更全内容