Computação Paralela e
Concorrente
Prof. Carlos Duarte
Agenda
● Revisitando Sistemas Operacionais
○ Processos
● Threads
Processo
Um processo é uma instância de um programa em execução
a CPU muda de um processo para outro rapidamente, executando cada um por
uma determinada unidade de tempo
Processo
Todos os softwares executáveis no computador, às vezes incluindo o
sistema operacional, são organizados em uma série de processos
sequenciais
Processo
Os processos possuem estados
e, a mudança do estado
representa a sua troca de
contexto diante do processador
Threads
Nos sistemas operacionais tradicionais, cada processo tem um espaço de
endereçamento e um único thread de controle (linha de execução)
Contudo, em muitas situações, é desejável ter múltiplas threads
Threads
Um conjunto de threads são as linhas de execuções daquele processo
As threads compartilham o mesmo espaço de memória
Existem vantagens em utilizar threads?
● Há a possibilidade de executar múltiplas atividades ao mesmo tempo
● É possível criar paralelismo
● São mais rápidas para criar e destruir
● Executa MUITO mais rápido que um processo
(podendo chegar na casa da centena)
● Úteis para sistemas com múltiplos cores
Exemplo clássico
Threads
Mas não seria melhor termos processos diferentes?
Processo vs
Thread
E qual a desvantagem/problema?
● As threads vão interagir sobre o mesmo espaço de memória, ou até
mesmo sob as mesmas variáveis
● CONCORRÊNCIA e SINCRONIZAÇÃO
Ex:
○ x = 3+10
○ y = x + 10
Tipos de Threads
● Modo usuário
● Modo kernel
● Modo Híbrido
Tipos de Threads - Modo usuário
● Implementada por meio de bibliotecas ou frameworks
● O kernel e o escalonador entendem como um processo
Tipos de Threads - Modo usuário
● O escalonamento vai seguir a perspectiva de visualização do kernel
● Ex: A1,A2,A3
● OBS: É possível alternar entre os processos
e não entre as threads
Tipos de Threads - Modo Núcleo
● Criação, escalonamento e gerenciamento são realizados pelo próprio
kernel
● As mudanças de threads ocorrem por round-robin ou prioridade (em sua
maioria)
● Melhor uso do real paralelismo
Tipos de Threads - Modo Híbrido
● Seguem o modelo N para M
○ N threads de usuário são mapeadas em M threads de núcleo, de modo M<= N threads
Usuário vs Kernel
● Threads de nível de usuário
○ O sistema operacional não tem conhecimento dessas threads.
○ Gerenciadas por: Biblioteca de threads no espaço do usuário.
○ Exemplo: Uma pessoa programadora que usa uma biblioteca de threads em seu
programa cria threads de nível de usuário.
● Threads de nível de kernel
○ Criadas por: Sistema operacional (kernel).
○ Gerenciadas por: Sistema operacional.
○ Exemplo: Quando um novo processo é iniciado em um sistema operacional, o kernel cria
uma thread de nível de kernel para gerenciar a execução desse processo.
Usuário vs Kernel - Exemplos
● Threads de nível de usuário
○ Jogos: Em um jogo, threads de nível de usuário podem ser usadas para executar tarefas
concorrentes como renderização gráfica, processamento de física e inteligência artificial.
Cada tarefa teria sua própria thread, permitindo que o jogo seja mais responsivo e fluido.
○ Aplicações comInterfaces gráficas complexas podem usar threads de nível de usuário
para executar tarefas em segundo plano, como carregar imagens ou processar dados,
sem travar a interface principal. Por exemplo, um editor de texto pode usar uma thread
separada para verificar a ortografia do texto enquanto o usuário digita, evitando que a
interface fique lenta. Vantagem: Maior responsividade da interface, evitando que a tela
trave durante operações longas em segundo plano.
Usuário vs Kernel - Exemplos
● Threads de nível de kernel
○ Banco de dados: Servidores de banco de dados utilizam threads de kernel para lidar com
múltiplas requisições de clientes simultaneamente, realizar operações de leitura e escrita
em disco e gerenciar o acesso concorrente aos dados.
○ Sistemas Operacionais: O próprio sistema operacional utiliza threads de kernel para
gerenciar processos, lidar com interrupções de hardware e executar tarefas do sistema.
Por exemplo, um sistema operacional pode ter uma thread dedicada ao gerenciamento
de memória, outra para o sistema de arquivos e outra para a interface de rede.
Usuário vs Kernel - E como implementa?
● Para utilizar threads de kernel, geralmente utiliza-se bibliotecas ou APIs
fornecidas pelo sistema operacional ou por linguagens de programação
que abstraem esses detalhes.
● Java: A classe Thread e a interface Runnable
● C# (.NET): A classe Thread
● Python: threading + multiprocessing
● C: POSIX Threads (pthreads)
Alguma Dúvida??
Próximo aula:
● Conceitos básicos de computação paralela e concorrente
● Benefícios e desafios da computação paralela e concorrente
● Exemplos de aplicação em computação paralela e concorrente.
Obrigado!
Contato:
[email protected]