Можно ли сделать переключение контекста библиотеки в пределах процесса?
От: alexraynepe196  
Дата: 14.11.20 10:47
Оценка:
1) есть некая библиотека моделирующая некое устройство — длл, или sharedobject (собирается как native-код вызываемый из java)
2) в среде эмулятора (на жабе) надо загрузить и смоделировать множество экземпляров устройств — больше 100 или 1000 скажем.
3) в текущей реализации загружается библиотека, а для каждого экземпляра хранится копия области данных используемая библиотекой. Исполняемый код остается общим. Для выполнения кода над конкретным экземпляром — область данных библиотеки перезаписывается из контейнера экземпляра.

Сейчас переключение экземпляра очень затратно — скопировать 30-60кБ данных надо, чтобы выполнить кода на сотню тактов. более 95% времени занимает это копирование.

Единственное решение обойти это место, я пока нашел — скопировать файл библиотеки в несколько независимых, и загружать эти библиотеки как независимые, получится одна библиотека/одоно устройство.

MMU современных процессоров с другой стороны просто предназначено для решения подобных задач — достаточно создать несколько сегментов данных — по одному на каждое устройство, и переключать эти сегменты при исполнении одного общего сегмента кода. Но как это сделать реально?
Вродебы это операционная система проделывает при использовании разделяемой библиотеки для разных процессов. НО как это сделать в рамках одного процесса? Это вообще реально в существующей среде, на линухе?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.