Você está na página 1de 38

Tarefas (Threads)

Sistemas Operativos

2023/2024

João L. M. Pereira
CLAV-256
joao.pedro.pereira@uevora.pt

Baseado nos slides do Capítulo 4 (Threads, SMP, and Microkernels) do livro Operating Systems: Internals and
Design Principles, 7th Edition, Dave Bremer, Otago Polytechnic, N.Z., 2008, Prentice Hall.
Revisão: Estados dos processos
● Trace
○ Comportamento de um processo individual
■ listagem de todas as sequências de instruções executadas para o processo
○ Comportamento pode ser caracterizado
■ através da forma como os “traces” de diferentes processos são intercalados

● Dispatcher
○ Programa que faz a troca do processador
■ entre vários processos

2
Revisão: Execução dos processos - traces

3
Revisão:
Execução dos processos

Visão do processador

4
Revisões: Modelo de 2 estados (Processos)

Um processo pode estar num de dois estados:

● em execução (running)
● em não execução (not-running)

5
Revisões: Modelo de 7 estados (Processos)

6
Processos e Threads
Processos tradicionais têm duas características

1. Resource ownership
○ Processos incluem um espaço de endereçamento virtual para guardar a imagem do processo
○ O SO fornece mecanismos de proteção para prevenir interferências não desejadas entre
processos, no que diz respeito aos recursos

2. Scheduling/Execution (Escalonamento/Execução)
○ Segue uma linha de execução (trace), que pode estar intercalada com outros processos
○ Cada processo tem
■ um estado de execução (running, ready, etc…),
■ uma prioridade
■ é “scheduled” e “dispatched” pelo SO
○ Processos tradicionais são sequenciais:
■ Apenas uma linha de execução 7
Processos e Threads
● A unidade de “dispatching”
○ thread ou um lightweight process (processo leve)

● Unidade de “resource ownership"


○ process ou task

● Multithreading
○ Capacidade do SO suportar múltiplos caminhos de execução concorrentes, num único
processo

8
Threads de um processo

Itens em cada processo Itens em cada thread

● Espaço de endereçamento ● Program counter


● Variáveis globais ● Registos
● Ficheiros abertos ● Stack
● Processos filhos ● Estado
● Alarmes pendentes
● Signals e signal handlers
● Informações estatísticas

9
Abordagens single thread

● Linha única de execução por processo


○ Não existe conceito de thread
○ Abordagem single thread (thread única)

● MS-DOS e algumas versões de UNIX


○ Apenas

10
Abordagens multithreaded

● Java runtime environment

○ Um processo com múltiplas threads


● Windows e alguns sistemas modernos
UNIX suportam processos multithread

11
Processos

● Num ambiente multithread, o processo é a unidade detentora dos recursos


○ É uma unidade de proteção
○ O SO fornece proteção ao nível do processo

● Processos têm
○ Um espaço de endereçamento virtual para guardar a imagem do processo

● Acesso protegido a:
○ Processadores
○ Outros processos
○ Ficheiros
○ Recursos de I/O

12
Várias Threads num Processo

Cada thread tem:

● Um estado de execução (Running, Ready, etc.)


● Estado guardado da thread
○ Saved thread context (TCB)
● Stack de execução
● Algum armazenamento estático
○ por thread
○ para variáveis locais
● Acesso à memória partilhada e recursos dos seus processos
○ partilhado entre todas as threads do mesmo processo

13
Threads vs Processos

14
Vantagens das Threads

● A criação de uma thread é mais rápida


● Terminar uma thread é mais rápido
● Alternar entre threads é mais rápido
● Threads melhoram a eficiência da comunicação
○ Comunicação não envolve o kernel

15
Threads em sistemas Single-User e
Multiprocessing
Exemplos de uso de Threads num sistema Single-User
● Processamento em foreground e background
○ Uma thread para mostrar menus e input do utilizador, outra para executar e atualizar a
visualização

● Processamento assíncrono
○ Uma thread faz backups periódicos de forma independente do resto do programa

● Velocidade de execução
○ Ler um conjunto de dados (tarefa bloqueante) enquanto outra tarefa processa dados

● Estrutura modular do programa


○ Programas com várias atividades, fontes e destinos de input/output são mais fáceis
desenhar/implementar usando threads 16
Threads

● Num SO que suporta threads, o escalonamento (scheduling) e o dispatching


é feito com base nas threads
● Maioria da informação sobre o estado é mantido em estruturas das threads
○ suspender um processo envolve suspender todas as threads do processo

○ terminar o processo termina todas as threads do processo

17
Estados de execução das threads

Estados principais de uma thread: Operações de threads associadas à


mudança de estado da thread:
● Running
● Ready ● Spawn
● Blocked ○ de uma nova tarefa
● Block
○ em um evento
● Unblock
○ do evento, que já ocorreu
● Finish
○ Tarefa termina de executar

18
Execução de threads

● Aspecto importante relacionado com as threads


○ Podem ou não ser escalonadas de forma independente do processo ao qual pertencem

● Ou, é possível bloquear uma thread de um processo sem bloquear todo o


processo?
○ Se não for possível, perde-se grande parte da flexibilidade das threads

19
RPC com Single Thread

20
RPC com uma thread por pedido ao servidor

21
Multithreading usando apenas um processador

22
Sincronização de threads

É necessário sincronizar as atividades das várias threads

● todas as threads de um processo partilham o mesmo espaço de


endereçamento e outros recursos
● qualquer alteração de um recurso pode afectar outras threads do mesmo
processo
● Iremos abordar as técnicas de sincronização nas aulas seguintes

23
Tipos de implementação de threads

● User Level Thread (ULT)


● Kernel Level Thread (KLT)

Nota: Estamos a falar de threads para processos de utilizador. Tanto as ULT


como as KLT executam em user mode. Um SO também pode ter threads, mas
não falamos dessas threads.

24
User Level Threads (ULTs)

● Gestão das threads é feita pela aplicação

● Kernel não sabe da existência da thread

● Não são o tipo de threads que discutimos


até agora.

25
Relação entre estados dos ULTs
e estados dos processos

(a) -> (b)


Thread 2 faz uma system call

(b) - > (c)


Time out interrupt para o
processo B

(c) -> (d)


Processo B volta a executar
Thread 2 bloqueia à espera
da Thread 1
26
Vantagens de ULTs

● Alternar entre threads não necessita de kernel mode


○ não existe “mode switch”

● Scheduling
○ é feito apenas sobre as aplicações

○ application specific

● ULTs podem correr em qualquer SO

27
Desvantagens de ULTs

● Num SO típico, muitas das system calls são blocking

○ Quando uma ULT executa uma system call, não é apenas a thread que fica bloqueada, mas
todas as threads do processo

● Numa estratégia de ULTs pura

○ Uma aplicação multithreaded não consegue tirar partido das vantagens associadas ao
multiprocessamento

28
Ultrapassar as desvantagens das ULTs

● Jacketing

○ Converte system calls bloqueantes em system calls não bloqueantes

○ Verifica apenas se o recurso se encontra disponível ou não

■ Apenas a thread bloquea, sem bloquear o processo

● Escrever a aplicação com múltiplos processos

○ em vez de múltiplas threads

○ Mas… perdemos as vantagens em usar threads

29
Kernel-Level threads

● Gestão das threads é feita pelo kernel

○ Kernel Mode Tasks (KMT)

○ não existe gestão de threads ao nível da


aplicação

○ Windows é um exemplo desta abordagem

30
Vantagens de KLTs

● O kernel pode simultaneamente escalonar múltiplas threads no mesmo


processo, em vários processadores

● Se uma thread estiver bloqueada, o kernel escalonar outra thread do


mesmo processo

31
Desvantagens de KLTs

● Transferência de controlo de uma thread para outra, dentro do mesmo


processo, obriga a fazer um mode switch

○ para kernel mode

32
Abordagens mistas/combinadas

● Criação das threads é feita em user space

● A maioria do escalonamento e
sincronização das threads é feito ao nível
da aplicação

● Exemplo: Solaris

33
Relação entre Threads e Processos

34
Múltiplos Cores & Multithreading

● Multithreading e multicore chips têm o potencial de melhorar o desempenho


das aplicações que podem ter muito paralelismo
○ Jogos, simulações, etc…

● Desempenho nem sempre escala de forma linear, de acordo com o número


de cores

35
Efeito de múltiplos cores no desempenho
Amdahl’s law Exemplo Representativo

● Overheads: comunicação, distribuição de tarefas por vários processadores e coerência de cache 36


Bases de dados em hardware multi-core

Grande atenção à redução da


fração serial em:
● arquiteturas de hardware
● sistemas operativos,
● middleware
● software de gestão de base de
dados

Diferentes tipos de servidores


também tiram proveito
● Transações independentes
● Executam em paralelo

37
Aplicações que beneficiam de multiprocessadores

● Aplicações multithreaded nativas


○ Caracterizadas por terem um pequeno número de processos com muitas threads

● Aplicações multi-processos
○ Caracterizadas pela presença muitos processos com uma única thread

● Aplicações Java
○ A JVM é um processo multithead que disponibiliza escalonamento e gestão de memória
para aplicações Java

○ Multicore é usado por application servers (Tomcat, J2EE, Spring)

● Aplicações com múltiplas instâncias


○ múltiplas instâncias correm em paralelo

38

Você também pode gostar