Sei sulla pagina 1di 13

Exclus

o
Mtua
Henrique Andrade RGM: 1521229-7
Igor Prudncio Calado RGM: 1521344-7
Guilherme Cardozo dos Santos RGM: 1520520-7
Alan Reis Juvenal RGM: 1508972-0
Genilton Paixo da Cruz RGM: 1525359-7
Vitor Fernando Rosa RGM: 1534506-8
Cesar Augusto Costa de Souza RGM: 1506828-5
Henry Deus Falleiros RGM: 1513881-0

Sumrio
Excluso Mtua____________________________________________________3
Introduo_________________________________________________________3
Desabilitando Interrupes_______________________________________4
Variveis de impedimento________________________________________4
Alternncia obrigatria___________________________________________5
Soluo de Peterson_______________________________________________6
Instruo TSL______________________________________________________6
Problema Produtor e Consumidor________________________________7
Semforos__________________________________________________________7
Monitores__________________________________________________________9
Definio de Deadlock___________________________________________10
Concluso_________________________________________________________13

Excluso Mtua
Introduo
Quando dois processos, que executam paralelamente, necessitam acessar um
mesmo recurso do sistema operacional ao mesmo tempo, necessrio que se faa
um gerenciamento para que esses dois processos no entrem em conflito na tentativa
de utilizao do recurso, causando a condio de disputa, podendo resultar em uma
falha de sistema e mal funcionamento no software do qual o processo faz parte.
Visando a soluo deste problema, foi criado um procedimento que tem por
objetivo identificar a seo crtica de um processo, que parte do programa que
acessa os recursos compartilhados do sistema operacional. Atravs deste
procedimento, implementada a regra de que dois ou mais processos nunca podem
entrar em sua zona crtica ao mesmo tempo, evitando assim, que acessem ao mesmo
tempo recursos compartilhados do SO. A partir desta necessidade, criado o conceito
de excluso mtua.
Examinaremos vrias propostas para obter excluso mtua, de modo que
enquanto um processo esta ocupado executando em sua regio critica nenhum outro
processo entrara em sua regio critica e assim, evitando problemas.

Desabilitando Interrupes
A soluo mais simples fazer cada processo desativar todas as interrupes
imediatamente depois de ele entrar em sua regio crtica e reativ-las imediatamente
depois de ele sair dela. Com as interrupes desabilitadas, no pode ocorrer qualquer
interrupo de relgio. A CPU s alterna de um processo para outro como resultado de
interrupes de relgio ou de outras interrupes, no final das contas, com as
interrupes desligadas a CPU no alternara de um processo para outro. Assim, uma
vez que tenha desabilitado as interrupes, um processo pode verificar e atualizar a
memria compartilhada sem temer a interveno de outro processo.
Essa abordagem geralmente pouco atraente porque no aconselhvel dar
o poder de desativar interrupes a processo de usurio. Suponha que um deles tenha
feito isso e nunca mais as tenha ligado. Isso poderia ser o fim do sistema. Alm disso,
se o sistema multiprocessador (com duas ou mais CPUs), desabilitar as interrupes
afetara somente a CPU que executou a instruo desabilitar. As outras continuaro
executando e podem acessar a memria compartilhada. Por outro lado,
frequentemente e conveniente para o prprio kernel desativar interrupes pelo tempo
de algumas instrues enquanto ele est atualizando variveis ou listas. Se uma
interrupo ocorreu enquanto a lista de processos prontos, por exemplo, estava em
um estado inconsistente, poderiam ocorrer condies de corrida.
A concluso : desativar interrupes frequentemente uma tcnica til dentro
do sistema operacional em si, mas no apropriada como um mecanismo geral de
excluso mtua para processos de usurio.
A possibilidade de realizar excluso mtua desabilitando interrupes, mesmo
dentro do ncleo, est se tornando menor a cada dia em virtude do nmero crescente
de chips multincleo at em PCs populares. Dois ncleos j so comuns, quatro esto
presentes em mquinas sofisticadas e 8 ou 16 viro em breve. Em um sistema
multicore (multiprocessador), desabilitar as interrupes de uma CPU no impede que
outras CPUs interfiram nas operaes que a primeira CPU est executando.
Consequentemente, esquemas mais sofisticados so necessrios.

Variveis de impedimento
Como uma segunda tentativa, busquemos uma soluo de software. Considere
que haja uma nica varivel compartilhada (trava), inicialmente contendo o valor 0.
Para entrar em sua regio crtica, um processo testa antes se h trava. Se a trava for
0, o processo altera essa varivel para 1 e ento na regio critica. Se a trava j estiver
com o valor 1, o processo simplesmente aguardara at que ela se torne 0. Assim, um
0 significa que nenhum processo est em sua regio crtica e um 1 indica que algum
processo est em sua regio crtica.

Processadores possuem instruo de mquina que permite ler uma varivel e


armazenar o contedo em uma outra rea atribuindo um novo valor mesma varivel.
O processo utiliza a regio crtica atribu um valor a uma varivel
compartilhada.
Processos precisam continuamente se comunicar com outros processos. Isto feito
via IPC (Comunicao Entre Processos). J vimos como um processo passa
informao para o outro processo, atravs de send(message) e receive(message).
Precisamos, agora, garantir que um processo no invada o espao de outro quando
em atividades crticas. E, alm disso, garantir a sequncia das operaes entre os
processos comunicantes.
Desvantagem:
Ocorre condies de disputa no uso das variveis. 2 processos podero ler a
varivel ao mesmo tempo, e entraro em regio critica simultaneamente.
Infelizmente, essa ideia apresenta exatamente a mesma falha que vimos no
diretrio de spool.

Alternncia obrigatria
Fragmentos de programa controlam o acesso s regies crticas;
Cada processo recebe um nmero nico para uso da regio crtica. Uma
varivel de impedimento informar qual processo poder entrar em regio crtica.
Apenas o processo com o mesmo nmero pode entrar em regio crtica. O processo
que sair da regio crtica mudar a varivel para o prximo processo. Os processos
que desejam entrar em regio crtica tero esperas ociosas, testando a varivel de
impedimento constantemente (spin lock).
Limitaes dessa soluo: Todas as solues apresentadas utilizam espera
ocupada processos ficam em estado de espera (looping) at que possam utilizar a
regio crtica: Tempo de processamento da CPU ocasionar problemas de
desempenho; Determinadas threads podem ficar ocupadas (ex. prioridade );
Desvantagem:
O problema nesta soluo que os processos se alternem precisamente e isto
significa que o tempo dos processos devem ser exatamente iguais. Alm da
desvantagem do processo que sai da regio critica no poder mais retornar.

Soluo de Peterson
O algoritmo proposto por G. L. Peterson apresenta uma soluo para o
problema da excluso mtua entre dois processos que pode ser facilmente
generalizada para o caso de N processos. Similar ao terceiro algoritmo, esta soluo,
alm das variveis de condio que indicam se o processo pretende entrar na sua
regio crtica, introduz uma outra varivel para resolver os conflitos gerados pela
concorrncia entre processos.
Antes de acessar a regio crtica, o processo sinaliza esse desejo atravs da
varivel de condio, porm o processo cede o uso do recurso ao outro processo,
indicado pela varivel que indica de qual processo a vez de executar a regio crtica.
Em seguida, o processo executa um loop condicional como protocolo de entrada na
regio crtica. Neste caso, alm da garantia da excluso mtua, o bloqueio indefinido
de um dos processos no loop nunca ocorrer, j que a varivel que indica de qual
processo a vez de executar a regio crtica sempre permitir a continuidade da
execuo de um dos processos.

Instruo TSL
Quando mais de um processo ou threads querem acessar o mesmo local, com
uma memria compartilhada, necessrio procurar uma forma de fazer com que eles
jamais se encontrem dentro da memoria, para que nenhum erro ocorra. Uma das
diversas solues para o problema da condio de corrida a instruo TSL.
A funo da instruo TSL ler uma varivel de bloqueio lock ou qualquer
outra da memoria compartilhada para coordenar o acesso a essa memria, se 0 = a
Livre e se 1 = OCUPADO.
Por trabalhar junto com o hardware as instrues so escritas em uma
linguagem que lembra a linguagem assembly, sendo que as operaes de
armazenamento e leitura so indivisveis, ou seja, as interrupes no param o
processo. Durante o processo tambm, a instruo TSL bloqueia o barramento de
memria configurando lock = 1, para que no tenha nenhum acesso de outra CPU at
seu termino. O mtodo continuara a funcionar enquanto os processos processarem de
forma correta. Se um processo, por exemplo, no fizer a chamada para o TLS testar e
configurar o bloqueio, ele ainda poder entrar na regio critica (memoria
compartilhada).

Problema Produtor e Consumidor


O Produtor e o Consumidor (conhecido tambm como o problema do buffer
limitado) consistem em um conjunto de processos que compartilham um mesmo
buffer. Os processos chamados de Produtores colocam informao no buffer. E os
processos chamados de Consumidores retiram informao do buffer.
Este um problema comum em sistemas operacionais, que busca exemplificar,
situaes de impasse que ocorrem no gerenciamento de processos de um sistema
operacional.
Para controlar o acesso direto a essas variveis e termos sincronismos nas
operaes, necessrio a utilizao de semforos. Semforo uma varivel especial
protegida, que tem como funo o controle de acesso a recursos compartilhados em
um ambiente multitarefa. Com diversas variveis, podemos controlar os dados com
toda segurana.

Problemas:
O produtor insere em posio: Ainda no consumida;
O consumidor remove de posio: J foi consumida;
Espera ociosa X Escalonamento do processo X Uso CPU.

Soluo:
Excluso mtua (semforos).

Semforos
O semforo uma varivel que fica associada a um recurso compartilhado,
indicando quando este est sendo acessado por outro processo. Ela ter seu valor
alterado quando o processo entra e quando sai da regio crtica de forma que se
outro processo entrar em sua regio critica ele possa checar antes este valor para
saber se o recurso esta ou no disponvel. Quando o processo tiver seu acesso
impedido, ele ser colocado em uma fila de espera associada ao semforo
aguardando sua vez de utilizar o recurso. Todos os processos da fila tero acesso ao
recurso na ordem de chegada. O semforo pode ser usado tambm para implementar
sincronizaes condicionais. Isto consiste em um processo que necessita ser
notificado sobre a ocorrncia de um evento. Pode-se usar o semforo para notificar
este processo sobre a ocorrncia deste evento. Outro tipo de semforo usado

SEMFORO CONSUMIDOR onde ele pode informar ao processo se o buffer est


cheio ou est vazio.

Semforo Contador
Aquele que notifica os processos sobre o uso dos recursos. Sempre que um
processo usa um recurso qualquer, este semforo incrementado e sempre que um
processo liberar um recurso ele ser decrementado. Este semforo til para evitar
que um processo entre na regio crtica sem que hajam recursos disponveis no
sistema.
Passos para se implementar um semforo em C/C++ (Posix)
Incluir o header da biblioteca semaphore.
#include <semaphore.h>

Exemplos de Comando:
Criar o semforo, neste exemplo chamado de teste;
sem_t teste;

Inicializao do semforo
sem_init(&teste, 0, 0);

Funo para (decrementar/aguardar)


sem_wait(&teste);

Funo para (incrementar/liberar)


sem_post(&teste);

Funo para apagar o semforo aps a utilizao


sem_destroy(&teste);

O funcionamento do semforo bastante simples de ser compreendida, se wait


= 0 ele bloqueia, seno, libera o acesso. Quem estiver acessando, ou seja pegou o

wait = 1, entra na regio crtica e bloqueia, deixando wait =0, ao sair do processo,
libera incrementando o valor de wait = 0 para 1 , utilizando post.
Exemplo:

void thread1()
{

void thread2()
{

sem_wait(&teste);

sem_wait(&teste);

regiao_critica;

regiao_critica;

sem_post(&teste);
}

sem_post(&teste);
{

Monitores
Em computao concorrente, monitor uma tcnica para sincronizar duas ou
mais tarefas que compartilham um recurso em comum, geralmente um dispositivo de
hardware ou uma regio da memria. Com um modelo de concorrncia baseado em
monitores, o compilador ou o interpretador podem inserir mecanismos de excluso
mtua transparentemente em vez de o programador ter acesso s primitivas para tal,
tendo que realizar o bloqueio e desbloqueio de recursos manualmente.
Foi inventado por Per Brinch Hansen, originalmente implementado na
linguagem Concurrent Pascal e usada para estruturar a comunicao entre processos
na linguagem Solo.
O monitor consiste de um conjunto de procedimentos para permitir a
manipulao de um recurso compartilhado, uma trava de excluso mtua, as variveis
associadas ao recurso e uma invariante que define as premissas para evitar disputa
de recursos.
A forma de implementao domonitor j garante a excluso mtua na
manipulao dos seus dados internos.
Apenas um processo pode estar executando em um monitor. Qualquer outro
processo que tenha invocado o monitor bloqueado (esperando pela disponibilidade
do monitor).

Definio de Deadlock
Formalmente, Deadlock definido da seguinte forma: Um conjunto de
processos do Sistema Operacional est em situao de Deadlock se todo processo
pertencente ao conjunto estiver esperando por um evento que somente outro processo
desse mesmo conjunto poder fazer acontecer.

Por exemplo, a figura acima. Temos carros em quatro sentidos diferentes. Os


que esto no sentido "A" pedem espao para os que esto no sentido "B". Mas o
pedido negado. E em vez de liberar espao para os que esto no sentido "A", os que
esto no sentido "B" solicitam espao para os que esto no sentido "C". Mas o pedido
negado. E em vez de liberar espao para os que esto no sentido "B", os que esto
no sentido "C" solicitam espao para os que esto no sentido "D". Mas o pedido
negado. E em vez de liberar espao para os que esto no sentido "C", os que esto no
sentido "D" solicitam espao para os que esto no sentido "A". E assim, estamos em
um impasse, ou seja, em Deadlock.

Condies para ocorrncia de Deadlock


Assim, nenhum processo consegue executar recurso que precisa, ou liberar
recurso que est de posse, ou ser acordado, pois o recurso que precisa est ocupado.
Vale detalhar que recurso uma sequncia de eventos necessrios ao uso de
um processo, assim pode ser dispositivo ou qualquer item compartilhado.
So 4 condies necessrias para que um deadlock ocorra. So elas:

Excluso Mtua: Pelo menos um recurso deve ser alocado em modo no


compartilhado. Note que se recurso for compartilhado, ele no ficar preso a um

processo. Essa condio significa que um recurso s pode ser usado por um processo
de cada vez. Ou seja, se algum processo pede para usar o recurso e ele j est de
posse de outro processo, vai ter que aguardar em uma fila de espera.
Posse e Espera: Um processo deve estar de posse de pelo menos um recurso
e esperando para adquirir outros recursos, que esto com outros processos. Por isso,
o nome posse e espera.
Inexistncia de preempo: Significa que o sistema operacional no pode
remover o recurso do processo que tomou posse. S quem libera o recurso
processo que est de posse dele.
Espera circular: Deve existir um grupo de processos P1, P2, Pn de tal modo
que P1 est esperando um recurso de posse de P2 e este est esperando um recurso
de posse de P3 e assim sucessivamente at que o ltimo processo Pn est esperando
um recurso alocado para P1. Ou seja, existe uma espera circular.

As formas de tratamento de Deadlock:


Ignorar por completo: Utilizar o Algoritmo Avestruz que uma abordagem mais
simples. "Enterre a cabea na areia e finja que nenhum problema ocorrer.". Razovel
se deadlocks ocorram muito raramente. Essa abordagem no parece, mas coerente
j que tratamento de deadlock muito custoso e supondo que os usurios preferem
um deadlock ocasional a uma regra restringindo o sistema a um nico processo, e
assim um nico arquivo aberto, ou seja, um recurso de cada tipo.
Vale uma anlise do cenrio em que estamos e ento avaliar e ponderar entre
convenincia e correo. Sistemas Operacionais de propsito geral como Windows e
Unix adotam essa abordagem pois em caso de deadlock o usurio ter que abandonar
o processo. No gera tantos prejuzos quando comparados com sistemas de propsito
especficos que so de alto risco, como por exemplo, controladores de avies,
equipamentos mdicos, etc.;

Deteco e Recuperao:
Preempo: retirar um recurso de algum outro processo. Nesse mtodo, cabe
uma anlise da natureza do recurso;
Restaurao de Estado: armazenar pontos de verificao de processos
periodicamente para que esse estado salvo sirva para restaurar o processo se este
encontrado em estado de deadlock;
Eliminao de Processos: forma mais grosseira, mas mais simples de quebrar
um deadlock eliminar um dos processos no ciclo de processos em deadlock, assim
os outros processos conseguiro seus recursos. Para eliminar o processo, escolher
um que possa ser reexecutado desde o incio;

Evitar dinamicamente: alocao cuidadosa de recursos, avaliando a chance de


tal ao resultar ou no em deadlock;
Preveno: atacar uma das condies necessrias para se ter o estado de
deadlock. Segue como acontece cada um dos possveis ataques. Atacando:
Excluso Mtua (usar spool em tudo): recursos, como impressoras, podem
fazer uso de spool: - o daemon de impressora o nico que usa o recurso impressora;
- desta forma deadlock envolvendo a impressora eliminado. Nem todos os
dispositivos podem fazer parte de spool: Princpio: evitar alocar um recurso quando
ele no for absolutamente necessrio; tenta assegurar que o menor nmero possvel
de processos possa de fato requisitar o recurso;
Posse E Espera (requisitar inicialmente todos os recursos necessrios): exige
que todos os processos requisitem os recursos antes iniciarem, assim um processo
nunca tem que esperar aquilo que precisa. O problema dessa mordomia que podem
no saber quantos e quais recursos vo precisar no incio da execuo e assim
dimensionar recursos que outros processos poderiam estar usando. Uma variao
desse tratamento que o processo deveria desistir de todos os recursos para ento
requisitar todos os que so imediatamente necessrios;
No Preempo (retomar recursos alocados): esta uma opo invivel.
Considere um processo de posse da impressora, ento no meio da impresso esse
recurso passado a outro processo, e num instante futuro retorna a impressora a
fora;

Espera Circular: ordenao numrica dos recursos.


Existe tambm o cenrio de Deadlock sem envolvimento de recursos. Isso possvel
que dois processos entre em situao de deadlock se cada um estiver esperando que
o outro faa algo. Pode ocorrer com semforos quando cada processo executa um
down sobre dois semforos (mutx, outro qualquer), se executados em ordem errada
resulta em deadlock.

Concluso
Nesta pesquisa, relacionamos uma srie de tpicos que tratam das solues
possveis para a excluso mtua, que originada a partir de um problema chamado
condio de disputa, existente em sistemas multiprogramados modernos, que
executam vrios processos paralelamente, e estes concorrem sempre pelo uso da
CPU.

Potrebbero piacerti anche