操作系统课程设计
(一)实验题目
处理机调度——短作业优先调度算法、先来先服务调度算法
(二) 试验目的
加深作业概念的理解,深入了解多道程序设计系统中如何组织作业、管理作
业和调度作业,加深对作业调度算法的理解。
(三)实验环境
普通计算机一台,操作系统是 WINDOWS,编译环境 VC++6.0
(四)算法思想及数据结构
1 调度算法
作业调度算法的关键是在已有的作业后备队列上按照一定的规则选择一个
作业,如何在已有的数据结构上进行操作的问题。
① 短作业优先调度算法(SJF)
短作业优先算法总是提交要求运行时间最短的作业,让其进入主存储器以便
占用处理器运行
② 先来先服务算法(FCFS)
每次提交作业总是选择后备队列的对首作业,实验中用 head 指向对首
JCB。有作业进入系统,则挂入后备队列对尾。对首 JCB 进入内存后执行,在
实验中由于没有真正的内存,我们用程序模拟作业执行,需修改该作业的 JCB
的相关信息即可,如状态为 state 置为“R”,开始执行时间 tb 赋值为当前时间
time。(p->state=R;p->tb=time;)该作业执行完成后,需修改其状态位
state 为“F”,并计算该作业的相关信息:
计算周转时间: p->ti=(oat)(p->tc-p->ts);
计算带权周转时间:p->wi=(oat)(p->ti/p->ntime);
计算平均周转时间 :eti+=p->ti;
计算带权平均周转时间:ewi+=p->wi;
并输出当前系统中各作业的信息 print(p,m);
提交作业时,从后备队列对首开始向对尾扫描,查找状态为“W”且要求系统
运行时间最短的作业,选中将其调入内存。同 FCFS 算法,在实验中由于没有
真正的内存,我们用程序模拟作业执行,需修改该作业的 JCB 的相关信息。该
作业执行完成后,需修改其状态位 state 为“F”,计算该作业的相关信息和输出
当前系统中各作业的信息。
2 主要数据结构
每个作业由一个作业控制块 JCB 表示,JCB 可以包含如下信息:作业名、提
交时间、所需的运行时间、所需的资源、作业状态、链指针等等。具体结构如
下:
typedef struct jcb{
char name[10]; /* 作业名 */
char state; /* 作业状态 */
int ts; /* 提交时间 */
oat super; /* 优先权 */
int tb; /* 开始运行时间 */