Sistemas Operacionais Aula 6 Anderson L. S. Moreira anderson.moreira@recife.ifpe.edu.br http://dase.ifpe.edu.br/~alsm Curso de Análise e Desenvolvimento de Sistemas de Informação Recife - PE
O que fazer com essa apresentação Anderson Moreira Sistemas Operacionais Aula 6 junho de 11
Créditos Professor: Anderson L. S. Moreira Disciplina: Sistemas Operacionais Home-page: http://dase.ifpe.edu.br/~alsm Aula 6 mostra sincronização e comunicação entre processos 2/14
Agenda Introdução Aplicações concorrentes Especificação de concorrência em programas Problemas de compartilhamento de recursos Exclusão mútua Sincronização condicional Semáforos Monitores Troca de mensagens Deadlock
Aplicações Concorrentes Sincronização e comunicação entre processos Sincronização Processo gravador gravação leitura Processo leitor dado Buffer
Especificação de Concorrência em Programas Concorrência em programas Processo principal PARBEGIN Comando_1; Comando_2;.. Comando_n; PAREND Processo 1 Processo 2 Processo n Processo principal
Especificação de Concorrência em Programas X := SQRT (1024) + (35.4 * 0.23) - (302 / 7) PROGRAM Expressao; VAR X, Temp1, Temp2, Temp3 : REAL; BEGIN PARBEGIN Temp1 := SQRT (1024); Temp2 := 35.4 * 0.23; Temp3 := 302 / 7; PAREND; X := Temp1 + Temp2 - Temp3; WRITELN ('x = ', X); END.
Prob. de Compartilhamento de Recursos PROGRAM Conta_Corrente;.. READ (Arq_Contas, Reg_Cliente); READLN (Valor_Dep_Ret); Reg_Cliente.Saldo := Reg_Cliente.Saldo + Valor_Dep_Ret; WRITE (Arq_Contas, Reg_Cliente);.. END.
Prob. de Compartilhamento de Recursos Processo A Processo B X := X + 1; X := X - 1; Processo A Processo B LOAD x,ra LOAD x,rb ADD 1,Ra SUB 1,Rb STORE Ra,x STORE Rb,x
Condição de Corrida Exemplo de problema de sincronização: a impressora Funcionamento típico: 1 daemon (lpd) gerencia um diretório com N entradas, e 2 ponteiros IN (próxima entrada livre no diretório) e OUT (próxima entrada a imprimir) 2 processos A e B mandam impressões no mesmo tempo
Condição de Corrida Condição de Corrida (race condition): situação onde o resultado de algum procedimento depende da ordem em que os processos executaram. Altíssimos problemas de depuração/manutenção do código. Programa não determinístico.
Exclusão Mútua Exclusão mútua: garantia que apenas um processo acessa uma variável ou uma instrução. BEGIN.. Entra_Regiao_Critica; Regiao_Critica; Sai_Regiao_Critica;.. END.
Exclusão Mútua Soluções de hardware Desabilitação de interrupções BEGIN. Desabilita_Interrupcoes; Regiao_Critica; Habilita_Interrupcoes;. END. Região crítica: parte do programa que levará a corrida se for acessa por vários processos.
Exclusão Mútua Soluções de hardware Instrução Test-and-Set (TSL): Bloqueia o barramento de memória de forma a não permitir que nenhum outro processador acesse a memória até que seja concluída a instrução Test-and-Set (X,Y);
Exclusão Mútua Várias soluções podem ser via software entre elas: Algoritmo de Dekker Algoritmo de Peterson Algoritmo para exclusão mútua entre N processos
Proposta de Peterson #define FALSE 0 #define TRUE 1 #define N 2 //numero de processos int turn; int interested (N); //de quem é a vez? //todos os valores inicialmente 0 (FALSE) void enter_region (int process) { int other; other = 1- process; interested [process] = TRUE; turn = process; while (turn == process && interested [other] == TRUE) } void leave_region (int process) { interested [process] = FALSE; }
Sincronização Condicional PROGRAM Produtor_Consumidor_1; CONST TamBuf = (* Tamanho qualquer *); TYPE Tipo_Dado = (* Tipo qualquer *); VAR Buffer : ARRAY [1..TamBuf] OF Tipo_Dado; Dado Cont : Tipo_Dado; : 0..TamBuf; BEGIN Cont := 0; PARBEGIN Produtor; Consumidor; PAREND; END.
Sincronização Condicional PROCEDURE Produtor; BEGIN REPEAT Produz_Dado (Dado); WHILE (Cont = TamBuf) DO (* Nao faz nada *); Grava_Buffer (Dado, Cont); UNTIL False; END; PROCEDURE Consumidor; BEGIN REPEAT WHILE (Cont = 0) DO (* Nao faz nada *); Le_Buffer (Dado); Consome_Dado (Dado, Cont); UNTIL False; END;
Semáforos Exclusão mútua utilizando semáforos Sincronização condicional utilizando semáforos Existem outras versões clássicas como: Problema dos Filósofos Problema do Barbeiro Exercício: Implementar em alguma LP, os algoritmos do Filósofo e do Barbeiro
Semáforos Semáforo binário na exclusão mútua Processo deseja entrar na região crítica DOWN (S> 0) DOWN (S= 0) UP (S) - processo sai da região crítica Processo acessa a região crítica Libera processo da fila de espera Fila de espera de processos
Monitores Estrutura do monitor Declaração de variáveis globais Fila de entrada Monitor Procedimentos Pr oc. 1 Pr oc. 2 Pr oc. n Inicialização de variáveis
Monitores Estrutura do monitor com varáveis de condição Declaração de variáveis globais Fila de entrada Monitor Procedimentos Pr oc. 1 Pr oc. 2 Pr oc. n Condição C1 Condição C2 Condição Cn Inicialização de variáveis Filas de espera
Troca de Mensagens Transmissão de mensagem Processo transmissor Processo receptor Canal de comunicação SEN D RECEIVE
Troca de Mensagens Comunicação direta Processo A Processo B
Troca de Mensagens Comunicação indireta Processo A Processo B Mailbox ou Port
Deadlock Espera circular Processo A Processo A solicita o Recurso 2 Recurso 1 alocado ao Processo A Recurso 2 Recurso 1 Processo B Recurso 2 alocado ao Processo B Processo B solicita o Recurso 1
Deadlock Condições necessárias Exclusão mútua Espera por recurso Não-preempção Espera circular Mecanismos Prevenção Detecção Correção
Dúvidas? Anderson Moreira Sistemas Operacionais Aula 6 junho de 11
Não percam no próximo episódio! Gerencia de processador e escalonamento; E muito mais! Dúvidas?