* Implemented Spinlocks and applied to VM/Scheduler
* Added Garbage Collector for tasks
* Moved Getchar to IOKeyboard with locking
* Cleanup panic messages
fix(userspace/string.h): gets_s now correctly work with \b
chore(kmain): now ring3 is default when pressing any key (instead of ksh)
feat(termosh): spawn in termosh
- fix(gs): was a nightmare. now its solved. Both MSR_GS_BASE and MSR_KERNEL_GS_BASE are now initialized to , preventing null GS_BASE when interrupt occurs during the first kernel task run
- chore(syscall.asm): stability improvements. User RSP is now saved via kernel stack instead of global g_cpu, preventing stack theft when task switch occurs during a syscall
- feat(interrupts): all irq and isr handlers now conditionally perform swapgs based on the CS selector (checkin if comfing from ring 3)
- upgrade(scheduler): big update: 1) added TASK_BLOCKED state from process sync; 2) syncronized PID and Task ID to fix wakeup logic; 3) implemented sched_block and sched_exit() for proper wait/exit syscalls
- Implement custom 'HOT!' binary format and Rust-based elf2hot converter.
- Upgrade kernel loader with segment-based loading and BSS zeroing.
- Refactor scheduler for Ring 3 IRET frames and fix CS/SS selector swap.
- Add user stack allocation (0x70000000) and linker scripts for binary cleanup.
- Implemented CR3 switching in scheduler for process isolation
- Added 'process' structure and PML4 cloning (vmm_create_address_space)
- Added NASM crt0 and C entry point for userspace apps
build: updated CMakeLists to build and copy to initramfs
wip(syscalls): initial syscalls
chore(ksh/kfetch): minor changes
chore(gitignore): added initramfs/*