Você está na página 1de 14

Roteiro Parte 6 - Threads

• Introdução
• Benefícios
• Ciclo de Vida
• Estados
• Modelos Multithreading
• Modelo Muitos para Um
• Modelo Um para Um
• Modelo Muitos para Muitos
• Sistemas com Threads
• Threads no Java
• Questões

Roteiro
• Conceitos básicos para o escalonamento

• Critérios de Escalonamento

• Algoritmos de Escalonamento
• First Come, First Served (FCFS)
• Shortest Job First (SJF)
• Prioridade
• Round Robin (RR)

1
Threads

Introdução
• Tradicionalmente, processo é um programa em execução
• Supõem-se um único fluxo de controle
• Exemplo: Se um processo está executando um programa processador de
textos, existe um único fluxo de instruções sendo executado. Esse fluxo único
de controle só permite que o processo execute uma tarefa de cada vez. O
usuário não pode passar o corretor ortográfico e digitar caracteres ao mesmo
tempo no mesmo processo.

• Em sistemas modernos um processo pode conter múltiplos fluxos de


controle - Threads

• Thread
• Também conhecido como processo leve (lightweight process)
• É uma unidade básica de utilização da CPU
• Coletivamente conhecido como tarefa

• Consiste em:
• ID da Thread
• Contador de Programa (program counter)
• Conjunto de Registradores (register set)
• Pilha (stack space)

Threads

Introdução
• Um processo tradicional (heavyweight) tem um único
fluxo de controle.
• Processos com múltiplos threads podem realizar mais de
uma tarefa de cada vez
• Um Thread compartilha com outros Threads do mesmo
processo:
• Seção de Código
• Seção de Dados
• Recursos do Sistema operacional (arquivos abertos, …)

2
Threads

Introdução

• Um processo tradicional ou processo pesado


(heavyweight process) é uma tarefa com um Thread

Código Dados Arquivos Código Dados Arquivos

Threa Threa
d d

Processo tradicional - Um Múltiplos threads


thread

Threads

Exemplo
• Um processador de Texto com 3 threads

Figura extraída de “Sistemas


Operacionais Modernos”
A.Tanenbaum; 2a Edição;
Ed. Pearson

3
Threads

Introdução
• Ambiente multithread
• Desnecessário processos para implementar aplicações
concorrentes
• Cada processo pode responder a várias solicitações
Concorrentemente ou simultaneamente (vários processadores)

• Diferença Sub-processo e Thread


• Espaço de endereçamento

• Sub-processo
• espaço independente e protegido
• Thread
• mesmo espaço do processo e não protegido
• Threads podem alterar dados em outras Threads

Multithreads

Benefícios
• Capacidade de Resposta
• Permite que um programa continue em execução, mesmo
que parte dele esteja bloqueado ou executando uma tarefa
demorada

• Compartilhamento de Recursos
• Threads podem compartilhar recursos de memória e processador
• Vários threads diferentes no mesmo espaço de endereçamento

• Economia
• Alocar memória e processador é mais rápido para threads do
que para processos

• Arquitetura com múltiplos processadores


• Cada thread pode ser executado em paralelo em um
processador diferente

4
Ciclo de Vida de Threads

Estados
• Novo
• (Born)
• Pronto
• (Ready ou runnable)
• em Execução
• (Running)
• Terminado
• (Dead)
• Bloqueado
• (Blocked)
• Espera
• (Waiting)
• Adormecido
Figura extraída de “Sistemas Operacionais”
• (Sleeping)
Deitel et al; 3a Edição; Ed. Pearson
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 9

Ciclo de Vida de Threads

Operações
• Threads e processos possuem operações em comum
• Criar (Create)
• Encerrar (Terminated)
• Suspender (Suspend)
• Retomar (Resume)
• Dormir (Sleep)
• Acordar (Wake)

• Operações de threads que não correspondem a


operações de processos
• Cancelar (Cancel)
• Associar

5
Suporte a Threads

Threads de Usuários
• Falamos até aqui de Threads de forma genérica.
• Entretanto pode ser fornecido suporte a Threads no nível
do usuário (threads de usuário) ou pelo Kernel (threads
de Kernel).

Suporte a Threads

Threads de Usuários
• Gerenciamento de Thread feito no nível do usuário
• Implementados por uma Biblioteca de threads
• A biblioteca fornece suporte à criação, escalonamento e gerência
• Sem intervenção do Kernel
• Rápidos de criar e gerenciar
• Se o kernel tiver um único thread, sistema pode paralisar
(thread bloqueante)

• Principais bibliotecas de threads


• POSIX Pthreads
• Java threads
• Win32 threads
• Mach C-threads
• Solaris threads

6
Suporte a Threads

Threads de Kernel
• Suportadas diretamente pelo Kernel do S.O.
• Criação, escalonamento e gerência feitos no espaço do Kernel
• Criação e gerência mais lentos que os threads de usuários
• Kernel sempre pode escalonar outro thread (mesmo se um thread
realizar uma chamada bloqueante)
– sistema nunca paralisa
• Kernel pode escalonar processos em outros processadores

• Exemplos
• Windows XP/2000
• Solaris
• Linux
• Tru64 UNIX
• Mac OS X

Modelos Multithreading
• Muitos sistemas fornecem suporte a threads de usuário e
kernel , resultando diferentes modelos de multithreading.
Os três tipos comuns de implementação de threading
são:

• Modelo Muitos para um

• Modelo um para um

• Modelo Muitos para muitos

7
Modelos Multithreading

Modelo Muitos para Um


• Muitas threads do usuário
associadas a uma única thread de kernel
Thread
• Exemplos de
• Solaris Green Threads Usuário
• GNU Portable Threads

• Eficiente, pois a gerência é


feita no espaço do usuário Thread
k
de Kernel

• Desvantagens
• Se houver chamada bloqueante o processo inteiro é bloqueado
• Não é possível executar múltiplos threads em multiprocessadores

Modelos Multithreading

Modelo Um para Um
• Cada thread do usuário associada a uma thread de kernel

• Exemplos Thread
• Windows NT/XP/2000 de
• Linux Usuário
• Solaris 9 e acima
Thread
k k k
de Kernel
• Oferece mais concorrência
• Permite que outro thread execute quando um thread efetuar uma
chamada bloqueante ao sistema
• Permite executar múltiplos threads em paralelo em multiprocessadores
• Desvantagem
• Criar um thread de usuário requer criar um thread de kernel
• Restrição no número de threads suportadas neste sistema

8
Modelos Multithreading

Modelo Muitos para Muitos


• Permite que muitas threads no nível do usuário sejam
associadas a muitas threads (em número menor ou igual)
no nível do kernel
• Permite que o sistema operacional crie um número suficiente
de threads de kernel
Thread
• Exemplos de
• Solaris antes da versão 9
Usuário
• Windows NT/2000
com o pacote ThreadFiber

• IRIX Thread
k k k
• Tru64 UNIX de
Kernel

Modelos Multithreading

Modelo Muitos para Muitos


• Permite ao desenvolvedor criar tantos threads de usuário
quanto desejar
• Os threads de Kernel correspondentes podem executar em
paralelo em um multiprocessador
• Quando um thread efetuar uma chamada bloqueante ao
sistema, o kernel pode escalonar outro thread para
execução

• Desvantagem
• Verdadeira concorrência não é obtida
• Apenas um thread pode ser escalonado pelo kernel de cada vez

9
Introdução

Escalonamento
• Base dos Sistemas Operacionais Multiprogramados
• Permite alternar o uso dos recursos do computador entre os
processos
• Máxima utilização da CPU obtida com a multiprogramação
• Em sistemas com um processador, um processo em execução e
demais processos na espera da liberação da CPU
• Ciclo do Burst (rajada) de CPU e E/S
160
• A execução de um processo consiste 140

em um ciclo de execução da CPU 120


100
e espera por E/S 80

• Distribuição dos burst de CPU 60

Freqüência
40
• Grande número de surtos de CPU curtos 20

• Pequeno número de surtos de CPU longos


0 8 16 24 32
Duração do burst (ms)

Conceitos Básicos

Escalonamento de CPU
• Sempre que a CPU ficar ociosa, o S.O deverá escolher um
dos processos da fila de processos prontos para execução
• Seleciona um processo, entre os presentes na memória que
estão prontos para execução, e o aloca à CPU
• Trabalho é feito pelo Escalonador de Curto Prazo
• As decisões de escalonamento ocorrerem quando o
processo
1. Passa do estado executando para o estado esperando
2. Passa do estado executando para o estado pronto
Encerrado
3. Passa do estado esperando para o estado pronto (terminated)
4. Termina

Novo Pronto em Espera em Execução


(new) (ready) (waiting) (running)

10
Conceitos Básicos

Dispatcher (Executor ou Despachante)


• É um módulo que passa o controle da CPU ao processo
selecionado pelo escalonador de curto prazo:
• Envolve:
• Troca do contexto
• Troca do modo do usuário
• Desvio para o local apropriado no programa do usuário a fim de
reiniciar esse programa
• Deve ser o mais rápido possível
• Chamado em cada troca de processo
• Latência de Despacho
• tempo gasto para o despachante interromper um processo e iniciar
a execução de outro

Conceitos Básicos

Critérios de Escalonamento
• Diferentes algoritmos de escalonamento tem diferentes
propriedades e podem favorecer uma classe de processos
mais que outra
• Os critérios mais comuns para comparar os algoritmos de
escalonamento são:

• Utilização de CPU
• A CPU deverá ficar ocupada pelo máximo de tempo possível

• Vazão (Throughput )
• Número de processos que são completados por unidade de tempo

11
Conceitos Básicos

Critérios de Escalonamento
• Tempo de Retorno (Turnaround )
• O tempo necessário para executar um determinado processo

• Tempo de Espera
• Tempo que um processo gasta esperando na fila de prontos

• Tempo de Resposta
• tempo percorrido desde que uma requisição é submetida até a
primeira resposta produzida, não até a saída

Conceitos Básicos

Algoritmos de Escalonamento
• First Come, First Served (FCFS)
• Primeiro a chegar, primeiro a receber
• Shortest Job First (SJF)
• Trabalho mais curto primeiro
• Prioridade
• Round Robin (RR)
• Revezamento Circular
• Fair Share Scheduling (FSS)
• Fração Justa
• Múltiplas Filas
• Múltiplas Filas com realimentação

12
Algoritmos de Escalonamento

First Come, First Served (FCFS)


• Primeiro a Chegar, Primeiro a Receber
• Neste esquema, o processo que solicita a CPU primeiro é
o primeiro que a recebe

• Algoritmo não preemptivo


• O processo alocado à CPU a mantém até liberá-la terminando ou
realizando um pedido de I/O

• Fácil implementação e gerenciamento com uma fila FIFO

• Problemático para sistemas de tempo compartilhado


• CPU pode permanecer com um processo por tempo prolongado
• Usuários teriam que esperar a execução desse processo

Algoritmos de Escalonamento

First Come, First Served (FCFS)


• Processo Duração de Surto • Resultados são mostrados no
P1 24 ms Diagrama de Gantt
P2 3 ms
P3 3 ms

• Ordem de Chegada: P1 , P2 , P3 • Tempo de Espera


P1 = 0 P2 = 24 P3 = 27
P1 P2 P3 • Tempo de Espera Médio
0 24 27 30 (0 + 24 + 27) / 3 = 17 ms
• Efeito Comboio
• Processo Curto atrás do Longo

• Ordem de Chegada: P2 , P3 , P1 • Tempo de Espera


P1 = 6 P2 = 0 P3 = 3;
P2 P3 P1
• Tempo de Espera Médio
0 3 6 30
(6 + 0 + 3) / 3 = 3 ms
• Melhor que o anterior

13
Algoritmos de Escalonamento

Shortest Job First (SJF)


• Atribui a CPU para o processo que possui o menor surto
• Associa a cada processo a duração do seu próximo surto
• Processo Surto (ms)
P1 6 ms Tempo de Espera
P2 8 ms P1= 3 P2= 16 P3= 9 P4= 0
P3 7 ms Tempo de Espera Médio
P4 3 ms (3 + 16 + 9 + 0) / 4 = 7 ms

P4 P1 P3 P2

0 3 9 16 24

• O S J F é comprovadamente ótimo: provê o menor tempo de


espera médio para um determinado conjunto de processos
• Dificuldade: Conhecer a duração do próximo pedido de CPU

Algoritmos de Escalonamento

Round Robin (RR)


• Revezamento Circular
• Cada processo obtém uma pequena unidade do tempo de CPU
(quantum de tempo), normalmente entre 10 e 100 ms.
• Após decorrido esse tempo, o processo é retirado da CPU e colocado no final
da fila de prontos
• A fila de processos prontos é tratada como uma fila circular
Fila de processos prontos
Término
P1 P3 P2 P1 Processador
Preempção
• Considere n processos na fila de processos prontos e o quantum de
tempo q
• Cada processo recebe 1/n do tempo de CPU em, no máximo, q unidades de
tempo de cada vez
• Nenhum processo espera mais do que (n-1)*q unidades de tempo

14