Você está na página 1de 37

Sistemas Distribuídos

Processos
Revisão de Processos e Threads

➔ O que é um processo?
◆ Um programa em execução.
◆ Um programa pode conter vários processos.
◆ Guarda uma lista de instruções a serem executadas.
◆ Cada processo possui um conjunto de metadados (contexto):
● Registadores
● Instruções
● Ponteiros
● Lista de recursos...
➔ O que é uma thread?
◆ Mini processo (mais específico).
◆ Tem o seu próprio contexto.
◆ Criado dentro do espaço do processo;
Analógia de Processos e Threads

Não entendeu o que são processos e threads? Vamos observar a seguinte analogia entre um
processo e uma pizzaria. Qual é o papel de uma pizzaria? Vender pizzas deliciosas, não é verdade? É
possível montar uma pizzaria sozinho? É óbvio que não! É necessário uma pessoa para preparar as
pizzas, uma pessoa para atender os clientes e anotar os pedidos, uma pessoa para entregar as pizzas e
assim por diante.
Então vamos pensar um pouco: temos um grupo de pessoas onde cada pessoa executa uma tarefa
específica para que todo o processo, desde do pedido até a entrega, funcione de maneira correta. Dessa
forma um processo está para a Pizzaria assim como as threads estão para os funcionários, uma thread
executa uma tarefa específica que faz parte do todo que é o processo. Threads são importantes para
todo sistema independente de linguagem ou plataforma.
contexto

Contexto ?

● É um conjunto de valores usados para execução de uma série de instruções.


○ pilha de ponteiros
○ registrador de endereços
○ contador de programas
● Sempre que o tempo de um processo/thread acaba sem que este termine
sua tarefa é necessário guardar seu contexto.
● Quando um novo processo/thread acessa a CPU o seu contexto deve ser
restaurado.
Processo vs. Threads

● Transparência de concorrência entre processos.


○ Criar um novo processo gera um alto custo.
○ Alocar espaço na memória (isolamento).
○ Alocar recursos de hardware.
● Transparência de concorrência pode gerar degradação de performance.
● Chavear processos é igualmente caro.
● Threads não precisam da transparência de concorrência.
○ Não existe esforço do SO em ocultar a disputa por recursos.
● O contexto de uma thread é mais simples do que de um processo.
Troca de contexto

● Threads compartilham o mesmo espaço de endereçamento.


○ Podem trocar de contexto sem a interferência do SO;
● A troca de processos é mais custosa ao SO já que envolvem chamadas de
sistema.
● Criar e destruir threads é bem mais barato do que processos.
Threads em Sistemas não distribuídos

● Criar várias threads para realizar tarefas independentes;


○ Ex: processador de texto
■ thread cuidar da entrada de dados
■ thread para realizar a verificação ortográfica...
● Vantagens
○ ganho de desempenho;
○ processamento paralelo;
Implementação de threads

1. Modo usuário: biblioteca de operações sobre threads em modo usuário;

2. Modo kernel: fazer com que o núcleo fique ciente das threads e as escalone;
Solução em modo usuário

Vantagens

● Criar e encerrar threads é mais barato;


● Mudança de contexto é mais simples;

Desvantagem

● Uma chamada de sistema bloqueadora irá bloquear todo o processo;


○ Isso inviabiliza seu uso em SDs? Por que?
Solução em modo kernel

● Chamadas com bloqueio não serão uma problema;


○ O kernel escalona outras threads disponíveis dentro de um mesmo processo.
● O problema é a baixa eficiência pois todas as operações resultaram em uma
chamada de sistema.
○ operações de criar, encerrar e mudar de contexto;

Qual conclusão podemos chegar?

● A solução é uma combinação entre as duas soluções;


● Conhecida como processos leves
● LWP Lightweight Processes
Processos

● Executa em um único contexto de um processo;


● Oferece um pacote de threads em nível de usuário;
○ operações como: criar, encerrar threads, trocar de contexto..
● Todas as operações são em nível de usuário;
● Principal vantagem é que as chamadas com bloqueio não bloqueiam todo o
processo, apenas a thread envolvida;
Processo Leves LWP
Threads em sistemas distribuídos

● O uso de Threads permitem que uma chamada com bloqueio não bloqueie
todo o processo envolvido.
● Com isso temos a possibilidade de gerir múltiplas conexões.

Clientes MultiThreads

● Ocultar latência
● Exemplo: navegador web monta páginas enquanto os dados das páginas
ainda estão sendo carregados.
● Exemplo: busca por réplicas. Pode criar várias threads de busca em
servidores diferentes;

Servidor MultiThreads?

● Processamento paralelo e sobreposição de tarefas;


● Exemplo: pool de threads
Cliente

Interface de usuários em rede

● Protocolos depende da aplicação (a)


● Acesso direto por interface (b)
Exemplo tradicional X Windows
Transparência de distribuição do lado Cliente

● O software cliente compreende componentes para conseguir transparência


de distribuição.
● O ideal seria que um cliente não ficasse ciente de que está se comunicando
com processos remotos.
● Transparência de acesso: é obtida através do client stub que apresenta
uma interface de funcionalidades remotas.
● Transparência de localização: é obtido através de um sistema de
nomeação.
● Transparência de replicação: é utilizado o repasse de requisição.
● Transparência de falha: implementado através do middleware cliente. Pode
usar cache local.
● Transparência de concorrência: implementada do lado do servidor, por
meio de servidores intermediários.
Servidores

● Um servidor é um processo que implementa um serviço específico em nome


de um conjunto de clientes.
● Espera a requisição do cliente na seqüência, assegura que ela seja atendida.
● Depois espera a próxima requisição…

Quais as questões envolvidas sobre servidores em SD?

● Organização
● Contato
● Interrupção
● Estado
Organização de servidores

● Interativo: é o próprio servidor que manipula a requisição e, se necessário,


retornará uma resposta ao cliente requisitante.
● Concorrente: não manipula a requisição, passa para um thread separado,
após o que imediatamente espera pela próxima requisição.
○ Exemplo: Servidores Multithreads
Contato

Como o cliente contacta o servidor?


Interrupção

Considere um usuário que decidiu transferir um enorme arquivo para um servidor


FTP. De repente, entretanto, ao perceber que é o arquivo errado, ele quer
interromper o servidor para cancelar a continuação da transmissão de dados.

1. Interrupção da aplicação cliente.


2. Separar fluxo de dados do fluxo de controle;
a. O servidor ouve uma porta de controle separada para a qual o cliente envia dados fora da
banda, enquanto, ao mesmo tempo, ouve (com menor prioridade) a porta pela qual passam
os dados normais.
Estado

● Sem Estado
○ não mantém informações sobre o estado de seus clientes e pode mudar seu próprio
estado sem ter de informar a nenhum cliente;
○ Um servidor Web, por exemplo, é sem estado. Ele se limita a responder a requisições HTTP
que entram, que podem ser para transferir um arquivo para o servidor ou, com mais
freqüência, para buscar um arquivo. Após a requisição ser processada, o servidor Web
esquece o cliente completamente.
○ Alguns servidores até armazenam dados do cliente, porém se houver a perda, isso não
impacta na aplicação
○ Mais fácil de se recuperar de falhas
● Estado flexível
○ Armazenam dados do cliente por um tempo limitado.
● Com estado
○ Mantém informações persistentes sobre seus clientes.
○ Servidor de arquivos
○ Geralmente armazena uma tabela de dados do cliente;
○ Ao falhar é necessário recuperar o estado imediato antes da falha.
Migração de código

Por que migrar código?

● Ganho de desempenho.
● Balanceamento de carga entre servidores e aplicação.
● Antes todo o processo era enviado pela rede em tempo de execução;
○ muito caro!
● Exemplo: o sistema cliente–servidor no qual o servidor gerencia um enorme
banco de dados. Se uma aplicação cliente precisar realizar muitas operações
de banco de dados que envolvam grandes quantidades de dados, talvez seja
melhor despachar parte da aplicação cliente para o servidor e enviar somente
os resultados pela rede.
● A ideia é processar dados perto de onde esses dados residem.
● Migrar parte da aplicação;
● Configuração dinâmica e flexibilidade;
Migração de código
Migração de código

Migração de código trata da movimentação de programas entre máquinas com a


intenção de executá-los na máquina-alvo.

Todo processo é composto por:

O segmento de código é a parte que contém o conjunto de instruções que


compõem o programa que está em execução.

O segmento de recursos contém referências a recursos externos de que o


processo necessita, tal como arquivos, impressoras,dispositivos, outros
processos e assim por diante.

O segmento de execução é usado para armazenar o estado de execução de


um processo no momento em questão, que consiste em dados privados, pilha e,
é claro, o contador de programa.
Modelos de migração

● Mobilidade fraca
● Mobilidade forte
Mobilidade fraca

● Apenas o segmento de código é transferível.


● É necessário que a máquina alvo tenha suporte a execução do código.
● Código portável.
● Exemplo: applets Java
● É migração mais simples possível.
● Tipos
○ Processo alvo
○ em processos separados
● Processo alvo o código é executado dentro do espaço de um processo
existente.
● Processo separados o código é executado dentro de um novo processo.
Mobilidade forte

● O segmento de execução também é transferido.


● Também conhecida por migração de processo.
● Um processo em execução pode ser parado e, na seqüência, movido para
uma outra máquina e então retomar a execução no ponto em que ele a
deixou.
● Mais difícil de ser implementada.
● Tipos:
○ migração de processo
○ clonagem de processo
● Clonagem de processo é utilizada para criar cópias do processo pai e
enviá-las pela rede.
○ Muitos sistemas dão suporte a essa estratégia.
Migração por remetente

● Migração realizada do cliente para o servidor.


● A migração é iniciada na máquina em que o código está em execução no
momento em questão.
● Normalmente é executada para transferir programas para um servidor de
computação
● Requer mais cuidados pois o servidor deve proteger seus recursos;
● Requer autenticação do cliente.
Migração por destinatário

● Migração feita do servidor para o cliente.


● Mais simples.
● Requer menos cuidados com a segurança.
● Exemplo: applets Java.
Migração de código
Migração de recursos

● Segmento mais complicado na migração.


● Às vezes não é possível garantir que um recurso vai estar disponível.
● Tipos de vinculação:
○ processo-recurso
○ recurso-máquina
● Processo-recurso
○ Por identificador, exemplo: URL.
○ Por valor: biblioteca para execução (dependências).
○ Por tipo: o processo especifica um tipo de recurso,exe: uma impressora, um monitor.
● Recurso-máquina
○ Não-ligados.
○ Recursos amarrados.
○ Fixos.
Migração em sistemas Heterogêneos

● Até aqui, ficou subentendido que o código migrado pode ser executado com
facilidade da máquina-alvo. Essa premissa vale quando estamos tratando de
sistemas homogêneos.
● Sistemas distribuídos são construídos sobre um conjunto heterogêneo de
plataformas.
● É um problema similar ao da portabilidade.
● Pascal em 1970
○ Gerar um código intermediário independente de máquina para uma máquina virtual abstrata.
● Linguagens de script.
● Linguagens de alta portabilidade como Java.
● Usar a migração em sistemas virtualizados.
FIM