OberonCore
https://forum.oberoncore.ru/

Сборщик мусора
https://forum.oberoncore.ru/viewtopic.php?f=158&t=6957
Страница 1 из 1

Автор:  JackKatch [ Вторник, 15 Август, 2023 18:31 ]
Заголовок сообщения:  Сборщик мусора

Неоднократно наступив на "грабли", решил задать вопрос. В книге "Проект Оберон" написано, что исходной точкой для сборки мусора являются корни динамических структур данных, т.е. глобальные переменные указатели. Но описатели типа размещаются тоже в куче и тоже имеют поле пометки для сборщика мусора. Следовательно необходимо, кроме списка глобальных указателей, выполнить обход и списка описателей типа. Я правильно понимаю? В книге нет акцента на том, что описатели типа тоже "корни структур". Иначе добраться до описателя типа невозможно, если для некоторого указателя, на некоторый тип память ещё не выделялась, а сборщик уже работает. Подскажите пожалуйста, кто в курсе дела.

Автор:  arisu [ Среда, 16 Август, 2023 06:51 ]
Заголовок сообщения:  Re: Сборщик мусора

эм… если я правильно понял вопрос — нет, не в куче. это часть статических данных модуля, зачем их в кучу класть, если они всегда одни и те же? каждая запись перед полями просто имеет указатель на это описание — type tag, никто ж не копирует всё целиком при создании.

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

Автор:  JackKatch [ Среда, 16 Август, 2023 08:57 ]
Заголовок сообщения:  Re: Сборщик мусора

Цитата из книги "Проект Оберон". "Подчеркнём, что память для дескрипторов типа должна выделятся в куче. Хотя они - константы, они не могут размещаться среди констант модуля в области блоков, потому что элементы кучи могут ссылаться на дескриптор типа даже после того, как определяющий этот тип модуль был выгружен.". Стр. 257

Автор:  arisu [ Среда, 16 Август, 2023 10:57 ]
Заголовок сообщения:  Re: Сборщик мусора

поэтому на практике у нас есть два варианта. точнее, три, на самом деле, но третий нам сейчас неинтересен.

вариант 1: просто никогда не освобождать память, занятую модулем при его выгрузке — достаточно скрывать его из списка активных. так делает BBCB, например.

вариант 2: при загрузке модуля копировать десктипторы в отдельный блок памяти — и… никогда его не освобождать, потому что цитата поясняет, почему.

итого, в любом случае ключевая техника тут — «никогда не освобождать» (как оно и делается в большинстве оберонов). поэтому и сканировать тайпдески не надо.

p.s.: третий вариант — полный скан при выгрузке модуля, который реализовали, кажется, в A2, и я в LC. но это совершенно отдельный сканер, который вызывается только при ручной выгрузке модуля, и заменяет стратегию «никогда не освобождать» на «освобождать только если безопасно». основную идею это не меняет: описания типов считаются персистентными и живут в специальной памяти, которую гц никогда не освобождает.

Автор:  JackKatch [ Среда, 16 Август, 2023 13:34 ]
Заголовок сообщения:  Re: Сборщик мусора

Уважаемый arisu. Вы пишете, что описатель не в куче, хотя в книге чётко указано, что он именно там. У описателя есть поле пометки для сборщика мусора, что подразумевает работу с ним. Если описатели не "сканировать", на этапе пометки/разметки (не знаю как правильно сказать), то на втором этапе, освобождении неиспользуемых блоков все описатели будут утилизированы. Что недопустимо. Из ваших комментариев я делаю вывод, что вы не в теме. Я благодарен вам за желание помочь, но пожалуйста не пишите о том, в чём не разбираетесь. Очень вас прошу. Вы можете меня запутать. Тема сложная, я запутаюсь и без посторонней помощи. Надеюсь на ваше понимание.

Автор:  arisu [ Среда, 16 Август, 2023 17:33 ]
Заголовок сообщения:  Re: Сборщик мусора

да, я не помню точно, как это сделано в оригинальном обероне, и говорил на основе BBCB — который корнями уходит в Oberon System 3, и ядро которого я не просто читал, но и активно модифицировал. но раз вам неинтересно, как это работает в реальной системе на практике — то ваше дело. я вас больше не потревожу.

Автор:  Sergej Durmanov [ Суббота, 19 Август, 2023 19:11 ]
Заголовок сообщения:  Re: Сборщик мусора

лучше задать эти вопросы в Oberon mail list
https://lists.inf.ethz.ch/mailman/listinfo/oberon

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/