すべてのOSにRAMが必要ですか?


76

RAMなしで使用できるOS、特に起動可能なペンドライブを作成してコンピューターで使用できるOSはありますか?起動は基本的にOSをRAMにロードするため、これは厄介です。

注:私はもともと、RAMのないOSについて知りたいのですが、ラップトップ(起動しないが空白の画面を表示する)RAMが悪くなったかどうかを確認したかったのですが、この質問が雪だるま式になっているのが好きです。


23
CPUがRAMなしでもまったく機能するかどうかはわかりません。これはComputer Science.SEにとって良い質問かもしれません。私が確かに知っていることは、BIOSを通り抜けることさえできなければ、どこにも行かないということです。

12
@AndréDanielCPUには、CSの観点からはランダムアクセスメモリでもあるキャッシュがあります。したがって、理論的には追加のRAMモジュールは必要ありません。しかし、実際には、x86アーキテクチャがこれを許可しているとは思えません。
フィリップ14

30
少なくともx86では、キャッシュは直接アクセスできるメモリではないため、プロセッサキャッシュの使用に関するこれらの引数はすべて疑わしい妥当性があります。コードは常にRAMを参照しますが、プロセッサはキャッシュを自動的に管理するため、最も頻繁にアクセスされるデータについてRAMのデータを実際に取得する必要はありません。しかし、再び、「これをキャッシュに保存する」「これをキャッシュに書き込む」と言うアセンブリ命令はありません。レジスタがあり、メインメモリ(そのすべての奇妙なアクセスモード)、期間があります。
マッテオイタリア14

3
(OTOH、理論的には、物理​​アドレス空間にマップされた他のRAM(ビデオRAMなど)または周辺機器を利用できます)
Matteo Italia 14

13
最新のx86 CPUでは、オンダイキャッシュを「RAMとしてキャッシュ」モードにすることができます。そのためには、MSRを設定する必要があると思います。これは一部のARM CPUにも当てはまる場合があります。最近のCPUのキャッシュは、最初のPCが最大メモリとして持つことができる量よりも多くなっています。ただし、PCでは、RAMが存在しないとファームウェアは起動しません。カスタムファームウェアまたはPCプラットフォームではないものが必要です。
ローレンス

回答:


96

すべてのOSにRAMが必要ですか?
IBM PC互換ハードウェアの場合、BIOS POSTプロセスの必須ステップは、BIOSをロードするRAMがあるかどうかを確認することです。オプションで、RAMのPOSTプロセスチェックが正しく機能します。POSTプロセスの後、BIOSはブートローダーをRAMにロードし、ブートローダーに制御を渡します。したがって、あなたの質問への答え(「すべてのOSはRAMを必要としますか?」)です。はい、すべてのIBM PC互換ハードウェアはブートするために少なくとも機能するRAMを必要とします。これは、そのハードウェアで実行されるすべてのOSに当てはまります。

OPの最初の質問では、「ラップトップ」への参照があったことに注意してください。これは、IBM PC互換ハードウェアと解釈しました。この回答の残りの部分では、IBM PC互換のハードウェアを想定します。

RAMに障害があるとOSを起動できますか?
RAMに欠陥がある(完全に存在しない/壊れていない)場合、またはRAMを(部分的に)交換できる場合、BadMEMカーネルパッチのBadRAMを使用して起動できる場合があります。カーネルを再コンパイルする必要があり(初めて行う場合よりも簡単に聞こえます)、再起動して不良メモリの場所をカーネルに伝えることができます。Memtest86 / Memtest86 +、BadRAM / BadMEM の使用に関する説明はこちらにあります

OSはRAMなしで起動でき、CPUのキャッシュをRAMとして使用できますか?
私の知る限り、コメントにあなたのシステムにRAMが存在しない限り、CPUのキャッシュをRAMとして使用する方法はありません(@philippなどによって提案されています)。ある場合は、ここに追加するといいでしょう。このテーマで見つけることができる唯一の論文は「RAMが初期化されるまでRAMとしてプロセッサのキャッシュを使用する」と書かれているこの論文です。RAM なしで動作するかどうか(およびその方法)がわかりません。私の知る限り、IBM互換PCでOSを起動する作業コードはありません。概念実証、作業コード、またはその他への参照はコメントで歓迎されます。この回答に追加します。

BIOSにアクセスできますか?
ラップトップがBIOS POSTを渡すことができる場合、OPの質問は少しあいまいです。@Tonnyが指摘しているように、BIOSにアクセスする」のに役立つOSはありません。BIOSのブランドに応じて、or またはor またはキーを使用してBIOSに入ります。F1F2F10DELESC

RAMなしでラップトップからデータを回復する方法は?
あなたの質問の背後にある目標に関して:なぜあなたはあなたのラップトップにアクセスする必要があるのですか?おそらく、回復したいデータがまだHDDにあるからでしょうか?その場合は、HDDを引き出し(マニュアルを参照)、外部ストレージデバイスに直接接続するか、PCに直接接続する方がはるかに簡単です。これを行うのに役立つガイドを次に示します。


3
実際に、RAMに多少欠陥があるマシンを実行すること可能です(たとえば、正しく動作しないバンクが1つしかありません)。BIOSが気付かない場合(または気付く場合は、通常のF1オーバーライドが存在する可能性があります)、BadMEM / BadRAMパッチを使用してLinuxのようなOSを実行することができます。
マッテオイタリア14

5
@VusP:RAMをチェックするには、livecd / -usbとMemtest86 / Memtest86 +を使用し、BIOSでRAMテストをスキップして、livecd / -usbからmemtestを実行します。
agtoever

4
ブート時にRAMをテストすることを「必須」と言うのは誰ですか?マシンの容量が数MB以下の場合は一般的でしたが、サイズが大きくなり時間が長くなるとすぐにオプションになりました。
アンドリューメディコ14

3
@agtoever:え?RAMが初期化されても、RAMとしてのキャッシュトリックは突然機能しなくなります。その時点でRAMを避けるのは愚かなことなので、誰もそれを試みません。ただし、初期化されていないRAMとは関係ありません。それは実際に有用なときです。
Mehrdad 14

3
@ Hi-Angel、cpuはディスクのコンテンツに直接アクセスできないため、ディスクから直接実行できません。ディスクコントローラにコマンドを挿入し、ディスクからRAMのどこかにデータブロックを転送するのを待つ必要があります。そこからのみCPUが命令を直接実行できます。
psusi

33

理論的には可能ですが、CPUキャッシュに収まらない一時ストレージにディスクを使用する必要があるため、非常に遅くなります。(CPUには、RAMでさえ遅すぎるため、数メガバイトのキャッシュがあります。それについて考えてください。)したがって、かなり小さなOSが必要になります。

(まあ、組み込みシステムオンチップ RAMまたは内部フラッシュメモリからコードを実行できます。PCBIOSは理論的には同じことを実行できますが、OS全体を実行することはできません。)

しかし、他の事は、BIOSが実行される前に、そして外に任意のインストールされたオペレーティングシステム、およびそれはあなたがペンドライブまたは何からブートすることができますBIOSです。あなたがBIOSに達することができないのであれば、その後、何も世界の他のOSは、あなたを支援するつもりはありません。


6
CPUがRAMの代わりに独自のキャッシュを使用できる可能性があります。これは、メモリテストの前に実行されるBIOSコードのこれらの部分に役立つ機能です。ただし、RAMなしで他のハードウェアを動作させるのは難しい場合があります。DMAを実行できないため、ディスクI / Oを別の方法で実行する必要があります。使用可能なRAMが見つからなかった場合、BIOSはOSのロードさえ試みないでしょう。ただし、キャッシュのサイズはそれほど問題ではありません。数MBは現代の標準ではそれほど多くないかもしれませんが、1 MBのRAMが多かった当時のOSは、現代のコンピューターでも動作するはずです。
カスペルド14

2
@kasperd DEC Alphaは、「シリアルROM」からプリロードされたキャッシュから電源投入時の初期化の最初の段階を実行するように設計されました。これは、ページテーブルが初期化されるまで、CPUがRAM、従来のROM、またはその他のメモリマップリソース(すべてのI / Oデバイス、IIRCを含む)にアクセスできなかったためです。
zwol 14

@grawity SSDはどうですか?
TechLife

@TechLife:RAMよりも、桁違いに数桁遅い。ただし、RAMとして使用する場合は、RAMと呼ばれることになります。
-grawity

15

少しの努力で、RAMを含まないシステムを設計できます。ROM(またはストレージ)からソフトウェアをロードし、レジスタまたはキャッシュですべてを実行します。このようなシステムの使用は非常に限られているため、今日のRAMの価格は少し無意味です。市販のラップトップは、オンボードメモリがないと機能しません。

あなたの本当の質問は、「起動しないコンピュータから情報を取得する方法」であり、それは簡単です。分解し、ドライブを取り外して、外部ドライブケースに接続します。

ただし、20ドル相当の作業用RAMを入手できないほど古いコンピューターには、ATA(SATAではなく通常のATA)ドライブが搭載されていることに注意してください。このインターフェースは今日ほとんど消滅しているため、フルサイズからラップトップサイズのアダプターだけでなく、ATAカードを備えたドライブケースも見つける必要があります。私は2000年に購入したものを持っています。この目的のために、古いケースをいくつか保管しています。


同意した。RAMなしはスタックがないことを意味し、ルーチンを呼び出すことができないことを意味します。この状況で動作する可能性のあるコードは、慎重に手作りされたアセンブリでなければなりません。
ローレンペクテル14

本当です。私はそれをやったコードを見てきました。(メモリコントローラーが初期化される前は、BIOSルーチンの最初の部分でした)。
ヘネス14

2
@LorenPechtelそれは完全に真実ではありません。スタックはオンチップメモリ​​に格納できます(多くの場合、格納されます)。
reirab

2
@LorenPechtelは必要ありません。ARMは、ルーチンを呼び出すためにスタックを使用しません。
堂免

1
私が見る限り、これらのチップにはRAMとしてカウントされる内部SRAMがあります。
-domen

10

私が質問を正しく読んだ場合、ここの全員が間違ったツリーをbarえています。

彼は「BIOSに到達するために」明示的に述べています。

ラップトップがあまりにも壊れていてBIOSにさえ入らない場合、他のすべては無意味です。

RAMの状況に関係なく、これでOSを起動することはできません。


8

メモリが不良であるという仮定は、おそらく無効です。ビープ音や画面上のメッセージが表示されない場合、根本的な原因はほぼ確実にCPUの故障(ややありそうもない)またはメインボードの故障(可能性が高い)です。メインボードは、ROHS運動の初期の頃によく見られた冷たいはんだ接合と、鉛フリーはんだの使用要件により、常に経年劣化します。製造技術は鉛ベースのはんだを使用するために最適化されており、業界は問題を把握して解決するのに時間がかかりました。多くの部品メーカーは、プロセスをアップグレードするためにお金を費やすことをあまり望んでいませんでした。結局、デバイスは、数か月または数年後に、何らかの保証が失効する可能性が高い場合にのみ、正常にテストおよび書き込みを行います。失敗の山とユーザーからの強い否定的なフィードバックによってのみ、メーカーは物事を改善し始めました。このようなラップトップでは、メインボードをリフローして冷はんだ接合を修正することは、ほぼ確実に法外な費用がかかります。


それは可能ですが、悪いメモリも悪い推測ではありません。不良メモリ(および不良メモリソケットでさえ)が複数回POSTに失敗するのを以前に見ました。もちろん、メモリの最も簡単なチェックは、通常、別のスティックを取り外して起動するか、1つの既知の良好なスティックのみで起動することです。それで問題が解決する場合は、メモリ、メモリスロット、またはメモリコントローラのいずれかです。
reirab

5

1980年代またはそれ以前の初期のコンピューターのほとんどは、ROMチップに一種のオペレーティングシステム(ハードウェアドライバー、IOサポート、プログラムの読み込み、非常に単純なコマンドラインインターフェイスなど)がありました。RAMチップが動作していなくても、ある程度機能する可能性があります。この機能は、ハードウェアテストを実行するために設計された特別なROMコンテンツバージョンで使用され、主にブザーとキーボードのライトを介して通信します。

CPUには、少なくとも実行されているコマンドのアドレスを記憶するための複数のレジスタがありますが、これらは通常RAMと呼ばれません。

通常のCコードは、スタックメモリを使用して変数を割り当て、スタックはRAMにあるため、RAMのないシステムでは実行できません。最近のコンピューターを起動すると、RAMリフレッシュデバイスが動作するには初期セットアップが必要になるため、通常のダイナミックRAMは最初は利用できません。アセンブリコードが最初に実行され、マザーボードの初期化が実行されます。RAMが動作し始め、Cコードを実行できるようになります。


4
最後の段落は完全に真実ではありません。スタックはオフチップRAMにある必要はありません。実際、スタックがオンチップメモリ​​に配置されることは非常に一般的です。通常のマシンでも、現在実行中のスレッドのスタックは通常キャッシュにあり、スケジューラーがスレッドをスワップするときにのみDRAMにプッシュされます。ただし、DSP用のコードを記述しましたが、スタックは直接アドレス指定可能なオンチップメモリ​​にあり、DRAMには触れませんでした。もちろん、この場合、オンチップメモリ​​は技術的にはRAMであると主張できると思います。
reirab

4
また、少なくとも一部のパラメーターと戻り値が(スタックではなく)レジスターを使用してC関数に渡されることも珍しくありません。さらに、ローカル変数は、Cコンパイラーによってスタックではなくレジスターにも一般的に格納されます。「register」キーワードを使用して、コンパイラーが特定の変数をレジスターに入れるように明確に要求することもできます。もちろん、関数がレジスタ空間よりも多くのローカル変数を必要とする場合、メモリに移動する必要がありますが、それはプログラミング言語に関係なく適用されるハードウェア制約です。
reirab

4

私が1967年に大学に行ったとき、コンピューティング部門にはStantec Zebraがいました。メモリは8192ワードの磁気ドラムで構成されていました。12のレジスタと2つのアキュムレータもありました。そのRAMを検討することはできますが、私たちの知る限りではありません。


3

CPU実行ユニットが機能するには、少なくともレジスタ用のオンチップキャッシュ(基本的には非常に少量のオンチップRAM)が必要です。CPUにも「RAM」があります。

Von-Neumann OSは、メモリを必要とせずに設計されていません。

だから


3

ここにいる他のすべての人々のように、RAMが必要であり、RAMなしでは動作できないという事実に同意しますが、以下も読んでください:

(もともとRAMが悪くなったかどうかをチェックするためにRAMなしのOSをロードしたかったのですが、この質問が雪だるま式になっているのが好きです。)

これは実際にはBIOSに存在し、RAMを詳細にチェックする機能があります。起動してBIOSの内部に入るとき、オプション「Quick Power-on self test」をoffに変更すると、RAMで完全なチェックパスが実行されます。このオプションは、AMI BIOSの2番目の選択肢のような「高度なBIOS機能」に配置する必要があります。

それがあなたをさらに一歩進めることを願っています。;-)


3

RAM は必要ありません。たとえば、チューリングマシンを使用します。

チューリングマシンは、ルールの表に従ってテープストリップ上のシンボルを操作する仮想デバイスです。その単純さにもかかわらず、チューリングマシンは、任意のコンピューターアルゴリズムのロジックをシミュレートするように適合させることができ、コンピューター内のCPUの機能を説明するのに特に役立ちます。

(テープをRAMとは見なしません。)

さて、あなたの本当の質問は「有用」について尋ね、「有用」とはどういう意味かを定義するべきです


3
チューリングマシンの概念レベルでは、RAM、レジスタ、キャッシュ、磁気テープ、ディスクなど、すべての種類の読み書きデータストレージは基本的に同等です。それらの唯一の違いは、アクセスの速度です。
バーマー14

1
@Barmar RAMはランダムアクセスメモリを意味します。つまり、その中のセルに任意の順序でアクセスできます。チューリングマシンのテープ上のセルには、連続して(どちらかの方向または交互に)アクセスすることができます。したがって、チューリングマシンのテープは、定義上RAMではありません。
カスペルド14

1
@Barmarそれは間違っています。RAMの定義では、シーク時間は許可されていません。したがって、TMのテープは、シークせずに任意のセルにアクセスできないため、単にRAMの定義に適合しません。
カスペルド14

1
@Barmar、壁時計時間の概念は適用されないかもしれませんが、時間の概念は、そこに到達するためにO(n)読み取り操作を必要とするため、確かに適用されます。
psusi

1
@Barmar、いいえ、あなたはしません。そのため、大きな「O」表記法を使用して、実際の処理にかかる「時間」とは無関係な純粋に数学的な複雑さについて説明します。このTMのテープドライブの数学的モデルは、...どちらの方向でも...しか読み取れないということです...どんな時間でも、前後にズームすることはできません。そのため、最後にバイト1を読み取った場合、最初に26バイトを読み取らないとバイト27を読み取れません。それがラムではない理由です。26バイトをスキップできるメモリが必要な場合は、0時間でも5分でもかまいませんが、テープではなくRAMになります。
psusi

3

完全にROM(読み取り専用メモリ)で実行される組み込み用途向けの特殊なOSがあります。しかし、有用なことを行うには、通常、少なくとも少量のRAMが必要です。しかし、RAMなしで起動するPCは見たことがありません。

メモリテストに関する元の質問については、コンピューターがPOST(つまり、電源投入時セルフテストを通過して起動しようとする)を行う場合、Memtest86はRAMをテストするために特別に設計されています。RAMの最初の64KBをテストし、そのRAMに自分自身をロードしてから、システムメモリの残りの部分を自由にテストします。「単なるフレークメモリ」とは対照的に「フレーク」メモリは一般的ではありませんが、Memtest86がコンピュータのメモリテストに失敗した断続的に悪いビットをキャッチするのを見ました(結局、POSTメモリテストは妥当な時間で完了することを意図しています) 、memtest86の最速テストは5〜10分実行され、より包括的なテストには数時間かかります。)


1

はい、RAMのないコンピューターを使用できます。ほとんどのx86プロセッサには、キャッシュのみで実行できる特別なモードがあります。coreboot(以前のlinuxbios)をチェックすると、それができます。それはcache-as-ramと呼ばれます。実際、これに基づいてオペレーティングシステム全体を実行できます。また、最新の大きなサイズのキャッシュでは、GUI(menuet-osを確認)を使用することさえできます。しかし、まだ誰もそうしていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.