SOLUÇÃO PARA MÚTUA EXCLUSÃO PARA ESPERA OCUPADA 1) DESABILITAR INTERRUPÇÕES: quando se esta entrando em uma RC, a função mais

simples é o método de desabilitar todas as interrupções e quando terminar, reabilitar. Esta proposta não é atrativa pois da ao processo do usuário a capacidade de desabilitar as interrupções inclusive aquelas que permite o núcleo reassumir o controle da CPU. Se o processo tiver algum problema o S.O não recebe a controle novamente. 2) variáveis LOCK: essa opção é implementada através do software, onde uma variável compartilhada chamada LOCK tem o seu valor inicial em 0, a partir da execução se tem um processo tentando entrar na RC ocorre um teste no valor de LOCK com as seguintes regras. a) se LOCK for = a 0; o processo muda o valor da variável para 1 e executa na RC. b) se o valor de LOCK for 1; o processo espera até que o valor seja 0; Uma deficiência desse método é se por acaso dois processos executarem o teste ao mesmo tempo e conseguirem o mesmo resultado, podendo acarretar conflitos.
P1 P3 p2 P4

ALTERNÂNCIA ESTRITA. Esse é um outro método que utilizado, onde TURN começa com valor inicial 0. Essa variável indica quem deve esperar e quem deve entrar na RC. Através da seguinte regra. c) se TURN = 0; o processo 0 pode entrar na RC e quando sair o valor de TURN passa para 1. d) se TURN é 1; o processo 1 pode entrar na RC e quando esse processo sair o valor de TURN passa para 0; Esse algoritmo só permite a alternância e caso o numero de processo seja maior que 2 o 1º processo tem que esperar até chegar sua vez novamente. INSTRUÇÃO TSL (teste and set lock)

Instrução especial que permite ler uma variável. sendo diferente. Neste método é o mesmo que emprega variáveis LOCK controlada por instruções TSL. Solução de hardware em ambiente de múltiplos processadores • Solução atômica – O processador executando TSL bloqueia o barramento • A instrução TSL – Lê e compara o conteúdo de uma variável e escreve um valor diferente de zero caso esteja zerada Instrução TSL boolean testset (int lock) { if (loock == 0) { loock =1. Quando um processo alterar o valor de LOCK para 0 ele é responsável. por ativar um processo bloqueado através do WAKEUP. o sistema muda o processo em execução para bloqueado. Um processo bloqueado torna-se ativo quando outro processo o desbloqueia através de WAKEUP. } else { return false. • Dormir e Acordar (Sleep e Wakeup) – A ideia é evitar a espera ocupado que causa desperdício de CPU.Esse método tem a participação do hardware utilizando a TSL presente em muitos computadores passando a controlar a variável LOCK. } } SOLUÇÕES DE SOFTWARE COM BLOQUEIO Neste método quando ocorrer SLEEP. – Os processos são bloqueados quando não podem entrar na região crítica – Os processos usam as primitivas sleep e wakeup • Sleep(): bloqueia o processo e o coloca a espera de um sinal de wakeup. • Wakeup(): sinaliza (acorda) o processo anteriormente bloqueado por Sleep() . Deve-se levar em conta que utilizando SLEEP e WAKEUP ocorre a possibilidade de bloqueio permanente de processo que é conhecido como DEADLOCK. return true. somente quando a variável apresentar valor 1 o processo executa SLEEP. armazenar seu conteúdo em uma outra área e atribuir um novo valor a esta variável (HARDWARE).

execute o seguinte processamento: o processo p1 está executando a partir de 0s e no inicio de 3s ele acessa a RC. quando o tempo esta em 2s um processo p2 começa a executar e no inicio de 5s tenta acessar a RC. a) Em que momento o processo p2 vai conseguir acessar a RC? Sabe-se que ele leva 2s para sair da RC e mais 3s para finalizar o seu processo. Utilizando variável LOCK. SOLUÇÕES DE SOFTWARE COM BLOQUEIO SEMÁFAROS Utilizam o conceito de variáveis com números inteiros utilizados para contar o nº de vezes que a operação WAKEUP foi realizada.EXERCICIOS DE REGIÃO CRÍTICA 1. e em nove segundo ele é finalizado. quando chega ao final de 7s o processo p1 sai da RC. Tempo 0 P1 P2 lock 0 0 X 1 x 2 x x 0 3 rc x 1 4 rc x 1 5 rc Rc/ 1 6 rc Rc/ 1 7 rc Rc/ 1 8 x rc 1 9 x rc 1 X 0 x 0 x 0 10 11 12 P2 consegue acessar em 8 segundos. . o semáforo é decrementado e o processo continua – Caso contrário o processo é posto para dormir. Utiliza-se então as operações up/Down seguindo essas regras: • Semáforos – Uma variável inteira (o SEMÁFORO) é usada para o número de sinais de acordar salvos (pendentes) • O valor zero indica que nenhum sinal de acordar está pendente • Um valor positivo N indica o número de sinais pendentes – As operações Down e Up são executadas de forma atômica sobre o semáforo Down(semáforo): testa se o valor do semáforo é maior que zero – Se for.

mas não suas estruturas internas. variáveis e estrutura de dados agrupados em um bloco. cabe ao compilador garantir a exclusão mútua. sendo sua principal característica que somente 1 processo pode estar ativo em um dado momento. .MONITORES Diferentemente de outros métodos de proteção. PROPOSTA – As seções críticas devem ser codificadas como procedimentos do monitor e não dentro de cada processo – Quando um processo referencia dados compartilhados. ele chama um procedimento do monitor. – Monitor é uma construção da linguagem. os monitores são uma coleção de procedimentos. A partir deles os processos acessam os procedimentos do monitor.