No description
| src | ||
| .gitignore | ||
| linker.ld | ||
| Makefile | ||
| README.md | ||
SquidgeOS
RISC-V Operating System.
Kernel Development Roadmap
Phase 1: Foundations & Memory Management (Current)
- Bootstrapping: RISC-V
entry.Sand kernel entry point. - UART Driver: Basic serial communication for debugging.
- Panic System: Kernel panic mechanism for fatal errors.
- Physical Memory: Page-level allocator (free list based).
- Kernel Heap:
kmalloc/kfreewith:- Splitting of large blocks.
- Doubly-linked list headers.
- Bidirectional coalescing (Iterative).
- x ] String Library: Complete
lib/string.c(memset,memcpy,strcmp,strlen). - Formatted Printing: Robust
kprintfimplementation for hex and decimal.
Phase 2: Hardware Interfacing & Traps
- Trap Handling:
- Setup
mtvec(Machine Trap Vector). - Assembly "trampoline" to save/restore registers.
- C dispatcher for exceptions and interrupts.
- Setup
- Timer Interrupts:
- Interface with RISC-V CLINT (Core Local Interrupter).
- Implement a system heartbeat (ticks).
- External Interrupts: Setup PLIC (Platform-Level Interrupt Controller).
- Keyboard Driver (Input Buffer & Scancode Processing)
Phase 3: Multitasking & Scheduling
- Task Structure: Define
task_struct(PID, State, Stack Pointer, Priority). - Context Switching: Assembly logic to switch register sets between tasks.
- Scheduler:
- Implement a Round-Robin scheduling algorithm.
- Task lifecycle management (Create, Yield, Terminate).
- Synchronization: Basic Spinlocks or Semaphores for resource protection.
Phase 4: Virtual Memory
- Sv39 Paging:
- Walk the 3-level page table structure.
- Map/Unmap functions for virtual addresses.
- Kernel/User Separation: Isolate kernel memory from user processes.
- Higher Half Kernel: Remap kernel to upper virtual memory.
Phase 5: Userspace & System Calls
- User Mode Jump: Switch CPU to User (U) mode.
- ECALL Interface:
- Implement system call dispatcher.
- Basic syscalls:
write,exit,getpid,fork.
- ELF Loader: Read and execute simple static binaries.
Phase 6: Filesystem & Shell
- VFS Layer: Abstract File System interface.
- Initial RAM Disk (initrd): Load basic files into memory.
- User Shell: Interactive CLI to execute commands and scripts.