1.実験の目的
- 宿題の概念の理解を深めます。
- バッチ処理システムがどのようにジョブを編成、管理、およびスケジュールするかを深く理解します。
2.実験内容:
プログラムをコンパイルして、バッチ処理システムでジョブスケジューリングを完了します。これには、より高い応答率のジョブスケジューリングアルゴリズムを使用する必要があります。実験には具体的に含まれます:最初にジョブ制御ブロックの内容、ジョブ制御ブロックの構成を決定し、次にジョブスケジューリングを完了し、最後に実行された作業をテストするためのメイン関数を記述します。
3.実験環境
Linuxオペレーティングシステム
第四に、実験プロセスと操作結果
代码:#include <string.h>
#include <stdio.h>
#define n 10
typedef struct jcb
{ char name [4]; intの長さ; intプリンター; intテープ; intランタイム; int待機時間; 次のint; } JCB; intヘッド; intテープ、プリンター; 長い記憶; JCBジョブテーブル[n]; int jobcount = 0; void shedule(){ float xk、k; int p、q、s、t; do { p = head; q = s = -1; k = 0; while(p!=-1){ if(jobtable [p] .length <= memory && jobtable [p] .tape <= tape && jobtable [p] .printer <= printer){ xk =(float)(jobtable [p] .waittime )/ jobtable [p] .runtime; if(q
0 || xk> k){ k = xk; q = p; t = s; } } s = p; p = jobtable [p] .next; } if(q!=-1){ if(t
-1)
head = jobtable [head] .next;
else
jobtable [t] .next = jobtable [q] .next;
memory = memory-jobtable [q] .length;
tape = tape-jobtable [q] .tape;
プリンター= printer-jobtable [q] .printer;
printf( "選択されたジョブ名は:%s \ n"、jobtable [q] .name);
}
} while(q!=-1);
}
int main(){ char name [4]; int size、tcount、pcount、wtime、rtime; int p; memory = 65536; tape = 4; printer = 2; head = -1; printf( "ジョブ関連データを入力(ジョブサイズを負の数)入力を停止): "); printf("ジョブ名、ジョブサイズ、テープドライブの数、プリンタの数、待機時間、推定実行時間を入力\ n "); scanf("%s%d%d %d%d%d "、name、&size、&tcount、&pcount、&wtime、&rtime); while(size!=-1){ if(jobcount <n)
p = jobcount;
else { printf( "別のジョブを作成できません\ n"); break; } jobcount ++; strcpy(jobtable [p] .name、name); jobtable [p] .length = size; jobtable [p] .printer = pcount; jobtable [p] .tape = tcount; jobtable [p] .runtime = rtime; jobtable [p] .waittime = wtime; jobtable [p] .next = head; head = p; printf( "Enter job name、ジョブサイズ、テープドライブの数、プリンタの数、待機時間、推定実行時間\ n "); scanf("%s%d%d%d%d%d "、name、&size、&tcount、&pcount、&wtime、 &rtime); } shedule(); }
結果グラフ: