問題タブ [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.
linux - pmap出力を理解する
pmap -xコマンドを使用して、Linuxx86-64上のプロセスのメモリマップを表示しようとしました。pmapの出力を見て混乱しました。特にダイナミックライブラリをマッピングするためのエントリの場合。それらには複数のエントリがあります(実際には、ほとんどすべてのエントリで4つで、一部には3つのエントリがあります)。以下は例です
各ライブラリの2行目は、ページ権限がない場合でも常に2MBのサイズになります。すべてのライブラリで、RSSは常にゼロのようです。最後の2行も同じサイズ(ベースページサイズ)と同じ権限(少数のライブラリにはrwマッピングがありません)があります。
誰かがこれについていくつかの説明がありますか?おそらく、読み取り専用保護を使用したマッピングは、ライブラリのメタデータを読み取るためにローダーによって行われ、実行可能権限を持つ部分は実際にはライブラリのコードであると感じています。私は間違っているかもしれません。
しかし、私にはその真ん中の列についての手がかりがありません。許可も使用法もありませんか?誰かがここに知恵の言葉を持っていますか?
また、匿名メモリ上にあり、モードビットが設定されていないことが報告されているページもいくつか見ました。これらは何を表していますか?
io - IOMMU エミュレーションと QEMU によるインストール
今のところ、IOMMU (MMU に似ています) のエミュレーションを行うためにいくつかのパッケージを使用する必要があり、それに関するソースをいくつか入手しましたが、それらの使用方法がわかりません。
http://www.spinics.net/lists/kvm/msg38514.htmlこれは、IOMMU をエミュレートするためのソースのリンクです。
http://repo.or.cz/w/qemu-kvm/amd-iommu.gitこのエミュレーション用のファイルをダウンロードするためのリンクは次のとおりです。
私の問題は、これを行うためにqemuを使用する方法ですが、ダウンロードリストに非常に多くのファイルがあるため、それらの使用方法がわかりません...
助けてくれてありがとう、本当にありがとう!!! 詳しい方、教えてください
multithreading - マルチコア CPU は MMU とページ テーブルを共有しますか?
シングル コア コンピューターでは、一度に 1 つのスレッドが実行されます。各コンテキスト スイッチで、スケジューラは、スケジュールする新しいスレッドが前のスレッドと同じプロセスにあるかどうかを確認します。その場合、MMU (ページ テーブル) に関して何もする必要はありません。それ以外の場合は、ページ テーブルを新しいプロセス ページ テーブルで更新する必要があります。
マルチコア コンピューターでどのように動作するのか疑問に思っています。各コアには専用の MMU があり、同じプロセスの 2 つのスレッドが 2 つのコアで同時に実行されている場合、このコアの各 MMU は同じページ テーブルを参照するだけです。これは本当ですか ?この件に関する良い参考文献を教えていただけますか?
linux - さまざまな動作モードでの ARM MMU の動作
質問する前に、トピックに関する私の理解を述べます。
- Linux カーネル モードはARM スーパーバイザ モードに対応します。
- Linux ユーザー モードはARM ユーザーモードに対応します。
- カーネル モード(MMU が有効) では、Linux は物理アドレスではなく相対アドレスを使用します。つまり、物理アドレス = 相対アドレス - PAGE_OFFSET + PHYS_OFFSET
- ユーザー モード(MMU が有効) では、Linux は物理アドレスの代わりに仮想アドレスを使用します。つまり、物理アドレス = pte 、 pmd 、 pgd を使用した MMU Translation(Virtual Address)
質問:
スーパーバイザー モードで MMU が有効になっていますか (カーネル アドレス用)。
有効になっている場合、スーパーバイザー モードとユーザー モードを変換する際に、同じ MMU が異なる方法で機能することを意味します。
MMU が別のモードで別の方法で機能する場合、mmu 機能がさまざまなモードでどのように機能するかについての指針を教えてください。
前もって感謝します。
linux - Linux で MMU を有効にする
ARM Linux では、正確にどの時点で mmu が有効になります。つまり、どのファイル (アセンブリ ファイルまたは arch/arm/kernel/setup.c の paging_init())
ARM Linux は、ページングなしでの実行をサポートしていますか。
前もって感謝します。
memory - 仮想アドレスはどのように変換されますか?
(インテルの場合)仮想アドレス変換プロセスは次のとおりであることを理解しています。
1.着信仮想アドレスは、ページ テーブル番号、ページ番号、およびオフセットに分割されます。
2. CPU のプロセス記述子ベース レジスタ (PDBR) は、ディレクトリの開始位置を示します。
3.ページ テーブル番号に 4 を掛けて、ディレクトリへのオフセットとして使用し、ディレクトリ エントリを検索します。
4.ディレクトリ エントリには、ページ テーブルのアドレス、および有効性と保護情報が含まれます。この情報が、ページ テーブルがメモリに存在しないか、保護が適切でないことを示している場合、変換は停止し、例外が発生します。
5.ページ番号を 4 倍してページ テーブルへのオフセットとして使用し、ページ テーブル エントリを検索します。
6.ページ テーブル エントリには、ページのアドレス、および有効性と保護に関する情報が含まれます。この情報が、ページがメモリに存在しないか、保護が適切でないことを示している場合、変換は停止し、例外が発生します。
7.オフセットは、ページへのインデックスとして使用されます。
8.最終的に到達したアドレスにデータがあります。
そして、テーブルエントリ形式は物理ページフレームアドレスに20ビットしか指定していないため、混乱するステップ6まではすべて意味があります。 : ページのサイズ) 4 ギガバイトにアクセスできるようにする
linux-kernel - Linux(x86-64)の複数の巨大ページサイズ?
Linux on x86-64は、複数の巨大なページサイズ(たとえば、4KBの基本ページサイズを超える2MBと1GBの両方のページサイズ)をサポートしていますか?はいの場合、特定の割り当てに対してどの巨大なページサイズを使用するかを指定する方法はありますか?言い換えると、私の質問は、「MAP_HUGETLB」フラグを使用してmmap()、デフォルトサイズの巨大なページに割り当てをマップするかどうかです。デフォルト以外の巨大ページサイズにマップする割り当てを要求する方法はありますか?
c++ - uClinux での動的割り当て
私は組み込み開発の初心者であり、従来の Linux と uClinux の大きな違いは、uClinux には MMU がないことです。
この記事から:
VM を使用しない場合、各プロセスは実行可能なメモリ内の場所に配置する必要があります。最も単純なケースでは、このメモリ領域は連続している必要があります。通常、その上下に他のプロセスがある可能性があるため、拡張することはできません。つまり、uClinux のプロセスは、従来の Linux プロセスのように、実行時に使用可能なメモリのサイズを増やすことができません。
私には、これはすべてのデータがスタックに存在する必要があるように聞こえます。そのヒープ割り当ては不可能です。つまり、malloc() や "new" は問題外です...それは正確ですか? おそらく、「静的ヒープ」(つまり、「動的」割り当てを要求できるスタックベースの領域)を管理できる手法/ライブラリがありますか?
それとも私はそれを考えすぎていますか?それとも単純化しすぎ?
c - 境界保護された配列の設定
配列を割り当てて、その前後のページがメモリ管理ユニットによって保護されるように設定したいので、配列の境界を超えて実行しようとすると自動的にキャッチされます。次に、制御された方法でエラーを処理するためにそれをキャッチします。
移植可能なソリューションがあるとは思えませんが、Windows で Microsoft C を、Linux で GCC をそれぞれ使用するプラットフォーム固有の最適な方法は何ですか?