Simple OS
Go to file
Mathieu Maret 778999c8f4 Fix tests 2024-03-13 22:02:24 +01:00
arch/x86 Fix freeing squattedCtx when deleting thread 2024-02-27 23:14:09 +01:00
core Fix threadMsleep for 0 2024-03-13 21:40:51 +01:00
docs Add diagram to doc 2022-07-30 15:59:50 +02:00
drivers zero: keep track of allocated pages 2024-03-06 22:00:09 +01:00
tests Fix tests 2024-03-13 22:02:24 +01:00
userspace Fix usleep for small values 2024-02-16 00:51:18 +01:00
.clang-format vim and clang-format configuration file 2020-04-27 00:13:43 +02:00
.gitignore Put back kernel sym in debug.gdb 2024-02-08 23:05:54 +01:00
Makefile Add isodebug target 2024-02-15 23:41:58 +01:00 Update gcc deps 2024-01-26 22:23:10 +01:00 gdb: print_list can take the next element name in param 2024-02-08 23:15:29 +01:00
debug.gdb debug symbols are expected in .debug file 2023-11-09 23:44:04 +01:00
debug.iso.gdb Add missing debug.iso.gdb file 2024-02-26 23:03:49 +01:00
disk.sfdisk mmap syscall declaration 2024-02-08 23:08:14 +01:00
linker.ld backtrace: print function name instead of addr 2023-11-20 00:12:58 +01:00
screenshot_1.png update screenshot 2021-11-08 22:53:49 +01:00


Matos is a simple OS.

It's targetting x86 and inspirated by



To generate iso image

  • mtools xorriso (which is libisoburn on ArchLinux)
  • gcc for 32bits (e.g. gcc-multilib for ubuntu) >= 11
  • sfdisk (util-linux)

Run it

make run


make fd.iso && qemu-system-x86_64 -cdrom fd.iso

you can also test it

make test


gdb could be launch with debug symbols using :

make debug

Serial log will be saved in the serialOut file.

Then you can check some matos specific commands or pretty printing with

help user-defined info pretty-printer (Should contains matos_pretty_printers)

Change Disk partitions

You can either modify the disk.sfdisk file


modify the disk image with your favorit tool (e.g. gparted) and re-generate disk.sfdisk

sfdisk -d > disk.sfdisk


In arch/x86/boot, you can choose the assembly used to start the C part by removing the .opt extension

  • boot.asm: intel syntax with multiboot support
  • boot.S: GNU As syntax with multiboot support
  • boot_multiboot2.S: GNU As syntax with multiboot2 support

/!\ multiboot2 is not supported by qemu for -kernel option ( So you may have to use the fd.iso image and modify the grub configuration from multiboot /boot/kernel to multiboot2 /boot/kernel


  • VGA Driver
  • keyboard Driver
  • Serial Driver
  • Timer
  • Virtual memory
  • Allocator
  • Multithread (Full preempt)
  • Mutex
  • ATA
  • basic userspace with syscall


  • ringbuffer protected by mutex
  • blocking read