diff --git a/.gitignore b/.gitignore index 614368ae..aa359a40 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,16 @@ -.idea/* -os/target/* -os/.idea/* -os/Cargo.lock +.idea +Cargo.lock +target os/src/link_app.S os/last-* +os/Cargo.lock +user/build user/target/* user/.idea/* user/Cargo.lock +easy-fs/Cargo.lock +easy-fs/target/* +easy-fs-fuse/Cargo.lock +easy-fs-fuse/target/* tools/ +pushall.sh \ No newline at end of file diff --git a/README.md b/README.md index e28e783e..e2dc4e34 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,67 @@ # rCore-Tutorial-v3 -rCore-Tutorial version 3.x +rCore-Tutorial version 3.5. See the [Documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/). -## Dependency +## 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) -### Binaries +## Overview -* rustc 1.56.0-nightly (b03ccace5 2021-08-24) +This project aims to show how to write an **Unix-like OS** running on **RISC-V** platforms **from scratch** in **[Rust](https://www.rust-lang.org/)** for **beginners** without any background knowledge about **computer architectures, assembly languages or operating systems**. -* qemu: 5.0.0 +## Features -* rustsbi: qemu[7d71bfb7] k210[563144b0] +* Platform supported: `qemu-system-riscv64` simulator or dev boards based on [Kendryte K210 SoC](https://canaan.io/product/kendryteai) such as [Maix Dock](https://www.seeedstudio.com/Sipeed-MAIX-Dock-p-4815.html) +* 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](https://rcore-os.github.io/rCore-Tutorial-Book-v3/) 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 + +* [x] automatically clean up and rebuild before running our project on a different platform +* [x] fix `power` series application in early chapters, now you can find modulus in the output +* [x] use `UPSafeCell` instead of `RefCell` or `spin::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]` in `run_first_task`) +* [x] move `TaskContext` into `TaskControlBlock` instead of restoring it in place on kernel stack(since ch3), eliminating annoying `task_cx_ptr2` +* [x] replace `llvm_asm!` with `asm!` +* [x] expand the fs image size generated by `rcore-fs-fuse` to 128MiB +* [x] add a new test named `huge_write` which evaluates the fs performance(qemu\~500KiB/s k210\~50KiB/s) +* [x] flush all block cache to disk after a fs transaction which involves write operation +* [x] replace `spin::Mutex` with `UPSafeCell` before SMP chapter +* [x] add codes for a new chapter about synchronization & mutual exclusion(uniprocessor only) + +### Todo(High priority) + +* [ ] support Allwinner's RISC-V D1 chip +* [ ] bug fix: we should call `find_pte` rather than `find_pte_create` in `PageTable::unmap` +* [ ] bug fix: check validity of level-3 pte in `find_pte` instead of checking it outside this function +* [ ] use old fs image optionally, do not always rebuild the image +* [ ] add new system calls: getdents64/fstat +* [ ] shell functionality improvement(to be continued...) +* [ ] give every non-zero process exit code an unique and clear error type +* [ ] effective error handling of mm module + +### Todo(Low priority) + +* [ ] rewrite practice doc and remove some inproper questions +* [ ] provide smooth debug experience at a Rust source code level +* [ ] format the code using official tools + + +### Crates + +We will add them later. diff --git a/dev-env-info.md b/dev-env-info.md new file mode 100644 index 00000000..f76470a5 --- /dev/null +++ b/dev-env-info.md @@ -0,0 +1,18 @@ +# rCore-Tutorial-v3 +rCore-Tutorial version 3.x + +## Dependency + +### Binaries + +* rustc: 1.57.0-nightly (e1e9319d9 2021-10-14) + +* cargo-binutils: 0.3.3 + +* qemu: 5.0.0 + +* rustsbi-lib: 0.2.0-alpha.4 + + rustsbi-qemu: d4968dd2 + + rustsbi-k210: b689314e