实验二作业调度。
一、 实验题目:
1、 单道批处理系统的作业调度模拟程序。
2、 编写采用先来先服务算法多道批处理系统的作业调度模拟程序。
二、 实验目的:
通过对单道批处理系统的作业调度和采用先来先服务算法多道批处理系统作业调度的模拟,进一步理解作业调度的过程,加深对单道和多道的作业运行状态和作业调度过程、调度算法的理解。
三、 实验设备及环境:
1、 硬件设备:pc机一台。
2、 软件环境:安装windows操作系统或者linux操作系统,并安装相关的程序开发环境,如c \c++\j**a 等编程语言环境。
四、 实验内容及要求:
1、 单道批处理系统作业调度
1)由于在单道批处理系统中,作业一旦投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 cpu时限等因素。
2)每个作业由一个作业控制块jcb表示,jcb可以包含如下信息:作业名name、作业大小size、所需的运行时间ntime、作业已运行时间rtime、所需的资源machine、作业状态state等。作业指针link,用来将jcb表排成队列。
作业的状态可以是等待w(wait)、运行r(run)和完成f(finish)三种状态之一。每个作业的最初状态总是等待w状态。
3)对每种调度算法都要求显示每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。
2、 采用先来先服务算法多道批处理系统的作业调度。
1)采用多道程序设计方法的操作系统,在系统中要经常保留多个运行的作业,以提高系统效率。作业调度从系统已接纳的暂存在输入井中的一批作业中挑选出若干个可运行的作业,并为这些被选中的作业分配所需的系统资源。对被选中运行的作业必须按照它们各自的作业说明书规定的步骤进行控制。
2)批处理作业调度程序负责从输入井中选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理器运行。作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业的要求,那么,作业调度必须按一定的算法在这些作业中做出选择。
先来先服务算法是按照作业进入输入井的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业。
3)假定某系统可供用户使用的主存空间共100k,并有5台磁带机。
4)多道批处理系统中jcb表示同单道批处理系统相同。
3、为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。
4、分析程序运行的结果,谈一下自己的认识。
五、实现程序流程图及源**。
1、算法流程图。
1)单道批处理系统中作业调度按:先来先服务算法实现流程;最短作业优先算法;高响应比算法流程图:
2)采用先来先服务算法多道批处理系统的作业流程图。
2、主要的常量变量。
1)单道批处理系统作业调度常量、变量。
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;
2)多道批处理系统作业调度常量、变量。
#define getpch(type)(type*)malloc(sizeof(type)) 宏定义变量 type
#define area 100宏定义内存空间总大小。
#define summachine 5 //宏定义内存磁带数总数。
#define null0
struct pcb定义结构体 pcb
int jobs; /进入计算机作业总数。
int jobnum; /进入内存作业数量。
int wellnum; /输入井中的作业个数。
char name[10]; 作业名。
char state作业状态。
int size作业大小。
int machine; /某个作业所占用的磁带机总数。
int ntime作业需要运行的总时间。
int rtime作业已经运行的时间。
struct pcb*link; /自定义结构体指针link
*ready=null,*p,*q,num; /自定义结构体指针变量ready,p,并将ready设为空指针。
typedef struct pcb pcb; /定义作业控制块pcb
3、主要模块。
1)单道批处理系统作业调度模块。
void inize初始化界面。
void inital() 建立作业控制块队列,先将其排成先来先服务的模式队列。
void disp(jcb* q,int m) /显示作业运行后的周转时间及带权周转时间等。
void running(jcb *p,int m) /运行作业。
void super计算队列中作业的高响应比。
void final最后打印作业的平均周转时间,平均带权周转时间。
void hrn(int m) /高响应比算法。
void sjf(int m最短作业优先算法。
void fcfs(int m先来先服务算法。
2)多道批处理系统作业调度模块。
void inize初始化界面函数。
void well对进入计算机的所有作业按从大到小的顺序排队。
void sort内存中运行完一次的作业插到队尾。
void input() 输入要运行的各个作业的基本信息。
void disp建立显示正在运行的作业的运**况的函数。
void disp2(pcb *pr) /建立显示内存就绪队列中所有作业的函数。
void disp3(pcb *r) /建立显示输入井中作业情况的函数。
void check() 建立作业查看函数。
void destroy() 建立作业撤销函数(对运行完的作业进行撤销)
void choose1建立从输入井中选择满足条件的作业的函数。
void choose2() 建立再次从输入井中挑选满足条件的作业的函数。
void running()
void duodao()
void menu菜单。
void main()/主函数。
4、**。1)单道批处理系统作业调度实现源**。
文件名: ******_batch_
功能: 单道批处理系统的作业调度模拟程序
#include <>
#include <>
#include <>
#define getpch(type) (type*)malloc(sizeof(type))
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("\t\tt\t");
printf("\t\t\t\t实验二作业调度");
printf("\t\tt\t");
printf("\t\t\t计算机系802班");
printf("\t\t\t姓名:李雪娇");
printf("\t\t\t学号:08030043");
printf("\t\t\t完成时间:2023年12月15日");
printf("\t\t\t\t\t请输入任意键进入演示过程");
getch();
操作系统作业调度实验
实验一进程。2011210549 崔晶。1.本实验实现的功能有 创建一个进程,撤销一个进程,挂起一个进程。2.本实验初始化的进程块状态如图所示 自定义 p表示正在运行,r表示就绪,w表示等待。3.程序如下 include include 进程块的数据结构。struct pcb struct 插入等待...
操作系统实验1作业调度
实验一作业调度实验。一 目的与任务。目的 通过对作业调度程序的编写,加深对进程的概念及作业调度算法的理解 任务 编写 精读 作业调度模拟程序。要求 将程序补充详尽的注释 每一语句 并将测试数据及结果截图在下周实验前统一交给班长,班长打包上交。二 实验原理。由于在单道批处理系统中,作业一投入运行,它就...
操作系统 作业调度
一 各作业情况如下 优先级为小值优先,求平均周转时间和带权平均周转时间?1.先来先服务 2.短作业优先 3.静态优先。答 1.先来先服务。0时刻只有作业1到达,所以先执行1 2时刻作业2和3都到达,2先到所以执行2 7时刻作业3和作业4都到达,3先所以执行3,再执行4 平均周转时间 2 0 7 1 ...