New Features
- Callout (Timer multiplexer)
- PTYs
- VFS Symlinks
- UNIX Domain Sockets
- Userspace framebuffer device
- Framebuffer TTYs
- Vectored I/O (
iovec) - PS/2 mouse
- Keyboard & mouse abstraction layers and pseudodevices
- ACPI support (thanks to uACPI)
- IOAPIC
- PCI/PCIe enumeration and kernel driver model
- SCE (System Call Extension)
- TSC (Timestamp Counter)
- New VMM (Virtual Memory Manager): Memory-mapped files, Copy on Write, map on page fault, unmap support
- New PMM (Physical Memory Manager): caches, faster allocation, page metadata array, improved fragmentation
- Improved kernel
printf(removed old SalernOS 0.0.x code) - Basic read/write NVMe 1.0e driver
- Mutex and Searchtree structures in kernel library (unused for now)
- More deferred process destruction
- Bug fixes
- New bugs
- More than I'm just forgetting now
New system calls
readv/writev(replacingreadandwrite)clock_getfaccessatppollreadlinkatsymlinkatunlinkatsocketbindlistenacceptconnectsendmsgrecvmsgsetitimermkdiratgetpeernamemunmap
Other changes
- 60 FPS TTYs thanks to new timer multiplexer
- Limited recursions in VFS lookup
- Kernel log to vnode to
/proc/kernel/log - Placed all configuration macros in
config/config.h - Improved platform abstraction with IPI macros and more
- Kernel panic IPI & user log
- SalernOS Boot splash
- Removed process-global signal masks (removed
sigthreadmasksystem call) - New logging subsysetm
- Removed vlink
- Maximum number of processes raised from 1,024 to 250,000
- File descriptor number recycling
- Maximum number of file descriptors raised to 96
- Improved lock debugging
Known issues
This release represents the single largest update to the kernel since its inception. As such, partly due to me overworking myself, it is also one of the most buggy and unstable yet. I'm releasing this now to take a break from kernel development for a few weeks. Here's a non-exaustive list of known issues and bugs:
- CTRL + Z (
SIGTSTP) still has some issues: launching a new program while one is stopped will hang the TTY/PTY - Some architecture-specific code is still present in common directories. This is not an issue for now as it is mostly testing code, and the kernel is only available for x86-64 anyway
- Controlling terminals in session structs may have to be held (unconfirmed)
- The
symlinkatsystem call should be rewritten: mishandling of paths with subdirectories - Deadlock between signal delivery and TTY flush (probably a deeper issue with
com_sys_sched_notify_*) - Signal tests show funky behavior
- X.org lags without
-dumbschedand hangs after awhile (likelly a signal issue) - Unaligned NVMe reads (and probably writes as well) return wrong MD5 sums
- Pressing the power button on real hardware causes a page fault in kernel mode and a subsequent kernel panic
- Kernel panic IPI causes corrupt log and user output (possible solution: NMI)
- The icewm window manager does not work properly (seems to exit properly after a button press, probably some POSIX violations and/or missing system calls)
- People say my PCI BAR calculations are wrong (solution: check the wiki or spec)
- The new reaper thread seems to avoid freeing zombie processes at times
- The new PMM's defragmentation system is not fully implemented
- An interrupt-based system call interface is still present, but broken (allows only up to 4 parameterss, but
mmaprequires 6) mmapdoes tricks withPROT_EXECbecause we don't havemprotectyet- Neofetch does not start (hangs, but the system remains stable)
- ELF slide causes GCC to crash, but all other programs work fine. Disabled for now, but should be enabled, otherwise
NULLis a valid pointer (which is the case now) tmpfscannot support hard links because it assumes that a vnode can only be present in one directory, but hard links work by having the same vnode in multiple directories- X11 windows (especially xterm) sometimes don t close. This is likelly to be a kernel issue, because they used to work in earlier 0.2.4 commits
- uACPI mutex helpers currently stub to spinlock
- The kernel uses wway too much memory on QEMU TCG and WHPX because these use very high addresses for reserved ranges (solution: keep page meta array only up to highest usable address, not highest address in general)
- The entire VMM is not thread safe: for example, unmapping a range while DMA to that range is happening will corrupt memory (solution: add range refcounts and hold/release on system calls with pointer arguments)
Autogenerated Changelog: kernel-0.2.3...kernel-0.2.4