carlos.rocha@ifrn.edu.br Semforos e Mutexes Introduo Uma srie de problemas podem ocorrer quando um ou mais processos tem acesso a um nico recurso compartilhado pelo SO Como exemplo temos a fila de impresso Um processo A requisita a prxima vaga da fila, recebe a informao de que a prxima vaga a 7, e neste exato momento escalonado; Outro processo B requisita a prxima vaga, tambm recebe como resposta 7, copia o arquivo a ser impresso para esta posio, e neste exato momento escalonado Programao para ambiente de redes carlos.rocha@ifrn.edu.br Semforos e Mutexes
Quando o processo A volta a executar ele tambm
copia o arquivo para a posio 7, e atualiza a informao de que a prxima vaga disponvel a 8 Nesta situao o arquivo enviado pelo processo B no ser impresso
Este tipo de problema conhecido
como condio de corrida; Tema bastante importante para
os sistemas operacionais
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Regies crticas Para evitar condies de corrida so necessrios mecanismos que evitem que mais de um processo leia ou escreva em memria, arquivos, ou qualquer outro recurso compartilhado Conhecidos como mecanismos de excluso mtua Se um processo est de posse de um recurso compartilhado, os outros sero excludos de obte-lo O problema anterior s ocorreu porque os processos A e B obtiveram acesso simultneo a uma mesma varivel compartilhada
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Regies crticas Os mecanismos de excluso mtua so um ponto central de design em qualquer SO E essenciais para seu funcionamento Todos os trechos de cdigo de um programa que podem levar a uma condio de corrida devem ser protegidos por mecanismos de excluso mtua Conhecidas como regies crticas
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Regies crticas
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Regies crticas Existem diversos mecanismos para possibilitar a excluso mtua, dentre eles, alguns histricos / conceituais Desabilitar interrupes, variveis de bloqueio, alternncia estrita, soluo de Peterson, instruo TSL Outras mais utilizadas atualmente na prtica Semforos, mutexes etc
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Semforos So um tipo especial de varivel disponvel nas linguagens de programao Nelas, podem ser aplicadas duas operaes: uma que incrementa e outra que decrementa o seu valor Durante a verificao ou alterao do valor de um semforo um processo no pode ser escalonado Normalmente, quando o semforo criado, possui
valor igual a 1
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Semforos funcionamento Antes de entrar em uma regio crtica o processo verifica o valor do semforo Se > 0, decrementa o seu valor e continua a executar Se = 0, o processo posto para dormir at que o valor do semforo seja incrementado Ao sair da regio crtica o processo incrementa o valor do semforo
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Semforos uso Semforos so amplamente utilizados nos sistemas operacionais atuais, sendo fundamentais para o funcionamento de muitos dos programas que utilizamos diariamente Alm de implementar excluso mtua, com os semforos podemos controlar o nmero mximo de acessos simultneos a um recurso
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Mutexes So uma verso simplificada dos semforos, com apenas dois valores possveis (0 e 1) Implementam apenas excluso mtua So mais simples e leves que semforos Muito utilizados por threads Podem estar em dois estados (unlocked ou locked)
Programao para ambiente de redes
carlos.rocha@ifrn.edu.br Semforos e Mutexes Mutexes funcionamento A forma genrica de funcionamento de um mutex bastante simples Antes de entrar em uma regio crtica, o processo ou thread executa uma chamada mutex_lock(...) Se outros processos ou threads tentarem acessar a
mesma regio crtica eles sero bloqueados
Ao sair de uma regio crtica, o processo ou thread executa uma chamada mutex_unlock(...) Se houver um ou mais processos ou threads