x86 アーキテクチャ用のオペレーティング システムを開発する予定です。
- プログラミング言語にはどのようなオプションがありますか?
- できれば Windows 環境で、どのような種類のコンパイラを利用できますか?
- オペレーティング システムの開発についてさらに学ぶのに役立つ情報源はありますか?
- 仮想マシンまたは物理ハードウェアでオペレーティング システムをテストする方が適切ですか?
助言がありますか?
x86 アーキテクチャ用のオペレーティング システムを開発する予定です。
助言がありますか?
コラージュの最終年度のプロジェクトでは、仮想メモリ マネージャー、仮想ファイル システム、および完全なプリエンプティブ マルチタスキングを備えた小さな x86 OS を開発しました。私はそれをオープンソースにしました。コードには多くのコメントが付けられています。次のソースフォージページをチェックしてください。
https://github.com/stephenfewer/NoNameOS
私の経験から、次のことをお勧めします。
さまざまな部分で x86 アセンブリ言語が必要になります。これは避けられませんが、最小限に抑えることができます。すぐに C コードを実行できるようになります。これは、OS 開発で実績のある選択肢です。ある種のメモリ マネージャを利用できるようになったら、必要に応じて C++ を使用できます (new や delete などには何らかのメモリ マネージャが必要です)。
どの言語を選択しても、システムをブートから BIOS が使用可能な形式にするためには、依然としてアセンブリと C が必要です。
最終的に、選択する主要言語は、開発する OS の種類によって異なります。
私の開発環境は、GNU 開発ツールDJGPPとNASMアセンブラーの Windows ポートでした。私のIDEでは、Eclipse 内で C/C++ 開発環境を提供するCDTプラグインを備えた IBM の Eclipse を使用しました。
テストには、オープン ソースの x86 PC エミュレーターであるBOCHSをお勧めします。OSをすばやく起動できるため、テストに最適で、Eclipseに統合できるため、ボタンを押すだけでOSを構築および実行できます。また、VMWare と物理 PC の両方を時々使用することをお勧めします。これにより、微妙なバグを見つけることができます。
PS OS の開発は本当に楽しいですが、非常に集中的です。私は 12 か月の大半を費やしました。私のアドバイスは、よく計画することであり、あなたのデザインが鍵です! 楽しい :)
言語とコンパイラは、達成しようとしていることに完全に依存します。ただし、低すぎるレベルから問題に取り組んでいる可能性があることをお勧めします。
オペレーティング システムの基礎に関する資料があります。 MIT には、このテーマに関する OpenCourseware があります。Andrew Tannenbaumのオペレーティング システム シリーズを読み、Minixのようなものを見てください。
そこにあるものについてのアイデアを得てください。物事をいじり始めます。アイデアを借りて、どこに行くか見てみましょう。必要に応じて車輪を再発明することもできますが、他の人の作品に基づいて構築することで、より多くのことを学ぶことができます。
どの言語を選択するかは、実際には重要ではありません。言語がチューリング完全である場合は、その中にOSを書くことができます。
ただし、言語の表現力により、特定の種類のデザインの実装が非常に簡単または非常に困難になります。たとえば、古いSmalltalk OSの「活気」とダイナミズムは、Smalltalkに実装されているという事実に依存しています。Cでもできますが、考えもしないほど難しいかもしれません。JavaScriptまたはRubyOTOHがおそらく最適です。
MicrosoftResearchの特異点は別の例です。アーキテクチャの多くはこれらの言語の静的な型の安全性と静的な検証可能性に依存しているため、Sing#、 Spec#、C#(または同様の言語)以外では実装できませんでした。
覚えておくべきことの1つは、Cで実装されたOSの設計スペースがほぼ完全に調査されていることです。文字通り何千もあります。ただし、他の言語では、これまで誰も発見したことのない何かを実際に発見する可能性があります。Javaで書かれたOSは約12個、C#では約6個、Haskellでは2個程度、Pythonでは1個、RubyやJavaScriptでは1個もありません。
ErlangまたはIoでOSを作成してみて、それがオペレーティングシステムについての考え方にどのように影響するかを確認してください。
XINU を調べてみてください。これは x86 用の小さな OS であり、学生による分析以外には実際には使用されていません。
ANSI C を使用し、エミュレーターから始めます。実際のマシンに移植すると、いくつかのアセンブラー コードが表示されます。コンテキストの切り替えと割り込み処理 (たとえば) は、アセンブラーで記述する方が簡単です。
Andy Tannenbaum は、OS に関する優れた本を書いています。他にもたくさんの良いものがあります。
幸運を!どんなに小さくても、独自の OS を作成することに勝るものはありません。
また、開始するために必要なすべての情報が含まれているOSDev.orgも確認してください。
私の質問への答えを必ずチェックしてください:
私は、PCI ボード上にある 386SX に対して 1 回実行しました。プロテクト モードで X86 CPU を起動する方法に関する良い情報源は、Linux のソース コードです。これは、いくつかのアセンブリ ステートメントにすぎません。その後、gcc を使用して C コードをコンパイルできます。結果は、ELF 形式のオブジェクトコードです。オブジェクトコードからプログラムを作成するために、独自のリンカーを作成しました。はい、うまくいきました!幸運を。
間違いなく、私は Ada を使用します。これは、私が出会った中で最高の汎用システム プログラミング言語です。一例として、レコード内のオブジェクトのビット レイアウトを指定する場合、Ada は C よりもはるかに優れています。Ada は、特定のメモリ位置でのレコードのオーバーレイもサポートしています。C では、同じ効果を得るためにポインターをいじる必要があります。それは機能しますが、エラーが発生しやすくなります。Ada には割り込みの言語サポートもあります。
もう一つ:安全。Ada はデフォルトで配列の代入をチェックしますが、必要に応じてオフにすることができます。C は、配列の境界チェックを「デフォルト」に設定しないため、必要なときに手動で行う必要があります。これが正しいデフォルトではないことは時が示しています。必要な場所で忘れてしまいます。バッファ オーバーフロー エクスプロイトは、クラッカーが使用する最も一般的なセキュリティ上の欠陥です。それらには、それらを見つけて使用する方法を説明するWebサイト全体があります。
これについて学ぶことに関して、私が知っている 2 冊の本はXINU (Unix の後方、Scientology とは関係ありません) とProject Oberonです。1 つ目は私のオペレーティング システムの大学院コースで使用され、2 つ目は Pascal の作成者である Nikalus Wirth によって書かれました。
完全な OS を作成する場合は、さまざまな言語を使用する必要があります。少なくとも、Assembly、C、および C++ を期待しています。
ほとんどのテストには仮想マシンを使用します。
おそらく C です...すべての主要な OS は C/C++ または Objective-C(Apple) で記述されています。