Как System V IPC справляется с фрагментацией при выделении большого блока памяти с помощью «shmget»? - PullRequest
2 голосов
/ 01 февраля 2011

Я выделяю большой блок разделяемой памяти, используя shmget во встроенной системе:

shmid = shmget(key, 16777216, IPC_CREAT | 0666)

Система работает под управлением uClinux (2.6.28 Linux Kernel) с использованием Slab allocator.У меня нет MMU на процессоре.

Время от времени при выполнении команды вышеупомянутого shmget я получаю ошибку выделения страницы.Это также происходит, когда у меня заканчивается свободная память, но иногда это происходит, когда у меня достаточно RAA.

Я подозреваю, что виновником является фрагментация, но я не совсем уверен - поэтому мои вопросы таковы: может ли эта ошибка быть вызвана тем, что подсистеме IPC требуется непрерывный физический сегмент 16 Мб для этой процедуры, и он не можетво фрагментарную память, выбрасывая ошибку выделения, или проблема кроется в другом месте?

1 Ответ

5 голосов
/ 01 февраля 2011

В системе !MMU у вас нет виртуальной памяти, поэтому ваше предположение верно - для этого сопоставления требуется непрерывный блок физической памяти.использовать несколько меньших блоков совместно используемой памяти и / или сначала выделить разделяемую память как можно раньше после загрузки.

...