strace
私のソースを見ると、CLONE_IDLETASK
そこに記述されているクローンフラグの使用が見つかりました:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
さらに詳しく調べたところ、このフラグはカバーされman clone
ていませんが、実際にはブートプロセス中にカーネルによって使用され、マシン上の各CPUのアイドルプロセス(すべてPID 0が必要)を作成します。つまり、8個のCPUを搭載したマシンには、少なくとも7個(以下の質問を参照)のようなプロセスが「実行中」になります(引用符に注意してください)。
さて、これは私がその「アイドル」プロセスが実際に何をするかについてのいくつかの質問につながります。私の想定では、タイムフレームが終了するまでNOP操作を継続的に実行し、カーネルが実際のプロセスを割り当てて実行するか、アイドルプロセスを再度割り当てます(CPUが使用されていない場合)。しかし、それは完全な推測です。そう:
たとえば、8個のCPUを搭載したマシンでは、7個のそのようなアイドルプロセスが作成されますか?(そして、1つのCPUはカーネル自体によって保持され、ユーザースペースの作業は実行されませんか?)
アイドルプロセスは、実際にはNOP操作の無限ストリームですか?(または同じことを行うループ)。
CPU使用率(たとえば
uptime
)は、アイドルプロセスがCPU上にあった時間と、特定の期間中に存在しなかった時間によって単純に計算されますか?
PSこの質問のかなりの部分は、CPUがどのように機能するかを完全に理解していないという事実によるものと思われます。すなわち、アセンブリ、タイムフレーム、割り込みは理解していますが、たとえば、CPUが実行している内容に応じて、どの程度エネルギーを消費するかはわかりません。誰かがそれについても私を啓発できるなら、私は感謝するでしょう。