2010-08-07 8 views
1

我正在設計一個使用基於優先級的搶佔調度器的RTOS。 PCB含有什麼?香港專業教育學院只能夠拿出這些項目什麼類型的RTOS過程控制塊?

1)PID 2)優先 3)程序計數器 4)狀態寄存器 5)某些標誌

我應該還包括一個最後期限?或其他任何田

+0

標記爲將來使用的大塊字節。指向前一個/下一個PCB。 – dbasnett 2010-08-08 16:48:51

回答

0

這在某種程度上取決於你正在寫這篇架構。

您需要的所有寄存器[1],而不僅僅是狀態寄存器。

堆棧指針。也許堆棧大小。

中斷屏蔽狀態

如果您的操作系統支持浮點和你的CPU有一個浮點單元,不要忘記保存這些寄存器也。

[1]除非你正在寫這個東西像ARM,其中有寄存器的幾家銀行。在這種情況下,您只需要保存在正常操作中使用的銀行。

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; 
從棧指針

除此之外,我所需要的關鍵要素如下:

  • 優先
  • 鏈表指針:要管理的簡單的隊列-BA就緒隊列中的線程SED調度,或處理等待一個特定的信號等
  • 暫停狀態線程隊列:對於處理像一個信號掛起的操作。如果暫停超時(例如,可能是隊列庫中的超時處理程序)並將狀態碼傳遞迴喚醒線程,則會使用這些函數註冊要調用的回調函數。

這是不這樣做的唯一途徑。你將會發現,當你着手設計RTOS並且實現各種操作系統原語(信號量,隊列等)時,你自己的特殊需求就變得清晰了。