操作系統學習(十六) 、任務管理

操作系統學習(十六) 、任務管理

一、任務

​ 任務是處理器可以分配調度、執行和掛起的一個工作單元。它可用於執行程序、任務或進程、操作系統服務、中斷或異常處理過程和內核代碼。

​ 80x86提供了一種機制,這種機制可以用來保護任務的狀態、分配任務執行以及從一個任務切換到另一個任務。當工作在保護模式下,處理器所有運行都在任務中。即使是簡單系統也必須定義一個任務,更爲複雜的系統可以使用處理器的任務管理功能來支持多任務應用。

​ 80x86提供了多任務的硬件支持,任務是一個正在運行的程序,或者是一個等待準備運行的程序。通過中斷、異常、 跳轉或調用,我們可以執行一個任務。當這些控制形式和某個描述符表中指定項的內容一起使用時,這個描述就是使新任務開始執行的描述符。描述符表中與任務相關的描述符有兩類:任務狀態段描述符和任務門。當執行權限傳給任何這一類描述符石,都會造成任務切換。

​ 任務切換很像過程調用,但任務切換回保存更多的處理器狀態信息。任務切換會把控制權完全轉移到一個新的執行環境,即新任務的執行環境。這種轉移操作要求保存處理器中幾乎所有寄存器的當前內容,包括標誌寄存器EFLAG和所有的段寄存器。與過程不同,任務不可重入。任務切換不會把任何信息壓入棧中,處理器的狀態信息都被保存在內存中稱爲任務狀態段的數據結構中。

二、任務的結構和狀態

​ 一個任務由兩部分組成:任務執行空間任務狀態段TSS(Task-state segment)。 任務執行空間包括代碼段、堆棧段和一個或多個數據段,如果操作系統使用了處理器的特權級保護機制,那麼任務執行空間還需要爲每一個特權級提供一個獨立的堆棧空間,如圖1所示。任務狀態段指定了構成任務執行空間的各個段,,並且爲人物狀態信息提供存儲空間。在多任務環境中,任務狀態段也爲任務之間的鏈接提供了處理方法

825979-20190518161310663-1917827991.png

圖1 任務的結構和狀態

​ 一個任務使用指向其TSS的段選擇符來指定。當一個任務被加載進處理器中執行時,那麼該任務的段選擇符、段基址、段限長以及TSS段描述符屬性會被加載進任務寄存器TR(Task Register)中。如果使用了分頁機制,那麼任務使用的頁目錄表基地址就會被加載進控制寄存器CR3中。當前執行任務的狀態由處理器中胰腺癌所有內容組成:

  • 所有通用寄存器和段寄存器信息;
  • 標誌寄存器EFLAGS、程序指針EIP、控制寄存器CR3、任務寄存器和LDTR寄存器;
  • 段寄存器指定的任務當前執行空間;
  • I/O映射位圖基地址和I/O位圖信息(在TSS中);
  • 特權級0、1和2的堆棧指針(在TSS中);
  • 鏈接至前一個任務的鏈指針(在TSS中);

三、任務的執行

軟件或處理器可以使用以下方法之一來調度執行一個任務:

  • 使用CALL指令明確地調用一個任務;

  • 使用JMP指令明確地跳轉到一個任務(Linux內核使用的方式);

  • (處理器)隱含第調用一箇中斷句柄處理任務;

  • 隱含第調用一個異常句柄處理任務;

​ 所有這些調度任務執行方法都會使用一個指向任務門或任務TSS段的選擇符來確定一個任務。當使用CALL或JMP指令調度一個任務時,指令中的選擇符既可以直接選擇任務的TSS,也可以選擇存放有TSS選擇符的任務門。當調度一個任務來處理一箇中斷或異常時,那麼 IDT 中該中斷或異常表項必須是一個任務門,並且其中含有終端或異常處理任務的TSS選擇符。

​ 當調度一個任務執行時,當前正在運行任務和調度任務之前會自動地發生任務切換操作。在任務切換期間,當前運行任務的執行環境(稱爲任務的狀態或上下文)會被保存到它的TSS中並且暫停該任務的執行。此後新調度任務的上下文會被加載進處理器中,並且從加載的EIP指向的指令處開始執行新任務。

​ 如果當前執行任務(調用者)調用了被調度的新任務(被調用者),那麼調用者的TSS段選擇符會被保存在被調用者的TSS中,從而提供了一個返回調用者的鏈接。對於所有的80X86處理器,任務是不可遞歸調用的,即任務不能調用或跳轉到自己。

​ 中斷或異常可以通過切換到一個任務來進行處理。在這種情況下,處理器不僅能夠執行任務切換來處理中斷或異常,而且也會在中斷或異常處理任務返回時自動地切換回被中斷的任務中去。這種操作方式可以處理在中斷任務執行時發生的中斷。

​ 作爲任務切換操作的一部分,處理器也會切換到另一個LDT,從而允許每個任務基於LDT的段具有不同邏輯到物理地址的映射。同時,頁目錄寄存器CR3也會在切換時被重新加載,因此每個任務可以有自己的一套頁表。這些保護措施能夠用來隔離各個任務並且防止防止他們呢相互干擾。

posted @ 2019-05-18 16:14 ay-a 閱讀(...) 評論(...) 編輯 收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章