Intel® 64 and IA-32 Architectures Software Developer's Manual:Vol 3 Section 6

第六章

任務管理器


這章描述了IA-32架構任務管理機制。這些機制只在處理器運行於保護模式時有效。
這章關注於32位任務和32位TSS數據結構。對於16位任務和16位TSS數據結構,參照6.6節,16位任務狀態段(TSS)。對於64位模式任務管理,參照6.7節,64位模式下的任務管理。

6.1 任務管理器總攬

一個任務是一個處理器可以分派,執行和掛起的工作單元。它可以被用於執行程序,任務或者進程,操作系統服務功能,中斷或者異常處理,內核或者執行功能。
IA-32架構提供了保存任務狀態的機制,爲了分發任務去執行和從一個任務切換到另一個任務。當在保護模式執行時,所有的處理器執行都可以放入一個任務。即便只有一個任務的簡單系統。更復雜的系統可以使用處理器任務管理器機制去支持多任務應用。

6.1.1 任務數據結構

一個任務由兩部分構成:任務執行空間和任務狀態段(TSS)。任務執行空間由一個代碼段,一個棧段和一個或者多個數據段構成(參照圖6-1)。如果一個操作系統或者執行者使用處理器的特權級保護機制,任務執行空間也給每個特權級提供了一個隔離棧。
TSS規定了組成任務執行空間的段,並且給任務狀態信息提供了存儲空間。在多任務系統中,TSS也提供了鏈接任務機制。
一個任務是通過它的TSS段選擇子被識別。當一個任務被加載進處理器執行時,段選擇子、基址、段限、TSS段描述符屬性都會被加載到任務寄存器中(參照2.4.4,任務寄存器(TR))。
如果任務實現了換頁,用於任務的頁目錄基址會被加載進控制寄存器CR3。

任務數據結構

[圖6-1,任務數據結構]

6.1.2 任務狀態

以下項定義了當前正在執行任務的狀態
  • 任務的當前執行空間,由存於段寄存器(CS、DS、SS、ES、FS和GS)的段選擇子定義
  • 通用目的寄存器狀態
  • EFLAGS寄存器狀態
  • EIP寄存器狀態
  • 控制寄存器CR3狀態
  • 任務寄存器狀態
  • LDTR寄存器狀態
  • I/O映射基址和I/O映射(保存於TSS)
  • 特權級0、1、2棧指針(保存於TSS)
  • 上一次執行任務的鏈接(保存於TSS)
在分發一個任務之前,所有的這些項都會被存於任務TSS,除了任務寄存器的狀態。同時,LDTR寄存器的完整內容也不會包含在TSS中,只有LDT段選擇子。

6.1.3 執行一個任務

軟件或者處理器可以通過以下方式調度任務執行
  • 使用CALL指令直接調用任務
  • 使用JMP指令直接跳入任務
  • 隱式調用(通過處理器)一箇中斷處理任務
  • 隱式調用一個異常處理任務
  • 當EFLAGS寄存中的NT標誌位被設置時返回(一個IRET指令發起)
所有調度任務的方式識別任務後通過指向一個任務門或者TSS任務的段選擇子去調度。當用CALL或者JMP指令調用任務時,指令中的選擇子可能直接選擇TSS或者保存有TSS選擇子的任務門。當調度一個任務去處理一箇中斷或者異常時,中斷或者異常的IDT項必須包含一個擁有選擇子的任務門。
當一個任務被調度執行時,在當前正在運行的任務和被調度的任務之間發生切換。任務切換時,當前正在執行任務(被稱爲任務狀態或者上下文)的執行環境被保存在它的TSS並且任務執行掛起。被調度的任務上下文裝載到處理器並且以新裝載在EIP寄存器指向的指令爲入口點執行。如果因爲系統上次初始化而任務沒有被運行,該EIP將指向任務代碼的首條指令;否則,當系統上次活躍,在任務執行最後指令之後EIP將指向下一條指令。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章