Documente Academic
Documente Profesional
Documente Cultură
PROCESSOS E THREADS
06/04/11
RECAPITULANDO...
PROCESSOS/THREADS EM SISTEMAS
NÃO DISTRIBUÍDOS
06/04/11
Definição
06/04/11
RECAPITULANDO...
● Informações relacionadas a processos
ficam guardadas em uma tabela de
processo no SO (em caso de
suspensão, por exemplo).
06/04/11
Paralelismo
● Múltiplas tarefas executadas “ao mesmo
tempo”. Ex.: ler dados de um disco, mostrar
texto na tela, enviar texto para a impressora,
etc.
● Considerando um sistema multiprogramado, a
CPU salta de programa, em dezenas ou
centenas de milissegundos
● A cada instante a CPU executa apenas um
programa – pseudoparalelismo.
06/04/11
Modelo de Processo
06/04/11
Criação de Processos
● Principais eventos que levam à criação de
processos
1. Início do sistema
2. Execução de chamada ao sistema de criação de
processos
3. Solicitação do usuário para criar um novo processo
4. Início de um job em lote
● No Unix usa-se a chamada de sistema fork para
criação de processos.
Ex.: fork-ex.c
● No Windows, CreateProcess.
06/04/11
Criação de Processos
(cont)
● Após a criação de um processo, pai e filho
possuem espaços de endereçamento
distintos.
● Se um dos dois processos modificar uma
palavra em seu espaço de endereçamento,
a mudança não é visível ao outro.
● Particularidades: no Unix o espaço de
endereçamento inicial é uma cópia do pai
pro filho, no Windows, o espaço de
endereçamento é diferente desde o início.
06/04/11
Hierarquia de Processos
● Pai cria um processo filho, processo
filho pode criar seu próprio processo
● Formam uma hierarquia
➢ UNIX chama isso de “grupo de processos”
● Windows não possui o conceito de
hierarquia de processos
➢ Todos os processos são criados iguais
06/04/11
Estados de Processos
06/04/11
Estados de Processos (cont)
06/04/11
Processos x Threads
06/04/11
Processos x Threads (cont)
● Processo é uma forma de agrupar
recursos relacionados.
➢ Espaço de endereçamento contém arquivos
abertos, processos filhos, alarmes pendentes,
tratadores de sinal, etc.
➢ Colocá-los todos juntos facilita o gerenciamento
desses recursos.
06/04/11
Processos x Threads (cont)
● Thread != Processo.
➢ Executado dentro de um processo, porém
ambos podem ser tratados separadamente.
● Processos são usados para
agrupar recursos.
● Threads são as entidades
escalonadas para a execução
sobre a CPU.
06/04/11
Processos x Threads (cont)
● Threads permitem que múltiplas execuções
ocorram no mesmo ambiente do processo
com um alto grau de independência uma
da outra.
● Ter múltiplos threads executando em
paralelo em um processo é análogo a ter
múltiplos processo executando em paralelo
dentro de um mesmo computador.
● São comumente chamados de processos
leves (lightweight process).
06/04/11
Processos x Threads (cont)
● Threads compartilham o mesmo espaço de
endereçamento de um processo.
➢ Processos possuem espaços de endereçamento
diferentes entre si.
● Compartilham as mesmas variáveis globais.
● Pode ler, escrever ou mesmo apagar a pilha
de outro thread.
● Não há proteção entre threads.
➢ Processos possuem proteção entre si.
06/04/11
Processos x Threads (cont)
● Processos podem pertencer a múltiplos
usuários, potencialmente hostis.
● Threads não possuem relação com o clock
externo. Devem ser “educadas” cedendo a
CPU de tempos em tempos de modo que
outras threads possam executar.
● Threads possuem um contador de programa
que mantém o controle de qual instrução deve
executar em seguida.
● Threads possuem registradores que contém
suas variáveis atuais de trabalho.
06/04/11
Processos x Threads (cont)
● Threads apresentam uma pilha que traz a
história da execução, com uma estrutura para
cada procedimento chamado mas ainda não
retornado.
● Multithreading x forking
➢ Multithreading permite concorrência nativa
em um dado processo (múltiplos threads
em execução).
➢ Em processos, caso uma chamada
bloqueante seja feita, a característica de
processamento sequencial fica evidente.
06/04/11
Processos x Threads (cont)
● Multithreading x forking
➢ Ex. Planilha eletrônica com múltiplos
campos interdependentes. Processo
monothread precisa aguardar entradas para
habilitar outras operações. Múltiplos
threads – uma para interface com o usuário,
outra para atualizar campos, outra para
efetuar uma cópia de segurança em disco.
06/04/11
Processos x Threads (cont)
● Como threads não possuem recursos
atribuídos a elas, são mais fáceis de criar e
destruir do que processos.
➢ Em muitos sistemas, criar threads é centenas de vezes
mais rápido do que criar processos.
● Threads não apresentam nenhum ganho de
desempenho, considerando que sejam
atrelados a CPU, mas quando existe
computação substancial e também I/O, o uso
de threads permite que estas atividades se
sobreponham, agilizando a aplicação.
06/04/11
Processos x Threads (cont)
● Threads são úteis em sistemas com múltiplas
CPUs, onde paralelismo real é possível.
➢ Cada thread pode ser designado a uma CPU diferente,
enquanto dados compartilhados podem ser armazenados em
memória principal compartilhada.
● Processos podem ser usados para
desenvolvimento de grandes aplicações, onde
estas podem ser compostas por programas
cooperativos, cada qual executando em um
processo distinto. A comunicação pode ser feita
usando IPC – named pipes, filas de mensagens,
memória compartilhada etc. PROBLEMA: excessivo
chaveamento de contexto.
06/04/11
Processos x Threads (cont)
06/04/11
Processos x Threads (cont)
06/04/11
Processos x Threads (cont)
06/04/11
Processos x Threads (cont)
● Espaço de usuário
➢ Barato criar/destruir threads – determinado pela
facilidade de alocar/liberar memória para ajustar a pilha
da thread.
➢ Administração mantida no espaço de endereçamento do
usuário.
➢ Chaveamento de contexto pode ser feito em poucas
instruções. Não há necessidade de mudar mapas de
memória, liberar a TLB, rastreamento da CPU etc.
➢ Chaveamento de contexto ocorre quando threads
precisam sincronizar. Ex. para compartilhar dados.
➢ Desvantagem: chamada de sistema para I/O
bloqueia o processo inteiro.
06/04/11
Processos x Threads (cont)
● Espaço de kernel
● Resolve o problema quanto a chamadas bloqueantes.
● Desvantagem: cada operação (criação, remoção,
sincronização etc) será realizada pelo kernel.
● Chaveamento de contexto de threads é tão caro quanto
o chaveamento de processos.
● Solução: forma híbrida (lightweight processes – LWP).
06/04/11
Implementação de Threads
06/04/11
Implementação de Threads (cont)
06/04/11
Processos x Threads (cont)
● No contexto de Sistemas Distribuídos:
threads pop-up
06/04/11
Processos x Threads (cont)
● Algum planejamento avançado é necessário
ao se usar threads pop-ups.
● Em qual processo a thread é executada?
● O sistema suporta threads executando no contexto do
kernel?
● Em espaço de kernel, o tratamento da thread
geralmente é mais rápido do que em espaço
de usuário.
● Em espaço de kernel uma thread pode facilmente
acessar todas as tabelas do kernel e dispositivos de I/O.
● São perigosas em caso de má codificação.
06/04/11
PROCESSOS/THREADS EM SISTEMAS
DISTRIBUÍDOS
06/04/11
Propriedades
● Uma propriedade importante é a possibilidade de
efetuar uma chamada de sistema bloqueante sem
bloquear o processo no qual a thread está
executando.
● Permite a manutenção de várias conexões lógicas
em sistemas distribuídos
● Em redes de longa distância (MANs e WANs) pode
existir a necessidade de mascarar/minimizar
tempos de propagação muito longos em
mensagens interprocessos muito longas (centenas
de milissegundos ou até segundos).
06/04/11
Propriedades (cont)
● Solução usual é realizar a comunicação e
iniciar alguma outra atividade.
● Ex1. Clientes multithreaded. Navegadores
web (mostrar o conteúdo ainda em
trânsito, conexões keep alive x
paralelismo).
● Considerando a existência de servidores espelhados
(para balanceamento de carga), cada thread do
cliente pode se conectar a um servidor distinto
(dependendo do algoritmo de balanceamento de
carga).
06/04/11
Propriedades (cont)
● Ex2. Servidores multithreaded
06/04/11
Propriedades (cont)
● Ex2. Servidores multithreaded
06/04/11
Virtualização
● Virtualização de recursos.
● Ilusão de existência de múltiplos recursos
quando existe apenas um (ou um número
menor de recursos do que requisições).
● Ex. Processos e threads x CPU (memória
etc)
● Atualmente, estende ou substitui uma
interface existente de modo a imitar o
comportamento de outro sistema.
06/04/11
Virtualização (cont)
06/04/11
Virtualização (cont)
● Interfaces de um sistema
computacional:
06/04/11
Virtualização (cont)
● Aplicações
➢ Permitir execução de software legado em hardware
atual.
➢ Virtualização de servidores de aplicação/provisão de
conteúdo. A vantagem é permitir a replicação
dinâmica de conteúdo.
● Arquitetura
➢ Sistema runtime, o qual oferece um conjunto de
instruções que deve ser usado para executar
aplicações (a).
As instruções podem ser interpretadas (eg. Java) ou
–
emuladas (eg. Wine – necessário emular as chamadas de
06/04/11 sistema).
Virtualização (cont)
● Sistema pode ser implementado como uma camada
encapsulando totalmente o hardware original,
oferecendo a interface completa daquele hardware.
Conhecido como VMM – Virtual Machine Monitor (b).
Ex. VMWare, Virtualbox etc.
06/04/11
Virtualização (cont)
● Ótima solução considerando questões
de segurança.
● Isolamento de uma aplicação e seu ambiente.
Falhas não afetam a máquina como um todo.
● Portabilidade.
06/04/11
Clientes
06/04/11
Exemplo: Sistema X Window
06/04/11
Exemplo: Sistema X Window (cont)
06/04/11–
Software cliente para
transparência de distribuição
● É desejável que um cliente não saiba que está
se comunicando com processos distribuídos.
● Por questões de desempenho e correção, isto
não é desejável no lado servidor.
● Espelhamento de servidores → operações devem ser
realizadas em uma ordem específica.
● Transparência de acesso geralmente é
alcançada por meio de um stub cliente, o qual
define uma interface para o que o servidor
oferece.
06/04/11
Software cliente para transparência
de distribuição (cont)
06/04/11
Software cliente para transparência
de distribuição (cont)
06/04/11
Servidores
● Servidor é um processo implementando
um serviço específico para prover a uma
coleção de clientes.
● Espera por uma requisição → atende a requisição
● Organização:
● Interativo: o próprio servidor lida com a requisição e
a atende caso necessário.
● Concorrente: não lida com a requisição por si, mas a
encaminha para uma thread ou outro processo.
Aguarda posteriormente novas requisições.
06/04/11
Servidores (cont)
● Servidores usam endpoints ou portas.
Estas são globalmente conhecidas.
Atribuídas pela IANA (Internet
Assigned Numbers Authority).
● Basta o endereço IP considerando o
conhecimento da porta.
● Transparência alcançável com
serviços de nomes.
06/04/11
Servidores (cont)
06/04/11
Servidores (cont)
● Questões quanto a servidores
incluem a interrupção do serviço. ex.
Como interromper uma transferência
após seu início?
● Término, início de nova transferência.
● Comunicação out-of-band.
● Servidor stateless → não mantém informação
sobre o estado dos clientes.
● Servidor statefull → mantém a situação
persistente dos clientes.
06/04/11
Clusters de Servidores
06/04/11
Clusters de Servidores (cont)
06/04/11
Clusters de Servidores (cont)
06/04/11
Clusters de Servidores (cont)
06/04/11
Clusters de Servidores (cont)
06/04/11
Clusters de Servidores (cont)
06/04/11
Clusters de Servidores
● Gerenciando clusters servidores
● Terminal remoto (monitoramento, instalação e
mudança de componentes)
● Uso de interface administrativa. Vantagem:
operações coletivas podem ser mais facilmente
oferecidas.
– Cluster system management da IBM.
– Não é interessante considerando cluster muito grandes.
● Monitoramento de clusters muito grandes é quase
sempre ad hoc.
– Soluções de auto-gerenciamento a caminho. Ainda pouco
desenvolvido.
06/04/11
Exemplo: PlanetLab
● http://www.planet-lab.org/
● Sistema distribuído colaborativo
.Organizações doam um ou mais
computadores somando-se centenas de nós.
● Esses computadores formam um cluster de
uma camada (1-tier): acesso, armazenamento
e processamento podem ocorrer em cada nó.
● Componentes: virtual machine monitor (VMM)
e o vserver.
06/04/11
Exemplo: PlanetLab (cont)
● VMM: sistema operacional Linux
melhorado.
● Assegura que os vservers estão separados
● Vserver: ambiente separado no qual um
grupo de processos executa.
● ex. um vserver com PHP 4 e Apache 1.3.1 e outro
vserver com PHP 5 e Apache 2.
● Conceito de slice: conjunto de vservers,
cada vserver executando em um nó
diferente.
06/04/11
Exemplo: PlanetLab (cont)
06/04/11
Exemplo: PlanetLab (cont)
● Abordagem:
● Cada nó é equipado com uma coleção de
sensores. Cada sensor responsável por um
recurso (CPU, disco etc).
● A ideia principal de um vserver é criar um
ambiente isolado. Isso inclui os arquivos que
são normalmente compartilhados por uma
única máquina.
– O isolamento de filesystem pode ser alcançado por
meio do comando chroot.
06/04/11
Exemplo: PlanetLab (cont)
● Características
● Gerente do nó: cada nó possui este gerente,
implementado por meio de um vserver separado,
cuja tarefa é criar outros vservers em seu nó e
controlar alocação de recurso.
– Não toma decisões quanto a política, é meramente um
mecanismo para oferecer os ingredientes essenciais para
que um programa execute em um dado nó.
– Manutenção de recursos é feita pela especificação de
recursos. Especifica um intervalo de tempo durante o qual
certos recursos foram alocados.
– Recursos são relacionados a slices. Cada slice é associado a
um provedor de serviço, o qual pode ser visto como uma
entidade tendo uma conta no PlanetLab.
06/04/11
Exemplo: PlanetLab (cont)
● Para criar um novo slice, cada nó irá executar um serviço
de criação de slice (slice creation service – SCS), o qual,
por sua vez, pode contatar o gerente do nó e pedir a ele
para criar um vserver e alocar recursos.
● O gerente do nó não pode ser contatado diretamente por
uma rede para a criação de slices.
● O SCS é contatado para este fim. Apenas entidades
autorizadas (slice authorities) podem solicitar a criação
de slices.
● Um provedor de serviço irá contatar o slice authority e
solicitar a criação de um slice em uma coleção de nós. O
provedor de serviço é conhecido do slice authority, pois
este foi registrado como um usuário PlanetLab.
06/04/11
Exemplo: PlanetLab (cont)
● Management authorities: é responsável por nós. Garante que
os nós sob sua responsabilidade executem o software básico do
PlanetLab e se adequem as regras do PlanetLab.
● Provedores de serviço acreditam que os nós conhecidos de
management authorities irão se portar adequadamente.
06/04/11
Exemplo: PlanetLab (cont)
● Relações:
1) Um proprietário de nó coloca seu nó sob o regime
de um management authority, possivelmente
restringindo o uso quando aplicável.
2) Um management authority oferece o software
necessário para adicionar um nó ao PlanetLab.
3) Um provedor de serviço se registra com um
management authority. Oferecendo nós que se
comportem conforme o esperado.
4) Um provedor de serviço contata um slice authority
para criar slices em uma coleção de nós.
06/04/11
Exemplo: PlanetLab (cont)
● Relações:
(5) O slice authority precisa autenticar o
provedor de serviço.
(6) Um proprietário de nó oferece um
serviço de criação de slices. Ele
essencialmente delega gerenciamento de
recurso ao slice authority.
(7) Um management authority delega a
criação de slices a um slice authority.
06/04/11
Exemplo: PlanetLab (cont)
● Problemas:
1) Nós pertencem a diferentes organizações. Cada
organização deve estar apta a especificar quem pode
executar aplicações em seus nós e restringir uso de
recurso de maneira apropriada.
2) Existem várias ferramentas de monitoramento
disponíveis, mas elas assumem uma combinação de
hardware e software muito específicas. Além disso, são
desenvolvidas para uso em uma única organização.
3) Programas de diferentes slices mas executando no
mesmo nó não devem interferir entre si. Este problema é
similar à independência de processos em sistemas
operacionais.
06/04/11
Migração de Código
● Lida com a movimentação de programas entre
máquinas, com a intenção de ter aqueles
programas executados em um alvo.
● Em alguns casos, como em migração de
processo, o status de execução de um
programa, sinais pendentes, e outras partes
do ambiente também precisam ser movidos.
● Como fazer em sistemas heterogêneos?
06/04/11
Migração de Código (cont)
● Por que migrar código?
● Balanceamento de carga – deslocar processos de
ambiente sobrecarregados para ambientes com
menor carga.
● Ex 1. sistema cliente-servidor no qual o sistema
gerencia uma grande base de dados. Se um cliente
precisa realizar muitas operações no BD,
envolvendo grandes quantidades de dados, seria
interessante migrar o cliente e enviar apenas os
resultados da operação via rede.
06/04/11
Migração de Código (cont)
● Ex 2. migração de partes de um servidor para o cliente. Preenchimento
de formulários pelo cliente. Migra-se o formulário e transmite-se apenas
o formulário resultante ao servidor.
● Ex 3. agentes móveis.
● Ex 4. configuração dinâmica de clientes. Necessidade por interfaces
padronizadas.
06/04/11
Migração de Código (cont)
● Definição de processo segundo Fugetta et al.
(1998):
● Segmento de código: parte que contém o
conjunto de instruções que compõe o programa
que está sendo executado.
● Segmento de recurso: contém referências a
recursos externos necessários ao processo (ex.
Arquivos, dispositivos etc).
● Segmento de execução: usado para
armazenar o estado de execução corrente de
um processo, consistindo de dados privados,
pilha e contador de programa.
06/04/11
Migração de Código (cont)
● Modelos para migração de código
● O mínimo para migração de código é oferecer
mobilidade fraca → transferência do
segmento de código juntamente com dados
de inicialização.
– Um programa é iniciado a partir de uma
de várias posições de início pré-
definidas.
– Requer apenas que a máquina alvo
possa executar o código migrado.
– ex. Java applets.
06/04/11
Migração de Código (cont)
● Modelos para migração de código
● Mobilidade forte →segmento de execução
também pode ser transferido.
– Um processo pode ser parado,
subsequentemente movido para outra
máquina e então continuar sua execução
onde parou.
– Mais geral, porém mais complexo de
implementar do que mobilidade fraca.
06/04/11
Migração de Código (cont)
● Modelos para migração de código
● Iniciado por emissor → iniciado na máquina onde
o código reside ou está sendo executado no
momento. ex. Envio de programas a um servidor de
computação, programa de busca pela Internet
direcionado a uma base de dados etc. Exige que o
emissor tenha sido previamente cadastrado –
questões de segurança.
● Iniciado por receptor → iniciativa tomada pela
máquina alvo. ex. Java applets. Pode ser feito
anonimamente. Mais simples de implementar.
06/04/11
Migração de Código (cont)
● Modelos para migração de código
● ex. cloning remoto. Em contraste com
migração de processo, o processo de cloning
produz uma cópia exata do processo original,
porém agora executando em uma máquina
diferente.
● Processo clonado é executado em paralelo ao processo
original.
● Em sistemas Unix, isso é alcançado fazendo o fork de um
processo filho e deixar que este execute em paralelo ao
processo original, agora executando em uma máquina
remota.
06/04/11
Migração de Código (cont)
● ex. cloning remoto.
● Vantagem: o modelo se assemelha àquele que já é
usado em muitas aplicações. A diferença é que o
processo clonado é executado em uma máquina
diferente.
● Maneira simples de alcançar transparência de
distribuição.
06/04/11
Migração de Código (cont)
06/04/11
Migração de Código (cont)
● Modelos para migração de código
● Até agora consideramos apenas o
segmento de código e execução. O
segmento de recurso requer atenção
especial.
– ex. suponha que um processo
mantenha referência a uma porta TCP,
por meio da qual estava em
comunicação com outros processos
remotos → mantido no segmento de
recurso.
06/04/11
Migração de Código (cont)
● Modelos para migração de código
● Tipos de vinculações de recursos
(resource bindings)
– Referência a recurso por um identificador.
Referência forte. ex. URL, IP e porta.
– Referência ao valor do recurso. Fraco. ex.
Bibliotecas de programação. Sempre disponíveis
localmente.
– Referência a um recurso de um dado tipo.
Mais fraco. ex. Referência a recursos locais
(monitores, impressoras etc)
06/04/11
Migração de Código (cont)
● Modelos para migração de código
● Pode-se mudar a referência a recursos, porém, não
se pode mudar o tipo de vinculação processo-a-
recurso.
● Depende fortemente da possibilidade de mover o
recurso à máquina alvo.
● Complexidade varia de acordo com a relação do
recurso ao hardware. Recursos não “atachados” (ex.
Arquivos de dados associados ao programa) ou
recursos atachados (ex. Bases de dados locais, Web
sites completos). Recursos fixados estão
intimamente ligados ao hardware (ex. Dispositivos
locais).
06/04/11
Migração de Código (cont)
06/04/11
Migração de Código (cont)
● Migração em sistemas heterogêneos.
● Características heterogêneas de hardware e
software.
● Semelhante aos problemas de portabilidade.
● Problema atacado por meio de linguagens
interpretadas (ex. Java).
● Tentativas atuais pela redução de dependência de
linguagens de programação → tentativas de
migração de ambientes computacionais inteiros.
– Permite continuidade de operação caso uma máquina
precise ser desligada → congelar um ambiente, substituir
um nó, migrar o código e restaurar o ambiente.
06/04/11
Migração de Código (cont)
● Migração em sistemas heterogêneos.
● Migração de máquinas virtuais.
● Como migrar memória?
1)Enviar páginas de memória à nova máquina
e reenviar aquelas que são modificadas
durante o processo de migração.
2)Parar a máquina virtual corrente; migrar
memória e iniciar a nova máquina virtual.
3)Deixar a nova máquina virtual recuperar as
novas páginas à medida que for necessário.
Cópia sob demanda.
06/04/11