Iros
 
Loading...
Searching...
No Matches
scheduler.h
Go to the documentation of this file.
1#pragma once
2
3#include "iris/core/task.h"
4
5namespace iris {
6class Scheduler {
7public:
8 void schedule_task(Task&);
9
10 [[noreturn]] void start();
11 [[noreturn]] void start_on_ap();
12 void yield();
13
14 [[noreturn]] void save_state_and_run_next(arch::TaskState* state);
15 [[noreturn]] void exit_current_task();
16
17 auto current_task() const -> Task& { return *m_current_task; }
18 auto current_task_null_if_during_boot() const -> Task* { return m_current_task; }
20
27 auto block_current_task(di::FunctionRef<void()> before_yielding) -> Expected<void>;
28
29 void setup_idle_task();
30
31private:
32 [[noreturn]] void run_next();
33
34 Task* m_current_task { nullptr };
36 di::Arc<Task> m_idle_task;
37};
38
44void schedule_task(Task&);
45}
Definition queue.h:23
Definition function_ref.h:116
Definition scheduler.h:6
void schedule_task(Task &)
Definition scheduler.cpp:10
auto block_current_task(di::FunctionRef< void()> before_yielding) -> Expected< void >
Block the currently running task on this scheduler.
Definition scheduler.cpp:153
auto current_task_null_if_during_boot() const -> Task *
Definition scheduler.h:18
void setup_idle_task()
Definition scheduler.cpp:30
void start()
Definition scheduler.cpp:25
void yield()
Definition scheduler.cpp:59
void save_state_and_run_next(arch::TaskState *state)
Definition scheduler.cpp:104
void start_on_ap()
Definition scheduler.cpp:34
auto current_task() const -> Task &
Definition scheduler.h:17
void exit_current_task()
Definition scheduler.cpp:120
auto current_address_space() -> mm::AddressSpace &
Definition scheduler.cpp:146
Definition task.h:30
Definition address_space.h:52
IntrusivePtr< T, ArcTag > Arc
Definition arc.h:21
Definition cxx_init.cpp:12
void schedule_task(Task &task)
Schedule a task on any scheduler.
Definition scheduler.cpp:165
di::vocab::Expected< T, di::platform::GenericCode > Expected
Definition error.h:324
Definition task.h:12