Minix
es un clon de Unix distribuído junto con su código fuente y desarrollado por
Andrew S. Tanenbaum.
Gracias
a su reducido tamaño, diseño basado en el paradigma de microkernel, y su amplia
documentación, resulta bastante apropiado para personas que desean ejecutar un
sistema operativo Unix-compatible en su máquina personal así como aprender
sobre su funcionamiento interno.
Para
una persona poco familiarizada con los elementos internos de un sistema
operativo, Minix es una buena opción que le permite entender casi todos sus
elementos en pocos meses de uso y estudio.
Volver al principio de la página
Minix
se estructura en cuatro capas:
- La de funciones,
- La de procesos de entrada y salida y manejadores de dispositivos,
- La de servidores y
- La capa de procesos de usuario.
La
capa de funciones atiende las interrupciones, planifica las tareas y
procesos, maneja los mecanismos de mensajes, chequea destinos correctos,
loacliza buffers en memoria real para enviar y recibir y copia bytes desde
el que envía al que recibe.
La
capa de procesos de entrada y salida y manejadores de dispositivos se
encarga de manejar la memoria, los discos, la impresora, el terminal, el reloj.
Los
servidores que incluye la capa 3 son el manejador de memoria, el sistema
de ficheros y el servidor de red. El manejador de memoria (MM) contiene todas
las llamadas al sistema relacionadas con memoria tales como fork, exec y brk.
El sistema de ficheros contiene todas las llamadas relativas al manejo de
ficheros como READ, MOUNT, CHDIR ...
Una
vez cargado, la distribución de Minix en memoria es la siguiente:
|
memoria libre para programas de usuarios |
|
init |
init |
2372k -
2383k |
inet |
tarea
inet |
2198k -
2372k |
fs |
sistema de ficheros |
1077k -
2198k depende nº buffers |
mm |
manejador de memoria |
1024k - 1077k |
|
memoria dispositivos I/O |
640k - 1024k |
|
memoria para el usuario |
129k -
640k |
kernel |
tarea .... |
129 k (depende de las tareas instaladas) |
tarea impresora |
|
|
tarea terminal |
|
|
tarea memoria |
|
|
tarea reloj |
|
|
tarea disco |
|
|
manejo de interrupciones CPU y mensajes |
2k (00800) comienzo del núcleo |
|
|
no utilizado |
1k - 2k |
|
vector de interrupciones |
0 - 1k |
Volver al principio de la
página
La BIOS carga el MASTERBOOT en memoria y lo ejecuta. Este carga el BOOTSTRAP desde el primer sector de la partición activa y este carga el BOOT de Minix.
El BOOT de Minix carga el kernel.
El kernel inicializa el sistema y lanza todas las tareas de manejadores, que una vez inicializadas se bloquean en espera de trabajo. Luego se lanza el manejador de memoria, el manejador del sistema de ficheros y finalmente se ejecuta el proceso INIT.
INIT lee el fichero /etc/ttytab para ver cuantos terminales hay, y mediante FORK crea un proceso hijo para cada terminal.
Cada proceso hijo ejecuta /usr/bin/getty que presenta un mensaje de bienvenida y espera que se teclee un nombre de usuario.
Cuando alguien entra en el sistema, se ejecuta /usr/bin/login con el nombre de usuario como argumento y se ejecuta el shell de ese usuario, especificado en /etc/passwd,
normalment
/bin/sh:
El shell espera por un comando y luego lanza un FORK y un exec por cada comando.