Brincando com o Minix


O Minix é um sistema operacional gratuito, com o código fonte disponível e compatível com a versão 7 do UNIX. Minix foi desenvolvido por Andrew Stuart Tanenbaum (com uma grande contribuição de Bruce Evans), originalmente para compensar a proibição da AT&T contra o estudo de SO baseado no código do UNIX e prover uma ferramenta de ensino para seus alunos. Vale citar que Minix foi escrito do “zero” e apesar de ser compatível com Unix, não contém nenhum código da AT&T e por isso pode ser distribuído livremente.

Este texto tem como objetivo obter informações para a utilização de Minix em um curso de sistemas operacionais. TODOS os processos de compilação, instalação e testes descritos neste relatório foram verificados na prática.

Diferença entre versões

Minix 1 e 2 são entendidos como ferramentas de ensino. Na versão 3, Minix adiciona um novo objetivo, se tornar usável como um sistema sério para computadores embarcado e com recursos limitados e para aplicações que requerem uma grande confiabilidade.

O Minix 3 é um novo sistema operacional open-source projetado para ser altamente confiável, flexível e seguro. Esta nova versão é, de certa forma, baseado nas versões anteriores do Minix, mas é fundamentalmente diferente em muitos pontos. Entre as novas funcionalidades da versão 3, pode-se citar: adição de suporte a rede via TCP/IP, inclusão de X Window System, o kernel foi reescrito e reduzido em 4000 linhas de código, suporte completo a multiprogramação e multiusuário, device drivers executam como processos de usuário e inclusão de vários novos programas.

A versão 2 do Minix é descrita na segunda edição do Livro “Operating Systems: Design and Implementation 2nd Edition” (OSDI 2) de Andrew S. Tanenbaum e Albert S. Woodhull. Para estudar a versão é necessário a terceira edição do livro. Este relatório foi escrito baseando-se no OSDI 2 e a versão do Minix utilizada na maioria dos testes é a 2.0.4.

Mais Informações:

Instalação

Esta seção descreve o processo de instalação/utilização de Minix em três cenários diferentes: nativamente em um computador, a partir de um Live CD e utilizando emuladores.

Nativamente no computador

O processo de instalação do Minix 2 nativamente em um computador é descrito em http://minix1.woodhull.com/current/2.0.4/wwwman/man8/usage.8.html.

Também é possível utilizar Minix em um computador que possui outras sistemas operacionais instalados, como por exemplo Linux. Basta, para isso, adicionar a partição bootável do Minix no LILO.

Mais informações:

Live CD

Tanto a versão 2 quanto a versão 3 do Minix possuem distribuição Live-CD. O Live CD do Minix 2.0.3 pode ser obtido em http://studia.elka.pw.edu.pl/prog/minix/download/m203CD08iso.gz. O Live CD do Minix 3 pode ser obtido em http://www.minix3.org/download/index.html (escolha a opção IDE CD-ROM).

Mais informações:

Usando emuladores

Uma outra opção é a utilização de emuladores. A vantagem de usar um emulador é a possibilidade de lançar um diferente sistema operacional, realizar alterações no seu código e depura-lo sem a necessidade de reiniciar o computador. A seguir demonstra-se como utilizar Minix com os emuladores QEMU, BOCHS e VMWare.

VMware

VMware Workstation é um programa de virtualização que permite a criação e execução de múltiplas máquinas virtuais em um mesmo computador. Uma máquina virtual é um computador com configuração de hardware e sistema operacional definido em software. VMware Workstation é um software comercial que está disponível para diversos sistemas operacionais, incluindo Windows e Linux.

VMware Player é uma versão limita, porém gratuita, que permite a execução e modificação de uma máquina virtual previamente criada por VMware Workstation. A última versão pode ser obtida em http://www.vmware.com/download/player/. Descompacte o pacote e execute o script de instalação. Procure aceitar os valores default. A versão para Windows contém um wizard de instalação bastante intuitivo.

  $ tar xzf VMware-player-1.0.2-29634.tar.gz
  $ cd vmware-player-distrib
  # ./vmware-install.pl

Uma máquina virtual contendo Minix 2.0.4 pode ser obtida em http://minix1.woodhull.com/pub/demos-2.0/VMWarePlayer/minix204vmwp01.zip. Descompacte o arquivo para criar um diretório minix204_32MB_512MB. Dentro deste diretório, o arquivo README.txt descreve como iniciar o Minix dentro do VMWare. nenhuma configuração especial é necessária. Recentemente, também foi disponibilizada uma máquina virtual com a versão 3.1.1 do Minix (http://www.minix3.org/download/minix3_1_1_small_vmware_256MB_1GB.zip). No Windows, basta carregar o .vmx.

  $ unzip minix204vmwp01.zip
  $ cd minix204_32M_512MB

Executar VMware Player e carregar a máquina virtual do Minix:

  $ vmplayer

Mais informações:

BOCHS

Bochs é um emulador de PC IA-32 (x86) disponível para Windows e Linux. A última versão de Bochs pode ser obtida em http://bochs.sourceforge.net/ (neste exemplo, utilizou-se a versão 2.2.6).

  $ tar xvfz bochs-2.2.6.tar.gz
  $ cd bochs-2.1
  $ ./configure
  $ make
  # make install

Após a instalação do emulador Bochs, realizar o download da imagem do Minix 2.0.4 disponível em http://minix1.bio.umass.edu/pub/contrib/mx204bx01.zip.

  $ unzip mx204bx01.zip
  $ cd minix204
  $ bochs -q -f minix.bxrc

Mais informações:

QEMU

QEMU é um emulador genérico e open source que permite emular um sistema completo (por exemplo, um PC), incluindo o processador e vários periféricos. A última versão de QEMU pode ser obtida em http://www.qemu.com/ (neste exemplo, utilizou-se a versão 0.8.2).

  $ tar xzf qemu-0.8.2-i386.tar.gz -C /

Após a instalação do emulador QEMU, realizar o download da imagem do Minix 2.0.4 (mesma imagem do BOCHS, disponível em http://minix1.bio.umass.edu/pub/contrib/mx204bx01.zip).

  $ unzip mx204bx01.zip
  $ cd minix204
  $ qemu -m 16 -hda minix.img -hdachs 200,16,63

Mais informação:

Estrutura interna do Minix

Minix é estruturado em quatro camadas, cada uma com uma função bem definida. A camada 1 trata todas as interrupções e traps, realiza escalonamento e provê, para todas as camadas superiores, um modelo de processos independentes que se comunicam através de mensagens. A parte de tratamento de interrupções em mais baixo nível é escrita em assembly e todo o resto em C.

A camada 2 contém os processos de E/S (I/O tasks), um para cada tipo de dispositivo. Estes processos equivalem aos drivers de dispositivos, comuns em outros SOs. Todas as I/O tasks da camada 2 são ligadas ao código da primeira camada formando um programa binário único, chamado kernel.

A camada 3 contém os processos que provém serviços úteis aos processos de usuário como, por exemplo, gerencia de memória (MM), sistema de arquivos (FS), rede, etc. Finalmente, a camada 4 contém todos os processos de usuário como shells, editores, compiladores e demais programas de usuários.

Para mais informações:

  • Livro OSDI 2: páginas 93 e 94.

Gerencia de processador (escalonamento)

O gerenciamento do processador é feito usando um sistema multinível de filas contendo 3 filas, uma para as I/O tasks, uma para os servidores e outra para os processos de usuário. Os processos das duas primeiras camadas executam até bloquear, isto é, não podem ser preemptados pelo clock. Já os processos da terceira camada são escalonados usando round robin. Tasks possuem uma maior prioridade, seguidas dos servidores (gerenciador de memória e sistema de arquivos). Os processos de usuário são os que possuem a menor prioridade.

A cada tick do clock, o escalonador verifica se o processo em execução é um processo de usuário que já executou por mais de 100 msec. Neste caso, o escalonador escolhe um novo processo que esteja esperando pela CPU e move o processo que estava executando para o fim da fila. Se não existir nenhum processo pronto para ser executado nas filas, o processo IDLE é escolhido.

Para mais informações:

  • Livro OSDI 2: página 140.

Gerencia de memória

Sistema de arquivos

Compilando um kernel

O código fonte de Minix está localizado no diretório /usr/src. Após alguma modificação no código, é necessário recompilar e criar um novo kernel. Para compilar:

  # cd /usr/src/tools
  # make

Se foram realizadas modificações no gerenciamento de processos, também é necessário recompilar o comando ps para exibir corretamente os processos no novo ambiente.

  # make ps
  # cp ps /usr/bin
  # chown root /usr/bin/ps
  # chmod 4755 /usr/bin/ps

Nesse ponto o kernel apenas foi compilado, agora é necessário gerar e instalar o a imagem do kernel.

  # make hdboot

A imagem do kernel é armazenada no diretório /minix. Cada vez que um kernel compilado, uma cópia da imagem é armazenada neste diretório. Quando o computador for reiniciado, Minix irá carregar a versão mais nova (último kernel compilado).

  # ls /minix
  .
  ..
  minix
  minix20r0
  minix20r1

Comandos básicos do Minix

A idéia inicial do Minix era ser um clone do Unix. Desta forma, os comando básicos do Minix são os mesmos disponíveis em sistemas Unix como, por exemplo, no Linux. Os dois principais editores de arquivos do Minix são vi e elle (ELLE Looks Like Emacs). Um manual de referencia para o vi pode ser obtido em http://drumlin.thehutt.org/vi/.

A seguir são mostrados alguns comandos Minix/UNIX necessários para começar a utilizar o sistema.

Criar um diretório:

  $ mkdir directory name

Acessar um diretório:

  $ cd directory name

Listar o conteúdo do diretório corrente.

  $ ls -l

Apagar um arquivo:

  $ rm filename

Compilar um programa:

  $ cc hello.c
  $ ./a.out  # ou
  $ cc -o hello hello.c
  $ ./hello

Mudar as permissões de um arquivo:

  # neste caso, adicionar permissão de execução a um arquivo
  $ chmod +x filename

Executar um programa:

  # em background
  $ ./filename&  # em foreground
  $ ./filename

Executar um shell script:

  $ sh filename

Exibe estado e PID dos processos em execução:

  $ ps -x

Matar um processo:

  $ kill pid

Para mais informações:

– veiga

6 comments

  1. Arthur

    Oi, baixei o minux para VMware como no seu tutorial mas esta pedindo senha de root. poderia me informar ela? grato

  2. Daniel

    Então cara….eu tava precisando fazer alguma alteração no Kernel do Minix.
    Você poderia me ajudar ?
    Só não gostaria de mudar coisas de fontes
    O que você sugere ?

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>