時鐘中斷,排程器,任務切換

2021-09-10 05:56:16 字數 1073 閱讀 3503

總的關係是硬體觸發時鐘中斷,時鐘中斷呼叫排程器,排程器完成任務的選擇和切換。

計算機的處理是離散的,不是連續的。這涉及到計算精度、時鐘的問題。

現代的作業系統都是多工分時系統,也就是以時間片為單位進行運轉的。

多工的切換必然要判斷涉及到時間資訊,作業系統可以從時鐘中斷獲取。

另外,任務執行的時間片的數量也可以用來進行任務級別的劃分。

計算強度大的可以多占用時間片,io多的就少占用。

比例公平排程,完全公平排程,eas排程器,實時排程…等等排程方法,都是在時鐘中斷時觸

發的。不同排程策略側重點不同,有的重視效能,想要提高處理器利用率,有的希望任務的

頻繁切換,有的想節能,有的需要硬實時。

排程器不同的地方在於對任務的負載、處理器的模型化描述,以及next任務的選擇依據。

處理器的模型化描述表示了處理器的效能,任務的負載聯合起來描述了處理器的負載,

這兩個決定了處理器間的任務排程,next任務的選擇依據在單核上最為重要。

(單一計算機上的任務排程)

任務切換在排程器完成next任務的選擇之後進行的。

同一特權級下的任務切換:

最關鍵的地方在於,a任務在向b任務切換時,a的全部push操作針對a的

棧來執行,而a的全部pop操作針對b的棧操作。其實就是,a進行的

上下文恢復,恢復的是b任務,當然a並不知道。最後結束上下文切換,

執行jmp/call/ret指令,完成了任務**的切換。

上面的想法引發了乙個問題,對於乙個新任務來說,從任務a切換到new任務,

需要恢復new任務的上下文環境,然而new任務是新建立的,沒有上下文。

怎麼辦? 程式設計師需要直接捏造乙個上下文環境存放到new任務的棧中。

所以os第乙個任務是手動建立的,之後的任務便可以直接fork它了。

注意:在任務沒有徹底完成切換時,還在本任務執行。

不同特權級下的任務切換:

與單一特權級不同的是,低特權的任務需要記錄多個棧,比如3特權級需要

記錄0,1,2一共4個棧。在切換到核心或者其他任務時,需要恢復不同的棧。

uCOS II的任務排程和時鐘

在ucos ii中,任務切換只是簡單的將處理器暫存器儲存到將被掛起的任務的堆疊中,並且將更高優先順序的任務從堆疊中恢復出來,或者叫copy複製出來,處於就緒狀態的任務的堆疊結構看起來就像剛發生過中斷並將所有的暫存器儲存到堆疊中的情形一樣。換句話說,ucos ii要執行處於就緒狀態的任務必須要做的事情...

任務排程器

leetcode621 解題思路一 排序 規定n 1個任務為一輪,保證同一輪中乙個任務最多只能被安排一次。在每一輪中,將當前的任務按照它們剩餘的次數降序排序,並選擇剩餘次數最多的n 1個任務依次執行。如果任務的中種類t n 1,則只能選擇全部的t種任務,其餘時間空閒。也就是利用貪心,因為冷卻時間的存...

任務排程器

給你乙個用字元陣列tasks表示的cpu需要執行的任務列表。其中每個字母表示一種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在1個單位時間內執行完。在任何乙個單位時間,cpu可以完成乙個任務,或者處於待命狀態。然而,兩個相同種類的任務之間必須有長度為整數n的冷卻時間,因此至少有連續n個...