π Shared Memory
Shared Memory β ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ IPC (ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΡΠ°ΡΡΠΊΡ RAM Π½Π°ΠΏΡΡΠΌΡΡ, Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
π§ ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Π‘Π΅Π³ΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ (ΡΠ΅ΡΠ΅Π· mmap ΠΈΠ»ΠΈ shmget) Π² Π°Π΄ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π΄ΡΡΠ³ΠΈΡ . ΠΡΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΠΈΡΠ°ΡΡ Π² ΡΡΠΎΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ, ΠΊΠ°ΠΊ Π² ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ².
Π’ΠΈΠΏΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
- POSIX:
shm_open
,mmap
,ftruncate
,close
,unlink
- System V:
shmget
,shmat
,shmdt
,shmctl
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:
- ΠΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: Π½ΡΠΆΠ½Π° Semaphore ΠΈΠ»ΠΈ Mutex
- Π Π°Π·ΠΌΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
/dev/shm
Π² Linux)
βοΈ ΠΠ΄Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ
ΠΠ±Π»Π°ΡΡΡ | ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ |
---|---|
Multithreading | Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ Π±ΡΡΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ |
High-Performance Computing | ΠΠ±ΠΌΠ΅Π½ Π² NUMA-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , MPI |
Database Engine | Shared Buffer Cache Π² PostgreSQL |
GPU / Accelerator | ΠΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ Ρ CPU Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ |
RTOS / Embedded | ΠΡΡΡΡΡΠΉ ΠΎΠ±ΠΌΠ΅Π½ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ |
π» ΠΡΠΈΠΌΠ΅Ρ (POSIX Shared Memory, C)
int fd = shm_open("/myshm", O_CREAT | O_RDWR, 0666);
ftruncate(fd, 4096);
char *ptr = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
strcpy(ptr, "hello world");
β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°
-
ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΠΌΠ΅Π½Π° (Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ)
-
ΠΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΡΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ
-
ΠΡΠΎΡΡΠΎΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ (ΠΌΠ°ΡΡΠΈΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ)
β ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ
-
ΠΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ β ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
-
ΠΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π³ΠΎΠ½ΠΊΠ°ΠΌ ΠΈ ΡΠ°ΡΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ
-
Π ΠΈΡΠΊ ΡΡΠ΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ Π½Π΅ Π²ΡΠ·Π²Π°ΡΡ
munmap
/shm_unlink
-
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°