0.7.3 - 20-Apr-2013 =================== - Implemented true support of process groups. - Added more information in '/proc//status'. - Removed the initialization of x and y on terminal reset (by close()). - Relocated the init_init() and init_trampoline() to a new file. - Rewritten init_trampoline() to inline assembler. - Added the 'self' symlink in procfs. - Fixed signal context implementation in order to support nested sighandlers. - Fixed a long standing bug in wakeup_proc() that generated a kernel PANIC when trying to wake up a running process. - Fixed the values kstkesp and kstkeip in /proc//stat. - Fixed in printk() to show correctly unsigned numbers with %u. - Fixed some small typos. - Fixed to better initialize unused proc_table entries. - Fixed the PANIC function avoiding a kernel freeze in order to be able to scroll up the screen and see all the messages. - Fixed value alignment in '/proc/meminfo'. - Fixed the boot time value shown in '/proc/stat'. - Fixed to be null-terminated the string 'nullstr'. - New system calls: sys_setreuid, sys_setregid, sys_setpgid sys_setfsuid (unsupported), sys_setfsgid (unsupported) 0.7.2 - 04-Feb-2013 =================== - Added the /proc/dma file in the procfs. - Reduced the number of possible infinite loops. - Relocated the floppy transfer memory area of DMA. - Optimized code in the exceptions and irq entry functions. - Optimized all the DMA code. - Added information on support of 'cpuid' and 'fpu' in '/proc/cpuinfo'. - Fixed a possible NULL comparison in get_filesystem(). - Fixed to avoid calling IDE identify on reset error. This speed up boot process in very slow computers. - Fixed to set the bit-02 (EM) in the CR0 register in order to catch FPU instructions and prevent a processor hang in old Intel 80386 SX/DX. - Fixed the code to show the processor's brand string. - New system calls: sys_getgroups 0.7.1 - 03-Nov-2012 =================== - Improved signal handling. - A lot of improvements in the terminal driver. - Some improvements in the linker script. - Improved the pipefs driver. - More code cleaning. - Restructured a lot of code. - Reduced the bss by allocating some big structures during the kernel start up. - Fixed some bugs in the ATAPI CDROM driver. - Fixed a bug in unregister_irq(). - Fixed a bug when checking if schedule is needed that prevented waking up processes correctly. - Fixed a lot of memory corruption bugs in the pipefs driver. - Fixed a bug using p->argv and p->envp on a killed (still zombie) process. - New system calls: sys_sgetmask (obsolete), sys_ssetmask (obsolete), 0.7.0 - 11-Dec-2011 =================== - Completely rewritten all the process context switch code. - Lot of code cleaning. - Added string padding in sprintk() and fixed a bug. - Improved tty signaling adding more termios identifiers in the ioctl() call. - Fixed a bug in the command line parsing function. - Fixed a missing tty dissasociation when a process exits. - New system calls: sys_llseek, 0.6.4 - 24-Sep-2011 =================== - Improved the console driver with new features. - Added the /proc/partitions file in the procfs. - Optimized the code of the system call entry. - Some cosmetic changes. - Fixed another bug in the /proc/PID/cmdline and /proc/PID/environ files. - Fixed in namei.c to check if filename is longer that EXT2_NAME_LEN; - Fixed some bugs in the console driver. - Fixed to 3 digit size the major number in the /proc/devices file. - Fixed a bug when calculating the next available PID. - Fixed a bug in procfs that prevented showing correctly the PID numbers (10, 100, 1000, etc.) 0.6.3 - 16-Apr-2010 =================== - Optimized the segment descriptors code and reduced a lot of redundant assembler code in the GDT and IDT initialization. - Optimized the function to calculate de processor clock speed. - Isolated a lot of i386 machine dependant code and other cosmetic changes. - Improved the IDE/ATAPI device detection and fixed a good number of bugs. - Improved the initial environment of the INIT process. - Reduced the memory footprint of the process table. - Fixed some termios bugs in the console driver that affected the behaviour of the BS and DEL keys. - Fixed an out of bounds subscript in the command line arguments array. - Fixed a missing creation of the minors list of the IDE ATAPI CDROM that prevented working CDROM devices in some cases. - Fixed to disable the RAMdisk driver when there isn't enough free memory. - Fixed a kernel page fault when showing the contents of /proc/PID/cmdline and /proc/PID/environ. 0.6.2 - 30-Nov-2009 =================== - Added the accounting values when a process is in user or in kernel mode in the file /proc/stat file. - Added support for the accounting values of the time spent by children in user and kernel modes. Those values were needed to implement the sys_times() system call. - Fixed in ide_busy() to include the check for the DRQ status. - New system calls: sys_times, sys_ustat, 0.6.1 - 24-Apr-2009 =================== - Rewritten some string related functions and renamed their include files. - Cleared all the code in the string.h functions. - Compacted the code of the processor exception handling. - Optimized and cleared a great part of the IDE code. - Added the /proc/cpuinfo file in the procfs. - Added the /proc/interrupts file in the procfs. - Added the /proc/meminfo file in the procfs. - Added the /proc/stat file in the procfs. - Added the 'remount' capability for the sys_mount() system call. - Added the parallel port line printer driver (/dev/lp0) supporting only one printer. - Fixed correctly the limits of the segment descriptor for user processes. - Fixed the mechanism to detect better the page faults generated by the stack. - Fixed some stack problems in the assembler functions for the CPU detection. - Fixed a bug in the buffer allocation of fifo files. - Fixed a bug during the clone of the process address space that permitted copying the pages mapped to the video addresses. - Fixed a bad declaration in the Rock Ridge structure that prevented working properly. 0.6.0 - 11-Mar-2009 =================== - Kernel is now compiled to run at virtual address 0xC0000000 (3GB), it continues being loaded at physical address 0x100000 (1MB) though. - Changed completely the initial layout of the kernel data structures. - Rewritten mostly of the entry assembler code using the Tim Robinson's GDT idea to reflect the new kernel location. - Rewritten partly the memory init process to reflect the new kernel location. - Rewritten the internal mechanisms that create the process address space. - Changed a static array allocations by dynamic ones in ext2_bmap() which fixes some kernel PANICs due to stack problems. - Fixed the pointers of argv and envp in the process table. - Fixed the preference of the operator % during the buffer and inode hashes calculation that caused a lot of unstability. - Removed ghost processes appeared in the /proc directory listing. - Added support for RAMdisk devices. By default the kernel has defined only one RAMdisk (/dev/ram0). - Added the new kernel parameter "ramdisk_size" to define the RAMdisk size in KB. - Added the new kernel parameter "noramdisk" to disable RAMdisk devices. - Fixed to show correctly the inode device number in the /proc/PID/maps file. - Fixed to show '/dev/root' in the root filesystem device in /proc/mounts. - Fixed a bad checking for null pointer references which helped to discover some important bugs. - Fixed the ioctl() call in the CDROM drives. - Fixed to prevent a crash during a sys_mount() if filesystem type is NULL. - Used the build timestamp as the UTS_VERSION value. - Added support for the sys_statfs() in the ISO9660 filesystem. - Added support for the Rock Ridge extension in the ISO9660 filesystem. - Fixed a missing inode release when umounting devices. 0.5.0 - 12-May-2008 =================== - Added the very long awaited procfs filesystem. It still lacks a lot of system files but all its internal structure and functionality is finished. - Improved with new features the ATAPI CDROM driver (closing automatically the tray, preventing media removal when it's mounted, etc.). - Fixed some bugs in the ATAPI CDROM driver. - Fixed some problems during the detection of IDE devices. - Rewritten partialy the VFS corresponding to the IDE devices, in order to support different IDE devices (hard disk and cdrom drives) in the same controller. - Fixed a bug in read_inode() that prevented to discard correctly an inode under i/o error situations. - Fixed to close() the device if sys_mount() is not completed. - Changed the kernel location from / to /boot. - Shifted down GNU/Fiwix logo in the GRUB splash image. 0.4.0 - 28-Nov-2007 =================== - The buffer hash and inode hash tables that were initially sized inside the kernel BSS, are now sized during the system startup. - Fixed the "%c" handling in the printk() function. - Fixed a bug in the strncmp() function. - Fixed the handling of the permission flags for each header section during the loading of an ELF binary. - Improved the way how are created the vma entries during the binary loading. - Added provisionally the read-only flag during the root filesystem mount. - Added support for filesystems with different block size (1KB, 2KB and 4KB). - Rewritten a lot of buffer cache code to accomodate the new support for 1KB, 2KB and 4KB block size filesystems. - Rewritten a lot of EXT2 filesystem code to take care to use the block size value included in the in-memory superblock table instead the old one fixed to 1KB. - Added support to read different block sizes in the floppy and hard disk drivers, taking care to use the block size value included in the request parameter. - Improved the IDE devices information. Now detects the UDMA mode but is not used yet. - Added the kernel boot parameter 'rootfstype' to specify which filesystem will be used in the boot device. - Added the IDE ATAPI CDROM driver with minimal support and improved a little bit all the IDE drivers related code. - Added minimal support (without extensions) for ISO9660 filesystem. - Fixed the treatment of the return value when read_inode() returns NULL. - Fixed a bad use of the MIN() function. - Fixed a bug in the check_fs_busy() function during the sys_umount() system call. - Removed an old dependency of the EXT2 filesystem during the ELF loading. Now it uses bmap() and it's more generic. 0.3.3 - 30-Jul-2007 =================== - Fixed a big error in the ELF-i386 binaries during the initialization of the fractional pages between the data and bss sections. Such error caused a lot of unexpected segmentation faults. - Improved the way how are created and handled the addresses in the process virtual memory maps. - Improved all the kernel command line parameter handling. - Fixed a lot of bugs in the signaling system and optimitzed its code. More are still needed. - Added support for the filetype feature in the ext2 filesystems. - Added support for the sparse-super feature in the ext2 filesystems when in read-only mode (since the lack of sys_write() implementation, all mounts are still automatically mounted as read-only mode). - Fixed some errors in the inode location algorithms in the EXT2 filesystem. - Fixed an IDE ioctl() command that prevented getting correct hard disk size values. - New system calls: sys_reboot 0.3.2 - 20-May-2007 =================== - Optimized the VMM code introduced in the previous version. - Minimal improvements in the vconsole switching when at least one of them is in graphics mode. - Added new ioctl commands for a better vconsoles handling. - Fixed IDE hard disk device minor numbers detection and isolation. - Fixed to read unregistered block devices with same device major number. - Fixed sending a SIGSEGV to the process when the kernel is unable to find the interpreter of an ELF binary during the sys_execve(). - Some fixes in signaling system. More are still really needed. - New system calls: sys_kill, sys_chroot 0.3.1 - 02-May-2007 =================== - Adapted the printk() function to support the va_list types and its standard macros in order to prepare it to be a complement for the new added sprintk(). - Improved the handling of the sys_getdents() system call to be part of the current VFS layer. - Added the readdir() method into the VFS structure. - Improved virtual memory manager code to support SVGAlib based applications and to add the possibility to mmap() physical addresses. - Improved the way how to map physical addresses in the /dev/mem driver. - Added the mmap() and readpage() methods into the VFS structure. - Fixed code to be built with gcc 4.x. 0.3.0 - 19-Jan-2007 =================== - Added the long awaited pipefs filesystem which will permit the use of named and unnamed pipes. Regarding the named pipes and because the kernel dont have implemented yet the sys_write() system call, there is no way to create fifo files with the mknod/mkfifo commands. To solve this situation and to be able to play with named pipes, I've created in the floppy disk a fifo file located in /dev/fifo. - Fixed to get a blank inode when getting a new inode in the iget() function. - Fixed the blk_dev_lseek and blk_dev_ioctl methods to take care if they are (still) not implemented in its corresponding block device driver. - Added the file descriptor as a new argument for the close() method in the VFS. - Fixed and rewritten completely the way how are processed the arguments during the sys_execve() system call. - Fixed the ext2_dir_lseek() method with the sys_lseek() system call. - Fixed to connect to INIT all the children processes when its parent dies. - Removed some unused variables and code cleaning. - It compiles with no errors with gcc-3.4. - New system calls: sys_pipe 0.2.4 - 05-Jan-2007 =================== - Added support for processor's cache detection. Now is displayed during the kernel boot in the same line where is showed the processor speed. - Fixed a bug during the page table initialization. - Fixed an overflow during the size calculation of the buffer and inode tables on systems with more than 400MB of memory. - Added a verification in buffer_read() before jumping to fsop->read(). - Fixed some bad decisions during a page-fault procedure. - Unified the way how is called the sys_iopl() with the rest of system calls. - Restructured more accurately all the VFS implementation in order to fit the new pipefs. This filesystem is special in what not has any device associated to it (nodev mode). 0.2.3 - 02-Oct-2006 =================== - Fixed an inode lock during the interpreter load in dynamically linked ELF binaries. - Fixed a bug when handling the stack page faults that caused a lot of unexpected kernel panics. That was the big one!. - Rewritten some parts of VFS layer to better support multiple filesystems. - Fixed an unreleased inode when its type is not supported yet (fifo & socket). - Fixed an unreleased buffer when detecting an empty/broken symbolic link. - Fixed PANIC function to take care to not burn the CPU anymore. - Fixed in elf_load() to only release the old binary inode when it really exists. This will prevent to release an unexistant inode when loading the /sbin/init. - Removed a duplicated iput() in namei(). - Fixed a global malfunction in the inode hash table mechanism. - Changed to English the default keyboard language layout. - Changed from "lang" to "kbd" the name of the kernel parameter to specify the keyboard layout (current values are: "en", "es" and "ca"). 0.2.2 - 08-Sep-2006 =================== - Incremented to 5 the number of supported system call parameters. - Fixed floppy driver to add real support for 360KB, 1.2MB, 720KB and 2.88MB type drives. - Fixed to support I/O operations directly to block devices. - Fixed some missing releasing inodes in many system calls. - Fixed unexpected inode locking caused by an incorrect use of iput() and inode_unlock() in different places. - Some arrays initialy declared with fixed size, are now changed to dynamic size. - Added a memory clobber for the sti/cli calls. - Fixed a memory leak in sys_getdents(). - The kernel now is able to mount/umount filesystems (ext2 only). - New system calls: sys_mount, sys_oldumount, sys_umount 0.2.1 - 01-Nov-2005 =================== - VFS layer included (only ext2 filesystem supported right now :). - Completely rewritten almost all filesystem internal structure. - Improved the way is mounted the root filesystem. - Removed some unused code and code cleaning. - Ported the load average calculation formula from the Linux kernel. - Fixed the correct CPU Intel architecture number (i386, i486, i586 or i686) for sys_uname(). - Improved CPU identification routines. - New system calls: sys_sysinfo 0.2.0 - 23-Apr-2005 =================== - Improved some console/tty handling in canonical mode. - Fixed initialization bug in Write-Protection (WP) bit of cr0 register. - Fixed lot of bugs in Copy-On-Write routines. Although one still persist. - Changed completely the internal mechanism to connect device files (block and char) with their respective drivers. Some bugs fixed. - Improved mount_root() in super.c. Now uses iget() correctly. - It compiles with no errors with gcc-3.3. 0.1.5 - 01-May-2004 =================== - Fixed bug in search_page_hash() which created " WARNING: Unexpected inconsistency in hash_table. Missing page ..." messages. - Better handling of page faults in the stack area. - Implemented the long awaited Copy-On-Write (CoW) feature. As a result, fork()s are now faster than ever and resources better managed. Completely rewritten the page-demand mechanism in the virtual memory management. - Other cosmetic fixes (removed unused variables and code cleaning). 0.1.4 - 15-Mar-2004 =================== - Added the new kernel parameter "lang=" to set the keyboard language layout. At this time only "es" and "en" are valid values. The default is "es". - Fixed some memory leaks during page deallocation. - Completely rewritten the hash mechanism of page-table and lot of related bugs fixed. - Fixed bug during page table initialization. 0.1.3 - 01-Feb-2004 =================== - Fixed several bugs when handling with buffers on symlink_readlink() and symlink_followlink(). - Fixed bug in free_pages counter. - Completely rewritten the buffer-cache and inode-cache mechanisms. - First testings with the newly created virtual memory management. 0.1.2 - 01-Dec-2003 =================== - Completely rewritten the gdt, ldt, tss and idt initialization. Now it's possible to specify a number maximum of processes (NR_PROCS). - Fixed a double (two) exception during a new page allocation when its page table is not present (one for the page-table and another for its own page). Now all the new page allocations are made with only one exception. Which is faster. - Fixed bug in console driver to avoid writtings on unopened consoles. - Improved sleep/wakeup states in tty driver. - Added the VT_OPENQRY and VT_ACTIVATE ioctl features. - Code cleanup. 0.1.1 - 01-Nov-2003 =================== - Changed completely the way which memory is calculated. Now it takes advantage of the memory map provided by GRUB (BIOS 0xE80, where available) and optimize resources. - Fixed a lot of stability problems. - Fixed a bug in console initialization. 0.1.0 - 01-Sep-2003 =================== - Added support for the GRUB Multiboot Specification. - Changed the old FILO boot loader by GRUB, which have better support for modern hardware and have a lot of new features. - Added a floppy controller reset during floppy_init(). - Fixed child page-tables initialization during fork(). - Updated code to detect newer Intel processors using CPUID extensions (where available). - Report more and better information during boot process. 0.0.0w - 01-Jun-2003 ==================== - Added more features to ioctl() system call for ttys. - Improved terminal handling in graphics mode using svgalib. - Fixed a big bug during page table allocation and initialization in some parts of kernel. - New system calls: sys_setgroups 0.0.0v - 01-Apr-2003 ==================== - Removed the already-registered-device control, which avoided to mount as a root device the rest of disk drives that was not primary master. - The *stat() system calls now returns PAGE_SIZE (4096 bytes) as a "st_blksize" value. Before, it returned 1024 bytes which affected the sys_getdents() behavior. - Fixed lot of bugs in old_mmap() and sys_munmap() and its related functions. - Added support for the controlling terminal (ctty), process groups, sessions, etc. - New system calls: sys_sethostname, sys_setdomainname, sys_getpgid, sys_getsid 0.0.0u - 01-Jan-2003 ==================== - Fixed some bugs in the buffer cache which affected hash functions. - Reduced signal latency between processes. Sometimes it caused uncontrolled reentries in the kernel. - Exception and interruptions entry calls improved. - Implemented inode_lock() and inode_unlock() for the internal inode system blocking. - Inodes freeing routine iput() improved. - Improvements in the TAB handling mechanism of the console driver. - Fixed a critical bug in the read function in file.c, which caused to don't read, sometimes, the last block of a file. - It compiles with no errors with gcc-2.96. 0.0.0t - 01-Sep-2002 ==================== - Improvements on error detection of the buffer cache. - old_mmap() and sys_munmap() system calls totally rewritten. - Improved the internal structure of the virtual addresses map for each process. - Improvements while loading in memory ELF binaries. - Implemented new semaphores during the access to process table. - Improvements on detecting page_faults caused by process stack. - Boot option LANG removed. It was going to allow kernel messages in many languages. - FILO improvements in memory detection on old 80386 and 80486 processors. 0.0.0s - 03-Jul-2002 ==================== - Fixed a bug in floppy driver during the check results after reading. - Improvements on the floppy driver when moving transfer area to kernel memory space. 20KB being freed to user space. - Rewritten namei() and it's helping routines. - Improved symbolic links handling mechanism. - Improvements on the internal registry of the device drivers. - New system calls: sys_idle 0.0.0r - 01-May-2002 ==================== - Improvements on the floppy driver. Resource locking implemented. - Fixed some bugs in do_munmap(). - Fixed a bug in namei.c which affected directly to symbolic links with an absolute path. 0.0.0q - 01-Apr-2002 ==================== - Fixed some bugs in FILO. - Improvements on the floppy driver. - System call sys_getdents() totally rewritten. - Fixed a bug in namei.c. bmap() was not used correctly and caused to not localize files in directories bigger than 12 direct blocks (EXT2). - Fixed a bug in mmap.c. It didn't controlled correctly the null-pointer-references in the user space. - Fixed some bugs about inodes and buffer's space. get_free_inode() and get_free_buffer() called a sleep() with the parameter PROC_INTERRUMPIBLE. Currently the only parameter implemented is PROC_UNINTERRUMPIBLE. 0.0.0p - 03-Mar-2002 ==================== - ELF binaries dynamically linked loading fully restructured. - It works with no problems under Bochs v1.3. Although it's too slow, due to an excess of internal structures to initialize. - Fixed some bugs during process synchronization. - Reestructured again the stack layout in memory of the ELF binaries, to be the same as in Linux. - Minimum support for Linux's dynamically linked ELF binaries. - New system calls: old_mmap, sys_munmap, sys_mprotect 0.0.0o - 01-Jan-2002 ==================== - Fixed a bug in elf.c. It didn't free a buffer at the end of ELF binaries check. - Fixed a bug in FILO which caused the kernel don't mount filesystems in other devices than primary master. The value of ROOTDRIVE didn't match with the kernel. - Added symbolic links support. - New system calls: sys_sigsuspend, sys_readlink 0.0.0n - 01-Dec-2001 ==================== - Console driver improvements to interpret ANSI escape sequences. - Enhanced detection of the new Intel processors. - It compiles with no errors with egcs-2.91.66. - Improvements in the detection and treatment of signals for memory protection errors. - Reestructured the stack layout in memory of the ELF binaries, to be the same as in Linux. - Totally improved the runtime environment of /sbin/init. - Fixed a bug in inode.c (during the change from "indirect block" to "double-indirect block"). - FILO: Added ROOTDRIVE option, which will allow to specify the "root filesystem" to mount when the kernel is loaded. - Fixed a bug in file.c which caused overwrittings in the user's memory space. - Fixed some bugs in BSS section during demand paging. - New system calls: sys_statfs, sys_fstatfs, sys_nanosleep, sys_umask, sys_uname, sys_waitpid, sys_olduname, sys_iopl - Improved system calls: sys_ioctl, sys_wait4 0.0.0m - 01-Jul-2001 ==================== - New driver for IDE/ATA hard disks, it also detects ATAPI CDROM devices. This new driver is working in read-only mode for the moment. - Improvements on timers. They work similarly to signals, so it allows to have a maximum of 31 working simultanously. - Fixed bug in printk() function. - Added the driver for memory devices (/dev/mem, /dev/kmem, /dev/null and /dev/zero). - Big improvements to the console driver to interpret ANSI escape sequences. - FILO (FIwix LOader) has now more dependence with the kernel. - New system calls: sys_fchdir 0.0.0l - 01-May-2001 ==================== - Created the file 'Changes' which will contain all the changes between kernel releases. - Bug fixed in the free pages count during the memory initialization process. - Bug fixed in a pointer into each process' internal structure, which basically affected to sys_execve() system call, but it also caused some unexpected General Protection Faults (GPFs). - Fixed a calc error which causes an overflow over 1024 in the pages table. - Big improvements in the console and keyboard driver. - New feature CLOSE_ON_EXEC added for the file descriptor of a process. - Algorithm modified for the system calls sleep(), wakeup() and wake_proc(). This is now much more effective although it's still provisional. - New system calls: sys_access - Improved system calls: sys_fcntl, sys_ioctl