Prof. Fabio Augusto Oliveira écriado apenas com o Thread_1 para execução do programa principal....
Transcript of Prof. Fabio Augusto Oliveira écriado apenas com o Thread_1 para execução do programa principal....
Sistemas Operacionais
Prof. Fabio Augusto Oliveira
Threads
• Um processo representa uma sequênciade instruções única, executada paralelamente a outra seqüências de instruções.
• Um thread é uma maneira de um programa dividir a si mesmo em duas ou mais tarefas simultâneas.
Ambiente Monothread
• Um programa é uma seqüência de instruções, composta por desvios, repetições e chamadas a procedimentos e funções.
• Em ambiente monothread, um processo suporta apenas um programa no seu espaço de endereçamento.
Ambiente Monothread
• Neste ambiente, aplicações concorrentes são implementadas apenas com o uso de múltiplos processos independentes ou subprocessos.
• Esta utilização permite dividir uma aplicação em partes que podem trabalhar de forma concorrente.
Ambiente Monothread
• Exemplo:– Uso de software de gerenciamento de e-
mails. Neste ambiente, um usuário pode estar lendo suas mensagens antigas, ao mesmo tempo que pode estar enviando e-mails e recebendo novas mensagens.
• Com o uso de múltiplos processos, cada funcionalidade do software implicaria a criação de um novo processo para atendê-la, aumentando o desempenho da aplicação.
Ambiente Monothread
Subprocessos Processos Independentes
Ambiente Monothread
• O problema neste tipo de implementação é que o uso de processos no desenvolvimento de aplicações concorrentes demanda consumo de diversos recursos do sistema.
• Sempre que um novo processo é criado, o sistema deve alocar recursos para cada processo.
Ambiente Monothread
• Outro problema a ser considerado équanto ao compartilhamento do espaço de endereçamento.
• Cada processo possui seu próprio espaço de endereçamento, a comunicação entre processos torna-se difícil e lenta, pois utiliza mecanismos como pipes, sinais, semáforos, memória compartilhada ou troca de mensagem.
Ambiente Monothread
• Na figura abaixo existem três processos monothreads, cada um com seu próprio contexto de hardware, contexto de software e espaço de endereçamento.
Thread ThreadThread
Ambiente Monothread
• São exemplos de sistemas monothread o Microsoft MS-DOS e as primeiras versões do MS-Windows. Mesmo em ambientes multiprogramáveis e multiusuário, encontramos exemplos de implementações monothread, como nas versões mais antigas dos sistemas VAX/VMS e Unix .
Ambiente Multithread
• Não existe a idéia de programas associados a processos , mas, sim, a threads.
• O processo, neste ambiente, tem pelo menos um thread de execução, mas pode compartilhar o seu espaço de endereçamento com inúmeros outros threads.
Ambiente Multithread
Contextode hardware
Contextode hardware
Contextode hardware
Espaço deendereçamento
Con
text
o de
softw
are
Thread 3Thread 2Thread 1
Ambiente Multithread
• De forma simplificada, 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.
• Desta forma um ambiente multithread possibilita a execução concorrente de sub-rotinas dentro de um mesmo processo.
Ambiente Multithread
• Na figura abaixo existe um programa principal que realiza a chamada de duas sub-rotinas assíncronas (Sub_1 e Sub_2). Inicialmente, o processo é criado apenas com o Thread_1 para 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, respectivamente, e executados independentemente do programa principal. Neste processo, os três threads são executados concorrentemente.
Ambiente Multithread
Espaço deendereçamento
Processo
Programa Principal
Con
text
o de
Har
dwar
eC
onte
xto
deH
ardw
are
Con
text
o de
Har
dwar
e
Call Sub_1
Call Sub_2
Thread_1
Thread_2
Thread_3
PCSP
PCSP
PCSP
Fim
Sub_2
Variáveis
Ret
Sub_1
Ret
......
Ambiente Multithread
• No ambiente multithread, cada processo pode responder a várias solicitações concorrentemente ou mesmo simultaneamente, caso haja mais de um processador.
• Grande vantagem no uso de threads é a possibilidade de minimizar a alocação de recursos do sistema, além de diminuir o overhead na criação, troca e eliminação de processos.
Ambiente Multithread
• Threads compartilham o processador da mesma maneira que processos e passam pelas mesmas mudanças de estado.
• Exemplo:– Enquanto um thread espera por uma
operação de E/S, outro thread pode ser executado.
Ambiente Multithread
• A grande diferença entre aplicações monothread e multithread está no uso do espaço de endereçamento.
• Processos independentes e subprocessospossuem espaços de endereçamento individuais e protegidos, enquanto threads compartilham o espaço dentro de um mesmo processo.
Ambiente Multithread
• Esta característica permite que o compartilhamento de dados entre threads de um mesmo processo seja mais simples e rápido, se comparado a ambientes monothreads.
• Como threads de um mesmo processo compartilham o mesmo espaço de endereçamento, não existe qualquer proteção no acesso à memória, permitindo que um thread possa alterar facilmente dados de outros.
Ambiente Multithread
• O uso de multithreads proporciona uma série de benefícios. Programas concorrentes com múltiplos threads são mais rápidos do que programas concorrentes implementados com múltiplos processos, pois operações de criação, troca de contexto e eliminação dos threads geram menor overhead.
Ambiente Multithread
Implementação Tempo de Criação (µs) Tempo de sincronização (µs)
Processo 1700 200
Processo Lightweight 350 390
Thread 52 66
Ambiente Multithread
• 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.
Ambiente Multithread
• Aplicações como editores de texto, planilhas, aplicativos gráficos e processadores de imagens são especialmente beneficiados quando desenvolvidos com base em threads.
• Em ambientes cliente-servidor, threads são essenciais para solicitações de serviços remotos.