組み込みシステム、この用語自体には幅広い用途があります。フラッシュプログラムスペースがキロバイト以下で測定され、RAMがビットまたはバイト(キロバイトには不十分)で測定される小さなマイクロコントローラーを組み込みシステムと呼ぶことができます。同様に、組み込みシステムとして、かなり本格的なコンピューターのマザーボードで本格的なオペレーティング システムを実行する tivo (別の例として、tivo を xbox に置き換えます)。したがって、質問について曖昧にする必要はありません。仮想メモリは、そのアプリケーションがこれらの境界を越えることとはほとんど関係がありません。
上記の多くの答えがあります.David Sはもちろん、仮想メモリは単に仮想メモリ境界の片側のメモリアドレスがその境界の反対側で使用される物理アドレスと異なることを意味します。どこに、どのように、なぜ境界があるのかなど、さまざまです。
仮想メモリの一般的な使用法であり、主な使用例はオペレーティング システムであると主張するかもしれません。利点の 1 つは、たとえば、すべてのアプリケーションを同じアドレス空間用にコンパイルできることです。すべてのアプリケーションは、プログラムの観点からすると、たとえばアドレス 0x8000 から始まるようにコンパイルできます。そのアドレスに基づいたもの。ハードウェアとオペレーティング システムの組み合わせにより、プログラムが使用している仮想アドレスが物理アドレスに変更されます。オペレーティング システムでマルチタスクが許可されている場合、各タスクは同じアドレス空間にあると見なされる可能性がありますが、物理アドレスはそれらのタスクごとに異なります。仮定された固定アドレス空間を使用することが利点である理由については、これ以上詳しく説明しません。オペレーティング システムが使用するもう 1 つの側面は、メモリ管理です。ただし、多くの MMU ではメモリをセグメント化できます。ユーザーが 100 メガバイトのメモリを割り当てたい場合、プログラムは仮想アドレス空間で 100 メガバイトが線形であるかのようにアクセスでき、そのアドレス空間では線形ですが、その 100 メガバイトはたとえば 4K バイトのチャンクに分割される可能性があります。常にそうであるとは限りませんが、その物理メモリの 2 つのチャンクがその 100 メガバイトの他のチャンクの隣にないことは技術的に可能です。メモリ管理は、アプリケーションが割り当てることができるメモリの大きな物理チャンクを常に維持しようとする必要はありません。すべての MMU がまったく同じというわけではなく、4K バイトは単なる例であることに注意してください。オペレーティング システムに対する仮想アドレス空間の 3 つ目の大きな利点は、保護です。アプリケーションが仮想アドレス空間にバインドされている場合、多くの場合、そのアプリケーションが他のアプリケーションやオペレーティング システムのメモリにアクセスするのを簡単に防ぐことができます。この場合のアプリケーションは、すべてのアクセスが仮想と見なされ、物理への変換を経る必要があるような保護レベルで動作/実行されます。仮想から物理への変換を定義するために使用されるテーブルには、保護フラグを含めることができます。アプリケーションがビジネスでアクセスしていない仮想空間のメモリ アドレスをアドレス指定する場合、ハードウェアはそれをトラップし、オペレーティング システムにその処理方法に関するアクションを実行させることができます (一部のハードウェアを仮想化し、エラーをポップアップ表示してアプリを強制終了し、警告を表示し、アプリを強制終了するのではなく、同時にアプリに偽のトランザクション データをフィードするなど)。多くの場合、そのアプリケーションが他のアプリケーションやオペレーティング システムのメモリにアクセスするのを簡単に防ぐことができます。この場合のアプリケーションは、すべてのアクセスが仮想と見なされ、物理への変換を経る必要があるような保護レベルで動作/実行されます。仮想から物理への変換を定義するために使用されるテーブルには、保護フラグを含めることができます。アプリケーションがビジネスでアクセスしていない仮想空間のメモリ アドレスをアドレス指定する場合、ハードウェアはそれをトラップし、オペレーティング システムにその処理方法に関するアクションを実行させることができます (一部のハードウェアを仮想化し、エラーをポップアップ表示してアプリを強制終了し、警告を表示し、アプリを強制終了するのではなく、同時にアプリに偽のトランザクション データをフィードするなど)。多くの場合、そのアプリケーションが他のアプリケーションやオペレーティング システムのメモリにアクセスするのを簡単に防ぐことができます。この場合のアプリケーションは、すべてのアクセスが仮想と見なされ、物理への変換を経る必要があるような保護レベルで動作/実行されます。仮想から物理への変換を定義するために使用されるテーブルには、保護フラグを含めることができます。アプリケーションがビジネスでアクセスしていない仮想空間のメモリ アドレスをアドレス指定する場合、ハードウェアはそれをトラップし、オペレーティング システムにその処理方法に関するアクションを実行させることができます (一部のハードウェアを仮想化し、エラーをポップアップ表示してアプリを強制終了し、警告を表示し、アプリを強制終了するのではなく、同時にアプリに偽のトランザクション データをフィードするなど)。この場合のアプリケーションは、すべてのアクセスが仮想と見なされ、物理への変換を経る必要があるような保護レベルで動作/実行されます。仮想から物理への変換を定義するために使用されるテーブルには、保護フラグを含めることができます。アプリケーションがビジネスでアクセスしていない仮想空間のメモリ アドレスをアドレス指定する場合、ハードウェアはそれをトラップし、オペレーティング システムにその処理方法に関するアクションを実行させることができます (一部のハードウェアを仮想化し、エラーをポップアップ表示してアプリを強制終了し、警告を表示し、アプリを強制終了するのではなく、同時にアプリに偽のトランザクション データをフィードするなど)。この場合のアプリケーションは、すべてのアクセスが仮想と見なされ、物理への変換を経る必要があるような保護レベルで動作/実行されます。仮想から物理への変換を定義するために使用されるテーブルには、保護フラグを含めることができます。アプリケーションがビジネスでアクセスしていない仮想空間のメモリ アドレスをアドレス指定する場合、ハードウェアはそれをトラップし、オペレーティング システムにその処理方法に関するアクションを実行させることができます (一部のハードウェアを仮想化し、エラーをポップアップ表示してアプリを強制終了し、警告を表示し、アプリを強制終了するのではなく、同時にアプリに偽のトランザクション データをフィードするなど)。仮想から物理への定義に使用されるテーブルには、保護フラグを含めることができます。アプリケーションがビジネスでアクセスしていない仮想空間のメモリ アドレスをアドレス指定する場合、ハードウェアはそれをトラップし、オペレーティング システムにその処理方法に関するアクションを実行させることができます (一部のハードウェアを仮想化し、エラーをポップアップ表示してアプリを強制終了し、警告を表示し、アプリを強制終了するのではなく、同時にアプリに偽のトランザクション データをフィードするなど)。仮想から物理への定義に使用されるテーブルには、保護フラグを含めることができます。アプリケーションがビジネスでアクセスしていない仮想空間のメモリ アドレスをアドレス指定する場合、ハードウェアはそれをトラップし、オペレーティング システムにその処理方法に関するアクションを実行させることができます (一部のハードウェアを仮想化し、エラーをポップアップ表示してアプリを強制終了し、警告を表示し、アプリを強制終了するのではなく、同時にアプリに偽のトランザクション データをフィードするなど)。
組み込みシステムでこれを使用する方法はたくさんあります。まず、多くの組み込みシステムはオペレーティング システムを実行するため、上記のすべて、アドレス空間用のプログラムのコンパイルの容易さ、メモリ管理の相対的な容易さ、および他のアプリケーションとオペレーティング システムの保護、および言及されていないその他の利点があります。(仮想化は 1 つですが、ブロック単位で命令/データのキャッシュを有効/無効にできることは別です)
肝心なのは、David Sが指摘したことです。仮想メモリは単に、仮想アドレスが必ずしも物理アドレスと等しいとは限らないことを意味します。そうである必要はありませんが、仮想アドレスを物理アドレスに変換する何らかの境界、通常はテーブル駆動型のハードウェアがあります。一部の組み込みシステムは非組み込みシステムと見分けがつかないため、非組み込みシステムに適用される理由は組み込みシステムにも適用される可能性があるため、これを行う理由はたくさんあります。
システムにはフラットなアドレス空間があると信じてもらいたいと思っている人もいるかもしれませんが、それは多くの場合幻想です。たとえば、マイクロコントローラーでは、複数のフラッシュ バンクと 1 つ以上の RAM バンクが存在する場合があります。これらの各バンクには、通常ゼロベースの物理アドレスがあります。mmuなどがない場合でも、プロセッサのアドレスバスとフラッシュまたはRAMメモリのアドレスバスの間に、プロセッサのアドレスをデコードし、それを使用して特定のメモリバンクにアドレス指定する場所があります. 多くの場合、下位ビットが一致し、上位ビットがバンクの選択を担当します (これは mmu の場合もよくあります)。その意味で、プロセッサは仮想アドレス空間に存在します。(マイコンに限らず、これは通常、プロセッサのアドレスバスがどのように扱われるかです) マイクロコントローラは、ピンがハイまたはローにプルされるか、または他のメカニズムに依存するため、1 つのフラッシュバンクを使用してプロセッサまたは別のフラッシュバンクを起動できるようにするチップ機能を備えている場合があります。入力ピンをハイに接続すると、ブートローダに組み込まれたプロセッサにより、アプリケーション フラッシュの再プログラムなど、システムへのアクセスとデバッグが可能になります。または、そのラインをローに接続し、ベンダーのデバッガー/ブート フラッシュの代わりにアプリケーション フラッシュをブートします。一部のチップはさらに複雑になり、1つのフラッシュを起動すると、プログラムがどこかにレジスタを書き込み、メモリアーキテクチャを即座に変更して物事を動かします。
ディスクとの間のスワッピングに関して仮想メモリについて話す場合、これは、より多くの RAM があるように見せるためにオペレーティング システムでよく使用されるトリックです。上記の仮想化のカテゴリでそれについて述べました。実際には存在しないという意味での仮想メモリ、私は X バイトを持っていますが、ソフトウェアに Y バイト (Y は X より大きい) が利用可能であると認識させます。オペレーティング システムは、ハードウェアによって使用される仮想テーブルを介して、どのメモリ チャンクが物理 RAM に関連付けられ、ハードウェアによってそのまま完了できるか、または何らかの方法で使用不可としてマークされ、オペレーティング システムに例外が発生するかを管理します。検査の結果、オペレーティング システムはこれがこのアプリケーションの有効なアドレスであると判断しますが、このアドレスの背後にあるデータはディスクにスワップされています。
vmware やその他の仮想マシンがどのように機能するかということと何ら変わりはありません。例外が発生するまで、仮想メモリを使用してハードウェアでネイティブに命令を実行できます。仮想マシンは、xyz ネットワーク インターフェイスがあると認識し、その xyz ネットワーク インターフェイスのレジスタにアクセスするドライバーを持っている可能性があります。 xyz ハードウェアがない、および/または仮想マシン アプリケーションがそのハードウェアにアクセスすることを望まない場合は、それを仮想化し、そのレジスタ アクセスをトラップし、ハードウェアをシミュレートするソフトウェアを使用して、そのアクセスを偽装し、仮想上のプログラムを許可します。マシンは続行します。これは明らかに仮想マシンを実行する唯一の方法ではありませんが、ハードウェアがサポートしている場合、ハードウェア上で実際に命令を実行している時間の割合として仮想マシンを非常に高速に実行できるようにする方法の 1 つです。もちろん、仮想化する最も遅い方法は、プロセッサを含むすべてを仮想化することです。その場合、すべての命令がシミュレートされます。これは非常に遅いですが、独自の機能があります (アームの x86 または x86 でアームシステムを仮想化し、アームで xyz を仮想化する)。 abc、空欄を埋めてください)。そして、それが組み込みシステムで話している仮想メモリのタイプである場合、組み込みシステムが非組み込みシステム (xbox や tivo など) とほとんど見分けがつかない場合は、同じ理由でそんなことを許してしまう。マイクロコントローラーを使用している場合、一般的に、より多くのメモリが必要な場合は、より大きなマイクロコントローラーを購入するか、システムにメモリを追加するか、アプリケーションのニーズを変更して、それほど多くのメモリを必要としないことを意味します。 . 例外もあるかもしれませんが、しかし、それは主にアプリケーションと要件に依存します。アプリケーションまたはそのデータが利用可能なRAMよりも大きくなることを可能にする汎用または汎用のようなシステムには、何らかの解決策が必要です。キーレスエントリーキーフォブ、テレビのリモコン、時計付きラジオなどのマイクロコントローラーは、通常、「アプリケーション」が物理的に存在するよりも多くのリソースを必要とすることを許可する必要はありません。