RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : менеджеры пакетов


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Slavik Gnatenko, 2:467/99
To : DDP
Subj : менеджеры пакетов

> тогда вопрос: а почему же пишут, что программы работают каждая в своём изолированном пространстве? то есть, по-идее, они в своём пространстве и должны искать нужные модули? а если их там нет, то загружать из своего каталога. можно же в конфиге в пути первым пунктом поставить точку (вы уже конечно написали, что ядро ищет сначала в памяти, получается, что параметры конфига игнорируются?).
Какая-то у тебя каша в голове. У процесса да, адресное пространство как бы индивидуальное. Под этим имеется в виду, что мапинг этого пространства на общесистемную виртуальную память он может настроить по своему усмотрению. В том числе и на те же страницы, которые уже замаплены в каких-то других процессах. В частности т.н. системная область адресов, в которой лежит ядро и его данные, во всех процессах замаплена одинаково. Модули грузятся тоже в общесистемную память, а потом мапятся на те процессы, которые их попросили. Изначально в адресном пространстве процесса замаплена только системная область, а всё остальное мапится по потребности. В начале ядерный загрузчик EXE файла грузит этот самый файл в виртуальную память (если он ещё туда не загружен) и мапит кусочек адресного пространства на эти данные. Потом по потребности мапятся другие модули или приватная память.

Поиск идёт, если не сильно вдаваться в подробности, в три стадии:
- среди уже замапленых модулей в текущий процесс. Если нашли, то просто увеличиваем счётчик использований. Это тривиальная стадия и о ней обычно даже не упоминают;
- среди модулей, которые уже есть в виртуальной памяти системы. Если нашли, то остаётся только замапить его в процесс;
- как последний шанс, ищем по диску согласно LIBPATH. Если нашли - грузим в общесистемную память и дальше стадия 2.

Из конфига ничего не игнорируется, но до LIBPATH может просто не дойти. Сделано так ради скорости поиска.

Точка в LIBPATH - это зло на самом деле. Она трактуется в самом обычном понимании: как текущий каталог. Расчитывать, что в этом каталоге есть хоть какие-то библиотеки, а уж тем более, нужные - это очень смело.

Fri 07 Dec 2018 17:22 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.