Processos
Conteúdo
 Contextualização: Sistema Operacional
 Processos
 Ambientes de Execução
 Threads
 Multi-thread X Multi-processos
 Servidores e Clientes multi-thread
 Virtualização em Sistemas Distribuídos
Contextualização: Sistema Operacional
Camadas de Software
Contextualização: Sistema Operacional
 Sistema Operacional
A
função do sistema operacional é fornecer acesso e gerenciar
os recursos físicos (hardware) existentes em uma máquina:
  Processadores
 Memória
 Comunicação
 Storage
Contextualização: Sistema Operacional
Funcionalidades
Operacional:
Básicas
de
um
Sistema
Contextualização: Sistema Operacional
Espera-se, de um Sistema Operacional, as seguintes
características:
Encapsulamento
Ocultar detalhes de sua implementação e prover apenas uma
interface pública para acesso aos recursos.
Proteção
Impedir que haja acesso indevido a recursos
Concorrência
Prover acesso concorrente a recursos de forma transparente.
Contextualização: Sistema Operacional
Para prover concorrência, ou seja, a execução
concorrente de diversos processos, um S.O. deve
garantir que cada um deles tenha um ambiente de
execução independente.
Esse isolamento é necessário para evitar que
processos afetem de modo intencional ou malicioso
o funcionamento uns dos outros, ainda que estejam
em execução na mesma máquina.
Para isso, o S.O. fornece um “processador virtual” a
cada um dos processos de maneira transparente.
Processos: Ambientes de Execução
Mesmo sendo transparente, a concorrência tem um
custo, o qual está associado a criação,
gerenciamento e isolamento dos ambientes de
execução dos processos.
Esse ambiente é composto por:
 Um espaço de endereçamento
 Recursos de comunicação (portas)
 Sincronização de Threads (concorrência)
 Recursos de alto nível (janelas, arquivos, etc.)
Processos: Ambientes de Execução
Cada vez que um processo é escalonado (recebe
acesso ao processador), uma sequencia de passos
deve ser executada (troca de contexto):
 Empacotar o processo em execução
 Transferí-lo para uma área de espera
 Buscar na área de espera o novo processo a executar
 Desempacotar o processo a executar
Parte do projeto de um S.O. é focada na eficiência com
a qual faz a troca de contexto. Um grande número
de processos concorrentes pode, facilmente,
degradar a performance de todo o ambiente
Threads
Nas primeiras versões de S.O. (anos 70 e 80), cada
ambiente de execução suportava apenas um
processo, uma linha de execução.
Nos S.O. de gerações posteriores surgiu o conceito de
Thread (linha de execução ou processos leves), cujo
objetivo é minimizar o custo da troca de contexto.
Cada processo pode ter uma ou mais threads. Assim,
nesses novos S.O., um ambiente de execução pode
ter uma ou mais linhas de execução.
Threads
Multi-threads X Multi-Processos
Processos multi-thread possuem uma ou mais threads
(processos
leves)
criados
à
escolha
do
desenvolvedor.
Por compartilhar o ambiente de execução do processo
que as contem, a criação e destruição de threads é
mais barata e a troca de contexto no momento de
sua execução é consideravelmente menor.
Threads de um mesmo processo são razoavelmente
independentes entre si, mas compartilham o espaço
de endereçamento e tem seu ciclo de vida ligado ao
do processo que as contem.
Multi-threads X Multi-Processos
Aplicativos
multi-thread
apresentam
diversas
vantagens. Uma das mais significativas diz respeito
a chamadas bloqueantes.
Quando um processo emite uma chamada bloqueante
(exemplo: acesso a disco, conexão remota), todo o
seu funcionamento fica suspenso até o retorno
dessa chamada. Porém, se a mesma for feita em
uma thread, apenas esta ficará bloqueada e o
processo (e suas outras threads) poderão continuar
a execução.
Multi-threads X Multi-Processos
Com o conhecimento sobre threads podemos avaliar
os benefícios de uma implementação multi-thread
sobre uma multi-processos:
 Criar uma nova thread em um processo é muito mais barato
que criar um novo processo
 Realizar a troca de contexto entre threads é muito mais
barato que realizá-la entre processos
Multi-threads X Multi-Processos
 O compartilhamento de recursos entre Threads é mais
simples que entre processos. O mesmo espaço de
endereçamento permite a utilização conjunta de variáveis
globais. Processos, por sua vez, tem que utilizar
mecanismos de comunicação.
 Threads são capazes de explorar ambientes com múltiplos
processadores e, assim, aumentar ainda mais o paralelismo
da aplicação.
Multi-threads X Multi-Processos
Porém, nem tudo são vantagens. Alguns cuidados
devem ser tomados em ambientes multi-thread.
 Por compartilharem o mesmo ambiente de execução,
threads podem interferir no funcionamento umas das
outras, o que exige um cuidado maior dos desenvolvedores
para sincronização do seu funcionamento.
Multi-threads X Multi-Processos
A programação com threads (também chamada de
programação concorrente) envolve alguns conceitos
muito importantes:
 Condição de corrida
 Região crítica
 Variáveis de condição
 Semáforos
Tais conceitos são importantes para a correta
implementação de aplicativos multi-thread e sua
adequada sincronização.
Servidores e Clientes Multi-thread
Em Sistemas Distribuídos, podemos aplicar o conceito
Multi-thread tanto do lado cliente quanto do lado
servidor.
Do lado cliente, é possível vislumbrar algumas
vantagens:
 Redução da latência na comunicação, com a abertura de
diversos canais paralelos com o servidor.
 Evitar que chamadas bloqueantes congelem as respostas
ao usuário.
Exemplo: Browser web.
Servidores e Clientes Multi-thread
Porém, é do lado servidor que estão as maiores
vantagens:
 Servidores com múltiplos processadores podem ter seu
paralelismo aumentado.
 Capacidade de atendimento de múltiplos clientes ao
mesmo tempo.
Para essa última vantagem, existem
arquiteturas que podem ser exploradas.
algumas
Servidores e Clientes Multi-thread
 Arquitetura de Pool de Trabalhadores
 Ao ser iniciado o servidor, um pool fixo de threads é criado.
Essas threas podem ser de dois tipos:
Thread Despachante (Dispatcher Thread), responsável
por receber as requisições e alocar uma thread operária
para o atendimento.
Thread Operária (Worker Thread), responsável por
atender a requisição. Podem emitir chamadas
bloqueantes.
Servidores e Clientes Multi-thread
 Arquitetura de Pool de Trabalhadores
Servidores e Clientes Multi-thread
 Arquitetura de Thread por Pedido
 É derivada da arquitetura de pool de trabalhadores, porém
não é criada uma quantidade fixa de threads operárias.
Essas são criadas a medida em que forem sendo
necessárias (a pedido). Uma vez atendido o pedido, a
thread operária é destruída, liberando os recursos
alocados.
 A vantagem óbvia é o melhor gerenciamento de recursos
(evita-se o desperdício de manter alocada uma thread que
não está em funcionamento). Porém é gerada uma
sobrecarga de operação por ocasião da criação e
destruição da thread.
Virtualização em Sistemas Distribuídos
Como já foi dito, durante a execução concorrente, é
criado um “processador virtual” cujo objetivo é
abstrair e tornar transparente, à thread ou processo,
detalhes da troca de contexto.
Nos tempos atuais, esse conceito de virtualização foi
estendido, e passou-se a virtualizar, não só o
processador, como outros recursos e até mesmo o
próprio S.O.
Existem vários modelos de virtualização atualmente:
Virtualização em Sistemas Distribuídos
 Máquina Virtual de Processo
 Oferece um conjunto de funções abstratas que permitem ao
programa
executar
em
ambientes
virtualmente
padronizados (exemplo: JVM).
 Monitor de Máquina Virtual
 Uma camada de software acima do hardware e que o
protege, fornecendo um conjunto de instruções de
hardware disponíveis aos diversos aplicativos em
execução. (exemplo: VMWare).
Virtualização em Sistemas Distribuídos
 Monitor de Máquina Virtual
Virtualização em Sistemas Distribuídos
 Monitor de Máquina Virtual
 Uma das grandes vantagens no uso desse tipo de máquina
virtual é a diminuição da variedade real de máquinas e S.O.
a serem utilizados. Um mesmo hardware/S.O. pode emular
diversos hardwares/S.O. diferentes.
 Além disso, outras vantagens também são facilmente
observadas:
Facilidade de gerenciamento
Menos máquinas a gerenciar
Aumento na portabilidade e flexibilidade
Facilidade na cópia e disponibilização de novos ambientes
Aumento da confiabilidade e segurança
Isolamento total da aplicação e seu ambiente
Download

Apresentação 6