Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
7
Criação de Processos
Eventos que levam à criação de processos:
8
Criação de Processos
Eventos que levam à criação de processos:
9
Criação de Processos
Eventos que levam à criação de processos:
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).
31
Escalonador de Processos
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;
45
Threads
• Thread (processo leve) é uma entidade
básica de utilização da 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
54
Threads: Motivação Concorrência
55
Threads: Motivação Concorrência
56
Threads: Motivação Concorrência
57
Threads: Motivação Concorrência
58
Exemplo do uso de Threads
59
Exemplo do uso de Threads
60
Exemplo do uso de Threads (2)
61
Um servidor web com múltiplas threads
62
Um servidor web com múltiplas threads
63
Um servidor web com múltiplas threads
64
Um servidor web com múltiplas threads
65
Um servidor web com múltiplas threads
66
Um servidor web com múltiplas threads
68
O modelo de thread clássico
69
O modelo de thread clássico
70
O modelo de thread clássico
71
O modelo de thread clássico
72
O modelo de thread clássico
73
O modelo de thread clássico
(1) (2)
74
O modelo de thread clássico
75
O modelo de thread clássico
(1) (2)
76
O modelo de thread clássico
(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
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
82
Problemas com Concorrência
83
Problemas com Concorrência
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
88
Implementação de Threads em Modo Usuário
89
Implementação de Threads em Modo Usuário
90
Implementação de Threads em Modo Usuário
91
Implementação de Threads em Modo Usuário
92
Vantagens de threads em modo usuário
93
Vantagens de Threads em Modo Usuário
94
Vantagens de Threads em Modo Usuário
95
Vantagens de Threads em Modo Usuário
96
Desvantagens de Threads em Modo Usuário
97
Desvantagens de Threads em Modo Usuário
98
Desvantagens de Threads em Modo Usuário
99
Desvantagens de Threads em Modo Usuário
100
Desvantagens de Threads em Modo Usuário
101
Implementação de Threads em Modo Núcleo
102
Implementação de Threads em Modo Núcleo
103
Implementação de Threads em Modo Núcleo
104
Implementação de Threads em Modo Núcleo
105
Resumo: Threads Modo Usuário x Modo Núcleo
106
Resumo: Threads Modo Usuário x Modo Núcleo
107
Resumo: Threads Modo Usuário x Modo Núcleo
108
Resumo: Threads Modo Usuário x Modo Núcleo
109
Resumo: Threads Modo Usuário x Modo Núcleo
110
Resumo: Threads Modo Usuário x Modo Núcleo
111
Resumo: Threads Modo Usuário x Modo Núcleo
112
Resumo: Threads Modo Usuário x Modo Núcleo
113
Implementações de Threads em Modo Híbrido
114
Implementações de Threads em Modo Híbrido
115
Implementações de Threads em Modo Híbrido
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