Разделяемая память на Redox выделяется и без непрерывного куска физической памяти
19.02.2026Демон разделяемой памяти Redox теперь выделяет сегмент даже тогда, когда в физической памяти нет одного непрерывного свободного куска нужного размера. Раньше такая попытка заканчивалась отказом.
Откуда берётся требование непрерывности
Классическое отображение памяти на файл работает так: физические страницы обязаны идти подряд, потому что адреса в таблице страниц следуют друг за другом. Нельзя взять страницу 100, потом 300, пропустив 200, — виртуальный адрес обязан расти на одну страницу за шаг.
Пока требование выполнялось буквально, сегмент выделялся только при наличии подряд идущих свободных страниц нужного размера. Как только память фрагментирована, попытка выделить большой сегмент заканчивалась отказом — при том что свободной памяти было достаточно.
Что изменено
Демон разделяемой памяти больше не требует непрерывности. Вместо этого он выдаёт сегмент, собранный из нескольких разрозненных областей, а сама разделяемая память — виртуальная: приложение видит единый адрес, а за ним стоят страницы, разбросанные по физической памяти.
То же сделано в схеме памяти: страницы одной области выделяются отдельно от их виртуального размещения.
Почему это важно
Разделяемая память — основа межпроцессного взаимодействия на Redox. На ней держатся реализация futex и передача файловых дескрипторов между процессами. То есть отказ выделить сегмент означал отказ работать.
На практике фрагментация нарастает по мере работы: память непрерывно выделяется и освобождается, и крупные непрерывные куски со временем исчезают. Программа, работающая сутки, могла получить отказ там, где при запуске всё было в порядке. Классический дефект, который проявляется только под нагрузкой и только через много часов.
Для кода на Rust это особенно заметно в сценариях с пулами процессов и общей памятью между ними: чем дольше работает система, тем выше шанс столкнуться.
Оригинал
Коммит ipcd: Allow non contiguous shm allocation от 19 февраля 2026 года в репозитории redox-os/base; рядом — ipcd: use first segment size for limits of mmap того же дня. Сводка «This Month in Redox — February 2026», раздел «System Improvements»
Упоминаний: 1 · Просмотров: 4