1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Memoria partilhada - ajuda

Discussão em 'Programação' iniciada por Myself*, 27 de Novembro de 2008. (Respostas: 12; Visualizações: 930)

  1. Myself*

    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
     
  2. |[Kaos]|

    |[Kaos]| Power Member

    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
     
  3. Myself*

    Myself* Power Member


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

    Cumps
     
  4. Amz

    Amz

    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.
     
  5. Myself*

    Myself* Power Member

    Sim, tenho k usar processos. Ainda nao dei threads.
     
  6. Amz

    Amz

    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?
     
  7. Myself*

    Myself* Power Member

    Sim tenho, estou a tentar fazer o programa por tentativas. Obrigada a todos.
     
  8. Neptune

    Neptune 1st Folding then Sex

    É 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...
     
  9. IComeFromBehind

    IComeFromBehind Power Member

    Abordagem completamente errada!!!
     
  10. Amz

    Amz

    Monitores também é engraçado.:D
     
  11. //Shino

    //Shino Power Member

    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
     
  12. blueomega

    blueomega Power Member

    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
     
  13. 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.
     

Partilhar esta Página