初心者向けのLinuxカーネルソースコードを理解する方法 [閉まっている]


12

私はメモリ管理、特にLinuxカーネルのページ置換コンポーネントに取り組むことに興味がある学生です。

カーネルソースの理解を始めるのに役立つさまざまなガイドは何ですか?

Mel GormanによるLinux Virtual Memory Managerの理解とCesatiとBovetによるLinux Kernelの理解の本を読みましたが、コード全体の制御の流れについては説明していません。それらは、使用されるさまざまなデータ構造と、さまざまな機能が実行する作業を説明するだけです。これにより、コードがより複雑になります。

私のプロジェクトでは、メインストリームカーネルでページ置換アルゴリズムを調整し、一連のワークロードのパフォーマンスを分析します。わかりやすいLinuxカーネルのフレーバーはありますか(linux-2.6.xxカーネルでない場合)?


1
複雑なコードを回避するのが難しいと感じたときに、なぜカーネルプログラミングを選択したのかと尋ねてもいいですか?
レニープログラマー

回答:


13

データ構造に注目してください。通常、データ構造を理解することは、コードよりも重要です。

データ構造のみが表示され、コードは表示されない場合でも、システムの全体像を把握できます。

逆に、コードのみを表示し、データ構造を表示しない場合、システムを理解することは非常に困難です。

「実際、悪いプログラマと良いプログラマの違いは、彼が自分のコードまたはデータ構造をより重要と考えるかどうかだと主張します。悪いプログラマはコードを心配します。良いプログラマはデータ構造とその関係を心配します。」-ライナス・トーバルズ

「フローチャートを見せてテーブルを隠せば、私は謎に包まれ続けます。テーブルを見せてください。通常はフローチャートは必要ありません。それらは明らかです。」-フレッドブルックス。



3

デバッガーオプションが役立つ場合があります。

デバッガーオプションを使用してカーネルを構築した後にできることは、カーネルを呼び出すさまざまなシステムコールを呼び出すサンプルテストアプリケーションを作成することです。一度に1つのカーネルコードを走査して、その実装を理解できます。



0

複雑なコードベースを学習する1つの方法は、デバッガーで実行して、どこに行くかを確認することです。Linuxには、Linux Kernel Debuggerがあります。


私は確かにこれはまだこのコードの巨大な作品をどうするかをしようと、それは物事んどのように誰かのために働くいないよ
マフムード・ホッサム

1
私はこのアプローチを巨大なコードベースで実行しました。ただし、エントリポイントと、探すべきアイデアが必要です。
レニープログラマー

はい、それは彼が、カーネルをデバッグする前に、最初に探すために何を知っている必要があり、私が何を意味するかだ
マフムード・ホッサム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.