操作系统作业调度算法模拟

来源:互联网 发布:fix it center 编辑:程序博客网 时间:2024/05/17 18:17

作业调度算法的模拟

C语言,或C++实现对N个作业分别采用FCFSSJFHRN和高优先权优先等算法进行调度。每个用来标识作业的作业控制块JCB用结构体来描述,包括以下字段:

(1)       作业标识数ID

(2)       作业运行所需要的时间requesttime

(3)       作业实际运行时间 runtime

(4)       作业优先权priority,并规定优先权越大的作业,其优先权越高

(5)       作业紧迫程度quick,并规定紧迫程度越高的作业,其数值越大

注:以上字段并非每中作业调度算法都使用,仅仅出于方便编程。

设计思想:

(1)       HRN算法采用下式计算响应比:

响应比=等待时间waittime/需要运行的时间requesttime

(2)       高优先权算法采用下式计算优先权:

(优先权priority*等待时间waittime/(需要运行时间requesttime*紧迫程度quick

 

程序流程图:

结束

输入PCB作业数目

菜单选择

FCFS

算法调度

SJF

算法调度

HRN

算法调度

按高优先权优

先算法调度

开始

显示个作业调度顺序

参考原程序:

#include <stdio.h>

 

typedef struct JCB

{ int ID;

  int requesttime;

  int runtime;

  int priority;

  int quick;

}JCB;

      

#define N 100

 

JCB jcb[N];

int jcbnum;

void init();

void FCFS();

void SJF();

void HRN();

void prior();

 

void main()

{int i=0;

init();

printf("/n ================================");

printf("/n |  1:FCFS          2:SJF        |");

printf("/n |  3:HRN           4:Priority   |");

printf("/n ================================");

while(i<=0||i>=5)

{

printf("/nPlease select anumber(1,2,3,4):");

scanf("%d",&i);

}

switch(i){

   case 1: FCFS();break;

   case 2: SJF();break;

   case 3: HRN();break;

   case 4: prior();break;

}

}

 

void init()

{int i=0;

while(i<=0||i>2000)

{printf("/n Input the JCB numbers(1~2000):");

scanf("%d",&i);

}

jcbnum=i;

for(i=0;i<jcbnum;i++){

 jcb[i].ID=i+1;

 jcb[i].priority=rand()%100+1;

 jcb[i].quick=rand()%5+1;

 jcb[i].requesttime=rand()%1000+1;}

}

 

void FCFS()

{int i;

printf("/nThis is first come first server:");

for(i=0;i<jcbnum;i++)

printf("/n/t The NO.%-5d JCB enter MEMORY.",jcb[i].ID);

}

void prior()

{int i,j,dest;

int waittime=0;

printf("/n This is proority job first:");

while(jcbnum>0)

{dest=0;

for(i=0;i<jcbnum;i++)

if((jcb[dest].priority*(waittime+0.0)/(jcb[dest].requesttime*jcb[dest].quick))<

   (jcb[i].priority*(waittime+0.0)/(jcb[i].requesttime*jcb[i].quick)))

   dest=i;

printf("/n/t The NO.%-5d JCB enter MEMORY.",jcb[dest].ID);

waittime+=jcb[dest].requesttime;

for(j=dest;j<jcbnum-1;j++){

jcb[j].ID=jcb[j+1].ID;

jcb[j].priority=jcb[j+1].priority;

jcb[j].quick=jcb[j+1].quick;

jcb[j].requesttime=jcb[1].requesttime;}

jcbnum--;

}

}

 

void SJF()

{int i,j,dest;

printf("/n This is short job first:");

while(jcbnum>0)

{dest=0;

for(i=0;i<jcbnum;i++)

if(jcb[dest].requesttime>jcb[i].requesttime)

   dest=i;

printf("/n/t The NO.%-5d JCB enter MEMORY.",jcb[dest].ID);

for(j=dest;j<jcbnum-1;j++){

jcb[j].ID=jcb[j+1].ID;

jcb[j].priority=jcb[j+1].priority;

jcb[j].quick=jcb[j+1].quick;

jcb[j].requesttime=jcb[1].requesttime;}

jcbnum--;

}

}

 

void HRN()

{int i,j,dest;

int waittime=0;

printf("/n This is HRN :");

while(jcbnum>0)

{dest=0;

for(i=0;i<jcbnum;i++)

if(((waittime+0.0)/jcb[dest].requesttime)<((waittime+0.0)/jcb[i].requesttime))

   dest=i;

printf("/n/t The NO.%-5d JCB enter MEMORY.",jcb[dest].ID);

waittime+=jcb[dest].requesttime;

for(j=dest;j<jcbnum-1;j++){

jcb[j].ID=jcb[j+1].ID;

jcb[j].priority=jcb[j+1].priority;

jcb[j].quick=jcb[j+1].quick;

jcb[j].requesttime=jcb[1].requesttime;}

jcbnum--;

}

}

 

运行结果显示:

 Input the JCB numbers(1~2000):10

 

 ================================

 |  1:FCFS          2:SJF        |

 |  3:HRN           4:Priority   |

 ================================

Please select anumber(1,2,3,4):1

 

This is first come first server:

         The NO.1     JCB enter MEMORY.

         The NO.2     JCB enter MEMORY.

         The NO.3     JCB enter MEMORY.

         The NO.4     JCB enter MEMORY.

         The NO.5     JCB enter MEMORY.

         The NO.6     JCB enter MEMORY.

         The NO.7     JCB enter MEMORY.

         The NO.8     JCB enter MEMORY.

         The NO.9     JCB enter MEMORY.

         The NO.10    JCB enter MEMORY.

原创粉丝点击