MCPcopy Create free account
hub / github.com/chyyuu/os_kernel_lab / run_tasks

Function run_tasks

os/src/task/processor.rs:37–57  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

35}
36
37pub fn run_tasks() {
38 loop {
39 let mut processor = PROCESSOR.exclusive_access();
40 if let Some(task) = fetch_task() {
41 let idle_task_cx_ptr = processor.get_idle_task_cx_ptr();
42 // access coming task TCB exclusively
43 let next_task_cx_ptr = task.inner.exclusive_session(|task_inner| {
44 task_inner.task_status = TaskStatus::Running;
45 &task_inner.task_cx as *const TaskContext
46 });
47 processor.current = Some(task);
48 // release processor manually
49 drop(processor);
50 unsafe {
51 __switch(idle_task_cx_ptr, next_task_cx_ptr);
52 }
53 } else {
54 println!("no tasks available in run_tasks");
55 }
56 }
57}
58
59pub fn take_current_task() -> Option<Arc<TaskControlBlock>> {
60 PROCESSOR.exclusive_access().take_current()

Callers 1

rust_mainFunction · 0.85

Calls 5

fetch_taskFunction · 0.85
dropFunction · 0.85
exclusive_accessMethod · 0.80
get_idle_task_cx_ptrMethod · 0.80
exclusive_sessionMethod · 0.80

Tested by

no test coverage detected