Processos capítulo 3
Introdução: Threads Para executar um programa, o sistema operacional cria um determinado números de processos virtuais. O sistema operacional mantém uma tabela de processos que contém os valores dos registradores de CPU, valores de memória, arquivos abertos, privilégios de contas etc. Um processo é um programa em execução. A troca entre processos executando numa CPU é sempre uma tarefa complicada.
Introdução: Threads Thread é muito parecida com um processo, ela pode ser vista como a execução (ou parte) de um programa. Diferentemente de um processo, a thread não foi feita para se obter um alto grau de transparência de concorrência. Thread, geralmente, mantém apenas o mínimo de informações sobre a CPU e que serão compartilhadas por várias outras threads (o contexto da CPU e informações sobre as threads).
Thread em um sistema não distribuído O maior benefício do uso processos multi-threads é que durante uma chamada a único processo, este não irá tomar para si todo o tempo de CPU. Outra vantagem é que o paralelismo se torna mais natural quando se executa em uma máquina multiprocessada (ou seja, todas).
Thread em um sistema não distribuído Isto é usado para permitir a cooperação entre programas. *IPC - Inter Process Communication
Thread Implementação A primeira abordagem é construir uma biblioteca de threads que executa em modo usuário. Vantagens: barato criar/destruir; a troca de contexto entre as threads é mais fácil. Desvantagem: a invocação de uma chamada de bloqueio do sistema bloqueará todas as threads daquele processo.
Thread Implementação A segunda abordagem é ter um núcleo ciente das threads e escalonar elas. O preço é que cada operação da thread, terá de ser realizada por intermédio de uma chamada de sistema.
Thread Implementação Solução alternativa
Thread Implementação Vantagens do uso de LWP: (i) Criar, destruir e sincronizar as threads a nível de usuário é relativamente barato. (ii) Uma chamada de bloqueio do sistema não irá suspender o processo inteiro. (iii) Não existe a necessidade da aplicação conhecer o LWP (iv) LWPs podem facilmente ser utilizados em um ambiente multi-processado. A única desvantagem é quando os LWPs precisam ser criados ou destruídos.
** Threads em sistemas distribuídos
Clientes multi-threads Problema: Estabelecer um alto grau de transparência de distribuição, atrasos na troca de mensagens entre os processos devem ser proibitivos. Solução: O cliente deve poder iniciar a comunicação imediatamente. Solução: É importante que o cliente quebre os processos em multi-threads e recombine o resultado demandado pela aplicação. Exemplo, um web browser que recebe parte de uma página pode usar multi-conexões.
Servidores multi-threads Modelo mais comumente utilizado
Servidores multi-threads Três diferentes formas de se construir um servidor. Threads: É usado um esquema despachante operário Single-Thread: Permite apenas uma thread executando (RPC) Finite-state: Implementa um escalonador de threads para uma aplicação específica.
Virtualização A virtualização de recursos consiste na separação entre se ter uma única CPU e ser capaz de fingir que há mais delas. Existem vários tipos de interfaces do sistema que vão desde o conjunto básico de instruções oferecido por uma CPU até o vasto conjunto de interfaces de programação.
Arquiteturas de máquinas virtuais Em geral sistemas de computadores oferecem quatro tipos diferentes de interfaces em quatro níveis diferentes. A essência da virtualização é imitar o comportamento dessas interfaces.
Arquiteturas de máquinas virtuais Uma abordagem alternativa a virtualização é fornecer um sistema que seja implementado como uma camada que protege o HW original, oferecendo um conjunto de instruções completo do mesmo. (a) VMWare; (b) Xen
Clientes: Interfaces de usuário em rede (a) Para cada serviço remoto, a máquina cliente terá uma contraparte separada que pode contatar o serviço pela rede. Exemplo: Agenda num PDA (b) Fornece acesso direto a serviços remotos oferecendo apenas uma interface de usuário. O cliente é apenas um terminal, são os chamados clientes magros.
Cliente: Exemplo X-Window
Cliente: Software do lado cliente para transparência de distribuição Uma possível abordagem para a transparência de replicação de um objeto remoto, usando uma solução do lado cliente. Geralmente usado em consultas a um BD distribuído.
Servidores: Questões Gerais de Projeto Um servidor é um processo que implementa um serviço específico para uma coleção de clientes Servidor iterativo: ele mesmo manipula as requisições e retorna uma resposta para o cliente requisitante Servidor concorrente: ele passa a requisição para uma thread ou processo separado e espera a próxima requisição. Um servidor multi-thread é um exemplo de servidor concorrente.
Servidores: Questões Gerais de Projeto 3.7 Geralmente a comunicação cliente-servidor é feita por intermédio de uma porta. Porém, existem serviço que não possuem uma porta prédeterminada, logo o cliente precisa identificar tal porta. Algumas alternativas: (a) utilização de um Daemon que sabe quais portas são utilizadas para cada serviço. (b) utilização de um superservidor que instancia um serviço quando requisitado.
Servidores: Questões Gerais de Projeto Outra questão importante é se, e como, um servidor pode ser interrompido. Abordagem mais utilizada, é o cliente sair abruptamente da aplicação. Outra abordagem é permitir uma comunicação fora da banda, ou seja, um canal extra para gerenciar a conexão. Muito utilizada por servidores multimídia.
Servidores: Questões Gerais de Projeto Uma última questão, se o servidor é sem estado ou não Um servidor sem estado não mantém informações sobre o estado de seus clientes e pode mudar de estado sem informar seus clientes. Exemplo, servidores WEB em geral. Um servidor com estado persiste os dados do cliente. Exemplo, um servidor de arquivo que permite a manutenção de arquivo em modo offline.
Cluster de servidores
Cluster de servidores Exemplo de como funciona a camada de comutação. Questão principal a ser considerada: Como escolher o servidor?
Migração de código Migração de código em sistemas distribuídos consiste na migração de processos inteiros que são movidos de uma máquina para outra. Ex1: Sistema cliente servidor em que o servidor gerencia um grande BD. As operações do cliente migram para o servidor e apenas os resultados são enviados. Ex2: Busca de informações na WEB
Razões para a migração de código Principais razões são o desempenho e a localidade. Estratégias para a mobilidade: agentes móveis e movimentação dinâmica (figura)
Modelos para a migração de código A fragmentação de um código para se executar a migração consiste em: (a) segmento de código é a parte que contém o conjunto de instruções; (b) segmento de recursos é a parte que contém referências a recursos externos de que o processo necessita; (c) segmento de execução é usado para armazenar o estado de execução de um processo no momento em questão.
Modelos para a migração de código Tipos de mobilidades: (a) Mobilidade fraca é possível transferir apenas o segmento de código, talvez junto com alguns dados de inicialização. (b) Mobilidade forte o segmento de execução também pode ser transferido. O processo para a sua execução é migrado e continua na outra máquina de onde ele parou. Em ambos os casos a mobilidade pode ser iniciado pelo remetente ou pelo destinatário.
Modelos para a migração de código
Migração e recursos locais Processo para recurso A ligação mais forte é quando um processo se refere a um recurso por seu identificador. O processo requer precisamente o recurso referenciado e nada mais. Exemplo, uma URL que referencia um site web específico. Uma ligação mais fraca é quando apenas o valor de um recurso é necessário. A execução dos processos pode não ser afetada se outro recurso pode fornecer o mesmo valor. Exemplo, C padrão ou bibliotecas Java. A ligação mais fraca de todas é quando um processo indica que ele precisa apenas de um recurso de tipo específico. Exemplo, dispositivos locais.
Migração e recursos locais Recurso para máquina Não ligado é o recuso que pode ser facilmente movido entre diferentes máquinas. Exemplos, eles são tipicamente os arquivos associados apenas com programas que serão migrados Movendo ou copiando um recurso amarrado deve ser possível, mas apenas a um relativo custo. Exemplos, base de dados locais e completos sites web. Recurso Fixo são intimamente ligados a uma máquina específica e não pode ser movido Exemplo, dispositivos locais.
Migração e recursos locais
Migração em sistemas heterogêneos Migração em sistemas heterogêneos não é fácil. Os problemas podem ser aliviados com uma mobilidade fraca. A plataforma alvo recebe o código compilado. Na mobilidade forte o problema é transferir o segmento em execução. Geralmente, é usada a migração da pilha de execução.
Migração em sistemas heterogêneos 3-15 The principle of maintaining a migration stack to support migration of an execution segment in a heterogeneous environment