(7)任務(wù)控制塊TCB
任務(wù)控制塊TCB,就是在操作系統(tǒng)中,用來描述和管理一個任務(wù)的數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)為
每一個任務(wù)都維護(hù)了一個相應(yīng)的TCB,用來保存該任務(wù)的各種相關(guān)信息。它的主要內(nèi)容包
括下面幾項:
A、任務(wù)的管理信息:任務(wù)的標(biāo)識ID、狀態(tài)、優(yōu)先級、調(diào)度信息、各種隊列指針等。
B、CPU上下文信息:CPU各種寄存器當(dāng)前的值以及邏輯寄存器。
C、資源管理的信息:段表地址、頁表地址、根目錄、文件描述字等。
當(dāng)需要創(chuàng)建一個任務(wù)的時候,就為它生成一個TCB,并初始化這個TCB 的內(nèi)容;當(dāng)需
要中止一個任務(wù)的時候,只要回收它的TCB 就可以了。
(7)任務(wù)的切換
基本思想:把當(dāng)前任務(wù)的運(yùn)行上下文保存起來,并恢復(fù)新任務(wù)的上下文。
任務(wù)切換通常有下面的基本步驟:
A、將處理器的運(yùn)行上下文保存在當(dāng)前任務(wù)的TCB 中。
B、更新當(dāng)前任務(wù)的狀態(tài),從運(yùn)行狀態(tài)變?yōu)榫途w狀態(tài)或阻塞狀態(tài)。
C、按照一定的策略,從所有處于就緒狀態(tài)的任務(wù)中選擇一個去運(yùn)行。
D、修改新任務(wù)的狀態(tài),從就緒狀態(tài)變成運(yùn)行狀態(tài)。
E、根據(jù)新任務(wù)的TCB 的內(nèi)容,恢復(fù)它的運(yùn)行上下文環(huán)境。
在一個多任務(wù)的操作系統(tǒng)中,采用任務(wù)隊列的方式來組織它的所有任務(wù)。由操作系統(tǒng)來
維護(hù)一組隊列,用來表示系統(tǒng)當(dāng)中所有任務(wù)的當(dāng)前狀態(tài),不同的狀態(tài)用不同的隊列來標(biāo)志。
(8)任務(wù)的調(diào)度
調(diào)度器可以看作CPU 的資源管理者。
任務(wù)調(diào)度的首要問題是:何時進(jìn)行調(diào)度,即調(diào)度發(fā)生的時機(jī)。一般有下面幾種情形:
A、一個新任務(wù)被創(chuàng)建時,需要決定運(yùn)行新任務(wù)還是繼續(xù)執(zhí)行父任務(wù)。
B、一個任務(wù)運(yùn)行結(jié)束時,需要從就緒隊列中選擇某個任務(wù)去運(yùn)行。
C、一個任務(wù)運(yùn)行阻塞時,需要選擇另一個任務(wù)去運(yùn)行。
D、一個I/O 操作完成,任務(wù)阻塞結(jié)束,立即執(zhí)行新就緒任務(wù)還是繼續(xù)執(zhí)行被中斷任務(wù)。
E、一個時鐘節(jié)拍結(jié)束時,需要對就緒任務(wù)重新調(diào)度。
任務(wù)調(diào)度的第二個問題是:如何調(diào)度,即調(diào)度方式。主要有兩種方式:
A、不可搶占調(diào)度方式:例如時間片輪轉(zhuǎn)。
B、可搶占調(diào)度方式:例如優(yōu)先級調(diào)度。
實(shí)時操作系統(tǒng)大都采用可搶占調(diào)度方式。
任務(wù)調(diào)度的第三個問題是:調(diào)度算法。
A、先來先服務(wù)算法:按照任務(wù)到達(dá)的先后次序進(jìn)行調(diào)度,是不可搶占的調(diào)度方式。
B、短作業(yè)優(yōu)先算法:各個任務(wù)開始執(zhí)行之前,事先預(yù)計好它的執(zhí)行時間,從中選擇
用時較短的任務(wù)優(yōu)先執(zhí)行。
C、時間片輪轉(zhuǎn)算法:所有的就緒任務(wù)按照先來先服務(wù)的原則排成一個隊列。在每次
調(diào)度的時候,把處理器分派給隊列當(dāng)中的第一個任務(wù),讓它去執(zhí)行一小段時間。在
這個時間段里任務(wù)被阻塞或由于其他原因暫停,或者任務(wù)的時間片用完了,它會被
送到就緒隊列的末尾,然后調(diào)度器再執(zhí)行當(dāng)前隊列的第一個任務(wù)。這種算法的優(yōu)點(diǎn)
是各個就緒任務(wù)都平均地分配使用CPU 的時間,每個就緒任務(wù)都能一直保持著活
動性。時間片輪轉(zhuǎn)法有一個默認(rèn)前提,即位于就緒隊列中的各個任務(wù)是同等重要的。
D、優(yōu)先級算法:給每個任務(wù)都設(shè)置一個優(yōu)先級。然后在任務(wù)調(diào)度的時候,在所有處于
就緒狀態(tài)的任務(wù)中選擇優(yōu)先級最高的那個任務(wù)去運(yùn)行。采用優(yōu)先級調(diào)度算法的一個
問題是可能會發(fā)生優(yōu)先級反轉(zhuǎn)(教程P285),出現(xiàn)任務(wù)“饑餓”現(xiàn)象。
(9)實(shí)時系統(tǒng)調(diào)度
對于RTOS 調(diào)度器來說,任務(wù)之間的公平性并不是最重要的,它追求的是實(shí)時性。
A、單調(diào)速率調(diào)度算法(RMS):任務(wù)的優(yōu)先級與它的周期表現(xiàn)為單調(diào)函數(shù)的關(guān)系,任
務(wù)的周期越短,優(yōu)先級越高,任務(wù)的周期越長,優(yōu)先級越低。RMS 假定任務(wù)是相同獨(dú)立的、
周期性的、任務(wù)在能夠在任何位置被搶占,而實(shí)際中的系統(tǒng),任務(wù)之間需要進(jìn)行通信和同步,
這是一種理想的調(diào)度方法,實(shí)際中并不一定存在。
B、最早期限優(yōu)先法(EDF):根據(jù)任務(wù)的截止時間來確定其優(yōu)先級,對于時間限期最
近的任務(wù),分配最高的優(yōu)先級。當(dāng)有一個新的任務(wù)處于就緒狀態(tài)時,各個任務(wù)的優(yōu)先級就有
可能要進(jìn)行調(diào)整,選擇截止時間最近的任務(wù)去運(yùn)行。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |