操作系统作业调度算法模拟
来源:互联网 发布:fix it center 编辑:程序博客网 时间:2024/05/17 18:17
作业调度算法的模拟
用C语言,或C++实现对N个作业分别采用FCFS,SJF,HRN和高优先权优先等算法进行调度。每个用来标识作业的作业控制块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.
- 操作系统作业调度算法模拟
- 【操作系统】作业调度的算法
- 操作系统的作业调度算法
- 模拟操作系统进程调度算法
- 模拟实现操作系统调度算法
- Java模拟操作系统进程调度算法—先来先服务、短作业优先、高响比优先
- Java模拟操作系统进程调度算法—先来先服务、短作业优先、高响比优先
- 【大三操作系统实验】 作业进程调度算法
- 操作系统实验 批处理作业的调度算法
- 操作系统中作业调度算法总结
- 操作系统实验之作业调度算法
- 【操作系统】作业调度的五种算法
- 模拟作业调度-先来先服务算法
- 操作系统处理器调度算法c++模拟
- 操作系统处理机调度算法模拟实现
- 操作系统的作业调度和进程调度算法
- 操作系统作业调度和低级调度算法>>计算题
- 【操作系统】C语言模拟操作系统优先数调度算法
- struts2标签dojo
- tzc 3489 Baking Cakes
- 想开博了.. 低调~
- 解决 Linux下oracle导入(imp)导出(exp)出现"failed to open ...for reader/wirte" 错误
- vc_mfc_执行流程
- 操作系统作业调度算法模拟
- 定义Table时显示表格边框显示1px
- TFS 源码控制中的搁置
- SQLPlus 登录方法
- GSM短信发送PDU编码解码C++控制台实现
- 分析函数调用关系图(call graph)的几种方法
- Eclipse中server启动超时的解决方法
- Stack around the variable 'cmdInfo' was corrupted
- nhibernate使用