0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 34
|
|
Совместное использование библиотек DLL 2мя и более процессами28.03.2016, 14:32. Показов 2257. Ответов 5
Метки нет Все метки)
(
Всем добрый день, вопрос чисто теоретический, может кто знает. Прошу прощения, если прикрепил не к той теме, мне она показалась наиболее подходящей.
Читаю книгу Таненбаума "ОС" и возник вопрос с тем как совместно отображаются библиотеки DLL в виртуальном адресном пространстве. В книге сказано, что если библиотека расположена по разным виртуальным адресам в разных процессах (рассмотрим 2 процесса, в 1ом библиотека располагается с адреса 36к, а во 2ом с адреса 12к), то переход в библиотеке, допустим к адресу 16к не будет возможно путем сложения 36 + 16 или 12 + 16. У меня возник вопрос почему так? Ведь у каждого процесса свое виртуальное адресное пространство, соответственно MMU просто перетранслирует виртуальный адрес в нужный физический адрес. Иными словами виртуальные адреса разных процессов тупо указывают на один и тот же физический адрес. Я прикрепил фотографию страницы из книги, где изображен рисунок и более подробно описана проблема.
0
|
28.03.2016, 14:32 | |
Ответы с готовыми решениями:
5
Совместное использование DLL приложением и плагином Совместное использование двумя приложениями глобальной переменной из одной DLL Использование библиотек *.DLL |
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|
28.03.2016, 15:03 | |
![]() Решение
Согласен, тут автора не так просто понять, но, думаю, что он имел в виду следующее:
В первой функции библиотеки есть jmp на адрес 16. Когда процесс1 загрузил библиотеку у себя по адресу 36к, то загрузчик разумно поменял переход в библиотеке на 36к + 16. И все ок, для процесса1 это работает. Но это не устроит процесс2, когда он загрузит ту же библиотеку по адресу 12к. Ему загрузчик должен сделать переход в коде библиотеки на 12к + 16 (а там уже 36к+16 нужные процесс1). Поэтому автор пишет про copy-on-write, что каждому процессу придется создать копию памяти библиотеки, где у каждого будут свои переходы в соответствии с адресом загрузки. Ну а дальше абзац про то, как это решается в реальности через PIC.
1
|
0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 34
|
|
28.03.2016, 16:14 [ТС] | |
Velesthau, спасибо большое, теперь понятно
![]() Добавлено через 59 минут Velesthau, а не подскажите еще такой вопрос. DLL или те же отображаемые файлы отображаются на пользовательскую часть виртуального пространства или на часть ядра?
0
|
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|
28.03.2016, 16:32 | |
![]() Решение
monnzz, если это обычный пользовательский процесс, то в user space.
0
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||
01.04.2016, 16:18 | ||
Добавлено через 7 минут monnzz, в коде программы используется много адресов, которые никак не поменяются при простом отображении. Добавлено через 1 минуту Другими словами, настроив релокейшены 1го экземпляра библиотеки в физической памяти на один адрес, его нельзя будет отображать на другой. Единственный выход - создать другую копию и перенастроить релокейшены.
1
|
01.04.2016, 16:18 | |
Помогаю со студенческими работами здесь
6
Совместное использование библиотек "java.awt" и "javafx.scene" в одном окне Использование динамически подключаемых библиотек (DLL) Подключение и использование внешних dll-библиотек
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
![]() |
||||
Квантовые алгоритмы и обработка строк в Q#
EggHead 07.06.2025
Квантовые вычисления перевернули наше представление о том, как работать с данными, а Q# стал одним из ключевых языков для разработки квантовых алгоритмов. В традиционых системах мы оперируем битами —. . .
|
NUnit и C#
UnmanagedCoder 07.06.2025
В . NET существует несколько фреймворков для тестирования: MSTest (встроенный в Visual Studio), xUnit. net (более новый фреймворк) и, собственно, NUnit. Каждый имеет свои преимущества, но NUnit. . .
|
с++ Что нового?
russiannick 06.06.2025
Продолжаю обзор dev-cpp5. 11. Посмотрев на проекты, предоставленные нам для обучения, становится видно, что они разные по содержащимся файлам
где:
. dev обязательно присутствует
. cpp/ . c один из них. . .
|
WebAssembly в Kubernetes
Mr. Docker 06.06.2025
WebAssembly изначально разрабатывался как бинарный формат инструкций для виртуальной машины, обеспечивающий высокую производительность в браузерах. Но потенциал технологии оказался гораздо шире - она. . .
|
Как создать первый микросервис на C# с ASP.NET Core, step by step
stackOverflow 06.06.2025
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за. . .
|
Рисование коллайдеров Box2D v2 на Three.js с помощью порта @box2d/core
8Observer8 06.06.2025
Используется порт Box2D v2 под названием @box2d/ core - пакет NPM. Загрузил документацию Box2D v2 на Netlify: https:/ / box2d-v2-docs. netlify. app/ Документацию Box2D v2 можно скачать с официального. . .
|
Как создать стек в Python
AI_Generated 05.06.2025
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач. . . .
|
Server-Sent Events (SSE) в Node.js
run.dev 05.06.2025
Потоковая передача данных с сервера прямо в браузер стала повседневной потребностью - от биржевых графиков и спортивных трансляций до чатов и умных дашбордов. Много лет разработчики полагались на. . .
|
Создаем RESTful API на Golang с Fiber
golander 04.06.2025
Я перепробовал десятки фреймворков для создания RESTful API за последние годы, и когда впервые столкнулся с Fiber, понял, что это совсем другой уровень. Нет, я не собираюсь рассказывать сказки о. . .
|
Как работать с куки в ASP.NET Core
UnmanagedCoder 04.06.2025
Когда я впервые начал работать с куки в ASP. NET Core, меня поразило, насколько отличается работа с ними от классического ASP. NET. В Core все стало более декомпозированным - больше нет удобного. . .
|