Você está na página 1de 5

Itabera, 20 de setembro de 2014.

Curso: Sistemas de Informao Disciplina: Sistemas Operacionais


Professor: Khyquer Ronaldy de Oliveira Camargo
Acadmico(a): Alan Ferreira Costa
Jacyelle Vieira Peres


Regio Crtica

Esta parte do programa, cujo processamento pode levar ocorrncia de
condies de corrida, denominada regio crtica ou seo crtica. Se
pudermos arranjar as coisas de forma que no seja nunca permitido que dois
ou mais processos estejam processando suas sees crticas correspondentes
ao mesmo tempo, poderemos evitar a ocorrncia das condies de corrida.
O problema : como evitar as condies de corrida? A questo chave
para evitar problemas em situaes onde existe compartilhamento de recursos
(memria, arquivo, etc) evitar que mais de um processo acesse o dado
compartilhado ao mesmo tempo => geralmente, consideraremos 2 processos
apenas? Excluso mtua de execuo: uma forma encontrada para se ter
certeza de que se um processo estiver usando uma varivel ou um arquivo
compartilhados, os demais sero impedidos de fazer a mesma coisa?
Apesar do esquema descrito acima evitar a ocorrncia das condies de
corrida, ele no suficiente para permitir que processos paralelos cooperem
correta e eficientemente no uso de recursos compartilhados. necessrio que
quatro condies sejam atendidas para que tenhamos uma boa soluo para o
problema:
dois ou mais processos no podem estar simultaneamente dentro de
suas regies crticas correspondentes.
nenhuma considerao pode ser feita a respeito da velocidade relativa
dos processos, ou a respeito do nmero de processadores do sistema.
Sistemas Operacionais
nenhum processo que esteja rodando fora de sua regio crtica pode
bloquear a execuo de outro processo.
nenhum processo pode ser obrigado a esperar indefinidamente para
entrar em sua regio crtica.
Estratgias de solues => consideram excluso mtua com espera
ocupada => quando um processo entra em sua regio crtica, nenhum outro
processo pode entrar em sua regio crtica correspondente.

A soluo mais simples para tal problemas obtida fazendo com que
cada processo iniba as interrupes logo aps seu ingresso em uma regio
crtica, habilitando-as outra vez imediatamente antes de deix-la. Com as
interrupes inibidas, o processo no poder ser interrompido por exceder o
tempo de processamento concedido a ele. Como o processador s pode ser
chaveado entre processos atravs de interrupes de tempo, com as
interrupes inibidas no haver chaveamento. Ento, uma vez inibidas as
interrupes, o processo pode examinar e atualizar a memria compartilhada,
sem se preocupar com a eventual interveno de outro processo em seu
processamento.
Inibir interrupo uma funo til, se s puder ser realizada dentro do
kernel, no sendo apropriada para servir como mecanismo para
implementao de excluso mtua de execuo entre processos de usurios.
Como segunda tentativa de implementao de excluso mtua de
execuo, vamos examinar uma soluo implementada por software.
Considere a existncia de uma nica varivel compartilhada (varivel de
travamento), cujo valor seja inicialmente 0. Quando um processo desejar entrar
em sua regio crtica, ele deve primeiro testar a varivel de travamento. Se ela
for 0, o processo muda seu valor para 1 e entra na regio crtica. Se o valor da
varivel j for 1, o processo deve esperar que ele volte a 0, antes de entrar na
regio crtica. Nesta soluo, o valor da varivel de travamento em 0 significa
que no h nenhum processo executando a sua regio crtica, e o valor em 1
significa que algum processo est executando sua regio crtica.
Infelizmente esta idia incorre na mesma falha. Suponha que um
processo leia a varivel de travamento e verifique que seu valor 0. Antes que
ele possa atualiz-lo para 1, ocorre uma interrupo, e outro processo posto
para rodar. Tal processo encontra a varivel de travamento em 0, atualiza seu
valor para 1 e entra na sua regio crtica. Ocorre que o processo interrompido
guardou em seu contexto o valor 0 para a varivel de travamento, de modo
que, quando ele for reativado, atualizar seu valor para 1 e executar sua
regio crtica. Observe ento que dois processos podero estar executando
suas regies crticas correspondentes ao mesmo tempo.
Uma terceira forma de abordar a questo da excluso mtua o trecho
de um programa escrito em C:

while (TRUE) {
while (turn != 0) /* espera */
regiao critica ( );
turn = 1;
regiao nao-critica ( );
}
while (TRUE) {
while (turn != 1) /* espera */
regiao critica ( );
turn = 0;
regiao nao-critica ( );
}
A varivel inteira turn, inicialmente em 0, estabelece de quem a vez de
entrar na regio crtica. Primeiramente, o processo 0 inspeciona turn, encontra
seu valor em 0 e entra em sua regio crtica. O processo 1 tambm encontra
turn em 0, entrando em um loop, que testa continuamente o valor de turn,
aguardando que ele se torne igual a 1. O teste contnuo do valor de uma
varivel, aguardando que ela assuma determinado valor denominado de
espera ocupada. A espera ocupada deve ser evitada, em razo de consumir
tempo de processador. Somente nos casos em que houver uma razo muito
forte para supor que a espera ser muito curta que devemos usar a espera
ocupada.
Quando o processo 0 deixar sua regio crtica, ele faz com que turn
assuma o valor 1, para permitir que o processo 1 entre em sua regio crtica.
Suponha que o processo 1 termine rapidamente a execuo de sua regio
crtica, fazendo com que ambos os processos estejam fora de suas regies
crticas, com turn igual a 0. O processo 0 executa seu loop rapidamente,
retornando sua seo no-crtica fazendo turn igual a 1, e voltando para o
incio do loop. Infelizmente ele no pode executar sua regio crtica, mesmo
com o processo 1 em seu trecho no-crtico, pois turn vale 1. Podemos concluir
que a estrita alternncia de processos executando suas regies crticas no
uma boa idia quando um dos processos muito mais lento que o outro.
Esta situao viola a condio 3 estabelecida acima, pois o processo 0
est sendo bloqueado por um processo que no est em sua regio crtica. Tal
soluo no vivel na prtica.
Combinando a idia de estabelecer a vez dos processos entrarem em suas
regies crticas, com a da varivel de travamento e com a de uma varivel de
tenso, um matemtico holands, T. Dekker, foi o primeiro a criar uma soluo
em software para o problema da excluso mtua (1965). Em 1981, G. L.
Petersen descobriu uma forma muito mais simples que a de Dekker de se obter
excluso mtua.
Antes de usar as variveis compartilhadas (ou seja, antes de entrar na
sua regio crtica), cada processo deve chamar enter_region, com seu prprio
nmero, 0 ou 1, como parmetro. Esta chamada vai fazer com que o processo
espere, se necessrio, at que seja seguro entrar na regio crtica. Quando ele
terminar a execuo da regio crtica, deve chamar leave_region, permitindo a
entrada do outro processo na regio crtica, se for o caso.
Vamos ver como esta soluo funciona. Inicialmente, nenhum processo
est executando sua regio crtica. Em seguida, o processo 0 chama
enter_region. Ele indica seu interesse em executar a regio crtica, setando seu
elemento do vetor interested, e fazendo turn igual a 0. Uma vez que o processo
1 no est interessado na execuo de sua regio crtica, ele sai
imediatamente do procedimento enter_region. Se o processo 1 chamar
enter_region, ele vai ficar preso nesta rotina at que interested [0] seja FALSO,
o que s ocorrer quando o processo 0 chamar leave_region.
Agora considere o caso de ambos os processos chamarem enter_region
quase simultaneamente. Ambos vo armazenar seus nmeros em turn. O
armazenamento que for feito por ltimo ser o que vai valer, sendo o primeiro
perdido. Suponha que o processo 1 armazene por ltimo, de maneira que turn
ser 1. Quando ambos os processos executarem o comando while, o processo
0 vai execut-lo zero vezes, e entrar em sua regio crtica. O processo 1 fica
em loop no while, no chegando a executar sua regio crtica.
Vamos examinar uma proposta que precisa de uma pequena ajuda do
hardware. Muitos computadores, especialmente aqueles projetados com o
propsito de suportar mltiplos processadores, possuem uma instruo bsica,
denominada TEST AND SET LOCKED (TSL) que funciona como descrito a
seguir.
Ela transfere o contedo de um endereo de memria para um
registrador, e depois armazena um valor no nulo em tal endereo. As
operaes de transferncia e de armazenamento so indivisveis nenhum
outro processador ou processo pode acessar a palavra antes que a execuo
da instruo tenha chegado ao fim. O processador que estiver executando a
instruo TSL, bloqueia o barramento de memria, de forma a no permitir que
nenhum outro processador tenha acesso memria at que termine a
execuo da instruo.
Para executar a instruo TSL, necessrio o uso de uma varivel
compartilhada, flag, para coordenar o acesso memria compartilhada.
Quando flag for igual a 0, qualquer processo pode faz-la igual a 1, atravs da
execuo da instruo TSL, e ento ler ou escrever na memria compartilhada.
Ao terminar o acesso memria, o prprio processo faz flag de volta a 0,
usando uma instruo bsica de MOVE.
Enfim, encontramos uma soluo simples e correta para o problema do
acesso a regies crticas. Antes de entrar em sua regio crtica, o processo
chama enter_region, a qual coloca o processo em espera at que seu ingresso
nela seja permitido. Quando isto ocorre, a sub-rotina termina sua execuo,
permitindo que o processo que a chamou entre em sua regio crtica. Ao
terminar a execuo desta, o processo chama leave_region, que armazena o
valor 0 em flag. A exemplo de todas as solues para o problema da regio
crtica, os processos devem chamar enter_region e leave_region nos
momentos apropriados. Se um dos processos trapacear nas chamadas,
deixando, por exemplo, de executar leave_region, a excluso mtua de
execuo das regies estar comprometida.
Tanto a soluo de Peterson quanto a baseada na instruo TSL so
corretas, mas ambas tm o defeito de usar a espera ocupada em suas
implementaes. Em essncia, o que estas solues fazem o seguinte:
quando um processo deseja entrar em sua regio crtica, ele verifica uma
condio para saber se sua entrada ou no possvel. Se no houver
possibilidade de executar um loop, at que lhe seja permitido entrar na regio
crtica.
Tal soluo, alm de gastar tempo de processamento, pode ter efeitos
colaterais indesejveis. Considere um computador que esteja executando dois
processos, um H com alta prioridade, e outro L, com baixa prioridade. As
regras de escalonamento so definidas de maneira que H rode sempre que
estiver no estado de pronto. Em determinado instante, com L executando sua
regio crtica, vai para o estado de pronto quando, por exemplo, uma operao
de entrada/sada solicitada por ele terminar. O processo H inicia ento a
execuo de um loop de espera ocupado, mas uma vez que L nunca
escolhido para rodar enquanto H estiver rodando, ele nunca vai ter chance de
sair de sua regio crtica, de forma que H vai permanecer eternamente no loop
de espera ocupada. Esta situao conhecida na literatura como problema da
prioridade invertida.
Um dos pares de primitivas mais simples para resolver este problema
o denominado SLEEP e WAKEUP. A primitiva SLEEP uma chamada de
sistema que bloqueia o processo que a chamou, isso , suspende a execuo
de tal processo, at que outro processo o acorde. A primitiva WAKEUP tem um
parmetro, o processo a ser acordado. Alternativamente, tanto SLEEP quanto
WAKEUP podem Ter um outro parmetro, um endereo de memria usado
para casar uma primitiva SLEEP com sua correspondente WAKEUP.
O chamado problema do produtor-consumidor, tambm conhecido como
problema do buffer limitado (bounded buffer), um bom exemplo do uso das
primitivas acima descritas. Neste problema, dois processos compartilham um
buffer de tamanho fixo. Um dos processos, o produtor, coloca informao no
buffer, e o outro, o consumidor, retira informao do buffer.










Referncias:

Equipe Brasil Escola, Brasil Escola.{online}. disponvel na Internet via
http://monografias.brasilescola.com/computacao/processos-solucoes-
software.htm. Arquivo capturado em 21 de set de 2014.

Cios Informtica. {online}. disponvel na Internet
via http://cioseducando.blogspot.com.br/2011/06/regioes-criticas-e-exclusao-
mutua.html
Arquivo capturado em 21 de set de 2014.

Fundamento da Computao. {online}. disponvel na Internet via
http://adswb.wordpress.com/2013/04/17/fundamentos-da-computaosistemas-
operacionais-2/ Arquivo capturado em 21 de set de 2014.

Rafael Oliveira Vasconcelos, {online}. disponvel na Internet via
http://rafaeloliveirav.wordpress.com/2009/03/19/threads-o-problema-dos-leitores-e-
escritores-implementado-em-c-%E2%80%93-regiao-critica-e-exclusao-mutua/
Arquivo capturado em 21 de set de 2014.

Você também pode gostar