代码之家  ›  专栏  ›  技术社区  ›  Laz

什么类型的过程控制块的实时操作系统?

  •  1
  • Laz  · 技术社区  · 14 年前

    我正在设计一个使用基于优先级的抢占式调度器的实时操作系统。PCB包含什么?我只能想出这些东西

    2) 优先权 3) 程序计数器 5) 一些旗帜

    2 回复  |  直到 14 年前
        1
  •  0
  •   JayM    14 年前

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

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

    堆栈指针。可能是堆栈大小。

    如果你的操作系统支持浮点运算,而你的CPU有一个浮点单元,别忘了保存那些寄存器。

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

        2
  •  0
  •   ukembedded    14 年前

    完整的寄存器集通常保存在线程的堆栈上,这意味着一个堆栈指针可能就是存储程序计数器、状态寄存器和任何其他需要进行上下文切换的寄存器所需的全部。

    下面是几个月前我开放源码的一个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;
    

    • 优先
    • 链表指针:
    • 暂停状态 :用于处理诸如挂起信号量之类的操作。它们用于注册暂停超时时要调用的回调函数(例如,队列库中的超时处理程序),并将状态代码传递回唤醒的线程。