Re: Можно ли сделать переключение контекста библиотеки в пределах процесса?
От: a7d3  
Дата: 14.11.20 11:27
Оценка:
Здравствуйте, alexraynepe196, Вы писали:

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

A>Вродебы это операционная система проделывает при использовании разделяемой библиотеки для разных процессов. НО как это сделать в рамках одного процесса? Это вообще реально в существующей среде, на линухе?

Нет, потому что MMU работает с контекстами виртуальных адресных пространств. Транслируя адреса из нескольких совершенно разных адресных пространств в одно пространство — реальные адреса физических страниц памяти.
Выполняется это посредством ассоциативного кэша в виде TLB (который как правило ещё и двух-уровневый).

Т.е. средства ОС не помогут в данном случае избежать необходимости ломать реализацию проблемной библиотеки — таки придётся её переделывать.
Чтобы библиотека в явной форме позволяла управлять контекстами — теми экземплярами объектной модели (областями данных), которые предоставляет для изменения клиентским кодом.
Фактически исполняемому коду библиотеки надо будет принимать некий токен/хэндл, являющийся индексом в таблице контекстов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.