From e8cabee7d798d29fb3c4492abbfabbb417f8d804 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Fri, 29 Apr 2022 11:35:03 +0800 Subject: [PATCH] add more comments --- user/src/bin/stackful_coroutine.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/user/src/bin/stackful_coroutine.rs b/user/src/bin/stackful_coroutine.rs index 783fe407..63ac9ca2 100644 --- a/user/src/bin/stackful_coroutine.rs +++ b/user/src/bin/stackful_coroutine.rs @@ -1,3 +1,6 @@ +// we porting below codes to Rcore Tutorial v3 +// https://cfsamson.gitbook.io/green-threads-explained-in-200-lines-of-rust/ +// https://github.com/cfsamson/example-greenthreads #![no_std] #![no_main] @@ -18,7 +21,6 @@ use alloc::vec::Vec; use user_lib::{exit}; // In our simple example we set most constraints here. -//const DEFAULT_STACK_SIZE: usize = 1024 * 1024 * 2; //for linux const DEFAULT_STACK_SIZE: usize = 4096; //128 got SEGFAULT, 256(1024, 4096) got right results. const MAX_TASKS: usize = 5; static mut RUNTIME: usize = 0; @@ -111,7 +113,6 @@ impl Runtime { /// it returns false (which means that there are no tasks scheduled) and we are done. pub fn run(&mut self){ while self.t_yield() {} - // std::process::exit(0); //for linux println!("All tasks finished!"); } @@ -131,7 +132,9 @@ impl Runtime { /// If we find a task that's ready to be run we change the state of the current task from `Running` to `Ready`. /// Then we call switch which will save the current context (the old context) and load the new context /// into the CPU which then resumes based on the context it was just passed. - #[inline(never)] + /// + /// NOITCE: if we comment below `#[inline(never)]`, we can not get the corrent running result + //#[inline(never)] fn t_yield(&mut self) -> bool { let mut pos = self.current; while self.tasks[pos].state != State::Ready {