32ビットLinuxシステムでは、プロセスは最大4 GBの仮想アドレス空間にアクセスできます。しかし、プロセスは、それを保留する度合いを変えて保守的であるように見えます。したがって、mallocを使用するプログラムはsyscall sbrk/brkによってデータセグメントを拡張することがあります。これらのページでさえ、まだ物理メモリで要求されていません。私が完全に理解していないのは、最初にsbrkする必要がある理由です。なぜなら、私たちがそれらのブロックに触れる/主張するまでは、本質的に自由な操作ですからです。仮想メモリとsbrk
5
A
答えて
5
ファイルをメモリマップするとどうなりますか(Linuxでは非常に一般的なことです)?それはアドレス空間のどこかに行かなければならないので、「使用済み」と「未使用」の部分を定義する手段が必要です。
共有メモリ(実際には実際のファイルのないファイルをマッピングするだけです)は同じです。それはどこかに行かなければならず、OSは何かを上書きせずにそれを置くことができると確信しなければならない。
また、明らかな(そしてあまり明らかでない)効率の理由のために、参照の局所性を維持することが好ましい。アドレス空間のどの場所にでも書き込んだり読み込んだりすることが許されていれば、それだけで何人かの人が賭けることができます。
4
頭に浮かぶの理由のカップルがありません:
- あなたはもはや
- マップされていないメモリにアクセスする際Translation lookaside buffer(TLB)は、おそらくそれを設定するために多くの時間を必要とする、より大きなだろうセグメンテーションフォールトを取得したいですあなたは新しい共有ライブラリまたはmmapの中にロードする場合
- までとにかくそのメモリの一部のマッピングを解除する必要があると思います()実際には、実際のファイルを使用せずにファイルをマッピングしている何か
関連する問題
- 1. 仮想メモリとリロケータブルコード
- 2. ポインタと仮想メモリ
- 3. Pytablesと仮想メモリ
- 4. iOSのメモリスワッピングと仮想メモリ
- 5. 仮想メモリ、ページサイズ、最大仮想アドレス
- 6. ノンオペレーションプログラム用のJava仮想メモリ?
- 7. Excel仮想メモリの問題
- 8. Redisの仮想メモリは2.6
- 9. のjava - 仮想マシンのメモリ
- 10. 仮想メモリと各項目のサイズ
- 11. プロセスのアドレス空間と仮想メモリ
- 12. 物理メモリと仮想メモリのデータ割り当ての動作
- 13. 仮想メモリ内の2つのプロセス
- 14. スワップパーティションを持たない仮想メモリ
- 15. アクションスクリプト仮想マシン1 - メモリの検査
- 16. Node.js高い仮想メモリの使用
- 17. ソフト仮想メモリ制限(ulimit -v)
- 18. 純粋仮想と仮想の違い
- 19. iPhoneとiPadのアプリリアルと仮想メモリの使用
- 20. カーネル仮想メモリを物理メモリにマップする方法
- 21. メモリ消費を制限します。物理Vs仮想メモリ
- 22. 仮想メモリの処理 - スタックとヒープの間のスペース
- 23. 「ジョブプール」の用語は、仮想メモリ空間と同等ですか?
- 24. 仮想ボリュームとデータストア
- 25. ASP.NETと仮想ディレクトリ
- 26. アップロードファイルと仮想ファイルシステムデータベース
- 27. brctlと仮想インターフェイス
- 28. Linuxと仮想マシン
- 29. 仮想アドレスとページング
- 30. 仮想関数オーバーライド仮想関数
「共有メモリ( ) 同じです。 OSはどこかに移動しなければならず、OSは何かを上書きせずに置くことができなければなりません。 "mallocがmmapを(匿名でプライベートで)私が信じているかもしれないと呼んでいるようにsbrkを呼び出すのではなく、プログラムの初期化時にmallocがbrk(4GB)を実行していればsysckなどのsyscallを削除しますが、追加のメモリマップファイルをマップしたり、共有メモリを別のフラグで作成することはできません。 –
"わかりやすい(そしてあまり明らかでない)効率の理由から、参照の局所性を維持することも好ましい"しかし、1GBを4GBのブロックに、3GBのメモリを4GBのブロックにすると、おそらく新しい割り当てがセグフォルトインされた後で物理メモリに閉じ込められているか(ちょうどゼロになる)? –
それはそうかもしれません。 – Damon