- ファイルバックアップマッピングの主な違いは何ですか&匿名 マッピング。
- プロセス間でIPCが必要な場合、File-backedマッピングまたはAnonymous
マッピングのどちらを選択できますか。 - これらを使用する利点、欠点は何ですか?
答えて
のmmap()システムコールは、ファイル・バック・マッピングまたは匿名マッピングのいずれかのために行くことができます。
のvoid *のMMAP(ボイド* addrに、size_tのlengthint "PROT"、int型」のフラグ、int型FD、 オフセットoff_t型)
ファイル担保マッピング - Linuxでは、Aが存在します0バイトの無限の源であるは/ dev /ゼロを提出。あなたはこのファイルを開くと、あなたはメモリになりたい場合はのmmap()適切なフラグとコール、すなわち、MAP_SHARED
にその記述子を渡します他のプロセスまたは012と共有共有したくない場合はを入力してください。 mmapのマンページ()引用
EX-
.
.
if ((fd = open("/dev/zero", O_RDWR)) < 0)
printf("open error");
if ((area = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0)) == MAP_FAILED)
{
printf("Error in memory mapping");
exit(1);
}
close(fd); //close the file because memory is mapped
//create child process
.
.
: - (匿名マッピングとは反対に、 以下MAP_ANONYMOUSを参照してください)ファイルマッピングの内容
を、ファイル 記述子fdによって参照されるファイル(または他のオブジェクト)のオフセットオフセットで を開始する長さバイトを使用して初期化されます。 offsetは、sysconf(_SC_PAGE_SIZE)によって返されるページサイズの倍数でなければなりません。
ここでは、ゼロ(0)で初期化されています。
使用しての/ dev /私たちは「のようにゼロの利点W.リチャードスティーヴンス、スティーブンA. Rago II版によるUNIX環境でのブック高度なプログラミングからテキストを引用示された は、mmapを呼び出して のマップされた領域を作成する前に、実際のファイルが存在する必要はありません。/dev/zeroをマッピングすると、指定されたサイズのマップされた領域 が自動的に作成されます。この方法の欠点は、関連するプロセス間でのみ動作することです。 しかし、関連するプロセスでは、 スレッドを使用する方が簡単で効率的です(章11 と12)。かかわらず
mmap()
への呼び出しが成功した後、共有データへ
へのアクセスを同期するために使用される技術、我々はまだ 必要があるため、私たちはマップされた領域に書き込みを見ることができるようになり、子プロセスを作成することに注意してください(我々はMAP_SHARED
フラグを指定しました)。
匿名マッピング - 上で行った同様のことは、匿名mapping.For匿名マッピングを使用して行うことができ、我々はmmapのにMAP_ANON
フラグを指定してファイル記述子を指定する-1。 結果の領域は匿名です(ファイル記述子によるパス名に関連付けられていないため)、子孫プロセスと共有できるメモリ領域を作成します。 利点は、メモリのマッピングにファイルを必要としないので、ファイルのオープンおよびクローズのオーバーヘッドも回避されます。
if ((area = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
printf("Error in anonymous memory mapping");
したがって、これらのファイルバックアップマッピングと匿名マッピングは、必ず関連プロセスでのみ機能します。
無関係なプロセスの間にこれが必要な場合は、shm_open()
を使用して名前付き共有メモリを作成し、返されたファイル記述子をmmap()
に渡す必要があります。
- 1. mmapビッグエンディアンとリトルエンディアンの比較
- 2. React performance:bindと匿名関数の比較
- 3. Grailsのコントローラ名とURLマッピング
- 4. Linuxコアダンプとヒープダンプの比較
- 5. Perl:配列参照と匿名配列の比較
- 6. イベントリスナーの匿名関数とイベントリスナーで機能する匿名関数との比較
- 7. 異なるデータフレームの異なるシリーズの比較/マッピング
- 8. マッピング2ディレクトリlinux-server
- 9. Azureドメイン名のマッピング
- 10. ワイルドカードとファイル名の比較
- 11. DiskDriveとストレージコントローラのマッピング
- 12. Hibernateのマッピングとクエリ
- 13. タイムスロットとタイムスタンプのマッピング
- 14. AspNetUsersとIdentityUserのマッピング
- 15. Doctrineのエンティティとマッピング
- 16. アノテーションのマッピングとポストマッピング
- 17. LinuxカーネルのコンテキストでDMAマッピングとDMAエンジンとは何ですか?
- 18. Hadoopは、linuxシェルのユーザー名とグループのマッピングから、ユーザー名とグループのマッピングをどこから取得しますか?
- 19. MongoDBとMongoosasticとのElasticSearchマッピング
- 20. glassfishとspringとのURLマッピング
- 21. MongoDB:ユーザーのコレクション名のマッピング
- 22. Python - ファイル名とフォルダ名の比較
- 23. マッピング内でのマッピング
- 24. JPA 2.0 IdClassフィールド名のマッピング
- 25. Sonarqubeのルールとメトリックのマッピング
- 26. H2データベースのマッピング - JavaのOffsetDateTimeとh2タイプのマッピング
- 27. Vimコマンドとマッピング
- 28. TFSマッピングとSubversion
- 29. Knockout.jsマッピングとko.observableArray
- 30. Vaadin URLマッピングの問題:サブパスURLマッピングと自動URLマッピングが機能しない
あなたは「これらのファイルバックアップマッピングと匿名マッピングは、必ず関連プロセスでのみ機能する」と述べています。なぜファイルマップされたmmapが必要なのでしょうか?匿名マッピングと比較してどのように役立ちますか? – user1762571
ファイルバッキングマッピングの場合、プロセスの仮想アドレス空間はファイルにマップされます。したがって、そのメモリにアクセスすると、その領域にマップされているファイルが読み込まれます。一方、匿名マッピングは、どのファイルでもサポートされていないプロセスの仮想メモリの領域をマッピングします。内容はゼロに初期化されます。この点で、匿名マッピングはmallocに似ており、特定の割り当てのためにいくつかのmalloc(3)実装で使用されます。 –
/dev/zeroを使って 'mmap()'すると、匿名マッピングと同じことになります。 –