Vous êtes sur la page 1sur 6

Pontifícia Universidade Católica de Campinas

Sistemas Operacionais A

Engenharia de Computação
Prof. Edmar Roberto Santana De Rezende

Nome RA
Danilo L. L. R. Paixão 15051659
Diogo Esteves Furtado 15153927
Kaíque Ferreira Fávero 15118698
Leonardo Blanco Natis 15296858
Rafael Mauricio Gibim 14081673

Experimento 5

Campinas

2017
a) Introdução
Neste experimento, também utilizando o Sistema Operacional Unix, manipulamos filas
de mensagens para proporcionar o sincronismo no problema do Barbeiro Dorminhoco.
Foram empregadas threads para a resolução deste problema.
O problema consiste em manter o barbeiro ocupado enquanto há clientes, e
descansando quando não há nenhum (ordenadamente).
Se outros clientes chegarem enquanto o barbeiro estiver cortando o cabelo de um
cliente, caso haja cadeiras vazias, eles se sentarão. Caso contrário, os mesmos irão
embora. O problema é programar o barbeiro e os clientes sem cair em condições de
disputa.
O experimento baseia-se nas seguintes tarefas:
 Em um primeiro momento, deseja-se realizar a implementação do algoritmo do
Barbeiro Dorminhoco, com processos, utilizando como mecanismo de
sincronismo a troca de mensagens, na linguagem C.
Deve-se implementar barbeiros e clientes como uma única fila de mensagens.

 Em seguida, deseja-se também uma segunda implementação do algoritmo do


Barbeiro Dorminhoco substituindo os processos por threads, os semáforos por
mutex e as filas de mensagens por semáforos.
 b) Respostas às questões propostas
Perguntas que se encontram no texto do experimento:

• Pergunta 1: Qual é o recurso comum que necessita de exclusão mútua?


A informação da quantidade de clientes que estão aguardando (representada pela
variável "waiting" no pseudocódigo) e a área alteração de dados compartilhados entre
as threads necessitam de exclusão mútua.

• Pergunta 2: De que maneira (leitura, escrita, ambos) barbeiros e clientes vão


acessar o recurso comum?
Através de semáforos, filas de mensagens e memória compartilhada (thread).

• Pergunta 3: Como os números foram colocados no string?


Através da edição da struct compartilhada pela fila de mensagens.

• Pergunta 4: Como o barbeiro vai ter acesso aos valores a serem ordenados?
Ele irá acessar recursos de memória compartilhada entre as threads ou o
envio/recebimento de mensagens.

• Pergunta 5: Como o cliente vai ter acesso aos resultados?


Fila de mensagens e área compartilhada.
c) Resultados da execução dos programas
Os programas denunciaram, novamente, toda a dinâmica de escalonamento. Foi
evidente de que o escalonamento funciona de maneira aleatória e que a parte de
exclusão mutua foi realizada com sucesso. Também, podemos notar que a resolução
de threads é mais rápida que a de processos.
d) Análise dos resultados
Analisando os resultados, como já foi dito acima, foi evidente o comportamento da
máquina com relação a escalonamento. A comunicação entre processos é muito
efetivo, porém podemos reconhecer a eficácia e limitações de certos mecanismos, por
exemplo: semáforos são muito mais rápidos que filas, contudo, as filas podem passar
mensagens, carregar um conteúdo mais completo, sendo que semáforos só fazem
verificações simples, não mensagens.
Threads são realmente mais rápidas que processos e é de grande proveito ter a área
compartilhada oferecida pela mesma.
e) Conclusão
Com o uso de processos para paralelizar tarefas, threads gerando fluxos de código
paralelos e a utilização dos mecanismos de IPC para transmitir mensagens entre eles,
podemos ver e concluir que o multi-processamento ou paralelismo dos programas
melhora muito em questão de tempo, de organização e abre um enorme leque de
possibilidades em lógica programática.

Vous aimerez peut-être aussi