15

これはかなり理論的な質問ですが..

Python、Ruby、Perl、または Lisp、Haskell などの言語で、オペレーティング システムをどれだけ書くことができますか?

init.d のような多くのものは、スクリプト言語で簡単に実行できるようです。ファイアウォール デバイス OS の 1 つ ( m0n0wall ) は、システム構成 (起動時を含む) に PHP を使用します。そして、「emacs は OS であり、ほとんどが Lisp で書かれている」と主張する人もいるかもしれません..

もちろん、アセンブリ/C でなければならない部分もありますが、通常の .py/rb/.pl/.el/.hk ファイルはどれくらいでしょうか? 最高のパフォーマンスではないかもしれませんが、これまでで最も簡単に変更できる OS になるでしょう...

4

11 に答える 11

23

技術的には、そうするようにコンパイラーを作成すれば、どれでもかまいません。OS は、Java (JNode)、.NET (MOSA、Singularity、SharpOS、Cosmos)、Haskell (HOUSE)、Python (Ununium) などで行われています。

編集: 多くの人が、非常に低いレベルがこれを行うことができない領域であると話しているのを見ます。これは真実ではありません。

X 言語のコンパイラを拡張して、低レベルの操作を処理し、X 言語に公開できない理由はありません。すべての機能はどの言語からでも実行できます。仕事に適したツールを選択するだけです。Python の場合もあれば、C の場合もあれば、アセンブリの場合もあります。

Cosmos や SharpOS などのプロジェクトに注目して、純粋なハイレベル OS Done Right (TM) を確認してください。

于 2008-10-10T08:06:01.620 に答える
8

Java ハードウェアについて誰も言及していないことに驚いています。より高いレベルのプロセッサを作成することで、ハードウェアの進化をさらに進めるためのインスピレーションになるはずです。

「 Pycorn 」と呼ばれる別のプロジェクトを見つけました。

Python バイトコード プロセッサがあれば、100% Python で高速なオペレーティング システムを作成できます。プロセッサは、CPython バイトコード全体、または Python 言語と互換性のあるもの (ただし C モジュールは除く) を実装できます。プロセッサは、参照カウント、クラス、およびオブジェクトを処理する必要があります。Python が現在ソフトウェアで必要とするすべての複雑なデータ構造操作は、純粋にハードウェアで行う必要があります。スタックを破壊することは不可能であるため、そのようなプロセッサを構築する主な動機として私が見ているポインターの概念はありません。

すべてがオブジェクトになります!カーネル自体はメモリ オブジェクトのメソッドを呼び出しますが、ハードウェアが割り当てとガベージ コレクションをとにかく処理するため、あまり触る必要はありません。割り込みハンドラは、python メソッドに設定するだけです。MSR、キャッシュ、デバッグ レジスタ、および I/O ポートはオブジェクトです。

FPGA での Python の実装に関する興味深い議論がここにあります。

別の注意として、(Python 以外のプロセッサ上の Python O/S に関連して) インライン アセンブリを Pythonic にすることはできないと主張する人々に対して、抽象化からアセンブリを出力するのは非常に簡単です。例:

asm = MetaASM()
asm.r1 = 1234
asm.r2 = r1 + 5
asm.io.out(r1)

パフォーマンスが必要な場合はアーキテクチャ固有のアセンブリに切り替えるか、必要に応じてアーキテクチャ固有の操作/レジスタに切り替えることができます。

asm = ASM("IA-32")
asm.xor(asm.eax, asm.eax)
asm.cr0 = asm.eax
asm.invtlb
asm.fs.0x00123456 = asm.eax
asm.al = 123
asm.dword.ptr.eax = 1234 # mov dword ptr [eax], 1234
asm.push(asm.eax)

CorePyは、このトピックに関心を持っています。

于 2009-11-05T04:37:47.450 に答える
4

Python は、メモリにマップされた I/O の生のポインターや、C/ASM によって提供される他の多くの構造体など、ハードウェアと直接対話するための構造体をネイティブには提供しません。ただし、OS のほとんどすべてをより抽象化された言語で記述できるという証拠があります。MicrosoftのSingularity OSは、ほとんど C# の変種だけで書かれています。割り込みハンドラなどを実行するための C/ASM はごくわずかですが、それ以外はすべて、ほとんどの人が「カーネル」と見なしているものを含め、基本的にすべてのチューリング完全言語で実行できます。

C/ASM でこれらの低レベルの構造を実装するという Singularity の選択は、高レベル言語の構文またはその他の側面の基本的な制限として解釈されるべきではないことに注意してください。必要なアセンブリ コードを適切に出力して処理する Python のバリアントを作成することもできます。

于 2008-10-10T08:05:06.940 に答える
3

プログラミング言語にバイナリファイルを操作する機能がある限り、特定の言語で完全なOSを作成できます。これは、それが簡単または実用的であると言っているのではありません。選択した言語がバイナリを操作できる場合は、必要に応じて低レベルに移行できることは理にかなっています。

于 2008-10-12T05:21:01.813 に答える
3

House-Haskell ユーザーのオペレーティング システムと環境。VM内でも起動可能で、それで遊ぶことができます.

ソースは非常に読みやすいです、IMO。

于 2008-10-10T08:04:30.733 に答える
3

カーネルを超えて (つまり、カーネル、マイクロカーネル スタイルを意味します)、前述の各動的言語のランタイムをコンパイルするための何か、独自のオペレーティング システムを構築している場合は、ほぼすべての可能性があります。それは実用的ではありません。sh私が知る限り、init.d は主に init.d で書かれています。しかしsh、強力ではありませんが、非常に軽量で、私の知る限り、その機能は効率的です。Python や Perl などの高水準言語は問題なく処理できますが、処理速度が大幅に低下し、インタプリタのインスタンスにより多くのメモリが必要になります。

可能ですが、実用的ではありません。

于 2008-10-10T08:06:06.877 に答える
3

Singularity の興味深い結果の 1 つは、すべてのユーザーランド コードが「管理」されるため、CPU に MMU (メモリ管理ユニット) が不要になることです。非 MMU Linux を使用し、そのスクリプト化されたアプリケーションの上にある組み込みシナリオで、これが有益であることがわかりました。

于 2008-10-10T08:11:07.460 に答える
3

LispMachinesでかなり長い間実際に使用されていた Lisp で書かれた OS の例については、Genera/OpenGenera参照してください。
Haskell にはHouseがあります。

于 2008-10-10T08:17:29.880 に答える
2

「cleese」 - ほぼ完全に Python で書かれたオペレーティング システム

于 2009-06-21T21:03:00.793 に答える
2

カーネルやデバイス ドライバなど (Python など) で記述されているとは考えにくいです。メモリ管理は少し頭の痛い問題です。

一方、ほとんどすべてのユーザー空間コードは可能です。Linux では、"init" がネイティブ マシン コード バイナリである必要はありません。python スクリプトでも問題ありません。

于 2008-10-10T08:06:44.770 に答える
0

これは不可能だと思います。この質問への回答は、言語の変更を参照するか、言語を使用して低レベル(カーネル)コードを生成し続けます。これは、ある言語を使用して別の言語を作成するだけです。これらの両方でオペレーティングシステムを作成できることに同意しますが、現在は同じ言語ではないと主張します。したがって、オペレーティングシステムは多くの異なる言語で記述できますが、すべての言語(変更または言語のバイパスなし)を使用してオペレーティングシステムを記述できるわけではありません。

元の質問に対する最終的な答えはほとんどすべてですが、すべてではありません。唯一の受け入れは、CPUレベルの命令にアクセスできる言語です。

于 2008-10-12T05:38:11.593 に答える