Vision
This project's vision is to help every college student read all the code of an operating system.
With only 2000 lines of code, egos-2000 implements every component of an operating system for education. It can run on a RISC-V board and the QEMU software emulator.
# The cloc utility is used to count the lines of code (LOC).
# The command below counts the LOC of everything excluding text documents.
> cloc egos-2000 --exclude-ext=md,txt
...
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 37 510 665 1579
C/C++ Header 10 68 105 285
Assembly 4 6 31 72
make 1 12 0 64
-------------------------------------------------------------------------------
SUM: 52 596 801 2000 (exactly 2000!)
-------------------------------------------------------------------------------
Earth and Grass Operating System
The egos part of egos-2000 comes from its 3-layer architecture.
- The earth layer implements hardware-specific abstractions.
- tty and disk device interfaces
- interrupt and memory management interfaces
- The grass layer implements hardware-independent abstractions.
- processes, system calls and inter-process communications
- The application layer implements file system, shell and user commands.
The definitions of struct earth
and struct grass
in this header file specify the layer interfaces.
Developed for CS4411 at Cornell, egos-2000 also has a special version running on the RISC-V processor from ECE4750 at Cornell. The goal is to make OS courses more connected with computer architecture courses.
Usages and Documentation
For compiling and running egos-2000, please read this document. The RISC-V instruction set manual and SiFive FE310 processor manual introduce the privileged ISA and memory map. This document further introduces the teaching plans, software architecture and development history.
For any questions, please contact Yunhao Zhang.
Acknowledgements
Many thanks to Robbert van Renesse, Lorenzo Alvisi, Shan Lu, Hakim Weatherspoon and Christopher Batten for their support. Many thanks to Meta for a Meta fellowship. Many thanks to all CS5411/4411 students at Cornell over the years for helping improve this course.