Linuxカーネル探検
(reverser.dev)- Linuxカーネルは単一のプロセスではなく、システム全体を構成する中核層であり、ハードウェアとソフトウェアをつなぐ常時存在する構造
- ユーザープロセスのためにシステムコール、割り込み、スケジューリングを調整し、実行を維持
- カーネルは仮想化・マッピング・分離・制御された多層構造として動作
- 学習用として
init/main.c,kernel/fork.c,include/linux/sched.h,arch/x86/kernel/entry_64.Sなどの主要ソースファイルを提示 - カーネルの構造と役割を理解するための基礎学習資料として重要
カーネルの本質
- カーネルはプロセスではなくシステムそのものであり、ハードウェアとソフトウェアをつなぐ常に存在する権威的な層
- ユーザープロセスの実行を支援し、システム資源を管理する中心的な役割を担う
- カーネルはプロセスにサービスを提供する主体として、システムコール(syscall)、割り込み、スケジューリングを調整し、ユーザー作業を維持
システムの階層構造
- カーネルは仮想化され、マッピングされ、分離され、制御された構造で構成される
- ランタイムでは複数の層が相互作用し、システムの安定性と制御を維持
学習用ファイル
- カーネル構造を理解するための主要ファイルとして、次の4つを提示
init/main.ckernel/fork.cinclude/linux/sched.harch/x86/kernel/entry_64.S
概念確認問題
- カーネルとプロセスの根本的な違い: B. カーネルはプロセスではなくシステムそのもの
- カーネルがユーザープロセスを支援する方式: B. システムコール、割り込み、スケジューリングを調整
- カーネルの階層的特性: C. 仮想化され、マッピングされ、分離され、制御された構造
1件のコメント
Hacker Newsのコメント
本当にすばらしいプロジェクト。タルムードのページ構成を思い出した — 何百年にもわたる注釈が1ページの中に幾重にも積み重なっている構造が興味深かった
コード自体はそういうふうに線形ではないけれど、この Linux Kernel Explorer にも似たような「注釈の層」が感じられる
横に付いたノート形式が特に気に入った
関連リンク: タルムードのページレイアウト, タルムードのレイアウトノート
何か見落としている気がする。カーネルソースは昔からWeb上で閲覧できた — たとえば Elixir Bootlin のようなサイトがある
でも、これがどんな 追加機能 を提供しているのか分からない。Bootlin は検索もできるのに、こちらには見当たらない
今の時代なら、LLMベースのコード説明や 依存グラフ のようなものを期待していた
GitHub API の rate limit に引っかかって、ファイル一覧が表示されない
同じ問題に遭っている人は、VPN や Cloudflare Wrap で IP を変えれば解決する
開発者としては、GitHub ログインオプションやキャッシュ層を追加すると、新しいユーザーがアクセスしやすくなると思う
こういうツールは本当に好き。以前、Red Hat が作った似たようなツールで ブラジルの電子投票機のソースコード を分析したことを思い出した
当時は重複ファイルや機能を整理する仕事を担当していて、Motif UI ベースのデスクトップアプリだった
このアイデアは本当に気に入った。複雑なプロジェクトのコードをたどるとき、どこから見ればいいのか途方に暮れることがあったが、このツールは 中核構造を素早く把握 できるようにしてくれる
ただしバグを見つけた — Chapter 2 で「mm/」のようなディレクトリを開くと、「Invalid file response」エラーが出る。おそらくディレクトリをファイルとして開こうとしているようだ
Florent Revest の仕事にも賛辞を送りたい
この Explorer は、多くの開発者にとってまさに必要だったツールのように思える
カーネルソースは膨大で複雑なので、どこから始めればいいのか分からなかったが、これはいわば 地図 のように構造を見せてくれる
VFS やモジュールのつながり方もひと目で分かるし、API 制限やディレクトリエラーのような問題はあるにせよ、すばらしい第一歩だ
私も Linux の仕事を始めたころに大いに助けられたし、その後 Python で再実装された Elixir と ソースコード もある
Elixir Bootlin はもう古くからあるが、モバイルではよりよく動作する
本当にすばらしく見える。作者は fabiomaia.eu の人だった
似たツールを Python 向けに 作ってほしいと頼もうと思う
新しいエンジニアに CPython リポジトリの構造を教えるときに役立ちそうだ
ふと気になった — カーネルコードの中で、最も 感嘆させられる部分 はどこだろう?
Chapter 1 の
arch/x86/kernel/entry_64.Sファイルが開けないディレクトリツリーにも表示されない
(この問題に触れていた別のコメントがあったが、削除されたようだ)
arch/x86/entry/entry_64.Sであるべきだ