上下文切換,也就是從乙個可執行程序切換到另乙個可執行程序。
核心提供了乙個need_resched標誌來表明是否需要重新執行一次排程。再返回使用者空間以及從中斷返回的時候,核心也會檢查need_resched標誌。每個程序都包含乙個need_resched標誌,這是因為訪問程序描述符內的數值要比訪問乙個全域性變數快。
4.3.1 使用者搶占
核心即將返回使用者空間的時候,如果need_resched標誌被設定,會導致schedule()被呼叫,此時就會發生使用者搶占。在核心返回使用者空間的時候,它知道自己是安全的,因為既然它可以繼續去執行當前程序,那麼它當然可以再去選擇乙個新的程序去執行。所以,核心無論是在從中斷處理程式還是在系統呼叫後返回,都會檢查need_resched標誌。如果它被設定了,那麼,核心會選擇乙個其他程序投入執行。
簡而言之,使用者搶占在以下情況時產生:
4.3.2 核心搶占
只要沒有持有鎖,核心就可以進行搶占。鎖是非搶占區域的標誌。
如果核心中的程序被阻塞了,或它顯式地呼叫了schedule(),核心搶占也會顯式地發生。這種形式的核心搶占從來都是受支援的,因為根本無需額外的邏輯來保證核心可以安全地被搶占。如果**顯式的呼叫了schedule(),那麼它應該清楚自己是可以安全地被搶占的。
核心搶占會發生在:
4 3 程序排程 搶占和上下文切換
上下文切換,也就是從乙個可執行程序切換到另乙個可執行程序。核心提供了乙個need resched標誌來表明是否需要重新執行一次排程。再返回使用者空間以及從中斷返回的時候,核心也會檢查need resched標誌。每個程序都包含乙個need resched標誌,這是因為訪問程序描述符內的數值要比訪問乙...
程序搶占和上下文切換
上下文切換,也就是從乙個可執行程序切換到還有乙個可執行程序。程序切換schedule函式呼叫context switch 函式完畢下面工作 1.呼叫定義在中的switch mm 該函式負責把虛擬記憶體從上乙個程序對映切換到新程序中。2.呼叫定義在中的switch to 該函式負責從上乙個程序的處理器...
Linux2 6 程序搶占和上下文切換
上下文切換,也就是從乙個可執行程序切換到另乙個可執行程序,由定義在kernel sched.c中的context switch 函式負責處理。每當乙個新的程序被選出來準備投入執行的時候,schedule 就會呼叫該函式。它完成了兩相基本工作 1.呼叫宣告在中的switch mm 該函式負責把虛擬記憶...