Grupo Linuxero del Bajío

Minix 1.0

Álvaro Silva Caballero

Por fin el sábado pasado rindieron sus primeros frutos dos meses y medio de trabajo.

Como ya saben los compañeros que asistieron a la última reunión linuxera en casa de tulsi pop, he estado trabajando con minix 3.0 y he estado estudiando el código de la versión 1.0.

El objetivo es hacer que la versión 1.0 trabaje en una computadora moderna.

Cuando este sistema operativo se desarrolló allá por el año de 1987 por Andrew S. Tanenbaum para enseñar sistemas operativos, la implementación inicial se hizo en la IBM PC, por lo que para correr esta primerisima versión se requiere una IBM PC genuina o una computadora 100 % compatible.

Intenté correr las imagenes ya armadas que vienen con la distribución en una vieja 486 que adquirí para tal fin pero no funcionó. También utilicé bochs pero mi suerte no mejoró.

Comencé a modificar el código de minix 1.0 para que funcione en una computadora personal actual. Estoy intentado que estas modificaciones sean lo más pequeñas posibles.

Sobre lo que he estado trabajando últimamente es en el código del bootloader. Resulta que la distribución original venía en discos flexibles de 360Kbytes y 5 1/4 pulg, de 9 sectores por pista, 40 pistas por lado y 2 lados. El bootloader original carga el sistema operativo en la memoria tomando en cuenta lo anterior, de hecho, parte del código tiene la habilidad de reconocer los discos de 1.2 Mbytes de 15 sectores por pista. Las modificaciones que se hicieron al bootloader fueron las siguientes:

Cargar el sistema operativo desde un floppy de 1.44 Mbytes.

Eliminar el código de comprobación para ver si se trata de discos de 360Kbytes o 1.2Mbytes, actualmente obsoletos.

Nunca dos compiladores generan el mismo código objeto, ni sus ensambladores manejan la misma sintaxis. Minix se desarrolló bajo el sistema PC-IX que era el UNIX de IBM para la PC. Para intentar recompilar el sistema estoy usando el compilador nativo de minix 3.0, el Amsterdam Compiler Kit por lo que hay que traducir todas las rutinas escritas en ensamblador de un dialecto a otro y lo que ha dificultado la operación es que la documentación del ensamblador del ACK es mucho muy limitada por lo que hay que experimentar mucho antes de obtener un ejecutable que funcione.

Obviamente antes de intentar una traducción desde un ensamblador a otro hay que estudiar muy bien el codigo para saber que es lo que hace y como lo hace y esto también consume demasiado tiempo.

No utilicé GNU GCC por las siguientes razones:

Las últimas versiones solo compilan código de 32 bits, no hay ninguna bandera o algo así que me permita hacer una compilación cruzada (cross compiling) hacia un destino de 16 bits

Personalmente me parece equivocado que el ensamblador GAS utilice la sintaxis AT&T en vez de la sintaxis intel, me parece una falta de sentido común porque si estoy utilizando un procesador intel, bueno, seria natural utilizar la sintaxis de la casa que a final de cuentas es la primera que aprendes cuando vas a la escuela o cuando lees un libro, aunque podria ser que los desarrolladores hayan elegido la sintaxis AT&T porque seguramente es la que utilizan los que programan para procesadores RISC.

Es cierto que las nuevas versiones de GAS tienen un modificador .intel_syntax o algo así pero de todos modos no me siento a gusto.

Por último y más importante, me falta destreza para usar GCC, es tan poderoso que asusta y sus manuales tan extensos que desaniman.

En conclusión, al modificar el bootloader logré que el sistema operativo se cargara en la memoria desde un disco de 1.44 MBytes y que el sistema operativo comience a ejecutarse, sin embargo en algún punto de su ejecución, el sistema se cuelga y pienso que es cuando se forma el disco ram en la memoria o cuando se monta el sistema de archivo en el disco ram y el culpable de lo anterior es la tarea del disco que solo soporta discos de 360Kbytes, hay que hacer la modificación y compilar, aunque eso es más facil decir que hacer.

Seguiré escribiendo más sobre lo mismo durante los proximos meses, por el momento los dejo.

Chico Pepsi