|
||||||||||||||||||
Noticias AntiguasKernel versión 0.6.011-Mar-2009Puesto que se ha realizado tanto trabajo, ésta vuelve a ser otra versión mayor. El cambio más importante es que se ha cambiado completamente el espacio de direccionamiento del núcleo. Aprovechando la idea de Tim Robinson, he reescrito casi la mayor parte del código relativo a la memoria para acomodar la misma repartición que en Linux. El resultado es que el núcleo continua cargándose en la dirección de memoria física 0x100000 (1MB) pero ahora se compila para correr en la dirección de memoria virtual 0xC0000000 (3GB). Así pues el espacio de usuario tiene un tamaño de 3GB dejando sólo 1GB para el espacio del núcleo. Esto significa que de momento el núcleo sólo podrá direccionar hasta 1GB de memoria.
El siguiente cambio importante es el soporte directo de dispositivos RAMdisk. Por defecto el núcleo crea 1 RAMdisk (
El último cambio importante incluye el soporte para la extensión Rock Ridge del filesystem ISO9660. Con este nuevo soporte el núcleo Fiwix permite arrancarse desde un filesystem ISO9660 como root, usando el parámetro de arranque del núcleo Lo siguiente es una representación de todo este nuevo soporte: # mount -t iso9660 /dev/hdc /mnt/cdrom ISO 9660 Extensions: RRIP_1991A # l /mnt/cdrom/ dr-xr-xr-x 3 root root 6144 Dec 15 2006 bin -r--r--r-- 1 root root 2048 Feb 18 14:40 boot.catalog dr-xr-xr-x 3 root root 8192 Feb 16 19:11 dev dr-xr-xr-x 5 root root 4096 Feb 16 19:02 etc -r--r--r-- 1 root root 1474560 Feb 18 14:40 fiwix.img -r--r--r-- 1 root root 88009 Oct 12 2003 install.log dr-xr-xr-x 3 root root 2048 Feb 28 2002 lib dr-xr-xr-x 3 root root 2048 Jul 10 2002 lost+found dr-xr-xr-x 6 root root 2048 Feb 16 19:05 mnt dr-xr-xr-x 3 root root 2048 Feb 16 19:04 proc dr-xr-xr-x 4 root root 2048 May 2 2007 root dr-xr-xr-x 3 root root 4096 Jul 30 2007 sbin dr-xr-xr-x 12 root root 2048 Jun 8 2001 usr # df Filesystem 1k-blocks Used Available Use% Mounted on /dev/fd0 1440 1036 404 72% / /dev/hdc 52112 52112 0 100% /mnt/cdromComo siempre, se han arreglado muchos bugs y se ha mejorado bastante código, y eso hace que esta nueva versión sea un paso adelante hacia el próximo reto, la implementación del soporte de escritura para el filesystem EXT2.
Como ejemplo de todo esto, lo siguiente es una representación para mostrar lo bien que se ve el comando
# ps
PID Uid VmSize Stat Command
1 root 244 S init
2 root SW [kswapd]
19 root 428 S -sh
20 root 260 S init
24 root 344 R ps
Finalmente pero no por ello menos importante, a partir de ahora la web del proyecto Fiwix incluirá la sindicación de contenidos RSS para dar la posibilidad de que la gente pueda estar al día de los cambios más recientes.
Kernel 0.5.0 (12-May-2008)Esta es otra versión mayor que incluye otra largamente esperada característica, el filesystemprocfs. Ha sido creado siguiendo la misma estructura de directorios y datos que Linux, por lo que es de esperar que comandos como ps funcionen sin mayores problemas. Aunque todavía está lejos de la completa representación de datos internos del núcleo, como lo hace el del Linux, ahora mismo es suficientemente funcional.
Para poder incluir todo este nuevo filesystem especial, se han tenido que modificar muchas partes internas del núcleo, en especial la tabla de procesos, y la imagen del disquete también ha sufrido ciertos cambios, como añadir el fichero
La siguiente representación muestra el directorio raíz del filesystem
# ls -l
dr-xr-xr-x 2 root root 0 May 12 12:54 1
dr-xr-xr-x 2 root root 0 May 12 12:54 19
dr-xr-xr-x 2 root root 0 May 12 12:54 2
dr-xr-xr-x 2 root root 0 May 12 12:54 20
dr-xr-xr-x 2 root root 0 May 12 12:54 23
-r--r--r-- 1 root root 0 May 12 12:54 cmdline
-r--r--r-- 1 root root 0 May 12 12:54 devices
-r--r--r-- 1 root root 0 May 12 12:54 filesystems
-r--r--r-- 1 root root 0 May 12 12:54 loadavg
-r--r--r-- 1 root root 0 May 12 12:54 mounts
dr-xr-xr-x 2 root root 0 May 12 12:54 sys
-r--r--r-- 1 root root 0 May 12 12:54 uptime
-r--r--r-- 1 root root 0 May 12 12:54 version
En las próximas versiones su soporte será extendido y algunos problemas arreglados.
Otras mejoras importantes incluyen la mejora del controlador para unidades CDROM ATAPI con nuevas características, una mejor detección de diferentes dispositivos IDE conectados en la misma controladora, y unos cuantos bugs arreglados. En la próxima versión me concentraré en la implementación de un nuevo gestor de memoria virtual (VMM) que debería permitir un mejor uso de la memoria del núcleo y la inclusión del controlador de RAMdisk.
Kernel 0.4.0 (28-Nov-2007)La muy esperada implementación del filesystemisofs (ISO9660) ha llegado. Con esta nueva versión major, la cual incluye unos cuantos arreglos y otras mejoras, cualquiera puede empezar a montar CDROMs usando el nuevo controlador de unidades de CDROM ATAPI, que aunque tiene una mínima implementación, es más que suficiente.
Un ejemplo simple de como montar un CDROM:
mount -t iso9660 /dev/hdc /mnt/cdrom
En las próximas versiones su soporte será extendido y algunos problemas arreglados.
Otras importantes mejoras incluyen la disponibilidad de montar filesystems EXT2 con tamaños de bloque de 1KB (actualmente soportado), de 2KB y de 4KB. Ha habido una gran cantidad de líneas de código en el buffer cache afectadas por toda esta mejora.
Se ha creado un nuevo parámetro del núcleo
Este segundo parámetro será probablemente, como en Linux, una extensión del actual
En las próximas versiones me concentraré en la implementación del filesystem
Kernel 0.3.3 (30-Jul-2007)Un buen número de arreglos y unas cuantas mejoras es lo que trae esta versión. Se ha arreglado un gran error durant la inicialización de las páginas de memoria faccionales (esas que pueden contener las secciones DATA y BSS de un binario). Este error causaba muchos segmentation faults inesperados e impedía disfrutar de un núcleo con un funcionamiento fino. Se ha arreglado también algunos errores en el sistema de señales, aunque todavía faltan algunos para poder empezar a hablar de un sistema de señales sólido.En cuanto a las mejoras introducidas en esta versión, la más destacable está en el filesystem EXT2 (incluyendo un grave error arreglado en el algoritmo de localización de inodes), que incluye el soporte para las características filetype y sparse-super. Estas dos características se han utilizado desde hace ya algún tiempo en filesystems EXT2 y EXT3 modernos.
Esta nueva versión incluye soporte para la system call
Finalmente se ha actualizado el
Kernel 0.3.2 (27-May-2007)En esta nueva versión se han mejorado diversas areas del núcleo. La más destacable es en el sistema de señales, donde también he visto que todavía queda trabajo por hacer.También se ha trabajado para arreglar algunos pequeños problemas que había durante el cambio entre consolas virtuales, aunque no creo que esté del todo finalizado hasta que el sistema de señales sea más sólido.
A parte de todo esto hay dos nuevas Espero poder tener acabado el sistema de señales para la nueva versión.
Kernel 0.3.1 (02-May-2007)Después de varios meses trabajando fuerte para incluir un total y estable funcionamiento para las aplicaciones basadas en la SVGAlib, es el momento de presentar los resultados. Se ha reescrito una gran parte del código del gestor de memoria virtual y se han implementado algunos nuevos métodos del VFS que permitirán ejecutar cualquier aplicación SVGAlib como elzgv.
Con este nuevo núcleo se puede ejecutar prácticamente cualquier aplicación SVGAlib, y además este nuevo código va a servir como base para expandir el soporte al sistema X Window.
Para poder comenzar a experimentar con esta novedad he actualizado el LiveFilesystem para incluir en el mismo directorio del
A modo de ejemplo le recomiendo ejecutar el programa
/root/demos/fun
y ver las nuevas posibilidades gráficas que trae el nuevo núcleo.
Tenga presente que para ejecutar las órdenes anteriores necesitará hacer que el LiveFilesystem sea el root filesystem.
Kernel 0.3.0 (19-Jan-2007)La muy espera implementación del filesystempipefs ha llegado. Con esta nueva versión major, la cual además incluye unos cuantos arreglos, cualquiera pueda empezar a utilizar todas las características de las pipes con nombre y sin nombre.
En cuanto a las pipes con nombre y debido a que el núcleo todavía no tiene implementada la system call Un ejemplo simple de como utilizar una pipe en un comando:
ls | grep x
Un ejemplo simple de como utilizar una pipe con nombre.En una consola virtual, teclee:
echo "hello" > /dev/fifo
y en otra, teclee:
cat /dev/fifo
Kernel 0.2.4 (05-Jan-2007)Con esta versión de mantenimiento el núcleo ha aumentado un poco más su estabilidad. Han habido algunos arreglos y un gran cambio en la estructura interna del VFS (Virtual FileSystem) para poder añadir nuevos filesystems, especialmente aquellos que no dependen de un dispositivo compipefs y procfs.
El nuevo filesystem
Tengo previsto terminal la nueva system call
Kernel 0.2.3 (02-Oct-2006)Esta versión de mantenimiento representa un gran paso adelante en cuanto a la estabilidad del núcleo. Algunos de los bugs que han sido arreglados llevaban ahí bastante tiempo y ha costado mucho encontrarlos.
Otro cambio importante es que a partir de esta versión ya no es necesario incluir un parámetro para tener la disposición de teclado en idioma Inglés por que será el predeterminado. Para el resto de la gente que quiera tener la disposición de teclado Español/Catalán deberá especificarlo durante el arranque del sistema con el parámetro
¡Nuevo Diseño! (11-Sep-2006)Sólo tres días después del lanzamiento de la última versión del Fiwix, me enorgullece presentar la nueva imagen de la web del proyecto.La nueva web se ha basado principalment en la web de otro proyecto de sistema operativo llamado Prex, pero aunque tiene un diseño diferente, tengo que agradecer a su autor por el buen trabajo al crear este estilo tan limpio y simple. ¡Muchas gracias Kohsuke Ohtani !. Kernel 0.2.2 (08-Sep-2006)Después de tanto tiempo sin mucho movimiento, la noticia más importante de esta nueva versión es sin duda el nuevo soporte para la system callsys_mount() y de sus derivadas sys_oldumount() y sys_umount(). Aunque todavía no disponen de los parámetros estandards, su funcionamiento es plenamente satisfactorio.
Actualmente entre otras limitaciones hay el hecho que solo permite montar sistemas de ficheros de tipo EXT2 y con un tamaño de bloque de 1KB. Hay que tener en cuenta también que debido a que todavía no hay montado el /proc, el comando
# mount -t ext2 /dev/hda1 /mnt/disk
A parte de esta gran noticia hay nuevas mejoras en el controlador de disquets para soportar todos los formatos más comunes, y se han arreglado bastantes errores en el sistema de ficheros virtual (VFS).
En las próximas versiones la prioridad en el desarrollo se concentrará en la implantación de la system call Kernel 0.2.1 (10-Nov-2005)Finalmente la implantación del Virtual Filesystem (VFS) ha sido un éxito completo. Después de bastante tiempo de trabajo, en esta nueva versión de kernel se dispone de todo este nuevo subsistema de disco que facilitará la incorporación de nuevos sistemas de ficheros.Esta nueva versión también viene con nuevas mejoras en cuanto a la detección de procesadores Intel, y en la manera en como queda reflejada la información durante el arranque del sistema.
En las próximas versiones la prioridad en el desarrollo se concentrará en la implantación de la system call Kernel 0.2.0 (23-Abr-2005)Después de bastante tiempo sin tener noticias frecas, donde prácticamente sólo hacía trabajos de mantenimiento y depuración del código, me enorgullezco poder presentar el inicio de la segunda rama de desarrollo. Ha sido casi un año entero sin poder dedicarme al 100% debido a cambios en el horario del trabajo, que me han impedido que pudiera dar la dedicación que se merece al proyecto Fiwix.Sea como sea, esta segunda rama nace con el objetivo principal de incorporar al núcleo el soporte para el filesystem de tipo procfs (/proc), y de la necesaria capa VFS. Todo esto permitirá la ejecución de herramientas tan básicas como ps, free, mount, etc. y además, facilitará la incorporación de futuros nuevos tipos de filesystems.
Kernel 0.1.5 (01-May-2004)La gestión de la memoria virtual avanza bastante bien. La gran noticia es sin duda la incorporación de la característica llamada Copy-On-Write, que permite un mejor rendimiento durante los fork()s y también un mejor aprovechamiento de los recursos de memoria. Gracias a todo ello, durante las próximas versiones y mientras haya espacio, dentro del floppy habrá un nuevo programa llamado forks, que permitirá evaluar la velocidad del kernel calculando la cantidad de fork()s por segundo. Por curiosidad, este fin de semana he ejecutado este binario en diferentes ordenadores y después he hecho lo mismo con diversas versiones del kernel Linux.Los resultados obtenidos y que expongo a continuación, permitirán tener un prespectuva más ajustada del kernel Fiwix.
También se han arreglado (como siempre) algunos bugs, y sobretodo se han eliminado los mensajes "WARNING: Unexpected inconsistency in hash_table. Missing page ...". Estos mensajes sólo aparecerán todavía en programas gráficos como zgv o en los programas de demostración del paquete svgalib. Esto se debe a que todavía no se gestiona de manera correcta el acceso directo a las páginas de la memoria de video. Sigo trabajando en la gestión de memoria virtual y las funciones kmalloc() y kfree().
Kernel 0.1.4 (15-Mar-2004)Se ha completado con éxito (al menos eso espero) la programación de la gestión de memoria virtual. De momento su mecanismo es muy simple debido a que todavía no puedo gestionar un sistema de demanda dinámico de memòria a nivel de kernel (kmalloc y kfree).Sigo trabajando en la gestión de memoria virtual y sus funciones de soporte.
Kernel 0.1.3 (01-Feb-2004)Aunque este nuevo kernel es en definitiva otra versión de mantenimiento, en la que se ha arreglado algunos bugs que afectavan directamente la estabilidad del kernel, la noticia más importante es que se ha empezado a añadir parte de la nueva gestión de memoria virtual, aunque todavía esté en fase de pruebas.Sigo trabajando en la gestión de memoria virtual y sus funciones de soporte.
Kernel 0.1.2 (01-Dic-2003)Este nuevo kernel es en definitiva una nueva versión de mantenimiento.Sigo trabajando en la gestión de memoria virtual y las funciones kmalloc() y kfree().
Kernel 0.1.1 (01-Nov-2003)Después de la fuerte actividad que ha producido la presentación del proyecto GNU/Fiwix mediante mi artículo en la revista tecnológica OS News y la lluvia de correos electrónicos que eso ha provocado, la verdad es que me ha quedado muy poco tiempo para acabar algunas de las cosas que tenía previstas para este mes.Tal y como se prometió en el artículo, ya he acabado un pequeño live-filesystem que permitirá poder experimentar mucho mejor con el actual kernel. Lo encontrareis en la sección downloads. Continuo mejorando el sistema de gestión de memoria virtual, que será la base para poder avanzar con las nuevas mejoras en el kernel.
Kernel 0.1.0 (01-Sep-2003)La noticia más importante de esta nueva versión es sin duda que el antiguo FILO (FIwix LOader) ha sido sustituido por el GRUB (GRand Unified Bootloader) y su Multiboot Specification. Este boot loader forma parte actualment de otros proyectos como RedHat Linux, FreeBSD, OpenBSD, NetBSD, GNU/Hurd, etc. y gracias a sus prestaciones parece que puede acabar siendo en el futuro todo un estándar.Aprovechando este importante avance que ya se incorporará a partir de ahora, he decidido dar un paso adelante en la actual serie de kernels. Desde ahora, la rama de desarrollo será la 0.1.x e irá hasta la major version 1.0.0 en pasos intermedios llamados minor versions como: 0.2.x, 0.3.x, etc. Las noticias y los históricos de cambios correspondientes a antiguas versiones del kernel, pueden seguir siendo consultados clickeando en su enlace correspondiente.
Si alguien quiere comprobar el funcionamiento del kernel en un filesystem real, recomiendo instalar en un disco duro antiguo (< 2GB de espacio), la versión RedHat Linux 4.2. Una vez instalada, arrancar el ordenador con el disquete bootable que encontrará en la sección downloads.
Piense que deberá indicar el root device correcto en el argumento root= que encontrará en el fichero
#
# GNU/Fiwix Operating System
# Copyright (C) 1998-2003 Jordi Sanfeliu <mikaku@fiwix.org>
#
# GRUB configuration file
#
default 0
timeout 10
splashimage (fd0)/boot/grub/fiwix.xpm.gz
title GNU/Fiwix 0.1.0
root (fd0)
kernel /vmfiwix root=/dev/fd0
Kernel 0.0.15 (0.0.0w) (01-Jun-2003)Esta versión vuelve a ser otra versión de mantenimiento.Sigo trabajando también en el soporte gráfico bajo svgalib y X11.
Kernel 0.0.14 (0.0.0v) (01-Abr-2003)Esta versión vuelve a ser otra versión de mantenimiento. Algunos de los problemas de estabilidad que venia arrastrando ya han sido solucionados. Se ha mejorado notablemente el sistema de mapeo de memoria virtual (VMA) y empieza a haber soporte para grupos de procesos y sesiones.Sigo depurando y mejorando el kernel ya que todavía se observan algunos problemas de estabilidad.
Kernel 0.0.13 (0.0.0u) (01-Ene-2003)Esta versión vuelve a ser otra versión de mantenimiento. Algunos de los problemas de estabilidad que venia arrastrando ya han sido solucionados. Se ha mejorado notablemente el sistema de buffer cache. Empiezo a hacer las primeras pruebas con el XFree86.Sigo depurando el kernel ya que todavía se observan problemas de estabilidad.
Kernel 0.0.12 (0.0.0t) (01-Sep-2002)Esta versión vuelve a ser otra versión de mantenimiento. El nuevo sistema de mapa de direcciones virtuales ya permite poder ejecutar programas gráficos como elzgv en consola.
Sigo depurando el kernel debido a problemas de estabilidad y con el buffer cache en sistemas con 4MB y 8MB de memoria.
Kernel 0.0.11 (0.0.0s) (03-Jul-2002)Esta versión vuelve a ser otra versión de mantenimiento. Se han arreglado una gran cantidad de bugs y se han incorporado nuevas mejoras en el filesystem. Todo el tema de los symbolic links me ha traido más problemas de lo que en un principio me pensaba. Espero y deseo haber llegado a su fin!.Actualmente sigo depurando el kernel y a la vez continuo con la programación del nuevo sistema de gestión de memoria virtual.
Kernel 0.0.10 (0.0.0r) (01-May-2002)Aunque esta es también en definitiva otra versión de mantenimiento donde se han arreglado algunos bugs básicos, la noticia más importante es la inclusión de la utilidad BusyBox en la imagen del disquet de arranque.
Hasta ahora sólo se ofrecían los programas
Kernel 0.0.9 (0.0.0q) (01-Abr-2002)Esta versión es también en definitiva otra versión de mantenimiento. Se han arreglado numerosos bugs que provocaban errores inesperados, y a la vez desestabilizaban la funcionalidad del propio kernel.De aquí a la última versión de esta serie, me dedicaré a pulir un gran número de bugs y carencias básicas que ya tengo localizados. Pretendo dejar un kernel bastante terminado para poder comenzar la nueva serie (0.0.x) con uno limpio de problemas y preparado para empezar a expandirse.
Kernel 0.0.8 (0.0.0p) (03-Mar-2002)Con esta versión se incluye el soporte para los binarios ELF-386 de Linux, ya sean estáticos o dinámicos. Ha sido un trabajo bastante duro porque no he encontrado toda la información que precisaba. He tenido que mirar parte del código fuente de Linux e intuir ciertos aspectos durante la carga del binario. Todo este nuevo soporte actualmente se apoya en una serie de funciones internas provisionales. Estas funciones quedan pendientes de mejorar cuando se instale el nuevo sistema de gestión de memoria virtual que estoy haciendo.
Aunque las pruebas que he efectuado para comprobar este nuevo soporte han sido todas satisfactorias, ha provocado un poco de inestabilidad al kernel que no esperaba. Parte de esa inestabilidad está localizada y la crea la system call Voy a centrarme en arreglar estos problemas de inestabilidad y mejorar este nuevo soporte. También seguiré trabajando en ese nuevo sistema de memoria virtual, que va a permitir aprovechar mejor la memoria y aumentar el redimiento del kernel.
Kernel 0.0.7 (0.0.0o) (01-Ene-2002)Esta versión también es básicamente una versión de mantenimiento. Ya se ha empezado a reestructurar parte del kernel para el soporte de binarios ELF-386 dinámicos. Pero debido a que la mayoría de las librerías son ficheros de tipo symbolic link, ha sido necesario añadir este soporte para poder continuar con el plan de trabajo.Es por eso que hoy se lanza esta versión, que incluye tal soporte y un par de bug fixes.
Kernel 0.0.6 (0.0.0n) (01-Dic-2001)Aparte de algunas mejoras esenciales, esta nueva versión es básicamente una versión de mantenimiento. Su finalidad es arreglar una gran cantidad de bugs y empezar a preparar el kernel para incluirle el soporte de carga de binarios ELF-386 dinámicos, y a su vez mejorar el subsistema de gestión de memoria virtual. Debido a la complejidad de estos dos cambios, se verá afectada inicialmente la estabilidad del kernel, pero permitirán aprovechar mejor las ventajas que ofrece la memoria virtual, y darán un paso de gigante al propio kernel.Todavía quedarán pendientes de realizar el soporte para la escritura en el filesystem y añadir el soporte para múltiples filesystems mediante la capa VFS (Virtual File System).
Kernel 0.0.5 (0.0.0m) (01-Jul-2001)La mejora más destacable que trae esta nueva versión, es sin duda la incorporación del nuevo driver para las unidades de disco duro ATA. Aunque por ahora sólo soporta la modalidad de lectura, he podido crear un filesystem EXT2 desde un ordenador con Linux y portar las aplicaciones más básicas, compiladas estáticamente, por supuesto. El resultado ha sido más satisfactorio de lo que me pensaba. El comportamiento del Fiwix en un filesystem me ha sorprendido totalmente. A continuación expongo en detalle los pasos que he seguido para obtener este filesystem experimental.Lo primero que se necesita es disponer de una versión RedHat Linux 4.2. Esto es así porque esta distribución todavía llevaba unas librerías del GCC que permitían un linkaje estático completo. Las actuales versiones incluyen librerías adicionales aunque se haga un linkaje estático, que hacen desestabilizar el kernel. Como segundo paso y una vez instalado el sistema Linux, crear un nuevo filesystem de un tamaño de unos 100MB. A partir de ahí viene el trabajo duro. Escojer los paquetes RPM que no requieran el subsistema de red y recompilarlos estáticamente. Los RPM resultantes no sirven debido a que no es posible instalar paquetes RPM en otro filesystem (al menos que yo sepa). Por tanto no quedará más remedio que copiar uno por uno todos los binarios ya compilados y llevarlos a su directorio correspondiente. A continuación expongo la lista entera de paquetes que he instalado:
Finalmente ya sólo queda copiar el kernel del Fiwix (
Todavía queda mejorar el soporte de secuencias ANSI y la system call
Kernel 0.0.4 (0.0.0l) (06-May-2001)Esta nueva versión trae numerosas mejoras generales y fuertes reestructuraciones internas para poder empezar a acoplar el driver del disco duro. El cambio más importante se nota ya durante la carga inicial del sistema. Se puede observar que esta versión no incorpora la imagen del logotipo del Fiwix que normalmente se muestra durante la carga del kernel. Esto es así debido a que para poder incorporar el programals se ha tenido que hacer un poco de espacio en el disquet, y el único fichero grande prescindible era el propio logotipo del Fiwix. O sea que al reiniciar el ordenador con el disquet de boot, la carga del logotipo fallará y el inicio se detendrá en ese punto dando un mensaje normal del error de localización del logotipo del Fiwix. En este punto, el Monitor de Boot esperará a que el usuario dé la orden boot para iniciar la carga del kernel y continuar el proceso de inicio.
El programa El kernel es todavía inestable debido a un problema de memoria que todavía no tengo resuelto y que afecta directamente cuando se ejecuta en un entorno multiproceso. La resolución de este problema se hace dificil operando con la lentitud de la unidad de disquets, es por eso que a partir de esta versión me centraré en el desarrollo del driver para las unidades de disco duro IDE. Creo que hasta dentro de un par o tres de meses no tendré un driver suficiente funcional como para poder montar filesystems EXT2 residentes en discos duros IDE, y poder experimentar el driver sin problemas.
Kernel 0.0.3 (0.0.0k) (01-Mar-2001)Después de casi 3 años de esfuerzo y plena dedicación, puedo empezar a presentar un kernel semi-funcional. Esta última versión permite entre otras funciones, crear nuevos procesos hijos y ejecutarlos. Se ha mejorado gran parte de las funciones del filesystem, de la comunicación entre procesos mediante señales, y sobretodo la carga y alojamiento en memoria de los binarios de tipo ELF-386 estático. Esto ha permitido mantener una compatibilidad del 100% con los binarios actuales de Linux, y a la vez poder utilizar las herramientas GNU orientadas al sistema operativo.A pesar de estas mejoras, el kernel sólo es capaz de gestionar un tipo de unidad de almacenamiento. El disquet. Y como todos sabemos, los disquets más usados actualmente tienen una capacidad limitada a 1.44MB. A esta problemática hay que añadirle el hecho de que el sistema no permite todavía binarios linkados dinámicamente, sino que sólo reconoce binarios linkados estáticamente, ello significa que los binarios tienden a tener un tamaño mucho mayor de lo habitual. De totas maneras, y gracias al reducido tamaño del actual kernel, he podido crear una imagen en un disquet con los siguientes programas (por orden de ejecución):
Inicialmente el kernel monta el filesystem en modo de sólo lectura. Seguidamente y después de preparar un entorno de ejecución óptimo para el proceso INIT, lo carga en memoria y lo ejecuta. Durante la ejecución, INIT localiza y carga en memoria el fichero
Si la contraseña del usuario coincide con la que está almacenada en el fichero A continuación expongo una copia de una sesión de entrada utilizando la imagen que a partir de hoy queda a disposición de todo el mundo:
Fiwix OS Release 0.0
Copyright (C) 1998-2001, by Jordi Sanfeliu
(mikaku@fiwix.org)
Kernel version 0.0.0k for Intel 32bit Platform
The system language is English
DEVICE I/O ADDRESS IRQ COMMENT
-------------------------------------------------------------------------------
cpu - - family=586 PentiumMMX at 167.34200 Mhz
cpuid - - vendorid=GeniuineIntel model=4 stepping=3
console 0x03D4-0x03D5 - VGA Color 80x25 (12 virtual consoles)
fd0 0x03F2-0x03F7 6 1.44MB 3'5 (New Intel 82077)
memory: total = 65536 (-384KB), kernel = 8576KB, user = 56552KB
kernel: text = 34KB, data = 12KB, bss = 187KB, i/o buffers = 6552KB
inodes = 4071 (652KB)
mounted root (ext2 filesystem) readonly
INIT: version 2.74 booting
INIT: can't open(/etc/ioctl.save, O_WRONLY): No such file or directory
INIT: can't open(/etc/ioctl.save, O_WRONLY): No such file or directory
INIT: Entering runlevel: 3
while opening UTMP file: No such file or directory
while opening UTMP file: No such file or directory
while opening UTMP file: No such file or directory
Fiwix Operating System Release 0.0 (tty1)
Kernel version 0.0.0k
(none) login: root
Password: root
_setutent: Can't open utmp file: No such file or directory
_setutent: Can't open utmp file: No such file or directory
_setutent: Can't open utmp file: No such file or directory
bash#
Los mensajes de error que se pueden observar, son producidos como resultado de montar el filesystem en modo de sólo lectura, y a la vez la carencia de la función de escritura en los dispositivos de bloque que actualmente tiene el kernel.
A destacar que el sistema todavía es un poco inestable y pueden producirse situaciones de bloqueo general de la máquina. Aunque no hay ningún peligro de producir averías a otros dispositivos, no me hago responsable en caso de que se produjesen tales averías. Todavía queda mucho trabajo por hacer. Hay muchos bugs que tengo documentados que son los que crean un estado de inestabilidad. Espero y deseo seguir disponiendo de tiempo para llegar a la versión 0.0.1 (justo después de la 0.0.0z) en la que se dispondrá de la función de escritura en dispositivos de bloque y probablemente también incorporará el driver para el disco duro.
Kernel 0.0.2 (0.0.0j) (01-Gen-2001)Ya está terminada la nueva versión interna del kernel. Esta versión trae muchas más novedades. Se ha incorporado todo el tratamiento de las señales entre procesos y se han ampliado el número de system calls soportadas por el propio kernel. Me ha costado mucho más de lo que me pensaba implantar todo el sistema de señales, ya que esto supone tocar la stack interna de cada proceso y controlar su signal context, y naturalmente eso sólo puede hacerse a bajo nivel mediante el assembler. ¡Odio el assembler! :-). Debido a todas estas mejoras, he ampliado la u_area de cada proceso, incorporándole todo el control de los temporizadores (Real, Virtual y Profile). También he incorporado el tratamiento de los descriptores de ficheros y el tratamiento de los ficheros regulares, el de dispositivos de bloque y de carácter. Todo ello ha hecho que no se puedan cumplir las espectativas de tener una imagen estable tan pronto.Creo que hacia finales de el mes que viene podré presentar una imagen en disquet, con un kernel suficientemente funcional como para poderlo experimentar y probar.
Kernel 0.0.1 (0.0.0i) (30-Oct-2000)Al contrario de lo que muchos han pensado, el proyecto Fiwix NO ha muerto. La demora en presentar la nueva versión ha sido debido a la cantidad de nuevas características introducidas en el kernel, que han hecho que cada vez se acerque más a la palabra ESTABLE.Han pasado muchos meses desde mi última noticia en la que el kernel no era más que una idea. Hoy por hoy parece que empieza a coger forma y a la vez complejidad. Actualmente el Monitor de Boot lo carga en memoria automáticamente y lo ejecuta. El kernel toma el control del ordenador, inicializa todas sus estructuras internas, detecta los periféricos más elementales, y prepara un entorno a medida para el primer proceso (el INIT). Debido a que pienso mantener la compatibilidad con Linux, todos los binarios deberán ser en formato ELF-386. Provisionalmente, la única diferencia será que deberán ser compilados con el parámetro -static. Esto me permite acelerar más la programación destinada a la carga y relocación de binarios, gracias a la simplicidad de este modelo de ejecución. Para poder probar la carga del binario /sbin/init, he recompilado (estáticamente) el mismo programa Init que utiliza el Linux. Actualmente el kernel lo localiza dentro del filesystem, lo carga y lo ejecuta!. He tenido que implantar algunas system calls para que el programa pueda continuar hasta el punto en que se para, debido a que no encuentra el fichero /etc/inittab. Creo que hacia finales de año podré presentar una imagen en disquet, con un kernel suficientemente funcional como para poder probarlo y comprobarlo.
Inicio de la programación del kernel (03-Feb-1999)Ha llegado el momento de la verdad. A partir de ahora, todo el trabajo se centrará en la programación del kernel del sistema que (inicialmente), tendrá un pequeño núcleo con las tareas más simples (consola, teclado, floppy y reloj). Por otro lado, iré perfilando todas las rutinas de soporte para cargarlo y ejecutarlo automáticamente desde el Monitor de Boot a medida que vaya avanzando su programación.Cabe decir que debido a que pienso mantener la compatibilidad con Linux, el kernel será un binario de formato ELF-386. Esto hace que se retrase mucho más su programación ya que desconozco completamente como tratar la estructua interna de este formato. Todo se hará sobre la marcha. No se cuanto tiempo necesitaré para obtener este pequeño kernel, pero como tiempo aproximado creo que no nos volveremos a ver hasta dentro de unos cuantos meses. De todas maneras, intentaré reflejar su avance dentro de las secciones Histórico de Cambios y Estado del Proyecto.
Finalizada la carga del logotipo de boot (16-Ene-1999)A partir de ahora, la primera imagen que saldrá por la pantalla será el logotipo especificado en el directorio/etc/default. Inicialmente he hecho que el nombre de este fichero sea fiwixlogo.bmp. Naturalmente, este fichero tiene que cumplir unos requisitos para poderlo visualizar sin problemas:
Finalizada la carga de los parámetros de boot (10-Ene-1999)Bien doy por terminada la fase de carga de los parámetros de boot. Estos parámetros residen en el fichero llamado/etc/default/boot. A continuación se muestra un ejemplo de este fichero con los parámetros actualmente soportados. Naturalmente, no se descartan futuras ampliaciones que iré detallando conforme se vayan necesitando.
# @(#) boot
#
# Fiwix Operating System
# Copyright (C) 1998 Jordi Sanfeliu. All Rights Reserved.
#
# default/boot - system boot parameters
#
# Syntax: PARAMETER=value (no spaces and lowercase)
#
AUTOBOOT=yes
KIMAGE=/fiwix
LOGOIMG=/etc/default/fiwixlogo.bmp
LANG=en
Todos los parámetros quedan suficientemente aclarados por si mismos. A partir de ahora me dedicaré a terminar la carga del logotipo.
Cambio de look en la web (17-Dic-1998)No se que pensábais de la web anterior, pero creo que le faltaba algo un poco más serioso. Así pues, este será el look que tendrá la web hasta que empecemos a verla un poco anticuada. De todas maneras, estos nuevos colores me gustan mucho y esto me hace suponer que continuarán durante mucho tiempo. Ahora sólo le faltará un poco de animación en algunos GIFs y algún retoque mágico de la mano del Sr. Java.
Primer download! (para los más impacientes) (07-Dic-1998)Para poder empezar a experimentar un poco con este monitor de boot, he puesto en la sección de Downloads la imagen entera del disquete de boot. Tal y como se especifica en la sección de Características del Fiwix, el monitor de boot está hecho en idioma inglés y con su correspondiente teclado. O sea que tendreis que estar habituados con la disposición de teclas de los teclados ingleses. Ni que decir que no intenteis poner en marcha el kernel porque todavía no hay. :-)
Finalizadas las rutinas de bajo nivel para el filesystem EXT2-FS (Linux) (05-Dic-1998)Ya he terminado las rutinas de bajo nivel que permitirán al monitor de boot poder leer el filesystem de tipo EXT2 (Linux). Esto a permitido terminar la ordenls [directory] y sobretodo, poder leer el fichero de parámetros de boot alojado en el directorio /etc/default. Además, se han cambiado algunas órdenes y se han añadido nuevas como "rootdev=", "kimage=", "logoimage=", "lang=", "set" y "boot". No preveo que se añadan más (por ahora).
Como ejemplo, a continuación se muestra una pequeña sesión de trabajo con el monitor de boot del Fiwix:
Fiwix OS/386 Release 0.0.0
Boot Monitor. (Press '?' for help)
[Boot]: ?
Variable Description
-------------------------------------------------------
rootdev= Set the root device (fd0, hda0, etc.)
kimage= Set the name of the kernel image
logoimage= Set the name of the boot logo image
lang= Set the system language (en/ct/es)
Command Description
--------------------------------------------------------
? Help available
cpu Information about CPU type and features
mem Memory size reported by BIOS
set Show boot parameters for the kernel
fsstat Status of the root filesystem
ls [directory] List the contents of a directory
boot Load and run the kernel image specified
--------------------------------------------------------
[Boot]: cpu
Vendor ID : GenuineIntel
CPU type : 4 (80486 DX4)
Model : 8
Stepping : 3
CPUID : yes
FPU : yes (contains a FPU)
VME : yes (Virtual Memory Extensions)
PSE : yes (Page Size Extensions)
[Boot]: mem
BIOS has detected 640KB of conventional RAM (below 1MB)
(using BIOS function INT 12h)
BIOS has detected 31744KB of extended RAM
(using BIOS function INT 15h, AH=88h)
Total RAM presumed = 32768KB
[Boot]: set
bootdev=fd0
rootdev=fd0
cputype=486
memsize=640
extmemsize=15360
video=VGA-color
lang=en
image=/fiwix
[Boot]: ls /
/.
/..
/lost+found
/boot
/etc
A partir de ahora me dedicaré a terminar la carga de los parámetros del boot y a la visualización de la imagen del logotipo.
Primeras órdenes del monitor de boot (21-Oct-1998)Después de haber conseguido implantar la estructura interna del funcionamiento del boot, actualmente ya estoy empezando a dotarlo de órdenes que ayudarán a dar información importante sobre las características del ordenador. Algunas como "cpu", "mem", "kparams" ya están totalmente finalizadas.A partir de ahora empieza la parte más importante del boot. Es decir, el disquete de boot tiene que tener incorporado un filesystem EXT2 (Linux) y el programa de boot tiene que hacerse cargo del control de este filesystem. El trabajo que estoy haciendo ahora, es la programación de las rutinas a bajo nivel que me permitirán controlar el filesystem desde el monitor de boot. Esta tarea es totalmente necesaria, ya que mediante estas rutinas el boot podrá localizar la imagen del kernel dentro del propio filesystem y cargarlo en la memoria.
Ya estoy en el lenguaje C ! (27-Sep-1998)Después de pasarme muchas semanas escogiendo qué ensamblador irá mejor para poder fusionar con el GCC (32-bit ELF), y habiendo descartado totalmente la opción que representaba el NASM, he decidido implantar la misma idea que la gente de BSD, o sea el GAS (GNU Assembler). Hoy he podido mezclar el lenguaje ensamblador con el C dentro del mismo programa de BOOT.Con la ayuda que ha represesentado el poder estudiar las fuentes del sistema operativo FreeBSD, he podido hacer un programa híbrido entre el ensamblador y el C que muestra por pantalla la típica frase "Hello World!" (intercambiando de modo real a modo protegido) durante un BOOT desde disquete. A partir de aquí, preveo que la programación del programa BOOT irá mucho más rápida. |
||||||||||||||||||
|
||||||||||||||||||