An experimental x86_64 operating system written from scratch in C.
- Bootstrapping to long mode
- Interrupts (only keyboard implemented)
- Printing to VGA graphical mode and serial
- Some basic memory management
- Uses paging (obviously)
- Linked list based page frame and virtual address allocator
- Kernel heap allocator (using linked lists and bitmap)
- Supports UEFI
- CPUID stuff?
- Virtual address allocator can only use 1 4KiB page, which is only 128 linked list nodes. So if the memory gets too fragmented the allocator will completely break.
- Filesystem and hard disk/solid state drive driver
- Processes
- ELF program loading and userspace programs
- Userspace shell program
Sort of based on Linux, with other self-imposed janks as well.
- 0xFFFFFFFF80000000-0xFFFFFFFFFFFFFFFF (highest 2GiB) is directly mapped to the first 2GiB of physical memory. Paging structures, and also DMA structures sometime in the future, are stored here. Used for
kmalloc
- 0xFFFFF00000000000-0xFFFFFFFF80000000 are used for other pieces of kernel memory. Used for
vmalloc
. Page frames used byvmalloc
come from physical memory above the 2GiB mark. User page frames also come from there. - 0xFFFF800000000000-??? reserved for VGA frame buffer virtual address.
- 0xFFFF900000000000-??? are used to temporarily map PCI device configuration spaces when looking for NVMe drives, and is then used to map the NVMe device for future use.
- Lower-half virtual memory for user processes.
- OSTEP book
- Intel and AMD manuals
- QEMU docs
- Multiboot2 specification
- OSDev Wiki
- ACPI specification
- UEFI specification
- NVMe specifications
- NVM Express Base, revision 2.1
- NVM Command Set, revision 1.1
- NVMe over PCIe, revision 1.1
- Microsoft FAT32 specification
write bootable usb: sudo dd if=iso/os.iso of=/dev/sda
create qemu drive: qemu-img create -f raw disk.img [size]
and create GPT with cfdisk disk.img