sistemas operacionais 6º semestre aula 6 prof. carlos vinícius [email protected] serviÇo...
TRANSCRIPT
Sistemas Operacionais6º Semestre
Aula 6
Prof. Carlos Viní[email protected]
SERVIÇO NACIONAL DE APRENDIZAGEM COMERCIALFACULDADE DE TECNOLOGIA SENAC PELOTAS
Introdução
o Programa executado por apenas um processo é dito de programa sequencialo Existe apenas um fluxo de controle
o Programa concorrente é executado por diversos processos que cooperam entre si para realização de uma tarefa (aplicação)o Existem vários fluxos de controle o Necessidade de interação para troca de informações
(sincronização)
2
Introdução
o Emprego de termos o Paralelismo real: só ocorre em máquinas
multiprocessadoraso Paralelismo “aparente” (concorrência): máquinas
monoprocessadoraso Execução simultânea versus estar “em estado de
execução” simultaneamente
3
Programação Concorrente
o Composta por um conjunto de processos sequenciais que se executam concorrentemente
o Processos disputam recursos comunso e.g.: variáveis, periféricos, etc...
o Um processo é dito de cooperante quando é capaz de afetar, ou ser afetado, pela execução de outro processo
4
Motivação para Programação Concorrente
o Aumento de desempenho:o Permite a exploração do paralelismo real
disponível em máquinas multiprocessadoraso Sobreposição de operações de E/S com
processamentoo Facilidade de desenvolvimento de aplicações
que possuem um paralelismo intrínseco
5
Desvantagens da Programação Concorrente
o Programação complexao Aos erros “comuns” se adicionam erros
próprios ao modeloo Diferenças de velocidade relativas de
execução dos processoso Aspecto não determinístico
o Difícil depuração
6
Especificação do paralelismo
o Necessidade de especificar o paralelismo definindo:o Quantos processos participarãoo Quem fará o queo Dependência entre as tarefas (Grafo)
o Notação para expressar paralelismoo fork/wait (fork/join)o parbegin/parend
7
Fork/Wait
8
Processo B Processo C
Processo A
fork B;fork C;
...wait C;
wait B;
Bloqueado
Parbegin/Parend
o Comandos empregados para definir uma sequência de comandos a serem executados concorrentemente
o A primitiva parend funciona como um ponto de sincronização (barreira)
9
Processo BProcesso C
Processo A
ParbeginTarefa B;Tarefa C;Parend
Bloqueado
Comentários Gerais
o Primitivas de mais alto nível para descrição do paralelismo do tipo parbegin/parend podem ser traduzidas por pré-compiladores e/ou interpretadores para primitivas de mais baixo nível
o Processos paralelos podem ser executados em qualquer ordemo Duas execuções consecutivas do mesmo
programa, com os mesmos dados de entrada, podem gerar resultados diferenteso Não é necessariamente um erro
o Possibilidade de forçar a execução em uma determinada ordem10
O problema do compartilhamento de recursos
o A programação concorrente implica em um compartilhamento de recursoso Variáveis compartilhadas são recursos
essenciais para a programação concorrenteo Acessos a recursos compartilhados devem ser
feitos de forma a manter um estado coerente e correto do sistema
11
Exemplo: relação produtor-consumidor (1)
o Relação produtor-consumidor é uma situação bastante comum em sistemas operacionais
o Servidor de impressão:o Processos usuários produzem “impressões”o Impressões são organizadas em uma fila a
partir da qual um processo (consumidor) os lê e envia para a impressora
12
Exemplo: relação produtor-consumidor (1)
13
P1
P2
Pn
PC
Produtores
Consumidor
Exemplo: relação produtor-consumidor (2)
o Suposições:o Fila de impressão é um buffer circularo Existência de um ponteiro (in) que aponta
para uma posição onde a impressão é inserida para aguardar o momento de ser efetivamente impressa
o Existência de um ponteiro (out) que aponta para a impressão que está sendo realizada
14
Exemplo: relação produtor-consumidor (2)
15
5 4 3 2 1
P1
Pd
outinP2
Exemplo: relação produtor-consumidor (3)
o Sequência de operações:o P1 vai imprimir; lê valor de in (5); perde
processadoro P2 ganha processador; lê valor de in (5);
insere arquivo; atualiza in (6)o P1 ganha processador; insere arquivo (5);
atualiza in (7)o Estado incorreto:
o Impressão de P1 é perdidao Na posição 6 não há uma solicitação válida
de impressão
16
Exemplo: relação produtor-consumidor (3)
17
outin
7 6 5 4 3 2 1
P1
Pd
P2
O problema da seção crítica
o Corrida (race condition)o Situação que ocorre quando vários
processos manipulam o mesmo conjunto de dados concorrentemente e o resultado depende da ordem em que os acessos são feitos
o Seção crítica:o Segmento de código no qual um processo
realiza a alteração de um recurso compartilhado
18
Necessidade da programação concorrente
o Eliminar corridaso Criação de um protocolo para permitir que
processos possam cooperar sem afetar a consistência dos dados
o Controle de acesso a seção crítica:o Garantir a exclusão mútua
19Exit_section
Entry_section
Seção crítica
Propriedades para exclusão mútua
o Regra 1 - Exclusão mútuao Dois ou mais processos não podem estar
simultaneamente em uma seção críticao Regra 2 - Progressão
o Nenhum processo fora da seção crítica pode bloquear a execução de um outro processo
o Regra 3 - Espera limitadao Nenhum processo deve esperar infinitamente
para entrar em uma seção críticao Regra 4
o Não fazer considerações sobre o número de processadores, nem de suas velocidades relativas20
Obtenção da exclusão mútua
o Desabilitação de interrupçõeso Variáveis especiais do tipo locko Alternância de execução
21
Desabilitação de Interrupções
o Não há troca de processos com a ocorrência de interrupções de tempo ou de eventos externos
o Desvantagens:o Poder demais para um usuárioo Não funciona em máquinas
multiprocessadoras (SMP) pois apenas a CPU que realiza a instrução é afetada (violação da regra 4)
22
Seção crítica
CLI ;Desliga interrupções
STI ;Ativa interrupções
Variáveis do tipo lock
o Criação de uma variável especial compartilhada que armazena dois estados:o Zero: livreo 1: ocupado
o Desvantagem:o Apresenta Race conditions
23
While (lock==1);lock=1;
lock=0;
Seção crítica
Alternância
o Desvantagemo Teste contínuo do valor da variável
compartilhada provoca o desperdício do tempo do processador (busy waiting)
o Viola a regra 2 se a parte não crítica de um processo for muito maior que a do outro
24
while (TRUE) { while (turn!=0); critical_section(); turn=1; non_critical_section();}
while (TRUE) { while (turn!=1); critical_section(); turn=0; non_critical_section();}
Implementação de mecanismos para exclusão mútua
o Algorítmica:o Combinação de variáveis do tipo lock e
alternância (Dekker 1965, Peterson 1981)o Primitivas:
o Mutexo Semáforoso Monitor
25
Mutex
o Variável compartilhada para controle de acesso a seção crítica
o CPU são projetadas levando-se em conta a possibilidade do uso de múltiplos processos
o Inclusão de duas instruções assembly para leitura e escrita de posições de memória de forma atômica.o CAS: Compare and Store
o Copia o valor de uma posição de memória para um registrador interno e escreve nela o valor 1
o TSL: Test and Set Locko Lê o valor de uma posição de memória e coloca
nela um valor não zero26
Primitivas lock e unlock
o O emprego de mutex necessita duas primitivas
27
enter_region: tst register,flagcmp register,0jnz enter_regionret
leave_region: mov flag,0ret
lock(flag);
unlock(flag);Seção crítica
Primitivas lock e unlock: problemas (1)
o Busy waiting (spin lock)o Confiar no processo (programador)
o Fazer o lock e o unlock corretamenteo Inversão de prioridades
28
lock(m)
lock(m)
unlock(m)
Outros processos
Troca de processo
Bloqueado fazendobusy wait
Primitivas lock e unlock: problemas (2)
o Solução:o Bloquear o processo ao invés de executar
busy waitingo Baseado em duas novas primitivas
o sleep: Bloqueia um processo a espera de uma sinalização
o wakeup: Sinaliza um processo
29
Semáforos
o Mecanismo proposto por Dijkstra (1965)o Duas primitivas:
o P (Proberen, testar)o V (Verhogen, incrementar)
o Semáforo é um tipo abstrato de dados:o Um valor inteiroo Fila de processo
30
Implementação de Semáforos
o Primitivas P e V
o Necessidade de garantir a atomicidade nas operações de incremento (decremento) e teste da variável compartilhada s.valoro Uso de mutex
o Dependendo dos valores assumidos por s.valoro Semáforos binários: s.valor = 1o Semáforos contadores: s.valor = n31
P(s): s.valor = s.valor - 1 Se s.valor < 0 { Bloqueia processo (sleep); Insere processo em S.fila; }
V(s): s.valor = s.valor + 1 Se S.valor <=0 { Retira processo de S.fila; Acorda processo (wakeup); }
Semáforos X Mutex
o Primitivas lock e unlock são necessariamente feitos por um mesmo processoo Acesso a seção crítica
o Primitivas P e V podem ser realizadas por processos diferentes o Gerência de recursos
32
Troca de Mensagens
o Primitivas do tipo mutex e semáforos são baseadas no compartilhamento de variáveiso Necessidade do compartilhamento de
memóriao Sistemas distribuídos não existe memória
comumo Novo paradigma de programação
o Troca de mensagens o Primitivas
o send e receiveo RPC (Remote Procedure Call)
33
Primitivas send e receive (1)
o Diferentes comportamentos em função da semântica das primitivas send e receive
o Funcionamento básico:
34
Processo BProcesso A
send(dst, msg)
Bloqueado recv(src, msg)
Processo BProcesso A
recv(src, msg)
Bloqueado send(dst, msg)
Primitivas send e receive (2)
o Bibliotecas de comunicaçãoo e.g. sockets, MPI, PVM, etc.
o Grande variedade de funçõeso Ponto a pontoo Em grupoo Primitivas para testar status e andamento de
uma comunicaçãoo Diferentes semânticas
o Bloqueanteo Não bloqueanteo Rendez vous
35
Remote Procedure Call (1)
o Base de comunicação do DCEo Composto por :
o núcleo executivo (run time)o Interfaces para a geração de aplicações
(Interface de programação)36
Remote Procedure Call (2)
o Linguagem própria para descrever funções (chamada/definição)
o Compilador (rpcgen) para gerar stubs e ligar com programa aplicativo
o Comunicação é toda gerada pelo run-time de forma transparente37
Call S
Send
Cliente Servidor
Recv
Unpack
return
Pack Pack
SendRecv
UnpackStub (cliente) Stub (servidor)
Run timewait
Call S return
Deadlock
o Situação na qual um, ou mais processos, fica impedido de prosseguir sua execução devido ao fato de cada um estar aguardando acesso a recursos já alocados por outro processo
38
Condições para ocorrência de Deadlocks (1)o Para que ocorra um deadlock quatro condições
devem ser satisfeitas simultaneamente:
o 1. Exclusão mútua:o Todo recurso ou está disponível ou está
atribuído a um único processo
o 2. Segura/espera:o Os processo que detém um recurso
podem solicitar novos recursos
39
Condições para ocorrência de Deadlocks (2)o 3. Recurso não preemptível:
o Um recurso concedido não pode ser retirado de um processo por outro
o 4. Espera circular: o 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
40
A
R1 R2
B
solicitação
em uso
em uso
solicitação
Estratégias para tratamento de deadlockso Ignoraro Deteção e recuperação
o Monitoração dos recursos liberados e alocados
o Eliminação de processoso Impedir ocorrência cuidando na alocação de
recursoso Algoritmo do banqueiro
o Prevenção (por construção)o Evitar a ocorrência de pelo menos uma das
quatro condições necessárias
41