Skip to content

glolichen/lios

Repository files navigation

LiOS

An experimental x86_64 operating system written from scratch in C.

Currently Implemented

  • 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

To Do

  • 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

Memory Layout

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 by vmalloc 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.

Sources

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

About

Questionably written operating system

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published