Sistemas Distribuídos
Introdução
Características
Paralelismo
Transparência
Gerenciamento
Aplicações
Os tópicos a serem examinados
podem ser encontrados nos seguintes capítulos de livros:
Modern
Operating Systems, Tanenbaum, cap. 9 em diante
Operating
Systems Concepts, Peterson/Silberschatz, caps. 12, 13 e 14
Outros bons livros de sistemas
operacionais, nos capítulos sobre sistemas distribuídos
1. Introdução
Para fechar o conteúdo dessa
disciplina temos que voltar às suas origens, ou seja,
computação de alto desempenho e baixo custo. Como foi
dito no início, isso pode ser obtido com o uso de sistemas
distribuídos, que nada mais são do que conjuntos de
máquinas operando em rede. Daquela definição
passamos, durante o semestre, ao estudo dos dois componentes básicos
desses sistemas, que são as redes de computadores e os
sistemas operacionais.
Nesse capítulo examinaremos como
usar esses componentes em conjunto para obter um sistema distribuído.
Isso implica em examinar como os mecanismos de gerenciamento de um
sistema operacional devem ser modificados se o seu objeto de
gerenciamento envolver uma rede de computadores. Pela sua
complexidade, o estudo detalhado deste tópico fica para o
curso de Projeto de Sistemas Operacionais, bastando nesse
momento uma revisão rápida desses sistemas.
2. Características
Um sistema distribuído é
mais do que uma rede com servidores espalhados pela mesma (como
algumas vezes é dito). Ele envolve certas características
que não aparecem numa rede comum, como:
Transparência,
que é a característica de livrar o usuário de
qualquer conhecimento sobre como o ambiente executa suas tarefas;
Processamento paralelo, que
é a capacidade do sistema em oferecer multiprocessamento
efetivo caso o usuário necessite (o que é o necessário
para computação de alto desempenho), possivelmente sem
o conhecimento do usuário sobre isso.
3. Paralelismo
O paralelismo num S.D. é dito de
grão largo ou, mais precisamente, fracamente acoplado. Isso
significa que o acoplamento (pontos de troca de informação)
entre os processos é reduzido. Essa característica vem
como consequência de o processo de troca de informações
na rede ser bastante lento, sendo no máximo 100 Mbits/s em
Ethernet, ou 320ns por palavra (considerando atraso zero no protocolo
de rede e que seja possível transmitir apenas 4 bytes, o que é
claramente um absurdo), contra 30ns no acesso a uma palavra na
memória.
Essa lentidão faz com que se
evite ao máximo a troca de informações entre
processos, ou como se diz, que o grão de execução
sequencial seja mais largo.
Técnicas de como realizar o
processamento paralelo se agrupam em modelos mestre-escravo,
bag-of-tasks e interacting-peers, sendo que sua
programação envolve basicamente a construção
de processos que interagem por mecanismos de exclusão mútua
e sincronismo. O estudo detalhado desses mecanismos é feito no
curso de Programação Concorrente.
4. Transparência
O conceito de transparência é
o mais importante em um sistema distribuído. Como dito há
pouco, transparência implica em o usuário não
precisar saber como o sistema trabalha, o que, num sistema
distribuído, implica em vários tipos de transparência,
como por exemplo:
execução,
quando o usuário não sabe em que máquina o seu
programa está executando. Isso ocorre graças ao
conceito de migração de processos, em que o sistema
move programas (e/ou dados) de uma máquina para outra
tentando obter um melhor balanceamento de carga, desempenho, ou
mesmo a viabilização de execução (por
falta de recursos locais);
acesso,
em que o usuário acessa o sistema de forma equivalente,
independentemente do ponto em que esteja fazendo isso;
paralelismo, quando o
próprio sistema decide sobre a conveniência ou não
de se paralelizar a execução de uma tarefa.
5. Gerenciamento
Um sistema distribuído apresenta
restrições ao seu gerenciamento que não estão
presentes num sistema operacional convencional. Como mencionado, o
estudo mais detalhado de um S.O.D. ocorrerá em Projeto de
Sistemas Operacionais. Entretanto, precisamos indicar aqui algumas
dessas restrições, separadas por módulos de
gerenciamento:
Gerenciamento
de processos - precisa levar em consideração o
fato de que os processos por ele controlados estão em
máquinas distintas, exigindo mecanismos mais complexos para o
controle de exclusão mútua e sincronismo (pela
impossibilidade de uso de memória compartilhada), além
de mecanismos para balanceamento de carga entre as máquinas e
migração de tarefas;
Gerenciamento
de memória - precisa cuidar do fato de termos a
possibilidade de compartilhamento de informações entre
memórias distintas, o que dificulta enormemente o
gerenciamento das caches distribuídas, apenas para
citar uma complicação;
Gerenciamento
de E/S - que não é muito diferente do
convencional, pois é possível imaginar a rede (e tudo
que é acessível através dela) como um
dispositivo de E/S. O único problema é controlar
dispositivos diretamente conectados à rede (impressoras com
placas de rede, por exemplo), mas mesmo esse é de simples
solução;
Sistema de arquivos - como
agora envolvem arquivos em várias máquinas, temos
problemas na localização desses arquivos e na
manutenção de sua consistência se houverem
múltiplas cópias (réplicas) do mesmo.
6. Aplicações
Além das aplicações
tradicionais de alto desempenho, sistemas distribuídos podem
ser (e são) usados em sistemas de bancos de dados (os chamados
SBDD), de automação e controle (tempo-real e redes de sensores), imagens,
etc.
Não examinaremos tais aplicações
aqui, mas é importante mencionar que o uso de SBDD, STRD,
etc., tem aumentado significativamente nos últimos anos,
especialmente com a introdução maciça de
clusters de estações e arquiteturas dedicadas
(Beowulf, por exemplo), além de grades e cloud computing, o que indica que o mercado de trabalho
para profissionais com esse tipo de conhecimento (e esses são
raros) deve aumentar bastante.
Dentro da ênfase de sistemas de
computação esse conhecimento vem dos cursos de Projeto
de Sistemas Operacionais, em que se examina como gerenciar um
S.O.D.; Redes de Computadores, que examina os detalhes de um
protocolo de redes e seu projeto e gerenciamento; Arquiteturas e
Organização de Computadores, em que são
vistos os aspectos organizacionais de uma máquina
(convencional ou não-convencional) e como ela pode ser usada
mais eficientemente; e Programação Concorrente,
com o estudo de técnicas de construção de
programas paralelos e cooperativos.
Outros cursos, como os de Sistemas de
Tempo-Real, com o exame das características necessárias
ao controle de processos que demandem execução sob
restrições de tempo; Modelagem de Sistemas, em
que se estudam técnicas para a construção de um
modelo computacional para um sistema real; e Técnicas de
Simulação, que trata do estudo de como modelos
podem ser simulados para a análise e projeto de sistemas, são
considerados acessórios ao corpo central da ênfase, mas
igualmente importantes para a formação mais completa do
profissional de sistemas de computação.
|