Conteúdo dos Slides: Prof.
Humberto Brandão
Sistemas
Operacionais
Aula V – Threads
Prof. Fellipe Rey
Bacharelado em Ciência da Computação
20/08/2024
Revisão da última aula
• Execução sequencial
Um contador de programa;
• Paralelismo: Modelo conceitual de 4 processos
sequenciais, independentes;
Quatro contadores de programa;
2
• Pseudo-paralelismo: Somente um programa está ativo –
a cada momento
Um contador de programa para cada processo; 36
Revisão da última aula
Revisão da última aula
Entra Despacho Sai
Pronto Executando
Pausa
Fila
Entra Despacho Sai
CPU
Pausa 3
–
36
Revisão da última aula
Revisão da última aula
Entra Despacho Sai
Pronto Executando
Pausa
O evento Aguardando
ocorreu evento
Bloqueado
Fila de prontos
Entra Despacho Sai
CPU
4
Pausa
Ocorre evento
Lista de bloqueados Espera evento
–
36
Threads
Threads
• O conceito de processo define que somente o próprio
processo tem acesso ao seu espaço de endereçamento.
FFFF
Pilha
Lacuna
Dados dinâmicos Espaço de
endereçamento
Dados estáticos
Texto
Reservado 5
0000
–
• Esta questão é fundamental para segurança e
consistência das aplicações, de forma geral. 36
Threads
Threads
• Contudo, frequentemente existem situações em que é
desejável ter execuções separadas acessando o mesmo
bloco de endereços na memória do computador.
• Por questões de eficiência no compartilhamento de
informações, ou para aproveitar melhor a ociosidade do
processador.
6
–
36
Threads
Threads
• Assim como os processos, os threads possuem:
Um contador de programa que indica qual é a próxima
instrução a ser executada;
Uma pilha de execução específica, que traz a história da
execução do thread, para indicar todas as chamadas que
ainda não obtiveram retorno;
Registradores, que indicam suas variáveis atuais de trabalho.
7
–
36
Threads
Threads
• Processos são utilizados para agrupar recursos;
• Threads são entidades escalonadas, podendo
compartilhar recursos com outros threads irmãos.
8
–
36
Threads
Threads
• As vezes, pelas características semelhantes, threads são
denominados processos leves.
• Comumente, encontramos o termo multithread para
descrever um sistema que permite múltiplos threads no
mesmo processos.
9
–
36
Threads
Threads
10
3 threads, mas habitando 3 3 threads, mas habitando o –
processos distintos mesmo processo
36
Threads
Threads
11
Threads distintos em um processo não Threads compartilham as mesmas variáveis
são tão independentes quanto threads globais do processo, tendo “independência” –
em processos distintos. apenas em suas variáveis armazenadas na
sua própria pilha de execução.
36
Threads
Threads
• Além de compartilhar o mesmo espaço de endereçamento,
os threads compartilham o mesmo conjunto de arquivos
abertos, processos filhos, etc.
Itens por processo Itens por thread
Espaço de endereçamento Contador de programa
Variáveis Globais Registradores
Arquivos abertos Pilha
Processos filhos Estado
Alarmes pendentes 12
Sinais e tratadores de sinais –
Informação de contabilidade
36
Estados de Threads
Estados de Threads
• Assim como um processo normal, um thread pode
assumir estados distintos:
Inicio *;
Pronto;
Executando; Entra Despacho Sai
Bloqueado;
Pronto Executando
Pausa
Finalizado *;
O evento Aguardando
13
ocorreu evento
–
Bloqueado
* Apenas no livro do Silberschatz 36
Operações com Threads
Operações com Threads
• Este por sua vez, pode criar quantos threads forem
necessários, de acordo com a necessidade de sua
aplicação.
• A criação é através de um procedimento de biblioteca:
thread_create.
14
• Quando o thread finaliza seu trabalho, ele pode invocar a –
chamada thread_exit.
36
Operações com Threads
Operações com Threads
• Depois disso ele desaparece e não mais fará parte da fila
dos threads escalonáveis, passando ao estado finalizado.
Neste caso libera totalmente o seu subespaço no espaço
de endereçamento do processo.
• O thread também pode se bloquear para esperar outro
thread terminar sua execução, através da chamada
thread_wait.
15
–
36
Operações com Threads
Operações com Threads
• O thread pode desistir voluntariamente da utilização da
CPU, para deixar outro thread executar. Este
procedimento é feito através da chamada thread_yield;
Mas é o escalonador de processos que decide qual é o próximo
a entrar no processador. O programador não tem como
controlar isso.
Entra Despacho Sai
Pronto Executando
Pausa
O evento Aguardando
16
ocorreu evento
Bloqueado
–
• Em Java, a função que invoca esta chamada de sistema é
a yield da classe Thread. 36
Operações com Threads
Operações com Threads
• O thread pode também entrar no estado bloqueado,
assumindo assim que aguarda um evento externo para
continuar seu processamento.
Entra Despacho Sai
Pronto Executando
Pausa
O evento Aguardando
ocorreu evento
Bloqueado
• Em Java, a função que invoca esta chamada de sistema é
a wait da classe Object (bloqueia o thread corrente que 17
invocou o método). –
Apenas o próprio thread pode se bloquear!
36
O uso de Threads
O uso de Threads
• Mas afinal, quais são as razões de utilizarmos Threads?
1) Algumas vezes, a execução em paralelo de atividades,
que poderiam ser implementadas sequencialmente,
pode oferecer um ganho considerável de performance.
Exemplos:
Navegadores. Ao carregar as imagens de um site.
Máquinas de busca requisitando diferentes sites da rede.
18
–
36
O uso de Threads
O uso de Threads
• Mas afinal, quais são as razões de utilizarmos Threads?
2) É muito mais rápido criar um thread do que criar um
processo. Em alguns sistemas operacionais, este
procedimento chega a ser 100 vezes mais rápido.
19
–
36
O uso de Threads
O uso de Threads
• Mas afinal, quais são as razões de utilizarmos Threads?
3) Em muitas aplicações, é necessária a ocorrência de
múltiplas atividades distintas, “ao mesmo tempo”.
Talvez esta seja a principal razão para
utilizarmos threads.
O modelo de programação se torna bem mais simples quando
decompomos o processo em vários threads para o gerenciamento
de todas as atividades. 20
Exemplo: –
Software para troca de mensagens.
36
Outro fica responsável
O uso de Threads pela atualização visual
O uso de Threads
da aplicação.
• Seja o exemplo de um editor de texto simples:
Outro pelo salvamento
Um thread fica automático do
responsável por documento.
capturar a entrada do
teclado
21
–
36
O uso de Threads
O uso de Threads
• É possível que 3 (três) processos gerenciem este editor de
textos?
22
–
36
O uso de Threads
O uso de Threads
• É possível que 1 (um) processo, com 1 (um) thread
gerencie este editor de textos?
23
–
36
O uso de Threads
O uso de Threads
• Vamos imaginar um servidor web recebendo dezenas de
requisições por segundo.
24
–
36
O uso de Threads
O uso de Threads
• Vamos imaginar um servidor web recebendo dezenas de
requisições por segundo. O thread operário
consulta se a
requisição está na
O thread despachante cache das últimas
recebe as requisições e páginas visitadas. Se
encaminha cada uma não estiver, ela efetua
para um thread acesso ao disco (mais
operário. lento).
25
–
36
O uso de Threads
O uso de Threads
• Faz sentido cada thread operário invocar a chamada
thread_exit sempre que retornar uma requisição? Sim?
Não? Por quê?
26
–
36
Implementação de Threads
Implementação de Threads
• Implementação a nível de usuário.
Quais são as vantagens?
E as desvantagens?
27
–
36
Implementação de Threads
Implementação de Threads
• Implementação a nível de usuário.
Vantagens:
Podemos utilizar o recurso de threads,
mesmo se o S.O. não suportar.
As operações são mais rápidas a nível de
usuário, se comparadas com o nível de
kernel.
Cada processo pode ter seu próprio
algoritmo de escalonamento
(customizado). Isso pode ser bom?
28
–
36
Implementação de Threads
Implementação de Threads
• Implementação a nível de usuário.
Desvantagens:
O usuário precisa garantir o
funcionamento do sistema.
Cada thread precisa avisar o supervisor
que está passando a sua vez.
29
–
36
Implementação de Threads
Implementação de Threads
• Implementação a nível de kernel.
Quais são as vantagens?
E as desvantagens?
30
–
36
Implementação de Threads
Implementação de Threads
• Implementação a nível de kernel.
Vantagens:
Uma vez validado o algoritmo dentro do
S.O., todos os processos podem utilizá-lo.
O tempo de ocupação na CPU fica melhor
dividido se o kernel conhece todos os
threads ativos.
31
–
36
Implementação de Threads
Implementação de Threads
• Implementação a nível de kernel.
Desvantagens:
Operações são bem mais lentas a nível de
kernel.
Cada processo fica sujeito a política de
escalonamento do próprio sistema
operacional.
32
–
36
Implementação de Threads
Implementação de Threads
33
–
36
Leitura para a próxima aula
Leitura para a próxima aula
Sistemas Operacionais Modernos
2.3 Comunicação Interprocessos
2.3.1 Condições de disputa
2.3.2 Regiões Críticas
2.3.3 Exclusão Mútua com Espera Ociosa
34
–
36
Referências
Referências
• TANENBAUM, A. S., Sistemas Operacionais Modernos, 2ª.
Edição, São Paulo: Prentice Hall, 2003.
• SILBERSCHATZ, A; GALVIN, P e GAGNE, G.; Sistemas
Operacionais. Conceitos e Aplicações. Rio de Janeiro: Editora
Campus, 2000.
• TANENBAUM, A. S.; WOODHULL, A.S.; Sistemas
operacionais: projeto e implementação. 2a Ed. Porto Alegre:
Ed. Bookman, 2000.
35
–
• Slides Prof. Humberto Brandão
36
Conteúdo dos Slides: Prof. Humberto Brandão
Sistemas
Operacionais
Aula V – Threads
Prof. Fellipe Rey
Bacharelado em Ciência da Computação
20/08/2024