Skip to content
/ ros Public

A JOS-like x86 operating system written in bare-metal Rust

Notifications You must be signed in to change notification settings

NobodyNada/ros

Repository files navigation

ros

A JOS-like operating system kernel written in Rust, for CS 444, Fall 2021.

Setup

ros requires a Rust nightly toolchain with the rust-src component installed. If you have rustup installed and configured, it will read the rust-toolchain.toml and automatically download and install the correct toolchain.

Building and running

First, compile and link all source files with cargo build:

cargo build             # for a debug build
cargo build --release   # for a release build

Then, use cargo run to execute the kernel with a list of user programs:

cargo run -- smallersh catline wc [...]             # to run a debug build
cargo run --release -- smallersh catline wc [...]   # to run a release build
cargo run --release -- -n [programs...]             # to run in release mode with no GUI
cargo run -- -d [programs...]                       # to run in a debugger

The provided smallersh executable implements a minimal "shell" that allows you to interactively launch programs. Programs are referenced by index: if you ran ROS with the programs smallersh catline wc, smallersh would be program 0, catline woudl be program 1, and wc would be program 2. smallersh supports pipes (with the | operator) and background execution (with the & operator). For example:

cargo build --release
cargo run --release -- smallersh catline wc helloworld spin
[...]
> 4 & 3         # spin & helloworld
Hello, world!
Process 3 exited.
> 1 | 2         # catline | wc
The quick brown fox jumps over the lazy dog.
Process 4 exited.
1 9 45
Process 5 exited.
>

The following user programs are included (under the src/bin) directory:

Program Description
cat Copies standard input to standard output until end-of-file is reached.
catline Copies one line from stdin to stdout.
count Counts from 0 to 9.
forktest A simple test to ensure the fork syscall works.
helloworld Hello, world
pagefault Dereferences a null pointer to test the pagefault handler.
pipetest Reads and writes to a pipe.
smallersh Small small shell
spin Spins forever, to test preemption.
wc Counts characters, words, and lines.
yield Calls the yield syscall in a loop.

About

A JOS-like x86 operating system written in bare-metal Rust

Resources

Stars

Watchers

Forks

Packages

No packages published