9#include <etl/intrusive_links.h>
31inline constexpr uint64_t
kVm = 0x00000100;
33inline constexpr uint64_t
kFs = 0x00000200;
35inline constexpr uint64_t
kFiles = 0x00000400;
37inline constexpr uint64_t
kSighand = 0x00000800;
39inline constexpr uint64_t
kParent = 0x00008000;
41inline constexpr uint64_t
kThread = 0x00010000;
48using CloneFlags = etl::flags<uint64_t, clone_flag::kAllMask>;
136 return a->sched_info.priority > b->sched_info.priority;
151 return a->sched_info.wake_tick > b->sched_info.wake_tick;
156 const char*
name{
"Unnamed Task"};
225 [[nodiscard]]
auto GetStatus() const ->
etl::fsm_state_id_t;
261 return aux && other && other->aux && (
aux->
tgid == other->aux->tgid) &&
任务状态 ID — 用作 etl::fsm 的状态 ID
Clone 标志位常量 (用于 sys_clone 系统调用)
constexpr uint64_t kFiles
共享文件描述符表
constexpr uint64_t kAllMask
全部标志掩码
constexpr uint64_t kSighand
共享信号处理器
constexpr uint64_t kParent
保持相同父进程
constexpr uint64_t kThread
同一线程组
constexpr uint64_t kFs
共享文件系统信息
constexpr uint64_t kVm
共享地址空间
Pid tgid
线程组 ID (主线程的 PID)
filesystem::FileDescriptorTable * fd_table
文件描述符表
CloneFlags clone_flags
克隆标志位
ResourceId blocked_on
等待的资源 ID
uint64_t interrupt_number
关联的中断号
CpuAffinity cpu_affinity
CPU 亲和性位掩码
bool is_interrupt_thread
是否为中断线程
auto operator()(TaskControlBlock *a, TaskControlBlock *b) -> bool
比较两个任务的优先级
uint64_t time_slice_default
默认时间片
int inherited_priority
继承的优先级
uint64_t context_switches
上下文切换次数
uint64_t total_runtime
总运行时间
int priority
优先级 (数字越小优先级越高)
int base_priority
基础优先级 (静态,用于优先级继承)
uint64_t time_slice_remaining
剩余时间片
auto operator()(TaskControlBlock *a, TaskControlBlock *b) -> bool
比较两个任务的唤醒时间
auto JoinThreadGroup(TaskControlBlock *leader) -> void
将线程添加到线程组
struct TaskControlBlock::SchedInfo sched_info
auto LeaveThreadGroup() -> void
从线程组中移除自己
auto operator=(const TaskControlBlock &) -> TaskControlBlock &=delete
TaskControlBlock(TaskControlBlock &&)=delete
auto operator=(TaskControlBlock &&) -> TaskControlBlock &=delete
union TaskControlBlock::SchedData sched_data
auto GetStatus() const -> etl::fsm_state_id_t
获取当前任务状态
TaskControlBlock(const TaskControlBlock &)=delete
auto InSameThreadGroup(const TaskControlBlock *other) const -> bool
检查是否与另一个任务在同一线程组
auto IsThreadGroupLeader() const -> bool
检查是否是线程组的主线程
TaskControlBlock()=default
TaskAuxData * aux
非调度热路径的辅助数据
uint8_t * kernel_stack
内核栈
auto GetThreadGroupSize() const -> size_t
获取线程组中的线程数量
cpu_io::CalleeSavedContext task_context
任务上下文
static constexpr size_t kDefaultKernelStackSize
默认内核栈大小 (16 KB)
cpu_io::TrapContext * trap_context_ptr
Trap 上下文
etl::flags< uint64_t, clone_flag::kAllMask > CloneFlags
克隆标志位
etl::bidirectional_link< 0 > ThreadGroupLink
线程组侵入式链表节点类型
etl::flags< uint64_t > CpuAffinity
CPU 亲和性位掩码
void(*)(void *) ThreadEntry
线程入口函数类型
uint32_t weight
任务权重 (1024 为默认)
uint8_t level
优先级级别 (0 = 最高)
struct TaskControlBlock::SchedData::@4 mlfq
MLFQ 调度器数据
struct TaskControlBlock::SchedData::@3 cfs
CFS 调度器数据