2011-08-29 2 views
6

うまくいけば、これは素早く答えてくれるはずです。趣味のオペレーティングシステムを作成するための最も尊敬される言語とフリーコンパイラ?

hobbyishオペレーティングシステムを最初から作成するためのdefacto言語と考えられる言語は、512バイトのブートセクタの作成もサポートしていますか?私は、C++が使用できるという私の頭の中にこの漠然とした概念を持っていますが、プレーンなCが答えだと仮定しています。時間の経過を考えれば、代替言語だが優れた言語についての意見はありますか?他の人が普通の古いアセンブラを強く提案するだろうか?

あなたの答えに続いて、ソースコードをバイナリにコンパイルするためにどのような無料の(そしておそらくオープンソースの)コンパイラをお勧めしますか?

PS:OSを書くことは非常に難しい課題であり、私は決して終わらないと確信しています。私は個人的な興味の研究の仕事をしており、少なくとも単純なコンソールIOでMBRと非常に基本的なカーネルを作成したいと考えています。

+1

[標準のリファレンス](http://wiki.osdev.org/C%2B%2B_Bare_Bones)...ブートローディングのために少しのアセンブラが必要です。また、カスタムリンカースクリプトが必要です基本的にC++を主要な開発言語として使用するのを止めるものは何もありません。あなたはライブラリを持っていなくても、そのことを念頭に置いてください。 –

+1

コンパイラのランタイムサポートライブラリ(たとえばCRT)を移植して、この新しいオペレーティングシステムで動作させようとしています。最初にCバージョンを移植することをお勧めします。それははるかに小さいです。そして、はい、この鶏と卵の問題は、通常、このようなプロジェクトを早く終了させます。 –

+0

マスターブートレコードの内容をビルドするためにC(単独でも* shudder * C++)コンパイラを使用することができれば驚くでしょう。スペースの量は小さく、あなたはそれのすべてのインチが必要になります。これが神がアセンブラを作った理由です。 MBRがディスクから任意の大きなチャンクを読み取ることができる場合は、好きなようにチャンクを構築することができます。読み込んで、その初期化ポイントにジャンプします。 –

答えて

3

Cおよびアセンブリ。

Cコンパイラの場合、gccコンパイラをお勧めします。 X86アセンブリの場合は、nasm assmeblerをお勧めします。あなたはint構文よりもAT & T構文を好むならgccに付属のガスを使うこともできます。

ブートセクタはアセンブリで記述する必要があります。

カーネルはどの言語でも記述できます。必要に応じてアセンブリする必要がありますが、Cのような高級言語を使用することもできます。

非常にシンプルなものをお望みなら、それをすべてアセンブリに書くことができます。

詳細について

http://wiki.osdev.org/Main_Page

+1

ガスはインテルの構文も理解しています(.intel_syntax指令) – dimitri

+0

非常にシンプルなものはすべて、OSDEVと別の古いサイトでチュートリアルとして掲載されています(私は忘れてしまいます)。簡単な関数を与えた直後ですが、gclibやnewlibのような標準ライブラリの実装に移行する前に、これらの要素が乾いていることがわかりました。 – John

4

私は(具体的かつGCC)Cを言うと思いますが、この目的のために最も一般的に使用されるコンパイラです。

最近のコンパイラでは、 "セグメント化された16ビット"はサポートされていません。このコードは512バイトに収まる必要があります。これらの理由から、 "PC BIOS"用の独自のブートローダを書く人は、GRUBのようなものを使うのではなく、方言(NASM、FASM、GAS)を使う傾向があります。

これは他の言語(および他のコンパイラ)を使用できないことを意味するものではありません。私は人々がさまざまな言語(Pascal、C++、C#など)でカーネルを書くのを見てきました。また、低レベルのコード(ブートコードやカーネルなど)にも制限されています。それを超えると、ドライバ、ファイルシステム、GUI、アプリケーションなど、より高いものにはほとんど何でも使用できます。また、カーネルやOSの上位に使用する独自の言語を発明する人もいます。

私は代替的だが潜在的に優れた言語について意見があります。私の意見では、「潜在的に優れている」というのは、多くの異なる言語の存在がIT産業に及ぼしている、「タバコの塔」コスト(ほとんどのプログラマが言語の違いでほとんどのソースコードを読むことができない)全体。 OSプロジェクトの場合、代替言語には理論的な利点があるかもしれませんが、実際には、言語に精通している人の数を減らし、ボランティアできるようにするというデメリットがあります。バグなど)、またはその後、ボランティアが何千人ものドライバーに貢献する必要がある場合)。

私は普通の古いアセンブラを使っています(ブートコード、カーネルコード、ドライバなど)。私はそれをお勧めしません。他のどの言語よりもアセンブリの経験が豊富で、より高いレベルの言語を使用しない理由があり、移植性が問題になることがない限り、

OSプロジェクトを構成する異なる/別のバイナリの大部分をコンパイルするために、フリーでオープンソースのコンパイラとしてGCCをお勧めします。しかし、私は非標準の言語拡張と "実装定義"の動作(どの言語とどのコンパイラを使用するかにかかわらず)の使用を避けることも推奨します。そうすれば、いつでも他のコンパイラに切り替えることができます理由)より簡単に。

1

基本的な機能を移植するために必要なオープンソースの多くは、そのプラットフォーム用に書かれているため、私はLinuxから始めるでしょう。

私は限りgclibよりも実装が容易なものの良くないので、http://sources.redhat.com/newlib/をnewlibのを取得してしまったは、Linux、再び私は午前建物、考えと他の人々を使用してに切り替えました。

無料のコンパイラは、Linux上ではほとんどすべて無料です。他の人がガスやアセンブラについて言及していますが、クロスコンパイルの設定や実行形式の選択は、最終的なツールセットで解決する前に完了する必要があります。信頼性、スピード、サードパーティのアプリケーションの移植性などの理由から、カスタムOSでビルド環境を実装することを目指しています。したがって、あなたは本当にあなたがソースコードから自分自身を構築できるツールを見ている必要があります。 Linux Scratch(http://www.linuxfromscratch.org/lfs/)は、クロスコンパイル - 同じアーキテクチャー、異なる(クロス)環境の素晴らしい紹介です。

スクラッチビルドOSにgclibを実装する際に重大な障害がありましたが、それは約3年前の私の経験であったため、状況が変わってしまい、ポータブルコードの対象となるプラットフォームの数が大幅に増えました。

+0

基本的には、lib(newlibまたはgclib)について考える必要があります。なぜなら、それらはあなたの趣味OSにビルド環境を設定し、それを有用にするために最低限必要なものだからです。 – John

関連する問題