The UNIX and Linux Forums  

Go Back   В UNIX и Linux Форумы > Топ форумы > Программирования высокого уровня
.
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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered By Powered by Google
 
LinkBack Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 05-21-2007
DreamWarrior DreamWarrior is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2003
Сообщений: 70
Общая память на общую библиотеку

Мне нужно создать общую библиотеку для доступа к БД в памяти. В БД не огромный, но достаточно большим, чтобы его громоздким для перевозки примерно в каждый отдельный процесс, используя общие библиотеки. К счастью, это довольно статической информации, так что мне не нужно беспокоиться о многом синхронизации данных между случаями общей библиотеки. Вместе с тем, что мне нужно беспокоиться о том является инициализацией памяти раз и никогда.

Буду любить все разделяемые библиотеки иметь библиотеку scoped переменной, но я не думаю, что это возможно. Если это так, дайте мне знать ... но я знаю, как правило, каждый процесс получает собственную копию общей библиотеки данным сегментом. Я не думаю, что есть способ флаг часть этого сегмента данных в качестве общей для всех экземпляров библиотеки.

Так что, думаю, мне придется иметь библиотеку доступа к БД в общей памяти. Однако в первую очередь в библиотеке для начала нужно создать общую память, приложите к ней, и загрузить все это до какого-либо других возможных случаях можно его использовать. Как я могу гарантировать, что это создание, инициализация происходит один раз перед общей памяти используется?

Сначала я подумал, не-existance из общей памяти сегмента будет делать это ... но существует гонка между условие создания и инициализации, где в другую, например в библиотеке будет увидеть общую память, но не смогут получить к нему доступ потому что она до сих пор не inited. Я знаю, что можно сохранить POSIX мьютекс хранится в общей памяти ... поэтому я думаю, можно использовать одну из них. Тем не менее, существует другая проблема, когда в общей памяти сегмент "осталось" от предыдущей проходит.

Что происходит потом? Итак ... все библиотеки "отделить" от этого сегмента, но никто из них не разрушать ее. Теперь то, что ... в следующий раз, когда библиотека начинает свежих он должен вновь инициализации общая память, но не будет.

Hummm ... любые идеи? Некоторые направления? Что является общим методом предоставления общей памяти синхронизации? Должен ли я использовать систему семафора? Не приведет ли она страдает от тех же "теплый" старт проблемы (отдельностоящий процессов с разделяемой библиотекой, но память / семафорами еще резидентов).

Это будет написана для AIX 5, BTW, для тех, кто заинтересован.
Old 05-21-2007
Портер porter is offline Forum Advisor  
Зарегистрированный пользователь
  
 

Регистрация: Январь 2007
Сообщений: 2965
Вы можете иметь дополнительный процесс, который в это задание на создание и завершение работы совместной памяти. Этот процесс мог бы в той или иной форме к МПК, чтобы другие процессы, можно приложить и отсоедините, когда последний выходит, менеджер процесса очистки и умирает.

Вы могли бы управлять процессом вилка / EXEC 'D на клиентские библиотеки, когда они начинают так что не надо prestart, и setuid битных запустить с соответствующими правами, за исключением первого пользователя запустить.

Если клиентам подключиться к менеджеру процесса в UNIX сокета, то менеджер может использовать опроса () для всех подключений для контроля за процессами, которые являются живыми, если их выезд uncleanly разъему связи будет по-прежнему умирают.
Old 05-24-2007
DreamWarrior DreamWarrior is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2003
Сообщений: 70
Цитата:
Первоначально Послано Портер
Вы можете иметь дополнительный процесс, который в это задание на создание и завершение работы совместной памяти. Этот процесс мог бы в той или иной форме к МПК, чтобы другие процессы, можно приложить и отсоедините, когда последний выходит, менеджер процесса очистки и умирает.

Вы могли бы управлять процессом вилка / EXEC 'D на клиентские библиотеки, когда они начинают так что не надо prestart, и setuid битных запустить с соответствующими правами, за исключением первого пользователя запустить.

Если клиентам подключиться к менеджеру процесса в UNIX сокета, то менеджер может использовать опроса () для всех подключений для контроля за процессами, которые являются живыми, если их выезд uncleanly разъему связи будет по-прежнему умирают.
Я рассматривал этот подход, и он может работать ... но я подумал, почему бы беспокоиться использования разделяемой памяти, если я буду иметь разъем подключения. В этом случае, я могу, а просто передает все просьбы к менеджеру процесса и его решение, пусть оно и не сделать общую память.

Hummm ....

Еще одной общей памяти вопрос:

Хранение указателей в общей памяти (конечно, в других областях, в общей памяти), это можно сделать? Я думаю, ответ заключается в том, как вы приложите разделяемой памяти на процесс, нет? Глядя на shmat вызова, второй параметр определяет адрес памяти. Я полагаю, это "базовый адрес" уделить в процессе совместной памяти сегмент. Я бы догадаться, что указатели будут действительны во всех приложениях к общей памяти, тогда и только тогда все заявки указывать этот параметр, когда аналогичные крепления сегмента. Разве это правильно?

Если вышесказанное является правильным, то я бы догадаться, что я могу конкурировать с другими приложениями для решения я хочу уделять (в библиотеке, и все) и что я, возможно, не легко быть в состоянии гарантировать, что я могу получить адрес, я хочу . Чтобы предотвратить это, кажется, ОС позволяет передавать NULL для этого параметра и ОС будет выбрали один адрес на карте. В таком случае, я не мог реально хранить указатели в общей памяти, а я должен хранить взаимозачетов и оставить заявку вычислить фактические значения указателя, добавив его лицо "базовый адрес." Это, очевидно, эффективность осушения ....

Итак ... Как это, что "препятствий", как правило, преодолеть?
Old 05-24-2007
Портер porter is offline Forum Advisor  
Зарегистрированный пользователь
  
 

Регистрация: Январь 2007
Сообщений: 2965
Цитата:
Первоначально Послано DreamWarrior
Итак ... Как это, что "препятствий", как правило, преодолеть?
1. Понимание процесса карта памяти на конкретной ОС.

2. прикрепить разделяемой памяти как можно раньше в процессе загрузки, чтобы предотвратить это воспоминания использования другими спустя деятельности.

3. Если вы вилкой, у вас будет два процесса с использованием общей памяти по тому же адресу, я не могу подтвердить, в случае, когда вы EXEC () общей памяти фактически получает отдельностоящий. Стоило бы узнать?
Old 05-25-2007
DreamWarrior DreamWarrior is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2003
Сообщений: 70
Цитата:
Первоначально Послано Портер
1. Понимание процесса карта памяти на конкретной ОС.

2. прикрепить разделяемой памяти как можно раньше в процессе загрузки, чтобы предотвратить это воспоминания использования другими спустя деятельности.

3. Если вы вилкой, у вас будет два процесса с использованием общей памяти по тому же адресу, я не могу подтвердить, в случае, когда вы EXEC () общей памяти фактически получает отдельностоящий. Стоило бы узнать?
Это 2 части, что беспокоит меня. Написание разделяемых библиотек, что "утверждает", что он получает определенную область памяти для придаем кажется, подверженных проблеме. Тем не менее, писать ему придают различные регионы кажется, подверженных вопрос тоже, потому что все заявки должны приложить к одному и тому же региону, если указатели должны быть действительны между ними.

Humm ... может быть, он должен быть конфигурируемыми ... не представляется справедливым, однако, чтобы пользователь установил значение. Grrrrrrrr ... Всегда компромисс ... Сделать это быстро, или сделать его надежным .... Надежная маршрута будет хранить все "стрелка" в качестве взаимозачетов ... или страница / компенсируется парой. Но, это означает, что заявка должна всегда перевести мои указатель типа в фактических указатель .... Низкая ... утомительного ошибок. Grrrrrrrrrrrrr !!!!!!!!!
Old 05-25-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Регистрация: август 2001
Место проведения: Ashburn, Вирджиния
Сообщения: 9124
Цитата:
Первоначально Послано DreamWarrior
... а я должен хранить взаимозачетов и оставить заявку вычислить фактические значения указателя, добавив его лицо "базовый адрес." Это, очевидно, эффективность осушения ....

Итак ... Как это, что "препятствий", как правило, преодолеть?
Я не разделяю ваши тревоги относительно исполнения хитов. Это практически определение из массива ссылки выполняется, и я использую массивы очень немного. Переключение вашем ок полностью массивов и никогда не использовать указатели на всех может реально повысить производительность при условии, что вы используете оптимизатор. В любом случае, многие реализаций не позволяют вам выбрать адрес из сегмента общей памяти и портативных код не следует полагаться в связи с этим вариантом. Общие библиотеки составляются с использованием ПОС (должность независимого кода), несмотря на тот факт, что зачастую является незначительным исполнения хитов с ПИК. Общие данные сегменты должны быть также позиция независимой. Это издержек ведения бизнеса.
Old 05-29-2007
DreamWarrior DreamWarrior is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2003
Сообщений: 70
Цитата:
Первоначально Послано Perderabo
Я не разделяю ваши тревоги относительно исполнения хитов. Это практически определение из массива ссылки выполняется, и я использую массивы очень немного. Переключение вашем ок полностью массивов и никогда не использовать указатели на всех может реально повысить производительность при условии, что вы используете оптимизатор. В любом случае, многие реализаций не позволяют вам выбрать адрес из сегмента общей памяти и портативных код не следует полагаться в связи с этим вариантом. Общие библиотеки составляются с использованием ПОС (должность независимого кода), несмотря на тот факт, что зачастую является незначительным исполнения хитов с ПИК. Общие данные сегменты должны быть также позиция независимой. Это издержек ведения бизнеса.
Это работает красиво, если я хочу раздела общей памяти на несколько ведер и ведения каждого ведра ее индекса. Однако, исходя из БД состоит из разного размера информацию, я должен либо выбрать ковшом большой размер, чтобы хранить что-либо (и отходов от космической меньше вещей), или я выделить динамически размеров ведра и пройти вокруг указателей (индексов, как не работать) .

По сути, я думал, я мог создать версию malloc, которые действуют в рамках общей памяти региона, а затем использовать его для выделения объектов в БД динамично будет храниться в цепях хеш.

В "исполнение хитов" на указателей состоит в том, что мне нужно, чтобы сохранить "указателя" на ведро, что я выделил (через мои обычные malloc) в общем-то память. Либо о том, что указатель на указатель на родном общую память, и это компенсируется в общей памяти, что каждый раз, когда применение кода выходит на доступ указатель его надо выполнять преобразование обычной против приобрести свою позицию независимого решения. Это необходимо для любой массив или неаборигенных указатель методов. Думаю, я мог бы сказать применения (в неаборигенных указатель метод), что в общей памяти это огромный массив символов и указатели доступа через "индекс" в символьный массив бросили в соответствующий тип данных ... но это, по-видимому точно так же, как уродливые.

Может быть, создать промежуточные "malloc" Библиотека против общей памяти сегмент глупо ... но я не знаю лучшего способа для хранения различных данных, динамически размера в любой сегмент памяти, не тратя место на статической размера ведра.

Последний раз редактировалось DreamWarrior; на 05-29-2007 02:18 PM..
Closed Thread

Закладки

Теги
Linux

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 07:17 PM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0