Что такое shmpages в терминах laymans?

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

Конвенции отличаются между Linux и OS X, таким образом, тот же двоичный файл не может работать как есть, по существу не имея блока зависимого от операционной системы кода, чтобы смочь взаимодействовать с ним. Многие из этих вещей скрыты в библиотеках, в которых затем необходимо связаться, и это означает потребности программы быть связываемым, и соединение также отличается между этими двумя системами.

И таким образом, это продолжается и на. Что на поверхности кажется, что выполнение того же самого очень отличается в фактических деталях.

7
07.01.2011, 20:28
1 ответ

Процессы непривилегированного режима могут использовать Межпроцессное взаимодействие (IPC) для общений друг с другом, самый быстрый метод достижения, это при помощи страниц общей памяти (shmpages).
Это происходит, например, если banshee играет музыку и vlc играет видео, оба процесса должны получить доступ pulseaudio производить некоторый звук.

Попытайтесь узнать больше о конфигурации общей памяти и использовании с некоторыми следующими командами:

Отобразите конфигурацию общей памяти:

sysctl kernel.shm{max,all,mni}

По умолчанию (Linux 2.6) это должно произвести:

kernel.shmmax = 33554432
kernel.shmall = 2097152
kernel.shmmni = 4096

shmmni максимальное количество позволенных сегментов общей памяти, shmmax позволенный размер сегмента общей памяти (32 МБ) и shmall максимальный общий размер всех сегментов (отображенный как страницы, переводит в 8 ГБ),

В настоящее время используемая общая память:

grep Shmem /proc/meminfo

Если включено распределением:

ls -l /dev/shm

ipcs большой инструмент должен узнать больше об использовании IPC:

ipcs -m 

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

ipcs -m -i <shmid>

шоу больше информации об указанном сегменте включая PID процесса, создающего (cpid) и последнего (lpid) использование его.

ipcrm может удалить сегменты общей памяти (но знать, что это, только удалены, если никакие другие процессы не присоединены к ним, см. nattach столбец в ipcs -m).

ipcrm -m <shmid>

Разряжение общей памяти могло быть программой в большой степени с помощью большого количества общей памяти, программа, которая не отсоединяет выделенные сегменты правильно, измененный sysctl значения...

Это не конкретный Linux и также относится (большинство) к системам UNIX (общая память сначала появилась в CB UNIX).

11
27.01.2020, 20:16
  • 1
    A придеритесь к мелочам: используйте эту команду для нахождения в настоящее время используемой общей памяти вместо этого: grep Shmem /proc/meminfo Это предотвращает UUC (Бесполезное Использование CAT...) –  Mei 04.02.2012, 04:20
  • 2
    , Ничего себе, большой подробный ответ, много небольших драгоценных камней здесь :D –  Gearoid Murphy 06.04.2012, 13:52
  • 3
    поэтому, что shmpages по сравнению с kernel.shm{max,all,mni} ? –  user278844 12.06.2017, 14:41

Теги

Похожие вопросы