Anda di halaman 1dari 58

UNIVERSIDADE FEDERAL DE MINAS GERAIS

DEPARTAMENTO DE ENGENHARIA ELETRNICA

Automao em Tempo Real


Processos e Threads

Andr Paim Lemos


andrepaim@ufmg.br
Mo#vao
Primeiros sistemas operacionais (S.O.)
Monotarefa
Apenas um progama era executado
Programa tomava o controle do sistema e #nha acesso
a todos os recursos do sistema
Mo#vao
Sistemas operacionais modernos
Mul#tarefa
Ml#plos progamas carregados na memria e
executando concorrentemente
S.O. deve ser capaz de controlar a execuo de
m#plos programas
Criao do conceito do processo
Programa em execuo + estado da execuo
Unidade de trabalho em um sistema de
compar#lhamento de tempo
Mo#vao
Sistema operacional formado por uma coleo
de processos:
Processos do sistema operacional
Processos do usurio
Todos esses processos podem ser executados
concorrentemente em uma nica CPU atravs
do compar#lhamento de tempo de
processamento
Mo#vao
*stack_overow.cpp

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*:

Executando (running): instrues esto sendo


executadas
Bloqueado (blocked): esperando por algum evento
(E/S, recepo de alguma sinal, etc.)
Pronto (ready): pronto para usar a CPU

* Nmero de estados e nomenclatura varia dependendo do S.O.


Estados de um Processo
A cada instante
Apenas 1 processo econtra-se no estado executando
Vrios processos podem estar bloqueados ou prontos

Sistema operacional mantm:


Uma la de processos prontos ordenada pela
prioridade
Uma (ou mais) la(s) de processos bloqueados
Estados de um Processo
Durante a criao do processo, seu estado
inicial denido como new
Estados de um Processo
Depois de criado, caso existam outros
processos executando, seu estado denido
como ready
Estados de um Processo
Processo aguarda na la de processos prontos
at que chegue ao topo da la
Estado: ready-> running
Estados de um Processo
Processo executa por um determinado tempo
(quatum), quando o tempo termina o S.O.
interrompe sua execuo*
Estado: running -> ready

* Sistemas operacionais preempe#vos


Estados de um Processo
As transies entre running e ready so
executadas pelo escalonador de processos
(parte do S.O.)
O processo no tem conhecimento dessas
transies (mul#tarefa preempi#va)
Estados de um Processo
Caso processo esteja executando e necessite
esperar por um evento de E/S (entrada de dados
do usurio no teclado, escrita no disco, etc.)
Estado: running -> waiDng

*E/S = Entrada e sada


Estados de um Processo
Ao trmino da operao de E/S, o processo
bloqueado volta la dos prontos
Estado: waiDng-> ready
Estados de um Processo
Quando o processo termina sua execuo
Estado: running-> terminated
Implementao de um Processo
Para implementar um processo o S.O.
mantm uma tabela de processos
Uma entrada por processo

Cada entrada da tabela contm informaes


sobre o estado do processo
Cada entrada comumente denida como um
Process Control Block (PCB)
Process Control Block
Estado do processo
Program counter a prxima instruo a ser
executada
Registradores acumulador, stack pointer, etc.
Informao para escalonamento prioridade,
ponteiro para la de escalonamento, etc
Informao de gerenciamento de memria
Estads#cas tempo de CPU, tempo real de
execuo
Estado de E/S lista de arquivos abertos,
disposi#vos de E/S alocados ao processo , etc
Filas de Processos
Todos os processos presentes na memria com estado
ready so armazenados em uma la de processos prontos
(ready queue)
Processos com estado waiDng so armazenados em las de
esperas, como por exemplo, las de disposiDvos (device
queue)
Filas de Processos
Uma forma de representar a dinmica dos
processos no S.O. atravs e um diagrama de
las
Chaveamento de Contexto
Nas transies: running -> ready|waiDng ocorre
chaveamento de contexto.
O S.O.:
Salva todos os registradores de uso geral da CPU
Salva registradores de endereamento (program
counter, stack pointer, etc.)
Salva uma imagem da rea de dados e de pilha do
processo
Informaes so salvas no Process Control Block
(PCB) do processo a ser interrompido
Chaveamento de Contexto
Na transio ready -> running o S.O. restaura
as informaes armazenadas no PCB
Operaes em Processos
Um S.O. mul#tarefa deve permi#r a realizao de diversas
tarefas relacionadas a processsos, tais como:
Criar um processo
Destruir um processo
Bloquear um processo
Suspender/con#nuar um processo
Mudar prioridade de um processo
Criar um processo envolve muitas operaes, tais como:
Iden#car o processo (PID = Proccess IdenDer)
Criar o PCB do processo
Alocar recursos iniciais para o processo (exemplo: RAM)
Inserir o processo na lista dos prontos
Criao de Processos
Um processo pode criar um novo processo
Chamada de sistema para criar um processo
O processo que cria chamado de pai (parent)
Os novos processos de lhos (children)
Geralmente os S.O. iden#cam os processos
usando um iden#cador nico de processo
Process IdenDer (PID)
Criao de Processos
rvore de processos dpica do S.O. Solaris
*fork_test.c

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

A thread termina a execuo de sua funo


principal
O processo ao qual a thread pertence terminado
Threads - Trmino
Uma thread pode esperar o trmino de outra
C++11 Criao de Threads

Ver exemplo thread_vector.cpp


C++11 - Threads
Uma thread joinable se outras threads
podem esperar pelo seu trmino usando o
mtodo join()
Se a thread detached outras threads no
podem aguardar seu trmino
Por default, as threads so criadas como
joinable
Para denir uma thread como detached u#liza-
se o mtodo detach()
C++11 - Threads
O mtodo detach() separa a execuo da
thread do objeto do #po std::thread associado
Permite que a thread con#nue executando
mesmo se o objeto associado seja destrudo
#l quando necessrio criar vrias threads
em uma funo, mas no necessrio (ou
possvel) armazenar os objetos
correspondentes e esperar pelo trmino de
todas as threads
C++11 Threads - Detached
Compiladores compadveis com C++11
Alguns compiladores que implementam a
biblioteca de threads do padro C++11
Microsom Visual C++ >= 2012
Windows
gcc (verso > 4.7)
Linux, MacOSX, etc
C++11 - Threads
Referncia da API

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

Anda mungkin juga menyukai