作业调度算法C++实现

作业调度算法C++实现
作业调度算法C++实现

学号: 姓名: 班级: 实验时间: 2011-10-10

实验编号

002

实验名称 作业调度算法

实验目的和

要求 通过对作业调度算法的模拟加深对作业概念和作业调度算法的理解

实验内容

(1) 模拟FCFS 算法实现作业调度

(2) 模拟短作业优先算法实现作业调度 模拟最高相应比优先算法实现作业调度

一、 实验题目

输入:作业流文件,其中存储的是一系列要执行的作业, 每个作业包括三个数据项:

作业号、作业进入系统的时间(用一小数表示,如10:10,表示成10.10)、估计执行时间(单位小时,以十进制表示) 参数用空格隔开,下面是示例: 1 8.00 0.5 2 8.15 0.3 3 8.30 0.25 4 8.35 0.20 5 8.45 0.15 6 9.00 0.10 7 9.20 0.05

其中调度时刻为最后一个作业到达系统的时间!

输出:作业号 进入内存的时间,每行输出一个作业信息。 并输出每一种调度算法的平均周转时间和平均带权周转时间。 二、 算法设计思路

首先用一个switch 函数做界面选择进入哪一种算法。用一个内来定义作业

float s;//提交时间 float j;//执行时间 float k;//开始时间 float w;//完成时间 float z;//周转时间 float d;//带权周转时间

1, 先来先服务,首先计算第一个作业的完成时间,周转时间,带权周转时间。再用for 循

环来计算剩下每一个作业的完成时间,周转时间,带权周转时间。然后再算出平均周转时间和平均带权周转时间。

2, 短作业有优先,首先计算第一个作业的完成时间,周转时间,带权周转时间。再用来计

算其他作业的。其中在for 循环中嵌套while 函数,在每一次计算前判断处于等待状态

计算机操作系统

实验报告

的作业个数,然后按执行时间,从短到长排序,将排在第一个的作业计算。以此类推。3.响应比,与短作业优先类似,只是在排序前,循环计算一次响应比,用一个数组来存放响应比,然后按照优先比从小到大排序,然后计算。

三、算法流程图

主要的算法是响应比优先,所以这里只画了响应比优先的流程图,下面为响应比算法函数的代码:

void xyb(zuoye a[])

{

int j=0,k=0,c=0,b=0;

float m=0;

float n=0;

float x=0;

float z[N];//存放z[]数组

zuoye t;

a[0].k=a[0].s;

a[0].w=a[0].k+a[0].j;

a[0].z=a[0].w-a[0].s;

a[0].d=a[0].z/a[0].j;

m=a[0].z;

n=a[0].d;

for(j=1;j

{

k=j;

while(a[k].s<=a[j-1].w&&k

{

k++;

}

for(c=j;c

{

z[c]=(a[j-1].w-a[c].s)/a[c].j;

}

for(c=j;c

{

for(b=c+1;b

{

if(z[c]>z[b])

{

t=a[c];

a[c]=a[b];

a[b]=t;

x=z[c];

z[c]=z[b];

z[b]=x;

}

}

}

a[j].k=a[j-1].w;

a[j].w=a[j].k+a[j].j;

a[j].z=a[j].w-a[j].s;

a[j].d=a[j].z/a[j].j;

m+=a[j].z;

n+=a[j].d;

}

cout<<"响应比的平均周转时间为:"<

cout<<"响应比的平均带权周转时间为:"<

根据以上的代码画出流程图如下:

三、算法中用到的数据结构

class zuoye

{

public:

float s;//输入时间

float j;//执行时间

float k;//开始时间

float w;//完成时间

float z;//周转时间

float d;//带权周转时间

};

void fcfs(zuoye a[]);//先来服务

void dzy(zuoye a[]);//短作业优先

void xyb(zuoye a[]);//响应比

void mulu(zuoye a[]);//选择目录

void shuchu(zuoye a[]);//输出结果

四、算法的主要模块

响应比函数是其中比较重要的模块,其中计算的过程:用循环函数for来计算,

for(j=1;j

{

k=j;

while(a[k].s<=a[j-1].w&&k

{

k++;

}

/*用while函数来判断处于准备状态的工作,即输入时间<最后一个已完作业的完成时间 */

for(c=j;c

{

z[c]=(a[j-1].w-a[c].s)/a[c].j;

}

/*用循环函数来计算处于准备状态作业的响应比,在z[]为储存响应比的数组。*/ for(c=j;c

{

for(b=c+1;b

{

if(z[c]>z[b])

{

t=a[c];

a[c]=a[b];

a[b]=t;

x=z[c];

z[c]=z[b];

z[b]=x;

}

}

/*用冒泡算法按照响应比的大小,从小到大将作业进行排序*/ }

a[j].k=a[j-1].w;

a[j].w=a[j].k+a[j].j;

a[j].z=a[j].w-a[j].s;

a[j].d=a[j].z/a[j].j;

m+=a[j].z;//计算总的周转时间

n+=a[j].d;//计算总的带权周转时间

}

五、实验代码

#include"iostream.h"

# define N 30

int i=0;

class zuoye

{

public:

float s;//输入时间

float j;//执行时间

float k;//开始时间

float w;//完成时间

float z;//周转时间

float d;//带权周转时间

};

void fcfs(zuoye a[]);//先来服务

void dzy(zuoye a[]);//短作业优先

void xyb(zuoye a[]);//响应比

void mulu(zuoye a[]);//选择目录

void shuchu(zuoye a[]);//输出结果

void main()

{

zuoye a[N];

cout<<"输入0,0结束";

do

{

cout<<"请输入第"<

cin>>a[i].s>>a[i].j;

i++;

}while(i

mulu(a);

shuchu(a);

}

void mulu(zuoye a[])

{

int m;

cout<<"请选择算法:"<

cout<<"1.先来先服务算法;"<

cout<<"2.短作业优先;"<

cout<<"3.优先比算法;"<

cin>>m;

switch(m) //switch函数来选择算法

{

case 1:fcfs(a);break;

case 2:dzy(a);break;

case 3:xyb(a);break;

default:

{

cout<<"错误,请重新输入!"<

mulu(a);

}

}

}

void shuchu(zuoye a[])

{

cout<<"提交\t"<<"执行\t"<<"开始\t"<<"完成\t"<<"周转\t"<<"带权周转"<

int j;

for(j=0;j

{

cout<

}

}

void fcfs(zuoye a[])

{

int j=1;

float m=0;//总周转时间

float n=0;//总带权周转时间

a[0].k=a[0].s;

a[0].w=a[0].k+a[0].j;

a[0].z=a[0].w-a[0].s;

a[0].d=a[0].z/a[0].j;

m=a[0].z;

n=a[0].d;

for(j=1;j

{

a[j].k=a[j-1].w;//开始时间

a[j].w=a[j].k+a[j].j;//完成时间

a[j].z=a[j].w-a[j].s;//周转时间

a[j].d=a[j].z/a[j].j;//带权周转时间

m+=a[j].z;

n+=a[j].d;

}

cout<<"fcfs平均周转时间为:"<

cout<<"fcfs平均带权周转时间为:"<

}

void dzy(zuoye a[])

{

int j=0,k=0,c=0,b=0;

float m=0;

float n=0;

zuoye t;

a[0].k=a[0].s;

a[0].w=a[0].k+a[0].j;

a[0].z=a[0].w-a[0].s;

a[0].d=a[0].z/a[0].j;

m=a[0].z;

n=a[0].d;

for(j=1;j

{

k=j;

while(a[k].s<=a[j-1].w&&k

{

k++;

}

for(c=j;c

{

for(b=c+1;b

{

if(a[c].j>a[b].j)

{

t=a[c];

a[c]=a[b];

a[b]=t;

}

}

}

a[j].k=a[j-1].w;

a[j].w=a[j].k+a[j].j;

a[j].z=a[j].w-a[j].s;

a[j].d=a[j].z/a[j].j;

m+=a[j].z;

n+=a[j].d;

}

cout<<"短作业优先的平均周转时间为:"<

cout<<"短作业优先的平均带权周转时间为:"<

void xyb(zuoye a[])

{

int j=0,k=0,c=0,b=0;

float m=0;

float n=0;

float x=0;

float z[N];//存放z[]数组

zuoye t;

a[0].k=a[0].s;

a[0].w=a[0].k+a[0].j;

a[0].z=a[0].w-a[0].s;

a[0].d=a[0].z/a[0].j;

m=a[0].z;

n=a[0].d;

for(j=1;j

{

k=j;

while(a[k].s<=a[j-1].w&&k

{

k++;

}

for(c=j;c

{

z[c]=(a[j-1].w-a[c].s)/a[c].j;

}

for(c=j;c

{

for(b=c+1;b

{

if(z[c]>z[b])

{

t=a[c];

a[c]=a[b];

a[b]=t;

x=z[c];

z[c]=z[b];

z[b]=x;

}

}

}

a[j].k=a[j-1].w;

a[j].w=a[j].k+a[j].j;

a[j].z=a[j].w-a[j].s;

a[j].d=a[j].z/a[j].j;

m+=a[j].z;

n+=a[j].d;

}

cout<<"响应比的平均周转时间为:"<

cout<<"响应比的平均带权周转时间为:"<

实验数据:

1 8.00 0.5

2 8.15 0.3

3 8.30 0.25

4 8.3

5 0.20

5 8.45 0.15

6 9.00 0.10

7 9.20 0.05

1.先来先服务算法,输入作业数据,结果如下图:

先来先服务算法结果图

输入数据,知道0,0结束输入,通过1,2,3选择需要的算法,输出平均的周转时间和平均带权周转时间,下面为具体的每一个作业提交时间,执行时间,开始时间,完成时间,周转时间和带权周转时间。

2.短作业优先算法,输入作业数据,结果如下图:

短作业优先算法结果图

输入数据,知道0,0结束输入,通过1,2,3选择需要的算法,输出平均的周转时间和平均带权周转时间,下面为具体的每一个作业提交时间,执行时间,开始时间,完成时间,周转时间和带权周转时间。

3.优先比算法,输入作业数据,结果如下图:

优先比算法结果图

输入数据,知道0,0结束输入,通过1,2,3选择需要的算法,输出平均的周转时间和平均带权周转时间,下面为具体的每一个作业提交时间,执行时间,开始时间,完成时间,周转时间和带权周转时间。

六、实验总结

作业调度算法C++实现

学号: 姓名: 班级: 实验时间: 2011-10-10 实验编号 002 实验名称 作业调度算法 实验目的和 要求 通过对作业调度算法的模拟加深对作业概念和作业调度算法的理解 实验内容 (1) 模拟FCFS 算法实现作业调度 (2) 模拟短作业优先算法实现作业调度 模拟最高相应比优先算法实现作业调度 一、 实验题目 输入:作业流文件,其中存储的是一系列要执行的作业, 每个作业包括三个数据项: 作业号、作业进入系统的时间(用一小数表示,如10:10,表示成10.10)、估计执行时间(单位小时,以十进制表示) 参数用空格隔开,下面是示例: 1 8.00 0.5 2 8.15 0.3 3 8.30 0.25 4 8.35 0.20 5 8.45 0.15 6 9.00 0.10 7 9.20 0.05 其中调度时刻为最后一个作业到达系统的时间! 输出:作业号 进入内存的时间,每行输出一个作业信息。 并输出每一种调度算法的平均周转时间和平均带权周转时间。 二、 算法设计思路 首先用一个switch 函数做界面选择进入哪一种算法。用一个内来定义作业 float s;//提交时间 float j;//执行时间 float k;//开始时间 float w;//完成时间 float z;//周转时间 float d;//带权周转时间 1, 先来先服务,首先计算第一个作业的完成时间,周转时间,带权周转时间。再用for 循 环来计算剩下每一个作业的完成时间,周转时间,带权周转时间。然后再算出平均周转时间和平均带权周转时间。 2, 短作业有优先,首先计算第一个作业的完成时间,周转时间,带权周转时间。再用来计 算其他作业的。其中在for 循环中嵌套while 函数,在每一次计算前判断处于等待状态 计算机操作系统 实验报告

作业调度_实验报告

实验名 称 作业调度 实验内容1、设计可用于该实验的作业控制块; 2、动态或静态创建多个作业; 3、模拟先来先服务调度算法和短作业优先调度算法。 3、调度所创建的作业并显示调度结果(要求至少显示出各作业的到达时间,服务时间,开始时间,完成时间,周转时间和带权周转时间); 3、比较两种调度算法的优劣。 实验原理一、作业 作业(Job)是系统为完成一个用户的计算任务(或一次事物处理)所做的工作总和,它由程序、数据和作业说明书三部分组成,系统根据该说明书来对程序的运行进行控制。在批处理系统中,是以作业为基本单位从外存调入内存的。 二、作业控制块J C B(J o b C o nt r o l Bl o ck) 作业控制块JCB是记录与该作业有关的各种信息的登记表。为了管理和调度作业,在多道批处理系统中为每个作业设置了一个作业控制块,如同进程控制块是进程在系统中存在的标志一样,它是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。在JCB中所包含的内容因系统而异,通常应包含的内容有:作业标识、用户名称、用户帐户、作业类型(CPU 繁忙型、I/O 繁忙型、批量型、终端型)、作业状态、调度信息(优先级、作业已运行时间)、资源需求(预计运行时间、要求内存大小、要求I/O设备的类型和数量等)、进入系统时间、开始处理时间、作业完成时间、作业退出时间、资源使用情况等。 三、作业调度 作业调度的主要功能是根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程插入就绪队列,准备执行。 四、选择调度算法的准则 1).面向用户的准则 (1) 周转时间短。通常把周转时间的长短作为评价批处理系统的性能、选择作业调度方式与算法的重要准则之一。所谓周转时间,是指从作业被提交给系统开始,到作业完成为止的这段时间间隔(称

处理器调度习题

处理器调度 选择题 当CPU执行操作系统代码时,则处理机处于( )。 A.执行态 B.目态 C.管态 D.就绪态 ( )是机器指令的扩充,是硬件的首次延伸,是加在硬件上的第一层软件。 A.系统调用 B.操作系统 C.内核 D.特权指令 操作系统提供给程序员的接口是( )。 A.进程 B.系统调用 C.库函数 D.B和C 用户程序向系统提出使用外设的请求方式是( )。 A.作业申请 B.原语 C.系统调用 D.I/O指令 当作业正常完成进入完成状态时,操作系统( )。 A.将输出该作业的结果并删除内存中的作业 B.将收回该作业的所占资源并输出结果 C.将收回该作业的所占资源及输出结果,并删除该作业 D.将收回该作业的所占资源及输出结果,并将它的控制块从当前的队列中删除 下列选项是关于作业和进程关系的描述,其中哪一个是不正确的( )。 A.作业的概念主要用在批处理系统中,而进程的概念则用在几乎所有的OS中。 B.作业是比进程低一级的概念。 C.一个作业至少由一个进程组成。 D.作业是用户向计算机提交任务的实体,而进程是完成用户任务的执行实体以及向系统申请分配资源的基本单位。 作业从后备作业到被调度程序选中的时间称为( )。 周转时间B.响应时间C.等待调度时间D.运行时间 设有三个作业J1,J2,J3,它们同时到达,运行时间分别为T1,T2,T3,且T1≤T2≤T3,若它们在一台处理机上按单道运行,采用短作业优先算法,则平均周转时间为( )。 A.T1+T2+T3 B.1/3(T1+T2+T3) C.T1+2/3T2+1/3T3 D.T1+1/3T2+2/3T3 从作业提交给系统到作业完成的时间间隔称为作业的( )。 A.中断时间 B.等待时间 C.周转时间 D.响应时间 设有四个作业同时到达,每个作业执行时间均为2 h,它们在一台处理机上按单道方式运行,则平均周转时间为( )。 A.1 h B.5 h C.2.5 h D.8 h FCFS调度算法有利于( )。 A.长作业和CPU繁忙型作业 B.长作业和I/O繁忙型作业 C.短作业和CPU繁忙型作业 D.短作业和I/O繁忙型作业 下列哪种说法不是SJ(P)F调度算法的缺点( )。 A.对于长作业(进程)不利 B.未考虑作业(进程)的紧迫程度 C.不能有效降低作业(进程)的平均等待时间 D.由于根据的是用户提供的估计执行时间,因此不一定真正做到短而优先。 选择排队进程中等待时间最长的进程被优先调度,该调度算法是( )。 A.先来先服务调度算法B.短进程优先调度算法 C.优先权调度算法D.高响应比优先调度算法 在采用动态优先权的优先权调度算法中,如果所有进程都具有相同优先权初值,则此时的优先权调度算法实际上和( )相同。

操作系统之调度算法和死锁中的银行家算法习题答案

操作系统之调度算法和死锁中的银行家算法习 题答案 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

1. 有三个批处理作业,第一个作业 10:00 到达,需要执行 2 小时;第二个作业在10:10到达,需要执行 1 小时;第三个作业在 10:25 到达,需要执行 25 分钟。分别采用先来先服 务,短作业优先和最高响应比优先三种调度算法,各自的平均周转时间是多少?解: 先来先服务: (结束时间=上一个作业的结束时间+执行时间 周转时间=结束时间-到达时间=等待时间+执行时间) 按到达先后,执行顺序:1->2->3 短作业优先: 1)初始只有作业1,所以先执行作业1,结束时间是12:00,此时有作业2和3; 2)作业3需要时间短,所以先执行; 3)最后执行作业2 最高响应比优先:

高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。 1)10:00只有作业1到达,所以先执行作业1; 2)12:00时有作业2和3, 作业2:等待时间=12:00-10:10=110m;响应比=1+110/60=2.8; 作业3:等待时间=12:00-10:25=95m,响应比=1+95/25=4.8; 所以先执行作业3 3)执行作业2 2. 在一单道批处理系统中,一组作业的提交时刻和运行时间如下表所示。试计算一下三种 作业调度算法的平均周转时间 T 和平均带权周转时间 W。 ( 1)先来先服务;( 2)短作业优先( 3)高响应比优先 解: 先来先服务: 作业顺序:1,2,3,4 短作业优先: 作业顺序:

进程调度算法实验报告

操作系统实验报告(二) 实验题目:进程调度算法 实验环境:C++ 实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较 各种算法的性能优劣。 实验内容:编程实现如下算法: 1.先来先服务算法; 2.短进程优先算法; 3.时间片轮转调度算法。 设计分析: 程序流程图: 1.先来先服务算法 开始 初始化PCB,输入进程信息 各进程按先来先到的顺序进入就绪队列 结束 就绪队列? 运行 运行进程所需CPU时间 取消该进程 2.短进程优先算法

3.时间片轮转调度算法 实验代码: 1.先来先服务算法 #include #define n 20 typedef struct { int id; //进程名

int atime; //进程到达时间 int runtime; //进程运行时间 }fcs; void main() { int amount,i,j,diao,huan; fcs f[n]; cout<<"请输入进程个数:"<>amount; for(i=0;i>f[i].id; cin>>f[i].atime; cin>>f[i].runtime; } for(i=0;if[j+1].atime) {diao=f[j].atime; f[j].atime=f[j+1].atime; f[j+1].atime=diao; huan=f[j].id; f[j].id=f[j+1].id; f[j+1].id=huan; } } } for(i=0;i #define n 5 #define num 5 #define max 65535 typedef struct pro { int PRO_ID; int arrive_time;

作业调度算法(先来先服务算法,短作业算法)

《操作系统》实验报告 题目:作业调度算法 班级:网络工程 姓名:朱锦涛 学号:E31314037

一、实验目的 用代码实现页面调度算法,即先来先服务(FCFS)调度算法、短作业优先算法、高响应比优先调度算法。通过代码的具体实现,加深对算法的核心的理解。 二、实验原理 1.先来先服务(FCFS)调度算法 FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行的时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。然后把它放入就绪队列。 2.短作业优先算法 SJF算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业和进程调度。在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存。 3、高响应比优先调度算法

高响应比优先调度算法则是既考虑了作业的等待时间,又考虑了作业的运行时间的算法,因此既照顾了短作业,又不致使长作业等待的时间过长,从而改善了处理机调度的性能。 如果我们引入一个动态优先级,即优先级是可以改变的令它随等待的时间的延长而增加,这将使长作业的优先级在等待期间不断地增加,等到足够的时间后,必然有机会获得处理机。该优先级的变化规律可以描述为: 优先权 = (等待时间 + 要求服务时间)/要求服务时间 三、实验内容 源程序: #include #include #include struct work { i nt id; i nt arrive_time;

3-2 作业调度算法

第二讲作业调度算法主讲教师:张新彩

3.2 作业调度算法 3.2.1 先来先服务算法 3.2.2 短作业 / 进程优先算法 3.2.3 优先级调度算法 3.2.4 高响应比优先调度算法

3.2.1 先来先服务算法 ?适用于作业调度 ?从后备作业队列中选择一个或多个最先进入的作业,将 它们调入内存,为它们分配资源、创建进程,然后放入 就绪队列。 ?适用于进程调度 ?从就绪进程队列中选择一个最先进入的进程,为之分配 处理机,使之投入运行;直到运行完成或阻塞,才会让 出处理机。

3.2.1 先来先服务算法 4 平均周转时间为(4+6+10+11+14)/5=9 作业A 、B 、C 、D 、E 分别在0、1、2、3、4时刻到达,需要的服务时间分别为4、3、5、2、4。请用先来先服务算法计算它们的完成时间、周转时间、带权周转时间和平均周转时间。 作业 名 到达 时间 服务 时间 开始执 行时间 完成 时间 周转 时间 带权周 转时间 A 4 B 1 3 C 2 5 D 3 2 E 4 4 4 7 12 14 1 2 2 5.5 0 4 7 12 4 6 10 11 18 3.5 14 14 简单易实现,有利于长作业,不利于短作业

3.2.2 短作业 / 进程优先算法 ?短作业优先(SJF) ?从后备队列中选择一个或多个估计运行时间最短的作业 调入内存。 ?短进程优先(SPF) ?从就绪队列中选出一个估计运行时间最短的进程,将处 理机分配给它,使它立即执行。

3.2.2 短作业 / 进程优先算法 6 平均周转时间为(4+3+8+9+16)/5=8 作业 名 到达 时间 服务 时间 开始执 行时间 完成 时间 周转 时间 带权周 转时间 作业A 、B 、C 、D 、E 分别在0、1、2、3、4时刻到达,需要的服务时间分别为4、3、5、2、4。请用短作业优先算法计算它们的完成时间、周转时间、带权周转时间和平均周转时间。 4 1 0 4 6 1. 5 4 3 9 8/3 6 8 13 9/4 9 9 18 16/5 13 16 D 3 2 B 1 3 E 4 4 C 2 5 A 0 4

先来先服务FCFS和短作业优先SJF进程调度算法_实验报告材料

先来先服务FCFS和短作业优先SJF进程调度算法 1、实验目的 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。 2、需求分析 (1) 输入的形式和输入值的范围 输入值:进程个数Num 范围:0

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。 4、详细设计 5、调试分析 (1)调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析 ○1开始的时候没有判断进程是否到达,导致短进程优先算法运行结果错误,后来加上了判断语句后就解决了改问题。 ○2 基本完成的设计所要实现的功能,总的来说,FCFS编写容易,SJF 需要先找到已经到达的进程,再从已经到达的进程里找到进程服务时间最短的进程,再进行计算。 (2)算法的改进设想 改进:即使用户输入的进程到达时间没有先后顺序也能准确的计算出结果。(就是再加个循环,判断各个进程的到达时间先后,组成一个有序的序列) (3)经验和体会 通过本次实验,深入理解了先来先服务和短进程优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了记忆。 6、用户使用说明 (1)输入进程个数Num

操作系统短作业优先调度算法

课程设计 采用短作业优先调度算法调度程序 学号: 姓名: 专业: 指导老师: 日期:

目录 一、实验题目 (3) 二、课程设计的目的 (3) 三、设计内容 (3) 四、设计要求 (3) 五、主要数据结构及其说明 (4) 六、程序运行结果 (5) 七、流程图 (7) 八、源程序文件 (9) 九、实验体会 (13) 十、参考文献 (13)

摘要 在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统性能(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。 在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言,通常需要经历作业调度和进程调度两个过程后方能获得处理机。作业调度是对成批进入系统的用户作业,根据作业控制块的信息,按一定的策略选取若干个作业使它们可以去获得处理器运行的一项工作。而对每个用户来说总希望自己的作业的周转时间是最小的,短作业优先(SJF)便是其中一种调度方法。本次课程设计主要是模拟短作业优先(SJF)调度算法。

一、实验题目 采用短作业优先算法的的进程调度程序 二、课程设计的目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。 进一步巩固和复习操作系统的基础知识。 培养学生结构化程序、模块化程序设计的方法和能力。 提高学生调试程序的技巧和软件设计的能力。 提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。 三、设计内容 设计并实现一个采用短作业优先算的进程调度算法演示程序 四、设计要求 1. 每一个进程有一个PCB,其内容可以根据具体情况设定。 2. 进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定 3. 可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、进程优先级的初始化 4. 可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间同步关系,故只有两种状态) 5. 采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列

处理器调度习题教学内容

处理器调度习题

处理器调度 选择题 ?当CPU执行操作系统代码时,则处理机处于( )。 ?A.执行态 B.目态 C.管态 D.就绪态 ?( )是机器指令的扩充,是硬件的首次延伸,是加在硬件上的第一层软件。 ?A.系统调用 B.操作系统 C.内核 D.特权指令 ?操作系统提供给程序员的接口是( )。 ?A.进程 B.系统调用 C.库函数 D.B和C ?用户程序向系统提出使用外设的请求方式是( )。 ?A.作业申请 B.原语 C.系统调用 D.I/O指令 ?当作业正常完成进入完成状态时,操作系统( )。 ?A.将输出该作业的结果并删除内存中的作业 ?B.将收回该作业的所占资源并输出结果 ?C.将收回该作业的所占资源及输出结果,并删除该作业 ?D.将收回该作业的所占资源及输出结果,并将它的控制块从当前的队列中删除 ?下列选项是关于作业和进程关系的描述,其中哪一个是不正确的( )。 ?A.作业的概念主要用在批处理系统中,而进程的概念则用在几乎所有的OS中。 ?B.作业是比进程低一级的概念。 ?C.一个作业至少由一个进程组成。 ?D.作业是用户向计算机提交任务的实体,而进程是完成用户任务的执行实体以及向系统申请分配资源的基本单位。 ?作业从后备作业到被调度程序选中的时间称为( )。 ?周转时间B.响应时间C.等待调度时间D.运行时间 ?设有三个作业J1,J2,J3,它们同时到达,运行时间分别为T1,T2,T3,且T1≤T2≤T3,若它们在一台处理机上按单道运行,采用短作业优先算法,则平均周转时间为( )。 ?A.T1+T2+T3 B.1/3(T1+T2+T3) ?C.T1+2/3T2+1/3T3 D.T1+1/3T2+2/3T3 ?从作业提交给系统到作业完成的时间间隔称为作业的( )。 ?A.中断时间 B.等待时间 C.周转时间 D.响应时间 ?设有四个作业同时到达,每个作业执行时间均为2 h,它们在一台处理机上按单道方式运行,则平均周转时间为( )。 ?A.1 h B.5 h C.2.5 h D.8 h ?FCFS调度算法有利于( )。 ?A.长作业和CPU繁忙型作业 B.长作业和I/O繁忙型作业 ?C.短作业和CPU繁忙型作业 D.短作业和I/O繁忙型作业 ?下列哪种说法不是SJ(P)F调度算法的缺点( )。 ?A.对于长作业(进程)不利 ?B.未考虑作业(进程)的紧迫程度 ?C.不能有效降低作业(进程)的平均等待时间 ?D.由于根据的是用户提供的估计执行时间,因此不一定真正做到短而优先。 ?选择排队进程中等待时间最长的进程被优先调度,该调度算法是( )。 ?A.先来先服务调度算法B.短进程优先调度算法 ?C.优先权调度算法D.高响应比优先调度算法 ?在采用动态优先权的优先权调度算法中,如果所有进程都具有相同优先权初值,则此时的优先权调度算法实际上和( )相同。 ?A.先来先服务调度算法B.短进程优先调度算法

作业调度实验报告

作业调度实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

实验二作业调度 一.实验题目 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 (1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。 (2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。 (3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。 2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。 二.实验目的: 本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三 .实验过程 <一>单道处理系统作业调度 1)单道处理程序作业调度实验的源程序: 执行程序: 2)实验分析:

1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU 时限等因素。 2、每个作业由一个作业控制块JCB 表示,JCB 可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W 。 3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。 3)流程图: 二.最短作业优先算法 三.高响应比算法 图一.先来先服务流程图 4)源程序: #include <> #include <> #include <> #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 int n; float T1=0,T2=0; int times=0; struct jcb .\n",p->name); free(p); .wait...",time); if(times>1000) 代替 代替

先来先服务和短作业优先调度算法

操作系统》实验一实验报告 【实验题目】:先来先服务FCFS 和短作业优先SJF进程调度算法【实验目的】 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。 【实验内容】 问题描述: 设计程序模拟进程的先来先服务FCFS 和短作业优先SJF 调度过程。假设有n个进程分别在T1, ?,T n时刻到达系统,它们需要的服务时间分别为S1, ?,S n。分别采用先来先服务FCFS和短作业优先SJF 进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n 个进程的平均周转时间和平均带权周转时间。 程序要求如下: 1)进程个数n;每个进程的到达时间T1, ?,T n 和服务时间S1, ?,S n;选择算法1-FCFS,2-SJF。 2)要求采用先来先服务FCFS 和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间; 3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程 B 开始运行”等等;

4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间, 所有进程的平均周转时间,带权平均周转时间 【实验过程】 #include using namespace std; #define MaxNum 100 int ArrivalTime[MaxNum]; double ServiceTime[MaxNum]; double FinishTime[MaxNum]; double WholeTime[MaxNum]; double AVEWholeTime[MaxNum]; double AVEWeightWholeTime[MaxNum]; double WeightWholeTime[MaxNum]; double AverageWT_FCFS,AverageWT_SJF; double AverageWWT_FCFS,AverageWWT_SJF; double AllTime,WeightAllTime; double a[MaxNum]; int b[MaxNum]; int c[MaxNum]; int d[MaxNum]; void FCFS(); void SJF(); void FCFS() { int ProcessNum; cout<<" --------- 先来先服务算法"<

作业调度实验报告

实验二作业调度 一. 实验题目 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业调度算法:分别采用先来先服务(FCFS,最短作业优先(SJF)、响应 比高者优先(HRN的调度算法。 (1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业, 先提交的先被挑选。 (2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准, 总是优先选取执行时间最短的作业。 (3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。 2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进 行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。 二. 实验目的: 本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解 三. 实验过程 < 一>单道处理系统作业调度 1)单道处理程序作业调度实验的源程序: zuoye.c 执行程序: zuoye.exe 2)实验分析:

1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资 源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到 满足,它所占用的CPU时限等因素。 2、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、 提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业 的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一 每个作业的最初状态总是等待W 3、对每种调度算法都要求打印每个作业幵始运行时刻、完成时刻、周转时 间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间 3) 流程图: .最短作业优先算法 三.高响应比算法 图一.先来先服务流程图 4) 源程序: #in elude #in elude #in elude vconi o.h> #defi ne getpeh(type) (type*)malloc(sizeof(type)) #defi ne NULL 0 int n; float T1=0,T2=0; int times=0;

操作系统实验报告-作业调度

作业调度 一、实验目的 1、对作业调度的相关内容作进一步的理解。 2、明白作业调度的主要任务。 3、通过编程掌握作业调度的主要算法。 二、实验内容及要求 1、对于给定的一组作业, 给出其到达时间和运行时间,例如下表所示: 2、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。 3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。

测试数据 workA={'作业名':'A','到达时间':0,'服务时间':6} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} 运行结果 先来先服务算法 调度顺序:['A', 'B', 'C', 'D', 'E', 'F'] 周转时间: 带权周转时间:

短作业优先算法 调度顺序:['A', 'D', 'F', 'C', 'E', 'B'] 周转时间: 带权周转时间:1. 响应比高者优先算法 调度顺序:['A', 'D', 'F', 'E', 'C', 'B'] 周转时间: 带权周转时间: 五、代码 #encoding=gbk workA={'作业名':'A','到达时间':0,'服务时间':6,'结束时间':0,'周转时间':0,'带权周转时间':0} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} list1=[workB,workA,workC,workD,workE,workF] list2=[workB,workA,workC,workD,workE,workF] list3=[workB,workA,workC,workD,workE,workF] #先来先服务算法 def fcfs(list): resultlist = sorted(list, key=lambda s: s['到达时间']) return resultlist #短作业优先算法 def sjf(list): time=0 resultlist=[] for work1 in list: time+=work1['服务时间'] listdd=[] ctime=0 for i in range(time): for work2 in list: if work2['到达时间']<=ctime: (work2) if len(listdd)!=0: li = sorted(listdd, key=lambda s: s['服务时间']) (li[0]) (li[0]) ctime+=li[0]['服务时间'] listdd=[]

操作系统实验 FCFS和短作业优先SJF调度算法模拟

. 题目先来先服务FCFS和短作业优先SJF进程调度算法 姓名: 学号: 专业: 学院: 指导教师:林若宁 二零一八年十一月

一、实验目的 模拟单处理器系统的进程调度,分别采用短作业优先和先来先服务的进程调度算法作为进程设计算法,以加深对进程的概念及进程调度算法的理解. 二、实验内容 1. 短作业优先调度算法原理 短作业优先调度算法,是指对短作业或断进程优先调度的算法。它们可以分别可以用于作业调度和进程调度。短作业优先调度算法,是从后备队列中选择一个或若干个运行时间最短的作业,将它们调入内存运行。短进程优先调度算法,是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。 2. 先来先服务调度算法原理 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。 三、程序设计 1.概要设计 程序包括主函数、FCFS算法函数、SJF算法函数、输出函数;主函数流程:输入文件中的数据—显示各进程数据—选择算法—调用相应算法的函数—输出结果 2.算法流程

SJF算法流程图:

3.详细设计 (1)定义一个结构体 typedef struct PCB { char job_id[10]; //作业ID float Arr_time; //到达时刻 float Fun_time; //估计运行时间 float Wait_time; //等待时间 float Start_time; //开始时刻 float Fin_time; //完成时刻 float Tur_time; //周转时间 float WTur_time; //带权周转时间 int Order; //优先标记 }list; (2)先来先服务算法函数 void fcfs(list *p,int count) //先来先服务算法{ list temp; //临时结构体变量int i; int j;

操作系统作业调度算法

操作系统上机测试作业调度算法算法 一、实验目的和要求(供参考) 1.掌握作业调度功能和调度程序常用算法。 2.掌握利用C语言设计实现不同调度策略的作业调度算法。 3.验证不同作业调度算法对性能的影响。 二、实验环境(供参考) 1.知识准备:学过进程管理、作业管理、处理机调度等章节的内容。 2.开发环境与工具: 硬件平台——个人计算机。 软件平台——C语言开发环境。 三、实验内容 用“先来先服务(FCFS)”算法和“最短作业优先(SJF)”算法模拟作业调度。 要求:按作业的到达顺序输入各作业需要的运行时间,按算法调度输出平均周转时间。 例如(FCFS),输入:8(到达时间0),5(到达时间2),7(到达时间3),1(到达时间6)J1 J2 J3 J4 0 8 13 20 21 输出:aver=(8+(13-2)+(20-3)+(21-6))/4=51/4 例如(SJF),输入:8(到达时间0),5(到达时间2),7(到达时间3),1(到达时间6)J1 J4 J2 J3 0 8 9 14 21 输出:aver=(8+(9-6)+(14-2)+(21-3))/4=42/4 注:输入的格式任意,只要输出平均周转时间即可。

四、代码(带注释) 1、先来先服务 实验结果(截图呈现) 代码: #include using namespace std; class Fcfs { private: int num[10]; //作业编号 double arriveTime[10]; //到达时间 double startTime[10]; //开始时间,进内存时间 double workTime[10]; //工作时间 double finishTime[10]; //完成时间 double cirTime[10]; //存放每一个作业的周转时间 //double freeTime[10]; //上一个作业已结束,但下一个作业还未到,存放这一段空闲时间 public: Fcfs(int n) //n为作业数目 { cout<<"默认第一个作业的到达时间为0。"<

各类作业调度算法

实验二作业调度实验 一. 目的要求: 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二. 例题:为单道批处理系统设计一个作业调度程序。 由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。 作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。 每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。 作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。 各个等待的作业按照提交时刻的先后次序排队,总是首先调度等待队列中队首的作业。 每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。 调度算法的流程图如下图所示。

三 . 实习题: 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。 2、编写并调度一个多道程序系统的作业调度模拟程序。

作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。 3、编写并调试一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于优先级的作业调度。 可以参考课本中的例子自行设计。 三 . 实验过程: 1、编写并调试一个单道处理系统的作业等待模拟程序。 先来先服务(FCFS): main.cpp: /* **先来先服作业调度算法模拟 */ #include #include #define MAX_SOURCE 1000 //资源总数(对于单通道的作业调度可以忽略系统资源问题) using namespace std; struct jobCB { string name; double subtime;//提交时间 double runtime;//运行时间 double source;//资源 char state;//进程状态 struct jobCB *next; //链指针 }*ready,*rail,*p; int length; double maxsource; double now_source; double allTi;//总周转时间 double allWi;//总带权周转时间 double time;//时钟 void init()

FCFS和SJF进程调度算法实验报告

FCFS和SJF进程调度算法实验报告 【实验题目】:编写程序,实现FCFS和SJF算法,模拟作 业调度过程,加深对作业调度的理解。 【实验内容】 实现FCFS和SJF调度算法。 –数据结构设计(JCB,后备作业队列) –算法实现与模拟(排序、调度) –输出调度结果,展示调度过程并解释 【实验要求】 1. 设计作业控制块(JCB)的数据结构 –应包含实验必须的数据项,如作业ID、需要的服务时间、进入系 统时间、完成时间,以及实验者认为有必要的其他数据项。 2. 实现排序算法(将作业排队) –策略1:按“进入系统时间”对作业队列排序(FCFS) –策略2:按“需要的服务时间”对作业队列排序(SJF) 3. 实现调度过程模拟 (1)每个作业用一个JCB表示,如果模拟FCFS,按策略1将作业排队,如果模拟SJF,按策略2将作业排队(2)选择队首的作业,将其从后备队列移出 (3)(作业运行过程,在本实验中,无需实现,可认为后备队列的 作业一但被调度程序选出,就顺利运行完毕,可以进入第4步) (4)计算选中作业的周转时间 (5)进行下一次调度(去往第2步) 4.实现结果输出 –输出作业状态表,展示调度过程 ?初始作业状态(未调度时) ?每次调度后的作业状态 设计作业控制块(JCB)的数据结构 每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。具体结构如下:typedef struct jcb{ char name[10]; /* 作业名*/ char state; /* 作业状态*/ int ts; /* 提交时间*/ float super; /* 优先权*/ int tb; /* 开始运行时间*/ int tc; /* 完成时间*/ float ti; /* 周转时间*/ float wi; /* 带权周转时间*/ int ntime; /* 作业所需运行时间*/ char resource[10]; /* 所需资源*/ struct jcb *next; /* 结构体指针*/ } JCB; JCB *p,*tail=NULL,*head=NULL; 作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。,组成一个后备队列等待,总是首先调度等待队列中队首的作业。

相关文档
最新文档