Разделяемая память — это механизм межпроцессного взаимодействия (IPC), который позволяет нескольким процессам получать доступ к общей области памяти.
ipcs -m # Просмотр существующих сегментов разделяемой памяти
Создание сегмента:
key_t key = ftok("/tmp", 'A');
int shmid = shmget(key, size, IPC_CREAT | 0666);
Работа с POSIX:
ls /dev/shm # Просмотр POSIX shared memory объектов
Пример использования:
void *addr = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
Характеристика | Описание |
---|---|
Скорость | Наибольшая среди всех IPC-механизмов |
Синхронизация | Требует дополнительных механизмов (семафоры, мьютексы) |
Жизненный цикл | Существует пока не удалена явно или пока работает система |
Безопасность | Контроль доступа через права (аналогично файлам) |
#include <sys/ipc.h>
#include <sys/shm.h>
int main() {
int segment_id = shmget(IPC_PRIVATE, size, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);
char *shared_memory = (char *)shmat(segment_id, NULL, 0);
sprintf(shared_memory, "Hello, shared memory!");
shmdt(shared_memory);
}
char *shared_memory = (char *)shmat(segment_id, NULL, 0);
printf("%s\n", shared_memory);
shmdt(shared_memory);
Просмотр:
ipcs -m # Показать все сегменты
Удаление:
ipcrm -m <shmid> # Удалить конкретный сегмент
sysctl -a | grep shm # Параметры shared memory
cat /proc/sys/kernel/shmmax # Максимальный размер сегмента
Резюмируем: разделяемая память — это высокопроизводительный механизм для обмена данными между процессами, который широко используется в СУБД, системах реального времени и высоконагруженных приложениях. Её эффективность обусловлена отсутствием необходимости копирования данных между процессами.