# MINIX

O Minix é um sistema operacional Unix-like (semelhante ao UNIX), escrito em linguagem C e assembly. Ele é gratuito e com o código fonte disponível.

## Características

* Multitarefa (múltiplos programas podem correr ao mesmo tempo).
* Funciona em 286, 386, 486, Pentium.
* Suporta memória estendida (16MB no 286 e 4GB no 386, 486 e Pentium ou superior).
* Porta RS-232 com emulação de terminal, kermit, zmodem, etc.
* Máximo de três utilizadores em simultâneo.
* Chamadas de sistemas compatíveis com POSIX.
* Escrito em linguagem C (11.800 linhas) e Assembly (800 linhas) (versão 1.0 de 1987) (SO, utilitários, bibliotecas etc.).
* Compilador ANSI C.
* Shell funcionalmente idêntico ao Bourne shell.
* Rede TCP/IP.
* 5 editores (emacs subset, vi clone, ex, ed, and simple screen editor).
* Mais de 200 utilitários (cat, cp, ed, grep, kermit, ls, make, sort, etc.).
* Mais de 300 bibliotecas (atoi, fork, malloc, clock, read, stdio, etc.).
* O sistema funciona apenas em modo de texto.
Foi organizado em camadas, onde as duas primeiras formam o núcleo:
* Capturar interrupções e traps, salvar e restaurar registradores, agendar as demais funções
* Processos de entrada/saída.
* As tarefas de entrada/saída são chamadas drivers de dispositivos;
* Contém processos que fornecem serviços úteis ao usuário;
* Existem num nível menos privilegiado que o núcleo;
* Shell, editores, compiladores, etc.

## História

Andrew S. Tanenbaum criou na Vrije Universiteit em Amsterdam para explicar os princípios dos seu livro-texto, "Operating Systems Design and Implementation" de (1987). Um abreviado das 12.000 linhas de código do Kernel, gestor de memória e sistema de arquivo do MINIX 1.0 estão no livro. Prentice-Hall também libertou o código fonte MINIX em disquetes com um manual de referência. MINIX 1 possuia um sistema de chamada compatível com a Sétima edição do UNIX.

## Hardware requerido

O MINIX pode funcionar com quantidades baixas de memória e disco rígido. O MINIX 3 pode ser usado com apenas 16 MB de memória RAM e 50 MB de disco rígido, mas para instalação de outros software o recomendável é 600 MB de HD. É possível testar pelo Live CD, funcionando sem necessidade de instalação no HD.

## Funcionamento

Processos são entidades independentes, cada um com suas permissões de acesso, e têm atribuídos propriedades como o id do usuário que o criou (UID) e do grupo (GID). Grande parte de sua execução se processa em user-mode, quando o processador não admite a execução de instruções privilegiadas, mas em certos instantes (durante uma chamada de sistema), ele executa em modo núcleo para conseguir o acesso a partes do hardware que de outra forma seriam inacessíveis. Cada processo é identificado pelo seu process id (PID), que é simplesmente um número inteiro.
Mais especificamente, do ponto de vista do sistema operacional, é uma coleção de instruções (programa) mais os dados necessários à sua execução. Armazenados juntamente com o processo estão o seu contexto, ou seja, o contador de instruções, e o conjunto de todos os registradores da CPU. É responsabilidade do sistema operacional gerenciar os processos do sistema, de forma que, se um processo tenta ler ou escrever em um disco, por exemplo, este processo ficará em estado waiting (suspenso) até que a operação seja completada.
Nesse ínterim, outro processo será habilitado a correr, desperdiçando assim o mínimo do tempo da CPU, memória e demais periféricos. O Minix suporta inclusive um procedimento de "escrita retardada", quando escrevemos em algum arquivo. No momento da escrita, o buffer que contém estes dados é simplesmente marcado como "sujo" (dirty), e o sistema operacional escolhe o instante mais apropriado para descarregar esse buffer no disco físico. Isso explica a necessidade que temos de executar um procedimento de parada (shutdown ) antes de desligar a máquina, para evitar que fiquem dados a serem descarregados (escritos) no disco rígido.