slide 1 Capítulo 2 Processos e Threads Prof. Fernando Freitas Material adaptado de: TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 3ª edição. Disponível em: http://www.prenhall.com/tanenbaum_br
slide 2 Processos Computadores modernos Várias tarefas ao mesmo tempo Cada instante um programa Cada segundo vários programas Pseudoparalelismo
slide 3 O modelo de processo
slide 4 O modelo de processo Multiprogramação Troca rápidas Processos Não possui taxa uniforme Não possui taxa reproduzível Diferença processo x programa Fabricação de um bolo
slide 5 Criação de processos Eventos que causam a criação de processos: Inicialização de sistema. Execução de uma chamada de sistema de criação de processo por um processo em execução. Requisição do usuário para criar um novo processo. Inicialização de uma tarefa em lotes. Linux (fork), Windows (CreateProcess) Espaços de endereçamento iguais (Linux) Espaços de endereçamento diferentes (Windows)
slide 6 Término de processos Eventos que causam o término de um processo: Saída normal (voluntária). Saída por erro (voluntária). Erro fatal (involuntário). Cancelamento por outro processo (involuntário).
slide 7 Hierarquia de processos Pai cria um processo filho, processo filho pode criar seu próprio processo Formam uma hierarquia UNIX chama isso de grupo de processos Windows não possui o conceito de hierarquia de processos Todos os processos são criados iguais
slide 8 Estados de processos
slide 9 Estados de processos - Escalonamento
slide 10 Implementação de processos
slide 11 Implementação de processos
slide 12 Modelando a multiprogramação
slide 13 Exercícios 1. O que é pseudoparalelismo? 2. Podemos criar programas baseados somente no critério tempo? Justifique. 3. Cite os eventos que causam a criação de processos. 4. Cite os eventos que causam o término de processos. 5. Quais os estados de um processo? Comente.
slide 14 Vantagens: Uso do thread Compartilham espaço de endereçamento e dados São criadas e destruídas de forma mais rápida (até 100x) Permitem que atividades se sobreponham se houver muita E/S Muito úteis em sistemas com múltiplas CPU s Tornam possível manter a idéia de processos sequenciais e mesmo assim conseguem obter paralelismo
slide 15 Uso do thread Formatação do texto
slide 16 Uso do thread
slide 17 Uso do thread
slide 18 Uso do thread
slide 19 O modelo de thread clássico
slide 20 O modelo de thread clássico Multithread = Múltiplos threads por processo Threads distintos em um processo não são tão independentes quanto processos distintos Não há proteção entre threads Impossível Não é necessário Devem cooperar e não competir Cada thread tem sua pilha que armazena rotinas chamadas que ainda não retornaram
slide 21 O modelo de thread clássico
slide 22 O modelo de thread clássico
slide 23 O modelo de thread clássico Threads devem ser corteses Complicações Chamadas fork() alocação extra de memória Threads devem ser pensadas e projetadas com cuidado para funcionarem corretamente
slide 24 Pthreads = Padrão de threads definidos pelo padrão IEEE 1003.1c Threads POSIX
slide 25 Threads POSIX
slide 26 Exercícios 1. Quais as vantagens de utilizarmos threads? 2. O que são processos multithreads? Cite um exemplo. 3. Porque não há proteção entre threads? 4. O que são Pthreads?
slide 27 Espaço do usuário Implementando threads Pode ser implementado em SO que não suporte thread Cada processo tem sua própria tabela de threads Chaveamento mais rápido não envolve núcleo Vantagens Próprio algoritmo de escalonamento Desvantagem Falta de página bloqueia processo inteiro SO não sabe sobre thread
slide 28 Espaço do núcleo Implementando threads Única tabela de threads Núcleo pode executar uma nova thread quando a thread em execução for bloqueada Alto custo de criação e destruição de threads reciclagem.
slide 29 Implementando threads no espaço do usuário e no espaço do núcleo
slide 30 Implementações híbridas
slide 31 Ativações do Escalonador Objetivo imitar a funcionalidade dos threads de núcleo ganha desempenho de threads de usuário Evita transições usuário/núcleo desnecessárias Núcleo atribui processadores virtuais para cada processo deixa o sistema supervisor alocar threads para processadores Problema: Baseia-se fundamentalmente nos upcalls - o núcleo (camada inferior) chamando procedimentos no espaço do usuário (camada superior)
slide 32 Threads pop-up Chegada de uma mensagem = Criação de um novo thread para lidar com a mensagem Conhecido como thread pop-up Não possui história = criados rapidamente Vantagem: Latência menor entre chegada da mensagem e início do processamento
slide 33 Threads pop-up
slide 34 Convertendo o código monothread em código multithread Processo complicado. Problemas: Variáveis globais a um thread específico. Solução: Proibir o uso de variáveis globais Cada thread possui sua própria variável global privada Linguagens não possui declarações de variáveis intermediárias. Rotinas de bibliotecas não são reentrantes. Solução: Bit de proteção = elimina grande parte do paralelismo Tratamento de sinais Núcleo não sabe sobre threads = não pode tratar sinais corretamente Gerenciamento de pilha Núcleo não conhece threads = não consegue controlar transbordo de pilha
slide 35 Convertendo o código monothread em código multithread
slide 36 Convertendo o código monothread em código multithread
slide 37 Exercícios 1. Cite as vantagens e desvantagens de se implementar threads no espaço do usuário. 2. Cite as vantagens e desvantagens de se implementar threads no núcleo. 3. O que são ativações do escalonador? 4. O que são threads pop-up? 5. Cite duas dificuldades para converter códigos monothreads em multithreads.
slide 38 Condições de corrida OBS: Depuração de código pode ser inútil para detectar condições de corrida
slide 39 Regiões críticas Condições necessárias para evitar condições de corridas: Dois processos não podem estar simultaneamente dentro de suas regiões críticas. Nada pode ser afirmado sobre a velocidade ou sobre o número de CPUs. Nenhum processo sendo executado fora de sua região crítica pode bloquear outros processos. Nenhum processo deve esperar eternamente para entrar em sua região crítica.
slide 40
slide 41 Exclusão mútua com espera ociosa Propostas para obtenção de exclusão mútua: Desabilitando interrupções. Variáveis do tipo trava. Chaveamento obrigatório. Solução de Peterson. A instrução TSL.
slide 42 Desabilitando Interrupções Não é uma solução adequada pois: Perigoso dar este privilégio a usuários Problema com múltiplos processadores
slide 43 Variáveis do tipo trava Solução apresenta problema de condições de corrida
slide 44 Chaveamento obrigatório Não é uma boa ideia quando temos um processo mais lento envolvido Viola a regra 3
slide 45 Solução de Peterson
slide 46 A instrução TSL
slide 47 A instrução XCHG
slide 48 Espera ociosa Dormir e acordar Desperdício de CPU Pode ter efeitos inesperados Inversão de Prioridade Solução Bloqueio ao invés de espera ociosa
slide 49 O problema produtor-consumidor Problema: Bit de sinal perdido - Pode adormecer eternamente Bit de espera pelo sinal de acordar - Resolve para casos simples
slide 50 Semáforos
slide 51 Mutexes
slide 52 Exercícios 1. Defina condição de corrida. 2. Defina região crítica. 3. Cite e comente 3 soluções para exclusão mútua com espera ociosa. 4. Descreva o funcionamento do chaveamento obrigatório. 5. Descreva o funcionamento da instrução TSL. 6. Qual o problema de se trabalhar com espera ociosa. 7. De forma resumida, diga no que consiste o problema do produtor-consumidor.
slide 53 Mutexes em Pthreads
slide 54 Mutexes em Pthreads
slide 55 Mutexes em Pthreads (Continua)
slide 56 (Continuação) Mutexes em Pthreads
slide 57 Semáforos. Problemas: Cuidado! Controle de bloqueio por conta do programador Erro sutil pode por tudo a perder Monitores Monitores Somente um processo ativo por vez Compilador implemente exclusão mútua Programador precisa apenas converter regiões críticas p/ rotinas do monitor Solução está na introdução de variáveis condicionais (não são contadores)
slide 58 Monitores
slide 59 Monitores (Continua)
slide 60 (Continuação) Monitores
slide 61 Monitores
slide 62 Monitores
slide 63 Monitores
slide 64 Monitores Deixam a programação paralela menos sujeita a erros Problema: Conceito de programação O compilador deve conhecê-lo Semáforos Linguagens não apresenta semáforos Fácil inclusão Conclusão Semáforos x Monitores Semáforos: Nível muito baixo Monitores: Não são úteis Nenhum deles permite troca de informação entre máquinas. Devese buscar outra solução.
slide 65 Troca de mensagens Apresentam muitos problemas complexos e dificuldades de projeto que não ocorrem com semáforos ou monitores. Ex: Distinção entre nova mensagem e retransmissão Evitar ambiguidade em nomes de processos Autenticação (Evitar impostor) Copiar mensagens é mais lento do que realizar operações sobre um semáforo ou monitor Pode utilizar caixas postais ou utilizar a estratégia Rendezvous (Encontro marcado em francês) Bastante utilizada em sistemas de programação paralela.
slide 66 O problema produtor-consumidor com troca de mensagens
slide 67 O problema produtor-consumidor com troca de mensagens
slide 68 Barreiras Nenhum processo pode avançar p/ próxima fase até que todos os processos estejam prontos a fazê-lo Ex. de uso: Problema de Relaxação da física ou da engenharia
slide 69 Escalonamento Sistemas em lote: Escalonamento simples Sistemas multiprogramados: Escalonamento complexo Computadores pessoais Escalonamento não é tão importante. Servidores e estações de trabalho Escalonamento importante Escalonador deve se preocupar com uso eficiente da CPU
slide 70 Comportamento escalonamento-processo Dois tipos: Limitados pela CPU Limitados por E/S Evolução das CPU s Processos tendem a ficar limitados por E/S
slide 71 Comportamento escalonamento-processo
slide 72 Quando escalonar Escalonamento Criação de um novo processo Término de um processo Bloqueio de um processo Interrupção de E/S Algoritmos divididos em duas categorias Preemptivos Não preemptivos
slide 73 Categorias dos algoritimos de escalonamento Em lote. Interativa. Tempo real.
slide 74 Exercícios 1.Como funcionam as variáveis de condição? 2.O que são os monitores? 3.Cite as vantagens e desvantagens dos monitores sobre os semáforos. 4.Quais os principais problemas enfrentados pela troca de mensagem? 5.Porque nos computadores pessoais o escalomanento não é tão importante quanto nos servidores e estações de trabalho? 6.Em qual(is) situação(ões) deve ser tomada a decisão de escalonar um processo?
slide 75 Objetivos dos algoritmos de escalonamento
slide 76 Objetivos dos algoritmos de escalonamento Observações: Melhor ter juntos na memória alguns processos limitados pela CPU e outros por E/S, do que somente um destes tipos. Maior vazão, não significa necessariamente melhor tempo de retorno
slide 77 Escalonamento em sistemas em lotes Primeiro a chegar, primeiro a ser servido Vantagens: Fácil de entender e programar, justo Desvantagem: pode atrasar processos orientados a computação Tarefa mais curta primeiro Todas as tarefas devem estar disponíveis simultaneamente Próximo de menor tempo restante Versão preemptiva do anterior Permite bom desempenho para novas tarefas curtas
slide 78 Tarefa mais curta primeiro Média 14 min Média 11 min
slide 79 Escalonamento em sistemas interativos Escalonamento por chaveamento circular. Escalonamento por prioridades. Filas mútiplas. Próximo processo mais curto. Escalonamento garantido. Escalonamento por loteria. Escalonamento por fração justa.
slide 80 Escalonamento por chaveamento circular
slide 81 Escalonamento por prioridades
slide 82 Escalonamento em sistemas de tempo real Podem ser: Estáticos Decisão é tomada antes de iniciar a execução Dinâmico Decisão é tomada durante a execução
slide 83 Política x Mecanismo Problema O escalonador raramente faz a melhor escolha Solução: Mecanismo de escalonamento no núcleo, mas a política é estabelecida por parâmetros de um processo de usuário
slide 84 Escalonamento de threads (Continua)
slide 85 (Continuação)
slide 86 O problema do jantar dos filósofos Acesse o endereço a seguir para ver um exemplo prático: http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/sincronizacao.html
slide 87
slide 88
slide 89
slide 90
slide 91 O problema dos leitores e escritores
slide 92
slide 93 Exercícios 1. Diferencie vazão e tempo de retorno. 2. Um dos objetivos dos sistemas interativos é a proporcionalidade. O que vem a ser proporcionalidade? 3. O escalonador nem sempre toma as melhores decisões. Como melhorar isto? 4. Diferencie o funcionamento dos algoritmos: menor tempo restante e tarefa mais curta primeiro. 5. Como funciona o algoritmo de escalonamento round-robim. 6. Diferencie escalonamento por prioridade e escalonamento por filas múltiplas. 7. Quais os tipos de escalonamento de threads possíveis? 8. Descreva no que consiste a idéia básica envolvida no problema do jantar dos filósofos