2011-10-12 59 views
2

當我們在執行taskSpawn時,正在vxworks中創建任務。什麼是一項任務。與線程有任何關係嗎?vxworks中的任務

在我的理解中,vxworks是基於線程的操作系統。

有人可以幫助我真正的場景中的任務/線程/過程之間的真正區別。

某處我看到的任務是執行指令集。如果是這樣,那麼線程也有一些指令集,所以我們可以將線程稱爲任務。

請幫

回答

6

線程通常與OS支持的流程模型(在Unix/Linux/Windows的),您運行過程中使用的概念。
這個過程可以有一個執行線程(就像一個簡單的C程序)。或者,您可以創建多個線程在當前進程內存空間內並行執行某些操作。

對於較早的vxWorks,沒有過程模型。一切都會在同一個內存空間中運行。 vxWorks任務提供了系統代碼執行的上下文。所有代碼(除中斷處理程序外)都將在任務的上下文中執行。

任務是獨立執行單元。他們可以共享資源,擁有共同的內存等等,但是調度器根據非常具體的標準執行任務。通常,系統中最高優先級的任務是在任何給定時間執行的任務。

一旦任務完成/睡眠/阻塞等待資源,系統中下一個最高優先級的任務將運行。

爲了您的目的,您可以將任務想象成一個線程。

2

任務是OS設計中的抽象概念。任務是單個執行環境。任務有一個存儲空間,用於存儲數據和代碼。這個內存空間可能會或可能不會與其他任務共享。一個任務有一個狀態(例如運行,停止,死亡......),它(通常)有一個堆棧。任務優先於其他任務。

在這樣一個任務的例子,是一個VxWorks的任務。另一個是Linux線程。在Linux中(我也相信最新版本的VxWorks btw),存在一組相關任務的概念。屬於同一組的任務共享內存空間和其他一些資源(例如文件處理程序)。 Linux進程就是這樣一組任務。

大的OS調度程序調度任務而不是進程。該過程是程序員將對相關線程組合起來進行思考的對流抽象。

我希望有所幫助。

0

在vxWorks中,任務是一個可運行的單元。

任務具有唯一任務空間和特定優先級(如您在taskSpawn函數中定義的)的TCB(任務控制塊)。

vxWorks調度程序只能運行任務,這是最小的可運行單元(調度程序可以運行內核本身,中斷可以在系統中運行)。

決定運行哪個任務將基於任務狀態(必須在READY中),並且任務優先級(在vxWorks中,最高優先級是較低的數字)。

請注意,幾個任務可能具有相同的優先級,然後內核根據您配置的方案(FIFO或循環)運行不同的任務。

在vxWorks中,所有任務都有相同的內存空間(包括內核內存空間)。這就是WindRiver從vxWorks 6.x中添加「類似進程」機制的原因。進程有自己的「虛擬內存空間」,由MMU保護。

只是以夏日爲你:

任務具有對系統相同的內存空間。

線程在其進程中具有相同的內存空間。

MMU保護的進程內存空間。

+0

實際上,您可以使用SMP並行運行多個任務 – mjs

0

除了現有anwers: 如果你需要創建您的VxWorks系統上的POSIX線程(這是可能的,包括POSIX的內核配置和調用在pthread_create()),你會發現,這些線程將出現作爲任務列表中的任務(在C shell中鍵入'i')。

因此,任務和線程非常相似。 VxWorks甚至將POSIX線程包裝爲任務,以便可以與現有的本地任務並行處理它們。

0

任務和線程與進程類似。但不同之處在於線程沒有獨立的內存空間來存放它們自己的內存空間,因此它們在進程本身的pcb(堆棧)下運行。但是,任務具有自己的堆棧區域,並且是輕量級的進程,即tcb與PCB上下文切換或任務切換可以更快地發生。 由於vxworks處理rtos並且切換延遲應該非常小,它會處理任務。