📢 [Feb 3, 2025] The first draft of the EGOS book has been released which contains 9 course projects.
This project's vision is to help every student read all the code of a teaching operating system.
With only 2000 lines of code, egos-2000 implements every component of a teaching operating system that runs on both QEMU and RISC-V boards. The EGOS book further contains 9 course projects based on egos-2000.
# The cloc utility is used to count the lines of code.
> cloc egos-2000 --exclude-ext=md,txt,toml,json # excluding text files
...
github.com/AlDanial/cloc v 1.94 T=0.05 s (949.3 files/s, 62349.4 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 30 416 578 1597
C/C++ Header 9 61 100 253
Assembly 3 15 44 95
make 1 16 8 55
-------------------------------------------------------------------------------
SUM: 43 508 730 2000 (exactly!)
-------------------------------------------------------------------------------
The egos part of egos-2000 is named after its three-layer architecture.
- The earth layer implements hardware-specific abstractions.
- tty and disk device interface
- timer and memory management interface
- The grass layer implements hardware-independent abstractions.
- process control block and system call interface
- The application layer implements file system, shell and user commands.
The definitions of struct earth
and struct grass
in header file egos.h specify the layer interface.
Please read USAGES.md for running egos-2000 and
the instruction set manuals for the RISC-V privileged ISA.
Many thanks to Meta for a Facebook fellowship. Many thanks to Robbert van Renesse, Lorenzo Alvisi, Shan Lu, Hakim Weatherspoon and Christopher Batten for their support. Many thanks to Cheng Tan and Yu-Ju Huang for providing valuable feedback to the EGOS book and using egos-2000 in Northeastern CS4973/6640 and Cornell CS4411/5411. Many thanks to Haobin Ni and Hongbo Zhang for porting egos-2000 to mriscv, a simple processor written in SystemVerilog. Many thanks to Brandon Fusi for porting egos-2000 to Allwinner D1 and Sipeed's Lichee RV64 - Nezha compute module.
For any questions, please contact Yunhao Zhang.