暑假实践报告调度

时间:2020-10-22 12:25:20 暑假实践报告 我要投稿

关于暑假实践报告调度

  选题:

关于暑假实践报告调度

  在多道程序运行环境下,进程数目一般多于处理机数目,使得进程要通过竞争来使用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机的任务是由进程调度程序完成的。一个进程被创建后,系统为了便于对进程进行管理,将系统中的所有进程按其状态,将其组织成不同的进程队列。于是系统中有运行进程队列、就绪队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。进程调度的算法有多种,常用的有优先级调度算法、先来先服务算法、时间片轮转算法。

  1、先来先服务算法:

  实践要求和意义:

  (1)实践要求:

  进程的调度采用先来先服务算法。

  设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。 ? 用户输入进程标识符以及进程所需的时间,申请空间存放进程PCB信息。 ④ 输出的格式和上面的运行结果分析中的格式相同。

  (2)实践意义:

  按照进程进入就绪队列的先后次序来分配处理器;

  培养我们分析,解决问题以及自学的能力;

  提高我们书写代码以及论文文档的写作能力。

  课题实现:

  1、功能设计:

  先进入就绪队列的进程优先被挑选,运行进程一旦占有处理器将一直运行下去直到运行结束或被阻塞,这是一种非剥夺式调度。

  2、结构设计:

  (1)开始。

  (2)设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。

  (3)用户输入进程标识符以及进程所需的时间,申请空间存放进程PCB信息。

  (4)输出的格式和上面的运行结果分析中的格式相同。

  (5)结束。

  3、核心算法:

  ·先来先服务算法的核心就是到达时间的排序,核心算法为: void sort(A *p,int N) //到达时间排序

  {

  for(int i=0;i<=N-1;i++)

  for(int j=0;j<=i;j++)

  if(p[i].arrivetime<p[j].arrivetime)

  {

  A temp;

  temp=p[i];

  p[i]=p[j];

  p[j]=temp;

  }

  }

  4、数据结构:

  (1)定义进程数以及进程名称name[];

  (2)定义进程的一些属性:

  ?进程的到达时间arrivetime;

  ?进程的服务时间servicetime;

  ?进程的开始时间starttime;

  ④进程的结束时间finishtime;

  运行环境:

  (1)开发程序的操作系统:Windows XP

  (2)编译工具:visual C++ 6.0

  2、时间片轮转算法:

  实践要求和意义:

  (1)实践要求:

  进程的调度采用时间片轮转算法。

  设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。 ? 用户输入进程标识符以及进程所需的时间,申请空间存放进程 PCB信 息。

  ④ 输出的格式和上面的运行结果分析中的格式相同。

  (2)实践意义:

  使用时间片轮转算法来分配处理器;

  培养我们分析,解决问题以及自学的能力;

  提高我们书写代码以及论文文档的写作能力。

  课题实现:

  1、功能设计:

  时间片轮转调度,具体做法是调度程序每次把 CPU 分配给就绪队列首进程使用一个时间片。当这个时间片结束时,就强迫一个进程让出处理器,让它排列到就绪队列的尾部,等候下一轮调度。

  实现这种调度要使用一个间隔时钟。当一个进程开始运行时,就将时间片的值置入间隔时钟内,当发生间隔时钟中断时,就表明该进程连续运行的时间已超过一个规定的时间片。此时,中断处理程序就通知处理器调度进行处理器的切换工作。

  2、结构设计:

  (1)开始。

  (2)设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。

  (3)用户输入进程标识符以及进程所需的时间,申请空间存放进程PCB信息。

  (4)输出的格式和上面的运行结果分析中的格式相同。

  (5)结束。

  3、核心算法:

  ·时间片轮转算法主要是设置时间片,来实现轮转运行进程,核心算法为:

  void ptt(A *p,float arrivetime,float servicetime,float starttime,float finishtime,float lefttime,int timeprice,int N2)

  {

  float w=0;int c=0;

  float stoptime=0;

  printf(" 请输入时间片的值:");

  cin>>timeprice;

  sort(p,N2);

  float d[20],h[20];

  for(int k=0;k<=N2-1;k++)

  { d[k]=p[k].servicetime;

  if(k==0)

  {

  p[k].starttime=p[k].arrivetime;

  p[k].finishtime=p[k].arrivetime+p[k].servicetime;}

  else

  {

  p[k].starttime=p[k-1].finishtime;

  p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}

  h[k]=p[k].starttime;

  p[k].lefttime=p[k].servicetime-timeprice;

  if(p[k].lefttime>0)

  {c=c+1;

  p[k].stoptime=p[k].starttime+timeprice;

  p[k].finishtime=p[k].stoptime;

  }

  else p[k].stoptime=p[k].finishtime;

  w=p[k].stoptime;

  }

  4、数据结构:

  (1)定义进程数以及进程名称name[];

  (2)定义进程的一些属性:

  进程的到达时间arrivetime;

  进程的服务时间servicetime;

  进程的'开始时间starttime;

  ④进程的结束时间finishtime;

  ⑤进程的剩余时间lefttime

  ⑥时间片的时间timeprice

  运行环境:

  (1)开发程序的操作系统:Windows XP

  (2)编译工具:visual C++ 6.0

  总结&心得体会:

  本次实践课题让我了解到了什么是进程调度,其主要的功能就是根据作业控制块中的信息,审查系统是否能满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选区,分配某些作业调入内存,并且为他们创建进程,分配必要的资源。

  通过这几天的学习和同学的讲解,我总算完成了这次的进程调度实验,根据书本上的学习,来测试本系统,发现输入数据以及输出数据和预测的结果吻合,证明此次实验还是比较成功的。

  附录:

  #include

  #include

  #include

  using namespace std;

  struct A{//先来先服务算法

  char name[10];

  float arrivetime;

  float servicetime;

  float starttime;

  float finishtime;

  float lefttime;

  float stoptime;

【关于暑假实践报告调度】相关文章:

关于暑假实践报告11-30

关于暑假实践报告11-25

关于暑假实践活动报告12-30

关于暑假实践报告范文11-30

关于暑假医院实践报告范文06-30

关于暑假社会实践报告12-01

关于暑假实践报告2000字11-30

关于暑假社会实践报告11-27

关于大学暑假实践报告格式12-13

★暑假实践报告01-06