Você está na página 1de 28

CTeSP

Redes e Sistemas Informáticos

Ambientes Operativos e Serviços de Rede


2 – Processos e Threads

Manuel Ferreira, Jorge Martins


© 20121Mfer@ESTSetúbal
Processos e Threads

Um processo é um programa em execução.


Numa máquina existem dois tipos de processos:
Processos do SO e serviços
Quando uma máquina é iniciada são iniciados muitos processos, a maior
parte desconhecidos do utilizador.
Por exemplo:
Um processo pode ser iniciado e ficar à espera de e-mail.
Outro processo, parte do programa de anti-vírus, verifica
periodicamente se está disponível a descrição de novos vírus.
Processos do utilizador
Enquanto um utilizador acede à Internet, pode ter estar a imprimir
ficheiros, a guardar ficheiros numa memória USB, etc.

Toda esta atividade tem de ser gerida por um SO que suporte a


execução simultânea de vários processos.
© 2021 Mfer@ESTSetúbal 2
Processos e Threads

SOs como sistema de gestão de processos


Em qualquer sistema multi-processo, o CPU comuta rapidamente
de um processo para outro.
Cada processo é executado durante alguns milisegundos.

Pseudo-paralelismo
Em cada instante, o CPU executa um único processo, comutando e dando
algum tempo de processamento a cada um, existe a ilusão de paralelismo.

Paralelismo por hardware


O sistema tem dois ou mais CPU que partilham a mesma memória.

© 2021 Mfer@ESTSetúbal 3
Processos e Threads

Principais eventos para a criação de processos


Inicialização do sistema;
Um processo em execução executa uma system call;
Linux → fork(), clone()
Windows → CreatProcess()

O utilizador inicia um novo processo.

Principais eventos para a finalização de processos


Saída normal (voluntária);
Saída com erro (voluntária);
Erro fatal (involutário);
Terminado (killed) por outro processo (involuntário);
© 2021 Mfer@ESTSetúbal 4
Processos e Threads

Hierarquia de processos
Linux
Quando um processo (parent) cria outro processo (child), estes ficam
associados.
Os processos child podem por sua vez criar novos processos.

Windows
Não existe o conceito de hierarquia de processos.
Quando um processo é criado, o parent recebe um token que pode ser usado
para controlar o processo child.
O token pode ser passado a outros processos, invalidando assim o conceito
de hierarquia de processos.

© 2021 Mfer@ESTSetúbal 5
Processos e Threads

Hierarquia de processos
Linux  processo init
É criado no arranque do sistema e é o parent direto ou indireto de todos os
processos em execução.

B C

D
E F G

© 2021 Mfer@ESTSetúbal 6
Processos e Threads

Estado dos processos


Genericamente um processo pode estar em 3 estados possíveis:
Running
Em execução, o processo está a utilizar o CPU;
Ready
Pronto a entrara em execução, o processo está temporariamente parado
de modo a permitir que outros processos possam ser executados;
Blocked
Bloqueado, o processo encontra-se à espera que algum evento externo
ocorra.

© 2021 Mfer@ESTSetúbal 7
Processos e Threads

Estado dos processos


Linux

Destroyed
O scheduler
O processo encontra- coloca o processo O processo
se pronto para entrar em execução. está em
em execução. execução.
Create O processo
Ready Running termina ou é
Processo criado a terminado
partir de um (killed)
O processo foi preempted
fork() ou O tempo de execução do
clone(). processo terminou. O processo adormece
O evento ocorre e o
ou fica à espera de
processo é Waiting um evento externo
desbloqueado
O processo está
bloqueado.
© 2021 Mfer@ESTSetúbal 8
Processos e Threads

Threads
Os processos não partilham recursos.
A comunicação entre processos é complexa.

As threads podem partilhar recursos (memória, ficheiros, …)


A comunicação entre threads que cooperam entre si é bastante mais
simples.

Vantagens
As aplicações podem ter várias atividades a decorrer em simultâneo.
Algumas destas atividades podem bloquear, ficando todas as outras
atividades também bloqueadas.
Cada uma das atividades de uma aplicação podem ser executadas em
diferentes threads .
Torna a programação da aplicação mais simples.
O bloqueio de uma das threads, não influencia as restantes.
© 2021 Mfer@ESTSetúbal 9
Processos e Threads

Threads
Caraterísticas
As threads são mais leves do que os processos:
Em alguns sistemas, a criação de uma thread é 10 a 100 vezes mais rápido
do que criar um processo.
Em aplicações de cálculo intensivo, a atribuição de tarefas por várias
threads só tem alguma vantagem em sistemas multi-core ou multi-CPU.
Existem aplicações que utilizam as dezenas ou centenas de cores das
cartas gráficas para reduzirem o tempo de processamento.
NVIDIA Tesla K50 → 2 x GK210 → 4 992 CUDA cores
NVIDIA Quadro P6000 → 3 840 CUDA cores (5 250 €).
Há aplicações que não podem ficar bloqueadas à espera de, por exemplo,
informação introduzida pelo utilizador.
Pode-se utilizar uma thread que faz a interação com o utilizador.
© 2021 Mfer@ESTSetúbal 10
Processos e Threads

Threads
Um processador de texto com 3 threads

© 2021 Mfer@ESTSetúbal 11
Processos e Threads

Comunicação entre processos


Questões
Como é que um processo envia informação para outro?
Como é que se garante que um processo não interferem um com o outro?
Sistema de reserva de uma companhia aérea: duas threads reservam o
mesmo lugar para dois passageiros diferentes.
Como garantir a sequência correta de operações?
O processo A produz informação, o processo B imprime a informação, B
tem de esperar até que A produza alguma informação antes de começar a
imprimir.

Threads
A passagem de informação entre as threads é fácil porque as threads
partilham recursos.

© 2021 Mfer@ESTSetúbal 12
Processos e Threads

Comunicação entre processos


Regiões críticas
Se dois processos ou threads tentarem aceder ao mesmo recurso
partilhado, o resultado pode ser imprevisível.
Duas threads partilham a mesma variável i, a thread A faz i = 0 e a
thread B i = 1.
Thread A executa 1º que a thread B  i = 1
Thread B executa 1º que a thread A  i = 0
O acesso a recursos partilhados tem de ser regulado de modo a que num
dado instante não possa existir mais do que um processo a escrever e/ou ler
o recurso (exemplo da escrita num ficheiro).

© 2021 Mfer@ESTSetúbal 13
Processos e Threads

Comunicação entre processos


Regiões críticas
Exclusão mútua, mutexes (mutual exclusion).

Processo A
O processo A O processo A Tempo
adquire o mutex liberta o mutex

A tem acesso à B tem acesso à


região crítica região crítica

Mutex A B
O processo B adquire o
O processo B tenta mutex e é desbloqueado O processo B
aquirir o mutex liberta o mutex

Processo B
B bloqueado Tempo
© 2021 Mfer@ESTSetúbal 14
Processos e Threads

Comunicação entre processos


Variáveis condicionais
Uma variável condicional permite a uma thread sinalizar outra thread.

Thread 1 Thread 3 Thread 2

Wait
A thread 1 está Wait
bloqueada na variável A
condicional A à espera A thread 2 está
de um signal. Signal B bloqueada na variável
condicional B à espera
de um signal.
Signal

A Variáveis
B condicionais

© 2021 Mfer@ESTSetúbal 15
Processos e Threads

Comunicação entre processos


Barreiras
Permitem a sincronização de um grupo de processos/threads.

A A A A

B B B B

Barreira

Barreira
Barreira

C C C C

D D D D

Não se encontra nenhum Os processos A, B e C Depois de todos os processos


processo bloqueado na estão bloqueados na atingirem a barreira, estes
barreira. barreira. são desbloqueados.
© 2021 Mfer@ESTSetúbal 16
Processos e Threads

Comunicação entre processos


Troca de mensagens
Os processos trocam mensagens entre si.
Normalmente os processos têm caixas de correio (mailboxes) onde recebem
as mensagens.
Os processos não têm de estar na mesma máquina.
Problemas
Como identificar um processo.
Possível solução, endereço IP da máquina + nº do porto associado ao
processo (socket).
Segurança
Message-Passing Interface, MPI
Sistema utilizado em sistema paralelos.

© 2021 Mfer@ESTSetúbal 17
Processos e Threads

Scheduling
O scheduder de processos decide quando um processo executa e
por quanto tempo.
O scheduler divide os recursos finitos do processador entre os
processos em execução no sistema.
O scheduler é responsável pela boa utilização do sistema e dá aos
utilizadores a ilusão que os processos são executados
simultaneamente.
Decisão fundamental de qualquer scheduler:
Decidir qual o próximo processo a entrar em execução de um conjunto de
processos em espera.

© 2021 Mfer@ESTSetúbal 18
Processos e Threads

Scheduling Preemptividade ou preempção é a


capacidade de tirar de execução um
Multitasking processo em detrimento de outro.
Máquinas com um processador
Dá a ilusão que os processos são executados simultaneamente.
Máquinas com vários processadores (ou núcleos)
Permite aos processos serem executados em paralelo simultaneamente
em diferentes processadores.
Multitasking preemptivo
O scheduler decide quando um processo para de executar e um outro
inicia a execução.
Time Slice ou Time Slot
Tempo de execução de um processo, normalmente é predeterminado.
Evita que um processo monopolize o processador.

© 2021 Mfer@ESTSetúbal 19
Processos e Threads

Scheduling
Processos limitados pelo I/O
Processos que passam a maior parte do tempo a executar e a esperar por
pedidos a dispositivos de entrada e/ou saída (I/O).
Estes processos encontram-se num estado de execução durante períodos de
tempo muito curtos.
A maior parte dos programas com interfaces gráficas, são limitadas pelo
I/O porque passam a maior parte do tempo à espera da interação com o
utilizador através do rato ou teclado.

Processos limitados pelo processamento


Processos que passam a maior parte do tempo a executar código.
Podem ser, por exemplo, programas que executam grandes quantidades de
cálculo matemático.

© 2021 Mfer@ESTSetúbal 20
Processos e Threads

Scheduling
Processos limitados pelo I/O e pelo processamento

© 2021 Mfer@ESTSetúbal 21
Processos e Threads

Scheduling
Categorias
Lote (batch)
Processamento em lote (batch) é a execução de uma série de tarefas
num computador sem intervenção manual (não-interativo).
Não existem utilizadores à espera de uma resposta do sistema.
Consequentemente são aceitáveis algoritmos de scheduling com longos
períodos de processamento dedicados a cada tarefa.
Os tempos de comutação entre processos são assim reduzidos, o que
melhora o desempenho do sistema.

© 2021 Mfer@ESTSetúbal 22
Processos e Threads

Scheduling
Categorias
Interativo
Num ambiente com utilizadores a interagirem com o sistema, a
preempção é essencial de modo a evitar que um processo monopolize o
CPU.
Os servidores encontram-se nesta categoria porque normalmente servem
vários utilizadores remotos simultaneamente.
Tempo-real
O sistema garante uma resposta dentro de um intervalo de tempo rígido.
Em sistemas de tempo-real a preempção pode não ser a melhor solução.
Os processos sabem que não podem correr por longos períodos de
tempo e normalmente fazem o seu trabalho e bloqueiam rapidamente.
Nos sistemas de tempo-real só são executados os programas necessários
para o sistema desempenhar a tarefa.
© 2021 Mfer@ESTSetúbal 23
Processos e Threads

Scheduling
Exemplos de algoritmos, sistemas de lote (batch)
First-Come, First-Served
Os processos são executados pela ordem de chegada.
Existe uma única fila de processos prontos a entrar em execução.
Quando o processo em execução bloqueia, o 1º processo da lista é posto
em execução.
Quando um processo desbloqueia, é colocado no fim da lista.
Shortest Job First
Shortest Remaining Time Next

© 2021 Mfer@ESTSetúbal 24
Processos e Threads

Scheduling
Exemplos de algoritmos, sistemas interativos
Round-robin (RR)
Atribui frações de tempo (time-slots) para cada processo em partes
iguais e de forma circular, manipulando todos os processos sem
prioridades.
Time-slots
Curtos
Existem muitas comutações entre processos, o que diminui a
eficiência do CPU.
Longos
Má resposta em aplicações interativas.
20–50 ms é normalmente um compromisso razoável.

© 2021 Mfer@ESTSetúbal 25
Processos e Threads

Scheduling
Exemplos de algoritmos, sistemas interativos
Scheduling prioritário
A cada processo é atribuída uma prioridade.
É normal agrupar os processos em classes de prioridade.
Entre classes  scheduling prioritário entre classes.
Dentro de cada classes  scheduling round-robin.
Se houver processos prontos a executar numa fila de alta prioridade,
estes são executados em round-robin.
Os processos das listas de menor prioridade só são executados se não
existirem processos prontos a executar em listas de maior prioridade.
Problema
Os processos das listas de menor prioridade correm o risco de terem
pouco ou nenhum tempo de CPU.
© 2021 Mfer@ESTSetúbal 26
Processos e Threads

Scheduling
Linux
O kernel Linux implementa duas prioridades
Nice
Nº que pode variar entre -20 e 19, valor por omissão 0.
Valores mais altos correspondem a prioridades mais baixas.
Sistemas com valores mais baixos recebem mais tempo de CPU.
Prioridade de tempo-real
Nº que varia entre 0 e 99.
Valores mais altos correspondem a prioridades mais altas.
Todos os processos de tempo-real têm prioridades mais altas que os
processos normais.

© 2021 Mfer@ESTSetúbal 27
Processos e Threads

Scheduling
Linux

© 2021 Mfer@ESTSetúbal 28

Você também pode gostar