FLUX
O grupo de pesquisa Flux trabalha com sistemas de software e seus interesses (e trabalhos) incluem muitas áreas como sistemas operacionais locais e distribuídos, segurança de informações e recursos, programação, linguagens não tradicionais, compiladores, redes, sistemas baseados em componentes, engenharia de software e métodos formais.
Atualmente, os principais projetos desenvolvidos pelo grupo são:
• Sistema operacional de alta segurança Fluke/Flask
• Linguagem de definição de interface Flick (e compilador)
• OSKit
• Sistemas baseados em Java: sistemas operacionais, gerenciamento de recursos, redes ativas. Esse tópico inclui um projeto para prover noção de processo dentro da máquina virtual Java
Existe muito software produzido por esse grupo e disponível em sua página. Entre eles, destacam-se o sistema de redes ativas (ANTS), o compilador IDL Flick e o Quarks, que é um sistema portável e eficiente de memória compartilhada distribuída. Além disso, encontram-se disponíveis nessa página o OSKit e o kernel do Fluke. Como mencionado anteriormente, alguns projetos que foram encerrados pelo grupo também disponibilizam seus resultados, que são o Mach 4 e o Lites.
As pesquisas realizadas por esse grupo na área de sistemas operacionais e segurança não existem por acaso. Entre os órgão financiadores dos projetos encontram-se DARPA, NSF, Hewlett-Packard, Novell e IBM.
A maioria das publicações do grupo encontram-se na rede no formato PostScript.
O Sistema Operacional Fluke
O Fluke [2] é um sistema de arquitetura virtualizável baseado em software que permite a criação de máquinas virtuais recursivas, ou seja, máquinas virtuais rodando sobre máquinas virtuais, implementado eficientemente sobre um sistema microkernel e rodando sobre hardware genérico.
Sistemas do tipo microkernel tentam distribuir as diversas funções do sistema operacional horizontalmente, colocando-as no espaço do usuário na forma de servidores (como o Lites, por exemplo). Já sistemas baseados em máquians virtuais recursivas tradicionais agem de outra forma, decompondo o sistema operacional de forma vertical, já que implementam as funções do sistema operacional na forma de pilha de "virtual machine monitors", cada qual exporta uma interface de máquina virtual compatível com a interface sobre a qual está executando.
Assim, o sistema operacional Fluke combina os dois paradigmas, o microkernel e o de máquinas virtuais, implementando uma arquitetura virtualizável que não pretende emular um hardware perfeitamente, mas sim é desenvolvido em software e sobre um sistema operacional microkernel.
O microkernel executa diretamente sobre a máquina e a arquitetura virtualizável é implementada em software na forma de "nested process". Os monitores de máquinas virtuais, chamados de nesters, podem eficientemente criar máquinas virtuais adicionais (outros nesters), sobre as quais outros nesters ou aplicações podem ser executadas. Essa arquitetura forma um espécie de pilha de nesters, onde no topo é executada a aplicação.
Em máquinas virtuais tradicionais (baseadas em hardware), cada máquina virtual exporta uma interface idêntica à máquina sobre a qual está rodando, provendo assim proteção e independência entre as várias máquinas virtuais. Já em uma arquitetura como a do sistema Fluke (que é implementada sobre um microkernel), a interface exportada pelas máquinas virtuais (ou nesters) pode ser completamente diferente uma da outra.
Dessa forma, pode-se usar recursos tradicionais do sistema operacional, como o gerenciador de páginas, apenas quando necessário. Ao contrário de um sistema normal, onde, mesmo desabilitando seu uso, o recurso continua na memória, consumindo recursos sem ser utilizado. Essa independência é alcançada com a implementação de um nester responsável pelo gerenciamento de página. Assim, ele somente é usado quando necessário, ou seja, somente será colocado na pilha se for necessário.
Dessa forma, o sistema pode ser composto de acordo com a necessidade da aplicação que executará no topo. Isso garante uma grande flexibilidade sem que haja perda considerável de desempenho. Arquiteturas tradicionais de máquinas virtuais adicionam um overhead de 20% a 100% por camada acrescentada, enquanto a arquitetura implementada no Fluke apresentou índices de 0% a 35% por camada.