Skip to content

Envision a future where every student can read all the code of a teaching operating system.

License

Notifications You must be signed in to change notification settings

yhzhang0128/egos-2000

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📢 [Feb 3, 2025] The first draft of the EGOS book has been released which contains 9 course projects.

Vision

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.

Fail to load an image of 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!)
-------------------------------------------------------------------------------

Earth and Grass Operating System

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.

Acknowledgements

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.