实验一作业调度实验。
一、目的与任务。
目的:通过对作业调度程序的编写,加深对进程的概念及作业调度算法的理解.
任务:编写(精读)作业调度模拟程序。
要求:将程序补充详尽的注释(每一语句),并将测试数据及结果截图在下周实验前统一交给班长,班长打包上交。
二、实验原理。
由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的cpu时限等因素。
作业调度算法:采用先来先服务(fcfs)调度算法,即按作业提交的先后次序进程调度。总是首先调度在系统中等待时间最长的作业。
每个作业由一个作业控制块jcb表示,jcb可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。
作业的状态可以是就绪w(wait)、运行r(run)、或完成f(finish)三种状态之一。每个作业的最初状态总是等待w。
各个等待的作业按照提交时刻的先后次。
序排队,总是首先调度等待队列中队首的作业。
每个作业完成后要打印该作业的开始运行。
时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平。
均周转时间、带权平均。
周转时间。附:**见后。
#include <>
#include <>
#include <>
#define getpch(type) (type*)malloc(sizeof(type))
#define null 0
struct worktime
else /*作业比较提交时间,插入适当的位置中*/
else /*插入作业优先数最低,则插入到队尾*/
if (insert==0) first->link=j;//如果没插入节点j就绪。
void sjfget()/获取队列中的最短作业 */
jcb *front,*mintime,*rear;//定义指针。
int ipmove=0;//初始化impove
mintime=jcb_ready;//mintime为就绪工作。
rear=mintime->link;//rear为就绪的下一个工作。
while(rear!=null)//如果rear不为0
if ((rear!=null)&&t>=rear->subtime)&&mintime->runtime)>(rear->runtime))/rear不为空且时间大于rear的提交时间且就绪工作的时间大于rear的运行时间*/
elserear=rear->link; /rear指向下一个指针。
if (ipmove==1)
jcb_ready=mintime;//mintime就绪。
void hrnget()/获取队列中的最高响应作业 */
jcb *front,*mintime,*rear;//定义指针。
int ipmove=0;//初始化。
mintime=jcb_ready;//mintime为就绪工作。
rear=mintime->link;//mintime->like指向rear
while(rear!=null)//rear不为空。
if ((rear!=null)&&t>=rear->subtime)&&mintime->rp)<(rear->rp))
elserear=rear->link;//rear指针指向下一个。
if (ipmove==1)
jcb_ready=mintime;//mintime就绪。
void input() 建立作业控制块函数*/
int i,num;//定义i,num类型。
printf(" 请输入作业数:?"输出作业数num
scanf("%d",&num);/带入num
for(i=0;iname);
printf(" 输入作业提交时刻:")输出提交时刻。
scanf("%f",&j->subtime);
printf(" 输入作业运行时间:")作业运行时间。
scanf("%f",&j->runtime);
printf("");
j->state='w';/将作业状态设为等待状态。
j->link=null;//j->link为空。
sort();调用sort函数*/
int space()
int l=0; jcb* jr=jcb_ready;//定义l为0,jr为就绪状态。
while(jr!=null当jr不为空时。
return(l);/返回l值。
void disp(jcb* jr,int select) /建立作业显示函数,用于显示当前作业*/
if (select==3) printf(" 作业服务时间响应比运行时刻完成时刻周转时间带权周转时间 ");输出作业服务时间响应比运行时刻完成时刻周转时间带权周转时间*/
else printf(" 作业服务时间运行时刻完成时刻周转时间带权周转时间 ");输出作业服务时间响应比运行时刻完成时刻周转时间带权周转时间*/
printf(" s\t",jr->name);/输入作业名。
printf(" 2f\t ",jr->runtime);/输出运行时间。
if (select==3) printf(" 2f ",jr->rp);/输出作业后备响应比。
if (j==jr)
printf("");换行。
void destroy() 建立作业撤消函数(作业运行结束,撤消作业)*/
printf(" 作业 [%s] 已完成。",j->name);/输出…作业已完成。
free(j);/释放j指针。
void check(int select) /建立作业查看函数 */
jcb* jr;
printf(" **当前正在运行的作业是:%s",j->name); 显示当前运行作业*/
disp(j,select);/调用显示函数。
jr=jcb_ready;//jr为就绪作业。
printf(" **当前就绪队列状态为:");显示就绪队列状态*/
while(jr!=null)//当jr不为空时。
destroy();调用撤销函数。
void running(jcb* jr) /建立作业就绪函数(作业运行时间到,置就绪状态*/
if (t>=jr->subtime) jr-> else jr->>subtime;/*如果t=>jr
的提交时间,则作业等待运行时间=t否则,作业等待运行时间=jr的作业提交时间*/
jr->>runtime; /作业等待完成时间=jr的作业等待运行时间+jr的运行时间。
jr->>subtime; /作业等待周转时间=作业等待完成时间-jr的提交时间。
jr->>runtime;//等待带权周转时间=作业等待周转时间/ jr的运行时间。
t=jr-> t=jr作业等待完成时间。
int main() 主函数*/
int select=0,len,h=0; /定义初始值select len h
float sumti=0,sumwi=0; /定义初始值sum wi
input();输入。
len=space();len=l的返回值。
printf("\ 请选择作业调度算法:?"输出请选择作业调度算法*/
scanf("%d",&select);/带入select的值。
while((len!=0)&&jcb_ready!=null))/当len!=0且就绪作业不为空。
printf(" 作业已经完成。");显示作业结果。
printf("\t 此组作业的平均周转时间:%.2f",sumti/h);
printf("\t 此组作业的带权平均周转时间:%.2f",sumwi/h);
getchar();任一键继续。
操作系统作业调度实验
实验一进程。2011210549 崔晶。1.本实验实现的功能有 创建一个进程,撤销一个进程,挂起一个进程。2.本实验初始化的进程块状态如图所示 自定义 p表示正在运行,r表示就绪,w表示等待。3.程序如下 include include 进程块的数据结构。struct pcb struct 插入等待...
操作系统作业调度实验
实验二作业调度。一 实验题目 1 单道批处理系统的作业调度模拟程序。2 编写采用先来先服务算法多道批处理系统的作业调度模拟程序。二 实验目的 通过对单道批处理系统的作业调度和采用先来先服务算法多道批处理系统作业调度的模拟,进一步理解作业调度的过程,加深对单道和多道的作业运行状态和作业调度过程 调度算...
操作系统 作业调度
一 各作业情况如下 优先级为小值优先,求平均周转时间和带权平均周转时间?1.先来先服务 2.短作业优先 3.静态优先。答 1.先来先服务。0时刻只有作业1到达,所以先执行1 2时刻作业2和3都到达,2先到所以执行2 7时刻作业3和作业4都到达,3先所以执行3,再执行4 平均周转时间 2 0 7 1 ...