Linux または BSD カーネルの内部を知るための最良の方法は何ですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/24648

質問

オペレーティング システムの内部についてさらに知識を深めたいと思っています。プロセス管理、メモリ管理など。
LinuxかBSDカーネルのどちらかを知って勉強しようと考えていました。
学習目的にはどのカーネルが適していますか?
どこから始めるのが最適ですか?
何か良い本をお勧めできますか?

役に立ちましたか?

解決

大学では、オペレーティング システムの授業で、 タネンバウムの本. 。授業では、デバイスドライバーを実装しました。 Minix オペレーティング システム. 。とても楽しかったし、私たちはたくさんのことを学びました。

ただし、Minix を選択した場合は、学習用に設計されていることに注意してください。Linux と BSD はモノリシック カーネルであるのに対し、これはマイクロカーネルです。そのため、学習した内容が Linux や BSD で動作できるように 100% 変換できるわけではないかもしれませんが、かなりの処理を行わなくても、そこから多くのことを得ることができます。くらいの情報。

余談ですが、読んだことのある方は 楽しみのために, 実際、Linus は Linux を書く前に Minix をいじっていましたが、それだけでは彼の目的には十分ではありませんでした。

他のヒント

Linux ユーザーとして、Linux にはカーネルについて学ぶための素晴らしいコミュニティがあると思います。 http://kernelnewbies.org ここは、カーネルがどのように機能するかについて質問したり学習したりするのに最適な場所です。本をお勧めすることはできませんが、kernelnewbies の出発点を読んでいただければ、ソースは非常に詳しく文書化されています。

すでに述べた良書 (『Opeating System Design & Implementation』が特に優れています) とは別に、1.x リリースの Linux カーネルを入手し、それを VMWare または VirtualBox にロードして、そこから試し始めてください。

ソースコードを参照するのに多くの時間を費やす必要があります。これについては、チェックしてください http://lxr.linux.no/ これはソースの参照可能なリンクされたバージョンであり、作業がはるかに簡単になります。Linux の最初のバージョン (0.01) については、こちらをご覧ください。 http://lxr.linux.no/linux-old+v0.01/. 。楽しみは次から始まります http://lxr.linux.no/linux-old+v0.01/boot/boot.s. 。バージョンが進むにつれて、ChangeLog をチェックして変更された部分を詳しく調べ、全体をもう一度読む手間を省きます。

概念を理解したら、2.0 を見て、次に 2.2 を見てください。プロセスに多くの時間を費やす準備をしてください。

以前にも同じ目的でこれらの本を勧められて購入したことがありましたが、自分で勉強することができなかったので、受け売りのアドバイスとしてのみ受け取ってください。

ここで BSD が不足していることに気づき、私はそれに手を加えようと考えました。

私自身はどのコースも受講したことはありませんが、マーシャル・カーク・マキューシックの講演を他の機会で聞いたことがありますが、彼は本当に優れた仕事をしています。

そしてもちろん、BSD のマニュアル ページは、平均的な Linux のマニュアル ページよりもはるかに広範囲にメンテナンスされているため、優れたリソースです。たとえば、 uvm(9) man-ページ。OpenBSD の仮想メモリ インターフェイスについて説明しています。

あまり関係ありませんが、動画もお勧めします バークレー ソフトウェア ディストリビューションの歴史 これは、UNIX の歴史と文化の BSD 部分への素晴らしい紹介と、当時のたくさんの面白い逸話を提供するからです。

BSD カーネルをお勧めします。BSD カーネルにはハッカーがはるかに少ないため、その進化を追うのが簡単です。BSD カーネルにも Linux カーネルにも優れたハッカーがいますが、BSD の知名度が低いために初心者のハッカーが排除されていると主張する人もいます。また、ソースが 1 日に 100 回更新されない場合は、設計上の決定を下すのも容易になります。

BSD の選択肢の中で、私のお気に入りは NetBSD です。デスクトップに使いたい選択肢ではないかもしれませんが、携帯性を重視しているため、品質は非常に優れています。この部分がすべてを物語っていると思います。

一部のシステムには、「機能すれば正しい」という哲学があるようです。その観点からすると、NetBSD の哲学は「正しくなければ機能しない」と言えるでしょう。

十分に長く仕事をしている人なら、NetBSD は優れたコーディングを学ぶのに非常に楽しいものであることがわかるでしょう。専門的には Linux を使用する機会が増えるでしょうが

どちらを選択する場合でも、メール リストに参加し始め、ディスカッションに従ってください。いくつかのパッチを研究し、最終的には独自のバグ修正を試みてください。書籍については、Diomidis Spinellis の記事を検索してください。 彼の本. 。正確にはカーネルの本ではありませんが、NetBSD の例があり、大規模なソフトウェアに取り組むのに非常に役立ちます。

コードに飛び込むことに代わるものはありません。興味のあるドライバーまたはサブシステムを見つけて、いろいろ試してみてください。のようなツールを使用すると、 VMware ワークステーション 必要な変更を加えたり、VM のスナップショットを作成したり、変更したカーネルを実行したりするのは非常に簡単です。カーネルが起動時にパニックを起こしても、誰が気にするでしょうか?スナップショットに戻って問題を修正するだけです。

本に関しては、こちらを強くお勧めします Linux カーネル開発 ロバート・ラブ著。それは素晴らしく書かれた本です - たくさんの情報があり、理性的に整理されており、そしてユーモアがあります...まったく無味乾燥な読書ではありません。

Mike Stone のアドバイスに従い、Minix から始めてください。それがライナスのやったことだ!この教科書は非常によく書かれており、Tannenbaum はさまざまな機能が実際のシステムでどのように実装されるかを示すのに優れています。

コード的には BSD の方がはるかにクリーンで一貫性があるとは誰も言及していないようです。(すでに述べたように) ドキュメントもかなり良くなりました。ただし、どのシステムを選択してもかなりの手間がかかるため、より頻繁に使用するシステムを選択します。

Linux と Minix は学ぶのが楽しいです。最新のマイクロカーネル オペレーティング システムがどのようなものかを知りたい場合は、QNX を参照してください。完全なドキュメントはオンラインで入手でき、非常にアクセスしやすいです。例えば、 これ オンラインの本。

大学にいたとき、一学期をオペレーティング システムの研究に費やしました。その一環として、Linux で RAM ベースのファイル システムを実装するという課題がありました。

これは、Linux カーネルの内部を理解し、すべてがどのように連携しているかを把握するための素晴らしい方法でした。また、標準ツールとどのように連携するかを試すのは非常に楽しかったです。

私自身は試していませんが、「Linux From Scratch」にアクセスして、独自の Linux ディストリビューションの構築を始めることができます。膨大な時間がかかるように思えますが、Linux カーネルの本質と各部分がどのように機能するかを詳しく知ることができます。もちろん、ここで紹介する他のヒントに従って、この学習を補うこともできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top