You are on page 1of 6

Lembrando…

 Escalonamentos preemptivos
 um processo pode ter sua execução
interrompida e voltar para a fila dos prontos.

 Exemplos:
 Round-Robin (fatia de tempo/quantum).
 Com prioridades para desempatar…
Threads  Prioridades / múltiplas filas com realimentação.
 Com Round-Robin para desempatar

08 de setembro – Nicolas Maillard


 Estudos de caso: Windows, Linux.

Lembrando a implementação do
Plano da aula de hoje processo…
 Introdução: do processo ao thread. Área dados (SisOp)

 Duas categorias de threads Pilha


 Núcleo vs. usuário Stack Pointer

HEAP
 Mapeamento threads/processos
 1:1, N:1, N:M
BSS Dados não inicializados
 Exemplos de implementações Data Dados inicializados
 Solaris, Windows 2000. Texto PC
Código

1
O espaço de endereçamento do
O processo é…
processo
 Texto: contém as instruções binárias do código executável  Um programa em execução
do processo (imagem).
 Uma unidade de escalonamento
 Dados: espaço para as variáveis do processo, declaradas  Um fluxo de execução
como globais no programa.
 Um conjunto de recursos (contexto) gerenciados
 Heap: memória para alocação sob-demanda durante a pelo Sis. Op.
execução
 Alocação dinâmica (malloc/free)  Registradores (PC, SP, …)
 Memória
 Pilha: memória para alocação:  Descritores de arquivos
 De variáveis locais a sub-rotinas (vide chamada de funções);  Etc…
 Do endereço de retorno de uma sub-rotina.

 Área do usuário vs. área do sistema.  A troca de contexto é uma operação pesada
 Deve acontecer cada vez que há decisão de
escalonamento

A noção de thread Implementação de threads


 Idéia simples: associar mais de um fluxo de O Bloco descritor de Threads inclui:
execução a um processo:  Registradores privados
 PC, SP, registradores de uso comum.
 Compartilhamento de recursos do PCB
 O PCB deve incluir uma lista de threads!  Uma pilha
 Histórico da execução, com a várias chamadas a sub-
rotinas que não completaram e suas variáveis locais.
Código Dados Arquivos  Endereço de retorno após completar a chamada.

 Thread ID
PC4
PC1 SP4  Ponteiros para outras threads
SP1 PC3  Ponteiro para o PCB em que se encontra.
SP3  Inclusive o espaço de endereçamento do processo pai!

 Informação de escalonamento
 Prioridade, estado, tipo de escalonamento…
Processo

2
Vantagens das threads Dois tipos de threads
 São processos leves (!= processos pesados).  Thread “usuário”
 Troca de contexto mais rápida;
 Fator 5 no caso de SOLARIS.
 Uma biblioteca dá suporte a (criação, escalonamento…),
 Tempo de criação menor que executa em modo usuário.
 Fator 30 no caso de SOLARIS.  O núcleo não interfere nas threads.
 Logo, diminui o tempo de resposta do sistema;  Vantagens: muito rápidas de gerenciar pois não
necessitam do núcleo (chamada de sistema…)
 Maior facilidade para mesclar threads I/O-bound com  Exemplo: bibliotecas Pthreads (POSIX), threads de
threads CPU-bound. SOLARIS.

 Usa eficientemente as arquiteturas multi-processadas.


 Thread “núcleo”
 O compartilhamento de recursos facilita a comunicação  O núcleo oferece suporte a threads.
entre as threads:  Mais lento…
 Através da área de memória compartilhada.  O Sis. Op. pode escalonar mais eficientemente as
 Necessita de sincronização. threads, inclusive em máquinas multi-processadas.
 Exemplo: Windows, Solaris, Linux.

Como conciliar os dois níveis de


threads?
O modelo N:1
 N threads usuário estão fisicamente implementadas em uma
thread de núcleo.
 Todo o gerenciamento das threads se faz em nível de
 3 soluções: usuário
 Extremamente veloz.
 N threads usuário por thread de núcleo
(N:1)  Grande limitação: o escalonamento.
 O núcleo escalona as threads na CPU;
 1 thread usuário por thread de núcleo  Ele só enxerga a thread de núcleo sem distinguir as threads
nela implementadas.
(1:1)  Se uma thread de usuário tranca, toda a thread de núcleo
estará bloqueada!
 Meio termo entre os dois (N:M)
 Totalmente inapropriado para máquinas multi-processadas.

 Exemplo: NACHOS, MACH C-threads, POSIX Pthreads.

3
Um exemplo de uso do modelo
O modelo 1:1
N:1: Java Threads
 Java disponibiliza uma interface de programação  Cada thread de usuário é mapeado
com threads.
 Um programa Java executa dentro de uma em uma thread de núcleo.
máquina virtual  Dessa forma, o Sis. Op. escalona as
 A JVM é executada, em geral, como um processo único.
 A JVM usa várias threads para seu gerenciamento
threads na CPU e não há blocagem.
 Memória, coleta de lixo…  Adaptado a arquiteturas multi-
 O mapemanto das threads Java da JVM para as processadas.
threads do Sis. Op. depende da implementação da  Problema: maior custo de
JVM!
 Caso seja para threads de usuário, pode ter ilusão de criação/manutenção das threads
assincronismo!
 No Windows, mapeamento 1:1 com threads de núcleo.  Limita-se o número de threads
disponíveis em tais sistemas.

O modelo N:M Caso de estudo: SUN Solaris


 Várias threads de usuário são  Versão proprietária (SUN) do Sis. Op. UNIX.
implementadas em várias threads de  Até 1992: Solaris 1.x Suportava unicamente processos
pesados.
núcleo.  Threads de usuário (= threads)
 O número exato pode variar conforme  “Ligth Weight Process” (LWP): entidade
for a arquitetura e/ou a aplicação. intermediária entre o processo pesado e a thread.
LWP threads
 Junta as vantagens dos dois outros
modelos.

 É uma solução herdada diretamente


do sistema Solaris. Processo Processo Processo

4
Mapeamentos threads – LWP –
Organização do núcleo e threads
Processos no Solaris
 Um LWP é mapeado a uma thread de núcleo  Um Sis. Op. pode ser:
(1:1).  Monolítico: o núcleo é constituído de um
 Ou seja, o núcleo escalona a entidade LWP. processo só.
 As threads (de usuário) podem ser:  Não-interrompível: sem preempção
 Limitadas : sempre estão mapeadas em um dado LWP  Interrompível. Necessita de mecanimsos de
 Ilimitadas: podem ser mapeadas em qualquer momento sincronização!
em qualquer LWP.  Convencional: o núcleo é executado com
 o mapeamento é decidido em nível de usuário!
vários processos/threads.
 Implementação:  Desde Solaris 2.0; Windows 95…
 Thread = thread-id, registradores (PC, SP), pilha e
prioridade.
 Com micro-núcleo
 Processos servidores prestam serviços a tudo o que
 LWP = registradores, memória e contabilidade (no
espaço do núcleo). não está no micro-núcleo
 Thread de núcleo: prioridade, escalonamento, ponteiro  Há troca de mensagens entre os processos do Sis.
Op.
para o LWP ativo.

Processo e Thread no Windows Processo e Thread no Windows


 A partir de Windows 2000!
 Muito inspirado do Solaris. Process Environment Block Fibras
 O processo é descrito por um PCB
 Parte no espaço do núcleo Thread
 Parte no espaço do usuário (PEB).
Espaço do usuário Environment Block
 Um Processo inclui no mínimo uma thread
 Thread de núcleo Espaço do núcleo
 Pode ter mais de uma para máquinas multi-processadas.
 Uma thread possui uma parte no espaço de núcleo, uma outra
no espaço do usuário (2 pilhas!)
Process Block
 As threads podem hospedar várias fibras.
 = thread em nível de usuário.
 Criadas por conversão de uma thread. Thread Block
 Também chamadas de “lightweigth thread”.

5
Conclusão sobre threads No próximo episódio…
 O recurso mais moderno dos Sistemas
Operacionais
Vem embutido desde 1998, 2000…

 Exemplo de uso de threads: a norma
 Existem várias bibliotecas de programação
concorrente com threads: POSIX e a biblioteca pthreads
 Pthread, Java Threads, …
 Em geral em nível de usuário.  Gerenciamento de threads,
 Tornou-se a unidade básica de escalonamento na sincronização…
CPU quando o Sis. Op. oferece threads de núcleo
 Ex.: Windows
 Por isso, cada vez mais, as noções vistas com
processos se aplicam, na realidade de hoje, a
threads:
 Algoritmos de escalonamento;
 Sincronizações.
 Sobra um problema: decidir a granularidade.

You might also like