作业调度.doc_第1页
作业调度.doc_第2页
作业调度.doc_第3页
作业调度.doc_第4页
作业调度.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科生实验报告实验课程 操作系统原理 学院名称 专业名称 学生姓名 学生学号 指导教师 实验地点 实验成绩 二一五年九月 二一五年十二月、实验1-2:作业调度一、实验内容模拟批处理多道操作系统的作业调度。二、实验目的每个用户请求计算机计算的一个计算任务叫做一个作业。一个作业从输入初始数据到得到计算结果,要经过若干个步骤的相继执行。例如,编辑、编译、运行等,其中每一个步骤称作一个作业步。用户向系统提出作业加工步骤的方式称作业控制方式,作业控制方式有两种:终端控制方式(又称直接控制方式或联机控制方式)和批处理控制方式(又称自动控制方式或脱机控制方式)。在批处理控制方式下,用户采用系统提供的作业控制语言(JCL)写好作业说明书,说明作业加工的步骤。操作员把一批作业组织成输入流,通过“预输入”手段使每个作业的信息(包括作业说明书、源程序、初始数据等)暂存在辅助存储器的“输入井”中。批处理多道操作系统的作业管理有两个任务:作业调度和作业控制。采用多道程序设计方法的操作系统,在系统中要经常保留多个运行的作业,以提高系统效率。作业调度从系统已接纳的暂存在输入井中的一批作业中挑选出若干个可运行的作业,并为这些被选中的作业分配所需的系统资源。对被选中运行的作业必须按照它们各自的作业说明书规定的步骤进行控制。本实验要求模拟作业调度的实现,了解作业调度在操作系统中的作用。三、实验题目采用先来先服务算法和运行时间最短者优先算法模拟设计作业调度程序。提示:(1) 作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理器运行。作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业的要求,那么,作业调度必须按一定的算法在这些作业中作出选择。先来先服务算法是按照作业进入输入井的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业。运行时间最短者优先算法总是按作业要求运行的时间来选择作业,每次挑选要求运行时间短且资源要求能满足的作业先进入主存执行。(2) 为了表示暂存在输入井中的各个作业的情况(作业信息在输入井中的位置、作业的资源要求等),常常采用二级目录结构:作业表和预输入表。例如:用户名作业名资源要求预输入表地址作业表文件名文件属性文件长度在输入井中位置预输入表“预输入”程序为每个作业在作业表中占一登记栏,且把作业信息存放到输入井中并按文件(源程序文件、数据文件等)登记在预输入表中。“预输入”程序工作时还把作业控制语句集中,作为作业说明书文件存放在输入井并登记在预输入表的第一栏中,同时把用户在作业说明书中提出的资源要求登记在作业表中。本实验模拟作业调度,所以可不考虑有关“预输入”程序的工作。假定“预输入”程序已经把一批作业的信息存放在输入井了,并为它们建立了如下的作业表:用户名作业名状态运行时间资源要求预输入表地址主存磁带AJA收容20分钟150k2BJB收容35分钟600k1CJC收容6分钟500k3DJD收容24分钟100k2EJE收容12分钟300k3其中状态分三种:收容状态作业已在输入井,但尚未被选中执行;-READY执行状态作业被选中,正在执行;-RUNNING完成状态作业执行结束。-END(3) 假定主存中可容纳多道作业同时执行,那么作业调度按调度算法和资源分配情况查作业表,从中选择若干作业,对每个被选中的作业创建一个作业控制进程且使它们处于就绪状态,同时把选中作业的作业说明书读入主存。处理器调度按调度策略选择作业调度进程或作业控制进程轮流占有处理器(处理器调度参见实验一)。作业控制进程按作业说明书控制作业执行,当一个作业执行结束后,作业调度再从输入井中选择一个作业进入主存,直到输入井中的作业都执行结束,通知操作员再预输入一批作业。本实验主要模拟作业调度,所以对处理器调度、作业控制过程简化。用输入随机数模拟处理器调度,用输入“用户名、作业名”模拟一个作业已经执行结束。于是,本实验的模拟流程可参考图2-1。(4) 假定某系统可供用户使用的主存空间共1M,并有5台磁带机。主存分配采用可变分区分配方式且主存中信息不允许移动,对磁带机采用静态分配策略,主存中可同时执行的作业限定为两道,作业调度分别采用先来先服务算法和运行时间最短者优先算法,参考图2-1设计模拟作业调度的程序。假定作业表的初值如提示(2),分别在两种算法控制下运行设计的程序,依次显示被选中作业的用户名和作业名。比较两种作业调度算法选择作业的次序。在模拟作业执行结束输入被撤离作业的用户名、作业名时,应根据已在主存中的作业需运行的时间来决定撤离的先后次序。四:实验报告(1)实验题目:作业调度(2)程序所用的数据结构及其说明#define MEMLENGTH 1024/主存大小#define RECORDERNUM 2 5/磁带数量typedef struct JCBchar*UserIDchar*JobID;char*status;/-1被选中,0完成,1执行,2收容float RunTime;int ApplyMem; /所需内存资源int ApplyRecorder; int MemoryNum; /所需磁带资源 JCB;typedef struct PCB/PCB类型的结构体JCB *next;char state;/状态R-就绪E-结束,W-等待int order;PCB;/0资源不满足1主存满足条件2磁带满足条件3两种均满足条件(3)流程图(4)源程序代码#include stdio.h#include stdlib.h#define MEMLENGTH 1024#define RECORDERNUM 25typedef struct JCBchar*UserID;char*JobID;char status;float RunTime;int ApplyMem;int MemoryNum;int ApplyRecorder;struct JCB*next;JCB;JCB*JTfind(JCB*jcb,char status)JCB*p;if(jcb=NULL) return NULL;for(p=jcb-next;p!=NULL&p-status!=status;p=p-next);return p;void JTinit(JCB*p)p-next=(JCB*)malloc(sizeof(JCB);p-next-next=NULL;p-UserID=p-JobID=NULL;void JTinsert(JCB*jt,JCB*j)JCB*p;for(p=jt;p-next!=NULL;p=p-next);p-next=j;j-next=NULL;int JTdel(JCB*jt,JCB*j)JCB*p;if(j=NULL)return 0;p=jt-next;if(p=NULL)return 0;for(;p-next!=NULL&p-next!-j;p=p-next);if(p-next=NULL)return 0;p-next-j-next;return 1;void JTrelease(JCB*jt)JCB*p;JCB*q;p=jt-next;if(p=NULL)return;for(q=p-next;q!=NULL;p=q,q=q-next)free(p);JCB jt;int memory=MEMLENGTH;int recorder=RECORDERNUM;int count=0;int num=5;void large()JCB*ep,*pd;int i;ep=JTfind(&jt,s);if(ep!=NULL)pd=ep;while(pd=JTfind(pd,s)!=NULL)if(ep-RunTimepd-RunTime)ep=pd;if(countep-ApplyMem)if(recorder=ep-ApplyRecorder)ep-status=e;JTdel(&jt,ep);JTinsert(&jt,ep);memory-=ep-ApplyRecorder;count+;printf(The selected jobs name is %sn,ep-JobID);printf(The selected user is %sn,ep-UserID);else printf(The recorder is not adequate n);else printf(The main memory is not adequate n);else printf(The system can not excute any more jobs!n);else printf(The saved queue is empty!n);void small()char*str1,str2;char i;JCB *ep;ep=JTfind(&jt,e);if(ep=NULL)printf(主存中无作业!n);return;/*先来先服务*/elseprintf(Be executiving custmoer %sn,ep-JobID);/*printf(输入用户名字,作业名字A,B,C,D,E!n);*/printf(The user and job are:%s,%sn,ep-UserID,ep-JobID); count-;num-;memory+=ep-ApplyMem;recorder+=ep-ApplyRecorder;JTdel(&jt,ep);return;void init()JCB*p;JTinit(&jt);p=(JCB*)malloc(sizeof(JCB);p-UserID=(char*)malloc(10*sizeof(char);p-UserID=A;p-JobID=(char*)malloc(10*sizeof(char); p-JobID=ZYA; p-status=s; p-RunTime=0.3; p-ApplyMem=15; p-ApplyRecorder=2; JTinsert(&jt,p);p=(JCB*)malloc(sizeof(JCB);p-UserID=(char*)malloc(10*sizeof(char);p-UserID=B;p-JobID=(char*)malloc(10*sizeof(char);p-JobID=ZYB;p-status=s;p-RunTime=0.5;p-ApplyMem=60;p-ApplyRecorder=1;JTinsert(&jt,p);p=(JCB*)malloc(sizeof(JCB);p-UserID=(char*)malloc(10*sizeof(char);p-UserID=C;p-JobID=(char*)malloc(10*sizeof(char);p-JobID=ZYC;p-status=s;p-RunTime=0.1;p-ApplyMem=50;p-ApplyRecorder=3;JTinsert(&jt,p);p=(JCB*)malloc(sizeof(JCB);p-UserID=(char*)malloc(10*sizeof(char);p-UserID=D;p-JobID=(char*)malloc(10*sizeof(char);p-JobID=ZYD;p-status=s;p-RunTime=0.4; p-ApplyMem=10;p-ApplyRecorder=2;JTinsert(&jt,p);p=(JCB*)malloc(sizeof(JCB);p-UserID=(char*)malloc(10*sizeof(char);p-UserID=E;p-JobID=(char*)malloc(10*sizeof(char);p-JobID=ZYE;p-status=s;p-RunTime=0.1;p-ApplyMem=30;p-ApplyRecorder=3;JTinsert(&jt,p);void main()int operation;init();for(;num!=0;)printf(nnPlease input a random integer in the range of(09)n);scanf(%d,&operation);if(operation9)|(operation5)large();else small();JTrelease(&jt);printf(Please the system operation input jobs.n);(5)运行截图学生学习心得实验清楚明白的表明作业调度是按照作业提交或进程变为就绪状态的先后次序,分派CPU;当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU。在作业或进程唤醒后,并不立即恢复执行,通常等到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论