关于暑假实践报告调度

进修社 人气:2.75W

选题:

关于暑假实践报告调度

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

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]vetime<p[j]vetime)

{

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]icetime;

if(k==0)

{

p[k]ttime=p[k]vetime;

p[k]shtime=p[k]vetime+p[k]icetime;}

else

{

p[k]ttime=p[k-1]shtime;

p[k]shtime=p[k-1]shtime+p[k]icetime;}

h[k]=p[k]ttime;

p[k]time=p[k]icetime-timeprice;

if(p[k]time>0)

{c=c+1;

p[k]time=p[k]ttime+timeprice;

p[k]shtime=p[k]time;

}

else p[k]time=p[k]shtime;

w=p[k]time;

}

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;