# data[].attributes.attachment_link.title
Middleware - Sistemas Distribuídos - UNIFACS 2016

# data[].attributes.attachment_link.title
Sistema de Informação Distribuído - Informática

# data[].attributes.attachment_link.description
Artigo sobre os Sistemas de Informação Distribuídos, quais as suas características onde são usados, vantagens em relação aos sistemas centralizados, arquitetura, etc.

# data[].attributes.attachment_link.readable_text
Um processo consiste em um ambiente de execução e threads. Um ambiente de execução é formado por um espaço de endereçamento, interfaces de comunicação e outros recursos locais, como os semáforos. Uma thread é uma abstração de atividade executada dentro de um ambiente de execução.

Os processos podem ter múltiplas threads, as quais compartilham o ambiente de execução. Os processos multitarefas nos permitem obter concorrência com um custo relativamente baixo e explorar o paralelismo real disponível nos multiprocessadores. Eles são úteis tanto para clientes como para servidores. As implementações recentes de threads permitem o escalonamento em duas camadas: o núcleo dá acesso a vários processadores, enquanto o código em nível de usuário trata dos detalhes das políticas de escalonamento.

Normalmente, a criação e o gerenciamento de ambientes de execução são operações dispendiosas, mas várias threads podem compartilhar esses ambiente, ou seja, elas podem compartilhar todos os recursos disponíveis dentro deles. Em outras palavras, um ambiente de execução representa um domínio de proteção no qual suas threads são executadas.

As threads podem ser criadas e destruídas dinamicamente, conforme necessário. O objetivo principal em se ter múltiplas threads de execução é maximizar o grau de execução concorrente entre operações, permitindo, assim, a sobreposição da computação com operações de entrada e saída, e possibilitando a execução simultânea de atividades em máquinas do tipo multiprocessadores. Por exemplo, uma thread pode processar a requisição de um cliente, enquanto uma segunda thread, que está atendendo a outra requisição, espera que um acesso ao disco termine.

Tradicionalmente, a criação de um novo processo é uma operação indivisível fornecida pelo sistema operacional. Para um sistema distribuído, o projeto do mecanismo de criação de processos precisa levar em conta a utilização de vários computadores.
Balanceamento de Carga
Em geral, as políticas de alocação de processos variam desde sempre executar os novos processos na estação de trabalho de seus criadores até o balanceamento da carga de processamento entre um conjunto de computadores.

Os sistemas de balanceamento de carga podem ser centralizados, hierárquicos ou descentralizados.

No primeiro caso, existe um único componente gerenciador de carga e, no segundo, existem vários, organizados em uma estrutura em árvore. Os gerenciadores de carga reúnem informações sobre os nós e as utilizam para alocar novos processos nos nós.

Os sistemas de balanceamento de carga que oferecem suporte à migração podem transferir carga a qualquer momento, e não apenas quando um novo processo é criado.

Eles usam um mecanismo chamado migração de processo: a transferência de um processo em execução de um nó para outro.

Embora vários mecanismos de migração de processo tenham sido construídos, eles não são amplamente usados. Isso se deve principalmente ao seu custo computacional e à grande dificuldade de extrair o estado de um processo de dentro do núcleo para movê-lo para outro.
Migração de Código
Mobilidade de código é a capacidade de mudar dinamicamente as ligações entre o código e a localização onde eles são executados. Essa migração ocorre, tradicionalmente, na forma de migração de processo.

Todo o processo migra de uma máquina à outra, isso é uma tarefa custosa e complicada e o motivo para fazer isso é sempre a otimização (desempenho).

Em um cluster, para melhorar o balanceamento de carga, pode-se migrar programas para máquinas ociosas, liberando as demais.

Podemos destacar três segmentos de processos:

● Segmento de código que contém o conjunto de instruções que compõem o programa que está em execução;

● Segmento de recursos que contém referências a recursos externos (arquivos, impressoras);

● Segmento de execução que armazena o estado em execução de um processo no momento da migração (dados privados, pilha,contador de programa);

Enquanto a 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 retomar a execução no ponto original;

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);

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, impressoras);

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);

Caso vários processos referenciem um recurso, uma alternativa é estabelecer uma referência global (referência global significa memória compartilhada). que atravesse as fronteiras das máquinas URL (baixa complexidade).

Complexidade está ligada aos tipos de vínculo processo-recurso e recurso-máquina.

Um sistemas distribuído é construído em ambientes heterogêneos e a migração de código neste cenário requer que cada plataforma seja suportada pelo sistemas assegurando que cada segmento de código possa ser executado e representado em cada plataforma.
Referências:
COULOURIS, George; DOLLIMORE, Jean; KINDBERG, Tim; GORDON, Blair. " Sistemas Distribuídos: Conceitos e Projeto ". 5 ed., Bookman, 2013.

# data[].attributes.attachment_link.title
Migração de Processos em Sistemas Distribuídos

# data[].attributes.attachment_link.description
Um processo consiste em um ambiente de execução e threads. Um ambiente de execução é formado por um espaço de endereçamento, interfaces de comunicação e outros recursos locais, como os semáforos. Uma thread é uma abstração de atividade executada dentro de um ambiente de execução.

# data[].attributes.attachment_link.readable_text
Um sistema de informação centralizado ( SIC) é aquele executado em uma coleção de máquinas, que se utiliza de seus recursos individuais e possui uma máquina servidora que centraliza todas as informações. São sistemas que possuem pouco poder de processamento sequencial (tempo compartilhado) e necessitam de um mainframe para que possa funcionar com qualidade. Porém, por maior que seja a velocidade de processamento de um mainframe, ele jamais conseguirá alcançar o poder de processamento de vários microcomputadores interligados, como se fosse um único sistema.

Existem três modelos de sistemas centralizados: Monousuário, Cliente-servidor (duas camadas) e Multicamadas. Como características do cliente servidor, geralmente, são utilizadas as máquinas clientes com pouca capacidade e um servidor robusto. Uma outra forma de especificar essa característica é utilizando a expressão "servidor gordo e cliente magro". As regras de negócio ficam armazenadas no próprio banco de dados por "views" e "storage procedures". No cliente, fica somente a interação do sistema com o usuário, as chamadas interfaces, como as telas e os relatórios. Já o sistema Multicamadas é uma melhoria do cliente servidor (duas camadas), em que são separadas as regras de negócio, a interface e o banco de dados.

A segurança é um ponto fundamental em qualquer sistema de informação e uma das vantagens dos sistemas centralizados é que eles possuem um único host que fornece alto grau de segurança, concorrência e controle de cópias de segurança e recuperação. Ao contrário dos sistemas distribuídos que é mais fácil acessar os dados, o que dificulta garantir a segurança dos dados existentes e a privacidade dos dados secretos.

Além disto, em um sistema centralizado não há necessidade de um diretório distribuído, já que todos os dados estão localizados em um único host. Porém todos os acessos aos dados realizados por outro que não seja o host, onde o banco de dados está, gera alto custo de comunicação. O host em que o banco de dados está localizado pode ainda criar um "gargalo" (diz-se que um elemento é o gargalo quando limita o desempenho do sistema), dependendo da quantidade de acessos simultâneos. Podem acontecer também problemas de disponibilidade dos dados, se o host, onde os dados estão armazenados, sair do ar.

Leia também:

Referências Bibliográficas:
STAIR, R. M. Princípios de sistemas de informação. 2. Ed. Rio de Janeiro: LTC, 1998
MEIRELES, M. Sistema de informação: quesitos de excelência dos Sistemas de informação operativos e estratégicos. São Paulo: Arte & Ciência, 2004.

Texto originalmente publicado em https://www.infoescola.com/informatica/sistema-de-informacao-centralizado/

# data[].attributes.attachment_link.description
Um sistema de informação centralizado ( SIC) é aquele executado em uma coleção de máquinas, que se utiliza de seus recursos individuais e possui uma máquina servidora que centraliza todas as informações. São sistemas que possuem pouco poder de processamento sequencial (tempo compartilhado) e necessitam de um mainframe para que possa funcionar com qualidade.

# data[].attributes.attachment_link.readable_text
Sistemas com múltiplos processadores possuem duas ou mais UCP interligadas e que funcionam em conjunto na execução de tarefas independentes ou no processamento simultâneo de uma mesma tarefa.

Inicialmente os sistemas operacionais executavam um programa de cada vez mas com o surgimento dos sistemas operacionais com suporte a múltiplos processadores o processamento paralelo foi expandido.

Os primeiros sistemas com múltiplos processadores surgiram nos anos 60 com o objetivo de diminuir o tempo de processamento para sistema que envolviam número elevado de cálculos complexos ou que processavam alto volume de dados. Eram usados em aplicações científicas nas universidades ou em aplicações restritas do governo.

Foi nos anos 80 que os sistemas com múltiplos processadores começaram a ser usados amplamente pelas empresas. Principalmente com a redução do curso do hardware ficou mais barato comprar sistemas com muitos processadores ou adicionar processadores a um sistema multi processado.

Atualmente a maioria dos sistemas operacionais suportam multi processamento.
A motivação para o uso de múltiplos processadores
Existem alguns fatores que motivaram o desenvolvimento de sistemas com múltiplos processadores:

O elevado custo para o desenvolvimento de processadores mais rápidos levou ao desenvolvimento de sistemas com múltiplos processadores ao invés de sistemas com um único processador de alto desempenho.

Aplicações que requerem alto desempenho ou poder computacional. As aplicações atuais cada vez mais demandam poder de processamento e desempenho que seriam dificilmente alcançados por uma arquitetura co um único processador com alto desempenho.
Os diversos benefícios dos sistemas com multi processadores
Inicialmente o desempenho foi o principal fator para o desenvolvimento dos sistemas multi processados porém posteriormente as empresas perceberam outros benefícios, antes não atingidos, que os sistemas multi processados oferecem.

Aumento da Confiabilidade - Com mais de um processador, caso haja falha de hardware em um processador os demais processadores mantem os sistemas em funcionamento. Desta forma os sistemas multi processados aumentam a confiabilidade da infraestrutura de TI e dos serviços e sistemas da empresa.

Escalabilidade - Se antes era necessário trocar o sistema computacional por um outro sistema computacional com mais poder de processamento, e isso custava muito caro, com os sistemas multi processados basta adicionar novos processadores conforme a demanda de processamento. Ou seja, o sistema multi processado é escalável, ele pode ser expandido conforme a necessidade de poder computacional da organização com a simples adição de novos processadores.

Alta disponibilidade - Pelo mesmo motivo do aumento da confiabilidade, os sistemas multi processados oferecem alta disponibilidade dos serviços pois em caso de falha de um ou mais processadores, os outros processadores garantem a disponibilidade do serviço ou seja que o serviço não será interrompido.

Balanceamento de carga - Todo o processamento pesado pode ser distribuído pelos vários processadores disponíveis no sistema, dividindo a carga do processamento e conseguindo melhores resultados em desempenho. Esta abordagem não seria possível em um sistema com um único processador de alto desempenho.

Atualmente os servidores de banco de dados, servidores de arquivos, servidores web usam sistemas com múltiplos processadores justamente para atender a estes requisitos de infraestrutura.
Tipos de Sistemas Computacionais

Os sistemas são classificados conforme o grau de paralelismo no processamento de instruções. Um modelo proposto define quatro tipos de sistemas computacionais:

SISD ( Single Instruction Single Data ) - Sistemas que suportam uma única sequencia de instruções e apenas uma sequencia de dados. Os sistemas com um único processador estão nessa categoria. Estes sistemas simulam paralelismo com a utilização de uma técnica conhecida como pipeline.

SIMD ( Single Instruction Multiple Data ) - Sistemas que com uma única sequencia de instruções tratam multiplas sequencias de dados. São sistemas que trabalham com vetores inteiros simultaneamente, possibilitando a execução uma mesma instrução ou bloco de instruções sobre diferentes elementos de um ou mais vetores.

MISD ( Multiple Instruction Single Data ) - Sistemas que permitem a execução de múltiplas sequencias de instruções em uma única sequencia de dados. Não existe até o momento nenhum sistema computacional criado com esta arquitetura.

MIMD ( Multiple Instruction Multiple Data ) - Sistema que permitem a execução de múltiplas sequencias de instruções sobre múltiplas sequências de dados. Esta categoria engloba os sistemas com multiplos processadores.
Sistemas Fortemente acoplados e fracamente acoplados
Os sistemas com múltiplos processadores usam a arquitetura MIMD e podem ser classificados em função de diversos fatores, como compartilhamento da memória principal, tempo de acesso à memória principal, mecanismos de comunicação e sincronização utilizados e velocidade de comunicação dos processadores.

A partir destes fatores os sistemas com múltiplos processadores podem ser classificados em fortemente acoplados ou fracamente acoplados.

Nos sistemas fortemente acoplados os processadores compartilham a memória principal e são controlados por apenas um único sistema operacional.

Nos sistemas fracamente acoplados temos dois ou mais sistemas computacionais independentes conectados por uma rede de comunicação, tendo cada sistemas seus processadores, memoria principal, dispositivos E/S e sistema operacional.

A grande diferença entre estes dois sistemas é que em sistemas fortemente acoplados existe apenas um espaço de endereçamento compartilhado por todos os processadores, chamado de memoria compartilhada. Nos sistemas fracamente acoplados cada sistema tem sua memória principal, seu espaço de endereçamento individual e a comunicação entre os sistemas é feita através de troca de mensagens.
Sistemas com Multiprocessadores Simétricos ( SMP )
São sistemas fortemente acoplados que compartilham o mesmo espaço de endereçamento e são gerenciados por um único sistema operacional. São também conhecidos como sistemas SMP.

O tempo de acesso à memória principal pelos vários processadores é uniforme. Não importa a localização física do processador. Esta arquitetura é chamada por UMA ( Uniform Memory Access ).

Sistemas SMP implementam a simetria dos processadores, onde todos os processadores realizam as mesmas funções. Poucas funções ficam a cargo de um processador central, como por exemplo, a inicialização do sistema. Como todos os processadores executam as mesmas funções existe um melhor balanceamento da carga e das operações de E/S.

São sistemas fracamente acoplados formados por vários sistemas computacionais chamados nós que são conectados por uma rede que precisa ser de alto desempenho. Cada nó da rede é denominado membro do cluster e possui seus próprios recursos como processadores, memória, dispositivos E/S e sistema operacional.

Geralmente os membros do cluster são do mesmo fabricante por questões de incompatibilidade de sistemas operacionais.

Como cada nó do cluster possui sua memória principal a comunicação entre os nós é feita através de troca de mensagens.

Geralmente a rede de conexão é dedicada aos nós do cluster e o acesso aos serviços é feito através de uma outra rede.

Este sistema oferece alta disponibilidade e tolerância a falhas.

O usuário que acessa um cluster não tem conhecimento dos nós que compõem o cluster. Do ponto de vista do usuário é como se ele tivesse acessando um único sistema fortemente acoplado.

Sistemas Operacionais de Rede ( SOR )
Os sistemas operacionais de rede são o melhor exemplo de um ambiente fracamente acoplado. Cada sistema, nó da rede, possui seus próprios recursos de hardware e são independentes dos demais nós da rede, sendo interconectados por uma rede formando uma rede de computadores.

Os SOR são usados tanto em redes locais como em redes Ethernet e redes distribuídas ( WAN ), sendo a comunicação feita através de uma interface de rede que possibilita o acesso aos demais componentes da rede.

Não existe limite quanto ao número de nós que podem fazer parte da rede de computadores.

Como cada nó possui seu próprio sistema operacional e os sistemas operacionais podem ser diferentes existe um protocolo que garante a comunicação entre os nós. No caso o protocolo TCP/IP.
Os SORs e o Modelo Cliente Servidor
A grande maioria dos SORs e seus protocolos de rede implementa o modelo cliente-servidor. Neste modelo existe um ou mais servidores que oferecem serviços como servidor de impressão, servidor de arquivos, servidor de correio eletrônico, servidor de banco de dados. Os servidores oferecem os serviços aos clientes da rede.

O Windows Server e o Novell Netware são exemplos de SORs voltados para oferecer este tipo de serviço.

Um sistema distribuído é um conjunto de sistemas autônomos que são interconectados por uma rede de comunicação e que funciona como se fosse um sistema fortemente acoplado mas de fato não é.

Cada componente de um sistema distribuído possui seus próprios recursos e sistema operacional.

Os sistemas operacionais dos componentes que compõem um sistema distribuído podem ser heterogêneos.

O que diferencia um sistema distribuído dos demais sistema fracamente acoplados é que existe um relacionamento mais forte entre seus componentes. Do ponto de vista físico, o hardware é independente, fracamente acoplado, porém do ponto de vista lógico, existe um relacionamento forte entre o software existente nos sistemas.

Os componentes de um sistema distribuidos podem ser conectados por uma rede local ou através de uma rede distribuída. A localização de um componente não é considerada e nem as características físicas da rede.

A escalabilidade de um sistema distribuído é, ao menos à princípio, ilimitada pois basta acrescentar novos componentes à rede em função da necessidade.

Para o Usuário e suas aplicações é como se houvesse um único sistema fortemente acoplado ao invés de uma rede conectando sistemas heterogêneos e independentes. Este conceito é chamado de imagem única do sistema.

Em um sistema distribuído quando um usuário se conecta ao sistema não é necessário informar o nome do componente a que estará conectado. Independente da localização física dos componentes, o usuário terá acesso a todos os arquivos, diretórios e demais recursos de forma transparente. Ao executar uma aplicação o usuário nem mesmo saberá em quais componentes a sua aplicação está rodando. Caso ocorra um erro em um desses componentes o usuário não terá conhecimento ficando sob responsabilidade do sistema operacional a resolução de todos os problemas.

Este conceito é chamado transparência. A partir deste conceito, o conjunto de componentes parece ser um sistema único, criando a imagem única do sistema.

A transparência aqui é feita a partir de vários aspectos de um sistema distribuído:

Transparência de acesso

Transparência de localização

Transparência de concorrência

Transparência de desempenho

Transparência de escalabilidade

Transparência a falhas

Transparência de migração

Para que um sistema distribuído ofereça transparência em todos os aspectos acima mencionados é necessário que haja tolerância a falhas. Falhas tanto de hardware quanto de software. Neste caso o sistema tem que garantir que em caso de problema em algum componente as aplicações continuem sendo processadas sem qualquer interrupção do usuário, de forma totalmente transparente.

A tolerância a falhas de hardware é garantida através de redundância de componentes como fontes duplicadas, vários processadores, técnicas de RAID, memória com detecção e correção de erros, etc. Ainda temos redundância dos meios de conexão, placas de rede, linhas de comunicação e dispositivos de rede.

A tolerância a falhas de software é mais difícil de implementar. Caso haja uma falha no sistema operacional, a aplicação deve continuar como se não houve havido falha, sem que o usuário perceba que houve a falha. Neste caso, como as aplicações estão distribuídas em vários sistemas, caso ocorra algum problema com um dos componentes é possível que um deles assuma de forma transparente o papel do sistema defeituoso.

Por exemplo: Ao acessar um sistema de suporte houve falha na conexão com o banco de dados. O servidor de banco de dados, o serviço de banco de dados estava fora do ar. Neste caso o sistema de suporte se conecta a outro servidor de banco de dados, servidor de contingencia e o sistema de suporte prossegue como se não tivesse havido falha na conexão ao banco de dados.

# data[].attributes.attachment_link.title
12-Sistemas com múltiplos processadores - Prof Fernando De Siqueira - Sistemas Operacionais

# data[].attributes.attachment_link.description
Sistemas com múltiplos processadores possuem duas ou mais UCP interligadas e que funcionam em conjunto na execução de tarefas independentes ou no processamento simultâneo de uma mesma tarefa. Inicialmente os sistemas operacionais executavam um programa de cada vez mas com o surgimento dos sistemas operacionais com suporte a múltiplos processadores o processamento paralelo foi expandido.

# data[].attributes.attachment_link.title
Introdução - Notas de Aula em Sistemas Distribuídos

# data[].attributes.attachment_link.description
Notas de aula do curso de Sistemas Distribuídos da FACOM/UFU