我正在設計一個使用基於優先級的搶佔調度器的RTOS。 PCB含有什麼?香港專業教育學院只能夠拿出這些項目什麼類型的RTOS過程控制塊?
1)PID 2)優先 3)程序計數器 4)狀態寄存器 5)某些標誌
我應該還包括一個最後期限?或其他任何田
我正在設計一個使用基於優先級的搶佔調度器的RTOS。 PCB含有什麼?香港專業教育學院只能夠拿出這些項目什麼類型的RTOS過程控制塊?
1)PID 2)優先 3)程序計數器 4)狀態寄存器 5)某些標誌
我應該還包括一個最後期限?或其他任何田
這在某種程度上取決於你正在寫這篇架構。
您需要的所有寄存器[1],而不僅僅是狀態寄存器。
堆棧指針。也許堆棧大小。
中斷屏蔽狀態
如果您的操作系統支持浮點和你的CPU有一個浮點單元,不要忘記保存這些寄存器也。
[1]除非你正在寫這個東西像ARM,其中有寄存器的幾家銀行。在這種情況下,您只需要保存在正常操作中使用的銀行。
完整的寄存器組通常保存線程的堆棧,這意味着一個堆棧指針可能是你需要存儲的程序計數器,狀態寄存器,以及需要是上下文交換任何其他寄存器上。
這裏是一個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並且實現各種操作系統原語(信號量,隊列等)時,你自己的特殊需求就變得清晰了。
標記爲將來使用的大塊字節。指向前一個/下一個PCB。 – dbasnett 2010-08-08 16:48:51