Baixe o app para aproveitar ainda mais
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.
Compartilhar