Skip to content

Latest commit

 

History

History
280 lines (240 loc) · 9.8 KB

File metadata and controls

280 lines (240 loc) · 9.8 KB

ALOS - Alexy Operating System

ALOS is a minimalist operating system kernel written in C and x86 Assembly, designed for learning purposes and running on QEMU. It implements core OS concepts including memory management, interrupt handling, storage, filesystem support, and a TCP/IP networking stack.

Note: Code comments in this project are written in French. The codebase serves as both a learning resource and a functional kernel.

Features implemented and future plans

Core System ✓

  • GDT/IDT setup
  • Physical Memory Manager
  • Kernel Heap
  • Virtual Memory (Paging) - Identity mapping
  • RTC Real-Time Clock
  • PIT Programmable Interval Timer
  • Kernel Logging System (file-based, /system/logs)
  • System logs
  • ACPI Support (power management, shutdown/reboot)
  • SMP/Multi-core support
  • APIC/x2APIC (Advanced interrupt handling)
  • Kernel modules loading (dynamic drivers)

Memory Management

  • Virtual Memory (Paging) - Identity mapping
  • Demand paging / Page fault handler
  • Copy-on-Write (COW)
  • Memory-mapped files (mmap)
  • Shared memory (SHM)
  • Swap support

Process & Scheduling

  • Multitasking (Round Robin scheduler)
  • Context Switching (kernel threads)
  • User Space (Ring 3) with TSS
  • System Calls (POSIX/BSD-like interface)
  • Priority-based scheduler
  • Process groups and sessions
  • Fork/exec implementation
  • Signals (POSIX-like)
  • Real-time scheduling (SCHED_FIFO, SCHED_RR)

IPC (Inter-Process Communication)

  • Pipes (anonymous and named/FIFO)
  • Message queues
  • Semaphores
  • Shared memory segments
  • Unix domain sockets

Storage & File Systems

  • PCI Enumeration
  • ATA/IDE Driver (PIO)
  • VFS Layer
  • Ext2 Read Support
  • Ext2 Write Support
  • File/Directory Creation (vfs_create, vfs_mkdir)
  • AHCI/SATA driver (DMA support)
  • NVMe driver
  • FAT32 support
  • ISO9660 (CD-ROM filesystem)
  • File locking mechanisms
  • Inotify/fsnotify (file change notifications)
  • RAID support (software)

Network Stack

  • Ethernet/ARP
  • IPv4/ICMP
  • UDP/DHCP
  • DNS Resolver (A, PTR, CNAME + cache)
  • Ping with DNS support
  • TCP Implementation (full state machine)
  • Simple HTTP server based on storage
  • IPv6 support
  • Network bridging/routing
  • Firewall/packet filtering (iptables-like)
  • Raw sockets
  • Unix domain sockets
  • TLS/SSL
  • SSH server/client
  • FTP/SFTP
  • NFS client

Device Drivers

  • VGA Console
  • PS/2 Keyboard
  • Azerty keyboard (with keymap abstraction)
  • USB stack (XHCI/EHCI/UHCI)
  • USB HID (keyboard/mouse)
  • USB Mass Storage
  • Audio driver (AC97/Intel HDA)
  • Ethernet driver Intel I219-V
  • WiFi support (with WPA2/WPA3)
  • Graphics card drivers (Intel/AMD/NVIDIA)
  • Serial port (COM1-4) advanced support
  • Parallel port support

User Interface

  • Interactive Shell with history
  • Persistent history (/config/history)
  • GUI + Mouse
  • Window manager/compositor
  • OpenGL support
  • Framebuffer console (VESA/GOP)
  • UTF-8 string and console
  • Font rendering (TrueType/FreeType)
  • Desktop environment
  • Widget toolkit
  • Multi-monitor support

User Space & Applications

  • ELF Loader (32-bit executables)
  • ELF 64-bit support
  • Dynamic linking (shared libraries .so)
  • Standard C library (libc)
  • POSIX thread library (pthread)
  • Math library (libm)
  • Compression libraries (zlib, gzip)
  • Core utilities (ls, cp, mv, rm, cat, grep, etc.)
  • Text editor (vi/nano-like)
  • Package manager
  • GCC/Compiler toolchain port

Configuration & Scripts

  • Scripting files (/config/startup.sh)
  • Network configuration files (/config/network.conf)
  • Persistent history (/config/history)
  • Init system (systemd/OpenRC-like)
  • Service management
  • Environment variables
  • User authentication (/etc/passwd, /etc/shadow)
  • Permissions and ACL
  • Cron/scheduled tasks

Security

  • User/group management
  • File permissions (chmod/chown)
  • Access Control Lists (ACL)
  • Sandboxing/containers
  • Secure boot support
  • ASLR (Address Space Layout Randomization)
  • DEP/NX bit enforcement
  • Encrypted filesystems
  • SELinux/AppArmor-like MAC

Development & Debugging

  • GDB stub (remote debugging)
  • Kernel debugger (kdb)
  • System call tracing (strace-like)
  • Performance profiling tools
  • Memory leak detection
  • Code coverage tools

Advanced Features

  • Virtualization support (KVM guest)
  • Containers/namespaces
  • Control groups (cgroups)
  • Hibernation support
  • Laptop features (battery, backlight)
  • Bluetooth stack
  • TPM support
  • Hot-plug devices support

Documentation & Testing

  • API documentation
  • User manual
  • Automated testing suite
  • Continuous integration
  • Benchmarking suite

Project Structure

src/
├── arch/x86/          # x86-specific code (boot, GDT, IDT, TSS, usermode)
├── config/            # Kernel configuration
├── kernel/            # Kernel core (main, console, keyboard, syscalls, elf)
├── mm/                # Memory Management (PMM, heap, VMM)
├── drivers/           # Hardware drivers
│   ├── ata.c/h        # ATA/IDE disk driver
│   ├── pci.c/h        # PCI bus driver
│   └── net/           # Network drivers (PCnet)
├── fs/                # Filesystems
│   ├── vfs.c/h        # Virtual File System layer
│   └── ext2.c/h       # Ext2 filesystem driver
├── net/               # Network stack
│   ├── core/          # Network infrastructure
│   ├── l2/            # Layer 2 (Ethernet, ARP)
│   ├── l3/            # Layer 3 (IPv4, ICMP, Routing)
│   └── l4/            # Layer 4 (UDP, TCP, DHCP, DNS)
├── shell/             # Command interpreter
│   ├── shell.c/h      # Shell core (readline, history, parsing)
│   └── commands.c/h   # Built-in commands (help, ping, exec, etc.)
├── userland/          # User space programs (server, hello, test)
└── include/           # Shared headers (Multiboot, linker script, ELF)

Architecture Overview

┌─────────────────────────────────────────────────────────┐
│              User Space (Ring 3)                        │
│         ELF Programs  │  Userland libc                  │
├─────────────────────────────────────────────────────────┤
│                  System Calls (int 0x80)                │
├─────────────────────────────────────────────────────────┤
│              Kernel Space (Ring 0)                      │
├─────────────────────────────────────────────────────────┤
│     VFS API              │         Network API          │
│  (open, read, readdir)   │    (send, recv, socket)      │
├──────────────────────────┼──────────────────────────────┤
│   Ext2   │  (Future FS)  │  TCP/UDP  │ ICMP │ DHCP/DNS  │
├──────────────────────────┼──────────────────────────────┤
│      ATA Driver          │     IPv4  │  ARP  │ Ethernet │
├──────────────────────────┼──────────────────────────────┤
│      IDE Controller      │       PCnet Driver           │
├──────────────────────────┴──────────────────────────────┤
│                    PCI Bus                              │
├─────────────────────────────────────────────────────────┤
│              Hardware (x86)                             │
└─────────────────────────────────────────────────────────┘

Building

Prerequisites

  • Cross-compiler: i686-elf-gcc (in ~/opt/cross/bin/)
  • Assembler: nasm
  • Emulator: qemu-system-i386
  • Disk utilities: e2fsprogs (for creating Ext2 disk images)

Compilation

# Build the kernel
make

# Clean build artifacts
make clean

# Full rebuild
make clean && make

Creating a Disk Image

# Create a 32MB Ext2 disk image
dd if=/dev/zero of=disk.img bs=1M count=32
mkfs.ext2 disk.img

# Add files to the disk (using debugfs on macOS)
echo "Hello from ALOS!" > /tmp/hello.txt
debugfs -w disk.img -R "write /tmp/hello.txt hello.txt"

# Verify contents
debugfs disk.img -R "ls"

Running

make          # Compile le kernel
make iso      # Crée l'ISO bootable (télécharge Limine si nécessaire)
make run      # Lance QEMU avec l'ISO
make clean    # Nettoie les fichiers compilés
make distclean # Nettoie tout, y compris Limine

QEMU Configuration

Storage

  • Primary Master IDE disk: disk.img (Ext2 formatted)

License

This project is intended for educational purposes.

Contributing

Contributions are welcome!