next up previous

Lista de Exercícios - 9/6/98

  1. Questão 1 - P1 de 94.1 Considere o problema dos macacos, apresentado no livro texto. Abaixo são apresentadas três soluções para o problema.
    1. Nas duas primeiras:
      1. Faça uma análise explicando se a solução permite que os macacos atravessem o precipício sem ocorrência de deadlock.
      2. Caso a resposta no ítem anterior seja afirmativa, discuta as desvantagens apresentadas pela solução.
    2. A terceira solução pode seguramente levar a situações de deadlock. Descreva uma seqüência de acontecimentos que faria isto ocorrer, explicando o comportamento do programa neste caso.

    1. #define FALSE 0
      #define TRUE 1
      sem mutex = 1; 
      int cruzandoOeste = FALSE; int cruzandoLeste = FALSE;
      
      CruzaOeste()                    CruzaLeste()
      {                               /* simetrico a CruzaOeste() */
        int consegui = FALSE;
        repeat
          P(mutex)
          if (!cruzandoLeste){
            cruzandoOeste = TRUE;
            consegui = TRUE;
          }
          V(mutex);
        until (consegui);
        Cruza();
        P(mutex);
        cruzandoOeste = FALSE;
        V(mutex);
      }
    2.   sem oeste = 0; sem leste = 1;
        
        CruzaOeste()         CruzaLeste()
        {                    {
          P(oeste);            P(leste)
          Cruza();             Cruza();
          V(leste);            V(oeste);
        }                    }
    3.   int cruzandoLeste = 0; int queremLeste = 0;
        int cruzandoOeste = 0; int queremOeste = 0;
        sem oeste = 0; sem leste = 0; sem mutex = 1;
      
        CruzaOeste() {                          CruzaLeste() {
      
          P(mutex);                               P(mutex);   
          cruzandoOeste++;                        cruzandoLeste++;
          if (!cruzandoLeste)                     if (!cruzandoOeste)
            V(oeste);                               V(leste);
          else                                    else
            queremOeste++;                          queremLeste++;
          V(mutex);                               V(mutex);
          P(oeste);                               P(leste);
      
          Cruza();                                Cruza();
      
          P(mutex);                               P(mutex);
          cruzandoOeste--;                        cruzandoLeste--;
          if (!cruzandoOeste && queremLeste)      if (!cruzandoLeste && queremOeste)  
          {                                       {
            queremLeste--;                          queremOeste--;
            V(leste);                               V(oeste);
          }                                       }
          V(mutex);                               V(mutex);
        }                                       }
  2. Suponha um sistema sem memória compartlhada (sem semáforos) e com troca de mensagens. Resolva o problema dos filósofos usando um processo coordenador centralizado (um mordomo autoritário). Quando um filósofo deseja comer, ele chama uma função que informa ao coordenador e espera permissão (isto é, aguarda que os dois garfos sejam atribuídos a ele). Quando um filósofo termina de comer, ele chama uma função que informa o fato ao coordenador. Esboce o código do coordenador, garantindo que não haja deadlock nem starvation.

About this document ...

This document was generated using the LaTeX2HTML translator Version 96.1-h (September 30, 1996) Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.

The command line arguments were:
latex2html -split 0 aulaex1.tex.

The translation was initiated by Noemi Rodriguez on Mon Jun 15 15:19:52 EST 1998


Noemi Rodriguez
Mon Jun 15 15:19:52 EST 1998