Você está na página 1de 127

Capítulo 2

Processos e Threads

1
Processos e threads

1. Processos
2. Threads
3. Comunicação inter processos (IPC)
4. Problemas clássicos de IPC
5. Escalonamento (Scheduling)

2
Processos: O modelo de
processos

⚫ Multiprogramação de 4 programas
⚫ Modelo conceitual de 4 processos sequenciais
independentes
⚫ apenas um programa ativo em um dado instante
3
Criação de Processos

Principais eventos que causam a criação de


processos
1. Inicialização do sistema
⚫ Execução de um sistema de criação de
processos
2. Solicitação do usuário para a criação de
um processo
3. Início de um processamento em lote
4
Término de processos

Condições que terminam um processo


1. Normal (voluntária)
2. Erro (voluntária)
3. Erro Fatal (involuntária)
4. Morto por outro processo (involuntária)

5
Hierarquias de Processos
⚫ Pai cria um processo filho, processos filhos
podem criar seus próprios processos
⚫ Formam uma hierarquia
– UNIX denomina um “grupo de processos (process
group)
⚫ Windows não tem o conceito de hierarquia de
processos
– todos os processos são criados iguais

6
Estados de um processos

7
Sete Estados de um Processo

8
Estados de um processos

⚫ Camada inferior de SOs estruturados à processos


– administram interrupções e escalonamento
⚫ Acima desta camada estão os processos
sequenciais
9
Administração de Processos e
Recursos

⚫ Um SO mantém as seguintes tabelas


– Memória
– E/S
– Arquivos
– Processos

10
Implementação de Processos

Campos de uma entrada em uma tabela de processos


11
Imagem do processo
(constituentes do processo)

⚫ Programa do Usuário (texto)


⚫ Dados do Usuários
⚫ Pilha(s)
– para chamadas de procedimentos e passagem de
parâmetros
⚫ PCB - Process Control Block (contexto de execução)
– Dados requeridos (atributos dos processos) pelo SO para
controlar o processo:
⚫ Informação de identificação
⚫ Informação de estado
⚫ Informação de Controle

12
Implementação de Processos

Esquema do que a camada inferior do SO faz quando


13 uma interrupção ocorre
Modelando a multiprogramação

Utilização da Cpu = 1 - pn
14
Imagens de processos na memória
virtual

15
Threads: O modelo de Treads

(a) 3 processos cada um com uma thread


(b) 1 processo com 3 threads
16
Threads: O modelo de Treads

17
Resolver agora

⚫ Um sistema de computação possui


capacidade para manter quatro programas
na memória principal. Estes programas ficam
ociosos 60% do tempo esperando E/S.
– Qual fração do tempo da CPU é desperdiçado?

18
Threads: O modelo de Treads

19
Thread Usage (1)

Um processador de texto com 3 threads

20
Uso de Thread

Um Web server multithreaded


21
Threads: O modelo de Treads

(a) thread Dispatcher


(b) thread trabalhadora

22
Threads POSIX

23
24
Threads: O modelo de Treads

25
Implementando Threads no espaço do
usuário

Um pacote de threads no nível do


usuário
26
Implementando Threads no Kernel

Um pacote de threads administrada pelo kernel


27
Implementações Híbridas

28
Ativações do Escalonador
(Scheduler)

⚫ Objetivo – imitar a funcionalidade das threads do kernel


– obter os ganhos de performance das threads do espaço do
usuário
⚫ Evita transições desnecessárias de user/kernel
⚫ O Kernel atribui processadores virtuais para cada processo
– permite ao sistema de runtime alocar threads aos processadores
⚫ Problema:
Dependência fundamental no kernel (camada inferior)
procedimentos “chamantes” no espaço do usuário (camadas
superiores)

29
Pop-Up Threads

⚫ Criação de uma nova thread quando uma mensagem


chega
– (a) antes da chegada da mensagem
30 – (b) depois da chegada da mensagem
Transformando um código Single-Threaded em
Multithreaded

Conflitos entre as threads em relação ao uso de uma variável


global
31
Transformando um código Single-Threaded em
Multithreaded

Threads podem ter variáveis globais privadas


32
comunicação entre processos
Condições de
corrida

Dois processos querem ter acesso à memória compartilhada ao


mesmos tempo
33
Em uma aplicação concorrente que controla saldo bancário em contas
correntes, dois processos compartilham uma região de memória onde estão
armazenados os saldos dos clientes A e B. Os processos executam,
concorrentemente os seguintes passos:

Supondo que os valores dos saldos de A e B sejam, respectivamente, 500 e 900, antes de os
processos executarem, pede-se (JUSTIFIQUE CADA RESPOSTA):
⚫ a) Quais os valores corretos esperados para os saldos dos clientes A e B após o término da
execução dos processos?
⚫ b) Quais os valores finais dos saldos dos clientes se a sequência temporal de execução das
operações for: 1a, 2a, 1b, 2b, 1c, 2c, 1d, 2d, 1e, 2e, 1f, 2f?
Regiões críticas
Quatro condições para proporcionar exclusão mútua
1. Dois Processos NÃO podem estar simultaneamente
nas suas regiões críticas
2. Nenhuma suposição pode ser feita em relação à
velocidade e número de CPUs
3. Nenhum processo fora de sua região crítica pode bloquear
outro processo
4. Nenhum processo deve esperar para sempre para entra em
sua região crítica

35
Regiões Críticas

36
Propostas para obtenção de exclusão mútua

• Desabilitando interrupções.
• Variáveis do tipo trava.
• Chaveamento obrigatório.
• Solução de Peterson.
• A instrução TSL.
Exclusão Mútua com Espera Ocupada
Alternância estrita (chaveamento obrigatório)

38
Exclusão Mútua com Espera Ocupada

39 Solução de Peterson
Exclusão Mútua com Espera Ocupada

Uso da instrução TSL

40
Exclusão Mútua com Espera Ocupada

Uso da instrução XCHG

41
Sleep and Wakeup

42 Produtor Consumidor com uma condição de Corrida Fatal


O problema produtor-consumidor

43
Semáforos

44 Produtor-Consumidor usando Semáforos


Mutexes

45
Futexes – Fast User Space Mutex

⚫ Para vocês explicarem na próxima aula!!!!

46
Mutexes em Pthreads

47
Mutexes em Pthreads

48
Exemplo (1/2)

49
Exemplo (2/2)

50
Monitores

51
Monitor
⚫ Processos em espera ficam
na fila de entrada ou em
uma fila de condição
⚫ Um processo se coloca em
uma fila de condição pela
chamada cwait(cn)
⚫ csignal(cn) traz um
processo da fila de condição
cn
⚫ Consequentemente
csignal(cn) bloqueia o
processo e o coloca na fila
urgente (a menos que
csignal seja a última
operação do monitor)
52
Monitores

⚫ Produtor Consumidor com monitores


– apenas um procedimento do monitor ativo por vez
53 – buffer tem N entradas
Monitores: Produtor-Consumidor
usando Java

54
l Produtor-Consumidor usando Java
55
Passagem de Messagens

Produtor Consumidor com N mensagens


56
Barreiras

⚫ Uso de uma barreira


– processos se aproximando de uma barreira
– todos os processos exceto um bloqueados em uma barreira
– último processo chega, todos podem passar
57
Responder agora

⚫ Semáforos:
– Explique o que são.
– Quais as operações (e suas semânticas) que
podem ser realizadas sobre eles?
– Dê dois exemplos de sua utilização: um para a
solução da exclusão mútua e outro para a
sincronização condicional.

58
59
Filósofos Jantando

60
Filósofos Jantando: uma não
solução

61
62 Solução para o problema do jantar dos filósofos (parte 1)
63 Solução para o problema do jantar dos filósofos (parte 2)
O problema do Barbeiro
Dorminhoco

64
65 Solução para o problema do Barbeiro Dorminhoco
Escalonamento com um
processador

66
Escalonamento: Introdução

⚫ Rajadas de uso de CPU alternam-se com períodos de


espera por entrada e saída
– um processo limitado por CPU
– um processo limitado por E/S
67
Objetivos dos Algoritmos de Escalonamento

68
Escalonamento de CPU

⚫ Concentramos no problema de escalar o uso de


um único processador entre todos os processos
existentes no sistema
⚫ Objetivo é atingir:
– Alta utilização do processador
– Alto throughput
⚫ número de processos completados por unidade de tempo
– baixo tempo de resposta
⚫ tempo entre a submissão de uma solicitação e o início da
resposta

69
Classificação das Atividades do
Escalonador

⚫ Longo prazo: qual processo admitir


⚫ Médio prazo: qual processo será swap in ou out
⚫ Curto prazo: qual processo pronto será executado a seguir
70
Diagrama de fila para
escalonamento

71
Escalonamento a longo prazo

⚫ Determina quais programas são admitidos


no sistema para processamento
⚫ Controla o grau de multiprogramação
⚫ Se mais processos são admitidos:
⚫ Menos provável que todos processos estejam
bloqueados
⚫ Melhor uso da COU
⚫ Cada processo tem uma fração menor da CPU
⚫ O escalonador de longo prazo pode tentar
manter uma mistura de processos
limitados por CPU e por E/S
72
Escalonamento de médio prazo

⚫ Decisões de swap são baseadas na


necessidade de administrar
multiprogramação
⚫ Feita por software de administração de
memória

73
Escalonamento de curto prazo

⚫ Determina qual processo será executado a seguir.


(também chamada de escalonamento de CPU)
⚫ É o assunto deste item
⚫ O escalonador de curto prazo é chamado de dispatcher
⚫ É invocado quando ocorre um evento que pode levar à
escolha de outro processo para execução :
– Interrupção do clock
– Interrupção de I/O
– Chamadas do sistema operacional e traps
– Sinais (signal)

74
Critérios de escalonamento a longo
prazo

⚫ Orientados ao usuário
– Tempo de resposta: Tempo entre a submissão de
uma solicitação ao início da resposta
– Tempo de Turnaround: Tempo entre a submissão
de uma solicitação ao seu término
⚫ Orientados ao sistema
– Utilização do processador
– Justiça
– throughput

75
Prioridades

⚫ Implementadas por filas de “Pronto” múltiplas


para representar cada nível de prioridade
⚫ O Escalonador sempre escolhe um processo
de maior prioridade sobre um de menor
prioridade
⚫ Processos de menor prioridade podem “passar
fome”
⚫ Permite que um processo mude sua prioridade
baseado na sua idade ou história de execução
76
Caracterização de políticas de
escalonamento
⚫ A função de seleção: determina qual processo na fila de
pronto será selecionado para a próxima execução
⚫ O modo de decisão: especifica o instante no tempo no
qual a função de seleção é utilizada
– Não preemptivo
⚫ Uma vez que um processo esteja executando, ele continuará
até que termine ou bloqueie (a si próprio) para IO
– Preemptivo
⚫ Processo em execução pode ser interrompido e movido para o
estado Pronto pelo SO
⚫ Permite melhor serviço pois nenhum processo pode
monopolizar o processador por muito tempo
77
O ciclo CPU-I/O

⚫ Observamos que os processos requerem o


uso do processador e I/O de uma maneira
repetitiva
⚫ Cada ciclo consiste de uma rajada de CPU
(burst) (frequentemente de 5 ms) seguido por
uma rajada de I/O (normalmente mais longa)
⚫ Um processo termina em uma rajada de CPU
⚫ Processos limitados por CPU têm rajadas de
CPU mais longas que processos limitados por
I/O
78
Escalonamento em sistemas em
lotes

• Primeiro a chegar, primeiro a ser servido.


• Tarefa mais curta primeiro.
• Próximo de menor tempo restante.

79
Exemplos de execução para
discutir políticas de
escalonamento
Arrival Service
Process Time Time

1 0 3

2 2 6

3 4 4

4 6 5

5 8 2

•Tempo de Serviço = tempo total de processador


requerido em um ciclo (CPU-I/O)
•Jobs com tempo de serviço longo são limitados por CPU
e são ditos “tarefas longas” (“long jobs”)
80
Primeiro a chegar primeiro a ser
servido (First Come First Served (FCFS))

⚫ Função de seleção: o processo que está esperando a


mais tempo na fila de Pronto (daí, FCFS)
⚫ Modo de decisão: não preemptivo
– um processo executa até que se bloqueie
81
Desvantagens do FCFS

⚫ Um processo que não faça I/O irá monopolizar o


processador
⚫ Favorece processos limitados por CPU
– processos limitado por I/O tem que esperar até que os
limitados por CPU terminem
– Podem ter que esperar até mesmo quando o seu I/O foi
completado (mal uso de dispositivos)
– pode-se manter os dispositivos de I/O mais ocupados
dando mais prioridade aos processos limitados por I/O

82
Menor Processo Próximo
(Shortest Process Next (SPN) ou Shortest Job First)

⚫ Função de seleção: o processo com a menor rajada


de CPU esperada
⚫ Modo de Decisão: não preemptivo
⚫ processos limitados por I/O serão selecionados
primeiro
⚫ Sempre produz tempo de resposta médio mínimo
83
Menor Processo Próximo

A B C D B C D A
8 4 4 4 4 4 4 8

– Turnaround: 8, 12, 16 e 20 Média: 14


– Turnaround: 4, 8, 12 e 10 Média: 11
⚫ Geral: (4a+3b+2c+d)/4 (a,b,c,d término do proc)
⚫ Seria bom se fosse usado para processos
interativos também
⚫ Precisamos estimar o tempo de processamento
requerido para cada processo (rajada de CPU)
⚫ aT0 + (1-a)T1, a escolhido

84
Exercício: calcule o tempo de turnaround
para Menor Processo Próximo

85
Exercício: calcule o tempo de turnaround
para Menor Processo Próximo

86
Estimando a rajada de CPU requerida

⚫ Seja T[i] o tempo de execução para a i-ésima instância deste


processo: a duração real da i-ésima rajada deste processo
⚫ Seja S[i] o valor predito para a i-ésima rajada de CPU deste
processo. A escolha mais simples é:
– S[n+1] = (1/n) S_{i=1 até n} T[i]
⚫ Para evitar recalcular a soma inteira, podemos rescrever como:
– S[n+1] = (1/n) T[n] + ((n-1)/n) S[n]
⚫ Porém, esta combinação dá peso igual a cada instância
⚫ No entanto, instâncias mais recentes são mais prováveis de
refletir comportamento futuro

87
Estimando a rajada de CPU requerida

⚫ Uma técnica comum para isto é usar média exponencial


– S[n+1] = a T[n] + (1-a) S[n] ; 0 < a < 1
– Mais peso é colocado em instâncias recentes sempre que a
> 1/n
⚫ Expandindo esta equação vemos que os pesos de
instâncias passadas decrescem exponencialmente
– S[n+1] = aT[n] + (1-a)aT[n-1] + ... (1-a){i}aT[n-i] +
... + (1-a){n} S[1]
– o valor predito da primeira instância S[1] não é calculado;
normalmente é definido como 0 (zero) para dar prioridade a
novos processos

88
Coeficientes Decrescentes Exponencialmente

89
Coeficientes Decrescentes Exponencialmente

⚫ Aqui S[1] = 0 para dar alta prioridade a novos processos


⚫ Média exponencial acompanha mudanças no comportamento de
processos muito mais rapidamente que médias simples
90
Menor Processo Próximo: crítica

⚫ Possibilidade de “fome” para processos mais longos


caso haja um fluxo contínuo de processos curso
⚫ Falta de preempção não é adequado em um
ambiente de tempo compartilhado
– Processos limitados por CPU obtém menor prioridade
(como deveriam) mas um processo realizando I/O ainda
pode monopolizar a CPU se for o primeiro a entrar no
sistema
– Implicitamente incorpora prioridades: processos mais
curtos são prioritários

91
Escalonamento em sistemas
interativos

• Escalonamento por chaveamento circular


(Round Robin).
• Escalonamento por prioridades.
• Filas mútiplas.
• Próximo processo mais curto.
• Escalonamento garantido.
• Escalonamento por loteria.
• Escalonamento por fração justa.
92
Round Robin

93
Round-Robin

⚫ Função de seleção : o processo que está esperando a


mais tempo na fila de Pronto
⚫ Modo de decisão preemptivo
– um processo executa até que sua fatia de tempo expire
(quantum, tipicamente entre 10 e 100 ms)
– então, uma interrupção de relógio (clock) ocorre e o processo
em execução é colocado na fila de pronto
94
Quantum de tempo para Round Robin

⚫ Deve ser substancialmente maior que o tempo requerido para


administrar a interrupção de relógio e escalonamento
⚫ deve ser maior que a interação típica (mas não muito maior para
evitar penalizar processos limitados por I/O)
95
Responder agora

⚫ Explique se e em caso afirmativo como os


seguintes algoritmos de escalonamento de
CPU favorecem processos intensivos de
CPU
– Circular (Round Robin)

– Menor tarefa primeiro (Shortest Job First)

96
Responder agora

⚫ Qual o significado do termo espera ocupada


(busy waiting)?
⚫ Quais outros tipos de espera existem em um
SO?
⚫ A espera ocupada pode ser totalmente
evitada? Justifique sua resposta.

97
Round Robin: crítica
⚫ Favorece processos limitados por CPU
– Um processo limitado por I/O usa a CPU por um tempo menor
que seu quantum e então é bloqueado esperando por I/O
– Um processo limitado por CPU executa por todo seu quantum e
é colocado de volta na fila de pronto (consequentemente fica na
frente dos processos bloqueados)
⚫ Uma solução: Round Robin virtual
– Quando um I/O é completado, o processo bloqueado é
colocado em uma fila auxiliar que tem preferência sobre a fila
de Pronto principal
– Uma processo escalado a partir da fila auxiliar não roda mais
que o quantum básico menos o tempo gasto rodando desde
que foi selecionado da fila Pronto
98
Fila para Round Robin Virtual

99
Escalonamento por Prioridades

10
0
Escalonamento com Filas Múltiplas (ou
multi-nível) com feedback

⚫ Escalonamento Preemptivo com prioridades dinâmicas


⚫ Diversas filas “Pronto” com prioridades decrescentes:
– P(RQ0) > P(RQ1) > ... > P(RQn)
⚫ Novos processos são colocados em RQ0
⚫ Quando atingem o quantum de tempo são colocados em RQ1,
se atingem novamente, são colocados em RQ2 ... Até
atingirem RQn
⚫ Processos limitados por I/O permanecem em filas de alta
prioridade.
⚫ Processos limitados por CPU irão cair
⚫ O escalonador escolhe um processo em RQi apenas se RQi-1
10 até RQ0 estão vazias
1 ⚫ Consequentemente, processos longos podem passar fome
Escalonamento em Filas Múltiplas com
feedback

10 ⚫ FCFS é usado em cada fila exceto na de


2 menor prioridade onde Round Robin é usado
Quantum para escalonamento com
feedback

⚫ Com um quantum fixo, o tempo de turnaround para


processos longos pode se estender de forma alarmante
⚫ Para compensar, podemos aumentar o quantum de acordo
com a profundidade da fila
– Ex: quantum de RQi = 2{i-1}
⚫ Processos mais longos ainda podem passar fome
10 – Solução possível: promover a prioridade do processo após
certo tempo
3
Para vocês:

⚫ 5 minutos para vocês olharem:


– Escalonamento garantido
– Escalonamento por loteria
– Escalonamento por cota justa

10
4
Escalonamento Garantido

⚫ Se n usuários estão conectados enquanto


você está trabalhando, você receberá em
torno de 1/n da potência da CPU
⚫ Sistema controla quanto cada processo teve
de CPU desde sua criação
– Calcula quanto cada um tem direito
– Escala quem teve menor uso relativo

10
5
Escalonamento por Loteria

⚫ Processos recebem bilhetes de loteria


⚫ Quem tem mais bilhetes possui maior
chance de ser sorteado
⚫ Processos podem trocar bilhetes

10
6
Escalonamento por cota justa

⚫ Mantem justiça entre usuários


independentemente do quantos processo
cada um gera

10
7
Escalonamento em sistemas de tempo real

Sistema de tempo real escalonável


⚫ Dados
– m eventos periódicos
– evento i ocorre dentro do período Pi e requer Ci
segundos
⚫ Então, a carga só pode ser administrada se
m
Ci
10

i =1 Pi
1
8
Qual algoritmo é melhor?

⚫ Depende da situação!
⚫ Carga do sistema
⚫ Suporte de hw para o dispatcher
⚫ Método de avaliação

10
9
11
0
11
1
11
2
11
3
11
4
11
5
11
6
11
7
11
8
Escalonamento geral de tempo real
Escalonamento por taxa
monotônica
Condições necessárias para RMS:
1. Cada processo periódico deve terminar dentro
de seu período.
2. Nenhum processo é dependente de outro
processo.
3. Cada processo precisa da mesma quantidade
de tempo de CPU a cada surto.
4. Processos não periódicos não têm prazos.
5. A preempção de processos ocorre
instanteneamente e sem prazos.
Escalonamento prazo mais curto
primeiro
Escalonamento em sistemas em
lote

12
Escalonamento em 3 Níveis
3
Política versus Mecanismo

⚫ Separa o que é permitido fazer de como é


feito
– um processo saber quais de suas threads filhas
são importantes e precisam de prioridades

⚫ Algoritmo de escalonamento parametrizado


– mecanismo no kernel

⚫ Parâmetros fornecidos por processos do


usuários
12 – política definida por processos dos usuários
4
⚫ FIM---

12
5
Escalonamento de Threads

Possível escalonamento para threads no nível


do usuário
12 ⚫ 50-msec quantum de processo
6 ⚫ threads rodam em rajadas de 5 msec/CPU
Escalonamento de Threads

Possível escalonamento para threads de kernel


⚫ 50-msec quantum de processo
12 ⚫ threads rodam em rajadas de 5 msec/CPU
7

Você também pode gostar