Proteção de variáveis globais Flashcards
Qual o grande problema com as variáveis globais em threads?
É que pode ocorrer race condition.
Quais são as necessidades de uma programação concorrente para ter uma consistência de dados?
Ter uma exclusão mútua
O que é exclusao mútua? Como pode ser feita e no que ela ajuda?
Exclusão mútua é permitir o acesso exclusivo de um processo à uma varíavel global. Ela ajuda nos problemas de selção crítica Ela pode ser feita dos seguintes modos: Desabilitar as interrupções Variáveis especiais do tipo lock Alternância de execução
Propriedades seção crítica regras
Regra 1 – Exclusão mútua
– Dois ou mais processos não podem estar simultaneamente em uma seção crítica
• Regra 2 – Progressão
– Nenhum processo fora da seção crítica pode bloquear a execução de um outro processo
• Regra 3 – Espera limitada
– Nenhum processo deve esperar infinitamente para entrar em uma seção crítica
• Regra 4 - Processamento
– Não fazer considerações sobre o número de processadores, nem de suas velocidades relativas
Ao obter exclusão mútua podemos desabilitar interrupções, qual o problema disso?
Desabilita as interrupções de todo o sistema operacional, não é uma boa opção
Isso só funciona bem em sistemas pequenos e dedicados
O que é MUTEX?
É muito utilizado para resolver problemas de seção crítica.
Tem uma variável do tipo mutex que recebe Lock e Unlock
- Ao acessar a seção critica ele ativa o Lock
- Não deseja utiliza mais a seção crítica então dá o Unlock
O bloqueio e desbloqueio é feito pelo mesmo processo
Quais primitivas são necessárias no MUTEX
Lock e Unlock
Sleep e WakeUp (Sinalização)
O que é Semaforo?
O semáforo é composto por um inteiro e uma fila de processos
Somente duas operaçoes são permitidas P (decrementa o valor do semáforo. Se valor zero, o processo é posto para dormir) e V ( Se o semáforo estiver com o valor zero e existir algum processo adormecido, um processo será acordado. Caso contrário, o valor do semáforo é incrementado)
Primitiva P e V são realizadas por diversos processos
Semáforo X Mutex
Semáforo orgraniza os processos, tem uma estrutura (fila).
Mutex deixa mais livre
MUTEX faz o bloqueio e desbloqueio de um mesmo processo
Semáforo coloca os processos em uma estrutura e gerencia esse estrutura, a primitiva P e V podem ser realizadas por diferentes processos
Problema de semáforo
Serialização de processos.
Tu determina uma ordem pra ele, não tem dinamicidade
O que é deadlock?
É quando dois ou mais processos ficam bloqueados, ficam a espera de um evento que nunca vai acontecer
Acontece muitas vezes quando há solução errada para o problema de seção crítica
Condições para ocorrer deadlock
Quatro condições devem ser satisfeitas simultaneamente:
– Exclusão mútua:
• Todo recurso ou está disponível ou está atribuído a um único
processo
– Segura/espera:
• Os processos que detém um recurso podem solicitar novos recursos
– Recurso não-preemptivo:
• Um recurso concedido não pode ser retirado de um processo por
outro
– Espera circular:
• Existência de um ciclo de 2 ou mais processos cada um esperando
por um recurso já adquirido (em uso) pelo próximo processo no ciclo
O que é seção crítica? Qual o problema com ela?
É a parte do código que os processos acessam uma variável global.
Garantir que quando um processo está executando a seção crítica, nenhum outro entre nela
CAS e TSL do mutex
CAS: Compare and Store
Copia o valor de uma posição de memória para um registrador interno e escreve nela o valor 1
TSL: Test and Set Lock
Lê o valor de uma posição de memória e coloca nela um valor não zero