Buscar

Apostila de Projeto de Sistemas Operacionais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Estadual Paulista
Instituto de Biociências, Letras e Ciências Exatas
Departamento de Ciência da Computação e Estatística
 
 
 
 
 
 
 
 
 
Apostila de 
Projeto de Sistemas Operacionais 
 
 
 
 
 
 
 
 
 
 
 
Prof. Dr. Norian Marranghello 
Outubro de 2001 
norian@dcce.ibilce.unesp.br 
 
Rua Cirstóvão Colombo, 2265 – São José do Rio Preto, SP 
C.E.P.15054-000; Tel: +17 221 2215; Fax: +17 221 2203 
 
 
 2
Índice 
 
Índice..................................................................................................................................... 2 
Sistemas Distribuídos ........................................................................................................... 4 
Sistemas Centralizados.................................................................................................................5 
Sistema em Rede ...........................................................................................................................7 
Sistemas Distribuídos ...................................................................................................................8 
Sistemas Autônomos Cooperativos .............................................................................................9 
Algoritmos Distribuídos .............................................................................................................10 
Projeto de Sistema Operacional ......................................................................................... 10 
Eficiência ................................................................................................................................................ 10 
Flexibilidade ........................................................................................................................................... 11 
Consistência ............................................................................................................................................ 12 
Robustez ................................................................................................................................................. 12 
Transparência.......................................................................................................................................... 13 
Serviços ............................................................................................................................... 14 
Modelos de Arquiteturas .................................................................................................... 16 
Comunicação ...................................................................................................................... 18 
O modelo de referência da ISO .................................................................................................19 
O modelo TCP/IP do DoD..........................................................................................................21 
Aspectos de projeto ............................................................................................................. 23 
Modelo Cliente/Servidor..................................................................................................... 25 
Serviços de Tempo .............................................................................................................. 27 
Ramificações no Fluxo de Controle de Processos ............................................................ 30 
Mecanismos de Linguagem para Sincronização............................................................... 33 
Comunicação entre Processos....................................................................................................36 
Passagem de Mensagens ......................................................................................................................... 37 
Chamadas a Procedimentos Remotos ..................................................................................................... 40 
Transações .......................................................................................................................... 44 
Protocolo de aceitação em duas fases........................................................................................44 
Coordenação Distribuída ...........................................................................................................45 
Por disputa .............................................................................................................................................. 45 
Controlada............................................................................................................................................... 46 
Algoritmos de Eleição......................................................................................................... 48 
Acordo Distribuído ............................................................................................................. 49 
Falhas Bizantinas ............................................................................................................... 49 
Impossibilidade de Consenso .....................................................................................................51 
Consenso Distribuído Aleatório.................................................................................................51 
Escalonamento de Processos.............................................................................................. 53 
Modelos........................................................................................................................................53 
 3
Escalonamento Estático..............................................................................................................54 
Modelo de Precedência...............................................................................................................55 
Modelo de Comunicação ............................................................................................................57 
Custo de Computação.................................................................................................................57 
Custo de Comunicação ...............................................................................................................58 
Escalonamento Dinâmico...........................................................................................................58 
Algoritmos Genéticos ............................................................................................................................. 60 
Compartilhamento de Memórias Distribuídas ........................................................................61 
Arquiteturas NUMA ............................................................................................................................... 63 
Alocação, Migração e Cópia de dados ......................................................................................65 
Modelos de Consistência de Memória.......................................................................................66 
Sistemas de Memória Cache em Multiprocessadores..............................................................68 
Estruturas de Memórias Cache.................................................................................................69 
Protocolos de Coerência .............................................................................................................70 
Algoritmos de Gerenciamento de MCDs ..................................................................................71 
Localização de Dados .................................................................................................................72 
Sistemas de ArquivosDistribuídos............................................................................................73 
Implementação de Sistemas de Arquivos Distribuídos ...........................................................74 
Compartilhamento de Arquivos................................................................................................75 
Réplicas de Arquivos e Dados....................................................................................................77 
Operações de Leitura .................................................................................................................78 
Operações de Escrita ..................................................................................................................78 
Bibliografia ......................................................................................................................... 79 
 4
 
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: 
 5
- 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çosdo 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 
cujo oferecimento fora do núcleo seja muito caro ou difícil. Dentre tais serviços estão os ligados ao 
 6
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 
 7
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 compreenderpacotes 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 
 8
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. 
 
A transparência pode ser notada em vários aspectos, alguns dos quais são exemplificados a seguir. 
 9
- 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. 
 
 10
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. 
 11
 
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 desempenho 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 do UNIX. 
 
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 
 12
nada, é mais flexível. Todos os serviços prestados pelo núcleo de um sistema operacional micro-
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 
 13
processadores idênticos a este teria uma probabilidade de falhas de (0,02)4 = 24 x (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: 
 14
- 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 
necessaryequal) 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ência 
Paralelismo 
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. 
 
 15
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ários, processos 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 
 
 16
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 seu hardware. 
 
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 
dedicados 
E
s
t
a
ç
õ
e
s 
 
S
e
r
v
i
d
o
r
a
Figura 1 – Modelo Estação-Servidor 
 17
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 
dedicados 
Poço de 
processadore
Figura 2 – Modelo Poço de Processadores
 18
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) e DQDB (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 mensagensque 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 de hardware 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 
 19
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 
 20
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 tecnologiade 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; 
 21
- 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 
básica do modelo TCP/IP do DoD, em comparação com a RM-OSI/ISO. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 22
 
 
 
 
 
 
 
 
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 
Figura 3 – Comparação entre o RM-OSI da ISO e o TCP/IP do DoD 
 23
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 deveser 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 
 24
conhecimento sobre o estado global do sistema. Uma forma de contornar este problema é 
utilizando protocolos de entendimento. Tais protocolos usam algoritmos com troca de mensagens 
contendo informações sobre estados locais do sistema, para atingir um consenso sobre seu estado 
global. 
 
A comunicação no sistema, que em seu nível mais baixo se dá através de mecanismo de troca de 
mensagens, em seus níveis mais altos, para atingir a transparência desejada no sistema distribuído, 
lança mão de modelos como cliente/servidor e chamadas a procedimentos remotos. Estes modelos 
usam o conceito de solicitação de serviços a servidores do sistema em moldes semelhantes aos 
usados para fazer chamadas a rotinas, das quais recebem os resultados. 
 
Resolvida a questão do compartilhamento, ou da multiplicação de cópias dos objetos, vem à baila a 
questão de como gerenciá-los de forma controlada e como distribuir a carga de processamento pelo 
sistema. 
 
Como a memória está distribuída pelos processadores do sistema, deseja-se manter a transparência 
apresentando-a ao usuário como uma grande memória compartilhada sem sobrecarregar o sistema 
de comunicação de forma significativa. Além disto, os protocolos de comunicação utilizados 
devem manter a consistência dos dados compartilhados e a coerência dos dados para os quais 
existam várias cópias no sistema, sempre considerando que há uma migração dos processos pelo 
sistema. Por sua vez, a carga de processamento pode ser distribuída estática ou dinamicamente. 
 
No primeiro caso, a distribuição estática, é dita escalonamento e visa minimizar o tempo necessário 
para completar as tarefas de um conjunto de processos. O principal problema a ser equacionado é 
uma forma de reduzir este tempo, mantendo o mínimo de sobrecarga no sistema de comunicação. 
 
No segundo caso, a distribuição dinâmica, é dita compartilhamento de carga e visa maximizar o 
uso de um conjunto de processadores. O principal desafio aqui é ajustar os mecanismos que 
implementam a estratégia considerada mais adequada para efetuar a migração dos processos. 
 
Finalmente, há o aspecto de como proteger os objetos do sistema e garantir sua segurança. A 
segurança de um sistema distribuído está sempre ameaçada, porque o sistema é aberto, isto é, 
permite o acesso de vários usuários, em certos casos e com certas restrições, mesmo usuários não 
cadastrados podem acessar o sistema. Alguns usuários podem violar intencionalmente a segurança 
do sistema, causando problemas para os demais. Todavia, há também os problemas causados aos 
sistema pelo seu mau uso, não intencional, provocando falhas no sistema. O problema da 
ocorrência de falhas no sistema pode ser amenizado pelo emprego de objetos redundantes no 
sistema. Já a questão da segurança passa pela autenticação e autorização dos usuários do sistema. A 
autenticação requer a identificação correta de clientes, serviços e mensagens que circulam no 
sistema. A autorização tem a ver com o controle de acesso à rede física, controle este que é 
dificultado por lidar com computadores heterogêneos, sujeitos administrações de características 
diversas e, por conseguinte, usando modelos de segurança diferentes. 
 
 25
Modelo Cliente/Servidor 
 
O modelo cliente/servidor é um paradigma de programação, que representa as interações entre 
processos e estruturas do sistema. Este modelo pode ser usado para melhorar a estrutura do sistema 
operacional, movendo-se a maior quantidade possível de funções para níveis mais altos do sistema, 
reduzindo o tamanho do núcleo. 
 
Processos do sistema são chamados de clientes, quando usam serviços, e de servidores, quando 
fornecem serviços. Para pedir um serviço um processo cliente solicita-o a um processo servidor o 
qual, após realizar o serviço solicitado, envia a resposta ao cliente. Desta forma, o núcleo precisa 
apenas gerenciar a comunicação entre clientes e servidores. 
 
Como tudo o que o usuário percebe é a comunicação lógica entre cliente e servidor, este modelo 
facilita a implementação do conceito de transparência. 
 
O modelo cliente/servidor não é baseado no estabelecimento de uma conexão. Portanto, pode ser 
implementado sobre um canal de comunicação real por passagem de mensagens. Tudo que deve ser 
implementado no núcleo são as primitivas de comunicação send e receive, não importando se o 
serviço de transporte utilizado é ou não orientado a conexão, ou se a mensagem é transferida para 
um servidor na mesma máquina ou em uma máquina remota. 
 
A simplicidade deste modelo é tal que, para maior eficiência, pode ser implementado sobre um 
protocolo que corresponde apenas às três camadas inferiores do modelo OSI. Tamanha é a 
simplicidade do modelo que a própria resposta do servidor é usada como confirmação do 
recebimento da solicitação. 
 
As primitivas de comunicação podem ser classificadas segundo três critérios, quais sejam: o estado 
em que ficam os processos durante a transmissão de uma mensagem, a forma como as mensagens 
são disponibilizadas, e a confiabilidade do mecanismo de troca de mensagens. 
 
De acordo com o primeiro critério as primitivas podem ser classificadas em bloqueadoras, quando 
o processo fica paralisado durante a transmissão da mensagem, e não bloqueadoras, quando o 
processo fornece uma cópia da mensagem ao sistema de comunicação, por ocasião da solicitação 
do serviço, e segue seu processamento, enquanto o sistema de comunicação se encarrega de tratar 
da solicitação. 
 
De acordo

Outros materiais