Escolar Documentos
Profissional Documentos
Cultura Documentos
OURINHOS (SP)
2020
I
OURINHOS (SP)
2020
SUMÁRIO
1. REFERENCIAL TEÓRICO...................................................................................... 4
2. INTRODUÇÃO ........................................................................................................ 5
5. EXCLUSÃO MÚTUA............................................................................................... 9
5.4 Monitores........................................................................................................ 11
REFERÊNCIAS......................................................................................................... 12
1. REFERENCIAL TEÓRICO
2. INTRODUÇÃO
3. CONDIÇÕES DE CORRIDA
4. REGIÕES CRÍTICAS
Como vemos na figura acima, o processo A entra na região crítica e logo após
o processo B também tenta entrar em sua região crítica, porem é bloqueado e fica
aguardando, após certo período o processo A deixa sua região crítica dando liberdade
para que o processo B entre na sua respectiva região crítica. No caso acima seria
impossível haver uma condição de corrida pois nunca mais de um processo acessará
sua região crítica simultaneamente.
Para o esquema acima funcionar corretamente deveremos, segundo
Tanenbaum, obedecer a quatro axiomas:
I. Dois processos jamais podem estar simultaneamente dentro de suas regiões críticas.
II. Nenhuma suposição pode ser feita a respeito de velocidades ou do número de
CPUs.
III. Nenhum processo executando fora de sua região crítica pode bloquear qualquer
processo.
8
IV. Nenhum processo deve ser obrigado a esperar eternamente para entrar em sua
região crítica. (Tanembaum,Andrew S., Sistemas Operacionais Modernos 4ª Edição,
pagina 83)
9
5. EXCLUSÃO MÚTUA
que um outro processo o desperte. A chamada Wake-Up por sua vez, tem como
parâmetro o processo a ser despertado.
O exemplo utilizado por Tanenbaum para mostrar como essa técnica pode ser
usada é no problema do produtor-consumidor.
Dois processos compartilham de um buffer de tamanho fixo comum. Um deles, o
produtor, insere informações no buffer, e o outro, o consumidor, as retira
dele. O problema surge quando o produtor quer colocar um item novo no buffer, mas
ele já está cheio. A solução é o produtor ir dormir, para ser desperto quando o
consumidor tiver removido um ou mais itens. De modo similar, se o consumidor quer
remover um item do buffer e vê que este está vazio, ele vai dormir até o produtor
colocar algo no buffer e despertá-lo.
5.3 Semáforos
De maneira resumida, consiste em uma variável utilizada para controlar o acesso a
recursos compartilhados. Tem a função de sincronizar o uso de recursos em grande
quantidade. Possui também a funcionalidade de contar o número de recursos ainda
disponíveis no sistema. Essa técnica foi concebida como uma proposta para
contabilizar o número de Wake-ups armazenados para um uso posterior. Existem dois
tipos de semáforos. O semáforo geral, também conhecido como Counting Semaphore,
é utilizado para controlar acessos a um determinado recurso com número finito de
instâncias. Este pode possuir qualquer valor inteiro não negativo. Diferentemente do
semáforo geral, o semáforo binário, ou mutex, é utilizado exclusivamente para a
realização da exclusão mútua. Este por sua vez, só pode possuir os valores 0 e 1.
11
5.4 Monitores
Monitores são uma versão de nível alto dos semáforos, tirando a
responsabilidade do programador e a entregando para o compilador. Os monitores
funcionam de uma maneira similar, porém diferente dos semáforos
REFERÊNCIAS