CPUは、電源とROMのみで機能し、RAMとして内部キャッシュのみを使用できますか?


61

オンチップキャッシュRAMを搭載したCPU(Intel i3 / i5 / i7 / Xeonなど)は、外部メモリバンクを接続せずに、それを唯一の機能RAMとして使用できますか?

または必要があり、外部RAMがあること、およびキャッシュがアクセスまたは単独で使用することはできませんか?

最近のデスクトップ/サーバーCPUは、多くの場合、1990年代の多くのコンピューターがシステムメモリ全体に搭載していたよりも多くの内部キャッシュRAMを備えているため、単純なコードを実行するのに十分な容量が必要です。

6502などのキャッシュが存在する前のCPUは、内部CPU RAMがアドレスカウンターとアキュムレータ用に数バイトしかなかったため、何もできません。

これは、現代のオペレーティングシステムを実行する問題ではなく、カスタムROMにプログラムされた単純なコードを実行するか、16進入力キーパッドを使用して手入力することです。


1
一部のCPUにはRAMが組み込まれ、外部チップを必要としないため、CPUと「キャッシュ」の意味に完全に依存します。
PlasmaHH

42
基本的に、プロセッサ自体にアドレス可能なメモリを含めると、マイクロコントローラと呼ばれるものを構築できます。これらが存在します。
マーカスミュラー

1
RAMが必要だと言うのは誰ですか?
クリスストラットン

1
「関数」の定義方法によって異なります。i7は、バッテリーを接続するだけで完全に熱を発生させることができます。
ドミトリーグリゴリエフ

2
ほんの数個のレジスタで、RAMを追加せずにできることはたくさんあります。たとえば、関数ジェネレーター。
デビッドシュワルツ

回答:


67

PCブートシーケンスの非常に詳細な説明を参照してください:http : //www.drdobbs.com/parallel/booting-an-intel-architecture-system-par/232300699?pgno=2

この時点ではDRAMは使用できないため、コードは最初はスタックレス環境で動作します。最新のプロセッサのほとんどは、ソフトウェアスタックを提供するRAMとして構成できる内部キャッシュを備えています。開発者は、このRAMとしてのキャッシュ機能を使用する場合、ブートシーケンスのこの時点でエビクションがシステムに受け入れられないため、非常にタイトなコードを記述する必要があります。一貫性を維持するためのメモリはありません。プロセッサがキャッシュとしてRAMベースで動作しているとき、ブートプロセスのこの時点でプロセッサが「No Evict Mode」(NEM)で動作するのはそのためです。NEMでは、プロセッサのキャッシュラインミスは追い出しを引き起こしません。利用可能なソフトウェアスタックを使用したコードの開発ははるかに簡単であり、初期化コードは多くの場合、DRAMの初期化前でもスタックを使用するための最小限のセットアップを実行します。

これは、RAMなしでPCを実行することで確認できます。一連のビープ音が鳴ります。それらを再生するプログラムは、BIOSフラッシュROMから実行されます。

一部のARMプロセッサでもこの動作を見ました。SoC内には、DRAMを検出、列挙、設定するプログラムを実行するために、ブートシーケンスの早い段階でキャッシュをRAMとして使用できる設定レジスタがあります。



2
x86の "cache-as-ram"(CAR)モードの機能の詳細については、ユースケースとして表示される回答でINVD(CARモードを終了するとき、メモリに無用なデータを書き込むのではなく、キャッシュを無効にします。貴重なもの)。
ピーターコーデス

DRAMが利用できない場合の排除の何が問題になっていますか?RAMへの書き込みではなく、読み取りからの問題ではありませんか?
Mehrdad

14

通常、キャッシュメモリはアドレス指定できません。プログラムは、意図的にデータを保存または取得することはできません。


2
+1これは非常に巧妙な答えです。キャッシュラインは、ほぼランダムな方法で、メインメモリからのアドレス可能なアクセスから自由にロードされ、使用されなくなります。
Ale..chenski

17
うん、これが特別なモード(pjcの答えのように)か、ある種の特別なトリックを必要とする理由です。別のオプション(受け入れられた答えに加えて)は、システムにDRAMがあると思わせることかもしれませんが、実際のメモリの書き込みはデータを破棄し、読み取りはすべてゼロ(またはアドレスのある領域のROMからの実際のデータ)を生成します。すべてのロードがキャッシュにヒットする限り、システムは正しく動作します。IDKは、実際のキャッシュフラッシュを必要とせずに64ビットロングモードに移行できるかどうかをx86がどのようにブートするかについて知っています。
ピーター・コーデス

3
ただし、パッケージ内のeDRAMキャッシュを備えたSkylake CPUは、メモリサイドキャッシュ(Broadwellの場合とは異なり、メモリコントローラーと他のすべての間)として使用するため、非CPUシステムデバイスからのDMAアクセス、またはCPUロード/ 「キャッシュ不可能な」メモリ領域(L1 / L2 / L3をバイパス)に保存します。
ピーターコーデス

3
@PeterCordesしかし、特別なモードが必要だからといって答えは「ノー」ではありません。その場合、特別なモードが存在するかどうかが問題になります。
user253751

1
問題は、それでもキャッシュを使用し、それをミスしたりフラッシュしたりしないようにするとどうなりますか?存在しないRAMのアドレスに何かが書き込まれた瞬間にアドレス可能になりますか?実際の書き込みはフロアにドロップされますが、読み取りはキャッシュから提供されますか?
rackandboneman

9

これは質問で指定されたプロセッサフ​​ァミリに直接対応していませんが、以下のスキームは以前のx86プロセッサで機能するため、RAMまたはキャッシュを使用せずに動作することは可能ですが、このアプローチには創造的なプログラミングスキルが必要です。

1980年代に戻って、英国で放送されたMSF時間信号をデコードする無線受信機の設計に出会いました。この設計では、Z80プロセッサを使用し、プログラムストレージ用のROMのみを使用していました。すべての処理とデータ保存は、プロセッサ内の内部レジスタを使用して実行されました。これは明らかに、スタックを保持するために使用可能なメモリがあるため、サブルーチン呼び出しができないことを意味していました。

当時はRAMのコストが高く、これは趣味のプロジェクトであったため、興味深いアカデミックな演習とは別に、コストを抑えることが重要でした。これは、広く利用可能なマイクロコントローラーが登場する前のことでした(エプロムの価格が100ポンド以上のIIRCの8751)。


レジスタに保存できるデータに自分自身を制限すると、実行できる有用な機能が実際に制限されます。問題は、最新のプロセッサのキャッシュメモリに関するものだったと思います。
マークランサム

もちろん、RAMを使用しないと可能な機能が制限されることは言うまでもありません。引用されたアプリケーションは、非常に限られたデータストレージリソース、無線フロントエンド、およびLCDディスプレイでどれだけの可能性があるかを示しています。
uɐɪ

-3

通常、CPUには外部クロックが必要です。しかし、それで、はい、できます。


1
理由を説明し、ユーザーの質問に徹底的に答えることが適切でしょう。この答えは弱い側にあります。
電圧スパイク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.