什么类型的RTOS过程控制块?

时间:2010-08-07 06:20:48

标签: operating-system real-time rtos

设计一个使用基于优先级的抢占式调度程序的RTOS。 PCB包含什么?我只能拿出这些物品

1)PID 2)优先 3)程序计数器 4)状态寄存器 5)一些标志

我是否还应该包括截止日期?或任何其他字段

2 个答案:

答案 0 :(得分:0)

这在某种程度上取决于您为此编写的体系结构。

您需要所有寄存器[1],而不仅仅是状态寄存器。

堆栈指针。也许堆栈大小。

中断屏蔽状态

如果您的操作系统支持浮点并且您的CPU有浮点单元,请不要忘记保存这些寄存器。

[1]除非你是为ARM这样的东西写的,它有几组寄存器。在这种情况下,您只需要保存正常操作中使用的库。

答案 1 :(得分:0)

完整的寄存器集通常保存在线程的堆栈中,这意味着可能只需要一个堆栈指针来存储程序计数器,状态寄存器以及需要进行上下文切换的任何其他寄存器。

这是几个月前开源的RTOS TCB / PCB的真实示例(Atomthreads)

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原语(信号量,队列等)时,您会发现自己的特定要求变得清晰。