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.
Novena de Pentecostes com textos de São João Eudes
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.