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

2022-02-22 07:29:29 字數 1666 閱讀 7853

​ 任務是處理器可以分配排程、執行和掛起的乙個工作單元。它可用於執行程式、任務或程序、作業系統服務、中斷或異常處理過程和核心**。

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

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

​ 任務切換很像過程呼叫,但任務切換回儲存更多的處理器狀態資訊。任務切換會把控制權完全轉移到乙個新的執行環境,即新任務的執行環境。這種轉移操作要求儲存處理器中幾乎所有暫存器的當前內容,包括標誌暫存器eflag和所有的段暫存器。與過程不同,任務不可重入。任務切換不會把任何資訊壓入棧中,處理器的狀態資訊都被儲存在記憶體中稱為任務狀態段的資料結構中。

​ 乙個任務由兩部分組成:任務執行空間任務狀態段tss(task-state segment)。 任務執行空間包括**段、堆疊段和乙個或多個資料段,如果作業系統使用了處理器的特權級保護機制,那麼任務執行空間還需要為每乙個特權級提供乙個獨立的堆疊空間,如圖1所示。任務狀態段指定了構成任務執行空間的各個段,,並且為人物狀態資訊提供儲存空間。在多工環境中,任務狀態段也為任務之間的鏈結提供了處理方法

圖1 任務的結構和狀態

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

軟體或處理器可以使用以下方法之一來排程執行乙個任務:

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

​ 當排程乙個任務執行時,當前正在執行任務和排程任務之前會自動地發生任務切換操作。在任務切換期間,當前執行任務的執行環境(稱為任務的狀態或上下文)會被儲存到它的tss中並且暫停該任務的執行。此後新排程任務的上下文會被載入進處理器中,並且從載入的eip指向的指令處開始執行新任務。

​ 如果當前執行任務(呼叫者)呼叫了被排程的新任務(被呼叫者),那麼呼叫者的tss段選擇符會被儲存在被呼叫者的tss中,從而提供了乙個返**用者的鏈結。對於所有的80x86處理器,任務是不可遞迴呼叫的,即任務不能呼叫或跳轉到自己。

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

作業系統學習

看了幾天的資料,今天終於有時間把測試環境搭建起來。模擬機bochs nasm ultraiso 模擬機bochs的設定不難,在網上搜了些資料和參考了bochs的說明檔案,基本上就可以組建並執行起來。在網上下了個dos的映象,執行bochs從a盤啟動,之後把硬碟分割槽格式化,乙個最基礎的測試環境就完成...

作業系統學習

1 處理器硬體故障中斷事件 由處理器,記憶體儲器,匯流排等故障引起 程式性中斷事件 2 處理器執行機器指令引起 1.1 除數為零,運算元溢位等算術異常 1.3 終止程序指令 終止程序 3 自願性中斷事件 1.1 處理器執行陷入指令請求os服務引起 1.2 請求分配外設,請求io等 1.3 處理流程是...

作業系統學習之程序管理

系統執行過程中cpu的活動稱為程序。作業 使用者程式 任務 程序是執行中的程式。關於程式和程序 程式是被動實體,是靜態的,固定的 程序是活動實體,隨著程式計數器的變化指示下一條執行的指令,所以程序是動態的,是不斷變化的。程序狀態可分為五種 這裡有乙個程序狀態轉換圖 通過這個圖可以看到程序不可以由re...