O documento descreve o funcionamento dos mutexes, que são um mecanismo simplificado de semáforos utilizado para gerenciar a exclusão mútua de regiões críticas de código compartilhado. Os mutexes usam apenas um bit para indicar se estão impedidos ou desimpedidos e bloqueiam threads tentando acessar a região crítica até que ela seja liberada, evitando espera ociosa e requerendo apenas chamadas no espaço do usuário.
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
Mutex
1. CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
CAMPUS TIMÓTEO
MUTEX
Sistemas Operacionais
Prof. Maurílio Alves
Paula Peçanha Gonçalves
2. Características
● Opção simplificada de Semáforo:
○ Não precisa de contar;
● Somente 1 bit é necessário para representar
a variável mutex:
○ Impedido;
○ Desimpedido.
3. Vantagens
● Adequados apenas para gerenciar a
exclusão mútua de algum recurso ou parte
de código compartilhada;
● Fáceis de implementar;
● Eficientes;
● Úteis em pacotes de threads implementados
totalmente no espaço do usuário.
4. Como funciona?
● Quando um thread ou processo precisa ter
acesso a uma região crítica, ele chama
mutex_lock.
● Se o mutex estiver desimpedido, o acesso à
região crítica é liberado.
● Porém, se o mutex estiver impedido, a thread
permanecerá bloqueada até que a região crítica
seja liberada com um mutex_unlock.
5. Como funciona?
● Se múltiplos threads estiverem bloqueados
sobre o mutex, um deles será escolhido
aleatoriamente e liberado para adquirir a
trava.
● O código do mutex_lock é similar ao código
do enter_region.
6. Região Crítica
● A diferença se dá quando o enter_region falha
ao entrar na região crítica, ele continua
testando repetidamente a variável de trava
(espera ociosa).
● Ao final, o tempo de CPU
se esgota e algum outro
processo é escalonado
para executar.
7. Thread_yield
● Já o mutex_lock, quando falha em verificar a
variável de trava chama o thread_yield para que
abra mão da CPU em favor de outro processo, ou
seja, não há espera ocupada.
● O thread_yield é apenas uma chamada do
escalonador de threads no espaço do usuário.
● Como consequência, nem o mutex_lock nem
mutex_unlock requerem qualquer chamada ao
núcleo.