先来先服务和短作业优先算法 - 范文中心

先来先服务和短作业优先算法

05/28

#include

using namespace std;

#define MAX 10

struct zuoye

{

char name[10]; /*进程名称*/

float atime; /*到达时间*/

float rbtime; /*开始运行时间*/

float rtime; /*运行时间*/

float rftime; /*运行结束时间*/

int order; /*运行次序*/

int run_flag; /*调度标志*/

}tasks[MAX];

int counter; /*实际进程个数*/

int fcfs(); /*先来先服务*/

int sjf(); /*短作业优先*/

int hrrn(); /*响应比高优先*/

int pinput(); /*进程参数输入*/

int poutput(); /*调度结果输出*/

void main()

{ int option;

pinput();

printf("请选择调度算法(0~3):\n");

printf("1.先来先服务\n");

printf("2.短作业优先\n");

printf("3.响应比高优先\n");

printf("0.退出\n");

scanf("%d",&option);

switch (option)

{

case 0:

printf("运行结束。\n");

break;

case 1:

printf("对进程按先来先服务调度。\n\n");

fcfs();

poutput();

break;

case 2:

printf("对进程按短作业优先调度。\n\n");

sjf();

poutput();

break;

case 3:

printf("对进程按响应比高优先调度。\n\n");

hrrn();

poutput();

break;

}

}

int fcfs() /*先来先服务*/

{

float time_temp=0;

int i,j,t;

int number_schedul;

time_temp=tasks[0].atime;

for(i=0;i

{

for(j=0;j

{

if(tasks[j].atime>tasks[j+1].atime)

{t=tasks[j].atime;

tasks[j].atime=tasks[j+1].atime;

tasks[j+1].atime=t;

}

}

tasks[i].rbtime=time_temp;

tasks[i].rftime=tasks[i].rbtime+tasks[i].rtime;

tasks[i].run_flag=1;

time_temp=tasks[i].rftime;

number_schedul=i;

tasks[number_schedul].order=i+1;

}

return 0;

}

int sjf() /*短作业优先*/

{

float temp_time=0;

int i=0,j;

int number_schedul,temp_counter;

float rtime;

rtime=tasks[i].rtime;

j=1;

while ((j

{

if (tasks[j].rtime

{

rtime=tasks[j].rtime;

i=j;

}

j++;

} /*查找第一个被调度的进程*/

/*对第一个被调度的进程求相应的参数*/

number_schedul=i;

tasks[number_schedul].rbtime=tasks[number_schedul].atime;

tasks[number_schedul].rftime=tasks[number_schedul].rbtime+tasks[number_schedul].rtime; tasks[number_schedul].run_flag=1;

temp_time=tasks[number_schedul].rftime;

tasks[number_schedul].order=1;

temp_counter=1;

while (temp_counter

{

for(j=0;j

{

if((tasks[j].atime

{

rtime=tasks[j].rtime;number_schedul=j;break;}

}

for(j=0;j

{

if((tasks[j].atime

if(tasks[j].rtime

{

rtime=tasks[j].rtime;

number_schedul=j;

}

}

/*查找下一个被调度的进程*/

/*对找到的下一个被调度的进程求相应的参数*/

tasks[number_schedul].rbtime=temp_time;

tasks[number_schedul].rftime=tasks[number_schedul].rbtime+tasks[number_schedul].rtime; tasks[number_schedul].run_flag=1;

temp_time=tasks[number_schedul].rftime;

temp_counter++;

tasks[number_schedul].order=temp_counter;

}return 0;

}

int hrrn() /*响应比高优先*/

{

int j,number_schedul,temp_counter;

float temp_time,respond_rate,max_respond_rate;

/*第一个进程被调度*/

tasks[0].rbtime=tasks[0].atime;

tasks[0].rftime=tasks[0].rbtime+tasks[0].rtime;

temp_time=tasks[0].rftime;

tasks[0].run_flag=1;

tasks[0].order=1;

temp_counter=1;

/*调度其他进程*/

while(temp_counter

{

max_respond_rate=0;

for(j=1;j

{

if((tasks[j].atime

{

respond_rate=(temp_time-tasks[j].atime)/tasks[j].rtime;

if (respond_rate>max_respond_rate)

{

max_respond_rate=respond_rate;

number_schedul=j;

}

}

}

/*找响应比高的进程*/

tasks[number_schedul].rbtime=temp_time;

tasks[number_schedul].rftime=tasks[number_schedul].rbtime+tasks[number_schedul].rtime; temp_time=tasks[number_schedul].rftime;

tasks[number_schedul].run_flag=1;

temp_counter+=1;

tasks[number_schedul].order=temp_counter;

}

return 0;

}

int pinput() /*进程参数输入*/

{

int i;

printf("please input the process counter:\n");

scanf("%d",&counter);

for(i=0;i

{ printf("******************************************\n");

printf("please input the process of %d th :\n",i+1);

printf("please input the name:\n");

scanf("%s",tasks[i].name);

printf("please input the atime:\n");

scanf("%f",&tasks[i].atime);

printf("please input the rtime:\n");

scanf("%f",&tasks[i].rtime);

tasks[i].rbtime=0;

tasks[i].rftime=0;

tasks[i].order=0;

tasks[i].run_flag=0;

}

return 0;

}

int poutput() /*调度结果输出*/

{

int i;

float turn_round_time=0,f1,w=0;

printf("name atime rtime rbtime rftime order turn_round_time\n");

for(i=0;i

{

f1=tasks[i].rftime-tasks[i].atime;

turn_round_time+=f1;

w+=(f1/tasks[i].rtime);

printf(" %s, %5.3f, %5.3f, %5.3f, %5.3f, %d, %5.3f\n",tasks[i].name,tasks[i].atime,tasks[i].rtime,tasks[i].rbtime,tasks[i].rftime,tasks[i].order,f1);

}

printf("average_turn_round_timer=%5.2f\n",turn_round_time/counter);

printf("weight_average_turn_round_timer=%5.2f\n",w/counter);

return 0;

}


相关内容

  • 作业四(作业管理20**年)
    作业四 姓名 学号 班级 一.单项选择题 1.是作业存在的唯一标志. A.作业名 B.进程控制块 C.作业控制块 D.程序名 2.作业调度算法的选择常考虑因素之一是使系统有最高的吞吐率,为此应 A.不让处理机空闲 B.能够处理尽可能多的作业 ...
  • 操作系统 磁盘管理 实验报告
    实 验 报 告 课程名称:院 系:专业班级:姓 名:指导老师: 操作系统 信息与控制工程学院 计算机0801 2010年 12月 31日 目录 一.实验目的 ......................................... ...
  • 第3章处理机调度与死锁练习答案
    第三章 处理机调度与死锁 一.单项选择题 1.操作系统中的作业管理是一种(A ). A.宏观的高级管理 B.宏观的低级管理 C.系统刚开始加电 D.初始化引导完成 2.作业调度又称为[1A],它决定将哪些在外存储器上的处于[2D]状态的作业 ...
  • 磁盘调度算法的编程实现及评估
    操作系统课程设计报告 --磁盘调度算法的编程实现及评估 姓名 学号 日期 一.课程设计题目 磁盘调度算法的编程实现及评估 二.课程设计目的 通过编程实现磁盘调度算法设计,加深理解磁盘调度算法的理解及提高编程能力. 三.课程设计内容 编程实现 ...
  • 华为防火墙配置
    目 录 附录 A 缩略语表........................................................................................................... ...
  • 基于贪婪算法的自动排课表系统的研究与实现
    第29卷第18期Vol.29 No.18 计算机工程与设计 ComputerEngineeringandDesign 2008年9月Sept.2008 基于贪婪算法的自动排课表系统的研究与实现 王帮海1,2,李振坤1 (1.广东工业大学计算 ...
  • 数学模型之眼科病床的合理安排
    [摘要]为解决某医院眼科病床按照FCFS安排时存在队列越来越长的问题,提出了一种基于FCFS和优先权服务的局部插队算法.该算法建立了以急症病人享有优先权服务,并且首先将在同一天到达的非急症病人按白内障(单眼).白内障(双眼).青光眼.视网膜 ...
  • [人工智能导论]教学大纲
    <人工智能导论>教学大纲 大纲说明 课程代码:3235042 总学时:32学时(讲课32学时) 总学分:2学分 课程类别:限制性选修 适用专业:计算机科学与技术,以及有关专业 预修要求:C程序设计语言,数据结构 课程的性质.目的 ...
  • 算法设计与分析
    阶乘 Public static int factorial (int n){ If (n==0) return 1; return*factorial(n-1); } Hanoi Public static void hanoi(int ...