Luna/kernel/src/thread/Scheduler.h

47 lines
1.1 KiB
C
Raw Normal View History

2022-12-07 14:03:34 +00:00
#pragma once
#include "fs/VFS.h"
2022-12-07 14:03:34 +00:00
#include "thread/Thread.h"
namespace Scheduler
{
void init();
Thread* current();
2022-12-07 14:55:58 +00:00
Thread* idle();
2022-12-07 14:03:34 +00:00
2023-03-24 20:05:38 +00:00
Result<void> new_kernel_thread(u64 address, const char* name);
Result<void> new_kernel_thread(void (*func)(void), const char* name);
Result<void> new_kernel_thread(void (*func)(void*), void* arg, const char* name);
2022-12-07 14:03:34 +00:00
2023-03-24 20:05:38 +00:00
Result<void> new_userspace_thread(SharedPtr<VFS::Inode> inode, const char* name);
2023-03-18 22:45:48 +00:00
void add_thread(Thread* thread);
2022-12-07 14:03:34 +00:00
Thread* pick_task();
2022-12-19 11:24:15 +00:00
void reap_thread(Thread* thread);
2022-12-07 14:03:34 +00:00
void switch_task(Registers* regs);
void invoke(Registers* regs);
2022-12-19 11:43:23 +00:00
LinkedList<Thread> check_for_dying_threads();
2023-03-23 21:42:24 +00:00
Option<Thread*> find_by_pid(pid_t pid);
template <typename Callback> void for_each_child(pid_t pid, Callback callback)
{
g_threads.for_each([&](Thread* thread) {
if (thread->parent_id == (u64)pid) callback(thread);
});
}
bool has_children(pid_t pid);
Option<Thread*> find_exited_child(pid_t pid);
2022-12-07 14:55:58 +00:00
}
extern "C" void kernel_yield();
void kernel_sleep(u64 ms);
2023-01-02 12:07:29 +00:00
[[noreturn]] void kernel_exit();