Здравствуйте, netch80, Вы писали:
N>Здравствуйте, alexraynepe196, Вы писали:
A>>3) в текущей реализации загружается библиотека, а для каждого экземпляра хранится копия области данных используемая библиотекой. Исполняемый код остается общим. Для выполнения кода над конкретным экземпляром — область данных библиотеки перезаписывается из контейнера экземпляра.
N>Библиотека чужая? Перекомпилировать с отвязкой от глобальных данных — никак?
Библиотека то своя, но постановказадачи — симуляция продукта, и он должен быть максмально приближенным к проду. Переделывать архитектуру под моделирование никто не станет.
N>А то постановка вопроса выглядит совершенно дикой, потому что привычно, что есть объект "контекст" (как бы он ни назывался), из которого ссылки на все данные.
A>>Единственное решение обойти это место, я пока нашел — скопировать файл библиотеки в несколько независимых, и загружать эти библиотеки как независимые, получится одна библиотека/одоно устройство.
N>Они не дерутся за одноимённые экспортируемые имена?
Дерутся. НО обеспечить разные имена для пары методов АПИ моделера можно, этим и пользуются — моделируемый код собирается в обертке, которая предоставляет АПИ для моделируемого класса.
Пока я моделирую для разных классов по одному устройству — вопросов нет. Когда надо смоделить сотню устройств одного класса — вот о чем задача.
A>>MMU современных процессоров с другой стороны просто предназначено для решения подобных задач — достаточно создать несколько сегментов данных — по одному на каждое устройство, и переключать эти сегменты при исполнении одного общего сегмента кода. Но как это сделать реально?
N>Звать mmap() на такое будет явно ещё дороже.
N>Зачем такие извращения вообще были нужны?
примерно затем же для чего и системы виртуализации, тока безопасность ненужна.