OSをスクリプト言語で書くのは良い考えですか?[閉まっている]


8

スクリプト言語で書かれたOSを作成するのは良い考えですか?

たとえば、Pythonを使用してOSを作成するのはどうですか?



JavaScriptで記述された仮想マシンがあります...
user16764 '29

3
金属を使わずにすべてプラスチックで車を作るのと同じくらいいいアイデアです。
Job

Emacsは素晴らしいOSであり、elispは、その使用法と動的スコープの両方の点で、確かにスクリプト言語です。
SKロジック

回答:


15

それは単に悪い考えではありません。それはほとんど不可能です。

IO機能がホストオペレーティングシステムに完全に依存する言語でIOをどのように実装しますか?

どのようにして、有用な割り込みプリミティブなしでプリミティブスケジューリングを実装できますか?

特定のバイトをアドレス指定できない言語でデバイスドライバーを作成するにはどうすればよいでしょうか。

編集:-少し明確にするために。マシンと直接対話する「実際の」OSを「スクリプト」言語で作成することはできません。ただし、スクリッティング言語に十分な柔軟性がある場合は、使用可能な「仮想マシン」を作成できます。たとえば、ドナルド・クヌースの理論的なMIX(s)マシンの実装と、pacman を実行するのに十分なZX80 エミュレーターは、JavaScriptで記述されています。


2
@ClintNash本当に?JavaScript by Definitionは、OS上で実行する必要があるランタイム環境内にあります。もちろん、それをバイナリにプリコンパイルすることは理論的には可能ですが、これは事実上前代未聞です。Node.jsはホストOSで実行する必要があります。JavaScriptは、実際のOSを作成するために必要な構成要素へのネイティブアクセスを持ちません。確かに、抽象化のレベルが十分に高まったら、スクリプトの使用を開始できますが、その下にあるものには、ハードウェアと対話するための金属の機能が必要です。
bunglestink 2012年

あなたは正しい@bunglestinkだと思います。上位の抽象化レイヤーでJS / OSの使用法を参照していました。Windows 8がJSを統合するレベルは不明です。
ジャックストーン

1
Lispには割り込みやIOプリミティブがなく、生のメモリにアクセスできません。動的に型付けされます。それでも、LispマシンのOSはLispで作成されました。
nikie、2012年

1
@nikie-はい、しかしそれは本当のOSではありませんが、すべての基本的なサービスは基盤となるOSに依存しています。
ジェームスアンダーソン

6
@nikie Lispマシンは、ハードウェアレベルでLisp仮想マシンを基本的に実装する特殊なハードウェア上に構築されました。つまり、可能ですので一部ではありますが、実際にはこの時点で、OSを可能な限り最も原始的な形式であるマイクロコードレベルで実装しています。
bunglestink 2012年

6

どのように決定する前に、を指定する必要があります。この新しいOSは何をしますか?どこで実行されますか?なぜ誰かがそれを使うのを邪魔するのでしょうか?など次に、OSの品質を判断します。速度、セキュリティ、スレッディング、メモリ管理、マルチタスク、ファイル形式、言語サポート、サポートされているプロセッサなど。

上記の質問に答え、OSの多くの品質を検討することで、目標を達成するために使用するツールを決定できます。

今、本当にそうしたいですか?

Linuxの一部の記述にPythonが一部使用されたと思います-参照:Windows、Mac OS X、Linuxで記述されている言語は何ですか?


3

私はこれが適切な答えではないことを知っていますが、このプロジェクトは、JavaScriptで書かれたカーネルを使用して動作するオペレーティングシステムを示しています。

https://github.com/charliesome/jsos/

VGAおよびキーボード用のドライバーも、割り込みを使用してJavaScriptで記述されています。しばらく前にOpenGL 1.1の実装を自分で開発しましたが、かなりうまく動作します。


5
実際のところ、ブートローダーと低レベルの機能はCとアセンブリで記述されています。また、js仮想マシン全体がCで実装されています...
bunglestink

その時点で、パーツをx86で作成する必要があるため、オペレーティングシステムはCで作成できないと主張することもできます。
Overv

1
良い点、それと議論することはできません。Asmは常にあるレベルで必要になります。ただし、x86のasmで絶対に記述する必要があるのはブートローダーだけだと思います。その後、ほとんどのCの実装にはインラインアセンブリ機能があり、それ以上のものを構築できます。これは、ランタイム抽象化を経由せずにハードウェアに触れることがないため、ランタイム環境の下位抽象化が常に必要なスクリプト言語とは対照的です。
bunglestink

3

いいえ、それは不可能です(排他的に)

どうして?以下を検討してください。

スクリプト言語とは何ですか?

「スクリプト言語」の定義について、次の2つの仮定をしてみましょう。

  1. 言語はランタイム環境内にあります。
  2. 言語は生のメモリポインタにアクセスできません。

オペレーティングシステムとは何ですか?

オペレーティングシステムの主な目的を次のように簡略化できると仮定します。

  • ユーザープログラムとそれらが実行されるハードウェアとの間の抽象化を提供する

これらの定義によって、スクリプト言語をオペレーティングシステムにすることは論理的に不可能です。どうして?

  1. OSは、ハードウェアと通信するために、コンピュータのメモリに生の、繋がっていないアクセスが必要です。スクリプト言語は生のメモリポインタにアクセスできないため、これを行うことはできません。
  2. スクリプト言語にはランタイム環境が必要ですが、ハードウェアと直接通信できないため、環境はこの機能を持つ別の言語でコーディングする必要があります。この場合(他の投稿で取り上げられたJSOSの場合と同様)、マシンとのインターフェースには低レベルの言語を使用する必要があります。

Cなどの「生の」言語で最小量のコードを書くことは可能ですが、生のコンパイル済み言語は常に定義上必要になります。 これが整ったら、OSの他の部分をスクリプト言語で実装できますが、スクリプト言語を単独で使用することはできません。


公平を期すために、典型的なオペレーティングシステムはCのランタイムを設定し、実際にCコードを実行する前に基本的なハードウェア抽象化を公開します。JavaScriptランタイムを提供するだけで同じことができます。このランタイムはCをかなり上回っていますが、一度起動すると、JSONがiniよりも意味があり、JavaScriptがデフォルトで自己記述しているため、タイプライブラリを必要としないことを除いて、本質的には最新のコンポーネントオブジェクトモデルです。JavaScriptは非常に自己記述的であるため、toStringを介してオブジェクトの関数を取得し、それらを操作して、ディスクに保存できます。カーネルに使用することは考えられないことではありません。
Dmitry

0

原則として、Pythonでオペレーティングシステムを作成できることを維持する必要があります。Pythonから低レベルの言語コンパイラを作成し、コンピュータの低レベル部分へのアクセスを提供するモジュールを標準ライブラリに追加する必要があります。しかし、これらの2つの部品が配置されていれば、それは可能です。

しかしながら、

  1. 効率的なコードを生成するコンパイラを書くのは本当に難しいでしょう
  2. Pythonは低レベルの詳細にアクセスするのが厄介です

3
また、このシナリオのPythonは、賢明な定義によって「スクリプト言語」としての資格を失います。
tdammers 2012年

@tdammers、私はスクリプト言語をとにかく不明確な概念だと考えています。
Winston Ewert 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.