mirror of
https://github.com/RGBCube/serenity
synced 2025-05-29 11:25:07 +00:00

The scheduler now operates on threads, rather than on processes. Each process has a main thread, and can have any number of additional threads. The process exits when the main thread exits. This patch doesn't actually spawn any additional threads, it merely does all the plumbing needed to make it possible. :^)
28 lines
675 B
C++
28 lines
675 B
C++
#pragma once
|
|
|
|
#include <AK/Assertions.h>
|
|
|
|
class Process;
|
|
class Thread;
|
|
struct RegisterDump;
|
|
|
|
extern Thread* current;
|
|
extern Thread* g_last_fpu_thread;
|
|
extern Thread* g_finalizer;
|
|
|
|
class Scheduler {
|
|
public:
|
|
static void initialize();
|
|
static void timer_tick(RegisterDump&);
|
|
static bool pick_next();
|
|
static void pick_next_and_switch_now();
|
|
static void switch_now();
|
|
static bool yield();
|
|
static bool donate_to(Thread*, const char* reason);
|
|
static bool context_switch(Thread&);
|
|
static void prepare_to_modify_tss(Thread&);
|
|
static Process* colonel();
|
|
static bool is_active();
|
|
private:
|
|
static void prepare_for_iret_to_new_process();
|
|
};
|