OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 17 Июнь, 2024 09:58

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Сборщик мусора
СообщениеДобавлено: Вторник, 15 Август, 2023 18:31 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сборщик мусора
СообщениеДобавлено: Среда, 16 Август, 2023 06:51 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1175
эм… если я правильно понял вопрос — нет, не в куче. это часть статических данных модуля, зачем их в кучу класть, если они всегда одни и те же? каждая запись перед полями просто имеет указатель на это описание — type tag, никто ж не копирует всё целиком при создании.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сборщик мусора
СообщениеДобавлено: Среда, 16 Август, 2023 08:57 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сборщик мусора
СообщениеДобавлено: Среда, 16 Август, 2023 10:57 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1175
поэтому на практике у нас есть два варианта. точнее, три, на самом деле, но третий нам сейчас неинтересен.

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сборщик мусора
СообщениеДобавлено: Среда, 16 Август, 2023 13:34 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сборщик мусора
СообщениеДобавлено: Среда, 16 Август, 2023 17:33 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1175
да, я не помню точно, как это сделано в оригинальном обероне, и говорил на основе BBCB — который корнями уходит в Oberon System 3, и ядро которого я не просто читал, но и активно модифицировал. но раз вам неинтересно, как это работает в реальной системе на практике — то ваше дело. я вас больше не потревожу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сборщик мусора
СообщениеДобавлено: Суббота, 19 Август, 2023 19:11 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 295
Откуда: Russia
лучше задать эти вопросы в Oberon mail list
https://lists.inf.ethz.ch/mailman/listinfo/oberon


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB