unix.stackexchange.comへようこそ!
あなたの質問に対する簡単な答えはありません。私よりもはるかに優れた人々が、Linuxカーネルとオペレーティングシステム全般に関する本をすべて書いています。
プロジェクトの範囲について:オペレーティングシステムの記述は簡単な作業ではありません!Minixのような意図的に最小限のOSであっても、かなり複雑です!Linuxについてのアイデアを得るには、これまでに作成したCプログラムについて考えてください。平均的な大学の授業は、せいぜい数千行のCである傾向があります。私の最終年のプロジェクトは約30〜35,000行のC ++だったと思います。Linuxカーネルは約13,000,000行のCコードです。
すべてが別々のファイルになっているのはなぜですか?かなりのプロジェクトは、ロジスティックおよび実用上の理由から、個別のファイルに保存されます。13,000,000行のファイルをエディターに読み込むことを検討してください!Linuxのような巨大なプロジェクトに取り組む前に、「なぜ複数ファイルなのか」という質問自体が答えるところまでCスキルを磨く必要があります。また、単に書くだけでなく、Cコードを読むことができるはずです。(最初に見えるよりも難しい)
あなたは間違いなくCに非常に熟練しているはずです。カーネルは何千人もの人々によって維持されており、それぞれの個人的なCイディオムを理解するために呼び出されます(かなり厳格なカーネルコーディング標準の範囲内ですが、独自の問題解決スタイル)。
C fuを入手したら、オペレーティングシステムを理解していることを確認してください。これは、コードを理解するのに役立ちます。Linuxのすべてが必須というわけではありません。適切なカーネルはかなり小さいです!それが膨らんでいるもの:
- さまざまなデバイス用の数千のハードウェアドライバー。
- APIとドライバー作成を簡素化するためのさまざまなデバイスクラスの抽象化レイヤー。たとえば、ファイルシステム用のVFS、入力デバイス用のイベントレイヤーなどがあります。
- Linuxを実行するさまざまなアーキテクチャーに対応する衝撃的な量の条件付きでコンパイルされたコードとファイル(すべてのLinuxマシンがIntel PCであるわけではなく、一部は予想とは非常に異なります)。カーネルはこれらの違いに対処する必要があり、それはより多くのコードを意味します。
すぐに見つかる問題の1つは、これらのコンポーネントを取り外したり、変更したり、再び接続したりするのがそれほど簡単ではないことです。多くの相互関係があります。要するに、カーネルのビットを変更するのは難しいです。
人々があなたにMinixを提案した理由は簡単です:それは完全なオペレーティングシステムですが、Linuxのような複雑なシステムのニーズによって負担されません。コードは小さいですが、それでも完全な機能を提供します。結局のところ、Linuxの最初のバージョンはMinixに触発されました。
確かに、最近ではMinixのハードウェアサポートが少なくなっています。だから何?それは恩恵です!現代のコンピューターは非常にうまく仮想化されています。それを利用して、Minixを実行するVMが非常に軽量であるため、開発が困難になります。
プロジェクトでオペレーティングシステムを構築する場合は、Minixを勉強することから始めるよりも悪いことがあります。また、Minixが同行するために書かれた本「Andrew TanenbaumのModern Operating Systems」を購入して読むこともできます。
また、ターゲットを設定し、用語を正確に定義する必要があります。OSの独自の定義がMicrosoft(GUIと完全なソフトウェアスイートを備えたOS)である場合、非常に長いプロジェクトに参加する可能性があります。結局のところ、1960年代以来、何十万人もの人々が私たちを今の場所に連れて行ってくれました。
最後に、コンピューターサイエンティストの戦いの叫びを思い出してください。'(もちろん、学習の際に例外を設けたいと思います。そして、楽しみのために:))