独自のカーネルの構築に関する野心的な学生へのアドバイス[非公開]


18

私は非常に野心的な大学生で、コンピューターについて知っておくべきことをほとんどすべて学びたいと思っています(必要に応じて、私は学習が大好きです)。最近、私は自分のカーネルを設計して構築するのは楽しいプロジェクトになるだろうと考えました(長いプロジェクトですが)。

基本的な情報を入手しましたが、実際に機能させるにはAssemblyとC / C ++をマスターする必要があることを知りました。私はそれらに取り組んでいますが、プログラミングの観点からカーネルが実際にどのように機能するかを学びたいです。私はLinuxカーネルのコードを閲覧するのに何時間も費やしましたが、それだけであなたを連れて行くことができます。

カーネルを構築する基本的な手順は何ですか?対処する必要があるもの 注文するのですか?私は多くのことを噛んでいることを知っていますが、私はそれを処理するのに十分決心しています。


12
すべてを学びたいと思うためにあなたをashる必要はありません。しかし、実際にしようとする場合は、寿命を延ばし、超人的な脳を持ち、あなたの人生に他の計画はない方が良いでしょう。)

2
私はそれらすべてを期待しています!本当にそうではありませんが、私はただ圧倒的な学習衝動を持っています。
n0pe

@delnan可能な偏執性統合失調症もプラスです:templeos.org
DanteTheEgregore

@DanteTheEgregoreなに?
パンツァークライシス

回答:


34

あなたがする必要があるのは、オペレーティングシステムを設計することです。たとえば、UNIXのようなシステムであると判断したとしても、まだ多くの決定が必要です。UNIXにどのくらいしたいですか?UNIXのどの部分が好きで、どの部分を改善する必要があると思いますか?

UNIX風に設定されていない場合は、さらに多くの質問に答える必要があります。プロセスはツリーを形成すべきか、それとも「フラット」ですか。どのようなプロセス間通信をサポートしますか?マルチユーザーにしたいですか、それともマルチタスク(またはシングルタスク)にしたいですか?リアルタイムシステムにしたいですか?タスク間でどの程度の分離を提供しますか?モノリシックスケールとマイクロカーネルスケールのどちらに配置したいですか?分散操作をどの程度までサポートしますか(もしあれば)。

インスピレーションを得るために、Linuxカーネルを勉強することはお勧めません。Linuxカーネル自体に反することはありませんが、Linuxは教育ではなく主に実稼働での使用を目的としているという単純な事実です。多くの最適化、後方互換性のハッキングなどがあり、生産には非常に役立ちますが、教育よりも注意をそらす可能性が高くなります。

見つけることができれば、Lionの本のコピー(UNIX 6th Editionのライオンズの解説ソースコード付き、ジョンライオンズ)が出発点としてはるかに簡単です。第6版UNIXは、小さくてシンプルであり、あまりにも単純化されたおもちゃシステムではなく、かなり早く読み、理解することができました。

(少なくとも主に)x86を対象とすることを計画している場合は、Richard BurgessによるMMURTL V 1.0も参照してください。これは、CPU設計者が当初意図していたよりもはるかにx86ハードウェアを使用するx86用のシステムを表します。ほとんどの実際のシステムは、他のCPUへの移植性を優先します。ご想像のとおり、これは物事のハードウェアの終わりに向かってはるかに重視される傾向があります。印刷されたコピーは高価で見つけにくいようですが、テキストとコードは無料でダウンロードできます

幸いなことに、さらに多くの可能性があります- 例えば、Andrew TanenbaumとAlbert WoodhullによるOperating System Design and Implementationです。


すてきな応答に感謝します。それらすべての本を見ていきます。
-n0pe

7
本とソースのPDFへのリンクを追加しました。v6 UNIXのソースについての驚くべきことは、100ページの長さで、ページあたり100行であるということです。そして、10,000行のコードで、完全なマルチタスクオペレーティングシステムを使用できます。2238行目の「これを理解することは期待されていません」という有名なコメントを取り巻くコードを本当に理解できれば、ゴールドスターと名誉マスターを獲得することができます。楽しい!
ピーターローウェル

リンクをありがとう!これをどこで印刷するかを考えなければなり
ません。...-n0pe

1
Minix(Tannenbaumの本)は教育用に設計されており、ここで必要なものにすぎない場合があります。

@ PeterRowell、dmrはcm.bell-labs.com/who/dmr/odd.htmlのバグであると述べました-user1249

12

アセンブリを使用して、おもちゃのブートストラッププログラムを作成する、非常に焦点を絞った小さなタスクから始めることをお勧めします。多くのことをする必要はありません。コンピューターの起動時にプログラムを自動的に読み込み、実行中であることを確認するメッセージを印刷し、キーボードから入力を読み取り、別のメッセージを印刷してからコンピューターをシャットダウンするだけです。

これにはいくつかの利点があります。

  1. 最終的にはカーネル用のブートストラッププロセスが必要になるので、無意味な運動にはなりません。
  2. それはあなたがアセンブリで書面での練習を提供します。
  3. 低レベルのIOルーチンを書く際の練習になります。呼び出すOSがないときに、画面にメッセージを書き込む方法、またはキーストロークを読み取る方法
  4. CPUとマザーボードの技術的な詳細についての研究経験が得られます。(最初の質問:マザーボード/ CPUは起動時にブート可能なプログラムをどのように見つけますか?)
  5. カーネルの作成は非常に洗練された作業になり、多くの微妙な点があります。このタスクは、開始する前に何かを与え、おそらく開始前に雑草に迷うのを防ぎます。

これを実行できるようになると、何に興味を持っているかがよりよくわかります。


このおかげで、これがまさに私がやろうとしていることだと思います。私の将来の読書。
-n0pe

7

アセンブラでプログラムする方法を学ぶことは、最初の良いスタートであり、MSDOS 6.0からそれを行うことは、組み込み機能が不足しているため、同様に役立つかもしれません。

Operating System Conceptsのような良い本を読むことは、あなた自身のカーネルを設計するための公正なスタートになるでしょう。ブートロード、デバイスドライバー管理、BIOSとのインターフェイス、ファイルシステムの作成と管理、プログラムスケジューリング、プログラムのロードとアンロードを処理し、少なくとも何らかのシェルを実装する必要があります(ウィンドウシステムを構築するよりもはるかに簡単です)。

C / C ++は、カーネルがこれらの言語の標準ライブラリと互換性がある場合にのみ機能します。そうでない場合は、これらのライブラリのコピーも作成する必要があります。

それは、マルチスレッド、システムセキュリティ、ネットワークについて考え始めることすらありません。


7

Minixは、教育用に作成された素敵なUnixクローン(Linuxに影響を与えた)です。

Andrew S. Tannenbaumは、優れた作家であり、教師であり、例としてMinixを使用したオペレーティングシステムに関する本全体を書いています(そして、従うべきソースコードが含まれています):http : //en.wikipedia.org/wiki/Operating_Systems : _Design_and_Implementation

個人的には、彼はプログラマーよりも幾分優れた作家だと思うので、私が個人的に望むほど明確ではないものもありますが、それは機能します!

これを学習リソースとして検討することを強くお勧めします。また、実際に役立つものを実際に作成するために必要な作業量のアイデアも提供します。


物理的な本を入手することをお勧めします。中にメモを取ることが容易。

実際に考えてみると、私はアマゾンで本を安く見たと思います。そこに着くかもしれません。ありがとう
-n0pe

また、これは第3版であることに注意してください。私はコースを受講したときに最初のエディションを使用したと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.