LINUX.ORG.RU

История изменений

Исправление DRVTiny, (текущая версия) :

Так а в чём проблема шарить памяти больше, чем выделено?

Дано: размер исходно выделенной процессу shared-data-area равен, положим, 4-м страницам.

При размере страницы 4Кб (хотя он может быть и 4Мб, насколько я помню) - это 16Кб.

malloc с флагом «shared» выделяет процессу память из незанятой статическими переменными (которые, положим, занимают первые 2900 байт) области shared-data. Если количество памяти, запрошенное у malloc превышает размер области, добавляются страницы памяти оттуда, откуда они могут быть добавлены. Кстати, насколько я помню, одна страница не может быть заполнена данными двух разных процессов, поэтому в любом случае выделенная процессу память кратна размеру страницы - и никак иначе.

В чём проблема-то? Именно техническая проблема с точки зрения архитектуры процессора, а не проблема текущей реализации конкретно в Linux?

Профит по-моему вполне очевиден: не нужно ничего никуда изощрённо мэпить, используется самое обычное адресное простнаство процесса, на части которого не действует безальтернативный сейчас CoW.

Исходная версия DRVTiny, :

Так а в чём проблема шарить памяти больше, чем выделено?

Дано: размер исходно выделенной процессу shared-data-area равен, положим, 4-м страницам.

При размере страницы 4Кб (хотя он может быть и 4Мб, насколько я помню) - это 16Кб.

malloc с флагом «shared» выделяет процессу память из незанятой статическими переменными (которые, положим, занимают первые 2900 байт) области shared-data. Если количество памяти, запрошенное у malloc превышает размер области, добавляются страницы памяти оттуда, откуда они могут быть добавлены. Кстати, насколько я помню, одна страница быть заполнена данными двух разных процессов, поэтому в любом случае выделенная процессу память кратна размеру страницы - и никак иначе.

В чём проблема-то? Именно техническая проблема с точки зрения архитектуры процессора, а не проблема текущей реализации конкретно в Linux?

Профит по-моему вполне очевиден: не нужно ничего никуда изощрённо мэпить, используется самое обычное адресное простнаство процесса, на части которого не действует безальтернативный сейчас CoW.