我正在设计一个使用基于优先级的抢占式调度程序的 RTOS。PCB包含什么?我只能想出这些项目
1)PID 2)优先级 3)程序计数器 4)状态寄存器 5)一些标志
我还应该包括截止日期吗?或任何其他字段
我正在设计一个使用基于优先级的抢占式调度程序的 RTOS。PCB包含什么?我只能想出这些项目
1)PID 2)优先级 3)程序计数器 4)状态寄存器 5)一些标志
我还应该包括截止日期吗?或任何其他字段
完整的寄存器集通常保存在线程的堆栈中,这意味着您可能只需要一个堆栈指针来存储程序计数器、状态寄存器和任何其他需要进行上下文切换的寄存器。
这是我几个月前开源的 RTOS(Atomthreads)的真实示例 TCB/PCB :
typedef struct atom_tcb
{
/* Thread's current stack pointer */
POINTER sp_save_ptr;
/* Thread priority (0-255) */
uint8_t priority;
/* Thread entry point and parameter */
void (*entry_point)(uint32_t);
uint32_t entry_param;
/* Queue pointers */
struct atom_tcb *prev_tcb; /* Previous TCB in doubly-linked TCB list */
struct atom_tcb *next_tcb; /* Next TCB in doubly-linked list */
/* Suspension data */
uint8_t suspended; /* TRUE if task is currently suspended */
uint8_t suspend_wake_status; /* Status returned to woken suspend calls */
ATOM_TIMER *suspend_timo_cb; /* Callback registered for suspension timeouts */
} ATOM_TCB;
除了堆栈指针,我需要的关键元素如下:
这不是唯一的方法。当您着手设计 RTOS 并实现各种 OS 原语(信号量、队列等)时,您会发现自己的特定需求变得清晰。
这在某种程度上取决于您为其编写此代码的架构。
您需要所有寄存器 [1],而不仅仅是状态寄存器。
堆栈指针。也许堆栈大小。
中断屏蔽状态
如果您的操作系统支持浮点并且您的 CPU 具有浮点单元,请不要忘记也保存这些寄存器。
[1] 除非您是为诸如 ARM 之类的东西编写此代码,它有几组寄存器。在这种情况下,您只需保存正常操作中使用的银行。