История изменений
Исправление 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.