sincronização e comunicação entre processos - ime-uspadao/scep.pdf · escalonamento...

33
1 Sincronização e Comunicação entre Processos Adão de Melo Neto

Upload: hoangthuan

Post on 14-Dec-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

1

Sincronização e Comunicação

entre Processos

Adão de Melo Neto

2

MOTIVAÇÃO

3

INTRODUÇÃO Em um sistema multiprogramado (concorrente) os

processos alternam sua execução (ou seja, são

executados alternadamente pela UCP) segundo critério de

escalonamento estabelecidos pelo sistema operacional.

Processos concorrentes compartilham diversos recursos

do sistema, como arquivos, registros, dispositivos de

Entrada/Saída e áreas da memória.

4

INTRODUÇÃO O compartilhamento de recursos entre processos

pode ocasionar situações indesejáveis, tal como o

processamento incorreto de programas.

– Exemplo: o processo leitor pode ler quando o processo

gravador ainda não finalizou a gravação

Para evitar estas situações indesejáveis, os processos

concorrentes devem ter suas execuções sincronizadas,

a partir de mecanismos oferecidos pelo sistema

operacional.

5

ESPECIFICAÇÃO DA CONCORRÊNCIA (FORK E JOIN)

A primeira notação para a especificação da concorrência

em um programa foram os comandos FORK e JOIN,

introduzidos por Conway(1963) e Dennis e Van Horn(1966).

6

ESPECIFICAÇÃO DA CONCORRÊNCIA (FORK E JOIN)

O programa A começa a ser executado e, ao encontrar o

comando FORK, faz com que seja criado outro processo para

a execução do programa B, concorrentemente ao programa

A

O comando JOIN permite que o programa A sincronize-se

com o B, ou seja, quando o programa A encontrar o

comando JOIN, só continuará a ser processado após o

término da execução do programa B.

7

PROBLEMA DO COMPARTILHAMENTO DE RECURSOS

Os sistemas operacionais multiprogramáveis executam processos

concorrentemente. Desde que esses processos compartilham recursos

do sistema (variável na memória principal ou arquivo no disco, por

exemplo).

Isso pode ocasionar alguns problemas CASO tudo não seja feito da

maneira correta como veremos abaixo.

O programa abaixo atualiza (após o WRITE) o saldo bancário de um

cliente após um lançamento de débito ou crédito.

– O programa lê o registro do cliente no Arquivo Contas, lê o valor a ser

depositado ou retirado e, em seguida, atualiza o saldo no Arquivo de contas

(após o WRITE)

atualização

leitura

8

PROBLEMA DO COMPARTILHAMENTO DE RECURSOS

atualização

leitura

ARQUIVO CONTAS

Processo 01 Processo 02

débito crédito

Reg_Cliente

Vamos considerar que os dois processos possuem o código do

programa conta_corrente

9

PROBLEMA DO COMPARTILHAMENTO DE RECURSOS

Os dois PROCESSOS estão atualizando o SALDO de um mesmo

CLIENTE

– O processo 1 (do primeiro funcionário) lê o registro do cliente e

debita um valor no saldo do cliente;

– Antes de gravar o novo saldo do arquivo (com comando

write), o processo 2 (do segundo funcionário) lê o registro do

mesmo cliente e credita um valor no saldo do cliente;

Independentemente de qual dos processos atualize o saldo

primeiro no arquivo (com comando write), o dado gravado

estará inconsistente (como veremos).

atualização

leitura

10

PROBLEMA DO COMPARTILHAMENTO DE RECURSOS

PROCESSO 01 : READ registro de Antônio saldo = 500

PROCESSO 01 : DEBITA 50,00 500 - 50 = 450

ANTES do PROCESSO 01 fazer um WRITE (Arq_Contas, Reg_Cliente)

– PROCESSO 02 : READ registro de Antônio saldo = 500

– PROCESSO 02 : CREDITA 100,0 500+100 = 600

PROCESSO 01: WRITE (Arq_Contas, Reg_Cliente): saldo = 450

PROCESSO 02: WRITE (Arq_Contas, Reg_Cliente): saldo = 600

(SALDO FINAL ERRADO)

ARQUIVO CONTAS

Processo 01 Processo 02

débito crédito

Reg_Cliente

11

PROBLEMA DO COMPARTILHAMENTO DE RECURSOS

PROCESSO 01 : READ registro de Antônio saldo = 500

PROCESSO 01 : DEBITA 50,00 500 - 50 = 450

ANTES do PROCESSO 01 fazer um WRITE (Arq_Contas, Reg_Cliente)

– PROCESSO 02 : READ registro de Antônio saldo = 500

– PROCESSO 02 : CREDITA 100,0 500 +100 = 600

PROCESSO 02: WRITE (Arq_Contas, Reg_Cliente): saldo = 600

PROCESSO 01: WRITE (Arq_Contas, Reg_Cliente): saldo = 450

(SALDO FINAL ERRADO)

ARQUIVO CONTAS

Processo 01 Processo 02

débito crédito

Reg_Cliente

12

EXCLUSÃO MÚTUA (MUTEX)

OBJETIVO

– Evitar que dois ou mais processos acessem um mesmo recurso

(no exemplo anterior o arquivo contas) simultaneamente.

MECANISMO

– Enquanto o processo 01 estiver acessando um determinado

recurso e processo 02 deve aguardar o término da utilização do

recurso pelo processo 01.

REGIÃO CRÍTICA

– É a parte do código do programa onde é feito o acesso ao recurso

compartilhado é denominada região crítica.

EXCLUSÃO MÚTUA

– É garantir que os processos devem fazer acesso à região crítica de

forma sincronizada, ou seja, proibir que dois ou mais processos

entrem em suas regiões críticas ao mesmo tempo

13

EXCLUSÃO MÚTUA (MUTEX)

Região Crítica

Recurso compartilhado

REGIÃO CRÍTICA

É a parte do código do programa onde é feito o acesso ao recurso

compartilhado é denominada região crítica.

14

PROBLEMA DO COMPARTILHAMENTO DE RECURSOS (RESOLVIDO COM CONTROLE DE ACESSO A REGIÃO CRÍTICA )

PROCESSO 01 : READ registro de Antônio saldo = 500

PROCESSO 01 : DEBITA 50,00 500 - 50 = 450

PROCESSO 01: WRITE (Arq_Contas, Reg_Cliente): saldo = 450

PROCESSO 02 : READ registro de Antônio saldo = 450

PROCESSO 02 : CREDITA 100,0 450+100 = 550

PROCESSO 02: WRITE (Arq_Contas, Reg_Cliente): saldo = 550

(SALDO FINAL CORRETO)

ARQUIVO CONTAS

Processo 01 Processo 02

débito crédito

Reg_Cliente

15

DEADLOCK

16

DEADLOCK

DEFINIÇÃO

– É a situação em que um processo aguarda por um

recurso que nunca estará disponível ou um evento que

nunca ocorrerá.

– É conseqüência do compartilhamento de recursos

(dispositivos, arquivos e registros,etc) entre processos

concorrentes onde a exclusão mútua é exigida;

17

PROCESSO 01 ESTÁ COM RECURSO 01 E AGUARDA O RECURSO 02

PROCESSO 02 ESTÁ COM RECURSO 02 E AGUARDA O RECURSO 03

PROCESSO 03 ESTÁ COM RECURSO 03 E AGUARDA O RECURSO 04

PROCESSO 04 ESTÁ COM RECURSO 04 E AGUARDA O RECURSO 01

DEADLOCK É a situação em que um processo aguarda por um recurso

que nunca estará disponível ou um evento que nunca ocorrerá.

18

DEADLOCK

SITUAÇÕES SIMULTÂNEAS PARA QUE OCORRA UM

DEADLOCK

– Exclusão mútua: cada recurso (em uma região crítica)

só pode estar alocado a um único processo em um

determinado instante;

– Espera por recurso: um processo, além dos recursos

já alocados, pode estar esperando por outros recursos.

– Não preempção: um recurso não pode ser liberado de

um processo só porque outros processos desejam usar

o mesmo recurso;

– Espera circular: um processo pode ter de esperar por

um recurso alocado a outro processo e vice-versa.

19

DEADLOCK (espera circular)

Espera circular: um processo pode ter de esperar por um

recurso alocado a outro processo e vice-versa.

20

PREVENÇÃO DO DEADLOCK (É preciso garantir que uma das quatro condições necessárias para a

sua existência nunca se satisfaça)

Exclusão mútua: cada recurso só pode estar alocado a

um único processo em um determinado instante;

– Prevenção: a ausência da exclusão mútua acaba com o

problema do deadlock, porém gera os problemas já

apresentados com relação ao compartilhamento de recursos.

Espera por recurso: um processo, além dos recursos já

alocados, pode estar esperando por outros recursos.

– Prevenção: processos que já possuem recursos garantidos

não devem solicitar novos recursos.

21

PREVENÇÃO DO DEADLOCK (É preciso garantir que uma das quatro condições necessárias para a sua

existência nunca se satisfaça)

Não preempção: um recurso não pode ser liberado de um

processo só porque outros processos desejam usar o

mesmo recurso;

– Prevenção: permitir que um recurso seja retirado do processo no

caso de outro processo necessitar do mesmo recurso.

Espera circular: um processo pode ter de esperar por um

recurso alocado a outro processo e vice-versa. – Prevenção: é forçar o processo a ter apenas um recurso por vez

22

CORREÇÃO DEADLOCK

(o deadlock já ocorreu) SOLUÇÃO 1

– Eliminar um ou mais processos envolvidos no deadlock e liberar

os recursos. A escolha do processo a ser eliminado é feita,

normalmente, de forma aleatória ou com base em algum tipo de

prioridade

– MUITO UTILIZADO

SOLUÇÃO 2

– liberação de apenas alguns recursos alocados aos processos

para outros processos, até que o ciclo de espera termine.

– É necessário que o sistema possa suspender um processo, liberar

seus recursos e, após a solução do problema, retornar à execução

do processo, sem perder o processamento já realizado.

– Gera um OVERHEAD muito grande.

SOLUÇÕES PARA

EXCLUSÃO MÚTUA

23

EXCLUSÃO MÚTUA

É proibir que dois ou mais processos entrem em suas

regiões críticas ao mesmo tempo

24

SOLUÇÕES PARA EXCLUSÃO MÚTUA

SOLUÇÕES DE HARDWARE

– Desabilitar Interrupções

– Instrução test-and-set

SOLUÇÕES DE SOFTWARE

– Algoritmo de DEKKER

– Algoritmo de PETTERSON

25

SOLUÇÕES PARA EXCLUSÃO MÚTUA

Algoritmo de DEKKER

– Primeira solução de software que garantiu a exclusão mútua entre

dois processos sem a incorrência de problemas foi proposta pelo

matemático holandês T. Dekker.

Algoritmo de PETTERSON

– O algoritmo proposto por G. L. Peterson apresenta uma solução

para o problema da exclusão mútua entre dois processos que pode

ser facilmente generalizada para o caso de N processos.

26

SINCRONIZAÇÃO CONDICIONAL Situação onde o acesso ao recurso compartilhado exige a

sincronização de processos vinculado a uma condição de acesso.

EXEMPLO CLÁSSICO

Comunicação entre dois processos através de operações de gravação

e leitura em um buffer, onde processos geram informações (processos

produtores) utilizadas por outros processos (processos consumidores).

Os processos devem estar sincronizados a uma variável de

condição, de forma que um processo não tente gravar dados em um

buffer cheio ou realizar uma leitura em um buffer vazio.

27

MECANISMOS

(Exclusão Mútua e Sincronização Condicional)

SEMÁFOROS

– Mecanismos para implementação da exclusão mútua e

sincronização condicional

MONITORES

– Mecanismos para implementação da exclusão mútua e

sincronização condicional

TROCA DE MENSAGENS:

– Mecanismo de sincronização e comunicação entre processos

PROBLEMA

DO

PRODUTOR - CONSUMIDOR

LÓGICA DOS SEMÁFOROS

down (nome_do_semaforo)

região protegida

up(nome_do_semaforo)

* Quando feito um down se semaforo for 0 há um bloqueio

31

Armazena quantidade de

espaços preenchidos

No BUFFER

Armazena quantidade de

espaços vazios

No BUFFER

Se emptyCount =0

bloqueia a

produção de itens

Se fillCount =0

bloqueia a remoção

de itens

32

NO LINUX,

• BAIXAR O AQUIVO prod-cons-sem.c

•IR PARA PASTA /home/aluno/Downloads

•Executar os comandos baixo

33