Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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).
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 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);
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.
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.
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;
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.