Memória Partilhada



Se dois processos partilham a mesma zona de memória, então podem usá-la para comunicarem entre si. Esta é a forma mais rápida de comunicação que existe entre processos. De qualquer forma, é necessário ter muito cuidado para que dois processos não tentem aceder a essa zona de memória em simultâneo, ou para que, esse acesso seja estudado e previsto, sob pena da obtenção de resultados incorrectos.


Eis um exemplo:
Atente no pedaço de código que se segue e onde dois processos partilham uma variável.

		v[10]={1,2,3,4,5,6,7,8,9,10};
		count=0;

		/* process One */
		for (i=1;i=5;i++)
		  count++;

		/* process One */
		for (i=1;i=5;i++)
		  count++;


Olhando para esta secção, poder-se-ia pensar que o resultado final da variável count seria 10, porém, exsite uma grande probabilidade de que essa ideia esteja errada. Em código máquina, a parte incremental do código, é a seguinte:

		load reg, count
		add reg, 1
		store count, reg


Quando se considera, agora, estas mesmas linhas mas para a execução de dos processos em simultâneo, é muito possível que, a dada altura, ocorra algo como isto:

  		     process One		process Two

		1. load reg1, count
		2. 			load reg2, count
		3. 			add reg2, 1
		4. 			store reg2, 1
		5. add reg1, 1		
		6. store count, reg1


Para que isso não aconteça, resultando, daí, , é necessário considerar a secção do código em que se acede a essa zona de memória partilhada como sendo uma secção crítica, a qual deve ser tratada com os mecanismos de sincronização para competição de um recurso.



Pipes Enviar mail aos autores


HomePage Menu Mecanismos de Sincronização Signals Semáforos Comunicação entre Processos Pipes Memória Partilhada Problemas de Programação Concorrente Glossário Links