Escolar Documentos
Profissional Documentos
Cultura Documentos
Processo
Um
processo
um
uxo
de
controle
sequencial
e
seu
espao
de
endereamento
Processo
Vrios
processos
podem
estar
executando
concorrentemente
criados
a
par#r
do
mesmo
programa
Ex:
dois
usurios
u#lizando
um
processador
de
texto
no
mesmo
computador
Um
programa
pode
criar
vrios
processos
Ex:
Google
Chrome
Estados
de
um
Processo
Durante
a
existncia
de
um
processo,
este
pode
assumir
geralmente
trs
estados*:
Criao
de
Processos
Cdigo
em
C
para
linux,
criao
de
um
processo
lho
Escalonamento
de
Processos
O
obje#vo
de
um
S.O.
mul#tarefa
ter
sempre
um
processo
executando,
para
maximizar
a
u#lizao
da
CPU
Escalonamento
de
Processos
Tempo
dpico
de
u#lizao
da
CPU
Escalonamento
de
Processos
Toda
vez
que
a
CPU
ca
ociosa,
o
S.O.
deve
selecionar
outro
processo
para
executar
Essa
operao
realizada
pelo
escalonador
de
processos
A
la
de
processos
prontos
(ready
queue)
no
necessariamente
FIFO
(rst
in
rst
out)
Fila
de
prioridades
=
prioridade
de
cada
processo
Escalonamento
de
Processos
Decises
de
escalonamento
devem
ocorrer:
Running
->
wai#ng
-
requisio
de
E/S
Running
->
ready
-
interrupo
Wai#ng
->
ready
-
trmino
de
operao
de
E/S
Running
->
terminated
-
m
de
execuo
Escalonamento
de
Processos
Existem
diversas
estratgias
de
escalonamento
de
processos
Quando
um
processo
em
execuo
pode
ser
interrompido
pelo
S.O.
(por
exemplo,
depois
que
seu
Dme-slice
termine)
o
escalonamento
dito
preemp#vo
Caso
contrrio,
o
escalonamento
no-preemp#vo
Escalonamento
de
Processos
No
escalonamento
preemp#vo
O
S.O.
interrompe
a
execuo
do
processo
a#vo
e
despacha
um
novo
processo
para
execuo
O
S.O.
u#liza
um
relgio
de
hardware
(real-Dme
clock
RTC),
que
periodicamente
gera
interrupes
que,
por
sua
vez,
devolvem
o
controle
da
CPU
ao
S.O.
No
escalonamento
no-preemp#vo,
o
processo
executa
at
que
encerre
sua
execuo
ou
libere
a
CPU
de
forma
espontnea
(ex:
requisio
E/S)
Escalonamento
de
Processos
Em
sistemas
de
tempo
real
o
escalonamento
preemp#vo
o
mais
u#lizado
Garante
que
processos
com
maior
prioridade
tenham
chance
de
atender
seus
requisitos
de
tempo
Estratgias
de
escalonamento
de
tempo
real
sero
vistas
futuramente
Escalonamento
de
Processos
Threads
Um
dos
componentes
do
processo
a
sequncia
de
instrues
(cdigo)
a
ser
executada
Essa
sequncia
denida
como
linha
de
execuo
(thread)
primria
Em
um
programa
em
C
a
thread
primria
executa
o
cdigo
presente
na
funo
main()
Sistemas
operacionais
modernos
permitem
que
um
mesmo
processo
tenha
vrias
linhas
de
execuo
independentes
(mulDthread)
executando
concorrentemente
Threads
Mo#vao
Dado
um
sistema
que
possua
interface
com
usurio
e
realize
um
processamento
peridico
Exemplo:
SomPLC
Caso
o
programa
seja
feito
em
uma
nica
thread,
a
interface
com
o
usurio
no
ser
responsiva
durante
o
processamento
Soluo:
usar
uma
(ou
mais)
threads
auxiliares
para
realizar
o
processamento
Threads
Mo#vao
CLP
=
usar
uma
thread
por
funcionalidade
Thread
Thread
=
processo
leve
(lightweigth
process)
Compar#lham
recursos
do
processo
que
as
originou
Threads
Threads
Criao
de
50000
processos
ou
threads
em
diferentes
arquiteturas
fork() pthread_create()
Platform
real user sys real user sys
Intel
2.8
GHz
Xeon
5660
(12cpus/node)
4.4
0.4
4.3
0.7
0.2
0.5
AMD
2.3
GHz
Opteron
(16cpus/node)
12.5
1.0
12.5
1.2
0.2
1.3
AMD
2.4
GHz
Opteron
(8cpus/node)
17.6
2.2
15.7
1.4
0.3
1.3
IBM
4.0
GHz
POWER6
(8cpus/node)
9.5
0.6
8.8
1.6
0.1
0.4
IBM
1.9
GHz
POWER5
p5-575
(8cpus/node)
64.2
30.7
27.6
1.7
0.6
1.1
IBM
1.5
GHz
POWER4
(8cpus/node)
104.5
48.6
47.2
2.1
1.0
1.5
INTEL
2.4
GHz
Xeon
(2
cpus/node)
54.9
1.5
20.8
1.6
0.7
0.9
INTEL
1.4
GHz
Itanium2
(4
cpus/node)
54.5
1.1
22.2
2.0
1.2
0.6
Threads
Vantagens
Ml#plas
threads
de
um
processo
compar#lham
o
mesmo
espao
de
endereamento
Mais
fceis
de
criar,
escalonar
e
destruir
que
processos
teis
em
sistemas
com
ml#plas
CPU
permi#ndo
desenvolvimento
de
aplicaes
paraleas
Modelos
de
Threads
Threads
de
usurio
(user
threads)
Denidas
sem
suporte
do
kernel
Threads
de
kernel
(kernel
threads)
Denidas
com
suporte
do
S.O.
Todos
os
sistemas
operacionais
modernos
suportam
threads
de
kernel
Modelos
de
Threads
Threads
em
C++
O
desenvolvimento
de
programas
mul#thread
em
C++
depende
de
mecanismos
capazes
de:
Criar
e
encerrar
threads
Realizar
operaes
sobre
threads
Sincronizar
a
comunicao
entre
threads
At
2011,
a
linguagem
C++
no
oferecia
uma
biblioteca
padro
para
desenvolvimento
de
aplicaes
mul#thread
Os
desenvolvedores
u#lizavam:
API
especcas
disponibilizadas
por
S.O.
(Win32
API,
POSIX
Threads)
Geralmente
escritas
em
C
Ou,
bibliotecas
em
C++
que
encapsulam
essas
APIs
Boost,
Qt,
etc.
Threads
em
C++
Em
2011
um
novo
padro
da
linguagem
C++
foi
denido
C++11
-
ISO/IEC
14882:2011
Inclui
vrias
adies
para
a
linguagem
e
algumas
bibliotecas
Entre
as
bibliotecas,
uma
biblioteca
de
threads
Headers
<thread>,
<mutex>,
<condi#on_variable>,
etc.
Threads
em
C++
Vantagens
de
se
usar
a
biblioteca
padro
Biblioteca
em
C++
padronizada
Todos
os
compiladores
eventualmente
iro
implementar
a
biblioteca
de
threads
As
verses
mais
recentes
de
vrios
compiladores
C++
incluem
a
biblioteca
de
threads
Mul#plataforma
Cdigo
roda
em
diferentes
S.O.
sem
modicaes
C++11
-
Thread
C++11
Criao
de
Threads
Ver
exemplos
create_thread.cpp
thread_shared_var.cpp
C++11
-
Encerramento
Uma
thread
termina
se
hYp://en.cppreference.com/w/cpp/thread
Boost
Como
proceder
caso
a
verso
do
compilador
no
inclua
a
biblioteca
de
threads
do
padro
C++11
Biblioteca
Boost
(hYp://www.boost.org)
Conjunto
de
bibliotecas
em
C++
para
threads,
expresso
regular,
comunicao
via
rede,
entre
outras
A
API
da
bilioteca
de
threads
C++11
e
boost
pra#camente
a
mesma
Boost
serviu
de
inspirao
para
a
padronizao
Salvas
poucas
excesses,
basta
alterar
o
namespace
e
o
arquivo
de
cabealho
#include
<thread>
=>
#include
<boost/thread/thread.hpp>
std::thread
=>
boost::thread