Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
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 просто перетранслирует виртуальный адрес в нужный физический адрес. Иными словами виртуальные адреса разных процессов тупо указывают на один и тот же физический адрес.

Я прикрепил фотографию страницы из книги, где изображен рисунок и более подробно описана проблема.
Миниатюры
Совместное использование библиотек DLL 2мя и более процессами  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.03.2016, 14:32
Ответы с готовыми решениями:

Совместное использование DLL приложением и плагином
в моём решении 3 проекта: 1) приложение 2) интерфейс для плагинов 3) плагин № 1 из приложения добавляю связь к интерфейсу из...

Совместное использование двумя приложениями глобальной переменной из одной DLL
Есть два приложения одновременно использующих одну dll. Вопрос как в dll объявить общую для двух приложений глобальную переменную? Поискал...

Использование библиотек *.DLL
Как лучше всего, подключиться к существующей DLL и использовать от туда функции?

5
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
28.03.2016, 15:03
Лучший ответ Сообщение было отмечено monnzz как решение

Решение

Согласен, тут автора не так просто понять, но, думаю, что он имел в виду следующее:
В первой функции библиотеки есть 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 как решение

Решение

monnzz, если это обычный пользовательский процесс, то в user space.
0
0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 34
29.03.2016, 18:53  [ТС]
Velesthau, спасибо за помощь!
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
01.04.2016, 16:18
Цитата Сообщение от monnzz Посмотреть сообщение
с тем как совместно отображаются библиотеки DLL в виртуальном адресном пространстве
Читай про релокейшены PE.

Добавлено через 7 минут
monnzz, в коде программы используется много адресов, которые никак не поменяются при простом отображении.

Добавлено через 1 минуту
Другими словами, настроив релокейшены 1го экземпляра библиотеки в физической памяти на один адрес, его нельзя будет отображать на другой. Единственный выход - создать другую копию и перенастроить релокейшены.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2016, 16:18
Помогаю со студенческими работами здесь

Использование библиотек DLL
Для всех вариантов: - Ввести два целых числа a и b. - Произвести вычисления в подпрограммах. Оформить подпрограммы в библиотеке DLL. ...

Совместное использование библиотек "java.awt" и "javafx.scene" в одном окне
Здравствуйте, уважаемые знатоки. Допустим я создал окно и нарисовал в нём прямоугольник (с помощью библиотеки...

Использование динамически подключаемых библиотек (DLL)
library mylibrary; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND...

Подключение и использование внешних dll-библиотек
написал метод, который получает данные с базы данных, его проверил, работает: using System; using System.Collections.Generic; using...

Использование библиотек DLL. Исправление ошибок
Программа должна производить подсчёты в подпрограммах(Оформить подпрограммы в библиотеке DLL.). Ввод данных и вывод результатов на экран...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Квантовые алгоритмы и обработка строк в 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 все стало более декомпозированным - больше нет удобного. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »