欢迎来到天天文库
浏览记录
ID:55281242
大小:530.13 KB
页数:78页
时间:2020-05-09
《设计1 进程调度算法的模拟.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、山东科技大学学生课程设计设计1进程调度算法的模拟一、设计目的1、通过编程实现进程调度算法的模拟,了解进程调度的过程,理解进程调度各方法的特点。二、设计要求1.用语言来实现对n个进程采用不同调度算法的进程调度。2.每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。(4)进程总共需要运行时间Alltime,
2、利用随机函数产生。(5)进程状态,0:就绪态;1:运行态;2:阻塞态。(6)队列指针next,用来将多个进程控制块PCB链接为队列。3.优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1。(2)进程每运行一个时间片,优先数减3。78山东科技大学学生课程设计4.在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。三、设计说明开始初始化PCB,输入进程信息FCFS算法,按照进程先后顺序输出SJS算法,按照ALLTIME从小到大依次输出优先级算法,按照优先从大到小输出,进程执行依次P-3,就绪队列中的进程P+1RR
3、算法,按照时间片依次执行进程,ALLTIME—=4.结束1FCFS模块78山东科技大学学生课程设计1.1功能对于先到达的进程优先分配CPU,按照先来先服务的原则依次执行各进程。1.2数据结构typedefstructPCB{intID;//进程优先数,用于标示不同的进程intPriority;//进程优先级intCPUTime;//进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4intALLTime;//进程总共需要运行时间AlltimeintStatus;//用于表示进程状态,0:就绪态;1:运行态;2:阻塞态}PCB;1.3算法voidFCFS(){78山东科技
4、大学学生课程设计Node*p=head->next;while(p!=NULL){cout<<"执行进程"<data.ID;p=p->next;}cout<5、PU时间CPUtime,进程每运行一次,累计值等于4intALLTime;//进程总共需要运行时间AlltimeintStatus;//用于表示进程状态,0:就绪态;1:运行态;2:阻塞态}PCB;2.3算法voidSJF(){Node*p;Node*pmin;while(head2->next!=NULL){pmin=head2->next;for(p=head2->next;p!=NULL;p=p->next){if(pmin->data.ALLTime>p->data.ALLTime)pmin=p;}78山东科技大学学生课程设计cout<<"执行剩余区间长度最短的进程"<6、ndl<data.ID;for(p=head2;p!=NULL;p=p->next){if(p->next==pmin){p->next=p->next->next;free(pmin);}}}printf("");printf("所有进程都执行完成。");}3SearchMaxPRI模块3.1功能按照优先级从高到低依次执行程序3.2数据结构q0指向q的前一个进程,便于删除进程;p返回优先级最大进程;q用于遍历链表78山东科技大学学生课程设计3.3算法voidSearchMaxPRI(intm){Node*p=head->next;Node*q=head-7、>next;Node*q0=head;while(q!=NULL){if(q->data.ALLTime==0){cout<<"进程已执行完成"<data.ID;n--;q0->next=q0->next->next;free(q);q=q0->next;}else{78山东科技大学学生课程设计if(q->data.Priority>p->data.Priority)p=q;q0=q0->next;q=q->next;}}if(n>0)action
5、PU时间CPUtime,进程每运行一次,累计值等于4intALLTime;//进程总共需要运行时间AlltimeintStatus;//用于表示进程状态,0:就绪态;1:运行态;2:阻塞态}PCB;2.3算法voidSJF(){Node*p;Node*pmin;while(head2->next!=NULL){pmin=head2->next;for(p=head2->next;p!=NULL;p=p->next){if(pmin->data.ALLTime>p->data.ALLTime)pmin=p;}78山东科技大学学生课程设计cout<<"执行剩余区间长度最短的进程"<6、ndl<data.ID;for(p=head2;p!=NULL;p=p->next){if(p->next==pmin){p->next=p->next->next;free(pmin);}}}printf("");printf("所有进程都执行完成。");}3SearchMaxPRI模块3.1功能按照优先级从高到低依次执行程序3.2数据结构q0指向q的前一个进程,便于删除进程;p返回优先级最大进程;q用于遍历链表78山东科技大学学生课程设计3.3算法voidSearchMaxPRI(intm){Node*p=head->next;Node*q=head-7、>next;Node*q0=head;while(q!=NULL){if(q->data.ALLTime==0){cout<<"进程已执行完成"<data.ID;n--;q0->next=q0->next->next;free(q);q=q0->next;}else{78山东科技大学学生课程设计if(q->data.Priority>p->data.Priority)p=q;q0=q0->next;q=q->next;}}if(n>0)action
6、ndl<data.ID;for(p=head2;p!=NULL;p=p->next){if(p->next==pmin){p->next=p->next->next;free(pmin);}}}printf("");printf("所有进程都执行完成。");}3SearchMaxPRI模块3.1功能按照优先级从高到低依次执行程序3.2数据结构q0指向q的前一个进程,便于删除进程;p返回优先级最大进程;q用于遍历链表78山东科技大学学生课程设计3.3算法voidSearchMaxPRI(intm){Node*p=head->next;Node*q=head-
7、>next;Node*q0=head;while(q!=NULL){if(q->data.ALLTime==0){cout<<"进程已执行完成"<data.ID;n--;q0->next=q0->next->next;free(q);q=q0->next;}else{78山东科技大学学生课程设计if(q->data.Priority>p->data.Priority)p=q;q0=q0->next;q=q->next;}}if(n>0)action
此文档下载收益归作者所有