x86クラスのプロセッサをラムレスで実行できますか?


9

最新のx86プロセッサには、少なくとも512KのL2キャッシュがあります。この量のメモリに完全に収まるアプリケーションがあります。RAMを接続せずにこれらのチップを実行できますか?もしそうなら、CPUがRAMの一貫性を維持しようとするときに、書き戻しのタイミングのペナルティを排除する方法はありますか?

私は特定のアプリケーションを考えていません、それは単なるアイドルの好奇心です。しかし、これが役立つニッチなアプリケーションがどこかにあると確信しています。

回答:


12

はい、できます。連続する(存在しない)物理メモリの場所から読み取りを偽装することで、タグをキャッシュに設定します。次に、キャッシュラインへの追加の書き込みをオフにして、ライトバックを開始します。これにより、キャッシュへの読み取り/書き込みが制限され、通常のRAMとして動作します。

bios置換プロジェクトの一部はこれを行います。これにより、チップセットとチップセットのメモリコントローラーのセットアップに多くのコードを費やすことができるため、たとえばCでコードを記述できます。

この手法は、組み込みクラスのCPUとブートローダーの処理に広く使用されています。キャッシュをRAMのようなモードにする方法は少し異なります。

低レベルの簡単な紹介については、このプレゼンテーションをチェックしてください

他の人が指摘したように、まだどこかからブートコードを明らかにロードする必要があることに注意してください。


実際、ほとんどすべての最近のBIOSがこれを使用しており、そのためほとんどすべての最近のx86 CPUが公式にサポートしていると思います。
Yuhong Bao 2013

7

CPUのリセットが解除されると、キャッシュはオフになります。BIOSは、最初にキャッシュを構成してクリアするものです。つまり、最初から起動するためのRAMがないため、RAMなしで実行することはできません。


1
ROMからの最初のいくつかの命令は、RAMを使用せずにキャッシュを初期化してオンにできませんか?
Mark Ransom 2011

1
@Mark Ransom Modern Intelプロセッサ(および他の多くのCPU)は、シリアルフラッシュを使用してBIOSを格納します。ただし、シリアルフラッシュからコードを実行することはできません。代わりに、CPUはこのシリアルフラッシュをRAMにコピーしてから実行します。

ええと、私の無知が表れています-私がハードウェア設計を行ってから何年経ったかがわかります。したがって、CPUは最初の命令が実行される前にフラッシュを自動的にコピーしますか?それは克服すべき厄介な鶏/卵の問題でしょう。
マークランサム2011

@David厳密に言えば、それは「シリアル」フラッシュではなく「ファームウェアハブ」です。「シリアル」からこれと異なるが、その中では、一度に4ビットを転送する代わりに、1
Majenko

1
@Mark Ransomシリアルリンク(シリアルフラッシュ、RS-232、SPIなど)を介して起動する多くのCPU / MCU / DSPがあります。これらはすべて、CPUの内部に小さなROMを置いて起動することでこれを実現し、そのコードはどこからでも「実際の」コードをロードします。理論的には、RAMのないシステムを実行するには、Intelにこのコードを変更して、外部RAMの代わりにキャッシュを使用するようにさせることができます。しかし、インテルがこれを行うとは思えません。

3

これがどれほど正確であるかはわかりませんが、これらは私の考えです。

プログラムでキャッシュにアクセスする方法はないと思います。ある命令から次の命令まで、キャッシュの内容とその場所を保証できないため、直接アクセスできたとしても、RAMとして確実に使用することはできません。

RAMなしでx86を実行することはできますが、x86を非常に便利に使用することはできません。データの保存に内部レジスタを使用するだけに制限されます。


2
キャッシュラインのフィルとフラッシュのプロトコルは完全に文書化されており、x86を含むほとんどのCPUで構成可能です。キャッシュラインの内容は、命令間でランダムにフラッシュされません。線形RAMとして動作するように通常設定する方法についての私の回答を参照してください。
ビョルンウェセン2011

RAMがなくても正しく機能する80x86クローン用の16進ローダーユーティリティを作成しました。IIRC、私は戻りアドレスを保持するためにSPを使用して1レベルの呼び出しスタックを実装しました。ROMはRAMと同じバス上にあるため、RAMが動作しないときにROMが機能するという問題が発生する可能性はそれほどありませんでしたが、そのような場合はローダーが問題を診断できました。外部コードバスはあるが内部コードスペースが少ない他のいくつかのマイクロでは、バスが壊れているシステムでコードを実行できることは、有用な診断ツールでした。
スーパーキャット2011

@私は誤っている可能性がありますが、RAMはバイナリコード用ではなく、プロセッサによる読み取りおよび書き込み用ではありませんか?
Victor Mehta 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.