私はメモリ管理、特にLinuxカーネルのページ置換コンポーネントに取り組むことに興味のある学生です。
カーネルソースの理解を始めるのに役立つさまざまなガイドは何ですか?
Mel Gormanによる本nderstanding the Linux Virtual Memory Managerとnderstanding the Linux Kernelによる本を読んでみましたが、それらは制御の流れを説明していませんコード。これらは、使用されるさまざまなデータ構造と、さまざまな機能が実行する作業を説明するだけです。これはコードをより混乱させます。
私のプロジェクトでは、メインストリームカーネルでページ置換アルゴリズムを微調整し、一連のワークロードのパフォーマンスを分析します。理解しやすいLinuxカーネルの種類はありますか(linux-2.6.xxカーネルでない場合)?
データ構造に焦点を当てる。通常、データ構造を理解することは、コードよりも重要です。
データ構造のみが表示され、コードは表示されない場合でも、システムの全体像を把握できます。
逆に、データ構造ではなくコードのみが示されている場合、システムを理解するのは非常に困難です。
「実際、悪いプログラマーと良いプログラマーの違いは、コードとデータ構造のどちらをより重要視するかだと主張します。悪いプログラマーはコードを心配します。優れたプログラマーはデータ構造とそれらの関係を心配します。」 -ライナス・トーバルズ
「あなたのフローチャートを見せて、テーブルを隠してください。そうすれば、私は謎に包まれます。テーブルを見せてください。そうすれば、通常、フローチャートは必要ありません。明らかになります。」 -フレッドブルックス。
カーネル初心者 はかなり良いと思います
カーネルがどのように機能するかを学ぶことに興味を持つ人はたくさんいます。
デバッガオプションが役立つ場合があります。
デバッガーオプションを使用してカーネルをビルドした後に実行できるいくつかのことは、カーネルを呼び出すさまざまなシステムコールを呼び出すサンプルテストアプリケーションを作成することです。一度に1つのカーネルコードをトラバースして、その実装を理解できます。
記事の「オペレーティングシステム」セクションで、 すべてのコンピュータサイエンス専攻が知っておくべきこと 、Matt Mightが推奨 Linuxカーネル開発by Love 。これは高度なトピックですが、本は非常によく書かれています。
複雑なコードベースを学習する1つの方法は、それをデバッガーで実行して、物事がどこに進むかを確認することです。 Linuxには Linux Kernel Debugger があります。