rCore-Tutorial-v3
rCore-Tutorial version 3.5. See the Documentation in Chinese.
news
- 2021.11.20: Now we are updating our labs. Please checkout chX-dev Branches for our current new labs. (Notice: please see the [Dependency] section in the end of this doc)
Overview
This project aims to show how to write an Unix-like OS running on RISC-V platforms from scratch in Rust for beginners without any background knowledge about computer architectures, assembly languages or operating systems.
Features
- Platform supported:
qemu-system-riscv64
simulator or dev boards based on Kendryte K210 SoC such as Maix Dock
- OS
- concurrency of multiple processes
- preemptive scheduling(Round-Robin algorithm)
- dynamic memory management in kernel
- virtual memory
- a simple file system with a block cache
- an interactive shell in the userspace
- only 4K+ LoC
- A detailed documentation in Chinese in spite of the lack of comments in the code(English version is not available at present)
Run our project
TODO:
Working in progress
Now we are still updating our project, you can find latest changes on branches chX-dev
such as ch1-dev
. We are intended to publish first release 3.5.0 after completing most of the tasks mentioned below.
Overall progress: ch7
Completed
Todo(High priority)
Todo(Low priority)
Crates
We will add them later.
rCore-Tutorial-v3
rCore-Tutorial version 3.5. See the Documentation in Chinese.
news
Overview
This project aims to show how to write an Unix-like OS running on RISC-V platforms from scratch in Rust for beginners without any background knowledge about computer architectures, assembly languages or operating systems.
Features
qemu-system-riscv64
simulator or dev boards based on Kendryte K210 SoC such as Maix DockRun our project
TODO:
Working in progress
Now we are still updating our project, you can find latest changes on branches
chX-dev
such asch1-dev
. We are intended to publish first release 3.5.0 after completing most of the tasks mentioned below.Overall progress: ch7
Completed
power
series application in early chapters, now you can find modulus in the outputUPSafeCell
instead ofRefCell
orspin::Mutex
in order to access static data structures and adjust its API so that it cannot be borrowed twice at a time(mention& .exclusive_access().task[0]
inrun_first_task
)TaskContext
intoTaskControlBlock
instead of restoring it in place on kernel stack(since ch3), eliminating annoyingtask_cx_ptr2
llvm_asm!
withasm!
rcore-fs-fuse
to 128MiBhuge_write
which evaluates the fs performance(qemu~500KiB/s k210~50KiB/s)spin::Mutex
withUPSafeCell
before SMP chapterTodo(High priority)
find_pte
rather thanfind_pte_create
inPageTable::unmap
find_pte
instead of checking it outside this functionTodo(Low priority)
Crates
We will add them later.