Você está na página 1de 40

Sistemas Operacionais

Processos e Threads – Parte II

Prof. Tiago Wirtti


PhD. Eng. Elétrica

1
Introdução aos Sistemas
Operacionais
Este material tem como base as
seguintes fontes:
– TANENBAUM. Sistemas Operacionais Modernos,
2ª Edição – Capítulo 2;
– OLIVEIRA; CARISSIMI; TOSCANI. Sistemas
Operacionais. 2ª Edição – Capítulo 2;
– Deitel, Deitel e Choffnes. Sistemas Operacionais –
Capítulos 3, 4, 5, 6 e 8.
– www.prenhall.com/tanenbaum_br
– pt.wikipedia.org/wiki/Sistemas_operacionais
2
Capítulo 2
Processos e Threads

2.1 Processos
2.2 Threads
2.3 Comunicação interprocessos
2.4 Problemas clássicos de IPC
2.5 Escalonamento

3
Introdução às Threads (1)

(a) Três processos cada um com um thread


(b) Um processo com três threads
4
Introdução às Threads (2)

• Sistemas antigos (fósseis)


– Um processo possui uma thread
(DOS, Windows 3x, Symbian)
• Sistemas modernos
– Um processo pode ter várias threads
(Linux, Unix, Windows NT, MacOS,
Android)

5
Introdução às Threads (3)

• Modelo de processo:
– Grupamento de recursos:
• código, dados, recursos;
– Execução:
• PC (registrador de próxima instrução)
• Registradores de trabalho
• Pilha com a história da execução.

6
Introdução às Threads (4)

Modelo de thread: Cada thread tem sua


própria pilha
7
Introdução às Threads (5)

• Processo x Thread
– Processos são usados para agrupar
recursos comuns
– Threads são entidades escalonadas
para executar em um processador
– As threads permitem que múltiplas
execuções ocorram no mesmo
ambiente de processo de forma
independente.
8
Introdução às Threads (6)

• Comportamento dos processos x


comportamento das threads
– Os processos compartilham com outros
processos o espaço físico de memória,
discos, impressoras e outros recursos
– As threads compartilham os recursos do
processo (espaço de endereçamento,
arquivos abertos, e outros recursos no
contexto do processo)
9
Introdução às Threads (7)

• Denominações
– Processos que possuem apenas uma
thread: processos singlethread ou
monothread
– Processo que possuem várias
threads: processos multithread
– Threads: processos leves ou
lightweight process
10
Introdução às Threads (8)

• Relacionamento entre processos x


relacionamento entre threads
– Processos competem entre si pelos
recursos do sistema: figura (a)
– Threads cooperam entre si para
resolver algum problema
intrinsecamente paralelo: figura (b)

11
Introdução às Threads (9)

• Processos singlethreaded x
multithreaded

12
Introdução às Threads (10)

• Recursos: processos x threads


Recursos do processo
Recursos da thread (privado
(compartilhados por todas as
para cada thread)
threads do processo)
Espaço de endereçamento Contador de programa
Variáveis globais Registradores
Arquivos abertos Pilha
Processos filhos Estado
Alarmes pendentes
Sinais e tratadores de sinais
Informação de contabilidade

13
Introdução às Threads (11)

• Estados de uma thread

14
Introdução às Threads (12)

• Threads e pilhas de execução


– Cada thread possui a sua própria
pilha de execução na qual estão
empilhadas todas as chamadas de
procedimento que ainda não
retornaram
– Cada thread possui sua própria
história de execução descrita em sua
pilha de execução 15
Utilização de Threads (1)

• Vantagens do uso de threads


– Paralelismo dentro do processo com
compartilhamento do seu espaço de
endereços e dados
– Facilidade de criação e destruição
das threads
– Melhora o desempenho quando há
equilíbrio entre threads I/O-bound e
CPU-bound
16
Utilização de Threads (2)
Exemplo 1 – Editor de textos

• As threads de um editor de textos


são:
 Thread_GUI
 Thread_Reformata

 Thread_Backup

 Thread_CorretorOrtografico

 Thread_AnalisadorSemantico

17
Utilização de Threads (3)
Exemplo 1 – Editor de textos

Um processador de texto e suas threads


18
Utilização de Threads (4)
Exemplo 1 – Editor de textos

• Editor de textos e tempo de CPU


– Cada uma destas threads pode ter
uma fatia de 10 ɥs (microsegundos)
do tempo do processo para tratar sua
tarefa específica, por exemplo.

19
Utilização de Threads (5)
Exemplo 1 – Editor de textos

• Pergunta 1:
– Este editor de textos poderia ser
projetado com cinco processos ao
invés de cinco threads?

20
Utilização de Threads (6)
Exemplo 1 – Editor de textos

• Resposta 1:
– Sim, mas com cinco processos
teríamos custo alto para realizar a
comunicação entre os processos,
pois são cinco espaços de endereço
distintos. Como as threads executam
no mesmo espaço, a comunicação é
direta.
21
Utilização de Threads (7)
Exemplo 1 – Editor de textos

• Pergunta 2:
– Este editor de textos poderia ser
projetado com um processo
singlethread, sem perda de
desempenho?

22
Utilização de Threads (8)
Exemplo 1 – Editor de textos

• Resposta 2:
– Sim, utilizando programação
orientada a eventos e interrupções,
mas com um modelo bastante
complexo. Além disso, estas
interrupções não poderiam resultar
em bloqueio do processo, senão o
processo perderia o processador a
cada interação com o usuário.
23
Utilização de Threads (9)
Exemplo 2 – Servidor Web multithread

• Servidor Web multithread


– Thread_Despachante:
• Recebe as requisições http e encaminha para
um processo operário
– Thread_Operaria:
• (1) verifica se a página solicitada está no cache
do servidor Web e
• (2) caso não esteja, faz um read no disco em
busca da página e fica bloqueada até a
conclusão da leitura pelo HD, cedendo a vez
para o despachante ou para outra operária. 24
Utilização de Threads (10)
Exemplo 2 – Servidor Web multithread

Um servidor web com múltiplos threads


25
Utilização de Threads (11)
Exemplo 2 – Servidor Web multithread

• Servidor Web com multithread


– Para que este modelo funcione,
apenas a thread que faz a chamada
de sistema deve ficar bloqueada.

26
Utilização de Threads (12)
Exemplo 3 – Servidor Web monothread

• Servidor Web com monothread


– O laço principal do servidor Web obtém
uma requisição, examina-a e executa-a até
o final antes de obter a próxima requisição;
– Neste caso, enquanto espera pela leitura
em disco, o processador do servidor Web
está ocioso (supondo que o servidor Web
é dedicado)
– Observação: O processador será
subutilizado neste modelo 27
Utilização de Threads (13)
Exemplo 3 – Servidor Web monothread com
chamada sem bloqueio
• Servidor Web monothread com chamada sem
bloqueio
– O laço principal do servidor Web obtém uma
requisição e a examina
– Se a página requisitada está na cache,
devolve a página e processa a próxima
requisição
– Se a página requisitada NÃO está na cache,
faz uma chamada ao sistema sem bloqueio,
salva o número da requisição em uma tabela
de controle e atende o próximo evento, que
pode ser uma resposta do disco ou uma nova
requisição 28
Utilização de Threads (14)

• Síntese dos modelos estudados


Modelo Característica Programação Desempenho

Paralelismo, chamadas
Multithread Seqüencial Bom
ao sistema com bloqueio
Sem paralelismo,
Processo
chamadas ao sistema Seqüencial Ruim
monothread
com bloqueio
Paralelismo, chamadas
Máquina de estados
ao sistema sem Orientada a interrupções Bom
finitos
bloqueio, interrupções
29
Threads de Usuário (1)

Um pacote de threads de usuário


30
Threads de Usuário (2)

• Características
– Implementadas fora do kernel do
sistema operacional;
– Possibilitam a utilização de threads
em sistemas operacionais que não
suportam threads;
– Cada processo possui um sistema
supervisor de threads;
31
Threads de Usuário (3)

• Características
– Neste modelo as threads executam
no topo do sistema supervisor que é
capaz de realizar as operações
thread_create, thread_exit,
thread_wait, thread_yeld e outras.

32
Threads de Usuário (4)

• Características
– O sistema supervisor possui uma
tabela de threads, pois neste modelo
apenas o processo conhece as suas
threads (o sistema operacional não
reconhece a existência das threads);

33
Threads de Usuário (5)

• Problemas
– Quando uma thread de usuário faz
uma chamada bloqueante, todo o
processo é bloqueado;
– Esse modelo de thread não admite
que o supervisor (escalonador de
threads do processo) trabalhe com o
sinal de preempção
34
Threads de Núcleo (1)

Um pacote de threads gerenciado pelo núcleo


35
Threads de Núcleo (2)

• Características
– Não há necessidade de um sistema
supervisor para cada processo;
– Não há necessidade de tabelas de
threads para cada processo;
– O kernel possui uma tabela de
threads que gerencia as threads de
todo o sistema;
36
Threads de Núcleo (3)

• Problemas
– O chaveamento de contexto é mais
pesado para as threads de núcleo
(em relação às threads de usuário);
– Torna o escalonamento de processos
mais complicado, exigindo um
escalonador no kernel que trabalhe
com threads
37
Threads de Híbridas (1)

Multiplexação de threads de usuário sobre


threads de núcleo 38
Threads Híbridas (2)

• Definição
– Formada por uma thread de núcleo
(escalonável pelo kernel) e várias
threads de usuário (escalonadas pelo
supervisor do processo)
– Assim, as threads de usuário fazem o
processamento normalmente e, quando
ocorre a necessidade de uma chamada
bloqueante, a thread de núcleo lida com
a situação
39
Leituras complementares:
• Leitura: OLIVEIRA; CARISSIMI; TOSCANI.
Sistemas Operacionais. 2ª Edição, Editora
Sagra-Luzzato, Porto Alegre, Novembro,
2001 – Capítulo 2;
• Leitura: Tanenbaum; Sistemas Operacionais
Modernos. 2ª Edição – Capítulo 2 (págs. 60
– 73).

40

Você também pode gostar