# MOSIX

Mosix é um software feito para Linux que provê gerenciamento de clusters, multi-clusters ou clouds orientado à alta performance. Pode ser visto como um sistema operacional para multi-clusters que incorpora distribuição dinâmica da carga de trabalho.
Mosix é projetado como uma camada de software que provê aplicações em ambiente Linux sem que seja necessária uma modificação dessas aplicações, além de não precisar de bibliotecas especiais.
O algoritmo de descoberta de recursos provê cada nó do cluster com as últimas informações sobre recursos disponíveis e o estado dos nós. Baseado nestas informações e sujeitando as prioridades, o algoritmo pode, então, iniciar a realocação dos recursos entre os nós, melhorando o desempenho da aplicação.

## História
### Projeto MOS

O projeto MOS(Multicomputer OS) iniciou em 1977 como um projeto para pesquisas sobre migração de processos. Após testes realizados no prototipo de kernel foi possível estabelecer que mesmo com conexões lentas entre os nodos é possivel ganhar uma quantia significativa de desempenho.

### MOSIX 1

A primeira versão do Mosix funcionava baseada em SSI, deixando transparente para o usuário a migração e alocação de processos. Também suportava sistemas de arquivos escaláveis. Entretanto essa versão somente suportava single-clusters.

### Open MOSIX

O Open MOSIX é uma extensão do projeto Mosix, baseado no GPLv2, iniciado em 10 de fevereiro de 2002, coordenado pelo Ph.D Moshe Bar, para manter os privilégios desta solução Linux para cluster sendo disponível com software de código aberto.

### MOSIX 2

Em 2006 foi lançado o Mosix 2, que ganhou suporte para multi-clusters e Clouds(2009). Foi projetado para alto-desempenho, especialmente para aplicações com uso moderado de I/O.
A versão atual do Mosix 2 roda em clusters, multiclusters, clouds e suporta GPUs.

## Características

As características a seguir são aplicaveis ao Mosix2:
* Single-Systems Image:
** Os usuários podem fazer login em qualquer nó e não precisam saber onde os seus programas são executados.
** Descoberta automática de recursos.
** Distribuição dinâmica de carga de trabalho por processo de migração.
* Reconhece dois tipos de processos:
** Processos Linux - Não devem/podem ser migrados.
** Processos Mosix - Aplicações que podem se beneficiar da migração, são aplicações executáveis comuns mas são executadas em um ambiente que provê a migração do processo entre nodos.
* Camada de virtualização de SO:
** Provê o suporte para processos migrados(direciona Syscalls ao nodo-home).
** Processos migrados rodam em sandbox.
* Suporte à fila de processos.
* Método de prioridade, que garante que processos prioritários sejam executados preferencialmente.

## Ferramentas

O Mosix provê uma série de ferramentas para gerenciamento do cluster:
* Monitores:
** mon – mostra informações básicas em modo texto sobre os recursos(processamento, memória,...)
** mmon - além das informações do mon, mostra informações complementares, como usa da rede.
* Aplicativos:
** mosrun - é a ferramenta para executar os processos no ambiente Mosix:
*** Pode ser determinado em qual nodo o processo será executado.
*** Pode ser determinado o valor máximo de memória que o processo poderá utilizar.
*** Permite colocar o processo em uma fila(compartilhada por todos os nodos).
** mosps - ferramenta para verificar quais processos estão rodando no cluster.
** mosq - visualização e controle da fila:
*** Permite rodar processos que estão esperando.
*** Permite remover processos que estão esperando.
*** Permite mudar a prioridade de processos.
** migrate
*** Permite a migração dos processos entre os nodos.
*** Permite o congelamento de processos.
*** Permite a criação de checkpoints de processos.

## Instalação

O Mosix pode ser obtido no site oficial do desenvolvedor (http://www.mosix.org), onde está disponível uma versão para estudos com suporte para até seis nodos.
Deve-se escolher a versão do Mosix que dê suporte ao kernel do Sistema Operacional Linux no qual será instalado.
Depois da descompactação do pacote baixado, é necessário recompilar o kernel(executando./mosix.install) e configurar o boot para que carregue a imagem do novo kernel.
O processo de compilação do kernel instala e configura os serviços necessários para o funcionamento do cluster, não necessitando de configurações adicionais de serviços de sistema.
Após a instalação do Mosix em todos os nodos, basta configurar o cluster utilizando o comando mosconf.