Notas de Aula - MAC 5755 - Sistemas Operacionais
Distribuídos
Aula 22 - 19/11/2003
SODs Orientados a Objetos: Spring, 2K e Gaia
Spring
- Sun Microsystems (1992 -> 1993)
- Trouxe uma série de inovações que foram
posteriormente
incorporados nos sistemas operacionais da Sun: Solaris e Solaris-MC.
- O primeiro SOD totalmente orientado a objetos
- a interface com as aplicações é OO
- a comunicação entre os processos locais e
remotos é OO
- a estrutura interna do SO é OO
- Arquitetura de Microkernel
- fonte: The Spring Nucleus: A Microkernel of Objects
(1993).
Graham Hamilton and Panos Kougiouris. USENIX.
- cada nó executa só duas pequenas componentes em
modo
protegido: VM manager e nucleus (o microkernel)
- sistema de arquivos, paginação, nomes etc.
são
executados como serviços no nível do usuário
- Objetos
- componentes do sistema são objetos cujas interfaces
são
definidas através de uma IDL (note que CORBA não existia
ainda)
- RMI pode ser implementada de diversas formas: mem.
compartilhada,
IPC, soquetes etc.
- Segurança (proteção) é a
propriedade mais
importante.
- Requisitos de segurança na chamada a objetos:
- não se deve fazer uma autenticação
completa do
cliente a cada chamada
- não se deve definir estaticamente quais clientes
podem usar
cada objeto
- se quiser, um cliente deve poder repassar os seus direitos
de acesso
para outro cliente
- Solução óbvia: capacidades (capabilities)
- Elementos básicos
- Doors (IPC)
- um domínio D1 pode criar uma porta de entrada para si
mesmo
e passá-la para outro domínio D2
- um thread executando num domínio D2 passa por uma
porta (
door) e vai para outro domínio D1
- se quiser, D2 pode repassar a porta para outro
domínio D3
- um domínio não consegue criar uma porta para
um outro
domínio que não si mesmo
- associados a uma porta estão um PC no espaço
de endereçamento destino e um número inteiro indicador de
qual método deve ser
executado no domínio destino.
- em outras palavras: uma door é uma
espécie de
RPC implementada dentro do núcleo do SO
- o nucleus conta o número de referências a
portas e destroi a porta quando a conta chega a 1
- Tipos de doors
- rápida (fast-path): todos argumentos
são tipos
simples e a soma é menor do que 16 bytes
- baunilha: <= 5KB de dados e algumas poucas portas: o
nucleus copia
os dados
- a granel: > 5KB, usado quando se passa muitas portas,
páginas
e tabelas como parâmetro, a cópia é feita pelo
sistema de memória virtual usando remapeamento da memória
- Desempenho da porta rápida:
- 60 instruções da SPARCv8 para entrar numa
porta
- 40 instruções para retornar de uma porta
- Threads e Shuttles
- opções de design
- fazer com que um único thread possa percorrer
vários
domínios e até mesmo várias máquinas
- quando um thread passa por uma porta, um outro thread no
outro domínio continua a sua execução e o primeiro
fica bloqueado até que o outro thread volte pela porta
- a segunda opção foi a escolhida por ser um
pouco mais
fácil de implementar e por permitir um controle mais fino do
sistema
(há mais threads, então podemos operar neles de forma
individual)
- para agrupar esses threads inter-relacionados, criou-se o
conceito
de shuttles, que se tornou a unidade de escalonamento do
núcleo
- Falhas em chamadas
- quando um domínio servidor morre, todos os shuttles
que
entraram por suas portas, saem das portas com um código de erro
- quando um cliente morre, o shuttle não
é interrompido imediatamente: ele continua executando até
o momento no qual ele retorna
pela porta e daí é redirecionado para o nucleus que neste
instante
o destroi.
- além disso, há um bit de alerta no shuttle
que
é setado quando um domínio no thread inicial morre. Os
outros
threads podem escolher olhar ou não para esse bit e abortar a
sua
execução se for o caso.
- Caso interessante: se um domínio na metade do caminho
de um shuttle morre. Cria-se um novo shuttle que avisa
o chamador imediatamente que a chamada falhou; o shuttle antigo
transmite o alerta
aos chamados.
- subcontracts
- precursor de middleware reflexivo
- flexibilização da RMI: define ganchos para
plugar-se os mecanismos de marshalling, transporte, etc.
- limitação: o servidor define estaticamente o
que é ligado aos ganchos e todos as chamadas de todos os
clientes usam a mesma configuração estática.
- Experimento interessante em 92: implementaram o UNIX em cima do
Spring rodando em espaço do usuário. Esse UNIX era capaz
de executar todos os utilitários (make, ls, grep etc) e o
XWindows.
- O Sistema de Arquivos do Spring foi também muito inovador
com
sua estrutura orientada a objetos e diferentes possibilidades de
configuração
- Artigos interessantes (nota: eles contém muito mais
informações do que você precisa)
- Campbell, Univ. de Illinois em Urbana-Champaign (1997 -> 2001)
- Motivação: construir um Choices distribuído
para
a Internet
- Abordagem: middleware-level OS ou meta-OS
- Microkernel otimizado:
Off++ (não incorporado ao 2K por falta de tempo)
- Princípios básicos:
- Problema 1: manutenção de múltiplas
contas por
usuário em ambientes e máquinas diferentes
- Solução: usuário reside na rede (Network-Centric
User)
- Problema 2: heterogeneidade do HW e do software
- Solução: implementação como
middleware
- Problema 3: plataformas de middleware existentes não
são flexíveis
- Solução: middleware reflexivo (
dynamicTAO
,
OpenORB
, LuaORB )
- Problema 4: plataformas de middleware são muito pesadas
- Solução: ORBs configuráveis muito
pequenos (
LegORB e UIC CORBA
)
- Problema 5: configuração de sistemas é
muito
penoso e caro
- Solução: configuração
automática
- Referência básica:
Gaia
- Campbell, Univ. de Illinois em Urbana-Champaign (2000 ->)
- Motivação: estender as idéias do 2K
para
computação ubíqua; um SO para espaços
ativos.
- Mark Weiser: cunhou o termo Computação Ubíqua
- Em inglês: Ubiquitous Computing. Posteriormente,
IBM criou sinônimo por motivos de marketing (ubiquitous é
difícil de pronunciar): Pervasive Computing.
- Alguns pesquisadores fazem distinção entre os dois
termos mas quase sempre são tratados como sinônimos.
- Arquitetura:
- Referências:
Outros projetos de Computação Ubíqua
Próxima Aula
Aula Anterior
Página de MAC 5755
Página do Fabio
Página do DCC