最短ジョブ優先(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 &