The UNIX and Linux Forums  
Olá e boas-vindas de Estados Unidos para o UNIX e Linux Forum! Obrigado por visitar e fazer parte da nossa comunidade global.

Go Back   O UNIX e Linux Forum > Top Fóruns > Alto Nível de programação
.
google unix.com



Alto Nível de programação Post perguntas sobre C, C + +, Java, SQL, e outras linguagens de programação aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
ELF formato biblioteca compartilhada? wntrmead Alto Nível de programação 11 11-16-2007 02:19
biblioteca compartilhada areef4u UNIX & avançada para usuários experientes 1 08-01-2006 03:14
Memória partilhada, mas muita falta de memória não utilizada cjcamaro UNIX & avançada para usuários experientes 1 10-13-2004 06:10
Biblioteca Compartilhada Problema vinz HP-UX 1 08-27-2004 11:57
Biblioteca Compartilhada rajashekaran Alto Nível de programação 2 08-03-2002 02:59

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 Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 05-21-2007
DreamWarrior DreamWarrior is offline
Usuário
  
 

Join Date: Oct 2003
Lugares: 70
Memória partilhada na biblioteca compartilhada

Preciso de criar uma biblioteca compartilhada para acessar uma memória no PO. O PO não é grande, mas grande o suficiente para torná-lo pesado para carregar em cada processo usando a biblioteca compartilhada. Felizmente, é muito estático informação, pelo que não precisa se preocupar muito sobre a sincronização de dados entre as instâncias da biblioteca compartilhada. No entanto, o que eu preciso se preocupar com a inicialização da memória é uma vez e nunca mais.

Gostaria todas as bibliotecas compartilhadas para ter uma biblioteca escopo variável, mas não acho que isso é possível. Se for, deixe-me saber que ... mas sei que normalmente cada processo recebe a sua própria cópia dos dados da biblioteca compartilhada segmento. Eu não acho que há um caminho a bandeira de que uma porção do segmento de dados partilhada entre todas as instâncias da biblioteca.

Então, acho que será necessário ter acesso à biblioteca do PO na memória partilhada. No entanto, a primeira instância da biblioteca para ser iniciado necessita para criar a memória partilhada, atribuo a ele, e carregá-los todos antes de quaisquer outros possíveis casos pode usá-lo. Como posso garantir que esta criar / inicializar acontece uma vez antes da memória partilhada é utilizada?

No primeiro momento, pensei que a não-existance do segmento de memória partilhada iria fazê-lo ... mas existe uma condição de corrida entre criar e inicializar-se em outra instância da biblioteca iria ver a memória partilhada, mas não conseguirá acessá-lo porque ele ainda não foi inited. Eu sei que pode armazenar POSIX mutex's na memória partilhada ... por isso acho que pode usar um deles. No entanto, o outro problema existe quando o segmento de memória partilhada é "à esquerda" do anterior é executado.

O que acontece então? Então ... todos os da biblioteca "separar" a partir do segmento, mas nenhum deles destruí-lo. Agora ... o que da próxima vez que a biblioteca começa fresca deve re-init a memória partilhada, mas não será.

Hummm ... alguma ideia? Alguns direção? Qual é o método comum de prestação de memória partilhada syncronization? Devo utilizar um sistema de semáforos? Será que não sofrem da mesma "quente" start problema (desanexadas processos de biblioteca compartilhada, mas de memória / Semáforos ainda residente).

Isto será escrito para AIX 5, BTW, para os interessados.
  #2 (permalink)  
Old 05-21-2007
porteiro porter is offline Forum Advisor  
Usuário
  
 

Join Date: Jan 2007
Posts: 2.965
Você poderia ter um processo adicional que seu trabalho é a criação e encerramento da memória partilhada. Este processo poderia ter alguma forma de IPC-lo para os outros processos pode anexar e desanexar, quando a última é, o gestor de processo pode limpar e morrem.

Você poderia ter a gerir processo garfo / exec 'd até o cliente bibliotecas quando começam assim, ele não tem de prestart, e têm setuid bit para correr com os direitos que não seja o primeiro usuário para o arranque.

Se o cliente ligar para o gestor de um processo com domínio socket UNIX, em seguida, o gerente poderia usar poll () em todas as conexões para acompanhar os processos que estão vivos, se sair uncleanly o soquete ligação continua a morrer.
  #3 (permalink)  
Old 05-24-2007
DreamWarrior DreamWarrior is offline
Usuário
  
 

Join Date: Oct 2003
Lugares: 70
Citação:
Originally Posted by porteiro
Você poderia ter um processo adicional que seu trabalho é a criação e encerramento da memória partilhada. Este processo poderia ter alguma forma de IPC-lo para os outros processos pode anexar e desanexar, quando a última é, o gestor de processo pode limpar e morrem.

Você poderia ter a gerir processo garfo / exec 'd até o cliente bibliotecas quando começam assim, ele não tem de prestart, e têm setuid bit para correr com os direitos que não seja o primeiro usuário para o arranque.

Se o cliente ligar para o gestor de um processo com domínio socket UNIX, em seguida, o gerente poderia usar poll () em todas as conexões para acompanhar os processos que estão vivos, se sair uncleanly o soquete ligação continua a morrer.
Eu estava a considerar esta abordagem, e que pode funcionar ... mas eu pensei comigo mesmo, por isso incomoda utilizam memória partilhada se eu vou ter um soquete ligação. Nesse caso, posso apenas retransmitir bem como todo o processo de solicitação para o gerente e deixá-lo decisão, e não fazer a memória partilhada.

Hummm ....

Outra memória partilhada pergunta:

Memorizar ponteiros na memória partilhada (naturalmente para outras áreas de memória partilhada), isto pode ser feito? Penso que a resposta está na forma como você anexar a memória compartilhada para o processo, não? Olhando para o shmat chamada, o segundo parâmetro especifica o endereço de memória. Presumo que este é o "endereço base" dado ao processo para o segmento de memória partilhada. Suponho que ponteiros só será válido em todas as aplicações acessando a memória partilhada IFF todas as aplicações especificar este parâmetro similarmente quando ligados ao segmento. Será isto correcto?

Se o acima estiver correta, então eu suponho que eu possa competir com outras aplicações para o endereço que deseja anexar a (sendo uma biblioteca e de todas) e que não pode facilmente ser capaz de garantir que posso obter o endereço que eu quero . Para evitar esta situação, afigura-se o sistema operacional permite que um de passar NULL para este parâmetro eo SO irá escolheu um endereço disponível para mapear a. Nesse caso, eu não poderia realmente armazenar ponteiros na memória partilhada, e não devo guardar offsets e deixar a aplicação calcular o valor real ponteiro, acrescentando a sua pessoa "endereço base." Esta é, obviamente, desempenho drenagem ....

Então ... como é que o "obstáculo" normalmente ultrapassadas?
  #4 (permalink)  
Old 05-24-2007
porteiro porter is offline Forum Advisor  
Usuário
  
 

Join Date: Jan 2007
Posts: 2.965
Citação:
Originally Posted by DreamWarrior
Então ... como é que o "obstáculo" normalmente ultrapassadas?
1. Entenda o processo de memória em um mapa específico OS.

2. anexar a memória partilhada, o mais cedo possível no processo de arranque para impedir que memórias utilização por outros mais tarde actividades.

3. se você garfo, você terá dois processos usando a memória compartilhada no mesmo endereço, não posso confirmar se, quando você exec () a memória compartilhada-se efectivamente soltado. Poderia ser útil descobrir?
  #5 (permalink)  
Old 05-25-2007
DreamWarrior DreamWarrior is offline
Usuário
  
 

Join Date: Oct 2003
Lugares: 70
Citação:
Originally Posted by porteiro
1. Entenda o processo de memória em um mapa específico OS.

2. anexar a memória partilhada, o mais cedo possível no processo de arranque para impedir que memórias utilização por outros mais tarde actividades.

3. se você garfo, você terá dois processos usando a memória compartilhada no mesmo endereço, não posso confirmar se, quando você exec () a memória compartilhada-se efectivamente soltado. Poderia ser útil descobrir?
É a 2 parte que me preocupa. Escrever uma biblioteca compartilhada que "insiste" que ela recebe uma determinada região de memória para anexar à parece propenso a questão. No entanto, a escrita é a fixação de diferentes regiões propensas a questão parece também porque todos os pedidos devem juntar à mesma região se ponteiros estão a ser válida em toda a eles.

Humm ... talvez ela deveria ser configuráveis ... não me parece justo, no entanto, fazer o usuário definir um valor. Grrrrrrrr ... É sempre um trade-off ... tornar rápido, ou torná-la fiável .... A rota seria confiável para armazenar todos os "ponteiros" como compensa ... ou página / compensar par. Mas, o que significa que a aplicação deve sempre traduzir meu tipo ponteiro para o ponteiro real .... Devagar ... tedioso, incorre em erros. Grrrrrrrrrrrrr !!!!!!!!!
  #6 (permalink)  
Old 05-25-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Localização: Ashburn, Virginia
Mensagens: 9.123
Citação:
Originally Posted by DreamWarrior
... e não devo guardar compensações e deixar a aplicação calcular o valor real ponteiro, acrescentando a sua pessoa "endereço base." Esta é, obviamente, desempenho drenagem ....

Então ... como é que o "obstáculo" normalmente ultrapassadas?
Eu não partilho o seu receio em relação ao desempenho atingido. Esta é praticamente a definição de uma matriz de referência é feita, e eu uso arrays um pouco. Mudar seu app inteiramente a arrays e nunca usar a todos os ponteiros possam realmente melhorar o desempenho, desde que você use o otimizador. De qualquer modo, muitas implementações para não permitir que você escolha o endereço de um segmento de memória partilhada e portáteis código não deve depender de ter essa opção. Bibliotecas compartilhadas são compiladas usando PIC (posição independente código), não obstante o facto de que existe frequentemente um menor desempenho atingido com PIC. Os dados partilhados segmentos posição também deve ser independente. É o custo de fazer negócio.
  #7 (permalink)  
Old 05-29-2007
DreamWarrior DreamWarrior is offline
Usuário
  
 

Join Date: Oct 2003
Lugares: 70
Citação:
Originally Posted by Perderabo
Eu não partilho o seu receio em relação ao desempenho atingido. Esta é praticamente a definição de uma matriz de referência é feita, e eu uso arrays um pouco. Mudar seu app inteiramente a arrays e nunca usar a todos os ponteiros possam realmente melhorar o desempenho, desde que você use o otimizador. De qualquer modo, muitas implementações para não permitir que você escolha o endereço de um segmento de memória partilhada e portáteis código não deve depender de ter essa opção. Bibliotecas compartilhadas são compiladas usando PIC (posição independente código), não obstante o facto de que existe frequentemente um menor desempenho atingido com PIC. Os dados partilhados segmentos posição também deve ser independente. É o custo de fazer negócio.
Isso funciona lindamente se eu quero particionar a memória compartilhada em vários segmentos e cada segmento de referência pelo seu índice. No entanto, assumindo que o PO é feita de maneira diferente dimensão informação, devo pegar um balde quer tamanho grande o suficiente para armazenar qualquer coisa (e em menor espaço de resíduos coisas) ou eu alocar dinamicamente tamanhos baldes e passar cerca de apontadores (como índices deixam de funcionar) .

Basicamente, eu estava pensando que podia criar uma versão do malloc que operava dentro de uma região de memória partilhada e, em seguida, utilizá-lo para atribuir itens no PO dinamicamente devem ser armazenados em uma tabela hash algemado.

O "desempenho hit" em ponteiros é que eu preciso para armazenar o "ponteiro" para o balde que eu atribuídos (via malloc minha rotina) na memória partilhada, de alguma maneira. Ou que o ponteiro é um ponteiro nativo em memória partilhada, ou é um desvio de memória partilhada em que cada vez vai aplicação código de acesso a um ponteiro que será necessário realizar uma conversão rotina contra ele para adquirir a sua posição independente endereço. Isso seria necessário para tanto a matriz não-nativos ou ponteiro métodos. Acho que eu poderia dizer a aplicação (no ponteiro método não-nativos), que a memória partilhada é uma enorme variedade de personagens e ponteiros acesso através de um "índice" na tabela de caracteres para o elenco apropriado tipo de dados ... mas isso parece tão feio.

Talvez criando um intermediário "malloc" biblioteca contra um segmento de memória partilhada é bobagem ... mas eu não sei de uma melhor maneira de armazenar vários dados em qualquer tamanho dinamicamente memória sem perder espaço no segmento estático médias baldes.

Última edição por DreamWarrior; em 05/29/2007 02:18..
Closed Thread

Marcadores

Tags
linux

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 10:17.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0