Buscar

Aula05_Threads

Prévia do material em texto

Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
Aula 5 
Capítulo 5 – Threads 
• 5.1 Visão Geral 
• 5.2 Modelos de múltiplas threads 
(multithreading) 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
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. 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.1 Visão geral 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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 
 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.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. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.2.1 Modelo muitos-para-um 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• 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. 
5.2.2 Modelo um-para-um 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.2.2 Modelo um-para-um 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• 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. 
5.2.3 Modelo muitos-para-muitos 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
5.2.3 Modelo muitos-para-muitos 
Sistemas Operacionais com Java 
Referências 
• Capítulo 5 da referência abaixo: 
– SILBERSCHATZ, ABRAHAM; GAGNE, GREG; GALVIN, 
PETER BAES. Sistemas operacionais: com java. . Rio de 
Janeiro: Elsevier, 2004.

Continue navegando