匿名メモリマッピングと共有メモリは物理メモリにのみスペースを割り当てますか?

匿名メモリマッピングと共有メモリは物理メモリにのみスペースを割り当てますか?

Linuxでは

  • 匿名メモリマッピングに mmap() を使用する場合、または malloc() を使用する場合は、物理メモリでのみ「空間」を割り当てるのですか、それとも物理メモリやスワップ、またはそれらの組み合わせから「空間」を割り当てますか? (後者ではないかと思います)

  • System V 共有メモリーを使用する場合 (例: shmget())、物理メモリー、物理メモリー、スワップ、またはこれらの組み合わせでのみ共有メモリーセグメントを作成しますか? (共有メモリは高速IPCメカニズムと呼ばれているため、前者だと思います)

  • POSIX共有メモリを使用する場合、shm_open()などは物理メモリからのみ共有メモリオブジェクトを作成しますか、それとも物理メモリ、スワップ、またはそれらの組み合わせからのみ作成しますか? (共有メモリは高速IPCメカニズムと呼ばれているため、前者だと思います)

ありがとうございます。

ベストアンサー1

彼らが割り当てるならメモリとにかく彼らはそれをスワップ空間に保ちます。

mmapmallocおよびshmgetLinuxでは、呼び出しプロセスのアドレス空間にスペースを割り当てます。スペースはスワップスペースmmapにもshmget予約できます(MAP_NORESERVEまたは指定されていない場合)。SHM_NORESERVE彼らはサポートを割り当てません物理メモリ。shm_openまた、メモリを割り当てることもありません。既存のオブジェクトを開くか、長さゼロの新しいオブジェクトを作成するために使用されます。

アドレス空間のアドレスが逆参照されると、物理メモリページが割り当てられます。可能であれば、この割り当ては常に物理メモリで行われます。そうしないと、プロセスはそこから読み書きできません。ロックされていないメモリに割り当てて書き込んだ後できる交換されますが、後でそのようなことが起こります。

(「予約」はプロセスのために対応する記憶領域を予約することを意味し、「割り当て」は特定のリソースをプロセスに割り当てることを意味する。例えば仮想アドレス空間のアドレスまたはメモリのページです。 )

おすすめ記事