OberonCore
https://forum.oberoncore.ru/

дублирования модуля в системном списке после перезагрузки
https://forum.oberoncore.ru/viewtopic.php?f=2&t=5717
Страница 1 из 1

Автор:  Info21 [ Пятница, 27 Май, 2016 14:30 ]
Заголовок сообщения:  дублирования модуля в системном списке после перезагрузки

Пытаюсь напечатать список модулей по Meta ConnectToMods или Kernel.modList.
Свой модулёк почему-то появляется там многократно -- по количеству перезагрузок.

Если кто-то может быстро объяснить -- буду благодарен.

Автор:  Пётр Кушнир [ Пятница, 27 Май, 2016 16:46 ]
Заголовок сообщения:  Re: дублирования модуля в системном списке после перезагрузк

Какая-то часть модуля, кажется, отвечающая за типы, остаётся в памяти после выгрузки, на случай если где-то остались ссылки на объекты из выгруженного модуля, уже обсуждали на форуме кажется.

Автор:  Илья Ермаков [ Пятница, 27 Май, 2016 19:38 ]
Заголовок сообщения:  Re: дублирования модуля в системном списке после перезагрузк

Да, именно так. У выгруженных там refcnt < 0 (-1).

Автор:  Info21 [ Пятница, 27 Май, 2016 20:28 ]
Заголовок сообщения:  Re: дублирования модуля в системном списке после перезагрузк

Для эксперименту прижал Кртл-Ф9 и дождался до тысячи.

По-моему, это какая-то хрень. Никаких объектов на куче мой модулёк не создаёт.

А предположим, для целей какой-нибудь числовой молотилки модуль кил на 10 генерится автоматически, компилируется и перезагружается, раз в минуту, сто тысяч раз.

И?

Понятно, что мы тут народ не слабонервный и в залезть в Кернел не замедлим.

Но интересует принципиальная сторона.

Автор:  Илья Ермаков [ Суббота, 28 Май, 2016 12:05 ]
Заголовок сообщения:  Re: дублирования модуля в системном списке после перезагрузк

Не, обьектов на куче-то Вы не создаёте, а принцип действия выгрузки единый всё равно: оставить секцию с дескрипторами типов в памяти.

Так что, если идёт интенсивная перезагрузка (не просто hot-update, а именно генерационное программирование в рантайме, неограниченнократное), то нужно переделывать эту логику.

В принципиальном плане... Разрешить полную выгрузку модуля, где нет POINTER TO-типов - безболезненная вещь.
Самое общее решение, видимо, - запуск GC перед выгрузкой (а так и происходит, кажется) - и GC должен подтвердить факт отсутствия объектов типов модуля. Или принудительно обнулить POINTER-ы на такие типы.

Автор:  Илья Ермаков [ Суббота, 28 Май, 2016 12:14 ]
Заголовок сообщения:  Re: дублирования модуля в системном списке после перезагрузк

(Кстати, внезапное осознание, что при динамическом связывании загруженного модуля в маш. коде, видимо, настраиваются также все конструкции IS, WITH, приведение типов - в маш. код подставляются адреса дескрипторов, с которыми сравнивать.)

Автор:  Info21 [ Понедельник, 29 Май, 2017 18:17 ]
Заголовок сообщения:  Re: дублирования модуля в системном списке после перезагрузк

Кстати, где настраиваются эти IS -- разве не в модулях, которые импортируют выгружаемый?

Автор:  Илья Ермаков [ Понедельник, 29 Май, 2017 18:25 ]
Заголовок сообщения:  Re: дублирования модуля в системном списке после перезагрузк

Ну да. в тех модулях, которые импортируют тип выгружаемого модуля и с ним сравнивают.

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