目次
出力
ホームページ バックエンド開発 C++ ループスケジューリング用のCプログラム

ループスケジューリング用のCプログラム

Sep 25, 2023 pm 05:09 PM
Cプログラム サイクル スケジュール設定

n 個のプロセスと、それらに対応するバースト時間とタイム クォンタムが与えられます。タスクは、平均待機時間と平均ターンアラウンド タイムを見つけて、結果を表示することです。

ラウンド ロビンとはスケジューリング?

ラウンド ロビンは、特にタイム シェアリング システム用に設計された CPU スケジューリング アルゴリズムです。これは、FCFS スケジューリング アルゴリズムに似ていますが、ラウンド ロビン プロセスでは量子時間サイズで制限される点が 1 つ変更されています。小さな時間単位は、タイム クォンタムまたはタイム スライスとして知られています。タイム クォンタムの範囲は 10 ~ 100 ミリ秒です。 CPU は、レディ キューを、指定されたタイム スライスでプロセスを実行するための循環キューとして扱います。プロセスに固定時間が割り当てられるため、プリエンプティブなアプローチに従います。唯一の欠点は、コンテキスト切り替えのオーバーヘッドです。

何を計算する必要がありますか?

完了時間は、プロセスに必要な時間です。実行を完了するまでの時間です。

ターンアラウンド タイムは、プロセスの送信から完了までの時間間隔です。

ターンアラウンド タイム = プロセスの完了 - プロセスの送信

待機時間はターンアラウンド タイムとバースト タイムの差です。

待機時間 = ターンアラウンド タイム – バースト タイム

3 つのプロセスが与えられています。 P1、P2、および P3 (対応するバースト時間は 24、3、および 3)

#プロセスバースト時間P124P23P33
タイム クォンタムは 4 ミリ秒であるため、プロセス P1 は最初の 4 ミリ秒を取得しますが、実行を完了するにはさらに 20 ミリ秒が必要ですが、CPU は最初のクォンタムの後にそれをプリエンプトし、CPU が次のプロセス P2 に割り当てられます。表に示すように、プロセス P2 は実行を完了するのに 3 ミリ秒しか必要としないため、CPU は 4 ミリ秒ではなく 3 ミリ秒のみの時間量に割り当てられます。ガント チャート、平均待ち時間は次のように計算されます。 -

平均待ち時間 = 17/3 = 5.66 ミリ秒ループスケジューリング用のCプログラム

アルゴリズム

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&#39;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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

指定された値を引数として受け取る逆双曲線正弦関数の値を見つける C++ プログラム 指定された値を引数として受け取る逆双曲線正弦関数の値を見つける C++ プログラム Sep 17, 2023 am 10:49 AM

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

macOS で「クリックしてデスクトップを表示」機能を無効にする方法 macOS で「クリックしてデスクトップを表示」機能を無効にする方法 Nov 23, 2023 pm 02:31 PM

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

C プログラムは rename() 関数を使用してファイル名を変更します C プログラムは rename() 関数を使用してファイル名を変更します Sep 21, 2023 pm 10:01 PM

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

辞書を印刷する C++ プログラム 辞書を印刷する C++ プログラム Sep 11, 2023 am 10:33 AM

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

strncmp ライブラリ関数を使用して 2 つの文字列を比較する C プログラムを作成します。 strncmp ライブラリ関数を使用して 2 つの文字列を比較する C プログラムを作成します。 Sep 09, 2023 pm 01:17 PM

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

文字がアルファベットか非アルファベットかをチェックする C++ プログラム 文字がアルファベットか非アルファベットかをチェックする C++ プログラム Sep 14, 2023 pm 03:37 PM

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

ラムダ式がループから抜け出す ラムダ式がループから抜け出す Feb 20, 2024 am 08:47 AM

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

ユークリッドアルゴリズムを実装するCプログラム ユークリッドアルゴリズムを実装するCプログラム Sep 17, 2023 pm 12:41 PM

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

See all articles