Vous êtes sur la page 1sur 9

Abril, 2018 João Patrício Mamba

Sistemas Opercionais
ISPOMM

Threads
Modelos de multithread, Biblioteca de Threads
Overview

 Conceito.

 Modelos de Multithreading
 Bibliotecas de Threads
Thread pode ser definida como sub-rotina de um programa que
pode ser executada de forma assíncrona, ou seja, executada
paralelamente ao programa chamador.

Um thread é uma unidade básica de utilização da CPU; é composto


por um ID de thread, um contador de programa, um conjunto de
registradores e uma pilha. Um thread compartilha, com outros
threads pertencentes ao mesmo processo, sua seção de código, a
seção de dados e outros recursos do sistema operacional, como
arquivos abertos e sinais. Um processo tradicional tem um único
thread de controle. Se um processo tem múltiplos threads de
controle, ele pode executar mais de uma tarefa
ao mesmo tempo.
O suporte aos threads pode ser fornecido no nível do usuário,
para threads de usuário, ou pelo kernel, para threads de kernel.
Os threads de usuário são suportados acima do kernel e
gerenciados sem o suporte do kernel, enquanto os threads de
kernel são suportados e gerenciados diretamente pelo sistema
operacional. Praticamente todos os sistemas operacionais
contemporâneos — inclusive o Windows, o Linux, o Mac OS X e o
Solaris — dão suporte aos threads de kernel.

No fim das contas, deve existir um relacionamento entre os


threads de usuário e os threads de kernel.

Existem três maneiras comuns de estabelecer esse


relacionamento:
• o modelo muitos-para-um;
• o modelo um-para-um;
• e o modelo muitos-para-muitos.
Bibliotecas de Threads
Uma biblioteca de threads fornece ao programador uma API para
criação e gerenciamento de threads. Há duas maneiras principais de
implementar uma biblioteca de threads. A primeira abordagem é
fornecer uma biblioteca inteiramente no espaço do usuário sem
suporte do kernel. Todo o código e as estruturas de dados da
biblioteca existem no espaço do usuário. Isso significa que a
invocação de uma função da biblioteca resulta em uma chamada
de função local no espaço do usuário e não em uma chamada de
sistema.
A segunda abordagem é a implementação de uma biblioteca no
nível do kernel com suporte direto do sistema operacional. Nesse
caso, o código e as estruturas de dados da biblioteca existem no
espaço do kernel.

Invocar uma função da API da biblioteca resulta, tipicamente, em


uma chamada de sistema para o kernel.Três bibliotecas de threads
principais são usadas atualmente: a Pthreads do POSIX, a do Windows
e a de Java. A biblioteca Pthreads, a extensão de threads do padrão
POSIX, pode ser fornecida como uma biblioteca de nível de usuário
ou de kernel. A biblioteca de threads do Windows é uma biblioteca
de nível de kernel disponível em sistemas Windows.
A API de threads Java permite que threads sejam criados e
gerenciados diretamente por programas em Java. No entanto, já
que na maioria dos casos a JVM é executada no topo de um sistema
operacional hospedeiro, a API de threads Java é, geralmente,
implementada com o uso de uma biblioteca de threads disponível
no sistema hospedeiro. Isso significa que, em sistemas Windows, os
threads Java são, tipicamente, implementados com o uso da API
Windows; sistemas UNIX e Linux costumam usar a biblioteca Pthreads.
Na criação de threads no POSIX e no Windows, os dados
declarados globalmente — isto é, declarados fora de qualquer
função — são compartilhados entre todos os threads pertencentes
ao mesmo processo. Já que em Java não temos dados globais, o
acesso a dados compartilhados deve ser organizado
explicitamente entre os threads. Dados declarados como locais
para uma função são, normalmente, armazenados na pilha. Como
cada thread tem sua própria pilha, cada thread tem sua própria
cópia dos dados locais.
Bibliografia

• Machado, Francis Berenger e Maia, Luiz Paulo, Arquitetura de


Sistemas Operacionais, 4ª Ed, Rio de Janeiro, LTC 2007;
• Silberschatz, Galvin & Gane, Fundamento de Sistemas
Operacionais, 9ª Ed, LTC 2012;