日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(八)作业调度

發布時間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (八)作业调度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作業調度主要有FIFO,運算時間短的作業優先,優先數調度算法,響應比最高者優先調度算法,均衡調度算法
模擬最高響應比優先作業調度算法
輸入:作業流文件,其中存儲的是一系列要執行的作業,
每個作業包括三個數據項:
作業號、作業進入系統的時間(用一整數表示,如10:10,表示成1010)、估計執行時間(單位分)優先級(0級最高)
參數用空格隔開,下面是示例:
1 800 50
2 815 30
3 830 25
4 835 20
5 845 15
6 900 10
7 920 5
其中調度時刻為最后一個作業到達系統的時間!
輸出作業號!進入內存的時間!每行輸出一個作業信息
本程序包括:FIFO,運算時間短的作業優先,優先數調度算法,響應比最高者優先調度算法

作業調度 #include<stdio.h>
#include
<iostream.h>
#include
<iomanip.h>
#include
<string.h>

const int MAXJOB=50; //定義最大作業

//定義數據結構體
typedef struct node{
int number;
int reach_time;
int reach_hour;
int reach_minite;
int need_time;

int privilege;

float excellent;

int start_time;
int wait_time;

int visited;
}job;

job jobs[MAXJOB];
int quantity;

//初始化函數
void initial()
{
int i;

for(i=0;i<MAXJOB;i++){
jobs[i].number
=0;
jobs[i].reach_time
=0;
jobs[i].reach_hour
=0;
jobs[i].reach_minite
=0;

jobs[i].privilege
=0;

jobs[i].excellent
=0;

jobs[i].start_time
=0;
jobs[i].wait_time
=0;

jobs[i].visited
=0;
}
quantity
=0;
}

//重置作業數據函數
void reset()
{
int i;

for(i=0;i<MAXJOB;i++){
jobs[i].start_time
=0;
jobs[i].wait_time
=0;

jobs[i].visited
=0;
}

}

//讀入作業數據函數
void readData()
{
FILE
*fp;
char fname[20];
int i;

cout
<<"請輸入作業數據文件名:";
strcpy(fname,
"8job.txt");
cin
>>fname;

if((fp=fopen(fname,"r"))==NULL){
cout
<<"錯誤,文件打不開,請檢查文件名:)"<<endl;
}
else{
while(!feof(fp)){
fscanf(fp,
"%d %d %d %d",&jobs[quantity].number,&jobs[quantity].reach_time,&jobs[quantity].need_time,&jo
bs[quantity].privilege);
jobs[quantity].reach_hour
=jobs[quantity].reach_time/100;
jobs[quantity].reach_minite
=jobs[quantity].reach_time%100;
quantity
++;
}
//輸出初始作業數據
cout<<"輸出初始作業數據"<<endl;
cout
<<"---------------------------------------------------------------"<<endl;
cout.setf(
2);
cout
<<setw(10)<<"作業號"<<setw(12)<<"到達時間"<<setw(14)<<"所需時間(分)"<<setw(14)<<"優先級(0>1)"<<endl;

for(i=0;i<quantity;i++){
cout
<<setw(10)<<jobs[i].number<<setw(12)<<jobs[i].reach_time<<setw(14)<<jobs[i].need_time<<setw(14)<<jobs[i].privil
ege
<<endl;
}
}

}

//FIFO算法
void FIFO()
{
int i;
int current_hour;
int current_minute;

int total_time=0;

//輸出作業流
cout<<endl;
cout
<<endl<<"FIFO算法作業流"<<endl;
cout
<<"---------------------------------------------------------------"<<endl;
cout.setf(
2);
cout
<<setw(10)<<"作業號"<<setw(12)<<"到達時間"<<setw(12)<<"開始時間"<<setw(14)<<"周轉時間(分)"<<endl;

current_hour
=jobs[0].reach_hour;
current_minute
=jobs[0].reach_minite;
for(i=0;i<quantity;i++){
jobs[i].start_time
=current_hour*100+current_minute;
jobs[i].wait_time
=(current_hour-jobs[i].reach_hour)*60+(current_minute-jobs[i].reach_minite)+jobs[i
].need_time;

cout
<<setw(10)<<jobs[i].number<<setw(12)<<jobs[i].reach_time<<setw(12)<<jobs[i].start_time<<setw(14)<<jobs[i].wait_
time
<<endl;

current_hour
=current_hour+(jobs[i].need_time+current_minute)/60;
current_minute
=(jobs[i].need_time+current_minute)%60;

total_time
+=jobs[i].wait_time;
}

cout
<<endl<<"總周轉時間:"<<total_time<<" 平均周轉時間:"<<total_time/quantity<<endl;
}


//運算時間短的作業優先算法
void shorter()
{
int i,j,p;
int current_hour;
int current_minute;
int current_need_time;

int total_time=0;

//輸出作業流
cout<<endl;
cout
<<endl<<"時間短作業優先算法作業流(開始調度時刻為最后一個作業到達系統的時間)"<<endl;
cout
<<"------------------------------------------------------------------------"<<endl;
cout.setf(
2);
cout
<<setw(10)<<"作業號"<<setw(12)<<"到達時間"<<setw(14)<<"所需時間(分)"<<setw(12)<<"開始時間"<<setw(14)<<"周轉時間(分)"<<endl;

current_hour
=jobs[quantity-1].reach_hour;
current_minute
=jobs[quantity-1].reach_minite;
for(i=0;i<quantity;i++){
current_need_time
=30000;
for(j=0;j<quantity;j++){
if((jobs[j].visited==0)&&(jobs[j].need_time<current_need_time)){
p
=j;
current_need_time
=jobs[j].need_time;
}
}

jobs[p].start_time
=current_hour*100+current_minute;
jobs[p].wait_time
=(current_hour-jobs[p].reach_hour)*60+(current_minute-jobs[p].reach_minite)+jobs[p
].need_time;

cout
<<setw(10)<<jobs[p].number<<setw(12)<<jobs[p].reach_time<<setw(14)<<jobs[p].need_time<<setw(12)<<jobs[p].start_
time
<<setw(14)<<jobs[p].wait_time<<endl;

current_hour
=current_hour+(jobs[p].need_time+current_minute)/60;
current_minute
=(jobs[p].need_time+current_minute)%60;

jobs[p].visited
=1;

total_time
+=jobs[p].wait_time;
}
cout
<<endl<<"總周轉時間:"<<total_time<<" 平均周轉時間:"<<total_time/quantity<<endl;
}

//優先數調度算法
void privilege()
{
int i,j,p;
int current_hour;
int current_minute;
int current_privilege;

int total_time=0;

//輸出作業流
cout<<endl;
cout
<<endl<<"優先數調度算法作業流(開始調度時刻為最后一個作業到達系統的時間)"<<endl;
cout
<<"------------------------------------------------------------------------"<<endl;
cout.setf(
2);
cout
<<setw(10)<<"作業號"<<setw(12)<<"到達時間"<<setw(14)<<"優先級(0>1)"<<setw(12)<<"開始時間"<<setw(14)<<"周轉時間(分)"<<endl;

current_hour
=jobs[quantity-1].reach_hour;
current_minute
=jobs[quantity-1].reach_minite;
for(i=0;i<quantity;i++){
current_privilege
=30000;
for(j=0;j<quantity;j++){
if((jobs[j].visited==0)&&(jobs[j].privilege<current_privilege)){
p
=j;
current_privilege
=jobs[j].privilege;
}
}
jobs[p].start_time
=current_hour*100+current_minute;
jobs[p].wait_time
=(current_hour-jobs[p].reach_hour)*60+(current_minute-jobs[p].reach_minite)+jobs[p
].need_time;

cout
<<setw(10)<<jobs[p].number<<setw(12)<<jobs[p].reach_time<<setw(14)<<jobs[p].privilege<<setw(12)<<jobs[p].start_
time
<<setw(14)<<jobs[p].wait_time<<endl;

current_hour
=current_hour+(jobs[p].need_time+current_minute)/60;
current_minute
=(jobs[p].need_time+current_minute)%60;

jobs[p].visited
=1;

total_time
+=jobs[p].wait_time;
}
cout
<<endl<<"總周轉時間:"<<total_time<<" 平均周轉時間:"<<total_time/quantity<<endl;
}

//響應比最高者優先調度算法
void excellent()
{
int i,j,p;
int current_hour;
int current_minute;
float current_excellent;

int total_time=0;
//輸出作業流
cout<<endl;
cout
<<endl<<"響應比高者優先調度算法作業流(開始調度時刻為最后一個作業到達系統的時間)"<<endl;
cout
<<"------------------------------------------------------------------------"<<endl;
cout.setf(
2);
cout
<<setw(10)<<"作業號"<<setw(12)<<"到達時間"<<setw(12)<<"開始時間"<<setw(14)<<"周轉時間(分)"<<endl;

current_hour
=jobs[quantity-1].reach_hour;
current_minute
=jobs[quantity-1].reach_minite;
for(i=0;i<quantity;i++){
current_excellent
=-1;
for(j=0;j<quantity;j++){
if(jobs[j].visited==0){
jobs[j].wait_time
=(current_hour-jobs[j].reach_hour)*60+(current_minute-jobs[j].reach_minite);
jobs[j].excellent
=(float)(jobs[j].wait_time/jobs[j].need_time);
}
}

for(j=0;j<quantity;j++){
if((jobs[j].visited==0)&&(jobs[j].excellent>current_excellent)){
p
=j;
current_excellent
=jobs[j].excellent;
}
}
jobs[p].start_time
=current_hour*100+current_minute;
jobs[p].wait_time
=(current_hour-jobs[p].reach_hour)*60+(current_minute-jobs[p].reach_minite)+jobs[p
].need_time;

cout
<<setw(10)<<jobs[p].number<<setw(12)<<jobs[p].reach_time<<setw(12)<<jobs[p].start_time<<setw(14)<<jobs[p].wait_
time
<<endl;

current_hour
=current_hour+(jobs[p].need_time+current_minute)/60;
current_minute
=(jobs[p].need_time+current_minute)%60;

jobs[p].visited
=1;

total_time
+=jobs[p].wait_time;
}
cout
<<endl<<"總周轉時間:"<<total_time<<" 平均周轉時間:"<<total_time/quantity<<endl;

}

//顯示版權信息函數
void version()
{
cout
<<endl<<endl;

cout
<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
cout
<<" ┃     作業調度模擬系統        ┃"<<endl;
cout
<<" ┠───────────────────────┨"<<endl;
cout
<<" ┃   (c)All Right Reserved Neo       ┃"<<endl;
cout
<<" ┃      sony006@163.com          ┃"<<endl;
cout
<<" ┃     version 2004 build 1122      ┃"<<endl;
cout
<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;

cout
<<endl<<endl;
}

void main()
{
version();
initial();

readData();

FIFO();

shorter();
reset();

privilege();
reset();

excellent();


}

?

?

轉載于:https://www.cnblogs.com/FCWORLD/archive/2010/12/04/1896363.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的(八)作业调度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。