問題タブ [mmu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
778 参照

memory-management - ソフトウェアベースの MMU と TLB の構築

古い UNIX カーネルをハックしようとしています。ソフトウェアを使用して MMU と TLB を実装したいだけです。構築に使用するのに最適なデータ構造とアルゴリズムを教えてください。LRU の実装が簡単なため、多くの人がスプレイ ツリーを使用しているのを見てきました。より良いデータ構造はありますか? ソフトウェアで仮想アドレスを物理アドレスに変換する最も効率的な方法は何ですか。その x86 アーキテクチャと変換を基本的なページ テーブル変換と仮定します。

0 投票する
9 に答える
150472 参照

memory-management - 論理アドレスと物理アドレスの違いは?

私はオペレーティングシステムの概念を読んでいて、第8章にいます!しかし、私はいくつかの説明、または私の理解が正しいという安心感を使うことができました。

論理アドレス:本によると、論理アドレスはCPUによって生成されます。これは正確にはどういう意味ですか?(実行生成アドレスシステムでは..)コードがプログラム用にコンパイルされるとき、プログラムはコードがメモリのどこにロードされるかを知らないと思います。コンパイラが行うのは、プログラムレイアウトの一般的なスケッチと画像のレイアウト方法を設定することだけですが、実際のアドレスは割り当てられません。プログラムが実行されると、CPUはコンパイラが作成したこのレイアウトイメージを取得し、コードから生成されたアドレスにいくつかのアドレス(論理アドレス)を渡します。

物理アドレス:物理アドレスは、CPUが論理アドレスのセット(ベースアドレスとオフセットで構成される)を生成するまで生成されません。論理アドレスはMMUまたは別のデバイスを通過し、ラインのどこかで論理アドレスが物理RAMアドレスにマップされます。

では、実際の違いは何ですか?私は1つの利点を見ることができます。論理アドレスを使用すると、アプリケーションの自由度が高まります。物理アドレスがハードコーディングされている場合、プログラムの成功は、物理コンピュータマシン、使用可能なRAMアドレスなどに大きく依存します。

物理アドレスに変換された論理アドレスの使用は、1対1ではなく2つのステップを課すのではないのでしょうか?

では、生成後の論理アドレスはどこにありますか?それらは、CPUがプロセスを処理している間、CPUのレジスターに存在する可能性がありますが、前後で、どこに行きますか?これは実装に依存することを理解しています。TLBなどのCPUの特殊レジスタスペースまたはバッファに格納されている可能性があると思いますが、正しいですか?そうでない場合、テーブルは実際のRAM自体に存在する可能性があり、CPUはRAM内のテーブルのベースアドレスへのポインタ/アドレスのみを保持します。

RAMにアドレスを保持することは、論理メモリアドレスの目的とは逆効果のようです。私は自分の理解が間違っているとしか思えません。

0 投票する
2 に答える
382 参照

c - デスクトップ OS 上の C コンパイラは、スタック オーバーフローを検出するためにいくつのメモリ ページを使用しますか?

この質問は、C99 の可変長配列に関するこの質問に関連していますが、これとは異なります。

答えは、可変長配列 (または固定サイズの単なる大きな配列) をスタックに割り当てる際の 1 つの危険性は、たとえば、malloc割り当てが成功したかどうかを呼び出し元に明示的に伝える を呼び出すのとは対照的に、割り当てがサイレントに失敗する可能性があることを指摘しています。

最新の非組み込みコンパイル プラットフォームは、無効なメモリ ゾーンを使用して、追加コストなしでスタック オーバーフローを検出します (チェックは、MMU によって既に無料で行われているチェックのみです)。ローカル配列が非常に大きいと、スタック ポインタが無効な領域を飛び越える可能性があるため、上記の問題を 100% 回避することはできません。

この検出に通常割り当てられるページ数を知っている人はいますか? 少なくとも 4KiB になると思いますが、それ以上になる可能性もあります。それはコンパイラーまたは OS によって選択されたものですか? どちらの場合でも、それを変更する方法はありますか?

0 投票する
1 に答える
1253 参照

operating-system - ページフォールトに対するOSの応答

ページフォールトが発生すると、MMUが発生して例外(割り込み)が発生します。OSは現在のプロセスを停止し、この発生した割り込みに対処します。

1)これは、(7番目がマスクできない7本の割り込みラインがある68Kアーキテクチャの場合)、MMUによって生成される割り込みがレベル7であることを意味しますか?

2)また、割り込みが発生したときに、本当に重要なプロセス(仮想アドレス指定されたワードのデータを必要としない)が進行している場合はどうなりますか?OSは何をしますか?

0 投票する
2 に答える
1089 参照

memory-management - Solaris で仮想ページから物理ページへのマッピングを見つける

あるプロセスの物理ページへの仮想ページのマッピングにアクセスしたいと考えています。OS は Solaris です。正確なバージョンはhttps://stackoverflow.com/users/760807/metallicpriestから確認できます。

次のようなリストを取得したい:

CPU は x86 または x86_64 です。ページ サイズは 4K です。スワップがオフになっています。FS (実行可能イメージ) によってバックアップされ、プロセスによって使用されないページには興味がありません。

0 投票する
2 に答える
2449 参照

memory-management - x86 CPU の TLB バッファの内容をダンプする

TLB (変換ルックアサイド バッファー、これは CPU の特別なキャッシュ) から (仮想ページから物理ページへの) 変換のリストを取得することは可能ですか? 最新の x86 または x86_64 を意味します。JTAGを使用してすべてのTLBエントリをシフトアウトするのではなく、プログラム的な方法でそれを行いたいです。

0 投票する
2 に答える
1244 参照

c - mprotectの速度

私の質問はどれくらい速いかですmprotect。1 GBの連続メモリと比較して、1 MBの連続メモリと言うmprotectingの違いは何ですか?もちろん時間を測定することはできますが、内部で何が起こっているのか知りたいです。

0 投票する
1 に答える
542 参照

gcc - リンカー:特定のアドレス境界にデータのブロックを配置する方法

これは簡単な質問かもしれませんが、私はGNU GCCのリンカーファイル(codesourcery arm-none-eabi ver 4.5.2)の初心者です。

ARM7プロセッサとデータシートでMmuを初期化する必要がありますが、Mmuページテーブルは16kバイト(2 ^ 14)の境界に配置する必要があると言われています。

今のところ私はこの解決策を持っていますが、これがより効率的な解決策ではないことはほぼ確実です!

startall.oは、プロセッサの初期化を含むアセンブリファイルです。
次の行では、アドレスを0x4000(2 ^ 14の境界)に設定しました。
MmuSdram0.oには、Mmuページテーブルが含まれています。
次に、残りのファームウェアに従います。
明らかに、このソリューションは、startallの終わりと0x4000の間にギャップを与えます。これは、メモリスペースの浪費です(私は浪費が好きではありません;-)

代わりに、*(。text)の後にページテーブルを配置しますが、次のような方法がわかりません:
*(。text)"except" MmuSdram0.o
そして、リンカーにページを配置させることを好みますアドレスを自分で修正する代わりに、次に使用可能な2^14境界のテーブル。リンカのドキュメントをチェックして、ALIGNコマンドを見つけましたが、それを正しく使用する方法がわかりません。また、これが私のニーズに合ったコマンドであるかどうかもわかりません...

前もって感謝します!

0 投票する
1 に答える
403 参照

gdb - Eclipse および gdb での MMU アクティベーションのデバッグ

プロセッサ (Cirrus Logic の EP7312、ARM7) の初期化を、segger の j-link プローブ、CDT プラグインを使用した eclipse、および yagarto を使用してデバッグしようとしています。

プロセッサの MMU をアクティブにするまで、すべて正常に動作します。その後、デバッガーは完全に失われます。

MMU を起動すると、デバッガがプログラム カウンタを追跡できなくなる可能性があることを認識しており、MMU の起動後にブレーク ポイントを設定して、ここからプログラムを実行しようとしましたが、デバッガがまだ失われています。

アクティブ化されていない MMU からアクティブ化された MMU への通過を処理できるように、Eclipse を構成する方法を知っている人はいますか?

Eclipse のバージョン: 20090920-1017 gnu のバージョン: Sourcery 7.2.50

0 投票する
1 に答える
5160 参照

profiler - x86-64でのTLBミスハンドリングコストの測定

Linuxを実行しているx86-64(Intel Nehalem)マシンでのTLBミスによるパフォーマンスオーバーヘッドを見積もりたいと思います。いくつかのパフォーマンスカウンターを使用して、この見積もりを取得したいと思います。誰かがこれを推定するための最良の方法についていくつかの指針を持っていますか?

ありがとうアルカ