Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini...

16
1 Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo 6 - Threads Com o conceito de múltiplos threads (multithread) é possível projetar e implementar aplicações concorrentes de forma eficiente, pois um processo pode ter partes diferentes do seu código sendo executadas concorrentemente, com um menor overhead do que utilizando múltiplos processos. Como os threads de um mesmo processo compartilham o mesmo espaço de endereçamento, a comunicação entre threads não envolve mecanismos lentos de intercomunicação entre processos, aumentando, consequentemente o desempenho da aplicação. 2

Transcript of Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini...

Page 1: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

1

Sistemas OperacionaisProf. Esp. André Luís BeliniBacharel em Sistemas de InformaçõesMBA em Gestão Estratégica de Negócios

Capítulo 6 - Threads

• Com o conceito de múltiplos threads (multithread) é

possível projetar e implementar aplicações concorrentes

de forma eficiente, pois um processo pode ter partes

diferentes do seu código sendo executadas

concorrentemente, com um menor overhead do que

utilizando múltiplos processos.

• Como os threads de um mesmo processo compartilham

o mesmo espaço de endereçamento, a comunicação

entre threads não envolve mecanismos lentos de

intercomunicação entre processos, aumentando,

consequentemente o desempenho da aplicação.

2

Page 2: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

2

• O desenvolvimento de programas que exploram os

benefícios da programação multithread não é simples.

• A presença do paralelismo introduz um novo conjunto de

problemas, como a comunicação e sincronização de

threads.

• Existem diferentes modelos para a implementação de

threads em um sistema operacional, onde desempenho,

flexibilidade e custo devem ser avaliados.

3

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.

4

Page 3: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

3

• A utilização de processos independentes e

subprocessos permiti dividir uma aplicação em partes

que podem trabalhar de forma concorrente.

• Exemplo: software gerenciador de e-mails, pois ao

mesmo tempo que você está lendo uma mensagens,

outras podem estar chegando ou sendo enviadas ao

mesmo tempo.

• 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.

5

Concorrência com subprocessos e processos independentes

6

Subprocessos Processos Independentes

Page 4: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

4

• Problemas desse tipo de implementação: sempre que

um novo processo é criado, o sistema operacional deve

alocar recursos para ele, consumindo tempo do

processador nesse trabalho.

• Ao término do processo, o sistema dispensa tempo para

desalocar recursos previamente alocados.

• Outro problema é o compartilhamento de espaço de

endereçamento. Cada processo tem seu espaço de

endereçamento e, portanto, a comunicação entre eles

torna-se difícil e lenta.

7

Ambiente Multithread

• Em um ambiente multithread, ou seja, com múltiplos

threads, não existe a ideia 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.

• Um thread pode ser definido como uma sub-rotina de

um programa que pode ser executada de forma

assíncrona, ou seja, executada concorrentemente ao

programa chamador.

8

Page 5: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

5

Ambiente Multithread

9

Contextode hardware

Contextode hardware

Contextode hardware

Espaço deendereçamento

Con

text

o d

eso

ftw

are

Thread 3Thread 2Thread 1

• No ambiente multithread, cada processo pode responder

a várias solicitações concorrentemente ou mesmo

simultaneamente, caso haja mais de um processador.

• A grande vantagem do 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.

10

Page 6: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

6

Aplicação multithread

11

Espaço deendereçamento

Processo

Programa Principal

Conte

xto

de

Hard

ware

Conte

xto

de

Hard

ware

Conte

xto

de

Hard

ware

Call Sub_1

Call Sub_2

Thread_1

Thread_2

Thread_3

PCSP

PCSP

PCSP

Fim

Sub_2

Variáveis

Ret

Sub_1

Ret...

...

• Threads compartilham o processador da mesma

maneira que processos e passam pelas mesmas

mudanças de estado (execução, espera e pronto).

• Dentro de um mesmo processo, threads compartilham o

mesmo contexto de software e espaço de

endereçamento com os demais threads, porém cada

thread possui seu contexto de hardware individual.

• Threads são implementados internamente através de

uma estrutura de dados denominada bloco de controle

do thread (Thread Control Block – TCB).

• O TCB armazena, além do contexto do hardware, mais

algumas informações relacionadas exclusivamente ao

thread, como prioridade, estado de execução e bits de

estado.12

Page 7: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

7

• Em ambientes monothread, o processo é ao mesmo

tempo a unidade de alocação de recursos e a unidade

de escalonamento.

• Em um 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 e, neste caso, o sistema não seleciona um

processo para a execução, mas sim um de seus

threads.

13

• A grande diferença entre aplicações monothread e

multithread está no uso do espaço de endereçamento.

• Processos independentes e subprocessos possuem

espaços de endereçamento individuais e protegidos,

enquanto threads compartilham o espaço dentro de um

mesmo processo.

• Esta característica permite que o compartilhamento de

dados entre threads de um mesmo processo seja mais

simples e rápida, se comparado ao ambiente

monothread.

• Programas concorrentes com múltiplos threads são mais

rápidos do que implementados com múltiplos processos,

pois operações de criação, troca de contexto e

eliminação de threads geram menor overhead

14

Page 8: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

8

Latência de processos e threads (Vahalia, 1996)

Implementação Tempo de criação Tempo de sincronização

Processo 1700 200

Processo lightweight 350 390

Thread 52 66

15

Aplicação multithread

16

Thread deentrada

Thread degravação

Thread deexibição

Buffer

Page 9: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

9

• A utilização do processador, discos e outros periféricos

pode ser feita de forma concorrente pelos diversos

threads, significando uma melhor utilização dos recursos

computacionais disponíveis.

• Aplicações como editores de texto, planilhas, aplicativos

gráficos e processadores de imagem são especialmente

beneficiados quando desenvolvidas com base em

threads.

• Em ambientes cliente-servidor, threads são essenciais

para solicitações de serviços remotos. Em um ambiente

monothread, se uma aplicação solicita um serviço

remoto ela pode ficar esperando indefinidamente,

enquando aguarda pelo resultado.

17

• Em um ambiente multithread, um thread pode solicitar o

serviço remoto, enquanto a aplicação pode continuar

realizando outras atividades.

• Já para o processo que atende a solicitação, múltiplos

threads permitem que diversos pedidos sejam atendidos

simultaneamente.

• O núcleo do sistema operacional também pode ser

implementado com o uso desta técnica de forma

vantajosa, como na arquitetura microkernel.

18

Page 10: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

10

Aplicação multithread

19

Solicitações

Processo servidor

ThreadThread

Processo clienteProcesso cliente Processo cliente

Thread

Programação multithread

• O conjunto de rotinas disponíveis para que uma

aplicação utilize as facilidades dos threads é chamado

de pacote de threads.

• Um exemplo é a API CreateThread, no sistema

Windows.

• O desenvolvimento de aplicações multithread não é

simples, pois exige que a comunicação e o

compartilhamento de recursos entre os diversos threads

sejam feitos de forma sincronizada para evitar

problemas de inconsistências e deadlock.

• Se uma aplicação criar um número execessivo de

threads, poderá ocorrer um overhead no sistema,

ocasionando uma queda de desempenho.

20

Page 11: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

11

• Para obter os benefícios do uso de threads, uma

aplicação deve permitir que partes diferentes do seu

código sejam executadas concorrentemente de forma

independente.

• Se um aplicativo realiza várias operações de E/S e trata

eventos assíncronos, a programação multithread

aumenta o desempenho até mesmo em ambientes com

um único processador.

• Sistemas gerenciadores de banco de dados, servidores

de arquivos ou impressão, servidores web e de correio

são exemplos onde o uso de múltiplos threads

proporciona grandes vantagens e benefícios.

21

Arquitetura e implementação

• Existem duas formas de implementar threads em um

sistema operacional:

1. Threads podem ser oferecidos por uma biblioteca de

rotinas fora do núcleo do S.O. (modo usuário), pelo

próprio núcleo do S.O. (modo kernel), uma combinação

de ambos (modo híbrido).

2. Outra forma seriam os scheduler activations

22

Page 12: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

12

Threads em modo usuário

• Threads em modo usuário (TMU) são implementados

pela aplicação e não pelo S.O.

• A vantagem deste modelo é a possibilidade de

implementar aplicações multithreads mesmo em S.O.

que não suportam threads.

• TMU possuem uma grande limitação, pois o S.O.

gerencia cada processo como se existisse apenas um

único thread.

• No momento em que um thread entra numa rotina de

espera, todo o processo é colocado em modo de

espera, mesmo havendo outros threads prontos para

execução.

23

24

Modousuário

Modokernel

Kernel

Biblioteca

Thre

ad 0

Thre

ad 4

Thre

ad 3

Thre

ad 2

Thre

ad 1

Threads em modo usuário

Page 13: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

13

Threads em modo kernel

• Threads em modo kernel (TMK) são implementados

diretamente pelo núcleo do S.O., através de chamadas

de rotinas do S.O.

• O S.O. sabe da existência de cada thread e pode

escaloná-los individualmente. No caso de múltiplos

processadores, os threads de um mesmo processo

podem ser executados simultaneamente.

• O grande problema do TMK é o seu baixo desempenho.

• Pacotes em modo kernel utilizam chamadas a rotinas do

sistema e, consequentemente, várias mudanças no

modo de acesso.

25

26

Threads em modo kernel

Modousuário

ModokernelKernel

Thre

ad

0

Th

rea

d 4

Th

rea

d 3

Th

read

2

Thre

ad

1

Page 14: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

14

Threads em modo híbrido

• Threads em modo híbrido combinam as vantagens da

TMU e TMK.

• Um processo pode ter vários TMKs e, por sua vez, um

TMK pode ter vários TMUs.

• O núcleo do sistema reconhece os TMKs e pode

escaloná-los individualmente.

• Um TMU pode ser executado em um TMK, em um

determinado momento, e no instante seguinte ser

executado em outro.

• Apresenta os problemas herdados de ambas as

implementações.

27

28

Modousuário

Modokernel

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

Threads em modo híbrido

Page 15: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

15

Scheduler Activations

• Os problemas apresentados no pacote de threads em

modo híbrido existem devido à falta de comunicação

entre os threads em modo usuário e modo kernel.

• O modelo ideal deveria utilizar as facilidades do pacote

em modo kernel com o desempenho e a flexibilidade do

modo usuário.

• O sheduler activations combina o melhor das duas

arquiteturas, mas ao contrário de dividir os threads em

modo usuário e kernel, o núcleo do S.O. troca

informações com as bibliotecas de threads utilizando

uma estrutura de dados.

29

30

Scheduler Activations

Modousuário

ModokernelKernel

Biblioteca

Th

read

0

Th

read

4

Thre

ad

3

Th

rea

d 2

Th

read

1

Page 16: Aula 07 - Cap. 06 - Thread [Modo de Compatibilidade] Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo

16

Prof. André Luís Belini

E-mail: [email protected]

Blog: http://profandreluisbelini.wordpress.com/