Você está na página 1de 6

Concorrência

 Ato de disputa/rivalidade de um “bem” por 2 ou


mais “agentes” com mesmo objetivo em comum.
CONCORRÊNCIA  Mercado: 2 ou mais lojas disputam clientes.
 Monopólio
FIJ  Quais os problemas?
Sistemas Operacionais
Prof. Mauricio Reis

1/23 2/23

Concorrência Concorrência
 Multiprogramação  Ambiente que admite a execução paralela ou
 Processos (cap. 3) concorrente de vários processos
 Sub-processos  Ocorrem eventos em que mais de um processo
requisita um mesmo recurso.
 Threads (cap. 4)
 O recurso não pode ser distribuído para mais de
 Fluxo de instruções independentes de um programa
um processo ao mesmo tempo
 Facilitam execução paralela de atividades
 Providências devem ser tomadas de forma a evitar
concorrentes dentro de um processo inconsistências que venham a prejudicar a execução
dos processos.
NOTA: processo ~ thread

3/23 4/23

Mauricio Reis - FIJ www.mreis.info 1


Concorrência Concorrência
 Estrutura do Sistema Operacional  Problemas inerentes a concorrência
 O próprio sistema operacional é implementado como  É difícil para o sistema operacional administrar de
um conjunto de processos concorrentes forma ótima a alocação de recursos.
 Problemas inerentes a concorrência  O uso de interrupções não pode ser previsto;
 Velocidade de execução de um processo não pode  O uso de memória não pode ser previsto;
ser prevista, pois depende:  O comportamento de demais processos em execução não
 Atividade de outros processos; podem ser previstos.
 Forma como o SO trata as interrupções;
 Estratégias de escalonamento adotadas.

 O compartilhamento por variáveis globais é


extremamente inseguro e inconsistente.
5/23 6/23

Exemplo Exemplo
 P1 invoca echo() e é interrompido imediatamente após
a conclusão da função input(); suponha que x tenha
sido o caractere digitado, que agora está armazenado
na variável in.
 P2 é despachado e também invoca echo(); suponha
que y seja digitado (in recebe y), sendo então exibido
no dispositivo de saída.
 P1 retoma a posse do processador; o caracter exibido
não é o que foi digitado (x), pois ele foi sobreposto por
y na execução do processo P2.
 Conclusão: o caracter y é exibido 2 vezes.

 Essência do problema: o compartilhamento da variável


7/23
global in. 8/23

Mauricio Reis - FIJ www.mreis.info 2


Concorrência Concorrência
 Ação necessária: Alguns conceitos
 Proteger os dados compartilhados (variáveis,  Região crítica [Deitel 5.2.2]
arquivos e outros recursos globais).  Parte do código que implementa o acesso a um
 Promover o acesso ordenado (controle de acesso) recurso compartilhado.
aos recursos compartilhados
 Exclusão mútua [Deitel 5.2]
 Sincronização de processos
 Mecanismo que impede o uso simultâneo de um
recurso compartilhado.

9/23 10/23

Deadlock Condições de DeadLock [Deitel 7.5]


 STARVATION (inanição) [Deitel 7.1]: 1 ou mais processos  Espera circular por recursos.
estão bloqueados para ganhar acesso a um recurso e
por causa disso não progridem.  Exemplo:
 O processo “A” espera pelo processo “B”,
DEADLOCK [Deitel 7.1]: forma de Starvation que espera pelo processo “C”,
 Situação onde 2 ou mais processos estão esperando
que espera pelo processo “A”. W
por um evento que só pode ser gerado por algum dos B C
mesmos processos em espera. processo
Ou seja:
 Cada processo de um conjunto em deadlock está
recurso Y Z
esperando por um recurso que foi entregue a outro
processo do mesmo conjunto. 11/23
A
12/23

Mauricio Reis - FIJ www.mreis.info 3


Condições de DeadLock [Deitel 7.5] Prevenção de Deadlocks [Deitel 7.7]
 Exclusão Mútua [Deitel 5.2]: processo solicita o Posse e Espera [Deitel 7.7.1]
recurso para uso de forma exclusiva.  Solução:

 Aquisição gradativa de recursos: processos  Alocação de todos os recursos necessários antes do


inicio dos processos.
possuem recursos enquanto esperam por
 Necessidade de exatidão no dimensionamento dos
recursos adicionais. recursos do sistema utilizados.
 Não preempção: quando os recursos não  Problemas:
puderem ser confiscados temporariamente para  Desperdício dos recursos do sistema.
serem alocados para outro processo.  Impossibilidade de alocação dinâmica de recursos.
 Risco de starvation.

13/23 14/23

Prevenção de Deadlocks Prevenção de Deadlocks


Não-preempção[Deitel 7.7.2] Espera Circular[Deitel 7.7.3]
 Solução:  Solução:
 Retirada do recurso de um processo quando for  Limitação da posse de um recurso por vez.
requisitado por outro processo.  Se um processo necessitar de outro recurso, deve
 Problemas: liberar qualquer recurso já alocado.
 Pode fazer o processo perder totalmente o  Problemas:
processamento realizado.  Restrição no grau de compartilhamento e
 Risco de starvation. processamento dos processos.

15/23 16/23

Mauricio Reis - FIJ www.mreis.info 4


Prevenção de Deadlocks Inibição de Interrupções
Exclusão Mútua Solução:
 Solução  Usa um par de instruções do tipo DI / EI

 Só é permitido a apenas 1 processo estar dentro de  DI = disable interrupt


sua região critica em um dado instante  EI = enable interrupt
 Nenhum processo que executa fora de sua região  O processo desativa todas as interrupções
crítica pode bloquear outro processo. imediatamente antes de entrar na região crítica.
 Soluções de Hardware [Deitel 5.5]  Reativação imediatamente depois da saída
 Inibição de interrupções [Deitel 5.5.1]  O processo na região crítica não pode ser interrompido
 Soluções de software com bloqueio  Acesso exclusivo aos dados compartilhados.
 Semáforos [Deitel 5.6]
 Monitores [Deitel 6.2]
17/23 18/23

Inibição de Interrupções Semáforos


Problemas:  Down(semáforo): testa se o valor do semáforo é maior
que zero
 É desaconselhável dar aos processos de usuário  Se for, o semáforo é decrementado e o processo continua
o poder de desabilitar interrupções  Caso contrário o processo é posto para dormir
 Up(semáforo): Incrementa o valor do semáforo
 Não funciona com vários processadores  Um up sobre um semáforo com processos dormindo resulta
em um processo dormindo a menos
 Inibir interrupções por um longo período de  O valor do semáforo não muda
tempo pode ter consequências danosas.  A operação de incrementar o semáforo e acordar um
processo é atômica
 Perda de sincronização com os dispositivos
periféricos Semáforos que assumem somente os valores 0 (livre) e 1
(ocupado) são denominados semáforos binários ou
 Aumento do tempo de resposta mutex
19/23 20/23

Mauricio Reis - FIJ www.mreis.info 5


Mutex Monitores
 Mutex (mutual exclusion) é um semáforo que só  Semáforos são primitivas para sincronização de baixo
nível.
pode assumir dois valores  Monitores são uma abstração de alto nível combinando
 Impedido (zero) 3 características:
 dados compartilhados;
 Desimpedido (um)
 operações sobre esses dados; e
 Manipulação com:  sincronização e escalonamento.
 Propriedades fundamentais de monitores:
 Mutex_lock()  apenas um processo pode executar o código do monitor a
 Testa o mutex e o coloca em impedido se estiver cada instante de tempo
desimpedido, bloqueia o processo caso contrário  exclusão mútua implícita é associada a cada monitor, através
de um monitor lock
 Mutex_unlock()  o lock deve ser adquirido para um processo "entrar" no
 Coloca o mutex em desimpedido monitor
21/23  ao sair do monitor, o lock é liberado 22/23

Monitores
 Introduz uma estrutura especial chamada
variável de condição [Deitel 6.2.1] com as seguintes
operações:
 wait(condição):
 libera o lock do monitor e coloca o proc. para dormir;
 quando o processo acorda, ele tenta re-adquirir o lock do
monitor imediatamente.
 signal(condição):
 acorda um dos processos que estão esperando pela
variável de condição;
 o processo que executa o signal sai do monitor
imediatamente;
 se nenhum processo estiver esperando, nada acontece;
 se mais de um estiver esperando, apenas um deles,
determinado pelo escalonador do S.O. (FIFO, por
exemplo), é acordado.
23/23

Mauricio Reis - FIJ www.mreis.info 6

Você também pode gostar