17 ポイント 投稿者 GN⁺ 2024-06-08 | 3件のコメント | WhatsAppで共有
  • WebでPID 0を検索すると、ほとんどが誤った情報として出てくる。
  • Google、Bing、DuckDuckGo、KagiでPID 0を検索しても、正確な回答を見つけるのは難しかった。
  • Wikipediaの誤情報が16年間にわたって広まり、多くのサイトがそれを引用していた。

PID 0の歴史

  • PID 0はスケジューリングと電源管理に関与しており、ページングとは関係がない。
  • PID 0は、CPUコアに実行すべき仕事がないときに動くスケジューラの役割を果たす。
  • 初期のUnixではPID 0がメモリ管理に関連する処理を担っていたが、現代のUnixではそうではない。

PID 0の実際の役割

  • PID 0はカーネルを起動し、その後はCPUコアを管理する役割を担う。
  • Linuxカーネルでは、PID 0はdo_idle関数として実装されている。
  • FreeBSDのような他のカーネルでも、同様の役割を果たしている。

PID 0をめぐる混乱

  • Linuxカーネルとユーザー空間では、PIDの意味が異なる。
  • カーネルではtask_structが1つのスレッドを表し、PIDはスレッドIDを意味する。
  • ユーザー空間ではPIDがプロセスを表し、これはスレッドグループIDと同じである。

マルチコアシステムにおけるPID 0

  • マルチコアシステムでは、各CPUコアごとに1つのidleスレッドが存在する。
  • これらのidleスレッドはすべてスレッドグループ0に属している。
  • ユーザー空間では、これがPID 0として認識される。

結論

  • PID 0は存在し、カーネルを起動するスレッドである。
  • PID 0は初期カーネル初期化処理を行い、その後idleスレッドへ移行する。
  • PID 0はメモリ管理とは関係がない。
  • マルチコアシステムでは、各コアごとにidleスレッドがあり、それらはすべてスレッドグループ0に属している。

GN⁺の意見

  • 正確な情報の重要性: 誤った情報が長年にわたって広まり、多くの人がそれを事実として受け入れてしまう。正確な情報を提供する重要性を改めて示している。
  • カーネルの複雑さ: カーネルの初期化プロセスとスケジューリング機構は非常に複雑であり、これを理解することはソフトウェアエンジニアにとって大いに役立つ。
  • PIDをめぐる混乱: カーネルとユーザー空間でPIDの意味が異なるため、それを明確に理解することが重要である。
  • マルチコアシステム: 現代のマルチコアシステムにおけるPID 0の役割を理解することは、システム性能の最適化に役立つ。
  • Wikipediaの影響力: Wikipediaの情報がどれほど多くのWebサイトに影響を与えるかを示している。正確な情報更新の重要性を強調している。

3件のコメント

 
thinkpad 2024-07-17

あの agent が kill -9 0 をやらかした、あの昔の事件を思い出す...

 
whizkyu 2024-06-09

興味深いですね

 
GN⁺ 2024-06-08
Hacker News の意見
  • 考古学的観点から興味深い: 「pid 0 は [Linux] カーネルの一部」という話は、カーネルデバッグ時に有用。ユーザー空間プロセスの観点では、「pid 0 は自分自身を意味する」。
  • オンラインでの過信: オンラインでは多くの人が、自分の知っていることについて過信している。断定的な口調は専門家だけが使うべき。
  • Windows の PID 0: NT ベースの Windows では PID 0 は「System Idle Process」で、Linux と似ている。DOS ベースの Windows には PID 0 はなく、idle loop は VMM32 内にある。
  • 学術系 Unix における PID 0: ほとんどの学術系 Unix では PID 0 はメモリサブシステム(ページング)に関連している。Linux だけが PID 0 という概念の所有者ではない。
  • 一般知識の誤り: 「一般知識」が間違っていることは多い。カーネルのソースコードを確認するのが正しい方法。
  • PID 0 の3つ目の用途: Linux で getppid が 0 を返すのは、親が別の PID 名前空間にいる場合。
  • 追加資料のおすすめ: 初期カーネルブートに興味があるなら、この優れた資料を読むことを勧める。Linux Insides
  • ps -aux コマンドに関する質問: 「ps -aux」コマンドを入力すると、他のユーザーの情報も表示される。デフォルトでは非公開情報であるべきではないのか?
  • kill 0 の興味深い使い方: kill 0 を使って、制限時間のあいだコマンドを実行して終了させるスクリプトを共有。
  • v4 コードでの PID 0 の再利用: v4 コードが pid 0 を再利用しているのは興味深い。80年代半ばに、カーネルでこの問題を解決しなければならなかった記憶がある。