[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: [reverbel-mac438] [MAC438] Exercícios do cap. 3
- Subject: Re: [reverbel-mac438] [MAC438] Exercícios do cap. 3
- From: Francisco Reverbel <reverbel@xxxxxxxxxx>
- Date: Mon, 01 May 2006 20:47:24 -0300
Você pretendia mandar sua solução para a lista, Cristiane, mas só eu a
recebi. Estou reenviando para a lista, pois provavelmente outras pessoas
têm interesse nela.
On Sun, 2006-04-30 at 21:40 -0300, Cristiane Maria Sato wrote:
> bool livre = true;
> process CS[i =1 to n] {
> bool possoEntrar;
> while(true) {
> /*entrando*/
> possoEntrar = false;
> Swap(livre, possoEntrar);
> while(possoEntrar == false) { Swap(livre, possoEntrar);}
> região crítica;
> /*saindo*/
> Swap(livre, possoEntrar);
> região não crítica;
> }
> }
>
> A idéia é que apenas um possoEntrar fica true por vez.
A solução da Cristiane está correta. Ela ficaria um pouco melhor com um
skip dentro do laço interno:
while(possoEntrar == false) { skip; Swap(livre, possoEntrar); }
Embora o skip não faça diferença alguma do ponto de vista da
"corretude", ele diminui um pouco a contenção no acesso à variável
compartilhada entre os processos.
A contenção no acesso a memória e o overhead causado pela invalidação do
cache de cada processador (assumindo uma máquina com múltiplos
processadores, é claro) poderia ser reduzida muito mais com uma
abordagem análoga à "test and test-and-set", que o Andrews descreve na
seção 3.2.2. Exercício: Reescrever a solução da Cristiane, agora usando
uma abordagem "test and swap" para reduzir a contenção no acesso à
memória compartilhada e o overhead de invalidação dos caches dos
processadores.
Reverbel
>
> On 4/30/06, Cristiane Maria Sato <cmsato@xxxxxxxxx> wrote:
> > Bom, dica pro 3.3
> > Se eu estiver errada, alguém PELO AMOR DE DEUS, me corrija. =)
> >
> > O Swap simplesmente troca duas variáveis, certo?
> > Tente criar uma booleana global que indica se a região crítica está
> > disponível e
> > uma booleana para cada processo indicando se ele pode entrar em sua
> > região crítica.
> > Bom, no próximo e-mail estou mandando minha solução.
> >
> > On 4/30/06, Francisco Reverbel <reverbel@xxxxxxxxxx> wrote:
> > > [Esqueci de mudar a codificação do meu mailer para ISO 8859-1 antes de
> > > enviar a mensagem anterior, que foi arquivada de modo ilegível pelo
> > > mhonarc. :-( ]
> > >
> > > Solução do exercício 3.2:
> > >
> > > int lock = 1; /* shared lock (initially open) */
> > >
> > > process CS[i = 1 to n] {
> > > int sign;
> > >
> > > while (true) {
> > > DEC(lock, sign); /* entry protocol */
> > > while (sign == 1) {
> > > INC(lock, sign);
> > > skip;
> > > DEC(lock, sign);
> > > }
> > > critical section;
> > > INC(lock, sign); /* exit protocol */
> > > noncritical section;
> > > }
> > > }
> > >
> > > Reverbel
> > >
> > > On Sun, 2006-04-30 at 17:35 -0300, Francisco Reverbel wrote:
> > > > Se a gente puder usar alguma instrução especial atômica (tipo
> > > > "test-and-set") para resolver o problema da região crítica, em geral não
> > > > vai ter muita diferença entre a solução para 2 processos e a solução
> > > > para n processos. A dificuldade é geralmente a mesma.
> > > >
> > > > Para os exercícios 3.2 e 3.3, a dica é olhar para a solução com a
> > > > "test-and-set", que está na figura 3.3 do Andrews, e tentar trocar o TS
> > > > por outra instrução atômica, como DEC ou Swap.
> > > >
> > > > Vou mandar outra mensagem com uma solução para o exercício 3.3. Façam
> > > > esse exercício *antes* de ler a minha próxima mensagem para a lista!
> > > >
> > > > Reverbel
> > > >
> > > > On Sun, 2006-04-30 at 14:18 -0300, Mariana Bravo wrote:
> > > > > Olá!
> > > > >
> > > > > Estou estudando o capítulo 3 e tentando fazer os exercícios indicados.
> > > > >
> > > > > Alguém tem alguma DICA de como resolver o ex 3.2? Ou o 3.3?
> > > > >
> > > > > Tentei simplificar para resolver com apenas 2 processos, mas ainda sim me
> > > > > falta criatividade.
> > > > >
> > > > > Mariana
> > > >
> > >
> > >
> >
> >
> > --
> > Cristiane Maria Sato
> > <cmsato@xxxxxxxxx>
> >
>
>
> --
> Cristiane Maria Sato
> <cmsato@xxxxxxxxx>
>