IA32處理器任務切換過程 學習總結

IA32處理器任務切換

以下4中情況會使處理器跳轉到其它任務:
(1)當前的程序或任務執行JMP或CALL指令指向GDT中TSS描述符。
(2)當前的程序或任務執行JMP或CALL指令指向GDT或當前LDT中的任務門描述符。
(3)一箇中斷或異常指向IDT中的任務門描述符。
(4)當EFLAGS寄存器中NT標誌置位時,當前任務執行IRET指令。

當切換到新任務時,處理器完成以下操作:
(1)從任務門或先前的任務鏈接字段中獲得新任務的TSS段選擇符作爲指令JMP或CALL的操作數。
(2)檢查當前任務是否允許切換到新任務。當前任務的CPL和針對新任務的選擇符的RPL必須小於等於引用的TSS描述符或任務門的DPL。異常、中斷和IRET指令允許不管目的任務門或TSS描述符的DPL,切換任務。如果INT n指令產生的中斷,需要檢查DPL。
(3)檢查新任務TSS描述符標記爲存在和有有效的界限。
(4)檢查新任務是否可用(調用、跳轉、異常或中斷)或者忙(IRET返回)。
(5)檢查當前的TSS,新TSS 和所有任務切換用到的段描述符是否在內存頁表中。
(6)如果JMP和IRET指令發起的任務切換,處理器在當前任務TSS描述符中清除B忙位;如果CALL指令、異常或中斷髮起的,B位保留設置。
(7)如果IRET指令發起的任務切換,處理器暫時清除保存在EFLAGS寄存器的NT標誌;如果CALL指令、異常或中斷髮起的,在保存的EFLAGS寄存器內容中,NT標誌不變。
(8)在當前任務的TSS保存當前任務的狀態信息。
(9)如果CALL指令、異常、中斷髮起的任務切換,處理器從新任務中加載EFLAGS並設置NT標誌。如果IRET指令或JMP指令發起,從新任務中加載的EFLAGS寄存器中的NT標誌反映NT的狀態。
(10)如果CALL指令、JMP指令、異常或中斷髮起任務切換,處理器在新任務的TSS描述符中設置B忙位;如果IRET指令發起,B位保留。
(11)加載新任務的段選擇符和TSS描述符。
(12)處理器加載TSS狀態。包括LDTR,PDBR(CR3),EFLAGS,EIP,通用寄存器等。
(13)加載和段選擇符相關的描述符並確認。
(14)開始執行新任務。

good luck!

發佈了40 篇原創文章 · 獲贊 42 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章