• Nenhum resultado encontrado

Sis to Per 2001

N/A
N/A
Protected

Academic year: 2021

Share "Sis to Per 2001"

Copied!
80
0
0

Texto

(1)

Universidade Estadual Paulista

Universidade Estadual Paulista

Instituto de Biociências, Letras e Ciências Exatas

Instituto de Biociências, Letras e Ciências Exatas

Departamento de Ciência da Computação e Estatística Departamento de Ciência da Computação e Estatística

Apostila de

Apostila de

Projeto de Sistemas Operacionais

Projeto de Sistemas Operacionais

Prof. Dr. Norian Marranghello

Prof. Dr. Norian Marranghello

Outubro de 2001 Outubro de 2001 norian@dcce.ibilce.unesp.br

norian@dcce.ibilce.unesp.br

Rua Cirstóvão Colombo, 2265 – São José do Rio Preto, SP Rua Cirstóvão Colombo, 2265 – São José do Rio Preto, SP C.E.P.15054-000; Tel: +17 221 2215; Fax:

(2)
(3)
(4)

Índice

Índice

 Índice...

 Índice...

...

...

...

...

... 22

Sistemas Distr

Sistemas Distribuídos

ibuídos ...

...

...

...

...

... 44

Sistemas Centralizados... Sistemas Centralizados...55

Sistema em Sistema em RedeRede ...7...7

Sistemas Sistemas DistribuídosDistribuídos ...8...8

Sistemas Au Sistemas Autônomos Cootônomos Cooperativosperativos ...9...9

Algoritmos Distribuídos...10

Algoritmos Distribuídos...10

 Projeto de Sistema Operacional

 Projeto de Sistema Operacional ...

...

...

...

... 10

10

Eficiência Eficiência ... ... ... 1010 Flexibilidade Flexibilidade ... ... ... 1111 Consistência Consistência ... ... ... 1212 Robustez Robustez ... ... ... 1212 Transparência... Transparência... ... 1313

Serviços

Serviços ...

...

...

...

...

...

... 14

14

 Modelos de A

 Modelos de Arquiteturas

rquiteturas ...

...

...

...

...

... 16 

16 

Comunicação

Comunicação ...

...

...

...

...

...

.... 18

18

O modelo de referência da ISO ...19

O modelo de referência da ISO ...19

O modelo TCP/IP do DoD...21

O modelo TCP/IP do DoD...21

 Aspectos de projeto

 Aspectos de projeto ...

...

...

...

...

... 23

23

 Modelo

 Modelo Cliente/Servidor...

Cliente/Servidor...

...

...

... 25

25

Serviços de Tempo

Serviços de Tempo ...

...

...

...

...

... 27 

27 

 Ramificações no Fluxo

 Ramificações no Fluxo de Controle de P

de Controle de Processos

rocessos ...

...

...

... 30

30

 Mecanismos de Linguagem para Sincronização...

 Mecanismos de Linguagem para Sincronização...

...

.... 33

33

Comunicação entre Processos... Comunicação entre Processos...3636 Passagem Passagem de de MensagensMensagens ... ... .... 3737 Chamadas Chamadas a a Procedimentos Procedimentos RemotosRemotos ... ... 4040

Transações

Transações ...

...

...

...

...

...

... 44

44

Protocolo de aceitação em duas fases...44

Protocolo de aceitação em duas fases...44

Coordenação Distribuída...45

Coordenação Distribuída...45

Por Por disputadisputa ... ... 4545 Controlada... Controlada... ... 4646

 Algoritmos

 Algoritmos de

de Eleição...

Eleição...

...

...

...

... 48

48

 Acordo Distribu

 Acordo Distribuído

ído ...

...

...

...

...

... 49

49

 Falhas

 Falhas Bizantinas

Bizantinas...

...

...

...

...

... 49

49

Impossibilidade de Consenso...51

Impossibilidade de Consenso...51

Consenso Distribuído Aleatório... Consenso Distribuído Aleatório...5151

 Escalonamento de

 Escalonamento de Processos...

Processos...

...

...

...

... 53

53

Modelos...53

(5)

Escalonamento Estático... Escalonamento Estático...5454 Modelo de Precedência...55 Modelo de Precedência...55 Modelo de Comunicação...57 Modelo de Comunicação...57 Custo de Custo de Computação...Computação...5757 Custo de Comunicação...58

Custo de Comunicação...58

Escalonamento Dinâmico...58

Escalonamento Dinâmico...58

Algoritmos Algoritmos GenéticosGenéticos ... ... ... 6060 Compartilhamento de Memórias Distribuídas ...61

Compartilhamento de Memórias Distribuídas ...61

Arquiteturas Arquiteturas NUMANUMA ... ... ... 6363 Alocação, Migração e Cópia de dados ...65

Alocação, Migração e Cópia de dados ...65

Modelos de Consistência de Memória...66

Modelos de Consistência de Memória...66

Sistemas de Memória Cache em Multiprocessadores... Sistemas de Memória Cache em Multiprocessadores...6868 Estruturas de Memórias Cache...69

Estruturas de Memórias Cache...69

Protocolos de Coerência...70 Protocolos de Coerência...70 Algoritmos de Gerenciamento de MCDs...71 Algoritmos de Gerenciamento de MCDs...71 Localização de Dados ... Localização de Dados ...7272 Sistemas de Arquivos Distribuídos... Sistemas de Arquivos Distribuídos...7373 Implementação de Sis Implementação de Sistemas de Arquivos Dtemas de Arquivos Distribuídosistribuídos ...74...74

Compartilhamento de Arquivos...75

Compartilhamento de Arquivos...75

Réplicas de Arquivos e Dados...77

Réplicas de Arquivos e Dados...77

Operações de Leitura ...78 Operações de Leitura ...78 Operações de Escrita...78 Operações de Escrita...78

 Bibliografia

 Bibliografia ...

...

...

...

...

...

... 79

79

(6)

Sistemas Distribuídos

Segundo Tanenbaum (tradução, página 261), um sistema distribuído é aquele que roda em um conjunto de máquinas sem memória compartilhada, máquinas essas que mesmo assim aparecem como único computador para seus usuários.

Por outro lado, Chow e Johnson [1 - página 27] definem um sistema operacional (SO) distribuído como uma integração de serviços, apresentando uma visão transparente de um sistema com vários computadores, com controle e recursos distribuídos.

Este curso tratará de sistemas operacionais distribuídos, cujo desenvolvimento tem sido motivado pela:

- crescente necessidade de compartilhar recursos e informações; - redução rápida do custo de estações de trabalho;

- proliferação do uso de redes; e

- maturação das tecnologias de software

Inicialmente será feita uma breve revisão de alguns conceitos importantes sobre sistemas operacionais. A seguir, serão mostradas as diferenças conceituais de quatro categorias de sistemas operacionais. Posteriormente, diversos aspectos de projeto de Sistemas operacionais distribuídos serão analisados individualmente.

Um sistema operacional é um conjunto de programas que fazem a interface entre o hardware da

máquina e seus usuários, com o objetivo de tornar seu uso mais eficiente, fácil e seguro.

O hardware funciona à base de sinais elétricos, os quais são trazidos para uma simbologia binária

de modo a facilitar o trabalho dos projetistas dos circuitos lógicos. Esta linguagem de máquinas é usada para escrever alguns programas, que executam certas funções básicas, as quais tornam mais eficiente a manipulação do hardware. Tais funções são utilizadas pelos próprios projetistas de

sistemas operacionais para criar outras funções, um pouco mais complexas, que além de facilitar e tornar mais eficiente o trabalho de seus usuários, garantem que o acesso destes ao sistema não comprometa sua segurança, nem a dos demais usuários do sistema.

As funções tratadas pelo sistema operacional são o escalonamento dos processos nos processadores, a coordenação da interação entre tais processos, o gerenciamento dos recursos do sistema, o controle de acesso a esses recursos (portanto sua proteção), a recuperação de erros e a interface com os usuários do sistema.

Para suprir tais funções o sistema operacional fornece dois tipos de serviços, quais sejam, serviços de núcleo e os de sistema. Os serviços de núcleo correspondem às funções essenciais, dependentes da arquitetura da máquina. Os serviços do sistema correspondem às funções de alto nível percebidas pelos programas de aplicação.

Essas funções do sistema operacional, por um lado, visam ajudar os administradores do sistema a gerenciarem os seus recursos, por outro lado, visam apresentar aos usuários uma máquina estendida mais fácil de lidar.

A ênfase dos sistemas operacionais tradicionais era no aspecto administrativo, ou seja, em gerir os meios necessários ao uso da máquina. Já, os sistemas operacionais modernos enfatizam seus objetivos, isto é, visam fornecer facilidades para sua utilização.

Os sistemas operacionais modernos podem ser classificados de acordo com seu grau de acoplamento em: centralizados, distribuídos, em rede e autônomos. Para classificá-los levam-se em consideração as três características seguintes:

(7)

- interoperabilidade: que é a capacidade do sistema facilitar a troca de informação entre componentes heterogêneos;

- transparência: que é a capacidade do sistema fornecer uma visão lógica única ao usuário, independente do sistema físico disponível; e

- autonomia: que é a capacidade dos elementos do sistema processarem tarefas independentemente uns dos outros, ao mesmo tempo que cooperam entre si para a solução de um problema.

Sistemas Centralizados

Os sistemas operacionais tradicionais, utilizados tanto em arquiteturas com vários processadores como em monoprocessadas, são centralizados. Estes sistemas são fortemente acoplados e a comunicação entre seus processos é feita pelo compartilhamento de memória ou por interrupções. Nas fases iniciais, o projeto desses sistemas visavam o controle das interfaces com os usuários e do sistema de entrada e saída, através de interrupções e de um conjunto de acionadores de dispositivos. Frente à necessidade de aumentar a eficiência do sistema de entrada e saída surgiram os conceitos de entrada e saída virtual e de spooling. Este correspondendo ao armazenamento

temporário, em disco, de operações de entrada e saída, permitindo assim a minimização das diferenças de velocidades de processamento entre a UCP e os periféricos; e aquele correspondendo à abstração dos dispositivos de entrada e saída de modo que o sistema operacional possa apressá-los como se fossem arquivos, deixando a tarefa “conversar” diretamente com os dispositivos para os respectivos acionadores. Com o passar do tempo a necessidade de tratar programas grandes deu origem ao conceito de memória virtual, o que permite o tratamento de programas, que utilizem espaço de endereçamento maior do que o disponível na memória real, através das técnicas de paginação e segmentação. A contínua necessidade de otimizar o uso dos sistemas deu origem a vários outros conceitos, que possibilitaram o acesso de diversos usuários simultaneamente. Tais conceitos incluem a multi-programação, o compartilhamento de tempo, o necessário escalonamento de processos, o controle de concorrência, o controle de acesso aos arquivos do sistema e a proteção aos arquivos compartilhados. Associado ao acesso de vários usuários está a necessidade de tratar diversas tarefas o que originou uma série de técnicas para viabilizar seu processamento concorrente, incluindo a sincronização de processos, a recuperação do sistema após bloqueios fatais e a comunicação entre os processos concorrentes.

O sistema operacional é um sistema grande, podendo chegar a milhões de linhas de código. Este programa deve ser estruturado em módulos divididos vertical e horizontalmente. Cada módulo pode ser entendido como um conjunto de instruções necessárias para executar determinado serviço do sistema. Os módulos são agrupados (horizontalmente) para formar componentes funcionais. Por outro lado, eles são agrupados (verticalmente) em várias camadas, estrutura na qual só é permitida a interação entre módulos de camadas adjacentes.

Todos os recursos do sistema inclusive arquivos e processos, podem ser abstraídos como objetos de dados sendo sua representação física “escondida” por uma estrutura de dados abstrata.

O modelo de orientação a objetos possibilita uma uniformidade dos mecanismos de acesso e proteção de módulos do sistema. Devido, a esta uniformidade sua alteração é mais fácil, o que melhora a portabilidade do sistema.

Contudo, os sistemas operacionais tradicionais são do tipo monolítico, nos quais não há particionamento do núcleo, fora a modularidade normal do código. Nos sistema monolíticos os serviços do sistema e do núcleo fazem parte de um mesmo programa.

Todavia, em sistemas operacionais modernos a preocupação com a eficiência e a portabilidade é maior. O núcleo deve ser mínimo, restrito apenas a serviços dependentes do hardware ou àqueles

(8)

tratamento de interrupções, ao acionamento de dispositivos e algumas primitivas básicas para a sincronização e a comunicação entre processos. Módulos estes que, por serem dependentes do

hardware, não podem ser transportados de uma máquina a outra sem serem recodificados.

Serviços que tipicamente são incluídos em um núcleo mínimo são: - mecanismos para a comunicação entre processos;

- algumas funções básicas para o gerenciamento de memória;

- algumas primitivas para o gerenciamento e o escalonamento de processos em baixo nível; e - primitivas para o tratamento de E/S em baixo nível.

As funções de um sistema operacional podem ser divididas em quatro categorias, conforme os recursos que gerenciam; são elas: processos e processadores, memória, entrada e saída, e dados ou arquivos.

As funções para o gerenciamento de processos e processadores tem por finalidade básica definir que processos devem ser executados em cada processador do sistema e quando a execução deve iniciar. Elas são chamadas, respectivamente, de alocação e escalonamento.

Definir quais processos devem ser executados, quando os recursos do sistema estiverem disponíveis e/ou certas condições forem atingidas, tem por objetivos minimizar o tempo de resposta dos processos e maximizar a vazão do sistema. Esta definição pode ser feita de forma estática levando-se em consideração as relações de precedência entre os processos, que indicam como os processos devem ser sincronizados. A definição pode também ser feita de forma dinâmica considerando-se as relações de dependência entre processos, que indicam as interações entre elas. Para permitir a coexistência de vários usuários e diversas tarefas no sistema, outras funções são necessárias. Há as que viabilizam a multiprogramação, responsáveis pela multiplexação espacial da memória onde residem os processos. Há as que viabilizam o compartilhamento do tempo, responsáveis pela multiplexação temporal do processador onde os processos são executados. A interação entre os processos necessita ainda de mecanismos para as suas comunicação e sincronização, o que pode ser obtido através da exclusão mútua, por exemplo. A exclusão mútua pode ser obtida fazendo-se chamadas ao sistema e acionando operações sobre variáveis especiais, chamadas semáforos, capazes de bloquear processos interativos, permitindo coordenar seu funcionamento.

Uma forma muito usual de tratar a comunicação entre processos é por meio do compartilhamento de áreas de memória. Todavia, processos são geralmente assíncronos e, via de regra, não compartilham espaço de endereçamento. Consequentemente, a alternativa natural é a troca de mensagens, o que pressupõe algum tipo de sincronização.

As funções para o gerenciamento de entrada e saída geralmente são fornecidas pelo sistema operacional via uma interface genérica, deixando para os fabricantes de periféricos o projeto dos acionadores e controladores desses dispositivos. Portanto, o sistema operacional enxerga dispositivos virtuais (arquivos lógicos) sobre os quais ele pode fazer operações apenas de escrita, como no caso das impressoras, apenas de leitura, como no caso dos teclados, ou de leitura e escrita, como no caso dos discos.

As funções para o gerenciamento de memória respondem pela alocação e desalocação de memória para mapear o espaço lógico de endereçamento dos programas na memória física. Para tanto é criado um espaço de endereçamento virtual o qual permite que o tamanho do programa, mais seus dados e a pilha, seja maior que a memória física disponível. Isto é conseguido pela divisão do espaço de endereçamento lógico em páginas ou segmentos e o mapeamento destas entidades (páginas/segmentos) em blocos da memória física. Este mecanismo serve também para resolver discrepâncias entre memória em disco (geralmente de grande capacidade, mas lenta) e a principal (usualmente de capacidade reduzida, mas rápida). Como o compartilhamento de memória é uma

(9)

solução relativamente fácil para sincronização entre processos, muitos algoritmos foram desenvolvidos para este fim. Para aproveitar tais algoritmos vários autores procuram simular a existência de uma memória compartilhada em sistemas distribuídos, o que levanta questões como a consistência dos dados compartilhados e o desempenho do sistema assim estruturado.

As funções para o gerenciamento de arquivos têm dois enfoques fundamentais, quais sejam, o acesso e o compartilhamento. De maneira genérica qualquer computação pode ser vista como processos operando sobre arquivos. Estes são entidades lógicas que agrupam dados e devem ser estruturadas e implementadas em algum dispositivo antes de serem manipuladas.

As funções para manipulação de arquivos devem implementar mecanismos que garantam o acesso aos dados contidos no arquivo apenas a usuários autorizados protegendo-os contra uso indevido. Mecanismos para disciplinar o acesso garantem a integridade dos dados contidos nos arquivos são necessários para a sua segurança. Mecanismos de sincronização são necessários para controlar o acesso correspondente ao conteúdo dos arquivos, permitindo o compartilhamento dos respectivos dados.

Sistema em Rede

É um multicomputador fracamente acoplado no qual não existe qualquer tipo de controle direto de uma máquina sobre as outras e no qual a comunicação entre as outras máquinas é bem mais lenta que dentro de uma dada máquina.

O objetivo principal de sistemas em rede é possibilitar o compartilhamento de seus recursos. Para tanto, as máquinas que compõem o sistema trocam informações via um canal de comunicação, que as interconecta. A principal característica explorada nestes sistemas é a sua interoperabilidade, para o que são necessários alguns mecanismos de suporte, tais como: protocolos de comunicação devidamente padronizados e interfaces comuns para sistemas de arquivos e bases de dados. Nos sistemas em rede a troca de informações é dividida em níveis, por exemplo: no nível de hardware

trocam-se sinais físicos via a rede de comunicação, no de sistema operacional tem-se os serviços de transporte de dados que trocam grupos de bits entre si, e no nível dos usuários são trocadas as mensagens através de processos de alto nível que implementam a comunicação fim-a-fim orientada a aplicações. Os principais modelos em camada, que serão estudados mais adiante, são o RM-OSI da ISO e o TCP/IP do DoD.

Na origem dos sistemas operacionais em rede temos o conceito de sistemas abertos, que é um sistema preparado para se comunicar com qualquer outro sistema aberto utilizando regras padrão que governam o formato, o conteúdo e o significado das mensagens enviadas ou recebidas.

Neste sentido, os sistemas operacionais em rede são extensões dos sistemas centralizados que facilitam o compartilhamento de recursos implementando serviços de transporte para interfacear os processos aplicativos e a rede de comunicação. A maioria dos sistemas operacionais em rede usam interfaces de aplicação de alto nível, tais como soquetes ou chamadas a procedimentos remotos, para que o serviço de transporte possa sustentar a comunicação entre sistemas em domínios de rede diversos. Algumas classes de aplicações de rede são:

- login remoto: é a capacidade do sistema permitir que um usuário use uma máquina como

terminal de outra conectada à rede, para poder utilizar o processador e outros recursos associados à máquina hospedeira. Para poder fornecer este serviço a máquina hospedeira deve ser capaz de compreender pacotes de dados vindos do teclado da máquina remota e de enviar pacotes de dados compreensíveis para o seu monitor. Esta comunicação requer um protocolo de redes, sendo o mais comum o telnet.

- transferência de arquivos: é a capacidade do sistema transferir dados estruturados na forma de arquivos, juntamente com seus atributos, entre máquinas do sistema. Como parte da operação de transferência de arquivos há a necessidade do intercâmbio e da

(10)

validação de informações, tais como: atributos do arquivo, formato e fluxo dos dados e, controle de acesso ao arquivo. Este serviço é suportado por protocolos de transferência de arquivos, como o ftp.

- mensagens: é a capacidade do sistema transferir mensagens, incluindo documentos e arquivos, sem a necessidade de estabelecer uma conexão em tempo real. Ao contrário da transferência de arquivos, as mensagens são empacotadas e somente umas poucas informações de controle são consideradas. Neste caso há serviços para atender transações comerciais em formatos específicos entre computadores com sistemas operacionais diversos (EDI - eletronic data interchange) e para troca de mensagens entre

usuários de rede (correio eletrônico) que se servem de padrões como o X.400 do CCITT e o SMTP do DoD.

- pesquisas em redes: é um serviço que permite a busca e a apresentação de documentos distribuídos entre máquinas participantes da rede. O modelo de varredura mais comum é o cliente/servidor, no qual um programa cliente busca objetos em sistemas servidores de arquivos remotos. O programa cliente mais popular é o netscape. O sistema mais usado é o www (world wide web) que é um modelo de dados para a ligação de documentos

hipermídia usando apontadores (URL - universal resource locators). A comunicação

principal com o servidor se dá através do hyper text transport protocol (http); em

algumas ocasiões são usados também o telnet e o ftp. Os documentos são tipicamente escritos usando-se a hyper text markup language(html).

- Execução remota: é a capacidade do sistema enviar mensagens para pedir a execução de programas em máquinas remotas. A execução remota se dá, em geral, através da interpretação de scripts e não pela compilação de programas, devido a dependência da

arquitetura da máquina. Este serviço costuma ser restrito a aplicações nas quais a segurança do sistema não seja comprometida pela violação de proteções. Aplicações deste serviço incluem o uso de linguagens intermediárias para a transmissão de imagens compactadas. Talvez uma aplicação mais popular atualmente seja JAVA, que é uma linguagem orientada a objetos, derivada da C++, incorporando protocolos tais como o http e o ftp. Ela produz instruções compactas e independentes de máquinas, os applets, que são objetos que tanto podem conter URL (para apontarem/ativarem outros applets) como podem ser apontados por URL.

Sistemas Distribuídos

Os sistemas distribuídos representam um passo além daqueles em rede, pois, além de possibilitarem o compartilhamento de recursos eles viabilizam a coordenação de atividades distribuídas.

Os recursos físicos costumam ser distribuídos geograficamente dentro das empresas, entre outras razões por questões como eficiência no uso de certos recursos e segurança do sistema como um todo. Por outro lado, os recursos lógicos estão, por sua natureza, dispersos na empresa, pois representam as informações que as pessoas possuem.

A função de um sistema operacional distribuído é gerenciar as atividades e os recursos distribuídos, possibilitando um processamento descentralizado e melhorando o desempenho do sistema.

A principal diferença de um sistema distribuído para um sistema em rede é sua característica de transparência, isto é, enquanto num sistema em rede o usuário deve manipular operações remotas explicitamente, o usuário de um sistema distribuído tem a impressão de estar trabalhando em um sistema centralizado de bom desempenho.

(11)

- transparência de concorrência é quando os usuários não têm consciência do compartilhamento de tempo com outros;

- transparência de localização de programas é quando o mapeamento do programa em memórias e processadores é escondido do usuário;

- transparência de acesso a arquivos é quando os arquivos podem ser armazenados em qualquer lugar do sistema e por ele movido sempre que conveniente sendo o acesso ao arquivo feito via um caminho lógico para o usuário; e

- transparência de desempenho é quando os processos podem ser executados em qualquer processador e movidos dentro do sistema de acordo com suas necessidades, sem que o usuário perceba diferença de desempenho significativa.

Para atingir estes e outros aspectos, um sistema digital deve incluir mecanismos para tratar da coordenação das atividades de processos distribuídos, gerenciando adequadamente o uso dos recursos dispersos pelo sistema, através da implementação de algoritmos distribuídos, como será visto mais adiante no curso.

Sistemas Autônomos Cooperativos

Estes sistemas mantêm as noções de transparência e interoperabilidade existentes nos sistemas distribuídos, mas para permitir a existência de processos autônomos capazes de exportar e solicitar serviços, interagindo independentemente, abolem a necessidade de passar a impressão da existência de um único usuário no sistema.

Então, grupos de atividades podem resultar em serviços de nível mais elevado, através de composição de serviços mais simples. Desta forma, pode-se formar qualquer sistema de software

integrando vários serviços por meio de certas estruturas pré-estabelecidas.

Um exemplo interessante de um sistema autônomo cooperativo pode ser emprestado da robótica evolutiva. Neste caso, um conjunto de robôs usam técnicas de algoritmos genéticos para interagirem e criarem soluções para problemas propostos. Os processos devem ser distribuídos pelos robôs, autônomos e assíncronos. Três classes de serviços são implementadas em cada robô do sistema, quais sejam: auto-avaliação, seleção e reprodução.

Auto avaliação consiste em métricas para medida de desempenho do algoritmo executado no respectivo robô. Estas métricas devem ser baseadas em parâmetros que não dependem de agentes ou observadores externos. Por exemplo, deve medir a energia gasta para executar certa tarefa, o que pode ser materializado pelo tempo necessário ou pelo número de operações necessárias.

A seleção visa reconhecer indivíduos mais bem ajustados, para executar a tarefa em questão, os quais fornecerão genes (isto é, assumirão o papel de pais) para os menos ajustados. Estes, por sua vez, receberão os genes e se modificarão gerando novos entes (isto é, filhos).

No processo de reprodução não há reestruturação física dos robôs, mas somente a troca de código do programa de controle.

Para colocar em prática estes procedimentos cada um dos robôs determina o seu nível virtual de energia, ou seja, seu desempenho na execução da tarefa a ele atribuída. Então irradia sua informação genética em uma freqüência proporcional ao seu nível de energia. Esta informação genética contém um gene escolhido aleatoriamente do seu genoma e que passou por um processo de mutação. Os demais robôs podem ou não aceitar o gene irradiado. Os que aceitarem sobrescrevem seu gene correspondente com o gene recebido, caso contrário o gene recebido é simplesmente descartado. A receptividade de cada robô do sistema é inversamente proporcional ao seu nível de energia.

(12)

Robôs com nível de energia maior (melhor desempenho) tendem a disseminar mais seus genes e resistem mais a tentativas de reprodução dos outros. Todavia, este processo é probabilístico e não garante que robôs mais ajustados transfiram todos os seus genes para os menos ajustados.

 Algoritmos Distribuídos

O principal objetivo do desenvolvimento de algoritmos distribuídos é fornecer mecanismos que possibilitem contornar a falta de informação global sobre o estado de um sistema distribuído.

Cada processador de um sistema distribuído possui o seu relógio interno, que não é sincronizado com os relógios dos demais processadores, causando problemas de interação entre eles. Mesmo que se use um relógio global, centralizado, a propagação desta informação para os processadores do sistema está sujeita a atrasos diversos. Portanto, a tarefa de ordenar os eventos no sistema não é trivial.

Além dos atrasos na comunicação, há falhas que podem tornar certas fontes de informação inexistentes, ou não confiáveis. O sistema necessita de algoritmos capazes de identificar e contornar todos os tipos de falhas, evitando situações que levem à inoperância do sistema ou, o que é mais grave, à sua operação defectiva.

A arquitetura do sistema influi na implementação desses algoritmos. A topologia da rede (se completa, regular, fixa ou irregular, etc.) e o tipo de comunicação (se ponto-a-ponto ou multiponto) influem na sua implementação. Do ponto de vista do software a reprodução de cópias dos dados

introduz o problema da coerência e da consistência dessas cópias, que também influi no algoritmo distribuído.

Projeto de Sistema Operacional

Ao projetar um sistema operacional distribuído deseja-se que a execução de aplicativos no sistema resultante tenha um retorno melhor do que em sistemas monoprocessados centralizados, que o sistema distribuído seja capaz de se adaptar a variações tecnológicas e a necessidades de seus usuários, que seu comportamento seja, uniforme e previsível, que ele seja, confiável, tolerante a falhas e devidamente protegido contra ações nocivas, e que os detalhes de sua implementação sejam escondidos do usuário final. Desta forma, pode-se dizer que os projetistas de sistemas operacionais distribuídos têm cinco objetivos principais, como explicados a seguir.

 Eficiência

A resposta de um sistema operacional distribuído, ao executar um aplicativo, deve ser melhor que a resposta de um sistema centralizado, ou não seria razoável investir em um sistema mais caro e complexo, cujo desempenho fosse inferior.

O desempenho de um sistema operacional distribuído pode ser medido por diversos parâmetros, tais como: tempo de resposta do sistema, sua vazão (o número de trabalhos executados por unidade de tempo), a taxa de uso do sistema (seus processadores) e de seus recursos. No caso de sistemas distribuídos a questão da eficiência é mais complexa que nos sistemas centralizados, em especial, devido aos atrasos na comunicação.

Em sistemas distribuídos geograficamente o tempo para a troca de mensagens pode superar o limiar dos segundos. Entretanto, mesmo em sistemas fisicamente próximos, não é possível eliminar os atrasos na propagação dos dados. Estes atrasos podem ser agravados por eventuais sobrecargas dos protocolos de comunicação e pela distribuição de carga no sistema.

(13)

O tempo gasto na propagação dos dados (na troca de mensagens) depende fortemente do protocolo de comunicação utilizado, motivo pelo qual ele deve ser bem projetado, com base em primitivas de comunicação (tanto da linguagem quanto do sistema operacional) eficientes.

O balanceamento de carga deve ser cuidadosamente calculado para se evitar gargalos e congestionamentos no sistema de comunicação. Sempre que possível deve-se cuidar para estruturar os processos distribuídos para que haja uma sobreposição de cômputos e comunicação no nível das aplicações visando melhorar a eficiência do sistema.

A granulosidade das tarefas concorre para tal balanceamento. Processos com muitas tarefas e processamento interno curto, ditos de granulosidade fina, requerem muita comunicação. Processos com tarefas relativamente grandes, que requerem bastante processamento interno, são ditos de granulosidade grossa, e requerem pouca comunicação. Portanto, quanto mais fina a granulosidade dos processos, menores as tarefas. Com tarefas menores torna-se mais fácil a distribuição de carga entre os processadores. Quanto mais bem distribuída a carga de processamento, melhor a taxa de uso do sistema e de seus recursos. Desta forma, pode-se dizer que quanto mais fina a granulosidade dos processos, melhor o desempenho do sistema. Paradoxalmente, quanto mais processos distribuídos no sistema, maior o número de mensagens trocadas entre eles. Quanto maior o fluxo de mensagens, maior o tempo gasto com comunicação no sistema. Conseqüentemente, menor a vazão e maior o tempo que o sistema requer para produzir as respostas desejadas. Por conseguinte pode-se inferir que quanto mais fina a granulosidade dos processos, pior o depode-sempenho do sistema. O resultado disto é que a granulosidade dos processos deve ser ajustada de forma a tornar o sistema o mais eficiente possível.

Outra questão que afeta a eficiência de um sistema operacional distribuído é sua tolerância a falhas. É desejável que um sistema operacional distribuído mantenha todos os processos em execução, ainda que algum(s) de seus componentes falhem. Para tanto, quando uma tarefa é atribuída a um processador ele deve comunicar isto a outro(s) processador(es) do sistema para que, caso o processador principal falhe, o outro possa continuar a execução da tarefa. Entretanto, isto envolve comunicação sem utilidade para a computação, o que reduz o desempenho geral do sistema.

Flexibilidade

Um sistema operacional distribuído deve ser capaz de evoluir e migar, para se adaptar a variações tecnológicas. Deve ser possível adicionar serviços inexistentes e remover serviços obsoletos, preferencialmente sem a necessidade de recompilar e reinstalar o sistema, ou seja, o sistema deve ser modular e escalonável. Conforme mudam as plataformas de trabalho (o hardware) é desejável

que se possa migrar o sistema a um baixo custo, isto é, re-escrevendo e recompilando o menor número possível de rotinas. Para atingir esta portabilidade o núcleo do sistema deve ser o menor possível. Além disto, o sistema deve ter interfaces comuns para suas bases de dados e seu sistema de arquivos, bem como deve fazer uso de protocolos de comunicação padronizados, resultando em um sistema capaz de administrar um conjunto heterogêneo de máquinas. As quatro propriedades recém discutidas, quais sejam, escalabilidade, modularidade, portabilidade e interoperabilidade são de crucial importância para garantir a capacidade de adaptação do sistema.

Apesar dos sistemas operacionais com núcleo monolítico reinarem absolutos, suas características não favorecem ao requisito de flexibilidade. Estes sistemas são compostos por um sistema operacional centralizado, ao qual, são acrescidas funções para operação em rede e integrados serviços para operação remota. Os principais exemplos são os sistemas operacionais distribuídos derivados doUNIX.

Por isto, a maioria dos sistemas operacionais distribuídos projetados desde o início, sem utilizar partes de sistemas pré-existentes, adota o modelo de micronúcleo, já que este, por não fazer quase

(14)

nada, é mais flexível. Todos os serviços prestados pelo núcleo de um sistema operacional núcleo está lá por ser muito difícil ou muito caro prestá-lo fora do núcleo. Os sistemas micro-núcleo fornecem, fundamentalmente, quatro categorias de serviços, quais sejam:

- mecanismos de comunicação de processos - mínimo de funções para gerência de memória

- mínimo de funções para gerência de processos e escalonamento; e - funções de entrada e saída de baixo nível.

As demais funções do sistema são fornecidas fora do núcleo, através de troca de mensagens com este. Entre estas funções encontram-se aquelas para gerência completa de processos, as de manipulação de chamadas ao sistema, e os sistemas de arquivos e de diretórios. Como praticamente todos os serviços são fornecidos a partir de processos clientes em nível de usuário, a alteração ou a ampliação de serviços não implica a parada do sistema para a carga de um novo núcleo. Foi mostrado que mesmo a aparente vantagem que teriam os sistemas monolíticos, qual seja, a de apresentar um melhor desempenho por não trabalhar a base de trocas de mensagens, não existe.

Consistência

A operação de um sistema operacional distribuído envolve várias máquinas, muitas vezes com características heterogêneas, o que torna a interação entre os módulos do sistema por vezes, bastante complexa. Do ponto de vista do usuário, um sistema consistente deve permitir um uso uniforme e ter um comportamento previsível, apesar dessas possíveis características heterogêneas. Além disto, para garantir uma boa eficiência no uso do sistema, freqüentemente é necessário particionar os dados e fazer várias cópias deles. Isto requer mecanismos que viabilizem o controle de uso das diversas cópias, de modo a mantê-las sempre idênticas. A inexistência de informação sobre o estado global do sistema, bem como a ausência de um sincronismo geral, requer mecanismos especiais para o controle de concorrência, de forma a manter a integridade do sistema. Outra possível fonte de inconsistência no sistema é a possibilidade de falhas de seus componentes. O principal problema, neste caso, é a dificuldade, quando não a impossibilidade, de identificação da falha. Os três problemas mais comuns são: defeito em uma máquina, comprometimento de uma conexão e perda de uma mensagem.

Exemplo (do Silberschatz):

Sejam duas máquinas A e B, diretamente conectadas. Periodicamente elas enviam, uma à outra, uma mensagem x, indicando que estão ativas. Se, após um certo período, A não recebe a mensagem x de B, ela sabe que ocorreu algo, mas não sabe o que. Se enviar uma mensagem y para B, pela mesma conexão, e não receber resposta, continuará sem saber qual o erro. (se receber, provavelmente a mensagem x anterior havia se perdido). Se enviar a mensagem y por uma conexão alternativa e não receber resposta, novamente não tem como saber o que ocorreu. (se receber, provavelmente a conexão usual está com problemas).

De qualquer forma são necessários procedimentos específicos para, adequadamente, reconhecer a falha, tratar os processos de forma a manter o sistema consistente e posteriormente recuperar o estado do sistema anterior à ocorrência da falha.

 Robustez

Para ser robusto um sistema operacional distribuído deve estar disponível a maior parte do tempo, sempre apresentando dados confiáveis. Na teoria, uma das grandes vantagens de um sistema operacional distribuído é sua maior disponibilidade, geralmente resultante da redundância de seus componentes. Se um processador se mantém operante em 98% do tempo, um sistema com 4

(15)

processadores idênticos a este teria uma probabilidade de falhas de (0,02)4= 24x (10-2)4= 1,6 x 10-7 ~ 0,00002%, o que corresponde a uma disponibilidade em 99,99998% do tempo. Em outras palavras, se o monoprocessador falha uma hora para cada 50 horas de funcionamento, o quadriprocessador falharia uma hora para cada cinco mil horas de funcionamento, ou seja, estaria cem vezes mais disponível. Evidentemente, estes números são fictícios, apenas ilustrativos, para se ter uma idéia da possibilidade de uma maior disponibilidade de sistemas distribuídos, em relação a um monoprocessador. Esta maior disponibilidade só é conseguida às custas de redundância, como  já foi dito, o que, por sua vez, aumenta o risco de inconsistências no sistema. Falhas em canais de comunicação, em nós de processamento e perdas de mensagens são freqüentes em um sistema operacional distribuído. A robustez do sistema do ponto de vista de tolerância a falhas (sua confiabilidade) está vinculada à sua capacidade de reinicialização, em um estado no qual sua integridade seja preservada e seu desempenho seja pouco degradado.

Se uma máquina falha, o sistema deve: - tirar esta máquina de operação;

- transferir as tarefas que eram realizadas por ela para outra máquina; - reconfigurar o sistema sem a máquina falha; e

- re-integrar a máquina ao sistema, após seu reparo.

Tudo sem que os usuários percebam mais que uma, possivelmente pequena, variação no desempenho geral do sistema.

Mesmo sem falhas explícitas, um sistema robusto deve poder tratar situações especiais e erros, tais como, mudanças na sua topologia, longos atrasos em mensagens ou a impossibilidade de localizar um servidor. Em outras palavras, deve ser capaz de controlar o acesso aos elementos do sistema. Finalmente, a robustez de um sistema também diz respeito aos mecanismos de proteção existentes, isto é, deve poder garantir a segurança das informações nele contidas, resguardando sua integridade, bem como a confidencialidade dos dados dos usuários do sistema.

Transparência

Segundo Leslie Lamport: “um sistema distribuído é aquele no qual eu não posso fazer meu trabalho, pois, uma máquina que eu não conheço, não sei onde está e sobre a qual nunca ouvi falar, encontra-se fora do ar”.

Para evitar este tipo de reação, os projetistas de sistemas operacionais distribuídos enganam a todos, fazendo com que um conjunto de máquinas seja visto pelos usuários como se fosse um sistema único, de tempo compartilhado. Neste contexto, pode-se dizer que transparência de um sistema operacional distribuído é sua capacidade de, por assim dizer, esconder dos usuários detalhes da implementação do sistema, em particular aqueles mais complexos (dependentes da máquina), na medida do possível apresentando aos usuários um modelo lógico da máquina como eles gostariam de operar e não como ela é realmente.

Portanto, através do uso do conceito de transparência deve-se apresentar ao usuário o sistema mais simples possível sem, contudo, comprometer sua eficiência.

A idéia de propiciar ao usuário um sistema lógico mais amistoso que o sistema físico, minimizando a necessidade dos usuários tomarem ciência do sistema físico, é análoga aos conceitos de virtualidade em sistemas convencionais e de abstração em linguagens de programação.

Na página 30 do Chow & Johnson há definições de 10 aspectos de transparência, transcritos a seguir:

(16)

-  Access transparency refers to the ability to access both local and remote system objects in a uniform way. The physical separation of system objects is concealed from the user.

-  Location transparency means that users have no awareness of object locations. Objects are mapped and referred to by logical names. This is sometimes called name transparency.

-  Migration transparency is an added property of location transparency where an object  is not only referred to by its logical name but can also be moved to a different physical location without changing the name. Migration transparency is also called location independence.

- Concurrency transparency allows the sharing of objects without interference. It is similar to the time-sharing concept in a broader sense.

-  Replication transparency exhibits consistency of multiple instances (or partitioning) of    files and data. It is closely related to currency transparency but is treated separately

since files and data are special objects.

- Parallelism transparency permits parallel activities without users knowing how. Where, and when these activities are carried out by the systems. The parallelism might not be explicitly specified by the users.

- Failure transparency provides fault tolerance such that failures in the system can be transformed into graceful system performance degradation rather than disruptions, and  damage to the users is minimized.

- Performance transparency attempts to achieve a consistent and predictable (not  necessary equal) performance level even with changes of the system structure or load  distribution. In addition, the users should not experience excessive delays or variations in remote operations.

- Size transparency is related to modularity and scalability. It allows incremental growth of a system without the user’s awareness. The size of the system has no effect on the user’s perception of the system.

-   Revision transparency refers to the vertical growth of system as opposed to the horizontal growth in system size. Software revisions of the system are not visible to users.

Objetivos do sistema

operacional distribuído Eficiência Flexibilidade Consistência Robustez Transparências ConcorrênciaParalelismo

Desempenho Acesso Localização Migração Tamanho Revisão Acesso Replicação Desempenho Falha Replicação Tamanho Revisão

Serviços

Um sistema operacional é um provedor de serviços.

Serviços Primitivos: serviços fundamentais, os quais devem ser implementados no núcleo. - comunicação: primitivas send/receive(passagem de mensagens)

- sincronização: semântica de comunicação ou servidor de sincronização.

- servidor de processos: criação, eliminação e rastreamento de processos, alocando recursos tais como memória e tempo.

Os servidores de processos interagem via primitivas de sincronização e comunicação para garantir a transparência do sistema.

(17)

Serviços de Sistema: serviços que podem ser implementados em qualquer lugar do sistema, mas que ainda desempenham funções básica da operação do sistema.

- Servidor de nomes: mapeamento de nomes lógicos em endereços físicos. Relacionando-os com usuáriRelacionando-os, processRelacionando-os e máquinas.

- Servidor de diretórios: relacionado com arquivos e portas de comunicação. - Servidor de rede: traduz e seleciona caminhos e faz roteamento da informação.

- Servidor de tempo: relógios lógicos ou físicos, necessário para ordenação dos eventos. - Servidores de arquivos e de impressão.

Serviços de Valor Agregado: são serviços não essenciais na implementação de um sistema distribuído, mas que são úteis no suporte a aplicações distribuídas.

- servidor de grupos - servidor de web

(18)

Modelos de Arquiteturas

De forma abstrata os modelos de arquitetura de sistemas distribuídos podem ser definidos com base em três entidades que são fundamentais para o seu funcionamento, quais sejam:

- Arquivos, que são todos os conjuntos de dados que podem sofrer manipulação dentro do sistema.

- Processos, que são todos programas em execução, os quais são responsáveis pela mudança de estado do sistema.

- Portas, que são os caminhos disponíveis para a comunicação de dados entre os diversos processos do sistema.

Os arquivos e os processos residem em estações de trabalho e trocam informações através de uma rede de comunicação. A forma como as estações de trabalho e a rede de comunicação são estruturadas define a arquitetura do sistema distribuído. Todavia, o usuário não se preocupa com o sistema físico propriamente dito, salvo com seu custo, com a aparência de alguns de seus componentes e com o desempenho geral do sistema, ainda que este nem sempre seja determinado pelo seuhardware.

De qualquer forma, tem-se processos no sistema que utilizam serviços fornecidos por outros processos. Dependendo de especificidades geográficas ou características de desempenho necessárias, algumas estações de trabalho do sistema podem ser dedicadas à prestação de certos serviços especiais. As demais estações podem servir preferencialmente para processamento local, como um computador de uso exclusivo para determinado usuário, e ocasionalmente interagir, via malha de comunicação, com as demais estações que compõem o sistema distribuído. Há também o caso de estações sem disco, que servem apenas como terminais de servidores remotos e que dependem em tudo dos serviços prestados pela rede, inclusive para inicialização (boot ). Este

modelo é chamado de estação-servidor (wokstation-server ) e pode ser esquematizado como

apresentado na Figura 1.

O caso do modelo estação-servidor apresenta uma série de vantagens, como a possibilidade de realizar ao menos parte do processamento localmente. Desta forma, o volume de comunicação gerado no sistema é relativamente pequeno e o dimensionamento da malha de comunicação pode ser relaxado. Conseqüentemente, o custo do sistema é reduzido neste quesito. Por outro lado, o uso

Portas de Estações Servidores E s t a ç õ e s S e r v i d o r

(19)

de processamento localizado faz com que a maioria das estações estejam ociosas ao longo do tempo. Uma solução para este problema é concentrar todo o poder de processamento do sistema e deixar os usuários apenas com terminais, cuja inteligência se restrinja ao hardware / software

necessários ao funcionamento eficiente do terminal de vídeo e da interface com a rede de comunicação. Neste caso, todo o restante do processamento é fornecido por um conjunto de processadores com base na demanda real dos usuários do sistema. Este modelo é dito poço de processadores ( processor-pool) e pode ser esquematizado como mostrado na Figura 2.

Entretanto, se por um lado a utilização de um reservatório com processadores, no qual é realizado todo o processamento do sistema, otimiza o uso dos processadores, por outro lado, aumenta consideravelmente a sobrecarga na malha de comunicação. Resultados gerais mais adequados talvez possam ser obtidos por intermédio de um modelo híbrido, no qual há estações de trabalho com capacidade de processamento local as quais, formam um reservatório de processamento distribuído geograficamente. Os processos sendo executados em qualquer dessas estações podem migrar para outras estações que estejam ociosas ou com carga de trabalho menor. Esta migração deve ser controlada por alguma estratégia de compartilhamento de carga pré-definida para o sistema.

Terminais

Portas de

Servidores Poço de

processadore

(20)

Comunicação

Como o desempenho de um sistema distribuído está diretamente ligado à possibilidade de migração dos dados, sua rede de comunicação tem papel muito importante. Esta rede engloba elementos físicos utilizados na interconexão dos equipamentos e protocolos para disciplinar a comunicação entre os processadores.

A Comunicação pode ser feita ponto-a-ponto, quando se estabelece uma ligação direta entre um par de processadores, ou multi-ponto, quando um conjunto de processadores é interligado através de um barramento ou chaves eletrônicas.

Os barramentos são mais baratos, mas permitem apenas o compartilhamento no tempo. Já, as chaves, embora formem um sistema mais caro e complexo, possibilitam não somente a multiplexação no tempo como também no espaço.

As redes de comunicação locais são restritas ao âmbito de empresas e geralmente têm um raio de abrangência de alguns poucos quilômetros. Estas redes normalmente utilizam a interconexão por algum tipo de barramento e fundamentam sua comunicação em protocolos, como o padrão 802.X do IEEE, como é o caso das redes Ethernet, token bus, token ring, FDDI ( fiber distributed data interface) eDQDB (distributed queue dual buses).

Por outro lado, as redes dos serviços públicos de comunicação utilizam a ligação por chaves de barramentos cruzados ou de múltiplos estágios. Estas redes, incluem o ISDN (integrated services digital network ), o SMDS (switched multimegabit data service) e o ATM (asynchronous transfer  mode). O roteamento que no caso anterior é feito pela análise das mensagens que circulam no

barramento, neste caso é feito pela programação das chaves que compõem a rede.

A comunicação em sistemas distribuídos se dá em camadas, buscando propiciar a comunicação entre entidades de um mesmo nível ( peer-to-peer ). Por exemplo, usuários do sistema precisam

trocar mensagens para se comunicar e devem ter a impressão de estarem falando diretamente um com o outro. Entretanto, como a distância não permite eles fazem uso do sistema. Para tanto, sem que o usuário perceba, o serviço do sistema que o atende passa a mensagem desejada para uma máquina hospedeira, a qual estabelecerá um canal de comunicação com uma máquina remota, servidora do interlocutor, a qual, por sua vez, providenciará para que a mensagem chegue ao seu destino. Contudo, as máquinas também não são capazes de se comunicarem a distância. Para que isto ocorra elas devem utilizar portas de comunicação, as quais encapsularão as mensagens das máquinas servidoras e estabelecerão uma comunicação ordenada através do sistema físico de comunicação. Neste rápido exemplo introdutório pode-se notar que foram estabelecidos três níveis (ou camadas) de comunicação, quais sejam: o de troca de mensagens entre os usuários; o de comunicação entre as respectivas máquinas hospedeiras; e o de coordenação pelas portas do sistema de comunicação.

Mundo real Telefonemas Cartas

Sistemas de comunicação

computacional Orientando a conexão Sem conexão

Exemplo de aplicações Transferência de arquivos Divulgação do estado do sistema

Nível de rede circuito virtual Datagramas

Nível dehardware Chaveamento de circuito Chaveamento de pacotes

As estruturas em camadas referidas no parágrafo anterior são chamadas de protocolos de comunicação. Protocolos de comunicação são conjuntos de regras que regulam a troca de mensagens, para prover um fluxo de informação ordenado e confiável, entre os processos comunicantes. Nos protocolos, camadas inferiores fornecem serviços usados para comunicação

(21)

entre camadas imediatamente superiores. Os principais protocolos são, como foi dito anteriormente, o RM-OSI da ISO e o TPC/IP do DoD. A seguir eles são descritos mais detalhadamente.

O modelo de referência da ISO

Em 1977, sentindo a necessidade de padronizar a conexão de sistemas computacionais heterogêneos, a  International Standards Organization (ISO), através de seu comitê técnico de

processamento de dados (TC97), criou um subcomitê (SC16), para estudar o problema. No ano seguinte, o SC16 apresentou uma proposta, aceita pelo TC97 em 1979. Esta proposta foi chamada de reference model for open system interconnection (RM-ISO) e foi aprovado como padrão

ISO7498 em maio de 1983. Em setembro do ano anterior, o RM-OSI foi adotado como recomendação X.200 pelo CCITT. Este modelo é dividido em sete camadas, contemplando diversos níveis de abstração de um sistema distribuído, desde o nível físico até o de aplicações voltadas para o usuário. A seguir, apresenta-se uma descrição sucinta das sete camadas que compõem o RM-OSI.

A camada mais baixa do RM-OSI é a física. Ela é a responsável pela interface entre os nós da rede e o meio físico de transmissão. Portanto, nela existe a preocupação com a transferência de bits (unidade de dados desta camada) diretamente através de uma conexão física. Desta forma, há um interesse especial na definição das características elétricas, mecânicas e funcionais necessárias para a transferência adequada de informações. Algumas características elétricas consideradas são a amplitude, o período e a freqüência dos sinais, o esquema de modulação e o modo de operação usados. Dentre as características mecânicas estão o número de pinos usados nos conectores, o tamanho dos conectores e de seus pinos, bem como a distribuição destes naqueles. Já as características funcionais têm a ver com os procedimentos necessários para o estabelecimento e o encerramento de conexões, por exemplo. Resumindo: Na camada física a preocupação recai sobre as características elétricas, mecânicas e funcionais necessárias para ativar, manter e desativar conexões físicas para a transmissão de bits entre nós da rede.

A camada seguinte é a de enlace de dados. Uma vez que a camada física trata apenas da transmissão de seqüências de bits, a camada de enlace é a primeira do RM-OSI a dar alguma atenção ao significado de tais bits. Nesta camada, a unidade de dados é o quadro. Os quadros são compostos por conjuntos de bits, normalmente uns poucos milhares. A camada de enlace é a principal responsável pela transmissão confiável dos quadros. Para tanto, ela deve ser capaz de detectar e possivelmente corrigir erros que aconteçam eventualmente, o que é viabilizado pela inclusão de alguns bits de controle nas extremidades dos quadros, os quais permitem a identificação de seus limites e o tratamento dos erros. Como existe a possibilidade de perda de quadros durante a transferência, esta camada deve oferecer mecanismos que permitam o reconhecimento dos quadros corretos e a retransmissão dos incorretos e dos faltantes. Neste caso, como é possível a recepção de quadros duplicados, a camada de enlace deve estar apta a identificar esta situação. Em resumo: A camada de enlace de dados deve oferecer um serviço de transferência confiável de dados entre os nós da rede, suportada pela camada física subjacente.

A camada de rede é a terceira no RM-OSI. A função principal desta camada é controlar o funcionamento da malha de comunicação. Ela é responsável pelo estabelecimento e pela manutenção do fluxo de pacotes através da rede. Devido a uma falta de consenso no âmbito da ISO, foram adotados dois tipos de serviços oferecidos por esta camada, quais sejam: circuitos virtuais e datagramas. Como não há necessidade de uma ligação física direta entre os usuários, uma tarefa importante desta camada é o roteamento de pacotes. Outras questões relativas ao tráfego são o tratamento de congestionamentos, o controle da vazão e a contabilidade dos serviços. Congestionamentos ocorrem quando um nó da rede é forçado a trabalhar no seu limite de capacidade, causando um engarrafamento das informações que por ela trafegam. O controle de vazão refere-se ao controle do desequilíbrio entre as velocidades de transmissão de um nó e de

(22)

recepção de outro. A contabilidade deve-se à necessidade de contagem dos pacotes enviados pelos diversos usuários, de maneira a produzir informações que permitam a cobrança dos serviços prestados. Em suma: a camada de rede é responsável pelo controle das operações de comunicação da rede, incluindo o empacotamento de mensagens, o roteamento dos pacotes e o controle de fluxo. O RM-OSI tem como quarta camada a de transporte. Esta camada inicia uma mudança de ênfase da ISO. Inicialmente, preocupada com as funções de hardware e software necessárias para garantir a

transmissão adequada de pacotes, quadros e bits, a partir desta camada a ISO passa a dirigir sua atenção às funções mais voltadas à garantia de uma transferência de dados entre os usuários finais, sem que estes tenham que preocupar com detalhes de operação da rede em níveis mais baixos de abstração. A função básica desta camada consiste da eventual necessidade de divisão das mensagens oriundas da camada superior em pacotes e do envio destes à rede, garantindo sua transmissão adequada e sua chegada correta ao destinatário desejado. Nesta camada a ISO define apenas serviços orientados a conexão. Portanto, ela pode ser bastante simples se a camada de rede oferecer um serviço de circuitos virtuais, mas será bastante mais complexa se o serviço oferecido pela camada de rede for do tipo datagrama. Pode-se usar qualquer dos três tipos de correspondências entre as conexões de sessão e de transporte. Entretanto, tudo deve ser feito de modo que as camadas superiores fiquem isoladas das trocas inevitáveis na tecnologia de hardware

subjacente. A camada de transporte é a primeira realmente fim-a-fim, isto é, as camadas inferiores têm, digamos, consciência de que suas unidades de dados passam por vários nós intermediários antes de chegarem ao seu destino, já, do ponto de vista das camadas superiores, as mensagens vão diretamente da fonte ao destino, sem a intervenção de elementos intermediários. Sintetizando: a camada de transporte controla a transferência de dados do sistema-fonte ao sitema-destino, através do estabelecimento, da manutenção e da liberação de conexões bidirecionais entre um par de entidades de sessão, para aliviar as entidades das camadas superiores das tarefas de transporte de dados entre elas.

A camada seguinte é a de sessão. Nesta camada há uma maior preocupação com as aplicações propriamente ditas, do que com a mera comunicação. Esta camada administra a sessão, unindo e desunindo duas entidades para relacionamento. Para isto, verifica a autenticidade das entidades que desejam se comunicar. Desta forma, serve de interface entre os usuários e a rede. Controla a troca de dados, delimita e sincroniza as operações sobre estes dados e decide sobre o tipo de comunicação a ser usado (simplex, semi-duplex ou duplex). Em síntese: a camada de sessão organiza e sincroniza o diálogo e gerencia a troca de dados entre duas entidades da camada de apresentação.

A próxima camada na hierarquia do RM-OSI é a de apresentação. Esta camada ocupa-se da interpretação da sintaxe dos dados, transformando-os e formatando-os sempre que necessário, para resolver problemas de diferenças entre as sintaxes dos diversos sistemas interligados. Nesta camada são usadas técnicas de compressão de dados, para reduzir o número de bits transmitidos, e de criptografia, para aumentar a privacidade na transferência destes. Resumindo: a camada de apresentação visa gerenciar as estruturas de dados abstratas (como letras, números e símbolos) convertendo-as da representação interna ao computador, para aquela na rede e vice-versa.

A camada de aplicação é a mais alta do RM-OSI. Todas as outras camadas existem para dar suporte a esta. Seus serviços são diretamente observados pelos usuários. As entidades desta camada são   janelas que viabilizam a representação de cada usuário final, dentro da rede. As funções desta

camada são totalmente dependentes das aplicações. Alguns exemplos clássicos de aplicações são: - terminais virtuais: fazem a conversão de informações transferidas entre dois terminais de

modo a possibilitar sua legibilidade em ambos, independentemente de suas diferenças físicas;

- transferência de arquivos: faz a conversão do conteúdo dos arquivos transferidos entre dois equipamentos de forma a compatibilizar as diferenças de representação existentes, oferecendo mecanismos básicos para a manipulação de arquivos a distância, como abertura, edição e fechamento de arquivos;

(23)

- tratamento de mensagens: permite a preparação, disseminação (remessa e recebimento) e o armazenamento de mensagens ou arquivos, entre os usuários, incluindo-se neste serviço o correio eletrônico o teletexto e o facsímile; e

- Submissão remota de tarefas: serviço que permite submeter tarefas a máquinas diferentes, utilizando sistemas operacionais distintos, compartilhando recursos e capacidade de processamento, de forma transparente.

O modelo TCP/IP do DoD

Em dezembro de 1969 o departamento de defesa (DoD – Department of Defense) norte americano

colocou em operação a rede Arpanet. Inicialmente consistia de quatro nós, chamados de IMPs ( Inerface Message Processors). Originalmente, os IMPs eram minicomputadores Honeywell

DDP-516, com memória de 12k palavras de 16 bits. Atualmente, constitui-se de muitos milhares de IMPs espalhados pelo mundo todo. Como a Arpanet é anterior ao RM-OSI, ela não segue esta padronização. Contudo, ela possui protocolos que correspondem, aproximadamente, às camadas do modelo da ISO. Com o passar do tempo e com sua internacionalização, a Arpanet deu origem à Internet e os protocolos de comunicação nela utilizados passaram a ser conhecidos pela sigla TCP/IP, correspondente às duas camadas principais do conjunto de protocolos da Arpanet, como será visto em seguida.

O nível físico não é definido pela Arpanet pois baseia-se em ligações telefônicas alugadas. Vista em âmbito da Internet, sua camada física corresponde àquelas das redes locais a ela conectadas. O protocolo mais baixo, IMP-IMP, é uma mistura aproximada das camadas dois e três do RM-ISO, incluindo um mecanismo de roteamento bastante elaborado e um mecanismo para a verificação da recepção pelo IMP-destino, de cada pacote enviado pelo IMP-fonte, o que não existe no ambiente da ISO.

A camada de rede é chamada, na Arpanet, de IP (  Internet Protocol), sendo um serviço do tipo

datagrama, projetado para ligar um vasto número de redes locais e de longa distância. À camada de transporte corresponde o TCP (Transmission Control Protocol), que embora eqüivalha,

genericamente, ao modelo da ISO, pouco tem em comum com aquele, no que se refere a formatos e demais detalhes. As camadas de sessão e apresentação inexistem na Arpanet, já que sua falta nunca foi sentida nestes mais de 30 anos de funcionamento. Também, não existe uma camada de aplicação propriamente dita, como entendida no âmbito do RM-OSI. O que existe é uma série de serviços oferecidos por meio de vários protocolos bem estabelecidos, tais como: o ftp ( file transfer   protocol) para transferência de arquivos; o SMTP (simple mail transfer protocol) para correio

eletrônico; e o telnet (terminal emulation) para terminais virtuais. A Figura 3 mostra a arquitetura

(24)

aplicação apresentação sessão transporte rede enlace

física IEEE 802 X.25 outros

IMP IP TCP

ftp smtp telnet outras

RM-OSI da ISO TCP/IP do DoD

(25)

Aspectos de projeto

De modo geral, um sistema distribuído pode ser visto como um conjunto de processos que são executados de forma concorrente, cada um dos quais acessando um sub-conjunto de recursos do sistema por meio de um mecanismo que envolve a troca de mensagens através de uma malha de comunicação a qual, nem sempre, é confiável. A partir desta observação pode se identificar uma série de aspectos, que devem ser considerados durante o projeto desses sistemas.

O primeiro desses aspectos conduz à questão da identificação e da modelagem dos objetos no sistema. Tais objetos são os processos, os arquivos, a memória, os dispositivos periféricos, a rede de comunicação e os processadores. A cada objeto do sistema é associado um conjunto de operações que possibilita o acesso a ele. Para organizar tal acesso, a cada objeto é associado um processo, o qual fica de responsável pela manipulação do objeto. Esses processos que gerenciam o acesso aos objetos são as únicas entidades visíveis no sistema digital e são chamados de servidores dos respectivos objetos. Eles são ditos as únicas entidades visíveis, porque quando um processo qualquer precisa que algum serviço seja executado por outro objeto do sistema ele o solicita enviando uma mensagem de requisição ao servidor do objeto. Este recebe as requisições vindas de diversos processos do sistema, organiza-as e aciona o objeto adequado no seu devido tempo. Após a execução da tarefa solicitada, ele retorna a resposta ao processo que originou o pedido. Portanto, em um sistema digital há servidores de processos, servidores de arquivos, servidores de rede, servidores de impressão, e assim por diante.

Por outro lado, os objetos podem residir nas mais diferentes partes do sistema e a referência a cada um deles deve ser inequivocamente distinguida. A identificação dos objetos pode ser feita por nome, que é mais fácil e intuitiva, por endereços, que é mais precisa e contém informação estrutural embutida, e por serviços, que é pouco usada.

Como foi mencionado anteriormente, do ponto de vista dos elementos do sistema, a rede de comunicação pode ser abstraída por suas portas. Estas portas correspondem a endereços lógicos de objetos no sistema. Num nível de abstração mais elevado estes endereços lógicos são associados a nomes de objetos do sistema distribuído. Ao contrário, num nível de abstração mais baixo os endereços lógicos correspondem a endereços físicos dos objetos. Os processos responsáveis pelo mapeamento de nomes em endereços lógicos do sistema, e vice-versa, são chamados de servidores de nomes e os processos responsáveis pelo mapeamento entre endereços lógicos e físicos são ditos servidores de rede.

Outro aspecto relevante do projeto de um sistema distribuído diz respeito ao modo como é feita a coordenação da interação entre os objetos do sistema e como eles fazem para se comunicar. Para que eles possam interagir é necessário sincronizar o funcionamento dos objetos, caso contrário corre-se o risco de solicitar algo a determinado objeto quando ele não é mais capaz de executar a tarefa solicitada ou de receber informações de objetos quando esta não faz mais sentido para o objeto que a solicitou. O grande problema para a sincronização em sistemas digitais é a ausência de conhecimento sobre o estado global do sistema. Portanto, é necessário impor certos requisitos para a sincronização, tais como:

- Barreira de Sincronização: um conjunto de processos deve atingir um ponto de sincronização comum antes de continuar.

- Condição de coordenação: um processo deve esperar por uma condição que outro processo iterativo ajustará assincronamente, para manter uma ordem de execução.

- Exclusão Mútua: processos concorrentes devem ter acesso exclusivo a certos recursos compartilhados do sistema.

Além disto, o uso de mecanismos para prevenir e evitar bloqueios fatais, isto é, a ocorrência de uma espera circular de processos por objeto do sistema, mesmo atendendo aos requisitos de sincronização mencionados, pode não ser praticável. Às vezes, até mesmo a detecção e a recuperação do sistema após a ocorrência de um bloqueio fatal não é trivial, devido à falta de

Referências

Documentos relacionados

( ) Os analistas de investimento, seus cônjuges ou companheiros, possuem, direta ou indiretamente, qualquer interesse financeiro em relação à companhia emissora

(b) Valor a receber referente aos serviços de construção, ampliação, reforço e melhorias das instalações de transmissão de energia elétrica até o término

Com o fomento de políticas voltadas o contexto da Língua de Sinais nos cursos de Ensino Superior tem como fator de observação a prática docente e o uso de

a) Controle de saúde do colaborador/equipe, por meio de acompanhamento de sintomas diariamente. Caso algum colaborador apresente sintomatologia respiratória, indicar

Parágrafo segundo – a partir de agosto de 2014 para participar do plano de saúde, ou nele permanecer, o empregado autorizará expressamente o desconto em folha

Este artigo se propõe a mapear essa produção acadêmica, fazendo um balanço do que já foi publicado sobre as propostas curriculares da Secretaria de Estado de

Prefeitura e instituições representativas dos pescadores e institutos de pesquisa (Instituto de Pesca do Estado de São Paulo, Cecane/Unifesp) e grandes empreendedores