Shared memory linux это

Linux — Shared Memory (SHM) (/dev/shm)

The shared memory system can also be used to set permissions on memory.

There are two different types of shared memory implementations:

Management

By default, your operating system includes an entry in /etc/fstab to mount /dev/shm .

File structure

shm / shmfs is also known as tmpfs.

tmpfs means temporary file storage facility. It is intended to appear as a mounted file system, but one which uses virtual memory instead of a persistent storage device.

How to check its size ?

To check the size of the shared memory file system, enter the following command:

Limit

To determine current shared memory limits you can use the ipcs command.

------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 1073741824 max total shared memory (kbytes) = 17179869184 min seg size (bytes) = 1 

Parameters

shmmax

shmmax define the Maximum size (in bytes) for a shared memory segment.

We gan get the parameters limit by using the proc Filesystem such as:

shmall total shared memory avail: 2097152

segments

------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x45110010 1774485506 oracle 660 1048576 2 0x00000000 3112963 oracle 660 67108864 51 0x00000000 3145732 oracle 660 1543503872 51 0x910ac490 3178501 oracle 660 2097152 51 0x6611c0d9 1774518278 oracle 660 126921994088 1 locked 0x6711c0d9 1774551047 oracle 660 33554432 1 0x1111c0df 1775206408 oracle 660 273722634328 2 locked 0x1211c0df 1775239177 oracle 660 33554432 2 

Process

------ Shared Memory Creator/Last-op -------- shmid owner cpid lpid 1774485506 oracle 30581 11420 3112963 oracle 24249 11377 3145732 oracle 24249 11377 3178501 oracle 24249 11377 1774518278 oracle 30572 11420 1774551047 oracle 30572 11420 

lpid is the process ID of the last job to attach or detach from the shared memory segment or change the semaphore value.

Читайте также:  Очистка кэша 1с linux сервер

top

 The amount of shared memory used by a task. It simply reflects mem- ory that could be potentially shared with other processes. 

Источник

Многозадачность в Linux. Язык C. Статья 12. Разделяемая память (shared memory)

Это мой канал Old Programmer программировании и программистах. Тематическое оглавление канала здесь . А тут собраны все ссылки по C/C++. Здесь перечень ссылок на ресурсы, посвященные многозадачности в Linux.

Что такое разделяемая память

Продолжаем рассматривать вопросы, cвязанные с многозадачностью, процессами и их взаимодействием. Сегодня вопрос о разделяемой памяти (shared memory) . Как и ранее, мы программируем на C и в операционной системе Linux.

Если кратко, то суть этой технологии такова:

  • Разделяемая память это объект ядра.
  • Объект может быть создан и удален.
  • Объект создается с некоторым именем, которое может быть использовано другими процессами для доступа к нему.
  • Объект можно открыть записать туда и прочесть оттуда. При этом обращение осуществляется по адресу этой области данных.

Для того, чтобы удобно было разбираться с технологией, я разбил всю задачу на четыре подзадачи и написал, соответственно 4 программы ( mem4000.c , mem4010.c , mem4020.c , mem4030.c ).

Программа mem4000.c

Программа создает объект, устанавливает его размер (размер памяти), закрывает объект и заканчивает работу. Объект при этом не уничтожается! Его можно удалить (см. ниже) или он будет удален после перезагрузки системы.

При создании объекта мы используем функцию shm_open :

  • 1 — й параметр — имя объекта.
  • 2 — й параметр — битовая маска. Она подобрана так, что если объекта нет то он создается для чтения и записи. Если объект есть, то возвращается -1 .
  • 3 — й параметр — режим открытия. Он определяет, кто будет иметь право доступа к объекту. Значение это 0777 в числовом выражении и предполагает доступ для всех.
Читайте также:  Make desktop file linux

Функция возвращает дескриптор созданного объекта.

Далее используется функция ftruncate , которая устанавливает размер памяти. Первым параметром идет дескриптор объекта, второй параметр — устанавливаемый размер памяти.

gcc mem4000.c -o mem4000 -lrt

Программа mem4010.c очень короткая. По имени объекта разделяемая память функция shm_unlink удаляет этот объект.

gcc mem4010.c -o mem4010 -lrt

В программе mem4020.c объект открывается, получается адрес памяти и пишется туда строка. Обращаю внимание, что у функции shm_open изменилось значение второго параметра. Это и понятно, предполагается, что объект уже создан и его нужно просто открыть, чтобы его использовать.

Функция mmap позволяет получить адрес этой памяти. Она имеет следующие параметры:

  • 1-й параметр — обычно всегда 0, что означает, что система сама выбирает адрес памяти
  • 2-й параметр — длина области памяти, желаемый режим защиты памяти.
  • 3-й параметр. Описывает желаемый режим защиты памяти. Мы предполагаем чтение и запись.
  • 4-й параметр — задает тип объекта, принадлежат ли отраженные данные только этому процессу или их могут читать другие. Мы предполагаем, что данные буду читать и другие.
  • 5-й параметр — дескриптор объекта.
  • 6-й параметр — смещение в разделяемой памяти, т.е. откуда будем читать или куда будем писать.

Если функция выполнилась успешно, то она возвращает адрес куда можно писать или откуда можно читать. В данном случае мы пишем в память.

gcc mem4020.c -o mem4020 -lrt

Программа mem4030.c . Она очень похожа на программу mem4020.c , но читает из разделяемой памяти и сразу выводит на консоль.

gcc mem4030.c -o mem4030 -lrt

Вот и все о разделяемой памяти. Очень удобная вещь в программировании, если вы собираетесь обмениваться данными между разными процессами. В следующих статьях я еще вернусь к разделяемой памяти не много в другом аспекте.

Читайте также:  Usb modem for linux

Не забывайте подписываться на мой канал Old Programmer .

Я вижу, что вы забыли поставить ‘ЛАЙК’, не так ли?

Источник

Оцените статью
Adblock
detector