ループスケジューリング用のCプログラム
n 個のプロセスと、それらに対応するバースト時間とタイム クォンタムが与えられます。タスクは、平均待機時間と平均ターンアラウンド タイムを見つけて、結果を表示することです。
ラウンド ロビンとはスケジューリング?
ラウンド ロビンは、特にタイム シェアリング システム用に設計された CPU スケジューリング アルゴリズムです。これは、FCFS スケジューリング アルゴリズムに似ていますが、ラウンド ロビン プロセスでは量子時間サイズで制限される点が 1 つ変更されています。小さな時間単位は、タイム クォンタムまたはタイム スライスとして知られています。タイム クォンタムの範囲は 10 ~ 100 ミリ秒です。 CPU は、レディ キューを、指定されたタイム スライスでプロセスを実行するための循環キューとして扱います。プロセスに固定時間が割り当てられるため、プリエンプティブなアプローチに従います。唯一の欠点は、コンテキスト切り替えのオーバーヘッドです。
何を計算する必要がありますか?
完了時間は、プロセスに必要な時間です。実行を完了するまでの時間です。
ターンアラウンド タイムは、プロセスの送信から完了までの時間間隔です。
ターンアラウンド タイム = プロセスの完了 - プロセスの送信
待機時間はターンアラウンド タイムとバースト タイムの差です。
待機時間 = ターンアラウンド タイム – バースト タイム
例
3 つのプロセスが与えられています。 P1、P2、および P3 (対応するバースト時間は 24、3、および 3)
バースト時間 | |
---|---|
24 | |
3 | |
3 |
平均待ち時間 = 17/3 = 5.66 ミリ秒
アルゴリズム
Start Step 1-> In function int turnarroundtime(int processes[], int n, int bt[], int wt[], int tat[]) Loop For i = 0 and i < n and i++ Set tat[i] = bt[i] + wt[i] return 1 Step 2-> In function int waitingtime(int processes[], int n, int bt[], int wt[], int quantum) Declare rem_bt[n] Loop For i = 0 and i < n and i++ Set rem_bt[i] = bt[i] Set t = 0 Loop While (1) Set done = true Loop For i = 0 and i < n and i++ If rem_bt[i] > 0 then, Set done = false If rem_bt[i] > quantum then, Set t = t + quantum Set rem_bt[i] = rem_bt[i] - quantum Else Set t = t + rem_bt[i] Set wt[i] = t - bt[i] Set rem_bt[i] = 0 If done == true then, Break Step 3->In function int findavgTime(int processes[], int n, int bt[], int quantum) Declare and initialize wt[n], tat[n], total_wt = 0, total_tat = 0 Call function waitingtime(processes, n, bt, wt, quantum) Call function turnarroundtime(processes, n, bt, wt, tat) Print "Processes Burst Time Waiting Time turnaround time " Loop For i=0 and i<n and i++ Set total_wt = total_wt + wt[i] Set total_tat = total_tat + tat[i] Print the value i+1, bt[i], wt[i], tat[i] Print "Average waiting time = total_wt / n Print "Average turnaround time =total_tat / n Step 4-> In function int main() Delcare and initialize processes[] = { 1, 2, 3} Declare and initialize n = sizeof processes / sizeof processes[0] Declare and initialize burst_time[] = {8, 6, 12} Set quantum = 2 Call function findavgTime(processes, n, burst_time, quantum)
例 例の演示
#include <stdio.h> // Function to calculate turn around time int turnarroundtime(int processes[], int n, int bt[], int wt[], int tat[]) { // calculating turnaround time by adding // bt[i] + wt[i] for (int i = 0; i < n ; i++) tat[i] = bt[i] + wt[i]; return 1; } // Function to find the waiting time for all // processes int waitingtime(int processes[], int n, int bt[], int wt[], int quantum) { // Make a copy of burst times bt[] to store remaining // burst times. int rem_bt[n]; for (int i = 0 ; i < n ; i++) rem_bt[i] = bt[i]; int t = 0; // Current time // Keep traversing processes in round robin manner // until all of them are not done. while (1) { bool done = true; // Traverse all processes one by one repeatedly for (int i = 0 ; i < n; i++) { // If burst time of a process is greater than 0 // then only need to process further if (rem_bt[i] > 0) { done = false; // There is a pending process if (rem_bt[i] > quantum) { // Increase the value of t i.e. shows // how much time a process has been processed t += quantum; // Decrease the burst_time of current process // by quantum rem_bt[i] -= quantum; } // If burst time is smaller than or equal to // quantum. Last cycle for this process else { // Increase the value of t i.e. shows // how much time a process has been processed t = t + rem_bt[i]; // Waiting time is current time minus time // used by this process wt[i] = t - bt[i]; // As the process gets fully executed // make its remaining burst time = 0 rem_bt[i] = 0; } } } // If all processes are done if (done == true) break; } return 1; } // Function to calculate average time int findavgTime(int processes[], int n, int bt[], int quantum) { int wt[n], tat[n], total_wt = 0, total_tat = 0; // Function to find waiting time of all processes waitingtime(processes, n, bt, wt, quantum); // Function to find turn around time for all processes turnarroundtime(processes, n, bt, wt, tat); // Display processes along with all details printf("Processes Burst Time Waiting Time turnaround time</p><p>"); // Calculate total waiting time and total turn // around time for (int i=0; i<n; i++) { total_wt = total_wt + wt[i]; total_tat = total_tat + tat[i]; printf("\t%d\t\t\t%d\t\t\t%d\t\t\t%d</p><p>",i+1, bt[i], wt[i], tat[i]); } printf("Average waiting time = %f", (float)total_wt / (float)n); printf("</p><p>Average turnaround time = %f</p><p>", (float)total_tat / (float)n); return 1; } // main function int main() { // process id's int processes[] = { 1, 2, 3}; int n = sizeof processes / sizeof processes[0]; // Burst time of all processes int burst_time[] = {8, 6, 12}; // Time quantum int quantum = 2; findavgTime(processes, n, burst_time, quantum); return 0; }
出力
以上がループスケジューリング用のCプログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









双曲線関数は、円の代わりに双曲線を使用して定義され、通常の三角関数と同等です。ラジアン単位で指定された角度から双曲線正弦関数の比率パラメーターを返します。しかし、その逆、つまり別の言い方をすればいいのです。双曲線正弦から角度を計算したい場合は、双曲線逆正弦演算のような逆双曲線三角関数演算が必要です。このコースでは、C++ で双曲線逆サイン (asinh) 関数を使用し、ラジアン単位の双曲線サイン値を使用して角度を計算する方法を説明します。双曲線逆正弦演算は次の式に従います -$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})}ここで\:In\:is\:自然対数\:(log_e\:k)

デフォルトでは、デスクトップの壁紙をクリックすると、macOSSonoma はアクティブなウィンドウをすべて非表示にします。これは、デスクトップ上にアクセスする必要のあるファイルが大量にある場合に便利です。ただし、この動作が腹立たしいと感じた場合は、それをオフにする方法があります。 Apple の最新の macOS Sonoma Mac オペレーティング システムには、「壁紙をクリックしてデスクトップを表示する」という新しいオプションがあります。デフォルトで有効になっているこのオプションは、複数のウィンドウを開いている傾向があり、ウィンドウを最小化したり移動したりせずにデスクトップ上のファイルやフォルダーにアクセスしたい場合に特に便利です。この機能を有効にしてデスクトップの壁紙をクリックすると、開いているすべてのウィンドウが一時的に脇に追いやられ、デスクトップに直接アクセスできるようになります。完了したら、もう一度行うことができます

名前変更機能は、ファイルまたはディレクトリを古い名前から新しい名前に変更します。この操作は移動操作と似ています。したがって、この名前変更機能を使用してファイルを移動することもできます。この関数は、stdio.h ライブラリ ヘッダー ファイルに存在します。 rename 関数の構文は次のとおりです: intrename(constchar*oldname,constchar*newname); rename() 関数は 2 つのパラメータを受け取ります。 1 つは古い名前、もう 1 つは新しい名前です。どちらのパラメータも、ファイルの古い名前と新しい名前を定義する定数文字へのポインタです。ファイルの名前が正常に変更された場合はゼロを返し、それ以外の場合はゼロ以外の整数を返します。名前変更操作中

マップは C++ の特別なタイプのコンテナで、各要素は 2 つの値、つまりキー値とマップ値のペアです。キー値は各項目のインデックス付けに使用され、マップされた値はキーに関連付けられた値です。マップされた値が一意であるかどうかに関係なく、キーは常に一意です。 C++ でマップ要素を出力するには、反復子を使用する必要があります。項目のセット内の要素は、反復子オブジェクトによって示されます。イテレータは主に配列や他のタイプのコンテナ (ベクトルなど) で使用され、特定の範囲内の特定の要素を識別するために使用できる特定の操作セットを備えています。イテレータをインクリメントまたはデクリメントして、範囲またはコンテナ内に存在するさまざまな要素を参照できます。イテレータは、範囲内の特定の要素のメモリ位置を指します。イテレータを使用して C++ でマップを出力する まず、定義方法を見てみましょう。

Strncmp は、string.h ファイル内に存在する定義済みライブラリ関数で、2 つの文字列を比較し、どちらの文字列が大きいかを表示するために使用されます。 strcmp 関数 (文字列比較) この関数は 2 つの文字列を比較します。 2 つの文字列内の最初の不一致文字の ASCII 差異を返します。構文 intstrcmp(string1,string2); 差がゼロに等しい場合は、string1=string2 となります。差が正の場合、文字列 1 > 文字列 2 になります。差が負の場合は、string1<string2 となります。 strncmp 関数の例 この関数は、2 つの文字列の最初の n 文字を比較するために使用されます。構文 strn

論理プログラミングの問題を解決する場合、文字列または文字の使用が非常に役立つ場合があります。文字列は文字の集合であり、ASCII 値の記号を保持するために使用される 1 バイトのデータ型です。記号には、英文字、数字、または特殊文字を使用できます。この記事では、C++ を使用して文字が英語文字かアルファベット文字かを確認する方法を学びます。 isalpha() 関数のチェック 数値が文字であるかどうかをチェックするには、ctype.h ヘッダー ファイルの isalpha() 関数を使用できます。これは文字を入力として受け取り、それがアルファベットの場合は true を返し、そうでない場合は false を返します。この関数の使用法を理解するために、次の C++ 実装を見てみましょう。 Example の中国語訳は次のとおりです。

ラムダ式がループから抜け出すには、特定のコード例が必要です。プログラミングにおいて、ループ構造は頻繁に使用される重要な構文です。ただし、特定の状況では、現在のループ反復を終了するだけでなく、ループ本体内で特定の条件が満たされたときにループ全体から抜け出したい場合があります。このとき、ラムダ式の特性は、ループから抜け出すという目標を達成するのに役立ちます。ラムダ式は匿名関数を宣言する方法であり、内部的に単純な関数ロジックを定義できます。通常の関数宣言とは異なり、

この問題では、ユークリッドのアルゴリズムを実装して 2 つの整数の最大公約数 (GCD) と最小公倍数 (LCM) を求め、結果を指定された整数で出力します。解決策 2 つの整数の最大公約数 (GCD) と最小公倍数 (LCM) を求めるユークリッド アルゴリズムを実装する解決策は次のとおりです。GCD と最小公倍数を求めるロジックは次のとおりです。if (firstno*secondno!=0) { gcd= gcd_rec(firstno,nextno); printf("TheGCDof%dand%dis%d",
