[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Dúvidas de Shared Memory



On Tue, 2 Apr 2002, Nelson Guedes Paulo Junior wrote:

> Nos exemplos que vem junto com o enunciado do EP (ex1.c e ex2.c), pelo que
> eu entendi, rodamos ex1 e depois rodamos ex2. Em ex2 é executado
> shmctl(shmid, IPC_RMID, 0 ) para "destruir" a área de memoria
> compartilhada assim que todos os processos realizarem um shmdt nessa área
> enquanto que o processo ex1 apenas realiza o shmdt na area compartilhada.

Se um processo não chamar shmdt() sobre uma área que ele "attachou", a 
área será "detachada" quando o processo terminar. No caso do ex2, a 
destruição da área de memória compartilhada fica pendente depois da 
chamada shmctl(shmid, IPC_RMID, 0). O S.O. só destrói mesmo a área 
depois que a execução do ex2 termina (quando a área é implicitamente 
"detachada").

> No nosso caso, criaremos o processo supervisor que deverá criar as áreas
> de memória compartilhada e que deverão ser destruidas quando este sair
> (executando o shmctl com o comando IPC_RMID) certo? E
> os processos operadores deverão apenas executar o shmdt sobre a área
> certo? Agora, o processo supervisor também deve executar um shmdt antes do
> shmctl???? Me parece que não, mas não tenho certeza.

Eu acho mais limpo e mais claro chamar shmdt() explicitamente, mas isso 
não é realmente necessário.

> Outra dúvida é no fato de que quando o processo supervisor estiver "fora
> do ar" ou for morto, ou finalizado, não tem mais sentido existirem os
> processos operadores, então o que podemos fazer? Poderíamos mandar um
> sinaol para cada um deles, mas desta forma teríamos que saber qual é o PID
> de cada um desses processos. Como podemos saber isso?

Cada operador poderia colcar seu PID na memória compartilhada. Usando um 
vetor de PIDs indexado pelo número do operador, ou algo parecido.

Reverbel