Chapter 6 - Concurrency: Deadlock e Starvation

Sincronização entre Processos: Deadlock e Starvation

 

1. Como exemplo de \textit{deadlock} involvendo recursos reutilizáveis, considere o cenário estabelecido entre 02 processos que estão competindo por recursos: ... neste cenário que seqüência p0, q0, p1, ... cria um "deadlock" ?

  Steps    Process P                        Steps    Process Q
           ...                                       ...
    p0     request( D );                      q0     request( T );
    p1     lock( D );                         q1     lock( T );
    p2     request( T );                      q2     request( D );
    p3     lock( T );                         q3     lock( D );
    p4     ... perform action ...             q4     ... perform action ...
    p5     unlock( D );                       q5     unlock( T );
    p6     unlock( T );                       q6     unlock( D );

2. Para o cenário apresentado a seguir, a seqüência p0, q0, p1, ... de execução é a que cria um "deadlock" ? ... há outra alternativa para termos um "deadlock"

  Steps    Process P1                       Steps    Process P2
           ...                                       ...
    p0     receive( P2 );                     q0     receive( P1 );
           ...                                       ...
    p1     send( P2 );                        q1     send( P1 );
           ...                                       ...

3. Seja a solução para o Problema dos Filósofos Jantando apresentada a seguir. Nesta solução, cada filósofo pega inicialmente o garfo da esquerda e depois o da direita. Após terminar de comer, os 02 garfos são recolocados na mesa. ... esta solução no entanto é passível de "deadlock"! Descreva como se dá o "deadlock".

  program  dining_philosopher;
    var fork: array[ 0 .. 4 ] of binary_semaphore (:= 1);
    i: integer;

  procedure  philosopher( i: integer )
  begin
    repeat
      think;
      wait( fork[i] );
      wait( fork[(i+1) mod 5] );
      eat;
      signal( fork[i] );
      signal( fork[(i+1) mod 5] );
    forever;
  end;

  /* Main Program */
   begin
     parbegin
       philosopher( 0 );
       philosopher( 1 );
       philosopher( 2 );
       philosopher( 3 );
       philosopher( 4 );
    parend;
  end;

Uma solução é considerar que somente 4 filósofos estão à mesa em um dado instante, o que garante que pelo menos um filósofo irá comer. Discuta os cenários nos quais apenas 3 e 2 filósofos estão ao mesmo tempo na sala. Como estas condições podem ser impostas?

4. Por que o estudo de mecanismos de Mútua Exclusão é importante no contexto de processo ? ... e no contexto de "deadlock" ?

5. Suponha que o \textit{quantum} de tempo de um dado escalonador de processos seja ajustável. Faça uma análise qualitativa do impacto da variação deste parâmetro no desempenho dos processos em execução.

 


Luís Fernando Faina
Last modified: Fri Jun 4 10:13:39 2004