进程调度课程设计报告_第1页
进程调度课程设计报告_第2页
进程调度课程设计报告_第3页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.进程调度课程设计2.1 实验目的用高级语言编写和调试一个有N 个进程并行的进程调度程序,以加深对进程的概念及进程调度算法的理解。2.2 实验设备PC 机、 windows2000操作系统、 Turbo C 2.0 / VC+6.02.3 实验要求实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告,按时上交。2.4 实验内容设计一个有N 个进程并行的进程调度程序。进程调度算法: 采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。具体描述如下:每个

2、进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU 时间、进程状态等等。分析:进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W ( Wait)、运行R(Run)、或完成F( Finish )三种状态之一。就绪进程获得CPU 后都只能运行一个时间片。用已占用CPU 时间加 1 来表示。如果运行一个时间片后,进程的已占用CPU 时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU 时间还未达

3、所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级) ,然后按照优先数的大小把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。调度算法的参考流程图如下:.2.5实验结果及分析实验代码:#include<stdio.h>#include<stdlib.h>struct pcbchar name2;char status;int priority;int need_time;int used_time;struct pcb *next;.;typ

4、edef struct pcb *PCB;PCB Initpcb()PCB P;P=(PCB)malloc(sizeof(struct pcb);P->next=NULL;return P;void Sort(PCB P,struct pcb *p)struct pcb *s,*q;s=P->next;if(s=NULL)p->next=P->next;P->next=p;elseq=s->next;while(q!=NULL)if(p->priority<=s->priority&&p->priority>q-

5、>priority)s->next=p;p->next=q;break;else.s=q;q=q->next;if(p->priority<=s->priority)s->next=p;p->next=q;elses=P->next;P->next=p;p->next=s;void Input(PCB P)int SIZE,i;struct pcb *p;printf("Please input the number of process:");scanf("%d",&SIZ

6、E);printf("Please input the process's name status priority need_time used_time:n ");for(i=0;i<SIZE;i+)printf("Process NO.%d n",i+1);p=(struct pcb *)malloc(sizeof(struct pcb);scanf("%s %c %d %d %d",p->name,&p->status,&p->priority,&p->need_t

7、ime,&p->used_time);.printf("n");p->next=NULL;Sort(P,p);int QueueNull(PCB P)if(P->next=NULL)return 0;void Timeout(PCB P,int time)int t;t=P->next->need_time-P->next->used_time;if(t>time)P->next->used_time=P->next->used_time+time;elseP->next->used

8、_time=P->next->used_time+t;P->next->priority=P->next->priority-1;void display2(PCB P)int n=0;struct pcb *s,*t;s=t=P;s=P->next;while(s!=NULL)if(n=0).printf("Running process:n");printf("NameStatusPriorityNeed_TimeUsed_timen");s->status='R'printf(&quo

9、t;%6s%10c%11d%12d%12dn",s->name,s->status,s->priority+1,s->need_time,s->used_time-2);n=1;elseprintf("Waiting process:n");s->status='W'printf("NameStatusPriorityNeed_TimeUsed_timen");printf("%6s%10c%11d%12d%12dn",s->name,s->status,s-&

10、gt;priority,s->need_time,s->used_time);t=s;s=t->next;printf("nn");void Deletepcb(PCB P)struct pcb * s,*q;s=P;q=P->next;P->next=q->next;free(q);void Sort2(PCB P)/该函数的作用是将头结点的后一个节点在链表中重新排序.struct pcb * s,*q,*p;s=P->next;p=s;q=s->next;P->next=q;Sort(P,p);/ 排序函数main()int time;struct pcb * s,*q,*p;printf("Please input the size of time:");scanf("%d",&time);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论