Académique Documents
Professionnel Documents
Culture Documents
1 Introdução
Nesse módulo foi construido um sistema de semáforos para controlar os acessos a áreas
críticas do programa, para isso foi adicionado a biblioteca uma estrutura chamada semaphore_t
e 4 funções que manipulam o semáforo, task_semcreate, task_semdestroy, task_semup e
task_semdown.
A segunda parte do módulo foi uma aplicação desse semáforo em um problema clás-
sico do produtor-consumidor onde temos 3 produtores e 2 consumidores produzindo e consu-
mindo valores inteiros aleatórios em um buffer de 5 vagas.
2 O Semaphore_T
O semaphore_t é estrutura do semáforo, ele possui basicamente 4 atributos, um número
id que o identifica, um contador, uma fila de tarefas e seu status (pronto ou terminado). Todos
são inicializados na função task_semcreate.
1
4 o UP e o DOWN
A função task_semdown é responsável por testar se o semáforo está abaixado, primei-
ramente decrementa o contador do semáforo e testa se o contador é maior que 0, se estiver em
0 ou menos significa que o semáforo está abaixado então suspende a tarefa que tentou alcançar
o semáforo colocando-a na fila de tarefas suspensas do semáforo e retorna ao dispatcher, se o
semáforo não estiver abaixado então a tarefa continua sua execução normalmente.
A função task_semup é responsável por erguer novamente o semáforo, incrementa o
seu contador e se o contador ainda estiver menor ou igual a 0 significa que existem tarefas para
serem acordadas de novo da fila do semáforo, então acorda a primeira tarefa que entrou na fila,
com uma política FIFO.
2
Figura 1: Diagrama de tempo de execução.