Memoria partilhada - ajuda

Myself*

Power Member
Boa tarde...

Tenho um exercicio para desenvolver sobre memória partilhada (shared memory) em C. Nomeadamente a interacção entre um processo consumidor e um processo produtor.

Gostava de saber se alquem aki tem exemplos de programas desta temática ou conhece o/s local/s onde posso encontrar.

Aguardo resposta, obrigada
 
Hum ... do que me lembro desse problema do produtor/consumidor:

Imagina este cenário:
Tens 2 processos a correr em simultâneo: Um produtor e um consumidor. O produtor acede à memoria partilhada e regista temporariamente o valor actual do numero de produtos para ser actualizado. Mas neste instante, este processo é interrompido pelo scheduler e o processo consumidor consome 1 produto. Quando o scheduler volta a correr o processo produtor, o valor do numero de produtos continua a ser o valor armazenado no inicio, não o valor depois de ter sido realizado o consumo, que já não é o valor actual. Espero que tenhas conseguido perceber o que eu tentei dizer.

Toda esta lenga-lenga para chegar à conclusão que quando usas memória partilhada usada por diversos processos à aceder a essa memória partilhada temos de ter muito cuidado com o sincronismo entre processos. Deves pesquisar sobre semáforos e mutexes.

Arranjo-te aqui um link sobre esse problema numa cadeira que já tive no IST (Programação de Sistemas), quem for de MEEC (antiga LEEC) vê logo que é material do Crespo. :cool:

http://comp.ist.utl.pt/ec-ps/Acetatos/PC.pdf
 
|[Kaos]|;3941603 disse:
Hum ... do que me lembro desse problema do produtor/consumidor:

Imagina este cenário:
Tens 2 processos a correr em simultâneo: Um produtor e um consumidor. O produtor acede à memoria partilhada e regista temporariamente o valor actual do numero de produtos para ser actualizado. Mas neste instante, este processo é interrompido pelo scheduler e o processo consumidor consome 1 produto. Quando o scheduler volta a correr o processo produtor, o valor do numero de produtos continua a ser o valor armazenado no inicio, não o valor depois de ter sido realizado o consumo, que já não é o valor actual. Espero que tenhas conseguido perceber o que eu tentei dizer.

Toda esta lenga-lenga para chegar à conclusão que quando usas memória partilhada usada por diversos processos à aceder a essa memória partilhada temos de ter muito cuidado com o sincronismo entre processos. Deves pesquisar sobre semáforos e mutexes.

Arranjo-te aqui um link sobre esse problema numa cadeira que já tive no IST (Programação de Sistemas), quem for de MEEC (antiga LEEC) vê logo que é material do Crespo. :cool:

http://comp.ist.utl.pt/ec-ps/Acetatos/PC.pdf


Obrigada pela ajuda. Preciso de usar memoria partilhada, mas n é para entrar com essa parte dos semaforos.

Cumps
 
Se não usares semaforos ou outro mecanismo de sincronização qualquer corres o risco de o teu programa não dar o resultado que queres.

Quanto à memoria partilhada, tens mesmo que usar processos?

É mais facil e rapido usares tarefas (threads) e na net encontras varios exemplos desse tipo de exercicios de produtores-consumidores.
 
Se não usares semaforos ou outro mecanismo de sincronização qualquer corres o risco de o teu programa não dar o resultado que queres.

Quanto à memoria partilhada, tens mesmo que usar processos?

É mais facil e rapido usares tarefas (threads) e na net encontras varios exemplos desse tipo de exercicios de produtores-consumidores.

Sim, tenho k usar processos. Ainda nao dei threads.
 
Nesse caso depende. Há varios mecanismos de comunicação.

Sem saber o que deste é complicado. Não tens uns slides com a materia para te guiar?
 
É assim. Se queres usar processos a aceder a memória partilhada, tens obrigatoriamente que usar semáforos e muito provavelmente mutexes para sincronizar o processo. Se não quiseres usar semáforos tens que usar threads com variáveis de condição. Não há outra forma de o fazer...
 
É assim. Se queres usar processos a aceder a memória partilhada, tens obrigatoriamente que usar semáforos e muito provavelmente mutexes para sincronizar o processo. Se não quiseres usar semáforos tens que usar threads com variáveis de condição. Não há outra forma de o fazer...

Monitores também é engraçado.:D
 
Esse exercício é muito parecido a um que fiz à pouco tempo, mesmo sem os semáforos. Segundo a prof, era para chegarmos a conclusão que não era possível. :P
 
Esse exercício é muito parecido a um que fiz à pouco tempo, mesmo sem os semáforos. Segundo a prof, era para chegarmos a conclusão que não era possível. :P

este tipo de problemas é impossivel sem uma maneira de bloquear o acesso

e por tentativas ainda pior, uma das cenas mais chatas do genero é que umas vezes funciona e outras não, se os mutexes, semaforos, etc não estiverem direito é um barrete do caraças
 
indeed, sempre que tens memória partilhada tens de resolver os problemas de sincronização entre os processos, n podes ter os processos a aceder à memória de qualquer maneira pois assim n garantes que os resultados que obtens são aquilo que queres.

Imagina que tens 3 processos, um deles escreve "manuel" na mamória partilhada, o outro vai ler o nome (e vamos supor que o objectivo era que este lê-se especificamente o valor que o primeiro processo lá pôs ("manuel" isto é) contudo, estava a correr outro processo que escrevia lá "maria", o processo quando ia ler podia ler de lá "maria", nada te garante que um acede primeiro que o outro sem teres mecanismos como semáforos ou algo do género.
 
Back
Topo