欢迎来到天天文库
浏览记录
ID:10189069
大小:144.50 KB
页数:10页
时间:2018-06-12
《实验一 进程调度算法模拟》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统实验报告(一)班级:计1001姓名:车琛学号:201007010113实验一进程调度算法模拟1.内容:设计一个简单的进程调度算法,模拟OS中的进程调度过程;2.要求:①进程数不少于5个;②进程调度算法任选;可以用动态优先数加时间片轮转法实现进程调度,每运行一个时间片优先数减3;③用C语言编程;④程序运行时显示进程调度过程。3.步骤:①设计PCB及其数据结构:进程标识数:ID进程优先数:PRIORITY(优先数越大,优先级越高)进程已占用时间片:CPUTIME,每得到一次调度,值加1;进程还需占用时间片:ALLTIME,每得到一次调度,该值减1,一旦运行完毕,ALLTIME为0
2、)进程队列指针:NEXT,用来将PCB排成队列进程状态:STATE(一般为就绪,可以不用)②设计进程就绪队列及数据结构;③设计进程调度算法,并画出程序流程图;④设计输入数据和输出格式;结构格式:当前正运行的进程:0当前就绪队列:2,1,3,4⑤编程上机,验证结果。4.提示:假设调度前,系统中有5个进程,其初始状态如下:ID01234PRIORITY93830290可否考虑用数组或链表去实现CPUTIME00000ALLTIME32634STATEreadyreadyreadyreadyready①以时间片为单位调度运行;②每次调度ALLTIME不为0,且PRIORITY最大的进程运行
3、一个时间片;③上述进程运行后其优先数减3,再修改其CPUTIME和ALLTIME,重复②,③④直到所有进程的ALLTIME均变为0。5.书写实验报告①实验题目;②程序中所用数据结构及说明;③清单程序及描述;④执行结果。代码清单#include#include#include#include#include#defineMINSIZE5typedefenumSTATE{ready,running,stop,}STATE;typedefstructPCB{intpid;intprior
4、ity;//进程优先级intcputime;intalltime;STATEstate;structPCBprev;structPCBnext;}PCB;typedefPCBNode;voidinit_process(Node&head){head=(PCB)malloc(sizeof(PCB));head->next=head;head->prev=head;}voidpush(Nodehead,Nodepnode){if(head==NULLpnode==NULL)return;Nodep=head->next;while(p!=head&&pnode->priority
5、priority){p=p->next;}pnode->next=p->prev->next;pnode->prev=p->prev;p->prev->next=pnode;p->prev=pnode;}voidshow_process(Nodehead){if(head==NULL)return;Nodep=head->next;cout<<"当前的就绪队列有:"<pid<<"";cout<<"优先级为"<priority<<"";cou
6、t<<"剩余ALLTIME为"<alltime<<"";cout<<"运行时间cputime为"<cputime<<"";cout<next;}cout<<""<next==head)returnNULL;Nodep=head->next;p->prev->next=p->next;p->next->prev=p->prev;returnp;}PCBcreate_process(intid,intpriority,intcpu
7、time,intalltime,STATEstate){PCBp=(PCB)malloc(sizeof(PCB));p->pid=id;p->cputime=cputime;p->alltime=alltime;p->priority=priority;p->state=state;p->next=NULL;p->prev=NULL;returnp;}voiddestroy_head(Nodehead){if(head==NULL)return;free(
此文档下载收益归作者所有