オペレーティング システムの内部についての知識を深めたいと考えています。プロセス管理、メモリ管理など。
Linux カーネルか BSD カーネルのどちらかを知ることで学習しようと考えていました。
学習目的に適したカーネルはどれですか?
始めるのに最適な場所は何ですか?
何か良い本を教えてください。
12 に答える
大学では、タネンバウムの本を使ったオペレーティングシステムのクラスがありました。クラスでは、 Minixオペレーティングシステムにデバイスドライバーを実装しました。とても楽しかったし、たくさんのことを学びました。
ただし、Minixを選択した場合は、学習用に設計されていることに注意してください。これはマイクロカーネルですが、LinuxとBSDはモノリシックカーネルであるため、学習した内容を100%翻訳してLinuxまたはBSDで動作させることはできないかもしれませんが、それでも、かなりの処理をしなくても、多くのことを得ることができます。できるだけ多くの情報。
ちなみに、 Just for Funを読んだ場合、LinusはLinuxを作成する前に実際にMinixで遊んでいましたが、彼の目的には十分ではありませんでした。
Linuxユーザーとして、Linuxにはカーネルについて学ぶための素晴らしいコミュニティがあると思います。http://kernelnewbies.orgは、質問をしたり、カーネルがどのように機能するかを学ぶのに最適な場所です。私は本の推薦をすることはできませんが、kernelnewbiesの開始資料を読んだら、ソースは非常によく文書化されています。
すでに述べた良書 (Opeating System Design & Implementation は特に優れています) とは別に、1.x リリースの Linux Kernel を手に入れ、それを 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 がないことに注意して、私はチップを入れることにしました:
- FreeBSD オペレーティング システムの設計と実装(デッド ツリー ブック)
- Unix および BSD コース(コースとビデオ)
- FreeBSD アーキテクチャ ハンドブック(オンライン ブック)
私自身はコースを受講したことはありませんが、マーシャル・カーク・マッキュージックが別の機会に講演するのを聞いたことがあります。
そしてもちろん、平均的な Linux の man ページよりもはるかに多く維持されている優れたリソースである BSD の man ページです。たとえば、OpenBSD の仮想メモリ インターフェイスについて説明しているuvm(9)の man ページを見てください。
あまり関係ありませんが、UNIX の歴史と文化の BSD の部分と、当時のたくさんの陽気な逸話を紹介するビデオHistory of the Berkeley Software Distributionsもお勧めします。
コードワイズBSDがはるかにクリーンで一貫性があると誰も言及していないようです。ドキュメントも(すでに述べたように)はるかに優れています。しかし、どのシステムを選択しても、いじくり回すことがたくさんあるので、私はあなたがより頻繁に使用するシステムを選びます。
マイクストーンのアドバイスを受けて、ミニックスから始めましょう。それがLinusがしたことです!教科書は非常によく書かれており、Tannenbaumは、さまざまな機能が実際のシステムにどのように実装されているかを示す素晴らしい仕事をしています。
Linux と Minix は楽しく学べます。最新のマイクロカーネル オペレーティング システムがどのように見えるかについても知りたい場合は、QNX を見ることができます。完全なドキュメントはオンラインで入手でき、非常にアクセスしやすくなっています。たとえば、このオンラインブック。
コードに飛び込むことに代わるものはありません。興味のあるドライバーまたはサブシステムを見つけて、いろいろ試してみてください。VMware Workstationなどのツールを使用すると、必要な変更を加えたり、VM のスナップショットを作成したり、変更したカーネルを実行したりすることが非常に簡単になります。ブート時にカーネルがパニックになったら、誰が気にしますか? スナップショットに戻って問題を修正するだけです。
書籍については、 Robert Love によるLinux Kernel Developmentを強くお勧めします。それは素晴らしく書かれた本です -- たくさんの情報があり、正気で構成されていて、ユーモラスです... 決して無味乾燥な読み方ではありません。
私自身はまだ試していませんが、Linux From Scratch にアクセスして、独自の Linux ディストリビューションの構築を開始できます。膨大な時間がかかるもののように聞こえますが、Linux カーネルの本質と各部分がどのように機能するかについての詳細な知識が得られます。もちろん、ここにある他のヒントに従うことで、この学習を補うことができます。
大学にいたとき、1 学期間をオペレーティング システムの勉強に費やしました。その一環として、Linux に RAM ベースのファイル システムを実装するという課題がありました。
Linux keurnel の内部構造を理解し、すべてがどのように組み合わされるかを把握するのに最適な方法でした。また、標準ツールとの相互作用をいじってみるのもとても楽しいものでした。