(4)任務
在嵌入式系統(tǒng)中,任務其實就是線程,它是能夠獨立運行的一個實體。原因有二:
A、任務具有獨立的優(yōu)先級和?臻g,CPU 上下文一般存放在?臻g中。
B、任務之間可以很方便地、直接地使用共享的內(nèi)存單元,而不需要經(jīng)過系統(tǒng)內(nèi)核。
在多道程序的嵌入式系統(tǒng)中,同時存在著多個任務,這些任務之間的結(jié)構(gòu)一般為層狀
結(jié)構(gòu),存在著父子關系。當嵌入式內(nèi)核剛剛啟動的時候,只有一個任務存在,然后由該任務
派生出所有其他任務。
(5)任務的創(chuàng)建與中止(教程P270)
任務的創(chuàng)建主要發(fā)生在以下三種情形:
A、系統(tǒng)初始化。
B、任務運行的過程中。
C、用戶提出請求。
從技術的角度來說,實際上新任務只有一種創(chuàng)建的方法,也就是在一個已經(jīng)存在的任務
中,通過調(diào)用相應的系統(tǒng)函數(shù)來創(chuàng)建一個新的任務。
任務的創(chuàng)建只要有兩種可能的實現(xiàn)模型:fork/exec 和spawn。兩種模型的差別主要在于
內(nèi)存的分配方式。
A、fork/exec 模型下,首先調(diào)用fork 函數(shù)為新任務創(chuàng)建一份與父任務完全相同的內(nèi)存空
間,然后再調(diào)用exec 函數(shù)裝入新任務的代碼,并用它來覆蓋原有的屬于父任務的內(nèi)容。嵌
入式Linux操作系統(tǒng)是基于fork/exec模型的。
B、spawn 模式下,在創(chuàng)建新任務的時候,直接為它分配一個全新的地址空間,然后將
新任務的代碼裝入并運行。uCOS操作系統(tǒng)是基于spawn 模型的。
任務的中止可能有多種原因,主要有下面三種情況:
A、正常退出。
B、錯誤推出。
C、被其他任務踢出。
在有些嵌入式系統(tǒng)中,尤其是一些控制系統(tǒng)中,它的某些任務被設計為“死循環(huán)”的模
式,一直循環(huán)下去,不會中止。
(6)任務的狀態(tài)
任務有三中基本狀態(tài):
A、運行狀態(tài):任務占有CPU,并在CPU 上運行。
B、就緒狀態(tài):任務已經(jīng)具備運行的條件,在等待CPU 空閑。
C、阻塞狀態(tài):任務因為正在等待某種事件的發(fā)生而暫時不能運行。
對于就緒狀態(tài)和阻塞狀態(tài),它們的相同之處在于,任務都是處于暫停狀態(tài),沒有運行。
不同之處在于,暫停的原因是不一樣的,導致就緒狀態(tài)的原因是外因,是操作系統(tǒng)的CPU
正忙,而導致阻塞狀態(tài)的原因是內(nèi)因,是任務自身的問題。
任務狀態(tài)的四種轉(zhuǎn)換關系:
A、運行阻塞:任務由于等待某個時間被阻塞起來。
B、運行就緒:調(diào)度器由于某種原因(例如優(yōu)先級)選擇了另一個任務去運行。
C、就緒運行:CPU 空閑了,處于就緒狀態(tài)的任務被調(diào)度器選中去運行。
D、阻塞就緒:任務的等待事件完成,具備了繼續(xù)運行的條件。
相關推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |