Você está na página 1de 20

Sistemas Operacionais com Java

Aula 4

Capítulo 4 – Threads
• 4.1 Visão Geral

• 4.2 Modelos de múltiplas threads

(multithreading)

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

Threads

• O modelo de processo até agora apresentado


considerava que um processo era um programa
em execução com uma única thread de controle.
• Muitos SO Modernos agora oferecem recursos
permitindo que um processo tenha diversas
threads de controle.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1 Visão geral

• Uma thread é uma unidade básica de utilização de


CPU.
• Ela compreende:
– um ID de thread,

– um contador de programa,

– um conjunto de registradores,

– e uma pilha.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1 Visão geral

• Uma thread compartilha com outras threads


pertencentes ao mesmo processo sua seção de
código, seção de dados e outros recursos do SO,
como arquivos abertos e sinais.
• Um processo tradicional (ou pesado) possui uma
única thread de controle. Se o processo tiver
múltiplas threads de controle, ele poderá fazer
mais de uma tarefa ao mesmo tempo.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1 Visão geral

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1.1 Motivação

• Muitos pacotes de software executados nos PCs


desktops modernos são dotados de múltiplas
threads (multithreaded).
• Uma aplicação normalmente é implementada
como um processo separado, com várias threads
de controle.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1.1 Motivação

• Exemplos de várias thread de controle de um


mesmo processo:
– Um navegador de Web: pode ter uma thread exibindo
imagens ou texto enquanto outra thread recebe dados da
rede.
– Um processador de textos: pode ter uma thread para
exibir gráficos, outra thread para ler os toques de tecla do
usuário e uma terceira thread para realizar a verificação
ortográfica e gramatical em segundo plano.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1.2 Benefícios

• Os benefícios da programação multithread podem


ser divididos em 4 categorias.
• 1 categoria:
– Responsividade: o uso de multithreads em uma aplicação
interativa pode permitir que um programa continue
funcionando mesmo que parte dele esteja bloqueado ou
realizando uma operação longa, aumentando a
capacidade de resposta ao usuário.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1.2 Benefícios

• 2 categoria:
– Compartilhamento de recursos: como padrão, as threads
compartilham memória e os recursos do processo ao
qual pertencem. O benefício do compartilhamento do
código é que isso permite que uma aplicação tenha várias
threads de atividades diferentes dentro do mesmo espaço
de endereçamento.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1.2 Benefícios

• 3 categoria:
– Economia: a alocação memória e recursos para a criação
de processo é dispendiosa. Como threads compartilham
recursos do processo ao qual pertencem, é mais
econômico criar e trocar de contexto das threads.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1.2 Benefícios

• 4 categoria:
– Utilização de arquiteturas multiprocessadas:
os
benefícios são aumentados em uma arquitetura
multiprocessada, na qual as threads podem ser
executadas em paralelo nos diferentes processadores. O
uso de múltiplas threads em uma máquina de múltiplas
CPUs aumenta a concorrência.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.1.3 Threads de usuário e de kernel

• Até aqui as threads foram tratadas de forma


genérica.
• Mas o suporte para as threads pode ser fornecido
no nível do usuário, para threads de usuário, ou
pelo kernel, para threads de kernel.
• Threads de usuário:
– São admitidas acima do kernel e gerenciadas sem
suporte do kernel.
• Threads de kernel:
– São admitidas e gerenciadas diretamente pelo SO.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.2 Modelos de múltiplas


threads (Multithreading)

• É preciso que haja um relacionamento entre


threads nos níveis de usuários e kernel.
• Existem 3 formas de estabelecer esse
relacionamento:
– Modelo muitos-para-um

– Modelo um-para-um

– Modelo muitos-para-muitos

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.2.1 Modelo muitos-para-um

• Associa muitas threads no nível do usuário a uma


única thread de kernel.
• O gerenciamento de threads é feito no espaço de
usuário.
• O processo inteiro será bloqueado, se uma thread
fizer uma chamada de sistema bloqueante.
• Como somente uma thread pode acessar o kernel
por vez, várias threads não podem ser executadas
em paralelo em multiprocessadores.

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.2.1 Modelo muitos-para-um

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.2.2 Modelo um-para-um

• Associa a thread de cada usuário a uma thread de


kernel.
• Provê maior concorrência do que o modelo
anterior, permitindo que outra thread seja
executada quando uma thread faz uma chamada
de sistema bloqueante.
• Permite que várias threads sejam executadas em
paralelo em multiprocessadores.
• Para cada thread de usuário criado requer criar o
thread de kernel, prejudicando o desempenho da
aplicação.
Silberschatz, Galvin e Gagne (c) 2003
Sistemas Operacionais com Java

4.2.2 Modelo um-para-um

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

4.2.3 Modelo muitos-para-muitos

• Multiplexa muitos threads de usuários em um n°.


menor ou igual de threads de kernel.
• Permite que o sistema operacional crie um número
suficiente de threads de kernel.
• Possui escalonamento, um thread para um kernel
de cada vez.
• Thread de kernel pode executar em paralelo em
um sistema multiprocessado.
• Quando uma thread realiza uma chamada de
sistema bloqueante, o kernel pode escalonar outra
thread.
Silberschatz, Galvin e Gagne (c) 2003
Sistemas Operacionais com Java

4.2.3 Modelo muitos-para-muitos

Silberschatz, Galvin e Gagne (c) 2003


Sistemas Operacionais com Java

Referência

• Capítulo 4 da referência abaixo:


• SILBERSCHATZ, ABRAHAM; GAGNE, GREG;
GALVIN, PETER BAES. Sistemas operacionais: com
java. . Rio de Janeiro: Elsevier, 2008.

Silberschatz, Galvin e Gagne (c) 2003

Você também pode gostar