Expand description
Task management implementation
Everything about task management, like starting and switching tasks is implemented here.
A single global instance of TaskManager
called TASK_MANAGER
controls
all the tasks in the operating system.
Be careful when you see __switch
ASM function in switch.S
. Control flow around this function
might not be what you expect.
Modules
- context 🔒Implementation of
TaskContext
- switch 🔒Rust wrapper around
__switch
. - task 🔒Types related to task management
Structs
- a
TaskManager
global instance through lazy_static! - task context structure containing some registers
- The task manager, where all the tasks are managed.
- The task manager inner in ‘UPSafeCell’
Functions
- Change the current ‘Running’ task’s program break
- Get the current ‘Running’ task’s trap contexts.
- Get the current ‘Running’ task’s token.
- Exit the current ‘Running’ task and run the next task in task list.
- Change the status of current
Running
task intoExited
. - Change the status of current
Running
task intoReady
. - Run the first task in task list.
- Switch current
Running
task to the task we have found, or there is noReady
task and we can exit with all applications completed - Suspend the current ‘Running’ task and run the next task in task list.