- 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件のコメント
あの agent が
kill -9 0をやらかした、あの昔の事件を思い出す...興味深いですね
Hacker News の意見
getppidが 0 を返すのは、親が別の PID 名前空間にいる場合。ps -auxコマンドに関する質問: 「ps -aux」コマンドを入力すると、他のユーザーの情報も表示される。デフォルトでは非公開情報であるべきではないのか?kill 0の興味深い使い方:kill 0を使って、制限時間のあいだコマンドを実行して終了させるスクリプトを共有。