RAM で動作する OS を作成してみませんか?

RAM で動作する OS を作成してみませんか?

これはこの質問をするのに適した StackExchange サイトではないかもしれませんが、これより良いサイトが見つかりませんでした。オペレーティング システムに関する質問のためのサイトはないようです。

最近、純粋に RAM で動作する OS について考えており、これには多くの利点があると考えています。

  • ファイルシステムやキャッシュなどを扱う必要がないため、このような OS を作成するのははるかに簡単になります。
  • ずっと速くなります。
  • 何もロードしたり保存したりする必要がないため、プログラムの作成が簡単になります。
  • ソースコードを書いてコンパイルする代わりに、プログラムをメモリ内で直接操作することができます。REPLはこれに近いところまで到達していますが、なぜそこまで行かないのでしょうか?ライトテーブルは、「実行中のプログラムを変更できる」という点でこれに似ていますが、さらに進化できると思います。明らかに、メモリ内でプログラムを操作/構築する別の方法が必要になります。
  • クエリ キャッシュを行う必要がなくなるため、データベースは大幅に簡素化されます。クエリ キャッシュはまったく必要なくなるかもしれません。
  • 起動やシャットダウンは不要

明らかに、このアプローチには問題があります。

  • メモリは揮発性です。バックアップ バッテリーなどでメモリが常に有効な状態に保たれるように、ハードウェアを変更する必要があります。
  • データが大きすぎて RAM に収まらない状況はたくさんあります。たとえば、巨大なデータベースを持つ大規模な Web サイト、膨大な音楽/ビデオ コレクションを持つ人々などです。ただし、ほとんどの人は膨大なビデオ コレクションを持っておらず、Netflix からストリーミングしています。つまり、16 GB の SSD しか搭載していない ChromeBook の成功を見てください。
  • メモリ内のOSを更新するのは難しいかもしれないが、JavaやErlangのホットスワップなど、一部の言語ではすでにこれが行われている。

とにかく、私が何かを見逃しているに違いありません。そうでなければ、私よりもはるかに賢いコンピューター科学者全員がすでにこれをやっているはずですが、それは何でしょうか?

答え1

RAM だけしかない場合、次の 2 つの理由により RAM を効果的に使用することはできません。

  1. ページがダーティであるがアクセスされていない場合は、RAM を他の用途に使用したい場合でも、そのページを RAM に保持する必要があります。

  2. アプリケーションがメモリを使用する可能性がある場合、または使用しない可能性がある場合は、すでに行ったすべての予約に対応できない場合は、たとえそれらの予約のほとんどが使用される可能性が低い場合でも、拒否する必要があります。そうでない場合は、プロセスを強制的に終了する必要があるためです。

つまり、RAM しかなく、それを効果的に使用できないのです。これは、汎用オペレーティング システムにとって最悪の状況です。

しかし、これが悪いアイデアである基本的な理由は、RAM以外のものを持っていても、それを使わなければならないわけではないという単純な理由です。許可する有益であれば、それらを使用してください。選択肢を奪っても状況は改善しません。

答え2

RAM とディスク ストレージの価格は、今日でも桁違いに異なります。つまり、ストレージのニーズが増大するにつれて、すべてを RAM に保存すると、他の方法よりもはるかに高価になります。これは ROM メモリ (起動するには不揮発性のものである必要があります) にも当てはまり、少量を使用し、残りの必要なプログラム/コードをディスクに保存する方が、すべてを ROM に保存するよりも経済的な選択です。

1TBハードドライブ50ドル vs 1GB RAM 30ドル

120GB SSD 100ドル vs 16GB RAM 150ドル

私は何十年も前にそのような RAM のみのコンピューターを購入し、実際にまだ持っています。24k のスタティック RAM を搭載した Tandy Model 102 です。ドキュメントやプログラムを整理したり選択したりする必要があったため、ファイル システムのようなものがまだありました。価格が高かったため、普及しませんでした。私が購入したときの価格は 600 ドルでした。

ここに画像の説明を入力してください

答え3

Linux OS を RAM から完全に実行することができます (つまり、永続メディアまたは PXE から起動した場合)。

カスタム initrd で ramfs を作成し、それを設定した後、これを root としてマウントするだけです。

ただし、RAM は SSD や HDD などに比べて比較的高価で容量も小さいため、実際上の制約がいくつかあります。

答え4

組み込みOSは、アプリケーションによってはRAM内で完全に動作することもよくあります。書いた数年前、Atmel マイクロ コントローラー用でした。

1980年代には、RAMだけで実行できるさまざまなシステムがありました。技術的にはどれでもオリジナルの IBM PC または XT のドライブでは、ROM に組み込まれた BASIC インタープリタを直接起動できるため、この方法は便利でした。初期の Commodore マシン (VIC-20、C64、4+、C16 など) (およびその他多数) はすべて同じでした。

1990 年代、OS 全体が RAM で実行される最も人気のあったコンシューマー システムは PalmOS でした。PalmOS には元々、いかなる種類のファイル システムもありませんでした (内部的にはすべてが 1 つの大きな (非リレーショナル) RAM レコード データベースに保存されていました。PRC ファイルと PDB ファイルを覚えている方なら、特定のアプリケーション リソースまたはデータ ストアのこれらの RAM レコードのダンプがほとんどでした)。外部ストレージ オプションが導入されるまで、OS に何らかのファイル システム アクセスが組み込まれることはありませんでした。その場合でも、デバイスで SD カードまたは MMC カードを使用していない場合、システムは完全に RAM から実行されていました。アプリは、ほぼその場で実行されたため (もちろん、スタックとヒープ領域を割り当てることはできましたが)、「ロード」する必要はありませんでした。

Linux カーネルは、RAM 内で完全に実行するように構成できます。これは、汎用コンピューティング (デバイスが何を実行するか分からない) ではそれほど役に立ちませんが、特定のアプリケーションの特定のメモリ境界が分かっている場合は、この方法で構成して実行できます。スワップは使用されず、実行したいアプリケーション コードで最初にカーネルをロードするために何かを使用する必要がありますが、実行可能です (ただし、実際のシナリオでは、デバイスが再初期化された場合に備えて、カーネルとアプリケーション データを保存する何らかのファームウェアが少なくとも必要です)。

なぜ組み込み分野の特定の領域以外では、これを実際に頻繁に見ないのでしょうか?組み込みデバイスでさえ、何かまた、最近のフラッシュ メモリは非常に安価で信頼性が高く、少なくともブート用の小さなソリッド ステート ストレージを追加するのは非常に簡単で安価です。また、デバイスのボリュームが大きくない限り、ブートストラップ/再初期化用に OS を格納する ROM チップを用意するのは高価になる可能性があります。もちろん、メーカーがシステムにどのような負荷をかける予定なのかわからないより汎用的な PC では、仮想メモリ ページをスワップするためのバッキング ストアとして使用できる永続的なストレージを使用できることは大きな利点です。ただし、大規模なストレージを必要としないよりカスタムのニーズには、RAM のみで完全に実行できるさまざまな OS があります。

関連情報