![]() |
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Программирования высокого уровня Почтовые вопросы о C, C + +, Java, SQL и других языках программирования здесь. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| ELF формат разделяемой библиотеки? | wntrmead | Программирования высокого уровня | 11 | 11-16-2007 02:19 PM |
| Разделяемая библиотека | areef4u | UNIX перспективных И опытных пользователей | 1 | 08-01-2006 03:14 AM |
| Общая нехватка памяти, но много неиспользованной памяти | cjcamaro | UNIX перспективных И опытных пользователей | 1 | 10-13-2004 06:10 PM |
| Общая задача библиотеки | vinz | HP-UX | 1 | 08-27-2004 11:57 AM |
| Общие библиотеки | rajashekaran | Программирования высокого уровня | 2 | 08-03-2002 02:59 PM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
Общая память на общую библиотеку
Мне нужно создать общую библиотеку для доступа к БД в памяти. В БД не огромный, но достаточно большим, чтобы его громоздким для перевозки примерно в каждый отдельный процесс, используя общие библиотеки. К счастью, это довольно статической информации, так что мне не нужно беспокоиться о многом синхронизации данных между случаями общей библиотеки. Вместе с тем, что мне нужно беспокоиться о том является инициализацией памяти раз и никогда.
Буду любить все разделяемые библиотеки иметь библиотеку scoped переменной, но я не думаю, что это возможно. Если это так, дайте мне знать ... но я знаю, как правило, каждый процесс получает собственную копию общей библиотеки данным сегментом. Я не думаю, что есть способ флаг часть этого сегмента данных в качестве общей для всех экземпляров библиотеки. Так что, думаю, мне придется иметь библиотеку доступа к БД в общей памяти. Однако в первую очередь в библиотеке для начала нужно создать общую память, приложите к ней, и загрузить все это до какого-либо других возможных случаях можно его использовать. Как я могу гарантировать, что это создание, инициализация происходит один раз перед общей памяти используется? Сначала я подумал, не-existance из общей памяти сегмента будет делать это ... но существует гонка между условие создания и инициализации, где в другую, например в библиотеке будет увидеть общую память, но не смогут получить к нему доступ потому что она до сих пор не inited. Я знаю, что можно сохранить POSIX мьютекс хранится в общей памяти ... поэтому я думаю, можно использовать одну из них. Тем не менее, существует другая проблема, когда в общей памяти сегмент "осталось" от предыдущей проходит. Что происходит потом? Итак ... все библиотеки "отделить" от этого сегмента, но никто из них не разрушать ее. Теперь то, что ... в следующий раз, когда библиотека начинает свежих он должен вновь инициализации общая память, но не будет. Hummm ... любые идеи? Некоторые направления? Что является общим методом предоставления общей памяти синхронизации? Должен ли я использовать систему семафора? Не приведет ли она страдает от тех же "теплый" старт проблемы (отдельностоящий процессов с разделяемой библиотекой, но память / семафорами еще резидентов). Это будет написана для AIX 5, BTW, для тех, кто заинтересован. |
|
||||
|
Вы можете иметь дополнительный процесс, который в это задание на создание и завершение работы совместной памяти. Этот процесс мог бы в той или иной форме к МПК, чтобы другие процессы, можно приложить и отсоедините, когда последний выходит, менеджер процесса очистки и умирает.
Вы могли бы управлять процессом вилка / EXEC 'D на клиентские библиотеки, когда они начинают так что не надо prestart, и setuid битных запустить с соответствующими правами, за исключением первого пользователя запустить. Если клиентам подключиться к менеджеру процесса в UNIX сокета, то менеджер может использовать опроса () для всех подключений для контроля за процессами, которые являются живыми, если их выезд uncleanly разъему связи будет по-прежнему умирают. |
|
||||
|
Цитата:
Hummm .... Еще одной общей памяти вопрос: Хранение указателей в общей памяти (конечно, в других областях, в общей памяти), это можно сделать? Я думаю, ответ заключается в том, как вы приложите разделяемой памяти на процесс, нет? Глядя на shmat вызова, второй параметр определяет адрес памяти. Я полагаю, это "базовый адрес" уделить в процессе совместной памяти сегмент. Я бы догадаться, что указатели будут действительны во всех приложениях к общей памяти, тогда и только тогда все заявки указывать этот параметр, когда аналогичные крепления сегмента. Разве это правильно? Если вышесказанное является правильным, то я бы догадаться, что я могу конкурировать с другими приложениями для решения я хочу уделять (в библиотеке, и все) и что я, возможно, не легко быть в состоянии гарантировать, что я могу получить адрес, я хочу . Чтобы предотвратить это, кажется, ОС позволяет передавать NULL для этого параметра и ОС будет выбрали один адрес на карте. В таком случае, я не мог реально хранить указатели в общей памяти, а я должен хранить взаимозачетов и оставить заявку вычислить фактические значения указателя, добавив его лицо "базовый адрес." Это, очевидно, эффективность осушения .... Итак ... Как это, что "препятствий", как правило, преодолеть? |
|
||||
|
Цитата:
2. прикрепить разделяемой памяти как можно раньше в процессе загрузки, чтобы предотвратить это воспоминания использования другими спустя деятельности. 3. Если вы вилкой, у вас будет два процесса с использованием общей памяти по тому же адресу, я не могу подтвердить, в случае, когда вы EXEC () общей памяти фактически получает отдельностоящий. Стоило бы узнать? |
|
||||
|
Цитата:
Humm ... может быть, он должен быть конфигурируемыми ... не представляется справедливым, однако, чтобы пользователь установил значение. Grrrrrrrr ... Всегда компромисс ... Сделать это быстро, или сделать его надежным .... Надежная маршрута будет хранить все "стрелка" в качестве взаимозачетов ... или страница / компенсируется парой. Но, это означает, что заявка должна всегда перевести мои указатель типа в фактических указатель .... Низкая ... утомительного ошибок. Grrrrrrrrrrrrr !!!!!!!!! |
|
||||
|
Цитата:
По сути, я думал, я мог создать версию malloc, которые действуют в рамках общей памяти региона, а затем использовать его для выделения объектов в БД динамично будет храниться в цепях хеш. В "исполнение хитов" на указателей состоит в том, что мне нужно, чтобы сохранить "указателя" на ведро, что я выделил (через мои обычные malloc) в общем-то память. Либо о том, что указатель на указатель на родном общую память, и это компенсируется в общей памяти, что каждый раз, когда применение кода выходит на доступ указатель его надо выполнять преобразование обычной против приобрести свою позицию независимого решения. Это необходимо для любой массив или неаборигенных указатель методов. Думаю, я мог бы сказать применения (в неаборигенных указатель метод), что в общей памяти это огромный массив символов и указатели доступа через "индекс" в символьный массив бросили в соответствующий тип данных ... но это, по-видимому точно так же, как уродливые. Может быть, создать промежуточные "malloc" Библиотека против общей памяти сегмент глупо ... но я не знаю лучшего способа для хранения различных данных, динамически размера в любой сегмент памяти, не тратя место на статической размера ведра. Последний раз редактировалось DreamWarrior; на 05-29-2007 02:18 PM.. |
![]() |
| Закладки |
| Теги |
| Linux |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|