Buscar

Processos e Threads em Sistemas Operacionais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CCT0011 – Sistemas Operacionais
Aula 04 – Threads
Sistemas Operacionais
Revisão
Um programa por si só não é um processo, é uma entidade passiva, enquanto o processo 
é uma entidade ativa.
Processos são programas em execução, constituídos por: 
• código executável;
• pilha de execução;
• estado do processo;
• prioridade do processo;
• valor do contador de programa (PC);
• valor do apontador de pilha (SP);
• valores de demais registradores .
Sistemas Operacionais
Revisão
Um programa é carregado para a memória onde aloca determinada área para código e 
dados.
Sistemas Operacionais
Revisão
Um processo é formado por 
três partes, conhecidas como 
contexto de hardware, 
contexto de software e espaço 
de endereçamento.
Juntas elas mantêm todas as 
informações necessárias à 
execução de um programa. 
Sistemas Operacionais
Threads - Introdução
Até a década de 70 os sistemas operacionais suportavam apenas processos com 
um único thread, ou seja, um processo com apenas um único fluxo de execução em 
seu contexto.
Em meados de 1980 foi introduzido o conceito onde o espaço de endereçamento 
de um processo era compartilhado por vários programas.
A partir do conceito de múltiplos threads é possível projetar e implementar aplicações 
concorrentes de forma eficiente, pois um processo pode ter partes diferentes do seu 
código sendo executadas em paralelo. Com menor overhead do que utilizando 
múltiplos processos.
Sistemas Operacionais
Threads - Introdução
Um thread é uma unidade básica de utilização de CPU e compreende:
• ID de thread;
• contador de programa;
• conjunto de registradores;
• uma pilha.
Um processo tradicional tem um único fluxo de controle.
Sistemas Operacionais
Threads - Introdução
O modelo de processos é baseado em dois conceitos independentes:
Agrupamento de recursos:
• Espaço de endereçamento, arquivos abertos, etc.
• Aglutinar estes recursos na forma de um processo facilita o gerenciamento 
destes recursos.
Execução do processo:
• Um contador de programa que aponta para a próxima instrução a ser executada.
• Registradores, que contém as variáveis de trabalho atuais.
• A pilha que traz a história da execução, com uma estrutura para cada rotina 
chamada mas ainda não terminada;
Sistemas Operacionais
Threads - Introdução
O modelo de processos estudado supõe o uso de apenas um thread por processo 
com espaço de endereçamento único e um thread de controle. 
Exceto pelo espaço de endereçamento compartilhado. Intuitivamente, threads
são como processos dentro de outro processo (são linhas/fluxo de execução).
Thread é uma forma de um processo dividir a si mesmo em duas ou mais tarefas.
Apesar de threads serem executadas em processos, ambos são conceitos diferentes 
e podem ser tratados separadamente.
• Processos são usados para agrupar recursos.
• Threads são as entidades escalonadas para usar a CPU.
Sistemas Operacionais
Benefícios dos Threads
Podem ser divididos em quatro categorias básicas:
Capacidade de resposta 
Pode permitir que um programa continue executando, mesmo se parte dele estiver 
bloqueada ou em uma operação demorada, aumentando a capacidade de resposta 
para o usuário. 
Compartilhamento de recursos
Por default, os threads compartilham a memória e os recursos do processo aos quais 
pertencem, permitindo que uma aplicação tenha vários threads dentro do mesmo 
espaço de endereçamento.
Sistemas Operacionais
Benefícios dos Threads
Economia
Como threads compartilham recursos do processo é mais econômico criar e realizar a 
troca de contexto de threads. Criar e manter um processo, em vez de um thread, é 
mais demorado. 
Utilização de arquiteturas multiprocessador
Os benefícios podem ser aumentados em uma arquitetura multiprocessador, na qual 
cada thread pode ser executado em paralelo em um núcleo/processador diferente. 
Em uma arquitetura mono processada, a CPU alterna entre cada thread tão rápido 
que existe a ilusão de paralelismo.
Sistemas Operacionais
Threads
O modelo de threads permite que múltiplas execuções ocorram no mesmo 
ambiente de processo, com um grande grau de independência uma da outra.
Threads são linhas de execução, e compreendem:
• Id: identificador da thread
• Endereço da próxima instrução a ser executada
• Conjunto de registradores em uso
• Uma pilha de execução
Threads compartilham com outras threads recursos, como:
• Trecho de código
• Dados
• Arquivos abertos
Sistemas Operacionais
Threads
Um thread pode ser definido como uma sub-rotina de um programa que pode ser 
executada de forma assíncrona, ou seja, executada paralelamente ao programa 
chamador.
O programador deve especificar os threads, associando-os às sub-rotinas 
assíncronas.
Um ambiente multithread possibilita a execução concorrente de sub-rotinas dentro 
de um mesmo processo.
Mas, quando é desejável utilizar mais de uma thread?
Sistemas Operacionais
Unidade de Alocação
Ambientes Monothread
O processo é ao mesmo tempo a unidade de alocação de recursos e a unidade de 
escalonamento.
Ambiente Multithread
A unidade de alocação de recursos é o processo, onde todos os seus threads
compartilham o espaço de endereçamento, descritores de arquivos e dispositivos de 
E/S. Cada thread representa uma unidade de escalonamento independente. Neste caso 
o sistema não seleciona um processo para a execução, mas um de seus threads.
Sistemas Operacionais
Ambiente Monothread
Um programa é uma sequência de instruções, composta por desvios, repetições e 
chamadas a procedimentos e funções.
Em um ambiente monothread, um processo suporta apenas um programa no seu 
espaço de endereçamento.
Neste ambiente, aplicações concorrentes são implementadas apenas com o uso de 
múltiplos processos independentes ou subprocessos.
Thread ThreadThread
Sistemas Operacionais
Ambiente Monothread
A utilização de processos independentes e 
subprocessos permite dividir uma 
aplicação em partes que podem trabalhar 
de forma concorrente. 
Exemplo: aplicações gráfica, software de 
gerenciamento de e-mails. Um usuário 
pode ler suas mensagens antigas, e ao 
mesmo tempo enviar e receber novas 
mensagens.
Subprocessos Processos Independentes
Sistemas Operacionais
Problemas com Ambientes Monothreads
A utilização de processos no desenvolvimento 
de aplicações concorrentes demanda 
consumo de diversos recursos do sistema.
Sempre que um processo é criado, o sistema 
deve alocar recursos para cada processo, 
consumindo tempo de processador neste 
trabalho. No caso do término do processo, o 
sistema dispensa tempo para desalocar 
recursos previamente alocados.
Cada um possui contextos de hardware, 
software e de endereçamento próprios.
Subprocessos Processos Independentes
Como cada processo possui seu próprio 
espaço de endereçamento, a 
comunicação entre eles torna-se difícil 
e lenta, pois necessitaram utilizar 
mecanismos como pipes, semáforos, 
memória ou compartilhamento de 
mensagem.
Sistemas Operacionais
Ambiente Multithread 
Em um ambiente multithread, não existe a ideia de programas associados a 
processos, mas, sim a threads.
O processo tem pelo menos um thread de execução, mas pode compartilhar o seu 
espaço de endereçamento com inúmeros outros threads.
A utilização do processador, dos discos e de outros periféricos pode ser feita de 
forma concorrente pelos diversos threads, significando melhor utilização dos recursos 
computacionais disponíveis.
Em algumas aplicações, a utilização de threads pode melhorar o desempenho da 
aplicação apenas executando tarefas em background enquanto operações de E/S estão 
sendo processadas.
Sistemas Operacionais
Ambiente Multithread
Na figura ao ladoexiste apenas um 
processo com três threads de execução 
compartilhando o mesmo espaço de 
endereçamento e contexto de software.
Desta forma o ambiente multithread
possibilita a execução concorrente de sub-
rotinas dentro de um mesmo processo.
Sistemas Operacionais
Ambiente Multithread
Inicialmente, o processo é criado 
apenas com o thread1 para a execução 
do programa principal.
Quando o programa principal chama as 
sub-rotinas Sub_1 e Sub_2, são criados 
os Thread_2 e Thread_3, e executados 
independentemente do programa 
principal. 
Espaço de
endereçamento
Processo
Programa Principal
C
o
n
te
x
to
 d
e
H
a
rd
w
a
re
C
o
n
te
x
to
 d
e
H
a
rd
w
a
re
C
o
n
te
x
to
 d
e
H
a
rd
w
a
re
Call Sub_1
Call Sub_2
Thread_1
Thread_2
Thread_3
PC
SP
PC
SP
PC
SP
Fim
Sub_2
Variáveis
Ret
Sub_1
Ret
..
.
..
.
Sistemas Operacionais
Ambiente Multithread
Em ambiente cliente-servidor, threads são essenciais 
para solicitações de serviços remotos.
Em ambiente monothread, uma solicitação a serviço 
remoto, pode ficar esperando indefinidamente, 
enquanto aguarda o resultado.
Em ambiente multithread, um thread pode solicitar 
serviço remoto, enquanto a aplicação pode continuar 
realizando outras atividades.
Para o processo que atende a solicitação, múltiplos 
threads permitem que diversos pedidos sejam 
atendidos simultaneamente.
Sistemas Operacionais
Ambiente Multithreads
• Threads são implementados internamente através de uma estrutura denominada 
bloco de controle do thread (TCB).
• O TCB armazena, além do contexto de hardware, mais algumas informações 
relacionadas exclusivamente ao thread, como, prioridade, estado de execução e bits de 
estado.
• Em ambientes multithread, a unidade de alocação de recursos é o processo, e todos os 
seus threads compartilham espaço de endereçamento, descritores de arquivos e 
dispositivos de E/S. Por outro lado cada thread representa uma unidade de alocação 
independente que o SO seleciona para a execução
Sistemas Operacionais
Ambiente Multithreads - Características
 Cada processo pode responder a várias solicitações concorrentemente ou mesmo 
simultaneamente, caso haja mais de um núcleo/processador.
 Programas concorrentes implementando múltiplos threads são mais rápidos que 
programas concorrentes que implementam múltiplos processos. A grande vantagem 
no uso de threads é a possibilidade de minimizar a alocação de recursos do sistemas, 
além de diminuir o overhead na criação, troca e eliminação de processos.
 Threads compartilham o processador da mesma maneira que processos e passam 
pelas mesmas mudanças de estado (execução, espera e pronto).
Sistemas Operacionais
Ambiente Multithreads - Características
 Enquanto um thread espera por uma operação de E/S, outro pode ser executado.
 Para permitir a troca de contexto entre diversos threads, cada umpossui seu próprio 
contexto de hardware, com o conteúdo dos registrados gerais, PC (Program Counter) e 
SP (Stack Point).
 Quando um thread está sendo executado, seu contexto de hardware está carregado 
nos registradores do processador. No momento em que o thread perde a utilização da 
CPU, as informações são atualizadas e salvas no seu TCB.
Sistemas Operacionais
Ambiente Multithreads - Características
 Como não existe proteção no acesso a memória, por threads de um mesmo 
processo, é fundamental que a aplicação implemente mecanismos de comunicação 
e sincronização entre threads a fim de garantir o acesso seguro aos dados 
compartilhados.
Implementação Tempo de Criação (µS) Tempo de 
Sincronização (µS)
Processo 1700 200
Processo Lightweight 350 390
Thread 52 66
Latência de Processos e Threads
Sistemas Operacionais
Threads - Vantagens
Tempo de resposta
Uma aplicação interativa pode continuar sendo executada se parte dela está 
bloqueada, ou executando uma operação lenta.
Compartilhamento de recursos
Por padrão os threads compartilham: memória e qualquer recurso alocado pelo 
processo ao qual estão subordinadas. Não é necessária a alocação de mais 
recursos no sistema.
Economia
É mais econômico criar e trocar o contexto dos threads.
Utilização de arquiteturas multiprocessadas
Cada thread pode ser executada de forma paralela, em processadores distintos.
Sistemas Operacionais
Multithreads
Sistemas Operacionais
Arquitetura e Implementação
Threads podem ser oferecidos em: 
• Modo Usuário  Biblioteca de rotinas fora do núcleo do sistema operacional.
• Modo Kernel Implementado pelo núcleo do sistema operacional
• Modo Híbrido  Por uma combinação de vantagens de ambos.
Sistemas Operacionais
Threads em Modo Usuário (TMU)
TMU são implementados pela aplicação, acima do sistema operacional.
Existe uma biblioteca de rotinas que possibilita à aplicação realizar tarefas como 
criação, gerência, troca de mensagens entre threads e uma política de escalonamento, 
sem suporte do kernel.
É responsabilidade exclusiva da aplicação gerenciar
e sincronizar os diversos threads existentes. SO não sabe
da existência de múltiplos threads.
Modo
usuário
Modo
kernel
Kernel
Biblioteca
Thr
ead
 0
Thr
ead
 4
Thr
ead
 3
Thr
ead
 2
Thr
ead
 1
Sistemas Operacionais
Threads em Modo Usuário (TMU)
A vantagem deste modelo é a possibilidade de implementar aplicações multithreads
mesmo em sistemas operacionais que não suportam threads.
Esta implementação é mais rápida e eficientes por dispensarem acessos ao kernel
do sistema operacional, evitando assim a mudança de
modo de acesso (usuário-kernel-usuário).
Modo
usuário
Modo
kernel
Kernel
Biblioteca
Thr
ead
 0
Thr
ead
 4
Thr
ead
 3
Thr
ead
 2
Thr
ead
 1
Sistemas Operacionais
Threads em Modo Usuário - Limitações
Threads em modo usuário possuem uma grande limitação, pois o SO gerencia cada 
processo como se existisse apenas um único thread.
No momento em que um thread chama uma rotina do sistema que o coloca em estado 
de espera, todo o processo é colocado no estado de espera, mesmo havendo outros 
threads para execução.
Para contornar esta limitação, a biblioteca tem que possuir rotinas que substituam as 
rotinas bloqueantes por outras que não possam causar o bloqueio de um thread.
Sistemas Operacionais
Threads em Modo Usuário - Limitações
Todo este controle é transparente para o usuário e o sistema operacional.
Um dos maiores problemas na implementação de threads em modo usuário, é o 
tratamento individual de sinais.
No caso de interrupção de clock, fundamental para a implementação de tempo 
compartilhado, se torna uma limitação crítica. Neste caso, os sinais de temporização 
devem ser interceptados, para que se possa interromper o thread em execução e realizar 
a troca de contexto.
Sistemas Operacionais
Threads em Modo Usuário - Limitações
Escalonamento em ambientes com múltiplos processadores não é possível para TMU 
de um mesmo processo. Não podem ser executados em CPUs diferentes 
simultaneamente.
Esta restrição limita drasticamente o grau de paralelismo da aplicação, já que os 
threads de um mesmo processo podem ser executados em somente um processador de 
cada vez.
Modo
usuário
Modo
kernel
Kernel
Biblioteca
Thr
ead
 0
Thr
ead
 4
Thr
ead
 3
Thr
ead
 2
Thr
ead
 1
Sistemas Operacionais
Threads em Modo Usuário
• As threads de usuário facilitam aspectos de 
portabilidade e são criadas e gerenciadas por 
uma biblioteca no nível do usuário. 
• O kernel não enxerga esses threads e, por esse 
motivo, não pode gerenciar individualmente.
• Exemplos de bibliotecas de threads: POSIX 
Pthreads, Win32 threads, Java threads
Sistemas Operacionais
Threads em Modo Kernel
TMK são implementados diretamente pelo núcleo do sistema operacional, através de 
chamadas a rotinas do sistema, que oferecem todas as funções de gerenciamento e 
sincronização.
Enquanto nos pacotes em TMU todo tratamento é feito sem a ajuda do SO, ou seja 
sem a mudança do modo de acesso (usuário-kernel-usuário), pacotes em modo kernel
utilizam chamadas a rotinas do sistema e consequentemente, várias mudanças de modo 
de acesso.
SO pode escalonar cada thread individualmente.
O grande problema para pacotes em modo
kernel é o seu baixo desempenho.
Modo
usuário
Modo
kernelKernel
Threa
d 0 Threa
d 4
Threa
d 3
Threa
d 2
Threa
d 1
Sistemas Operacionais
Threads em Modo Kernel
Os threads em modo kernel são criados e gerenciados pelo 
núcleo do SO e não podem ser diretamente utilizadas pelo 
usuário.
TMU não bloqueiam o processo quando entram em estado de 
espera. O suporte a múltiplos threads é uma característica do 
sistema operacional.P
Implementação Operação 1 (µS) Operação 2 (µS)
Subprocesso 11.300 1.840
Thread em Modo Kernel 948 441
Thread em Modo Usuário 34 37
Sistemas Operacionais
Threads em Modo Híbrido
A arquitetura de TMH combina as vantagens de threads implementados em modo 
usuário (TMU) e threads em modo kernel (TMK). 
Um processo pode ter vários TMKs e, por sua vez, um TKH pode ter vários TMUs.
O modo híbrido apesar de maior flexibilidade,
apresenta problemas herdados de ambas as
implementações. Por exemplo, quando um TMK
realiza uma chamada bloqueante, todos os seus
TMUs são colocados no estado de espera.
Modo
usuário
Modo
kernel
Kernel
TMK 0 TMK 3TMK 2TMK 1
Biblioteca
TM
U 
0
TM
U 
4
TM
U 
5
TM
U 
3
TM
U 
2
TM
U 
1
Sistemas Operacionais
Threads em Modo Híbrido
A associação entre threads de usuário e de kernel
depende do sistema operacional. 
TMU: rápida criação e chaveamento entre 
threads.
TMK: o processo todo não é bloqueado pelo 
bloqueio de uma thread.
A ideia é utilizar algumas threads de núcleo e 
multiplexar threads de usuários sobre elas.
O usuário decide quantas threads utilizar, 
tendo uma maior flexibilidade.
Esta é a solução mais utilizada nos sistemas 
modernos.
Sistemas Operacionais
Processo Independentes, Subprocessos e Threads
Processos independentes, subprocessos e threads são maneiras diferentes de 
implementar a concorrência dentro de uma aplicação. 
Nesse caso, busca-se subdividir o código em partes para trabalharem de forma 
cooperativa. 
Considere um banco de dados com produtos de uma grande loja, onde vendedores fazem 
frequentemente consultas. 
Neste caso, a concorrência na aplicação proporciona um tempo de espera menor entre as 
consultas, melhorando o desempenho da aplicação e beneficiando os usuários. 
Sistemas Operacionais
Processo Independentes
O uso de processos independentes é a maneira mais simples de implementar a 
concorrência em sistema multiprogramáveis. 
Neste caso, não existe vínculo do processo criado com o seu criador. 
A criação de um processo independente exige a alocação de um PCB, possuindo 
contextos de hardware, contextos de software e espaço de endereçamento próprios 
Sistemas Operacionais
Subprocessos
Subprocessos são processos criados dentro de uma estrutura hierárquica. 
Nesse modo o processo criador é denominado processo-pai, enquanto o novo processo é 
chamado de subprocesso ou processo-filho. 
O subprocesso, por sua vez, pode criar outras estruturas de subprocessos. 
Uma característica desta implementação é a dependência existente entre o processo 
criador e o subprocesso. Caso um processo pai deixe de existir, os subprocessos 
subordinados são automaticamente eliminados. 
Sistemas Operacionais
Subprocessos
De modo semelhante aos processos independentes, subprocessos possuem seu próprio 
PCB. 
Além da dependência hierárquica entre processos e subprocessos, uma outra 
característica neste tipo de implementação é que subprocessos podem compartilhar 
quotas com o processo pai. 
Neste caso, quando um subprocesso é criado o processo-pai cede parte de suas quotas 
ao processo-filho. 
Sistemas Operacionais
Threads
O conceito de thread foi introduzido na tentativa de reduzir o tempo gasto em criação, 
eliminação e troca de contexto de processos nas aplicações concorrentes, bem como 
economizar recursos do sistema como um todo. 
Em um ambiente multithread, um único processo pode suportar múltiplos threads, cada 
qual associado a uma parte do código da aplicação. 
Neste caso, não é necessário haver diversos processos para a implementação da 
concorrência. 
Sistemas Operacionais
Threads
Threads compartilham o processador da mesma maneira que um processo, ou seja, 
enquanto um thread espera por uma operação de E/S, outro thread pode ser 
executado.
Cada thread possui seu próprio contexto de hardware, porém compartilha o mesmo 
contexto de software e espaço de endereçamento com os demais threads do 
processo. 
O compartilhamento do espaço de endereçamento permite que a comunicação de 
threads dentro do mesmo processo seja realizada de forma simples e rápida. 
A Pilha é uma área reservada para uso exclusivo. Não é permitido o compartilhamento da 
pilha entre as threads. 
Sistemas Operacionais
Dúvidas

Outros materiais