![]() |
Olá e boas-vindas de Estados Unidos para o UNIX e Linux Forum! Obrigado por visitar e fazer parte da nossa comunidade global.
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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. |
|
||||
|
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. |
|
||||
|
Citação:
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? |
|
||||
|
Citação:
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? |
|
||||
|
Citação:
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 !!!!!!!!! |
|
||||
|
Citação:
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.. |
![]() |
| Marcadores |
| Tags |
| linux |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|