Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Sistemas Operacionais Sistemas Operacionais –– Ciência da ComputaCiência da Computaççãoão Gerência de ProcessosGerência de Processos ThreadsThreads Prof. Humberto Brandão humberto@dcc.ufmg.br aula disponível no site: http://www.dcc.ufmg.br/~humberto/unifal/ Universidade Federal de Alfenas Departamento de Ciências Exatas versão da aula: 0.1 Threads • O conceito de processo, define que somente o prdefine que somente o próóprio prio processo tem acesso ao seu espaprocesso tem acesso ao seu espaçço de endereo de endereççamentoamento; • Esta questão é fundamental para seguransegurançça e a e consistência das aplicaconsistência das aplicaççõesões, de forma geral. • Contudo, frequentemente existemexistem situasituaçções em que ões em que éé desejdesejáável ter execuvel ter execuçções separadas acessando o mesmo ões separadas acessando o mesmo bloco de enderebloco de endereççosos na memória do computador. • Por questões de eficiência no compartilhamento de informações, ou para aproveitar melhor a ociosidade do processador. Threads • Assim como os processos, os threads possuemthreads possuem: – um contador de programacontador de programa que indicam qual é a próxima instrução a ser executada; –– Pilha de execuPilha de execuççãoão, que traz a história da execução do thread, para indicar todas as chamadas que ainda não obtiveram retorno; –– RegistradoresRegistradores, que indicam suas variáveis atuais de trabalho. Threads • Processos são utilizadas para agrupar recursos; • Threads são entidades escalonadas, podendo compartilhar recursos com outros threads irmãos; • As vezes, pelas características semelhantes, threads são denominados processos levesprocessos leves. • Comumente, encontramos o termo multithreadmultithread para descrever um sistema que permite múltiplos threads no mesmo processos; Threads (a) 3 threads, mas habitando 3 processos distintos; (b) 3 threads, habitando o mesmo processo; Threads • Threads distintos em um processo não são tão independentes quanto threads em processos distintos; • Compartilham as mesmas variáveis globais do processo, tendo “independência” apenas em suas variáveis armazenadas na sua própria pilha de execução; 2 Threads • Além de compartilhar o mesmo espaço de endereçamento, os threads compartilham o mesmo conjunto de arquivos abertos, processos filhos, etc... Estados do Thread Threads • Assim como um processo normal, um thread pode assumir vários estados distintos: – Em execução; – Bloqueado; – Pronto; – Finalizado; Operações com Threads Threads • Os processos normalmente se iniciam em um único thread; • Este por sua vez, pode criar quantos threads forem necessários, de acordo com a necessidade de sua aplicação; • A criação é através de um procedimento de biblioteca: thread_createthread_create Threads • Quando o thread finaliza seu trabalho, ele pode invocar a chamada thread_exitthread_exit; • Depois disso ele desaparece e não mais fará parte da fila dos processos escalonáveis, passando ao estado finalizado; • O thread também pode se bloquear para esperar outro thread terminar sua execução, através da chamada thread_waitthread_wait; 3 Threads • O thread pode desistir voluntariamente da utilização da CPU, para deixar outro thread executar. Este procedimento é feito através da chamada thread_yieldthread_yield; O Uso dos Threads O Uso dos Threads • Mas afinal.... – Qual é(são) a(s) razão(ões) de utilizarmos threads? O Uso dos Threads • 1ª razão: – Algumas vezes, a execução em paralelo de atividades, que poderiam ser implementadas sequencialmente, pode oferecer um ganho considerável de performance; – Exemplo: Navegadores. Ao carregar as imagens de um site... O Uso dos Threads • 2ª razão: – É muito mais rápido criar um thread do que criar um processo; – Em alguns sistemas, este procedimento chega a ser 100 vezes mais rápido; O Uso dos Threads • 3ª razão (talvez a principal delas): – Em muitas aplicações, ocorrem múltiplas atividades ao mesmo tempo; – O modelo de programação se torna bem mais simples quando decompomos o processo em vários threads para o gerenciamento de todas as atividades; 4 O Uso dos Threads – Um exemplo Editor de textos simples O Uso dos Threads – Um exemplo Editor de textos simples Um thread fica responsável por capturar a entrada do teclado O Uso dos Threads – Um exemplo Editor de textos simples Outro fica responsável pela atualização visual da aplicação. O Uso dos Threads – Um exemplo Editor de textos simples Outro pelo salvamento automático do documento. O Uso dos Threads – Um exemplo Editor de textos simples É possível que 3 processos gerenciem este editor de textos? O Uso dos Threads – Um exemplo Editor de textos simples É possível que 1 processo, com 1 thread gerencie este editor de textos? 5 O Uso dos Threads – Outro Exemplo Um servidor web utilizando o conceito de cache • Vamos imaginar um servidor web recebendo dezenas de requisições por segundo; O Uso dos Threads – Outro Exemplo Um servidor web utilizando o conceito de cache O thread despachante recebe as requisições e encaminha cada uma para um thread operário... O Uso dos Threads – Outro Exemplo Um servidor web utilizando o conceito de cache O thread operário consulta se a requisição está na cache das últimas páginas visitadas. Se não estiver, ela efetua acesso ao disco (mais lento). O Uso dos Threads – Outro Exemplo Um servidor web utilizando o conceito de cache Faz sentido cada thread operário invocar a chamada thread_exitthread_exit sempre que retornar uma requisição? Sim? Não? Por que? Implementação de Threads Nível de Usuário vs Nível Núcleo Implementação de Threads • Implementação a nníível de usuvel de usuááriorio Quais são as vantagens e as desvantagens? 6 Implementação de Threads • Implementação a nível de usuário: –– VantagensVantagens: • Podemos utilizar o recurso de threads, mesmo se o S.O. não suportar; • As operações são mais rápidas a nível de usuário, se comparadas com o nível de kernel; • Cada processo pode ter seu próprio algoritmo de escalonamento (customizado); Implementação de Threads • Implementação a nível de usuário: –– DesvantagensDesvantagens: • O usuário precisa garantir o funcionamento do sistema; • Cada thread precisa avisar o supervisor que está passando a sua vez. Implementação de Threads • Implementação a nníível de kernel (nvel de kernel (núúcleo)cleo) Quais são as vantagens e as desvantagens? Implementação de Threads • Implementação a nível de núcleo: –– VantagensVantagens: • Uma vez validado o algoritmo dentro do S.O., todos os processos podem utiliza-lo; • O tempo de ocupação na CPU fica melhor dividido se o kernel conhece todos os threads ativos; Implementação de Threads • Implementação a nível de núcleo: –– DesvantagensDesvantagens: • Operações são bem mais lentas a nível de kernel; • Cada processo fica sujeito a política de escalonamento do próprio sistema operacional; Implementação de Threads Modelo Híbrido 7 Referencia • Sistemas Operacionais Modernos. Tanenbaum, A. S. 2ª edição. 2003
Compartilhar