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

Re: Problema no EP1 - funcao shmget()



On Tue, 26 Mar 2002, Rodrigo Mendes Leme wrote:

>    Prof. Reverbel,
> 
>    Estamos fazendo o EP1, e aparentemente esta tudo ok. Porem, na hora em
> que criamos a memoria compartilhada (no supervisor), percebemos que quando
> passamos o valor 201 no parametro size da funcao shmget(), a funcao nao
> funciona e o programa eh abortado.
>    Se nos abaixamos um pouco o valor, (por exemplo, para 181), a funcao
> volta a funcionar. Esse comportamente nao parece normal. O sr. saberia o
> por que disso ocorrer? E, caso positivo, o que devemos fazer?

Esse comportamento não é normal. Não sei o que está acontecendo... 

Acabei experimentar com o nosso exemplo (os programas ex1.c e ex2.c 
disponíveis junto com a solução incompleta). Aumentei valor de
SHM_SIZE várias vezes (fui até 4k) e o exemplo continuou funcionando.

Só um palpite: será que o problema não é independente do tamanho? 
Poderia ser algo como um erro numa chamada a shmget() só para pegar 
(sem o IPC_CREAT, portanto) uma área de shared memory que já foi 
destruída?

> P.S.: como podemos testar se o algoritmo de concorrencia esta realmente 
> funcionando? Criar muitos operadores eh bastante trabalhoso, o sr. teria
> alguma ideia? 

Eu usaria um script para rodar muitos operadores ao mesmo tempo.

Em geral um teste não serve para garantir que um algoritmo está 
correto, serve apenas para detetar possíveis erros.

No caso de um programa concorrente é ainda mais difícil planejar 
testes com maior chance de pegar erros, devido ao grande número de 
histórias de execução possíveis e ao fator não determinístico das 
execuções. Pode ser que uma história de execução problemática só 
se repita daqui a dez anos...

Uma técnica para testar programas concorrentes é o aumento artificial 
da "competição" para acesso a recursos compartilhados. Na fase de 
testes vocês podem colocar laços dentro das regiões críticas só para 
torná-las mais longas e assim ser maior a chance de vários processos 
estarem querendo entrar numa região crítica ao mesmo tempo. Isso
tende a fazer os bugs se mostrarem, mas não garante "corretude".

Reverbel