7.8.1 任務(wù)間的切換
Pentium或80486等處理器均支持多任務(wù),這就意味著系統(tǒng)中同時存在著多個任務(wù),各任務(wù)之間可相互切換。
1.任務(wù)狀態(tài)段
任務(wù)狀態(tài)段TSS是內(nèi)存的一個區(qū)域,其中存放著一個任務(wù)的全部運(yùn)行信息。TSS的格式如圖7.30所示。
由圖730可以看到,TSS主要包括如下幾部分:
① 各特權(quán)級(0~2級)的堆棧指針。
② LINK存放父任務(wù)的選擇符,或者說它是返回到那個任務(wù)(調(diào)用任務(wù))的選擇符。
③ CR3用于存放CR3的內(nèi)容:頁目錄基地址及PCD,PWT等。
④ LDT選擇符的作用是,任務(wù)利用LDT選擇符,可以找到自己的LDT。
⑤ T位用于調(diào)試。
⑥I/O位圖區(qū)有8K×8bit,共64K位,分別表示處理器可尋址的64K個I/O口。
⑦位圖偏移量。
⑧保留部分。

2. 任務(wù)的切換 任務(wù)的切換可利用下述4種方法實現(xiàn): ①用長JMP/CALL指令的目的選擇器訪問TSS描述符(忽略目的地址的偏置量); ②當(dāng)標(biāo)志字的NT位為“1”,執(zhí)行IRET指令時,TSS內(nèi)的返回連接選擇器作為新任務(wù)的TSS選擇器; ③用長JMP/CALL指令的目的選擇器訪問任務(wù)門(忽略目的地址的偏移量),新任務(wù)的TSS選擇器由任務(wù)門加載; ④中斷發(fā)生,訪問IDT中的任務(wù)門,新任務(wù)的TSS選擇器由任務(wù)門加載。 若經(jīng)檢查認(rèn)為可以進(jìn)行任務(wù)切換,則需進(jìn)行如下處理: 第一步,將離去任務(wù)的狀態(tài)存放在離去任務(wù)的TSS中。 第二步,將新任務(wù)的TSS所對應(yīng)的選擇符和描述符分別裝入TR和相應(yīng)的描述符寄存器中,并將描述符中的類型碼由9(可用TSS描述符)變?yōu)锽(處于忙狀態(tài)的描述符)。 第三步,將現(xiàn)行任務(wù)的TSS中的通用寄存器、段寄存器、EFLAGS、CR3和LDT選擇符裝入處理器中。


