情報処理において共有メモリ(きょうゆうメモリ)とは、複数のプログラムが同時並行的にアクセスするメモリである。

概要

編集
 
3つのプロセッサによる共有メモリシステムの図。

複数のプログラム間の通信手段として使う場合と、単に複製を用意する冗長さを防ぐ目的の場合などがある。共有メモリはプログラム間でデータをやりとりする効率的手段である。文脈によって、それらプログラムが単一のプロセッサ上で動作する場合と複数の異なるプロセッサ群上で動作する場合がある。単一のプログラムの内部でメモリを使って通信する場合もあり、例えばマルチスレッドが典型的だが、仮想空間をもともと共有している場合は「共有メモリ」とは呼ばない。

ハードウェアによる共有メモリ

編集
 

CPURAM

CPU2

CPU-CPUCPU10

使

HyperTransportCPU

NUMA

GPU内の共有メモリ

編集

GPGPUGPUGPUVRAM[1]CUDAOpenCLDirectComputeAPIGPUGPU

ソフトウェアによる共有メモリ

編集



 (IPC) 1

使XIP (Execute in Place) 使



CORBAIPCCPU使FIFO

IPCUNIXXWindowsCOM CoMarshalInterThreadInterfaceInStream()  IStream 使使OracleUnixOracleSGA


UNIXでのサポート

編集

POSIX API POSIX Shared Memory sys/mman.h  shm_open 使[2]POSIXPOSIX:XSI shmatshmctlshmdt [3][4]

shm_open mmap使[5]2mmapOS

Linux 2.6 RAM /dev/shm  /etc/default/tmpfs /dev/shm RedHat  Debian 

Androidでのサポート

編集

Android  Linux 使IPC Linuxashmem (anonymous shared memory) 使ashmem_pin_region() 使

Windowsでのサポート

編集

Microsoft Windowsでは、Win32 APICreateFileMapping()関数を使って共有メモリ(メモリマップトファイル)を作成することができる[6]。クライアント側プロセスはOpenFileMapping()関数を使って、ホスト側プロセスにて作成済みの共有メモリのハンドルを取得することができる。共有メモリを各プロセスのアドレス空間にマッピングするにはMapViewOfFile()関数を使う。

なおWindows APIには、CreateSharedMemory() [7][8]など “-SharedMemory” の名前を持つ関数があるが、これはセキュリティ関連のAPIであり、メモリ共有のためのAPIではない。これをメモリ共有のために使用すれば、リソースを大量に消費しシステムリソースを使い果たす可能性がある。

プログラミング言語ごとのサポート

編集

C++Boost C++ Boost.Interprocess [9]POCO C++ Libraries  Poco::SharedMemoryQt  QSharedMemory [10]

PHP  POSIX API[11]

.NET Framework4System.IO.MemoryMappedFiles.MemoryMappedFile[12].NET CoreXamarin (Mono) Windows

脚注

編集
  1. ^ CUDAプログラミングの基本 / パート II - カーネル | NVIDIA
  2. ^ Documentation of shm_open from the Single UNIX Specification
  3. ^ Robbins, Kay A.; Steven Robbins (2003). UNIX systems programming: communication, concurrency, and threads (2 ed.). Prentice Hall PTR. p. 512. ISBN 978-0-13-042411-2. https://books.google.co.jp/books?id=tdsZHyH9bQEC&redir_esc=y&hl=ja 2011年5月13日閲覧. "The POSIX interprocess communication (IPC) is part of the POSIX:XSI Extension and has its origin in UNIX System V interprocess communication." 
  4. ^ Shared memory facility from the Single UNIX Specification.
  5. ^ Stevens, Richard (1999). UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications. (2 ed.). Prentice Hall PTR. p. 311. ISBN 0-13-081081-9 
  6. ^ Creating Named Shared Memory - Windows applications | Microsoft Docs
  7. ^ CreateSharedMemory function (Windows), Internet Archive
  8. ^ LSA_CREATE_SHARED_MEMORY (ntsecpkg.h) - Win32 apps | Microsoft Learn
  9. ^ Chapter 16. Boost.Interprocess - 1.80.0
  10. ^ QSharedMemory Class Reference
  11. ^ PHP 共有メモリ関数
  12. ^ MemoryMappedFile Class (System.IO.MemoryMappedFiles) | Microsoft Docs

関連項目

編集

学習参考書

編集

外部リンク

編集