Sistemas Operacionais

Documentos relacionados
Sistemas Operacionais

Sistemas Operacionais

Sistemas Operacionais II

Sistemas Operacionais

Fundamentos de Sistemas Operacionais

Comunicação entre Processos

Sistemas Operacionais. Condição de corrida e Região crítica

Sistemas Operacionais

Sistemas Operacionais. Comunicação entre processos

Sistemas Operacionais: Sincronização entre processos

Concorrência. Condições de Corrida. 5a. Tentativa. Dificuldades: Sincronização de Processos (2) Aula 11 Profa. Patrícia Dockhorn Costa

Revisão Ultima aula [1/2]

Sistemas Operacionais Concorrência. Carlos Ferraz Jorge Cavalcanti Fonsêca

Unidade III Gerência de Processos

Sincronização e comunicação entre entidades de processamento. Mutex Volnys Bernal 1. Tópicos. Exclusão Mútua (mutex) Exclusão Mútua (Mutex)

Programação Concorrente Locks

Sistemas Distribuídos Aula 5

Comunicação entre processos

Sincronização de Processos (2)

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação

Exclusão Mútua (mutex)

Sincronização e Comunicação

Comunicação entre processos (2)

LabSO Gerência de Processos. Retrospectiva da aula passada... Na aula passada... Na aula passada...

Escalonamento. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 28

Sincronização e Comunicação de/entre Processos. Na Aula Anterior... Nesta Aula. Comunicação entre Processos. Pipes 07/09/2016

Sistemas Operacionais

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação

Sincronização de Processos (2)

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

Aula 6: Comunicação entre processos. Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela

Sistemas Operacionais. Prof. André Y. Kusumoto

Sistemas Operacionais. Prof. André Y. Kusumoto

Tipos de Soluções (cont.)

Fundamentos de Sistemas Operacionais

Estrutura deste arquivo.. Comunicação Interprocesso Parte 1 de 2 - Cap. 2. Introdução 1 CONDIÇÕES DE CORRIDA

DCA-108 Sistemas Operacionais

Notas da Aula 5 - Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais

Trincos Lógicos: Implementações. Trincos lógicos: Propriedades

Capítulo 3. Programação Concorrente. Conteúdo. Objetivos. Recordando. Recordando. Objetivos de sistema operacional. DCA-108 Sistemas Operacionais

Alocação de Recursos. Introdução. Sistemas de Tempo Real: Introdução. Modelo de Recursos. Modelo de Recursos. Modelo de Recursos

Alocação de Recursos. Introdução. Sistemas de Tempo Real: Introdução. Modelo de Recursos. Modelo de Recursos. Modelo de Recursos

Sistemas Operacionais

Sistemas Distribuídos Aula 7

Escalonamento. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

PROCESSOS. Sistemas Operacionais. Vinícius Pádua

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Sistemas Operacionais Aula 6

Sistemas Operacionais

Sincronização de Processos (1) Mecanismos de busy wait

TAREFAS COORDENAÇÃO ENTRE TAREFAS AULA 09 Sistemas Operacionais Gil Eduardo de Andrade

Sincronização e Comunicação entre Processos. Sincronização e Comunicação Volnys Bernal 1. Agenda

INTRODUÇÃO AOS SISTEMAS OPERACIONAIS SEMANA 13

Sistemas Operacionais

Programação Concorrente. Prof. Hugo Vieira Neto

Processos O conceito de processos é fundamental para a implementação de um sistema multiprogramável. De uma maneira geral, um processo pode ser entend

Programação concorrente (processos e threads)

Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização

Execução Concorrente

Sincronização e comunicação entre processos

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 5. Implementação de Exclusão Mútua

Concorrência entre Processos

Sistemas Operacionais

Sistemas Operacionais

Sistemas Operacionais

SSC0640 Sistemas Operacionais I

Sistemas Operacionais

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

Sistemas de Tempo-Real. Acesso exclusivo a recursos partilhados

Sistemas Operacionais

Inversão de prioridades

OO Engenharia Eletrônica

Mecanismos de Sincronização com Variáveis Compartilhadas

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 12 - Threads e Concorrência em Java

Problema dos Leitores/Escritores

( ) ( ) Auto Avaliação F ( ) M ( ) D ( ) Seqüência: Sistemas Operacionais - UCSAL Professor : Marco Antônio C. Câmara Exercícios - Dia 20/04/2011

SOP Sistemas Operacionais Módulo 04: Processo

Sistemas de Entrada e Saída

6. Mostre os principais modelos de organização interna de um sistema operacional.

Sistemas Operacionais. BSI / UAB 2013 Hélio Crestana Guardia

Modelos de Programação de Tempo Real

Fundamentos de Sistemas Operacionais

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 11 - Threads e Concorrência

Introdução a Programação Concorrente. Aula 02. Prof. André Luis Meneses Silva

Sistemas Operacionais Aula 7

Fundamentos de Sistemas Operacionais

Sistemas de Tempo-Real. Acesso exclusivo a recursos partilhados

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 4. Comunicação e Sincronização de Processos

LICENCIATURA EM COMPUTAÇÃO. Resenha Livro Sistemas Operacionais 4ª edição Capítulo quatro: Gerencia do processador

Variância dos Tempos de Resposta

Sistemas Operacionais

Tipos de Soluções (cont.)

Programação Concorrente e Paralela. Noemi Rodriguez

Aula 2: Tipos de Sistemas Operacionais. Instituto Federal da Bahia Campus Salvador INF009 - Sistemas Operacionais Profª Flávia Maristela

Sistemas Operacionais. Concorrência

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 6. Primitivas de Sincronização

UFRJ IM - DCC. Sistemas Operacionais I. Unidade II Concorrência

Multiprocessadores & Multicomputadores

Transcrição:

Introdução Sistemas Operacionais Sincronização de processos Aula 08 Em sistemas multiprogramados há interação entre processos para comunicação, que pode ser feita via compartilhamento de memória/arquivos evitar inconsistências de acesso compartilhado executar de ações de forma ordenada e determinística Concorrência Processos (threads) podem afetar a execução ou serem afetadas por outro(a) Programação concorrente assíncrona Atividades podem ser interrompidas sem aviso prévio e de forma não determinística Dois problemas abordados: Compartilhamento de dados (sincronização para acesso a dados) Coordenação de atividades (sincronização de controle) Sistemas Operacionais I 2 Site de companhia área Condição de corrida (race condition) Sistema web para reserva de assentos em voo Vários clientes remotos, via browser, acessam de forma concorrente o trecho de código abaixo Uma thread para cada requisição de usuário (servidor web multithreaded) Situação onde o resultado final depende da ordem em que processos (threads) são executados Ocorre quando há acesso compartilhado em leitura-escrita ou escrita A ordem de execução é afetada pelo escalonamento int reservaassento() { int n; FUNCIONA? Considerar duas situações: 1. execução paralela (hardware multicore) 2. execução concorrente Exemplo: reserva de assentos em avião int reservaassento() { int n; Sistemas Operacionais I 3 Sistemas Operacionais I 4

Exemplo: reserva assentos em avião Seção crítica e exclusão mútua 1 4 4 1 n 22C. Mas é se acontecesse isso n 22C. n 23D Sistemas Operacionais I 5 2 3 P 2 2 3 P 2. n 22C Resulta em dois passageiros no mesmo assento. Seção crítica Trecho de código que não pode ser executado por dois ou mais processos simultaneamente sob pena de inconsistência de dados Gera condição de corrida em acessos em escrita a recursos compartilhados Exclusão mútua Consiste em garantir que se um processo está usando um recurso compartilhado os outros processos estão impedidos de fazê-lo Como garantir? Criando mecanismos para exclusão mútua. Entrar na SC entra na seção crítica sai da seção crítica P 2 sai da seção crítica Seção crítica (SC) P 2 Sair da SC P 2 tenta entrar Bloqueado na seção crítica Sistemas Operacionais I 6 O problema do assento de avião revisitado Propriedades para mecanismos de exclusão mútua int reservaassento() { int n; <Entrar na SC> <Sair da SC> P 2 1 <Entrar na SC> 4 n 22C 3 5 <Sair da SC> (estado apto ou bloqueado) <Entrar na SC> (estado bloqueado) <Sair da SC> n 23D Sistemas Operacionais I 7 6 Exclusão mútua Dois ou mais processos não podem estar simultaneamente na seção crítica Progressão Um processo fora da seção crítica não pode impedir outro de entrar nela Espera limitada Um processo não pode ficar esperando eternamente para entrar na seção crítica Suposições Nenhuma suposição pode ser feita sobre a velocidade relativa de execução dos processos, nem de número de processadores Processo ou thread Sistemas Operacionais I 8

Como implementar primitivas de exclusão mútua? Desabilitação de interrupções Com suporte de hardware Baseado em habilitação/desabilitação de interrupções Instruções atômicas (test-and-set e swap) Sem suporte de hardware, i.é, em software puro Variáveis do tipo trava (lock) Algoritmo de Dekker Algoritmo de Peterson Algoritmo de Lamport Procedural Baseado em suporte por compiladores (monitores) Contexto de INF01142 Contexto de INF01151 Mecanismo em hardware (instruções do processador) Só há troca de contexto com a ocorrência de interrupções de hardware Conclusão de E/S, violação de proteção, temporização CLI; Desliga interrupções Seção crítica STI; Ativa interrupções Problemas: Poder demais para um usuário!! Risco de perda de eventos Não funciona em multiprocessadores (só que realiza CLI é afetada) Não funciona em multicore (o outro core ainda pode executar o mesmo código) Sistemas Operacionais I 9 Sistemas Operacionais I 10 Variáveis do tipo trava (lock) Também chamada de MUTEX ( MUTual Exclusion) Instruções especiais Mecanismo em software Uso de uma variável compartilhada que armazena dois estados Livre e ocupado while (flag == 1); flag = 1; flag = 0 Seção crítica Problema: Viola a propriedade de exclusão mútua Condição de corrida na primitiva de entrada Solução: Fazer com que o while e a atribuição sejam feitas de forma indivisível com auxílio do hardware. Sistemas Operacionais I 11 Mecanismo em hardware Processadores são projetados para uso em ambientes de programação concorrente Instruções assembly para leitura e escrita em posições de memória de forma atômica (indivisível). SWAP: swap (a, b) Executa a permutação de valores Compare and Store: cas r1, mem Copia a posição de memória para um reg. interno e escreve o valor 1 nela Test and Set Lock: tst registrador, mem Lê o valor de uma posição de memória e coloca nela um valor não zero Intel x86 possuem a instrução assembly XCHG Três versões: xchg reg, reg xchg reg, mem xchg mem, reg Sistemas Operacionais I 12

Uso de TSL para implementar variáveis do tipo trava (lock) Inversão de prioridades A. Carissimi -18-sept.-17 Solução baseada em instruções especiais Variável para indicar uso da seção crítica (livre:0; ocupado 0) Duas primitivas: lock(flag) e unlock (flag) lock_t flag=0; lock(flag); Seção crítica unlock(flag); entrada_seçao: tst register,flag cmp register, #0 jne entrada_seção ret saida_seção: mov flag, #0 ret Problemas: Inversão de prioridade Desperdício de tempo de processamento (spinlock ou trava giratória) Travamento, se não houver interrupção de tempo (livelock) Uma thread de mais baixa prioridade impede a progressão de uma thread de mais alta prioridade Menos prioritário Mais prioritário lock(m) Troca de processo/thread unlock(m) lock(m) Para piorar: Outros processos/threads Situações indesejadas: Bloqueado ou fazendo busy wait (até quando?) thread ou processo Sistemas Operacionais 13 Sistemas Operacionais I 14 Soluções para inversão de prioridade O problema da espera ativa Teto para prioridade (priority ceiling) Aumento da prioridade de uma thread para um valor pré-determinado sempre que ela adquirir uma trava (lock) Teto deve ser maior que a prioridade da maior thread Na liberação (unlock) a thread retorna a sua prioridade original Herança (priority inheritance) A prioridade da thread que detém a trava é elevada ao nível da thread mais prioritária que solicita o recurso Elevação da prioridade só ocorre se houver risco de conflito Na liberação (unlock) a thread retorna a sua prioridade original Espera ativa ou busy wait Ficar testar testando continuamente se a variável de entrada (flag) foi liberada Desperdício de tempo de processamento Solução: Bloquear o processo (thread) até que alguém libere a seção crítica Oferecido por primitivas mais elaboradas que fazem sleep: bloqueia um processo a espera de um recurso* Executado no lock quando o recurso não estão disponível wakeup: desbloqueia o processo que esperava por um recurso Executado no unlock, na liberação do recurso, quando há alguém a espera * Recurso (caso particular) = seção crítica Sistemas Operacionais I 15 Sistemas Operacionais I 16

Uma nova versão para lock e unlock Semáforos Funciona? lock_t flag=0; lock(flag); Seção crítica unlock(flag); lock: tst register,flag cmp register, #0 jze entra call sleep jmp lock entra: ret unlock: mov flag,#0 call wakeup ret O problema: Não prevê como memorizar o sinal de acordar Condição de corrida Situação: - executa o lock, entra na seção crítica e perde o processador antes de liberar. -P 2 executa o lock e perde o processador depois do JNZ e antes do CALL -Estava indo dormir, mas ainda não dormiu (não está na fila dos dorminhocos ) - retoma a execução, faz o unlock, mas não libera P 2 porque ele ainda não está na fila. -P 2 retoma execução, vai dormir (CALL), e perde o sinal de acordar Proposto por Dijkstra (1965) Mecanismo para contar o número de sinais de acordar para uso futuro Semáforo é um tipo abstrato de dados: Um valor inteiro: contabiliza o número de sinais de acordar Fila: processos que esperam sinal de acordar associado a este semáforo Duas primitivas: P (Proberen, testar) similar ao sleep V (Verhogen, incrementar) similar ao wakeup Disponibilizadas para usuários (programas aplicativos) Introduzidos a primeira vez em Algol 68 com os nomes down e up. Sistemas Operacionais I 17 Sistemas Operacionais I 18 Primitivas P(s) e V(s) Tipos e empregos de semáforos Primitiva P: decrementa o valor inteiro e testa se menor que zero Sim: processo é posto para dormir (sleep) sem continuar a operação P Não: segue adiante Primitiva V: incrementa o valor inteiro e verifica se tem processos esperando no semáforo Sim: um é escolhido para continuar a operação P que iniciou previamente Não: segue adiante P(s): s.valor = s.valor 1; se s.valor < 0 { Insere processo P em s.fila Bloqueia processo P (sleep); V(s): s.valor = s.valor + 1 se s.valor <=0 { Retira um processo P de s.fila; Acorda processo P (wakeup); IMPORTANTE: atentar para as seções críticas na implementação de P(s) e V(s). As ações são feitas de forma indivisível para evitar condições de corrida Dependendo dos valores assumidos por s.valor Semáforos binários: s.valor = 1 Semáforos contadores: s.valor = n Emprego: Exclusão mútua: semáforos binários Controle de recursos: semáforos contadores Sincronização entre processos Garantir que um processo pode prosseguir após uma condição se tornar verdadeira Muito mais sobre semáforos (e outras primitivas) em INF01151 Sistemas Operacionais II É isto que diferencia de travas (locks) Sistemas Operacionais I 19 Sistemas Operacionais I 20

Na prática o que se tem é Leituras complementares Seções críticas são pequenas Apenas a ação de ler-modificar a variável compartilhada Sistemas com um processador Emprega a técnica de habilitar e desabilitar interrupções para ações do núcleo Supõe que o programador do núcleo tem todo cuidado e é responsável Sistemas com mais de um processador/core Emprega a técnica de mutex com suporte a hardware (instruções indivisíveis e travamento de acesso concorrente a posições de memória) Deixa ocorrer a espera ativa Aposta é que no outro processador/core será escalonado o processo ou a thread que vai liberar o acesso a seção crítica Usuários empregam semáforos para sincronização (acesso a dados e/ou controle) A. Tanenbaum. Sistemas Operacionais Modernos (3 a edição), Pearson Brasil, 2010. Capítulo 2: seções 2.3.1 a 2.3.7 A. Silberchatz, P. Galvin; Sistemas Operacionais. (7 a edição). Campus, 2008. Capítulo 6 (seções 6.1, 6.2, 6.4, 6.5 e 6.7) R. Oliveira, A. Carissimi, S. Toscani; Sistemas Operacionais. Editora Bookman 4 a edição, 2010 Capítulo 3 (seções 3.1 a 3.7 e 3.10) Sistemas Operacionais I 21 Sistemas Operacionais I 22 Mas, espera ativa nem sempre é um problema O caso Missão Mars pathfinder: robô sojourner Em multiprocessadores (multicore) o busy wait pode ser interessante Há outro processador para liberar o recurso O custo de chaveamento pode não compensar (relação com o tamanho da seção crítica) Porém viola a regra sobre fazer suposições sobre processadores Possibilidade: primitiva trylock Faz busy wait por um período de tempo, se durante esse período o mutex não tiver sido liberado bloqueia (sleep) O programador escolhe entre trylock e lock Problema é dimensionar o período de tempo Compromisso entre o tamanho da seção crítica, tempo de chaveamento de contexto e tempo estimado de espera O problema: A sonda, depois de algum tempo da missão iniciou, de forma não determinística, a fazer resets e se autoinicializar. A cada reset, os dados coletados e não transmitidos eram perdidos. Sistemas Operacionais I 23 Sistemas Operacionais I 24

O problema do robô sojourner Thread 1: controle do barramento (alta prioridade) Transferência de dados de controle em um barramento de informações Thread 2: transmissão de dados (média prioridade) Thread 3: coleta de dados meteorológicos (baixa prioridade) Coleta dados meteorológicos e os publica no barramento de informações lock ( bus); Watch dog (hardware) preempção preempção lock ( bus); RESET Sistemas Operacionais I 25 T 1 T 2 T 3