Processos
Roteiro
● Processos ● Threads
● Virtualização
O que é um processo?!
Processo
● Processo tem um problema: quando ocorre um
bloqueio nele, todo o processo parará de funcionar;
● Ex. Você só pode fazer outra coisa no sistemas
depois que terminar de imprimir todos os arquivos;
● O processo só volta ser liberado quando terminar
o bloqueio;
Thread
● É o processo ser divido em diversas tarefas,
cada
● Possibilitar que as atividades de um processo
possam ser executadas de forma separada, sem que uma afete a outra;
Mas o que isso tem haver com Sistemas Distribuído?!
TUDO! As threads podem ser usadas em sistemas distribuído para otimizar o sistemas,
Thread
Sistemas Distribuído (Cliente)
● Sistemas distribuídos que operam em redes de longa distância →
escondem longos tempos de propagação de mensagens entre processos
● A maneira de ocultar latências de comunicação é iniciar a
comunicação e imediatamente prosseguir com outra atividade
● A vantagem disso é que o usuário não precisa esperar por todos os
arquivos para fazer outra atividade
● Exemplo:
● Os navegadores (da Internet) exibem a pagina mesmo que não tenham
Thread
Thread
Thread
Sistemas Distribuído (Servidor)
● Além da performance, através de Thread, é
possível elaborar um paralelismo;
● De forma fácil e simplificado;
● Ainda mais quando computadores possui
multiprocessadores;
Thread
Sistemas Distribuído (Servidor)
Esperar Requisição Receber Requisição
Tratar Requisição Processar Responder
● Servidor sem Thread
● Só irá atender uma requisição
por vez;
● Pode ocorrer na etapa
“Processar” ficar presa por esperar pela liberação de um recurso (ex. Leitura de disco);
● Assim a CPU fica ociosa, sem
trabalhar, até quando o processo for liberado;
Thread
Sistemas Distribuído (Servidor)
● Servidor com Thread
● Ao identificar que estabeleceram
conexão, o servidor “cria” uma
Thread para tratar a requisição e já volta ao estado anterior;
● Assim, cada requisição não irá
influência na próxima;
● Caso ocorra um erro ou bloqueio de
uma das threads, não impedirá que as demais trabalhem; Esperar Requisição Receber Requisição Tratar Requisição Processar Responder Criar Thread ...
Thread
Sistemas Distribuído (Servidor)
Esperar Requisição Receber Requisição
Tratar Requisição Processar Responder
Servidor sem uso de Thread
Esperar Requisição Receber Requisição Tratar Requisição Processar Responder Criar Thread
Servidor com uso de Thread
Mas há outra forma de fazer paralelismo sem usar Thread?!
Existem sim. Mas você irá elaborar um sistema muito mais complexo. Ou seja, esqueça e use Thread.
Virtualização
● Processos e Threads podem ser vistos como um
modo de fazer diversas tarefas ao mesmo tempo
● Fingindo que existem mais de uma CPU no
mesmo computador
● Essa ideia de fingir pode ser estendida para outros
recursos do computador, o que resulta na
Virtualização
● Estende ou substitui uma interface existente de modo a
imitar o comportamento de um outro sistema;
● Essência da virtualização é imitar o comportamento das
interfaces (instruções de máquina, chamadas de sistema)
● Muito utilizado na década de 70, nos mainframes da IBM,
onde executava aplicativos e S.O. de vários fornecedores (através das máquinas virtuais)
Virtualização
● Existem vários modos pelos quais a
virtualização pode ser realizada na prática
● Existem quatro tipos diferentes de interfaces
em quatro níveis diferentes:
● Instruções Privilegiadas; ● Instruções Gerais;
● Chamadas de Sistemas; ● Funções de Biblioteca.
Virtualização
● A virtualização pode ocorrer de dois modos:
● Primeiro, fornecer um conjunto abstrato de
instruções para executar uma aplicação;
● Segundo, uma camada que protege totalmente o
hardware original, mas que oferece um conjunto de instruções completo, dele ou de outro, hardware;
Virtualização
Primeiro Modo
● Instruções podem ser interpretadas ou emuladas;
● Java e PHP são exemplos de cenário de interpretação de
instruções;
● Exemplo de emular instruções (ou cenário) quando
aplicativos do Windows são executados no Linux (através do Wine);
● Essas emulação é denominada Máquina Virtual de
Virtualização
Primeiro Modo
Virtualização
Segundo Modo
● Quando oferecemos uma interface completa do
hardware, possibilitamos que diversos
Sistemas operacionais (e aplicações) executem nessa plataforma
● Em geral, essa camada é denominada Monitor
de Máquina Virtual
Virtualização
Segundo Modo
● As vantagens são:
● Permite o isolamento completo do ambiente;
● Caso haja uma falha de segurança, não afeta o recurso de uma
máquina toda;
● Maior portabilidade das aplicações;
● Desacoplamento entre hardware e software;
● Permitindo mover um ambiente completo de uma máquina a
Virtualização
Segundo Modo
Cliente
● A principal função da versão cliente de um
sistema distribuído é disponibilizar uma maneira de interagir com servidor remoto;
● Existem duas maneiras:
● Utilizar protocolos específicos de comunicação (ex.
Sincronização de agenda ou relógio);
● Cliente ser um terminal burro, onde todo o
gerenciamento do sistema é feito no servidor remoto;
Cliente
X Window
● Exemplo de Interface em Rede: X Window
● É uma das mais antigas e utilizadas ainda hoje
● Possui dois componentes:
● Núcleo X: oferece uma interface de nível relativamente baixo para controlar a
tela e também para capturar eventos do teclado e do mouse
● Xlib: Interface disponibilizada para as aplicações é definida pela biblioteca Xlib
● A comunicação entre esses dois componentes é feita através do
Cliente
X Window
Cliente
X Window
● Núcleo X e as aplicações X não precisam necessariamente
residir na mesma máquina
● O protocolo X é um protocolo de comunicação de camada
de aplicação pelo qual uma instância de Xlib pode trocar dados e eventos com o núcleo X
● Ex.: Xlib pode enviar requisições ao núcleo X para criar ou
encerrar uma janela, estabelecer cores e definir o tipo de
cursor. O núcleo X reagirá a eventos locais como entrada de teclado e mouse devolvendo pacotes de eventos a Xlib
Cliente
X Window
● Núcleo X recebe requisições para manipular o
visor e que recebe essas requisições de aplicações
● O Núcleo X age como um servidor, enquanto
as aplicações desempenham o papel de clientes
Cliente
Transparência
● Além de fornece um modo de comunicação com o
servidor, a versão cliente da aplicação pode tratar de algumas transparências de distribuição
● Essas transparências servem para o cliente não fique
ciente que está trabalhando com processos remotos
● Existem diversos tipos de transparências, cada uma
Cliente
Transparência
● Transparência de:
● Acesso: esconde se o recurso é local ou remoto;
● Localização: o cliente não precisa saber onde está o servidor
para poder se comunicar com ele;
● Replica: requisita a todas as replicas e escolhe apenas uma
requisição (ex. a que chegar primeiro);
● Falha: quando houver uma falha na comunicação com algum
servidor, a aplicação poderá tentar restabelecer a conexão com outros servidores;
Servidor
● Um servidor é um processo que implementa
um serviço especifico;
● Cada servidor é organizado do mesmo modo:
● Espera por uma requisição ● Processa-a
Servidor
● Na elaboração de um servidor, temos que
responder as seguintes perguntas:
● Como o cliente irá acessar o servidor?
● Como interromper a comunicação com o servidor?
Servidor
1° como os cliente irão acessar o servidor?
1° como os cliente irão acessar o servidor?
1° como os cliente irão acessar o servidor?
● Os servidores devem escolher um terminal (porta) do
computador para receber as requisições;
● Algumas portas são conhecidas (tais como o HTTP – 80 e o
FTP – 21);
● Existem duas maneiras de manipular portas:
● Utilizar um daemon, ou
Servidor
1° como os cliente irão acessar o servidor?
● O servidor cadastra a sua porta no daemon;
● O Cliente, antes de acessar o servidor, pergunta qual porta está
sendo disponibilizado;
Servidor
1° como os cliente irão acessar o servidor?
● Para evitar que tenha processos ociosos esperando por uma requisição;
● O supervisor monitora cada porta associada com um serviço específico;
● Ao receber um requisição em uma dessas portas, executa outro programa para continuar
Servidor
2° como interromper a conexão com o servidor?
● Abordagem mais simples: usuário finaliza o
processo da aplicação cliente → servidor encerrará a conexão antiga
● Abordagem mais completa: dados “urgentes”
(fora da banda)
● Pacotes TCP possuem no header o campo URG. ● Servidor ao receber um pacote com o campo URG
Servidor
3° Servidor deve guardar o estado dos clientes?
● Existem três tipos de servidor:
● Sem estado
● Estado Flexível ● Com estado
Servidor
3° Servidor deve guardar o estado dos clientes?
● Sem Estado
● Não mantém informações sobre os estados dos clientes
● Pode mudar seu próprio estado sem ter de informar a nenhum cliente ● As requisições atuais não influenciaram as próximas requisições
● Vantagem: o serviço pode ser reiniciado e não afeta as requisições
dos clientes
Servidor
3° Servidor deve guardar o estado dos clientes?
● Estado Flexível
● Armazena temporariamente o estado do Cliente
● Após o tempo limitado, o servidor descarta estas
informações
● As requisições atuais não influenciaram as próximas
requisições
Servidor
3° Servidor deve guardar o estado dos clientes?
● Com Estado
● O servidor irá armazenar o estado do Cliente;
● As informações sobre precisam ser explicitamente removidos pelo
servidor;
● Problema: além de ter que armazenar o estado de cada cliente, caso o
servidor caia e volte a funcionar, pode perder todos os estados de todos os clientes;
● ex. Servidor de arquivos que permite a um cliente manter cópia local de
um arquivo. Servidor mantem uma tabela, com entradas (cliente, arquivo). Permite monitorar as permissões sobre um arquivo, etc.
Servidor
Cluster
● Uma forma de tornar o serviço mais disponível é
agrupar computadores e forma um Cluster
● Cluster é: Conjunto de máquinas conectadas por
uma rede, no qual cada máquina executa um ou mais servidores. Estas máquinas estão
conectadas por uma rede local, com alta largura de banda e baixa latência.
Servidor
Servidor
Cluster
● Forma o ponto de entrada para o cluster de servidores, oferecendo um único endereço de rede.
● Considerando TCP, o comutador aceita requisições e as transfere a um dos servidores
● Deve elaborar algum esquema de balanceamento de
carga: identificando o melhor servidor a tratar a
Servidor
Migração de Código
● Migração de código ocorre, tradicionalmente, na
forma de migração de processo;
● Todo o processo migra de uma máquina à outra;
● Isso é uma tarefa custosa e complicada;
● O motivo para fazer isso é sempre a otimização
Migração de Código
● Ex. de um uso:
● Em um cluster, para melhorar o
balanceamento de carga, pode migrar
programas para máquinas ociosas, liberando as demais;
● Um cliente, antes de interagir com o servidor,
Migração de Código
Servidor Cliente
1. conectar com o servidor
2. pegar código!
Problema: a segurança na lado do cliente! Tem como garantir que esse código migrado não está executando outra coisa? Ex.
A migração de código só serve para migrar um processo inteiro?
Não, migração de código é algo muito mais amplo: podemos também migrar status de um programa ou outras partes do ambiente.
Migração de Código
● Processo consiste em três segmentos:
● Segmento de código: contém o conjunto de instruções
que compõem o programa que está em execução
● Segmento de recursos: contém referências a recursos
externos (arquivos, impressoras)
● Segmento de execução: armazenar o estado em
execução de um processo no momento da migração (dados privados, pilha,contador de programa)
Migração de Código
● Mobilidade pode ser de dois tipos:
● Mobilidade Fraca: possível transferir somente o
segmento de código, junto com alguns dados de inicialização. Requer somente que a máquina-alvo possa executar o código (portabilidade)
● Mobilidade Forte: segmento de execução também
pode ser transferido. O processo em execução pode ser parado e movido para uma outra máquina e
Migração de Código
● Em relação do ponto de início da migração:
● Iniciada pelo remetente: a migração é iniciada na
máquina em que o código está em execução
– Ex.: enviar programa de busca pela Internet a um
servidor de banco de dados para realização de pesquisas;
● Iniciada pelo destinatário: Iniciativa da migração
de código é tomada pela máquina-alvo (cliente);
Migração de Código
Recurso
● Três tipos de vinculações processo-recurso: ● Vinculação por identificador
● Processo requer exatamente o recurso referenciado (URL de um site)
● Vinculação por valor
● É necessário somente um valor
● Se outro recurso fornece o mesmo valor, execução não é afetada
(bibliotecas padronizadas)
● Vinculação por tipo
● Processo requer um recurso de um tipo específico (monitores,
Migração de Código
Recurso
● Três tipos de vinculações recurso-máquina:
● Recursos não ligados: recursos podem ser movidos com
facilidade entre maquinas diferentes(arquivos de dados)
● Recursos amarrados: recursos podem ser movidos ou
copiados, mas só a custo relativamente alto ( banco de dados locais)
● Recurso fixos: recursos estão intimamente vinculados a
uma máquina ou ambiente especifico e não podem ser movidos (porta)
Migração de Código
Recurso
● Referência global
● Caso vários processos referenciem um
recurso, uma alternativa é estabelecer uma referência global, que atravesse as fronteiras das máquinas
– URL (baixa complexidade)
– Memória compartilhada entre processos
(referência global significa memória compartilhada)
Migração de Código
● Complexidade está ligada aos tipos de vínculo
processo-recurso e recurso-máquina
● Recursos não ligados: Melhor solução é
copiar ou mover o recurso para o novo destino
● Vinculações por tipo: A solução é vincular
novamente o processo a um recurso do mesmo tipo disponível no local
Migração de Código
heterogêneos
● Na realidade, sistemas distribuído é construído em
ambientes heterogêneos (S.O. E arquitetura de máquina);
● A migração de código neste cenário requer que
cada plataforma seja suportada pelo sistemas;
● Assegurando que cada segmento de código pode
ser executado e representado em cada plataforma;
Migração de Código
heterogêneos
● Existem duas alternativas:
● Utilizar linguagens de programação alta
portabilidade (ex. Baseadas em interpretadores – PHP – ou “compiladas” - Java );
– conseguimos executar segmento de processo em
máquina diferentes
● Usar máquinas virtuais, virtualizando recursos da
máquina, possibilitando uniformiza estes recursos;
– permite migra todo um sistema operacional de