Home - hhuOS/hhuOS GitHub Wiki
Welcome to hhuOS!
Introduction
hhuOS is a small operating system for the x86-architecture, build for teaching purposes. The main goal of this project is to show, how different aspects of operating systems theory can be implemented and linked together. The system is not aimed to be a fully featured operating system for daily use.
This is a project by the Operating Systems group at the Heinrich Heine University Düsseldorf.
Features
Below, you can find some the features, implemented in hhuOS.
Multiboot
hhuOS implements the Multiboot standard, making it compatible with a wide range of bootloaders. Bootable images can be build using GRUB or our own bootloader towboot.
Applications
The operating system boots into a simple Unix-like shell, allowing the user to interact with the filesystem and execute other programs. These include a variety of tools, known from other operating system (e.g. ls
, cat
, echo
, etc.), as well as demos and games.
Paging
Paging is used to abstract from physical memory. This allows hhuOS to use a Higher half kernel and run each process in its own virtual address space.
Processes
Binary files (ELF) can be executed as processes and each process can start multiple concurrent threads. All currently running threads are scheduled by the kernel in a round-robin fashion, using preemptive scheduling.
User space
hhuOS makes use of x86 protection rings: The kernel itself runs in Ring 0 with full priviliges, while applications are being executed in Ring 3. The kernel exposes functionality to user space applications via system calls. Application developers can make use of a rich library, which offers multiple data structures, access to the filesystem, graphical functionality and the ability to send and receive data via an IPv4 network.
Filesystem
hhuOS implements a virtual filesystem overlay, which supports mounting physical filesystems to a directory. Currently FAT-based filesystems are supported via FatFs. It is also possible to mount TAR-archives and ISO9660 disks as read-only filesystems.
Furthermore, device drivers may add special nodes to the virtual filesystem to expose device functionality. This way, communicating with a device/driver can be done exclusively via file operations.
Storage
Storage devices are detected by the operating system during the boot process. The storage driver interface is kept simple, allowing developers to focus on the hardware, instead of linking their code to the kernel. Currently, hhuOS includes drivers for IDE, AHCI and Floppy disks.
Network
The kernel implements a UDP/IP stack, which exposes a socket API to user space applications. Users can send and receive datagrams via UDP, or hook into the network stack at other levels (e.g. Ethernet or IPv4) to work with low-level protocols. IPv4 addresses may be assigned to and removed from devices via the ip
command.
The kernel also offers an interface for network drivers. Currently, a loopback device and the Realtek RTL8139
and NE2000
network cards are supported.