Última prática: Simulação de um buffer entre produtor e consumidor
Usar o módulo básico de simulação baseada em eventos (anexo abaixo para facilitar) para implementar uma simulação de um buffer operando como uma fila entre um produtor de "fichas" (tokens) e um consumidor.
Conforme explicado em aula, a idéia é que um processo produz fichas a uma taxa média de uma fixa por unidade de tempo (mais detalhes abaixo) enquanto o conumidor pode consumir a uma taxa média diferente, denominada aqui por c. Para diminuir o impacto da diferença de tempos entre produtor e consumidor, existe uma fila entre eles. O produtor, ao terminar a produção, insere a ficha na fila (se houver espaço; se não houver espaço, aguarda liberar um espaço). O consumidor retira as fichas da fila (se ela não estiver vazia; se vazia, espera uma ficha ser inserida).
Os tempos de produção e consumo são médios, e vamos supor que os tempos para cada uma das fichas seguirão uma distribuição exponencial com a média correta. A distribuição exponencial é dada por (para t>0) P(t) = exp(-t/m), onde m é a média. Neste caso, a média para o produtor é 1 e para o consumidor é c.
Os parâmetros da simulação são o tamanho da fila (número máximo N de fichas que ela pode guardar) e o tempo médio do consumidor.
Fazer um programa, usando o módulo fornecido, que dados os valores de N e c execute uma simulação por 1000 unidades de tempo e faça o levantamento do seguinte:
- Tempo total que o produtor ficou bloqueado esperando espaço na fila para inserção.
- Tempo total que o consumidor ficou bloqueado esperando uma ficha ser inserida na fila para retirada.
- Distribuição de intervalos de tempo em que o produtor ficou bloqueado esperando espaço na fila para inserção.
- Distribuição de intervalos de tempo em que o consumidor ficou bloqueado esperando uma ficha ser inserida na fila para retirada.
- 23 junho 2017, 14:52 PM