You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+27Lines changed: 27 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -165,6 +165,33 @@ cross-compilation and QEMU execution:
165
165
|`paging` feature | Enables page table management; maps MMIO regions listed in config |
166
166
|`multitask` feature | Enables multi-task scheduler with cooperative scheduling support |
167
167
168
+
## ArceOS Tutorial Crates
169
+
170
+
This crate is part of a series of tutorial crates for learning OS development with [ArceOS](https://github.com/arceos-org/arceos). The crates are organized by functionality and complexity progression:
171
+
172
+
| # | Crate Name | Description |
173
+
|:---:|---|---|
174
+
| 1 |[arceos-helloworld](https://crates.io/crates/arceos-helloworld)| Minimal ArceOS unikernel application that prints Hello World, demonstrating the basic boot flow |
175
+
| 2 |[arceos-collections](https://crates.io/crates/arceos-collections)| Dynamic memory allocation on a unikernel, demonstrating the use of String, Vec, and other collection types |
176
+
| 3 |[arceos-readpflash](https://crates.io/crates/arceos-readpflash)| MMIO device access via page table remapping, reading data from QEMU's PFlash device |
177
+
| 4 |[arceos-readblk](https://crates.io/crates/arceos-readblk)| VirtIO block device driver discovery and disk I/O, demonstrating device probing and block read operations |
178
+
| 5 |[arceos-childtask](https://crates.io/crates/arceos-childtask)| Multi-tasking basics: spawning a child task (thread) that accesses a PFlash MMIO device |
179
+
| 6 |**arceos-msgqueue** (this crate) | Cooperative multi-task scheduling with a producer-consumer message queue, demonstrating inter-task communication |
180
+
| 7 |[arceos-loadapp](https://crates.io/crates/arceos-loadapp)| FAT filesystem initialization and file I/O, demonstrating the full I/O stack from VirtIO block device to filesystem |
181
+
| 8 |[arceos-userprivilege](https://crates.io/crates/arceos-userprivilege)| User-privilege mode switching: loading a user-space program, switching to unprivileged mode, and handling syscalls |
182
+
| 9 |[arceos-lazymapping](https://crates.io/crates/arceos-lazymapping)| Lazy page mapping (demand paging): user-space program triggers page faults, and the kernel maps physical pages on demand |
183
+
| 10 |[arceos-runlinuxapp](https://crates.io/crates/arceos-runlinuxapp)| Loading and running real Linux ELF applications (musl libc) on ArceOS, with ELF parsing and Linux syscall handling |
184
+
| 11 |[arceos-guestmode](https://crates.io/crates/arceos-guestmode)| Minimal hypervisor: creating a guest address space, entering guest mode, and handling a single VM exit (shutdown) |
185
+
| 12 |[arceos-guestaspace](https://crates.io/crates/arceos-guestaspace)| Hypervisor address space management: loop-based VM exit handling with nested page fault (NPF) on-demand mapping |
| 14 |[arceos-guestmonolithickernel](https://crates.io/crates/arceos-guestmonolithickernel)| Full hypervisor + guest monolithic kernel: the guest kernel supports user-space process management, syscall handling, and preemptive scheduling |
188
+
189
+
**Progression Logic:**
190
+
191
+
-**#1–#7 (Unikernel Stage)**: Starting from the simplest output, these crates progressively introduce memory allocation, device access (MMIO / VirtIO), multi-task scheduling, and filesystem support, building up the core capabilities of a unikernel.
192
+
-**#8–#10 (Monolithic Kernel Stage)**: Building on the unikernel foundation, these crates add user/kernel privilege separation, page fault handling, and ELF loading, progressively evolving toward a monolithic kernel.
193
+
-**#11–#14 (Hypervisor Stage)**: Starting from minimal VM lifecycle management, these crates progressively add address space management, virtual devices, timer injection, and ultimately run a full monolithic kernel inside a virtual machine.
0 commit comments