Redes de Computadores
Fundamentos de Sistemas
Operacionais - 2º Período
PARTE II: PROCESSOS
E THREADS
SUMÁRIO
6. THREAD:
6.1 Introdução;
6.2 Ambiente Monothread;
6.3 Ambiente Multithread;
6.4 Arquitetura e Implementação;
6.5 Modelos de Programação.
Capítulo 6 - Thread
6.1 Introdução
Até o final da década de 1970, os sistemas operacionais suportavam apenas
processos com um único thread (monothread).
A partir do conceito de múltiplos threads (multithread) é possível projetar e
implementar aplicações concorrentes de forma eficiente.
Existem diferentes modelos para a implementação de threads em um SO,
onde desempenho, flexibilidade e custo devem ser avaliados.
Atualmente, o conceito de multithread pode ser encontrado em diversos SOs,
em função do aumento de popularidade dos sistemas com múltiplos
processadores, do modelo cliente-servidor e dos sistemas distribuídos.
Capítulo 6 - Thread
6.2 Ambiente Monothread
Neste ambiente, um processo suporta apenas um programa no seu espaço
de endereçamento.
Dessa forma, as aplicações concorrentes são implementadas apenas com o
uso de múltiplos processos independentes ou subprocessos.
Problemas:
O uso de processos no desenvolvimento de aplicações concorrentes
demanda consumo de diversos recursos do sistema; (consumindo tempo
do processador para alocação e desalocação destes recursos)
Cada processo possui seu próprio espaço de endereçamento, tornando a
comunicação entre processos difícil e lenta (uso de pipes, sinais, troca de
mensagens, etc...).
Capítulo 6 - Thread
6.2 Ambiente Monothread
Subprocessos Processos Independentes
Capítulo 6 - Thread
6.2 Ambiente Monothread
Thread ThreadThread
Capítulo 6 - Thread
6.3 Ambiente Multithread
Neste ambiente, com múltiplos threads, não existe a ideia de programas
associados a processos, mas, sim, a threads.
Um thread pode ser definido como uma sub-rotina de um programa que pode
ser executada de forma assíncrona, ou seja, concorrentemente ao
programa chamador.
Threads compartilham o processador da mesma maneira que processos e
passam pelas mesmas mudanças de estado (espera, pronto e execução).
Dentro de um mesmo processo, threads compartilham o mesmo contexto de
software e espaço de endereçamento com os demais threads, porém cada
thread possui seu contexto de hardware individual.
Capítulo 6 - Thread
6.3 Ambiente Multithread
Contextode hardware
Contextode hardware
Contextode hardware
Espaço deendereçamento
Co
nte
xto
de
soft
wa
re
Thread 3Thread 2Thread 1
Espaço deendereçamento
Processo
Programa Principal
Co
nte
xto
de
Ha
rdw
are
Co
nte
xto
de
Ha
rdw
are
Co
nte
xto
de
Ha
rdw
are
Call Sub_1
Call Sub_2
Thread_1
Thread_2
Thread_3
PCSP
PCSP
PCSP
Fim
Sub_2
Variáveis
Ret
Sub_1
Ret
...
...
Capítulo 6 - Thread
6.3 Ambiente Multithread
Capítulo 6 - Thread
6.3 Ambiente Multithread
Threads são implementados através de uma estrutura de dados,
denominada bloco de controle do thread (Thread Control Block - TCB).
O TCB armazena, além do contexto do hardware, mais algumas informações
relacionadas ao thread.
Em um ambiente monothread, o processo é ao mesmo tempo a unidade de
alocação de recursos e a unidade de escalonamento.
Em um ambiente multithread, a unidade de alocação de recursos é o
processo e cada thread representa uma unidade de escalonamento
independente.
Capítulo 6 - Thread
6.3 Ambiente Multithread
A grande diferença entre aplicações monothread e multithread está no uso
do espaço de endereçamento.
Programas concorrentes com múltiplos threads são mais rápidos do que
implementados com múltiplos processos. Vantagens:
Operações de criação, troca de contexto e eliminação dos threads geram
menor overhead; (vide tabela no próximo slide)
Comunicação entre threads pode ser realizada de forma rápida e
eficiente; (uso do espaço de endereçamento compartilhado)
Podem compartilhar facilmente outros recursos em um mesmo processo.
(como temporizadores, sinais, atributos de segurança, etc...)
Capítulo 6 - Thread
6.3 Ambiente Multithread
Latência de processos e threads (Vahalia, 1996)
* Processo que compartilha o mesmo espaço de endereçamento
Implementação Tempo de
criação (µs) Tempo de sincronização
(µs)
Processo 1700 200
Processo Lightweight* 350 390
Thread 52 66
Capítulo 6 - Thread
6.3 Ambiente Multithread
Em algumas aplicações, a utilização de
threads pode melhorar o desempenho
da aplicação apenas executando
tarefas em background.
Aplicações como editores de texto,
planilhas, aplicativos gráficos e
processadores de imagens são
especialmente beneficiadas quando
desenvolvidas com base em threads.
Thread deentrada
Thread degravação
Thread deexibição
Buffer
Capítulo 6 - Thread
6.3 Ambiente Multithread
Em ambientes cliente-servidor, threads são essenciais para solicitações de
serviços remotos.
Em um ambiente multithread, um thread pode solicitar o serviço remoto,
enquanto a aplicação pode continuar realizando outras atividades.
Para o processo que atende a solicitação, múltiplos threads permitem que
diversos pedidos sejam atendidos simultaneamente.
O núcleo do sistema também pode ser implementado em um ambiente
multithread. (como na arquitetura microkernel)
Capítulo 6 - Thread
6.3 Ambiente Multithread
Solicitações
Processo servidor
ThreadThread
Processo clienteProcesso cliente Processo cliente
Thread
Capítulo 6 - Thread
6.4 Arquitetura e Implementação
Threads podem ser oferecidos por uma biblioteca de rotinas fora do núcleo
do SO (modo usuário), pelo próprio núcleo do sistema (modo kernel), por
uma combinação de ambos (modo híbrido) ou por um modelo conhecido
como scheduler activations.
Capítulo 6 - Thread
6.4.1 Threads em Modo Usuário
TMU são implementados pela aplicação e não pelo SO. Para isso, deve
existir uma biblioteca de rotinas que possibilite à aplicação realizar tarefas
como criação/eliminação de threads, troca de mensagens e escalonamento.
Vantagens: possibilidade de implementar aplicações multithreads em SOs
que não suportam threads. São rápidos por dispensarem acessos ao kernel.
Problemas:
Tratamento individual de sinais;
O SO gerencia cada processo como se existisse apenas um único thread;
Em ambientes com múltiplos processadores, não é possível que múltiplos
threads de um processo possam ser executados simultaneamente.
Capítulo 6 - Thread
6.4.1 Threads em Modo Usuário
Modousuário
Modokernel
Kernel
Biblioteca
Th
rea
d 0
Th
rea
d 4
Th
rea
d 3
Th
rea
d 2
Th
rea
d 1
Capítulo 6 - Thread
6.4.2 Threads em Modo Kernel
TMK são implementados diretamente pelo núcleo do SO, através de
chamadas a rotinas do sistema que oferecem todas as funções de
gerenciamento e sincronização.
Problema para pacotes em modo kernel é o seu baixo desempenho.
Pacotes em modo kernel utilizam chamadas a rotinas do sistema e,
consequentemente, várias mudanças no modo de acesso.
Capítulo 6 - Thread
6.4.2 Threads em Modo Kernel
Modousuário
ModokernelKernel
Th
rea
d 0
Th
rea
d 4
Th
rea
d 3
Th
rea
d 2
Th
rea
d 1
Capítulo 6 - Thread
6.4.3 Threads em Modo Híbrido
Combina as vantagens de threads implementados em modo usuário (TMU) e
threads em modo kernel (TMK). Um processo pode ter vários TMKs e, por
sua vez, um TMK pode ter vários TMUs.
O programador desenvolve a aplicação em termos de TMUs e especifica
quantos TMKs estão associados ao processo.
Os TMUs são mapeados em TMK enquanto o processo está sendo
executado.
O modo híbrido, apesar da maior flexibilidade, apresenta problemas
herdados de ambas as implementações.
Capítulo 6 - Thread
6.4.3 Threads em Modo Híbrido
Modousuário
Modokernel
Kernel
TMK 0 TMK 3TMK 2TMK 1
Biblioteca
TM
U 0
TM
U 4
TM
U 5
TM
U 3
TM
U 2
TM
U 1
Capítulo 6 - Thread
6.4.4 Scheduler Activations
Os problemas apresentados no pacote de threads em modo híbrido existem
devido à falta de comunicação entre os threads em modo usuário e em modo
kernel.
A estrutura de dados chamada scheduler activations combina o melhor das
duas arquiteturas, realizando a troca informações do núcleo do sistema com
a biblioteca de threads.
A maneira de alcançar um melhor desempenho é evitar as mudanças de
modos de acesso desnecessárias (usuário-kernel-usuário).
Cada camada (biblioteca e kernel) implementa seu escalonamento de forma
independente, porém trocando informações quando necessário.
Capítulo 6 - Thread
6.4.4 Scheduler Activations
Modousuário
ModokernelKernel
Biblioteca
Th
rea
d 0
Th
rea
d 4
Th
rea
d 3
Th
rea
d 2
Th
rea
d 1
Capítulo 6 - Thread
6.5 Programação Multithread
O conjunto de rotinas disponíveis para que uma aplicação utilize as
facilidades dos threads é chamado de pacotes de threads.
O desenvolvimento de aplicações multithread exige que a comunicação e o
compartilhamento de recursos entre os diversos threads sejam feitos de
forma sincronizada.
Um fator importante em aplicações multithread é o número total de threads e
a forma como são criados e eliminados.
Para obter os benefícios do uso de threads, uma aplicação deve permitir que
partes do seu código sejam executadas concorrentemente de forma
independente.