操作系统实验二 作业调度实验 一、目的要求 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 1. 编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。 #include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) //#define NULL 0 struct worktime{ float Tb; //作业运行时刻 float Tc; //作业完成时刻 float Ti; //周转时间 float Wi; //带权周转时间 }; struct jcb { /*定义作业控制块 JCB */ char name[10]; //作业名 float subtime; //作业提交时间 float runtime; //作业所需的运行时间 char resource; //所需资源 float Rp; //后备作业响应比 char state; //作业状态 struct worktime wt; struct jcb* link; //链指针 } *jcb_ready=NULL,*j; typedef struct jcb JCB; float T=0; v oid sort() /* 建立对作业进行提交时间排列函数*/ { JCB *first, *second; int insert=0; if((jcb_ready==NULL)||((j->subtime)<(jcb_ready->subtime))) /*作业提交时间最短的,插入队首*/ { j->link=jcb_ready; jcb_ready=j; T=j->subtime; j->Rp=1; } else /* 作业比较提交时间,插入适当的位置中*/ { first=jcb_ready; second=first->link; while(second!=NULL) { if((j->subtime)<(second->subtime)) /*若插入作业比当前作业提交时间短,*/ { /*插入到当前作业前面*/ j->link=second; first->link=j; second=NULL; insert=1; } else /* 插入作业优先数最低,则插入到队尾*/ { first=first->link; second=second->link; } } if (insert==0) first->link=j; } } v oid SJFget()/* 获取队列中的最短作业 */ { JCB *front,*mintime,*rear; int ipmove=0; mintime=jcb_ready; rear=mintime->link; while(rear!=NULL) { if ((rear!=NULL)&&(T>=rear->subtime)&&(mintime->runtime)>(rear->runtime)) { front=mintime; mintime=rear; rear=rear->link; ipmove=1;...