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.
- Introdução
- Diferença entre versões
- Instalação
- Estrutura interna do Minix
- Compilando um kernel
- Comandos básicos do Minix
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:
- Short list of differences between 2.0 and 2.0.4: http://minix1.woodhull.com/pub/demos-2.0/VMWarePlayer/changes.txt
- Minix 3 - Improvements since V2: http://www.minix3.org/improvements.html
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:
- Booting Minix from LILO Linux Bootloader: http://minix1.woodhull.com/faq/lilomx.html
- Exchanging Data between Minix and Other OS File Systems: http://minix1.woodhull.com/faq/datxchng.html
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:
- CD-based Minix 2.0.3 distribution: http://minix1.woodhull.com/faq/minixcd08.html
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:
- Minix 2.0.4 Virtual Machine for VMWare Player: http://minix1.woodhull.com/pub/demos-2.0/VMWarePlayer/
- How to use VMware Player to create your own images: http://software.newsforge.com/article.pl?sid=06/05/16/1940214
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:
- Minix on the Bochs Emulator: http://minix1.woodhull.com/faq/bochs.html
- Minix on Bochs on Windows How-to: http://minix1.woodhull.com/faq/bxmxhowto.html
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:
- Minix on Qemu Step-by-step: http://minix1.woodhull.com/faq/qemumx.html
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:
- Lista completa dos comando disponíveis no Minix 2.0.4 (Minix Manual Pages): http://minix1.woodhull.com/current/2.0.4/wwwman/
- veiga
March 18th, 2008 at 2:46
Bah, tu tem um blog na tua página!! Bota massa!
Botemo!!
March 30th, 2008 at 18:55
Sim, estou usando para organizar os textos e dicas que eu tinha guardado! ;-)
Assim não guardo as coisas só pra mim!
abraço,
-veiga
April 29th, 2008 at 22:15
Oi, baixei o minux para VMware como no seu tutorial mas esta pedindo senha de root. poderia me informar ela? grato
April 30th, 2008 at 12:44
Olá,
Na verdade era para o root funcionar sem senha. Faz um teste com essa imagem aqui http://cluster.inf.ufrgs.br/~veiga/imagem.html e digita ENTER quando pedir a senha do root.
abraço,
-veiga
June 18th, 2008 at 20:47
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 ?
July 1st, 2008 at 20:48
Olá,
Não entendi oq você quis dizer com não querer mudar coisas de fonte.
abraço,
-veiga