最短ジョブ優先(SJF)スケジューリングのためのC ++プログラム(非プリエンプティブ)
与えられたプロセス、それぞれのプロセスのバースト時間と量子限界。タスクは、Shortest Job First Schedulingの非プリエンプティブ方式を使用して、待機時間、所要時間、およびそれぞれの平均時間を見つけて印刷することです。
最初のスケジュールの最短ジョブは何ですか?
最短ジョブ優先スケジューリングは、非プリエンプティブスケジューリング規律に従うジョブまたはプロセススケジューリングアルゴリズムです。この場合、スケジューラーは、完了時間が最小の待機キューからプロセスを選択し、CPUをそのジョブまたはプロセスに割り当てます。 SJFは平均待機時間を短縮し、スループットを向上させるため、SJFの方が最適であるため、FIFOアルゴリズムよりも最短ジョブ優先の方が望ましいです。
所要時間、待機時間、完了時間はどのくらいですか?
- 完了時間 プロセスが実行を完了するのに必要な時間です
-
所要時間は、プロセスの送信から完了までの時間間隔です。
所要時間=プロセスの完了–プロセスの提出
-
待機時間は、ターンアラウンドタイムとバーストタイムの差です
待機時間=所要時間–バースト時間
例
プロセスP1、P2、P3、P4、およびP5が与えられ、対応するバースト時間が以下に示されます
。プロセス | バースト時間 |
---|---|
P1 | 4 |
P2 | 2 |
P3 | 8 |
P4 | 1 |
P5 | 9 |
プロセスP4のバースト時間はすべてのプロセスの中で最小であるため、最初にCPUが割り当てられます。その後、P2がキューに入れられ、次にP1、P3、P5がキューに入れられます。
平均待機時間は、ガントチャートに基づいて計算されます。 P1は3を待つ必要があり、P2は1を待つ必要があり、P3は7を待つ必要があり、P4は0を待つ必要があり、P5は15を待つ必要があります。したがって、平均待機時間は-
アルゴリズム
Start Step 1-> In function swap(int *a, int *b) Set temp = *a Set *a = *b Set *b = temp Step 2-> In function arrangeArrival(int num, int mat[][3]) Loop For i=0 and i<num and i++ Loop For j=0 and j<num-i-1 and j++ If mat[1][j] > mat[1][j+1] then, For k=0 and k<5 and k++ Call function swap(mat[k][j], mat[k][j+1]) Step 3-> In function completionTime(int num, int mat[][3]) Declare temp, val Set mat[3][0] = mat[1][0] + mat[2][0] Set mat[5][0] = mat[3][0] - mat[1][0] Set mat[4][0] = mat[5][0] - mat[2][0] Loop For i=1 and i<num and i++ Set temp = mat[3][i-1] Set low = mat[2][i] Loop For j=i and j<num and j++ If temp >= mat[1][j] && low >= mat[2][j] then, Set low = mat[2][j] Set val = j Set mat[3][val] = temp + mat[2][val] Set mat[5][val] = mat[3][val] - mat[1][val] Set mat[4][val] = mat[5][val] - mat[2][val] Loop For k=0; k<6; k++ Call function swap(mat[k][val], mat[k][i]) Step 4-> In function int main() Declare and set num = 3, temp Declare and set mat[6][3] = {1, 2, 3, 3, 6, 4, 2, 3, 4} Print Process ID, Arrival Time, Burst Time Loop For i=0 and i<num and i++ Print the values of mat[0][i], mat[1][i], mat[2][i] Call function arrangeArrival(num, mat) Call function completionTime(num, mat) Print Process ID, Arrival Time, Burst Time, Waiting Time, Turnaround Time Loop For i=0 and i<num and i++ Print the values of mat[0][i], mat[1][i], mat[2][i], mat[4][i], mat[5][i] Stop
例
// C++ program to implement Shortest Job first with Arrival Time #include<iostream> using namespace std; void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void arrangeArrival(int num, int mat[][3]) { for(int i=0; i<num; i++) { for(int j=0; j<num-i-1; j++) { if(mat[1][j] > mat[1][j+1]) { for(int k=0; k<5; k++) { swap(mat[k][j], mat[k][j+1]); } } } } } void completionTime(int num, int mat[][3]) { int temp, val; mat[3][0] = mat[1][0] + mat[2][0]; mat[5][0] = mat[3][0] - mat[1][0]; mat[4][0] = mat[5][0] - mat[2][0]; for(int i=1; i<num; i++) { temp = mat[3][i-1]; int low = mat[2][i]; for(int j=i; j<num; j++) { if(temp >= mat[1][j] && low >= mat[2][j]) { low = mat[2][j]; val = j; } } mat[3][val] = temp + mat[2][val]; mat[5][val] = mat[3][val] - mat[1][val]; mat[4][val] = mat[5][val] - mat[2][val]; for(int k=0; k<6; k++) { swap(mat[k][val], mat[k][i]); } } } int main() { int num = 3, temp; int mat[6][3] = {1, 2, 3, 3, 6, 4, 2, 3, 4}; cout<<"Before Arrange...\n"; cout<<"Process ID\tArrival Time\tBurst Time\n"; for(int i=0; i<num; i++) { cout<<mat[0][i]<<"\t\t"<<mat[1][i]<<"\t\t"<<mat[2][i]<<"\n"; } arrangeArrival(num, mat); completionTime(num, mat); cout<<"Final Result...\n"; cout<<"Process ID\tArrival Time\tBurst Time\tWaiting Time\tTurnaround Time\n"; for(int i=0; i<num; i++) { cout<<mat[0][i]<<"\t\t"<<mat[1][i]<<"\t\t"<<mat[2][i]<<"\t\t"<<mat[4][i]<<"\t\t"<<mat[5][i]<<"\n"; } }
出力
-
QuickSort用のC++プログラム?
クイックソートは、比較を使用してソートされていないリスト(配列)をソートするソート手法です。クイックソートは、パーティション交換ソートとも呼ばれます。 等しいソート項目の相対的な順序が保持されないため、安定したソートではありません。クイックソートは配列を操作できるため、ソートを実行するために少量の追加メモリが必要です。常に最悪の場合のパーティションを選択するわけではないことを除いて、選択ソートと非常によく似ています。したがって、選択ソートのより適切な形式と見なすことができます。 QuickSortは、最も効率的な並べ替えアルゴリズムの1つであり、配列を小さい配列に分割することに基づいていま
-
最初のn個の自然数の二乗和のためのC++プログラム?
この問題では、最初のn個の自然数の2乗の合計を取得する方法を確認します。ここでは、1からnまで実行されるforループを使用しています。各ステップで、項の2乗を計算し、それを合計に追加します。このプログラムは、完了するまでにO(n)時間かかります。しかし、これをO(1)または一定時間で解きたい場合は、この級数式-を使用できます。 アルゴリズム squareNNatural(n) begin sum := 0 for i in range 1 to n, do sum := sum + i^2 &