Sistemas Operacionais - Threads

36
Gerências de Processos: Threads Sistemas Operacionais I Prof. Daniel Gondim: http://sites.google.com/site/danielgondimm Universidade Estadual da Paraíba

description

Aula sobre Threads

Transcript of Sistemas Operacionais - Threads

  • Gerncias de Processos: Threads

    Sistemas Operacionais I

    Prof. Daniel Gondim: http://sites.google.com/site/danielgondimm

    Universidade Estadual da Paraba

  • Objetivos

    Introduzir a noo de thread, uma unidade

    fundamental de utilizao de CPU e que

    representa a base da maioria dos sistemas

    computacionais modernos

    Questes relacionadas a criao de threads

  • Introduo

    O que uma Thread?

    Unidade bsica de utilizao da CPU.

    Compreende:

    Thread ID;

    Contador de Programa;

    Conjunto de Registradores;

    Pilha

    Compartilham com outras threads num mesmo processo:

    Seo de cdigo;

    Seo de dados;

    Arquivos

  • Processo com thread nico e com

    mltiplos threads

  • Exemplo

    Problema Cliente-Servidor:

    Centenas de clientes...

  • Exemplo

    Qual seria a soluo?

    Criar um processo para cada cliente!?

    E o custo? E o uso de memria?

    Soluo ALTAMENTE custosa!!!

    Criar uma thread pra cada cliente!?

    Bem menos custoso

    Mais atraente

    Soluo mais rentvel

  • Exemplo

    Soluo:

    Centenas threads

  • Benefcios

    Responsividade

    Programa continua rodando mesmo que parte

    dele esteja executando uma operao lenta

    Multithread browser:

    Permite interao em uma thread enquanto carrega

    uma imagem em outra thread

    Compartilhamento de recursos

    Compartilham memria e recursos do processo

    Vrias threads em um mesmo espao de

    memria

  • Benefcios

    Economia

    Mais rpido criar threads do que processos

    Solaris: criar um processo demora 30x mais

    Mais rpido mudar contexto de threads

    Solaris: mudar contexto de processos demora 5x mais

    Escalabilidade

    Threads executam paralelamente em cada

    processo

  • Programao com mltiplos ncleos

    Sistemas com mltiplos ncleos pressionam

    os programadores

    Os desafios incluem

    Particionamento das atividades

    Balano

    Particionamento dos dados

    Dependncia dos dados

    Teste e depurao

  • Arquitetura de um servidor multi-threaded

  • Execuo concorrente em um sistema

    de ncleo nico

  • Execuo paralela em um sistema com mltiplos

    ncleos

  • Threads do usurio

    Gerencia de threads feita por bibliotecas

    carregadas no nvel do usurio

    Trs principais bibliotecas de threads:

    POSIX Pthreads

    Win32 threads

    Java threads

  • Threads do Ncleo

    Gerenciadas pelo prprio sistema operacional

    Exemplos

    Windows XP/2000

    Solaris

    Linux

    Tru64 UNIX

    Mac OS X

  • Threads do Ncleo

    E se ocorrer uma chamada de sistema?

    Estou executando uma thread do usurio, mas

    ela quer acessar informaes do modo kernel

  • Modelos de Multi-threading

    Muitos-para-um

    Um-para-um

    Muitos-para-muitos

  • Modelos de Multi-threading

    Antes de mais nada, vamos aprender o que

    uma blocking system call...

    For a blocking system call, the caller can't do

    anything until the system call returns

    Basicamente:

    Uma chamada de sistema que interrompe o

    processamento, at que a chamada retorne

  • Muitos-para-um

    Muitas threads do usurio

    mapeadas para uma

    nica thread do ncleo

    Mltiplas threads

    incapazes de rodarem em

    paralelo (apenas uma

    acessa o kernel)

    Exemplos:

    Solaris Green Threads

    GNU Portable Threads

  • Um-para-um

    Cada thread do usurio mapeada para uma thread do ncleo

    Possibilita mltiplas threads rodarem em paralelo. O ponto negativo: a criao de vrias threads de

    kernel compromete a performance da aplicao Exemplos

    Windows NT/XP/2000 Linux Solaris 9 e posterior

  • Muitos-para-muitos

    Permite que muitas threads do usurio sejam mapeadas em muitas threads do ncleo

    Exemplos

    Solaris antes da verso 9

    Windows NT/2000 como o pacote ThreadFiber

  • Modelo em dois nveis

    Similar ao M:M porm tambm permite que uma thread do usurio seja associada a uma thread do ncleo

    Exemplos

    IRIX

    HP-UX

    Tru64 UNIX

    Solaris 8 e anteriores

  • Bibliotecas de threads

    Bibliotecas de threads oferecem uma API para

    criao e manipulao de threads

    Duas formas primrias de implementao

    Biblioteca localizada inteiramente no espao do

    usurio

    Biblioteca localizada no ncleo com suporte do

    SO

  • Pthreads

    Pode ser fornecida tanto no nvel do usurio

    quanto no ncleo

    API padro POSIX (IEEE 1003.1c) para

    criao e sincronizao de threads

    A API especifica unicamente o comportamento

    da biblioteca, a implementao fica a cargo

    dos desenvolvedores

    Comum em sistemas operacionais UNIX

    (Solaris, Linux, Mac OS X)

  • Win32 Threads

    Similares s Pthreads

    Nvel do ncleo (kernel)

  • Java Threads

    Threads em Java so gerenciados pela JVM

    Tipicamente implementados de acordo com o

    modelo de threads do sistema operacional

    hospedeiro

    Threads em Java podem ser criados

    Estendendo a classe Thread

    Implementando a interface Runnable

    public interface Runnable

    {

    public abstract void run();

    }

  • Java Threads

    Ao criar um objeto Thread no se cria uma

    nova Thread:

    o mtodo start() que na verdade cria uma nova

    thread

    Ao chamar o mtodo start():

    1. Aloca espao e inicializa uma nova thread na

    JVM;

    2. Invoca o mtodo run(), fazendo com a thread se

    torne elegvel para ser rodada pela JVM.

  • Questes relacionadas a criao de

    threads

    As chamadas de sistema fork() e exec()

    Cancelamento de threads

    Assncrono versus adiado

    Manipulao de sinais

    Pools de Thread

    Dados especficos de threads

    Ativaes do escalonador

  • As chamadas de sistema fork() e exec()

    O fork() duplica apenas a thread que invocou

    a chamada ou todos as threads do processo?

    Se um exec() chamado logo aps o fork(),

    desnecessrio duplicar todas as threads, uma

    vez que o processo ser substitudo

    Caso contrrio, deve-se duplicar todas as threads

    O que acontece com o exec()?

    Tipicamente o mesmo funcionamento

    apresentado na aula passada

    Pode substituir todo o processo (incluindo as

    threads)

  • Cancelamento de threads

    Cancelar uma thread antes de sua

    concluso

    Duas abordagens

    Cancelamento assncrono: termina a

    thread alvo imediatamente

    Browser

    Cancelamento adiado: permite que a

    thread alvo verifique periodicamente se

    ela deve ser cancelada

    Pesquisa numa base de dados

  • Manipulao de sinais

    Sinais so utilizados no UNIX para notificar um processo de que um determinado evento ocorreu

    Todos os sinais seguem o mesmo padro So gerados por um evento particular So entregues a um processo So manipulados pelo processo

    Sinais sncronos (do prprio processo) e assncronos (processos externos)

    Opes: Entregar o sinal para a thread a qual ele se aplica Entregar o sinal para todas as threads do processo Entregar o sinal para certas threads do processo Escolher uma thread especfica para receber todos os sinais do

    processo

  • Pools de threads

    Cria um nmero de threads em um pool onde

    elas aguardam por trabalho

    Vantagens:

    Geralmente um pouco mais rpido requisitar

    uma thread j existente do que criar uma nova

    thread

    Permite que o nmero de threads na(s)

    aplicao(es) seja limitado ao tamanho do pool.

    Importante para sistemas que no suportam um

    grande nmero de threads concorrentes

    tima soluo do Cliente-Servidor!

  • Dados especficos de threads

    Permite que cada thread tenha sua prpria

    cpia dos dados

    til quando no se tem controle sobre o

    processo de criao de threads (ex., quando

    se usa um thread pool)

  • Ativaes do escalonador

    Tanto o modelo M:M quanto o de dois nveis utilizam uma estrutura de dados intermediria (LWP) entre as threads do ncleo e do usurio

    O LWP funciona como um processador virtual para a aplicao no qual a aplicao pode agendar a execuo de uma thread

    O ncleo, em seguida, atribui uma de suas threads para executar a thread do usurio associada a um LWP

  • Ativaes do escalonador

    Para esse esquema funcionar, o ncleo

    precisa notificar a aplicao sobre certos

    eventos de escalonamento de threads

    Essa notificao feita atravs de um

    procedimento chamado upcall. Esse

    esquema de comunicao conhecido como

    ativao do escalonador

  • Dvidas