Você está na página 1de 117

Sistemas Operacionais

Professor: Lucas Cambuim


Processos e Threads
Processos: Modelo de Processo
• O computador moderno permite, ao mesmo tempo, a execução de
vários programas -> pseudoparalelismo

Contador de programa
lógico

2
Processos: Modelo de Processo
• O computador moderno permite, ao mesmo tempo, a execução de
vários programas -> pseudoparalelismo
• Um processo é apenas um programa em execução acompanhado
dos valores atuais do contador de programa, dos
registradores e das variáveis

Contador de programa
lógico

3
Processos: Modelo de Processo
• Multiprogramação de quatro programas

Contador de programa
lógico

4
Processos: Modelo de Processo
• Multiprogramação de quatro programas
• Modelo conceitual de 4 processos sequenciais,
independentes

Contador de programa
lógico

5
Processos: Modelo de Processo
• Multiprogramação de quatro programas
• Modelo conceitual de 4 processos sequenciais,
independents
• Somente um programa está ativo a cada momento

Contador de programa
lógico

6
Criação de Processos
Eventos que levam à criação de processos:

1.Inicialização do sistema operacional


 Processos de primeiro plano: interagem com o
usuário
 Processos de segundo plano: não interagem com o
usuário.
– Ficam inativo a maior parte do dia, mas
subitamente entrando em ação quando
– Processo para aceitar emails.
– Processo para aceitar solicitações de páginas da
web hospedadas
– São chamados de daemons.

7
Criação de Processos
Eventos que levam à criação de processos:

2. Execução de chamadas ao sistema para a


criação de processos (por outros programas)
 Muitas vezes, um processo em execução emitirá
chamadas de sistema para criar um ou mais
processos novos para ajudá-lo em seu trabalho

8
Criação de Processos
Eventos que levam à criação de processos:

2. Execução de chamadas ao sistema para a


criação de processos (por outros programas)
 Muitas vezes, um processo em execução emitirá
chamadas de sistema para criar um ou mais
processos novos para ajudá-lo em seu trabalho
 Útil quando o trabalho é formulado em termos de
vários processados relacionados.

9
Criação de Processos
Eventos que levam à criação de processos:

2. Execução de chamadas ao sistema para a criação


de processos (por outros programas)
 Muitas vezes, um processo em execução emitirá
chamadas de sistema para criar um ou mais processos
novos para ajudá-lo em seu trabalho
 Útil quando o trabalho é formulado em termos de
vários processados relacionados.
 Por exemplo:
– Processo para buscar dados da rede
– Processo para remover o item de dados e processar
10
Criação de Processos
Eventos que levam à criação de processos:

3. Solicitação do usuário para criar um novo


processo (através de interface gráfica ou
digitando linha de comando)
4. Início de uma tarefa em Lote

11
Criação de Processos
• Em todos os casos, um novo processo é criado
por outro já existente executando uma
chamada de sistema de criação de processo

12
Criação de Processos
• No UNIX, há apenas uma chamada de sistema
para criar um novo processo: fork
— cria um clone exato do processo que a chamou

13
Criação de Processos
• No UNIX, há apenas uma chamada de sistema
para criar um novo processo: fork
— cria um clone exato do processo que a chamou
— o pai e o filho têm a mesma imagem de
memória, as mesmas variáveis de ambiente e os
mesmos arquivos abertos

14
Criação de Processos
• No UNIX, há apenas uma chamada de sistema
para criar um novo processo: fork
— cria um clone exato do processo que a chamou
— o pai e o filho têm a mesma imagem de
memória, as mesmas variáveis de ambiente e os
mesmos arquivos abertos
— O processo filho pode então executar uma
chamada de sistema para mudar sua imagem de
memória e executar um novo programa

15
Criação de Processos
• No UNIX, há apenas uma chamada de sistema para
criar um novo processo: fork
— cria um clone exato do processo que a chamou
— o pai e o filho têm a mesma imagem de memória,
as mesmas variáveis de ambiente e os mesmos
arquivos abertos
— O processo filho pode então executar uma chamada
de sistema para mudar sua imagem de memória e
executar um novo programa
o execve( ) - substitui o código do programa sendo
executado pelo processo por outro código
16
Criação de Processos
• No Windows, a função CreateProcess, lida
tanto com a criação do processo, quanto com o
carga do programa correto no novo processo

17
Criação de Processos
• O pai e o filho têm os seus próprios espaços
de endereços distintos.
— A mudança no espaço de um não é visível pelo o outro
— No UNIX é uma cópia, mas há dois espaços distintos
— É possível, no entanto, que um processo
recentemente criado compartilhe de alguns dos
outros recursos do seu criador, como arquivos
abertos

18
Término de Processos
Condições que levam ao término de processos
1. Saída normal (voluntária) –
 processo finalizou o trabalho.
 chamadas de Sistemas: exit(Unix),
ExitProcess(Windows)

19
Término de Processos
Condições que levam ao término de processos
2. Erro fatal (voluntário)
 quando o processo descobre um erro fatal
(executar um programa que não existe)

20
Término de Processos
Condições que levam ao término de processos
3. Saída por erro (involuntário)
 execução de uma instrução ilegal, referência
a memória inexistente ou divisão por zero

21
Término de Processos
Condições que levam ao término de processos
4. Morto por outro processo (involuntário).
 processo executa uma chamada de sistema
dizendo ao sistema operacional para matar
outro processo

22
Término de Processos
Condições que levam ao término de processos
4. Morto por outro processo (involuntário).
 processo executa uma chamada de sistema
dizendo ao sistema operacional para matar
outro processo
 Comandos: kill (UNIX), TerminateProcess

23
Hierarquia de Processos
• Em alguns sistemas, processo pai e filho
continuam a ser associados de certas maneiras

24
Hierarquia de Processos
• Em alguns sistemas, processo pai e filho
continuam a ser associados de certas maneiras
• Processo pai cria um processo filho, processo filho
pode criar outro processo filho, e assim por diante
formando uma hierarquia de processos
— UNIX chama isso de “grupo de processos”

25
Hierarquia de Processos
• Em alguns sistemas, processo pai e filho
continuam a ser associados de certas maneiras
• Processo pai cria um processo filho, processo filho
pode criar outro processo filho, e assim por diante
formando uma hierarquia de processos
— UNIX chama isso de “grupo de processos”
— Processos em UNIX não podem deserdar seus
filhos.

26
Hierarquia de Processos
• Em alguns sistemas, processo pai e filho
continuam a ser associados de certas maneiras
• Windows não possui o conceito de hierarquia de
processos
– Todos os processos são criados iguais
– Pai é livre para passar esse identificador para
algum outro processo, desse modo invalidando a
hierarquia.

27
Estados do Processos
• Processos muitas vezes precisam interagir entre si.
• Um processo pode gerar alguma saída que outro
processo usa como entrada
• No comando shell:
cat chapter1 chapter2 chapter3 | grep tree

28
Estados do Processos
• No comando shell:
cat chapter1 chapter2 chapter3 | grep tree
• Situação possível de acontecer:
— grep esteja pronto para ser executado mas
não haja entrada esperando por ele.
— Ele deve então ser BLOQUEADO até que alguma
entrada esteja disponível.

29
Estados do Processos
• Também é possível que um processo que esteja
conceitualmente pronto e capaz de executar seja
“bloqueado” porque o sistema operacional decidiu
alocar a CPU para outro processo por um tempo.

30
Estados do Processos
• Possíveis estados de processos
– Em execução (realmente usando a CPU naquele
instante);
– Bloqueado (incapaz de executar enquanto um
evento externo não ocorrer);
– Pronto (executável; temporariamente parado
para dar lugar a outro processo).

• As transições entre os estados:

31
Escalonador de Processos

Camada mais inferior acima daquela camada


estão os processos sequenciais de um SO
estruturado por processos
– trata interrupções, escalonamento
32
Escalonador de Processos
• Qual processo executa quando
— Processos prontos

33
Escalonador de Processos
• Qual processo executa quando
— Processos prontos
• O algoritmo usado para decidir é chamado de
algoritmo de escalonamento

34
Escalonador de Processos
• Para que um processo não execute tempo
demais, são usadas interrupções de relógio
— Praticamente todos os computadores dão
suporte a isso

35
Implementação de Processos
• O sistema operacional mantém uma tabela (um
arranjo de estruturas) chamada de tabela de
processos com uma entrada para cada
processo.

36
Implementação de Processos
• entradas contêm informações importantes
sobre o estado do processo incluindo:
— o seu contador de programa,
— ponteiro de pilha,
— alocação de memória,
— estado dos arquivos abertos,
— informação sobre sua contabilidade
escalonamento
— e tudo o mais que deva ser salvo quando o
processo é trocado do estado

37
Implementação de Processos
 Campos de entrada de uma tabela de
processos:

38
Implementação de Processos
Esqueleto do que o nível mais baixo do SO faz
quando ocorre uma interrupção

39
Implementação de Processos
A ideia fundamental é que, após cada interrupção, o
processo retorne precisamente para o mesmo estado
em que se encontrava antes de ser interrompido

40
Utilização de CPU
• Modelada em termos do tempo bloqueado de um
processo
• Um processo passa uma fração p de seu tempo
esperando por E/S
• Considerando-se que há n processos na memória
• A utilização média da CPU seria dada por:

41
Threads
Sistemas Operacionais Tradicionais
• Cada processo possui um espaço de
endereçamento e um único fluxo de controle

42
Threads
Existem situações onde é desejável ter
múltiplos fluxos de controle
compartilhando o mesmo espaço de
endereçamento

43
Threads
Existem situações onde é desejável ter
múltiplos fluxos de controle
compartilhando o mesmo espaço de
endereçamento

Solução: Threads
44
Threads
• Thread (processo leve) é uma entidade
básica de utilização da CPU;

• Processos com múltiplas threads


podem realizar mais de uma tarefa de
cada vez;

45
Threads
• Thread (processo leve) é uma entidade
básica de utilização da CPU;

• Processos com múltiplas threads


podem realizar mais de uma tarefa de
cada vez;
— É como se fossem miniprocessos
dentro de um processo
46
Processos x Threads
P -> Entidades que agrupam os recursos do SO
T -> Entidades escalonadas para a execução
sobre a CPU

47
Processos x Threads
IMPORTANTE: todas as threads de um mesmo
processo compartilham o mesmo espaço de
endereçamento

48
Processos x Threads
IMPORTANTE: todas as threads de um mesmo
processo compartilham o mesmo espaço de
endereçamento
É essencial para determinadas aplicações que
precisam compartilhar dados em comum com
todas as tarefas em paralelo.

49
Sobre o fluxo de controle de uma
thread:
• Cada thread possui um contador de programa
que mantêm o controle de qual instrução ele
deve executar em seguida.

50
Sobre o fluxo de controle de uma
thread:
• Cada thread possui seu próprio conjunto de
valores contidos nos registradores da CPU,
que por sua vez contêm suas variáveis atuais
de trabalho.

51
Sobre o fluxo de controle de uma
thread:
• Cada thread apresenta uma pilha contendo o
histórico de parâmetros referentes às
execuções de chamadas de procedimentos.

52
Threads: Motivação
• Processos gastam tempo demais com entrada e
saída
— Dividir o processo em várias threads pode
reduzir o atraso

53
Threads: Motivação

• Múltiplas execuções em um mesmo espaço de


endereçamento

54
Threads: Motivação Concorrência

• Threads são mais leves do que processo


— são mais fáceis (isto é, mais rápidos) para
criar e destruir do que os processos

55
Threads: Motivação Concorrência

• Threads são mais leves do que processo


— são mais fáceis (isto é, mais rápidos) para
criar e destruir do que os processos
— Em muitos sistemas, criar um thread é algo
de 10 a 100 vezes mais rápido do que criar
um processo

56
Threads: Motivação Concorrência

• Threads são mais leves do que processo


— são mais fáceis (isto é, mais rápidos) para
criar e destruir do que os processos
— Em muitos sistemas, criar um thread é algo
de 10 a 100 vezes mais rápido do que criar
um processo
— Quando o número necessário de threads
muda dinâmica e rapidamente, é útil se
contar com essa propriedade.

57
Threads: Motivação Concorrência

• Threads são mais leves do que processo

58
Exemplo do uso de Threads

• Processador de texto com três threads:


• (i) leitura do teclado, (ii) armazenamento e
resgate de disco, (iii) edição do texto

59
Exemplo do uso de Threads

• Deve ficar claro que ter três processos em


separado não funcionaria aqui, pois todos os
três threads precisam operar no documento.

60
Exemplo do uso de Threads (2)

Um servidor web com múltiplas threads

61
Um servidor web com múltiplas threads

• O despachante, lê as requisições de trabalho


que chegam da rede

62
Um servidor web com múltiplas threads

• Após examinar a solicitação, ele escolhe um


thread operário ocioso (isto é, bloqueado) e
passa para ele a solicitação

63
Um servidor web com múltiplas threads

• O despachante então acorda o operário


adormecido, movendo-o do estado bloqueado
para o estado pronto

64
Um servidor web com múltiplas threads

• Quando o operário desperta, ele verifica se a


solicitação pode ser satisfeita a partir do
cache da página da web, ao qual todos os
threads têm acesso

65
Um servidor web com múltiplas threads

• Se não puder, ele começa uma operação read


para conseguir a página do disco e é bloqueado
até a operação de disco ser concluída.

66
Um servidor web com múltiplas threads

Código simplificado do slide anterior


(a) Thread despachante
(b) Thread operário
67
O modelo de thread clássico

• Processos são usados para agrupar


recursos;
• threads são as entidades escalonadas
para execução na CPU.

68
O modelo de thread clássico

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


(b) Um processo com três threads

69
O modelo de thread clássico

Primeiro caso (a) - processos compartilham


memórias físicas, discos, impressoras e outros
recursos.

70
O modelo de thread clássico

Primeiro caso (a) - Cada thread opera em um


espaço de endereçamento diferente

71
O modelo de thread clássico

Segundo caso (b) - threads compartilham um


espaço de endereçamento e outros recursos.

72
O modelo de thread clássico

Segundo caso (b) - significa que eles também


compartilham as mesmas variáveis globais.

73
O modelo de thread clássico

• Itens compartilhados por todos os threads em


um processo (1)
• Itens privativos de cada thread (2)

(1) (2)

74
O modelo de thread clássico

• Além espaço de endereçamento, todos os


threads podem compartilhar o mesmo conjunto
de arquivos abertos, processos filhos, alarmes
e sinais, ...
(1) (2)

75
O modelo de thread clássico

• Um thread pode ler, escrever, ou mesmo


apagar a pilha de outro thread. Não há
proteção entre threads

(1) (2)

76
O modelo de thread clássico

• se um thread abre um arquivo, esse arquivo


fica visível aos outros threads no processo e
eles podem ler e escrever nele

(1) (2)

77
Biblioteca Pthreads
• A maioria dos sistemas UNIX dá suporte a ele
• Para possibilitar que se escrevam programas com
threads portáteis

78
Biblioteca Pthreads
• Exemplo:

79
Problemas com Concorrência

• Surge a partir do fato de que threads


compartilham muitas estruturas de
dados.

80
Problemas com Concorrência

• Não-determinismo
— x = 1 || x = 2
o Qual o valor de “x” após a sua execução?
• Dependência de Velocidade
— [[ f(); x = 1 ]] || [[ g(); x = 2 ]]
— O valor final de x depende de qual das
funções, f() e g() terminar primeiro
• Starvation
— Processo de baixa prioridade precisa de um
recurso que nunca é fornecido a ele... 81
Problemas com Concorrência

• Suponha que um thread observe que há pouca


memória e comece a alocar mais memória. No
meio do caminho há um chaveamento de threads,
e o novo também observa que há pouca memória e
também começa a alocar mais memória.

82
Problemas com Concorrência

• Suponha que um thread observe que há pouca


memória e comece a alocar mais memória. No
meio do caminho há um chaveamento de threads,
e o novo também observa que há pouca memória e
também começa a alocar mais memória.
• A memória provavelmente será alocada duas
vezes.

83
Problemas com Concorrência

• os programas de multithread devem ser


pensados e projetados com cuidado para
funcionarem corretamente

84
Problemas com Concorrência

• Deadlock
— Um sistema de bibliotecas só fornece o “nada
consta” para alunos matriculados e o sistema
de matricula só matricula os alunos perante
a apresentação do “nada consta”

85
Problemas com Concorrência

• Deadlock
— Definição: dois ou mais processos bloqueiam
sua execução pois um precisa de um recurso
bloqueado pelo outro
o Dependência circular

86
Problemas com Concorrência

• Deadlock
— Técnicas para lidar com não determinismo
podem levar a deadlock
— Exigem que os processos “reservem” os
recursos antes de usá-los.

87
Implementação de Threads em Modo Usuário

• Há dois lugares principais para implementar


threads:
— no espaço do usuário e no núcleo

88
Implementação de Threads em Modo Usuário

• Pacote de threads é gerenciado pela aplicação


do usuário

89
Implementação de Threads em Modo Usuário

• O núcleo não sabe nada a respeito deles


• Até onde o núcleo sabe, ele está gerenciando
processos comuns de um único thread.

90
Implementação de Threads em Modo Usuário

• Cada processo precisa da sua própria tabela de


threads privada para controlar as threads
naquele processo
— Análogo a tabela de processo no núcleo

91
Implementação de Threads em Modo Usuário

• Cada processo precisa da sua própria tabela de


threads privada para controlar as threads
naquele processo
— o contador de programa, o ponteiro de pilha,
registradores, estado

92
Vantagens de threads em modo usuário

• threads pode ser implementado em um sistema


operacional que não dá suporte aos threads

93
Vantagens de Threads em Modo Usuário

• trocas de threads são mais eficientes do que


no modo núcleo
— salvar o estado do thread e carregar o
escalonador local é mais eficiente do que
fazer uma chamada de núcleo
— Exigem menos transições entre modo
usuário e modo núcleo

94
Vantagens de Threads em Modo Usuário

• Permitem personalização do escalonamento

95
Vantagens de Threads em Modo Usuário

• Permitem personalização do escalonamento


— Para algumas aplicações é uma vantagem
não ter de se preocupar com um thread ser
parado em um momento inconveniente.

96
Desvantagens de Threads em Modo Usuário

• Se um thread começa a ser executado, nenhum outro


naquele processo será executado a não ser que o
primeiro thread voluntariamente abra mão da CPU

97
Desvantagens de Threads em Modo Usuário

• Exigem uma infraestrutura adicional de tempo


de execução

98
Desvantagens de Threads em Modo Usuário

• Não se beneficiam de suporte de hardware


para acelerar múltiplas threads

99
Desvantagens de Threads em Modo Usuário

• É difícil implementar chamadas de sistema


com bloqueio.
— Uma chamada de sistema para ler de um
teclado bloquearia todas as outras threads

100
Desvantagens de Threads em Modo Usuário

• É difícil implementar chamadas de sistema


com bloqueio.
— Necessário um mecanismo que diga
antecipadamente se a chamada causaria bloqueio
o Se a chamada read for bloqueada, a chamada
não é feita
— Caso contrário, todas as threads do processo podem
ser bloqueadas por causa de apenas uma.

101
Implementação de Threads em Modo Núcleo

• Pacote de threads é gerenciado pelo núcleo do


SO

102
Implementação de Threads em Modo Núcleo

• Não há uma tabela de thread em cada


processo

103
Implementação de Threads em Modo Núcleo

• Em vez disso, núcleo tem uma tabela que controla


todos os threads no sistema

104
Implementação de Threads em Modo Núcleo

• Quando um thread é bloqueado, o núcleo tem


a opção de executar outro thread do mesmo
processo ou algum de um processo diferente

105
Resumo: Threads Modo Usuário x Modo Núcleo

• Threads em modo usuário conseguem também


ser executadas sobre SO que não suporte
threads

106
Resumo: Threads Modo Usuário x Modo Núcleo

• Threads em modo usuário conseguem também


ser executadas sobre SO que não suporte
threads
• Trocas de contexto entre threads modo usuário
são mais rápidas

107
Resumo: Threads Modo Usuário x Modo Núcleo

• Threads em modo usuário conseguem também


ser executadas sobre SO que não suporte
threads
• Trocas de contexto entre threads modo usuário
são mais rápidas
• Threads em modo núcleo não necessitam de
um sistema para controle de tempo de
execução em modo usuário

108
Resumo: Threads Modo Usuário x Modo Núcleo

• Threads em modo usuário conseguem também


ser executadas sobre SO que não suporte
threads
• Trocas de contexto entre threads modo usuário
são mais rápidas
• Threads em modo núcleo não necessitam de
um sistema para controle de tempo de
execução em modo usuário
• Troca de contexto entre threads de modo
núcleo é mais demorada

109
Resumo: Threads Modo Usuário x Modo Núcleo

• Em modo núcleo, alternância do processador


pode ocorrer entre threads de processos
diferentes

110
Resumo: Threads Modo Usuário x Modo Núcleo

• Em modo núcleo, alternância do processador


pode ocorrer entre threads de processos
diferentes
• Em modo usuário, alternância se dá somente
entre threads do mesmo processo, até que
outro processo seja escalonado

111
Resumo: Threads Modo Usuário x Modo Núcleo

• Em modo núcleo, alternância do processador


pode ocorrer entre threads de processos
diferentes
• Em modo usuário, alternância se dá somente
entre threads do mesmo processo, até que
outro processo seja escalonado
• Em modo usuário, pode ocorrer monopolização
da CPU se uma thread não ceder nunca a vez
para as demais threads do processo

112
Resumo: Threads Modo Usuário x Modo Núcleo

• Se uma thread modo usuário faz uma chamada


com bloqueio, todas as demais threads do
processo serão bloqueadas, o que não ocorre
em threads em modo núcleo
– embora haja soluções “deselegantes” para
se contornar isto em modo usuário

113
Implementações de Threads em Modo Híbrido

• Multiplexação de threads de usuário sobre


threads de núcleo

114
Implementações de Threads em Modo Híbrido

• Tentativa de combinar as vantagens de


threads de usuário com threads de núcleo.

115
Implementações de Threads em Modo Híbrido

• o programador pode determinar quantos


threads de núcleo usar e quantos threads de
usuário multiplexar para cada um.

116
Thread Pop-Up
• Criação de uma nova thread quando chega uma
mensagem
– não por uma thread aguardando um evento
ou coisa do tipo

117

Você também pode gostar