Processos Contedo Contextualizao Sistema Operacional Processos Ambientes de
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 �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 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
- Slides: 26