批处理系统的作业调度

批处理系统的作业调度
批处理系统的作业调度

批处理系统的作业调度

年级2009级学号姓名成绩

专业实验地点指导教师

实验项目批处理系统的作业调度

实验日期2010年10月15日

一、实验目的

加深对作业概念的理解;

深入了解批处理系统如何组织作业、管理作业和调度作业;

二、实验要求

编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。

三、实验原理:

操作系统根据允许并行工作的道数和一定的算法从系统中选取若干作业把它们装入主存储器,使它们有机会获得处理器运行,这项工作被称为“作业调度”。实现这部分功能的程序就是“作业调度程序”。

作业调度的实现主要有两个问题,一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。

为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(JCB),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。一个作业全部信息进入系统后,就为其建立作业控制块,并挂入后备队列。当进行作业调度时,从后备队列中查找选择作业。

由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源,根据需要,实验中只包括需要主存的大小(采用可移动的动态分区方式管理主存,作业大小就是需要主存的大小)、需要打印机的数量和需要磁带机的数量;采用响应比作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。

四、实验程序设计

#include "string.h"

#define n 10 /*假定系统中可容纳的作业数量为n*/ typedef struct jcb

{char name[4]; /*作业名*/

int length; /*作业长度,所需主存大小*/

int printer; /*作业执行所需打印机的数量*/

int tape; /*作业执行所需磁带机的数量*/

int runtime; /*作业估计执行时间*/

int waittime; /*作业在系统中的等待时间*/

int next; /*指向下一个作业控制块的指针*/

}JCB; /*作业控制块类型定义*/

int head; /*作业队列头指针定义*/

int tape,printer;

long memory;

JCB jobtable[n]; /*作业表*/

int jobcount=0; /*系统内现有作业数量*/

shedule( )

/*作业调度函数*/

{float xk,k;

int p,q,s,t;

do

{p=head;

q=s=-1;

k=0;

while(p!=-1)

{ if(jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p].printer<=p rinter)

{ /*系统可用资源是否满足作业需求*/

xk=(float)(jobtable[p].waittime)/jobtable[p].runtime;

if(q==0||xk>k) /*满足条件的第一个作业或者作业q的响应比小于作业p的响应比*/

{k=xk; /*记录响应比*/

q=p;

t=s;

}/*if*/

}/*if*/

s=p;

p=jobtable[p].next; /*指针p后移*/

}/*while*/

if(q!=-1)

{ if(t==-1) /*是作业队列的第一个*/

head=jobtable[head].next;

else

jobtable[t].next=jobtable[q].next;

/*为作业q分配资源:分配主存空间;分配磁带机;分配打印机*/

memory=memory-jobtable[q].length;

tape=tape-jobtable[q].tape;

printer=printer-jobtable[q].printer;

printf("选中作业的作业名:%s\n",jobtable[q].name);

}

}while(q!=-1);

}/*作业调度函数结束*/

main( )

{char name[4];

int size,tcount,pcount,wtime,rtime;

int p;

/*系统数据初始化*/

memory=65536;

tape=4;

printer=2;

head=-1;

printf("输入作业相关数据(以作业大小为负数停止输入):\n");

/*输入数据,建立作业队列*/

printf("输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间\n");

scanf("%s%d%d %d %d %d",name,&size,&tcount,&pcount,&wtime,&rtime);

while(size!=-1)

{/*创建JCB*/

if(jobcount

else { printf("无法再创建作业\n");

break;

}

jobcount++;

/*填写该作业相关内容*/

strcpy(jobtable[p].name,name);

jobtable[p].length=size;

jobtable[p].printer=pcount;

jobtable[p].tape=tcount;

jobtable[p].runtime=rtime;

jobtable[p].waittime=wtime;

/*挂入作业队列队首*/

jobtable[p].next=head;

head=p;

/* 输入一个作业数据*/

printf("输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间\n");

scanf("%s%d%d%d%d%d",name,&size,&tcount,&pcount,&wtime,&rtime);

}/*while*/

shedule( ); /*进行作业调度*/

}/*main( )函数结束*/

五、实验结果

作业批处理调度java代码及实例

代码 FlowShop类 public class FlowShop { static int n, //作业数; f1, //机器1完成处理时间; f, //完成时间和; bestf; //当前最优值; static int [][]m; //各作业所需的处理时间; static int []x; //当前作业调度; static int []bestx; //当前最优作业调度; static int []f2; //机器2完成处理时间; private void backtrack(int i) { if(i>n) { for (int j=1;j<=n;j++) { bestx[j]=x[j]; System.out.print(x[j]+" "); } System.out.println(); bestf=f; System.out.println("每条深度优先搜索结果为:"+bestf); } else for(int j=i;j<=n;j++) { f1+=m[x[j]][0]; f2[i]=((f2[i-1]>f1)? f2[i-1]:f1)+m[x[j]][1]; f+=f2[i]; if(f

public void ShowTest() { n=3; bestf=Integer.MAX_VALUE; f1=0; f=0; int [][]m={{0,0},{2,1},{3,1},{2,3}}; int []x={0,1,2,3}; int []bestx={0,1,2,3}; f2=new int[4]; this.m = m; this.x=x; this.bestx=bestx; this.f2=f2; backtrack(1); System.out.println("当前最优值:"+bestf); System.out.println("当前最优作业调度"); for(int i=1;i<=n;i++) { System.out.print(bestx[i]+" "); } } public static void main(String[] args) { FlowShop fs=new FlowShop(); fs.ShowTest(); } } MyMath类 public class MyMath { public void MyMath(){} public static int[] swap(int[] x,int i,int j) { int ex; ex=x[j]; x[j]=x[i]; x[i]=ex; return x; }

模拟批处理多道操作系统的作业调度

石家庄经济学院 实验报告 (学院)系: 信息工程学院 专业: 网络工程 姓名: 何秉乾 班级: 网络2班 学号: 407109070501 指导教师: 王建东 日期:2010 年 1月 22 日

操作系统实验报告 姓名何秉乾学号407109070501 日期2010/1/11-2010/1/22 实验室260机房指导教师王建东设备编号 作业调度 设计题 目 一.设计内容 模拟批处理多道操作系统的作业调度 二.设计目的 每个用户请求计算机计算的一个计算任务叫做一个作业。一个作业从输入初始数据到得到计算结果,要经过若干个步骤的相继执行。例如,编辑、编译、运行等,其中每一个步骤称作一个作业步。用户向系统提出作业加工步骤的方式称作业控制方式,作业控制方式有两种:终端控制方式(又称直接控制方式或联机控制方式)和批处理控制方式(又称自动控制方式或脱机控制方式)。 在批处理控制方式下,用户采用系统提供的作业控制语言(JCL)写好作业说明书,说明作业加工的步骤。操作员把一批作业组织成输入流,通过“预输入”手段使每个作业的信息(包括作业说明书、源程序、初始数据等)暂存在辅助存储器的“输入井”中。 批处理多道操作系统的作业管理有两个任务:作业调度和作业控制。采用多道程序设计方法的操作系统,在系统中要经常保留多个运行的作业,以提高系统效率。作业调度从系统已接纳的暂存在输入井中的一批作业中挑选出若干个可运行的作业,并为这些被选中的作业分配所需的系统资源。对被选中运行的作业必须按照它们各自的作业说明书规定的步骤进行控制。 本实习要求学生模拟作业调度的实现,了解作业调度在操作系统中的作用。 三.设计过程 1、数据结构设计: 设计一个结构体数组 typedef struct work{ char username[10]; //用户名 char workname[10]; //作业名 float time; //作业运行时间 char state; //状态R为收容,A表示执行状态,T为完成 int store; //主存 int tape; //磁带 }WORK; WORK w[N]; //工作数组 初始化操作 printf("初始化:\n"); for(i=0;i

实验1-批处理作业调度

批处理系统的作业调度 1.实验目的 加深对作业概念的理解; 深入了解批处理系统如何组织作业、管理作业和调度作业; 2.实验预备知识 作业的概念; 作业的创建; 作业的调度。 3.实验内容 编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。 4.提示与讲解 操作系统根据允许并行工作的道数和一定的算法从系统中选取若干作业把它们装入主存储器,使它们有机会获得处理器运行,这项工作被称为“作业调度”。实现这部分功能的程序就是“作业调度程序”。 作业调度的实现主要有两个问题,一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。 为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(JCB),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。一个作业全部信息进入系统后,就为其建立作业控制块,并挂入后备队列。当进行作业调度时,从后备队列中查找选择作业。 由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源,根据需要,实验中只包括需要主存的大小(采用可移动的动态分区方式管理主存,作业大小就是需要主存的大小)、需要打印机的数量和需要磁带机的数量;采用响应比作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。 实验中,作业控制块及队列的数据结构定义如下。 typedef struct jcb {char name[4]; //作业名 int length; //作业长度,所需主存大小 int printer; //作业执行所需打印机的数量 int tape; //作业执行所需磁带机的数量 int runtime; //作业估计执行时间 int waittime; //作业在系统中的等待时间 int next; //指向下一个作业控制块的指针 }JCB //作业控制块类型定义

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

实验二作业调度 一.实验题目 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)的调度算法。 (1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。 (2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。 二.实验目的: 本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解 三.实验过程 <一>单道处理系统作业调度 1)单道处理程序作业调度实验的源程序: zuoye.c 执行程序: zuoye.exe 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 //作业控制块 { char name[10]; //作业名 int reachtime; //作业到达时间

作业调度实例(全部代码)

源代码: #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 //作业控制块 { char name[10]; //作业名 int reachtime; //作业到达时间 int starttime; //作业开始时间 int needtime; //作业需要运行的时间 float super; //作业的响应比 int finishtime; //作业完成时间 float cycletime; //作业周转时间 float cltime; //作业带权周转时间 char state; //作业状态 struct jcb *next; //结构体指针 }*ready=NULL,*p,*q; typedef struct jcb JCB; void inize() //初始化界面 { printf("\n\n\t\t*********************************************\t\t\n"); printf("\t\t\t\t单道批处理作业调度系统\n"); printf("\t\t*********************************************\t\t\n"); printf("\n\n\n\t\t\t\t\t09软件+电子商务2班\n"); printf("\t\t\t\t\t\t黄才旺\n\n"); printf("\n\n\n\t\t请按任意键进入主菜单:"); getch(); } void inital() //建立作业控制块队列,先将其排成先来先服务的模式队列{ int i; printf("\n输入作业数:"); scanf("%d",&n); for(i=0;iname); getch();

实验一 批处理系统的作业调度

实验一批处理系统的作业调度 一、实验目的 1.加深对作业概念的理解。 2.深入了解批处理系统如何组织作业、管理作业和调度作业。 二、实验预备知识 1.作业的概念。 2.作业的创建。 3.作业的调度。 三、实验内容 编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所做工作进行测试。 四、提示与讲解 操作系统根据允许并行工作的道数和一定的算法从系统中选取若干作业把它们装入主存储器,使它们有机会获得处理器运行,这项工作被称为“作业调度”。实现这部分功能的程序就是“作业调度程序”。 作业调度的实现主要有两个问题,一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。 为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(JCB),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。一个作业全部信息进入系统后,就为其建立作业控制块,并挂入后备队列。当进行作业调度时,从后备队列中查找选择作业。 由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源,根据需要,实验中只包括需要主存的大小(采用可移动的动态分区方式管理主存,作业大小就是需要主存的大小)、需要打印机的数量和需要磁带机的数量;采用响应比作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。 实验中,作业控制块及队列的数据结构定义如下: typedef struct jcb { char name[4]; //作业名 int length; //作业长度,所需主存大小 int printer; //作业执行所需打印机的数量 int tape; //作业执行所需磁带机的数量 int runtime; //作业估计执行时间 int waittime; //作业在系统中的等待时间 int next; //指向下一个作业控制块的指针 } JCB //作业控制块类型定义 存放作业控制块的区域: #define n 10 //假定系统中可容纳的作业数量为n JCB jobtable[10]; //作业表

PBS作业调度使用方法

PBS作业调度使用方法: 1.IBM HPC Platform 作业提交流程 用户需要使用集群资源进行作业计算时,需要使用作业调度系统。 IBM HPC Platform集群采用的是开源的Torque+Maui作业调度系统。 ●任何用户都需要产生Job_que.sh任务作业脚本: >> genQue 当前文件夹下会产生一个Job_que.sh 的shell作业脚本文件 ●编辑Job_que.sh任务作业脚本: >> vi Job_que.sh ●提交Job_que.sh任务作业脚本: >> qsub Job_que.sh 注意:在Job_que.sh中,所有任务的运行时间超过120小时的情况下,job作业将会被自动停止!如果有疑问和延长作业运行时间的需要请直接联系管理员。 具体的更多关于任务作业脚本的说明、使用和提交请参考vi和本章第2小节:Torque PBS作业调度系统使用说明。 2.Torque PBS作业调度系统使用说明 Torque PBS 提供对批处理作业和分散的计算节点(Compute nodes)的控制。 PBS是Protable Batch System的缩写,是一个任务管理系统。当多个用户使用同一个计算资源时,每个用户用PBS脚本提交自己的任务,由PBS对这些任务进行管理和资源的分配。 ●matlab作业的PBS脚本说明:

#!/bin/sh #PBS -N JOB #PBS -l nodes=1:ppn=8 #PBS -l feature=xe #PBS -l naccesspolicy=singlejob #PBS -o RunJob.out #PBS -e RunJob.err #PBS -l walltime=120:00:00 #PBS -q batch echo --------- `date` ---------- echo HomeDirectory is $PWD echo echo Current Dir is $PBS_O_WORKDIR echo cd $PBS_O_WORKDIR echo "------------This is the node file -------------" cat $PBS_NODEFILE echo "-----------------------------------------------" cat $PBS_NODEFILE > host.mpd np=$(cat $PBS_NODEFILE | wc -l) echo The number of core is $np echo echo #-----------------------------------------------------# # OpenMPI Job Submitting Example # # # mpirun -np $np -machinefile host.mpd $BINPATH ... # # #-__--------------------------------------------------# # -__- have fun! # matlab –nojvm –nodesktop < test.m > log 将这个脚本保存成为Job_que.sh后,使用然后qsub Job_que.sh就将这个任务提交给了系统。最后可以通过查看我那件下面log文件查看程序运行结果。

操作系统作业调度实验报告-多道批处理

计算机学院计算机科学与技术专业07 班 姓名学号教师评定_________________ 实验题目作业调度 一、实验目的 本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。 二、实验内容和要求 1、为单道批处理系统设计一个作业调度程序 (1)、编写并调试一个单道处理系统的作业调度模拟程序。 (2)、作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)的调度算法。 (3)、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。 (4)、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。 (5)、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。 2、模拟批处理多道操作系统的作业调度 (1)写并调试一个作业调度模拟程序。 (2)作业调度算法:分别采用先来服务(FCFS)调度算法。 (3)在批处理系统中,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求,所需要的资源是否得到满足。 作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理机运行。作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业要求,那么,作业调度必须按一定的算法在这些作业中作出选择。当作业正常运行完毕或因发生错误非正常终止时,作业进入完成状态,此时,系统将收回该作业所占用的全部资源,并清除有关的JCB。并输出显示作业运行情况及作业输出结果。 三、实验设计方案及原理 假设在单道批处理环境下有四个作业JOB1、JOB2、JOB3、JOB4,已知它们进入系统的时间、估计运行时间。分别采用先来先服务(FCFS),最短作业优先(SJF)调度算法,

操作系统实验报告-批处理系统的作业调度

实验一批处理系统的作业调度 一.实验目的 (1)加深对作业概念的理解。 (2)深入了解批处理系统如何组织作业、管理作业和调度作业。 二.实验内容 编写程序完成批处理系统的作业调度,要求采用响应比优先调度算法。 三.实验原理 最高响应比优先法(HRRN)是对FCFS方式和SJF 方式的一种综合平衡。HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下: R=(W+T)/T=1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。 每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用HRRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。 四.实验部分源程序 实验中,作业控制块及队列的数据结构定义如下: struct task { string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/ int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/ int finTime; /*结束运行时间*/ int turTime; /*周转时间*/ int wTuTime; /*带权周转时间*/ int priority;/*优先权*/ int finish;/*是否已经完成*/ }JCB[10]; 存放作业控制块的区域: #define n 10 JCB jobtable[10]; int jobcount;

分支限界法-批处理调度问题

【分支限界法】批处理作业调度问题 问题描述 给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。 批处理作业调度问题要求对于给定的n个作业,制定最佳作业调度方案,使其完成时间和达到最小。 例:设n=3,考虑以下实例: 这3个作业的6种可能的调度方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1;它们所相应的完成时间和分别是19,18,20,21,19,19。易见,最佳调度方案是1,3,2,其完成时间和为18。 限界函数

批处理作业调度问题要从n个作业的所有排列中找出具有最小完成时间和的作业调度,所以如图,批处理作业调度问题的解空间是一颗排列树。 在作业调度问相应的排列空间树中,每一个节点E都对应于一个已安排的作业集。以该节点为根的子树中所含叶节点的完成时间和可表示为: 设|M|=r,且L是以节点E为根的子树中的叶节点,相应的作业调度为{pk,k=1,2,……n},其中pk是第k个安排的作业。如果从节点E到叶节点L的路上,每一个作业pk在机器1上完成处理后都

能立即在机器2上开始处理,即从p r+1开始,机器1没有空闲时间,则对于该叶节点L有: 注:(n-k+1)t1pk,因为是完成时间和,所以,后续的(n-k+1)个作业完成时间和都得算上t1pk。 如果不能做到上面这一点,则s1只会增加,从而有:。 类似地,如果从节点E开始到节点L的路上,从作业p r+1开始,机器2没有空闲时间,则: 同理可知,s2是的下界。由此得到在节点E处相应子树中叶节点完成时间和的下界是: 注意到如果选择Pk,使t1pk在k>=r+1时依非减序排列,S1则取得极小值。同理如果选择Pk使t2pk依非减序排列,则S2取得极小值。 这可以作为优先队列式分支限界法中的限界函数。

回溯算法解决批处理作业

回溯算法---解决批处理作业调度问题 1、问题的描述 n个作业{1, 2, …, n}要在两台机器上处理,每个作业必须先由机器1处理,然后再由机器2处理,机器1处理作业i所需时间为ai,机器2处理作业i 所需时间为bi(1≤i≤n),批处理作业调度问题要求确定这n个作业的最优处理顺序,使得从第1个作业在机器1上处理开始,到最后一个作业在机器2上处理结束所需时间最少。 利用回溯法解决批作业最优调度问题。 算法思想:对于有n个不同的任务,搜索出其最佳排列,属于一棵排列树搜索问题。采用回溯法,搜索到第t层时,当已经是叶子节点时,说明该路径就是当前情况下的最优解。当t不是叶子节点时,依次按照一定的顺序执行当前剩下的任务,将剩下的任务全部遍历一遍。计算执行当前任务后,各个时间点的变化。如果该层某个节点的任务执行之后,依然符合剪枝函数,则将当前的策略顺序做出调整,将刚刚执行的那个节点的任务序号放置到当前,然后继续向下进行搜索。剪枝函数:当当前节点的总时间已经大于已找到的最优时间,则该节点后面的节点都不用进行搜索。直接回溯。 2、代码及注释 #include using namespace std; #define MAX 1111111111//宏定义设置一个在适当范围内足够大的数字,方便以后进行比较 //定义全局变量,包含如下 int* x1;//作业Ji在机器1上的工作时间; int* x2;//作业Ji在机器2上的工作时间; int number=0;//作业的数目; int* xOrder;//作业顺序; int* bestOrder;//最优的作业顺序; int bestValue=MAX;//最优的时间; int xValue=0;//当前完成用的时间; int f1=0;//机器1完成的处理时间; int* f2;//第i阶段机器2完成的时间; //定义一个递归调用函数,找出最优 void BackTrace(int k) { if (k>number)//算法搜索至叶子结点, { for (int i=1;i<=number;i++)

批处理系统作业调度实验报告

批处理系统作业调度 一、实验目的 加深对作业概念的理解; 深入了解批处理系统如何组织作业、管理作业和调度作业; 二、实验要求 编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。 三、实验原理: 操作系统根据允许并行工作的道数和一定的算法从系统中选取若干作业把它们装入主存储器,使它们有机会获得处理器运行,这项工作被称为“作业调度”。实现这部分功能的程序就是“作业调度程序”。 四、实验内容:编写程序完成批处理系统中的作业调度,要求采用响应比高 者优先的作业调度算法。实现具体包括:首先确定作业控制块的内 容和组成方式;然后完成作业调度;最后编写主函数,对所做工作 进行测试。 五、提示讲解:作业调度的实现主要有两个问题:一个是如何将系统中的作 业组织起来;另一个是如何进行作业调度。为了将系统中的作业组织起 来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例 如,作业名、作业所需资源、作业执行时间、作业进入系统的时间、作 业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个 记录作业相关信息的数据块称为作业控制块(JCB ),并将系统中等待 作业调度的作业控制块组织成一个队列,这个队列称为后备队列。当进 行作业调度时,从后备队列中查找选择作业。由于实验中没有实际作业, 作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首 先应该包括作业名;其次是作业所需资源(内存大小、打印机的数量和 磁带机的数量);采用响应比高者优先作业调度算法,为了计算响应比, 还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向 下一个作业控制块的指针必不可少。将作业控制块组织成一个队列,实 验中采用静态链表的方式模拟作业的后备队列,作业队列头指针定义 为:int *head;实验中,内存采用可移动的动态分区管理方法,即只要 内存空闲区总和比作业大就可以满足作业对内存的需求;对打印机和磁 带机这两种独占设备采用静态分配法,即作业执行前必须获得所需资 源,并且执行完才归还。采用响应比高者优先调度算法进行调度时,必 须计算出系统中所有满足必要条件作业的响应比,从中选择响应比最高 的一个作业装入主存储器分配资源。由于是实验,所以就将作业控制块 出队,并输出作业名代替装入处存储器,同时修改系统的资源数量。假 设系统资源情况:主存64KB(Memory)(以KB为单位分配)、4台磁带

操作系统 批处理系统作业调度实验报告

操作系统批处理系统作业调度实验报告批处理系统的作业调度实验报告 年级 2009级学号 2009443004 姓名郭占强成绩专业生物信息学实验地点生科楼409 指导教师王硕实验项目批处理系统的作业调度实验日期 2011年11月18日 一、实验目的 加深对作业概念的理解; 深入了解批处理系统如何组织作业、管理作业和调度作业。二、实验要求编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具 体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写 主函数对所作工作进程测试。 三、实验原理: 操作系统根据允许并行工作的道数和一定的算法从系统中选取若干作业把它们装入主存储器,使它们有机会获得处理器运行。 四、实验程序设计 #include "string.h" #include #include #define n 10 /*假定系统中可容纳的作业数量为n*/ typedef struct jcb {char name[4]; /*作业名*/

int length; /*作业长度,所需主存大小*/ int printer; /*作业执行所需打印机的数量*/ int tape; /*作业执行所需磁带机的数量*/ int runtime; /*作业估计执行时间*/ int waittime; /*作业在系统中的等待时间*/ int next; /*指向下一个作业控制块的指针*/ }JCB; /*作业控制块类型定义*/ int head; /*作业队列头指针定义*/ int tape,printer; long memory; JCB jobtable[n]; /*作业表*/ int jobcount=0; /*系统内现有作业数量*/ shedule( ) - 1 - /*作业调度函数*/ {float xk,k; int p,q,s,t; do {p=head; q=s=-1; k=0; while(p!=-1) { if(jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p] .printer<=printer)

PBS作业调度应用与说明

PBS(Portable Batch System)最初由NASA的Ames研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理,特别是满足高性能计算的需要,如集群系统、超级计算机和大规模并行系统。PBS的主要特点有:代码开放,免费获取;支持批处理、交互式作业和串行、多种并行作业,如MPI、PVM、HPF、MPL;PBS是功能最为齐全, 历史最悠久, 支持最广泛的本地集群调度器之一. PBS的目前包括openPBS, PBS Pro和Torque三个主要分支. 其中OpenPBS是最早的PBS系统, 目前已经没有太多后续开发, PBS pro是PBS的商业版本, 功能最为丰富. Torque是Clustering公司接过了OpenPBS, 并给与后续支持的一个开源版本. PBS的应用不同于一般的直接运行: mpirun –np number ./executable_file 直接运行上句,则只能在单个节点上进行并行计算。如果要在多个节点上并行执行则要写machinefile或p4pgfile,两种文件的具体写法参考张林波等《并行计算导论》。运行命令分别为: mpirun –machinefile filename mpirun –p4pg filename 应用PBS提交任务则会形成任务队列,依次执行,有效分配资源,避免资源竞争。否则CPU时间片会轮流分配给各个人的任务,从而影响所有人的正常作业。 torque PBS 提供对批处理作业和分散的计算节点(Compute nodes)的控制。 ?安装Torque组件:在一个节点上(head node)安装pbs_server,所有计算节点上安装pbs_mom,所有计算节点和提交节点上安装PBS客户端。 至少做最基本的配置,使Torque系统跑起来,也就是使pbs_server 能知道该和哪些机器通话。 ?在pbs_server上创建一个作业提交队列。 ?在集群的所有节点上指定一个cluster name作为property。这可以用qmgr命令做到。比如:

批处理系统的作业调度

实验批处理系统的作业调度 一、实验目的 (1)加深对作业概念的理解; (2)深入了解批处理系统如何组织作业、管理作业和调度作业。 二、预备知识 (1)批处理系统的概念; 批处理系统,又名批处理操作系统。批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。这种采用批量处理作业技术的操作系统称为批处理操作系统。批处理操作系统分为单道批处理系统和多道批处理系统。批处理操作系统不具有交互性,它是为了提高CPU的利用率而提出的一种操作系统。 1.作用: 大家知不知道默认共享这回事?这东西用不着的地方可就不是好东西了.所以就要删掉.但这东西是每次系统重起后都会重新创建的.所以每次都要重新打开cmd重新删掉一下.极为麻烦.但有了批处理文件就不一样了,先把命令输入到批处理文件中,然后加入到启动项中,每次启动就会自动运行,免去了每次输入命令的麻烦. (2).如何创建批处理文件? 不要听了批处理文件就感到很神气,其实这东西很简单的.你用过记事本没有?用过?好的.将记事本打开,什么都不用写,然后选择文件,保存.保存类型选择所有文件,文件名则命名为*.bat 这个*代表是文件名,你可以随便的起.保存好之后,看看你保存的地方,会出现一个白色窗口里有个黄色齿轮的图标.这东西就是你创建的批处理文件,双击他就可以运行,但他现在由于里面没有输入任何命令,所以他运行了并不会做任何事情.当我们想往这个*.bat文件中添加东西时,只要右键选择他,然后选择编辑,就可以打开记事本

往内输入命令了. 3.批处理文件中的命令是什么? 批处理文件中的命令暂时先可以理解为dos命令,等稍后深入理解了以后再进行解释.批处理顾名思义就是一大堆东西堆在一起处理.换句话说就是往里面写一条条dos命令,然后按顺序挨个执行,效果跟你在cmd里敲dos命令是一个效果.只不过用批处理写好之后,要运行只要双击下就可以运行了.而不用再一遍一遍的重复的往里面打命令.这就是批处理文件的好处. (2)批处理系统的调度。 三、实验内容 编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业块的内容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。

操作系统作业管理练习及答案

作业管理练习题 (一)单项选择题 1.用户要求计算机处理的一个计算问题称为一个( )。 A.进程 B程序 c.作业 D系统调度 2.一个作业的完成要经过若干加工步骤,这每个步骤称为( )。A.作业流 B.子程序 c.子进程 D.作业步 3.通常一个批处理作业要经过若干作业步才能完成,系统要求用户( )给出说明。 A.只能在作业提交时 B.只能在作业执行过程中 c.在作业提交时或作业执行过程中 D.不必4.在批处理方式下,操作员把一批作业组织成( )向系统成批输入。A.作业步 B.作业流 C.子程序 D.程序组 5.在批处理系统中,作业控制说明书是用操作系统提供的( )编写而成的。 A.c语言 B 命令语言 c.作业控制语言 D会话语言 6.用户使用操作系统提供的操作控制命令表达对作业执行的控制意图,这种作业控制方式是( )。 A.自动控制方式 B.脱机控制方式 c.批处理方式 D.交互方式 7.采用批处理控制方式时,操作员只要用预输入命令就能把作业流中的信息存放到输入井中,完成输入工作后被输入的作业处于( )。 A.输入状态 B.收容状态 C执行状态 D.完成状态 8.批处理作业调度必须遵循的一个必要条件是( )可以满足被选作业的资源要求。 A.系统的主存容量 B,系统中的磁带机台数 C.系统配置的资源 D.系统现有的尚未分配的资源9.作业调度程序的设计原则中并不考虑( )。 A.公平性 B.均衡使用资源 C.用户界面友好 D.极大的流量 10.从系统的角度出发,希望批处理控制方式下进入输入井的作业( )尽可能地小。A.等待装入主存的时间 B.执行时间 C.周转时间 D.平均周转时间 11.( )只考虑用户估计的计算机时间,可能使计算时间长的作业等待太久。 A.先来先服务算法 B.计算时间短的作业优先算法 C.响应比最高者优先算法 D.优先数算法12.先来先服务算法以( )去选作业,可能会使计算时间短的作业等待时间过长。 A.进入输入井的先后次序 B.计算时间的长短 C.响应比的高低 D.优先数的大小 13.可以证明,采用( )能使平均等待时间最小。A优先数调度算法 B.均衡调度算法 c.计算时间短的作业优先算法 D.响应比最高者优先算法 14.在进行作业调度时.要想兼顾作业等待时间和计算时间,应选取( )。 A均衡调度算法 B.优先数调度算法 c.先来先服务算法 D.响应比最高者优先算法 15.作业调度的关键在于( )。 A.选择恰当的进程管理程序 B.选择恰当的作业调度算法 C.友好的用户界面 D.用户作业准备充分 16.作业调度算法提到的响应比是指( )。 A.作业计算时间与等待时间之比 B.作业等待时间与计算时间之比 c.系统调度时间与作业等待时间之比 D.作业等待时间与系统调度时间之比 17.作业调度选择一个作业装入主存后,该作业能否占用处理器必须由( )来决定。 A设备管理 B.作业控制 C.驱动调度 D、进程调度 18.交互作业的特点是采用( )的方式工作。 A.作业控制语句 B.人机对话 c.作业说明书 D.作业信息文件 19.目前常用的操作使用接口中不包括( )。A.操作控制命令 B.作业控制语言 c.菜单技术D.窗口技术 20.为了请求进入或退出系统,用户应使用( )。 A.注册和注销命令 B.编辑类命令 c 调试类命令 D.操作方式转换命令

批处理系统

批处理系统(batch processing system)中,一个作业可以长时间地占用cpu。而分时系统中,一个作业只能在一个时间片(Time Slice,一般取100ms)的时间内使用cpu。 批处不是严格意义上的操作系统,虽然可用Monitor监督,可用汇编语言开发,但也只是操作系统的原型。 所谓批处理(batch processing )就是将作业按照它们的性质分组(或分批),然后再成组(或成批)地提交给计算机系统,由计算机自动完成后再输出结果,从而减少作业建立和结束过程中的时间浪费。根据在内存中允许存放的作业数,批处理系统又分为单道批处理系统和多道批处理系统。早期的批处理系统属于单道批处理系统,其目的是减少作业间转换时的人工操作,从而减少CPU的等待时间。它的特征是内存中只允许存放一个作业,即当前正在运行的作业才能驻留内存,作业的执行顺序是先进先出,即按顺序执行。 由于在单道批处理系统中,一个作业单独进入内存并独占系统资源,直到运行结束后下一个作业才能进入内存,当作业进行I/O操作时,CPU只能处于等待状态,因此,CPU利用率较低,尤其是对于I/O操作时间较长的作业。为了提高CPU的利用率,在单道批处理系统的基础上引入了多道程序设计(multiprogramming)技术,这就形成了多道批处理系统,即在内存中可同时存在若干道作业,作业执行的次序与进入内存的次序无严格的对应关系,因为这些作业是通过一定的作业调度算法来使用CPU的,一个作业在等待I/O处理时,CPU调度另外一个作业运行,因此CPU的利用率显著地提高了。 现在的批处理系统主要指多道批处理系统,它通常用在以科学计算为主的大中型计算机上,由于多道程序能交替使用CPU,提高了CPU及其他系统资源的利用率,同时也提高了系统的效率。多道批处理系统的缺点是延长了作业的周转时间,用户不能进行直接干预,缺少交互性,不利于程序的开发与调试。 批处理系统的特点: 多道-在内存中同时存放多个作业,使之同时处于运行状态,这些作业共享CPU和外部设备等资源。 成批-用户和他的作业之间没有交互性。用户自己不能干预自己的作业的运行,发现作业错误不能及时改正。 批处理系统的目的是提高系统吞吐量和资源的利用率。 多道处理系统的优点是由于系统资源为多个作业所共享,其工作方式是作业之间自动调度执行。并在运行过程中用户不干预自己的作业,从而大大提高了系统资源的利用率和作业吞吐量。其缺点是无交互性,用户一旦提交作业就失去了对其运行的控制能力,而且是批处理的,作业周转时间长,用户使用不方便。

操作系统实验报告批处理系统的作业调度

操作系统实验报告批处理系统的作业调度实验一批处理系统的作业调度一(实验目的 (1)加深对作业概念的理解。 (2)深入了解批处理系统如何组织作业、管理作业和调度作业。 二(实验内容 编写程序完成批处理系统的作业调度,要求采用响应比优先调度算法。 三(实验原理 最高响应比优先法(HRRN)是对FCFS方式和SJF 方式的一种综合平衡。HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下: R=(W+T)/T=1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用HRRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。四(实验部分源程序 实验中,作业控制块及队列的数据结构定义如下: struct task { string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/

int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/ int finTime; /*结束运行时间*/ int turTime; /*周转时间*/ int wTuTime; /*带权周转时间*/ int priority;/*优先权*/ int finish;/*是否已经完成*/ }JCB[10]; 存放作业控制块的区域: #define n 10 JCB jobtable[10]; int jobcount; 将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作 业队列头指针定义为:int *head; 主程序为: #include #include #include #include #include #include typedef char string[10]; /* //定义string为含有10个字符元素的字符数组类型*/ struct task { string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/

相关文档
最新文档