# Struct os::task::TaskManager

source · [−]

    pub struct TaskManager {
        num_app: usize,
        inner: UPSafeCell<TaskManagerInner>,
    }

Expand description

The task manager, where all the tasks are managed.

Functions implemented on `TaskManager` deals with all task state transitions and task context switching. For convenience, you can find wrappers around it in the module level.

Most of `TaskManager` are hidden behind the field `inner`, to defer borrowing checks to runtime. You can see examples on how to use `inner` in existing functions on `TaskManager`.

## Fields

`num_app: usize`

total number of tasks

`inner: UPSafeCell<TaskManagerInner>`

use inner value to get mutable access

## Implementations

source

### impl TaskManager

source

#### fn run_first_task(&self) -> !

Run the first task in task list.

Generally, the first task in task list is an idle task (we call it zero process later). But in ch3, we load apps statically, so the first task is a real app.

source

#### fn mark_current_suspended(&self)

Change the status of current `Running` task into `Ready`.

source

#### fn mark_current_exited(&self)

Change the status of current `Running` task into `Exited`.

source

#### fn find_next_task(&self) -> Option<usize>

Find next task to run and return app id.

In this case, we only return the first `Ready` task in task list.

source

#### fn run_next_task(&self)

Switch current `Running` task to the task we have found, or there is no `Ready` task and we can exit with all applications completed

## Auto Trait Implementations

### impl !RefUnwindSafe for TaskManager

### impl Send for TaskManager

### impl Sync for TaskManager

### impl Unpin for TaskManager

### impl UnwindSafe for TaskManager

## Blanket Implementations

source

### impl<T> Any for T where
T: 'static + ?Sized,

source

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more

source

### impl<T> Borrow<T> for T where
T: ?Sized,

const: unstable · source

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more

source

### impl<T> BorrowMut<T> for T where
T: ?Sized,

const: unstable · source

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more

source

### impl<T> From<T> for T

const: unstable · source

#### fn from(t: T) -> T

Returns the argument unchanged.

source

### impl<T, U> Into<U> for T where
U: From<T>,

const: unstable · source

#### fn into(self) -> U

Calls `U::from(self)`.

That is, this conversion is whatever the implementation of `From<T> for U` chooses to do.

source

### impl<T, U> TryFrom<U> for T where
U: Into<T>,

#### type Error = Infallible

The type returned in the event of a conversion error.

const: unstable · source

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.

source

### impl<T, U> TryInto<U> for T where
U: TryFrom<T>,

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

const: unstable · source

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.