[解決済み] CPUの使用率はどのように計算されますか?
2023-06-09 22:20:59
質問
私のデスクトップには、現在の CPU 使用率を表示する小さなウィジェットがあります。また、2 つのコアのそれぞれの使用量も表示されます。
私はいつも不思議に思うのですが、CPU はどのようにして処理能力の使用量を計算しているのでしょうか? また、CPU が激しい計算をしていてハングアップした場合、CPU (またはこのアクティビティを処理するもの) は、同様にハングアップすることなく、どのようにして使用状況を調べることができるでしょうか?
どのように解決するのですか?
CPU は自分自身で使用量の計算を行うわけではありません。そのタスクを簡単にするためのハードウェア機能を備えているかもしれませんが、ほとんどはオペレーティング システムの仕事です。したがって、明らかに実装の詳細は異なります (特にマルチコア システムの場合)。
一般的なアイデアは、CPU が行う必要のあることのキューがどのくらい長いかを確認することです。オペレーティング システムは、定期的にスケジューラーを見て、実行しなければならないことの数を決定することができます。
これは、当該計算を実行する Linux の関数です (Wikipedia から引用)。 :
#define FSHIFT 11 /* nr of bits of precision */
#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
#define LOAD_FREQ (5*HZ) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */
#define CALC_LOAD(load,exp,n) \
load *= exp; \
load += n*(FIXED_1-exp); \
load >>= FSHIFT;
unsigned long avenrun[3];
static inline void calc_load(unsigned long ticks)
{
unsigned long active_tasks; /* fixed-point */
static int count = LOAD_FREQ;
count -= ticks;
if (count < 0) {
count += LOAD_FREQ;
active_tasks = count_active_tasks();
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
CALC_LOAD(avenrun[1], EXP_5, active_tasks);
CALC_LOAD(avenrun[2], EXP_15, active_tasks);
}
}
質問の後半部分については、最近のほとんどのオペレーティングシステムは マルチタスク . つまり、OS はプログラムにすべての処理時間を取らせて、自分自身のための時間を確保しないのです。 (あなたがそうさせない限り) . 言い換えれば、たとえアプリケーションがハングアップしているように見えても、OSは まだ ということです。
関連
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】Dijkstraのアルゴリズムが負の重みのエッジに対して機能しないのはなぜですか?
-
[解決済み] 構造的再帰と生成的再帰はどのように違うのですか?
-
[解決済み] どのようにすれば、ほとんどすべてのアルゴリズムを修正して、最良の場合の実行時間を持つようにできるか?
-
[解決済み] DPLLアルゴリズムはどのように動作しますか?[クローズド]
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Pythonで現在のCPUとRAMの使用率を取得する方法は?
-
[解決済み] 式(エクスプレッション)パーサー(優先順位付き)?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】whileループの時間複雑性とは?
-
[解決済み] 決定論的クイックソートとは何ですか?
-
[解決済み] 放物線を点の集合にフィットさせる最速の方法?
-
[解決済み] 2進数が3で割れているかどうかを知るには?
-
[解決済み] CLRSの相対的漸近成長に関する問題(表)の解き方について教えてください。
-
[解決済み] 解いてみてください。T(n) = T(n-1) + n [重複] とする。
-
[解決済み] アルゴリズムと関数の違いは何ですか?[クローズド]
-
[解決済み] クイックソート ピボットの選択
-
[解決済み] 2つのリンクリストがマージされるかどうかをチェックします。もしそうなら、どこで?
-
[解決済み] アルゴリズムで見慣れない記号:∀は何を意味するのか?[クローズド]