apio
77dcfab5ef
All checks were successful
continuous-integration/drone/push Build is passing
This way we can give it more stack and also reclaim it later!
47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
#pragma once
|
|
#include "fs/VFS.h"
|
|
#include "thread/Thread.h"
|
|
|
|
namespace Scheduler
|
|
{
|
|
void init();
|
|
|
|
Thread* current();
|
|
Thread* idle();
|
|
|
|
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);
|
|
|
|
Result<Thread*> new_userspace_thread(SharedPtr<VFS::Inode> inode, const char* name);
|
|
|
|
void add_thread(Thread* thread);
|
|
|
|
Thread* pick_task();
|
|
|
|
void reap_thread(Thread* thread);
|
|
|
|
void switch_task(Registers* regs);
|
|
|
|
void invoke(Registers* regs);
|
|
|
|
LinkedList<Thread> check_for_dying_threads();
|
|
|
|
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);
|
|
}
|
|
|
|
extern "C" void kernel_yield();
|
|
void kernel_sleep(u64 ms);
|
|
[[noreturn]] void kernel_exit();
|