上下文切換,也就是從乙個可執行程序切換到另乙個可執行程序,由定義在kernel/sched.c中的context_switch()函式負責處理。每當乙個新的程序被選出來準備投入執行的時候,schedule()就會呼叫該函式。它完成了兩相基本工作:
1.呼叫宣告在中的switch_mm(),該函式負責把虛擬記憶體從上乙個程序對映切換到新的程序中去,其實就是切換到另乙個程序的位址空間中,請看下圖示例:
2.呼叫宣告在中的switch_to(),該函式負責從上乙個處理器狀態切換到新程序的處理器狀態。這包括儲存,恢復棧資訊和暫存器資訊,還有其他和體系結構有關的狀態資訊,都必須以每個程序為物件進行管理和儲存。請看如下示例:
下面我們看下程序搶占的時機。
1.使用者搶占
從系統呼叫返回使用者空間時
從中斷處理程式返回使用者空間時
2.核心搶占
中斷處理程式正在執行,且返回核心空間之前
核心**再一次具有可搶占性的時候
如果核心中的任務顯示的呼叫schedule()
如果核心中的任務阻塞(這同樣會導致呼叫schedule())
程序搶占和上下文切換
上下文切換,也就是從乙個可執行程序切換到還有乙個可執行程序。程序切換schedule函式呼叫context switch 函式完畢下面工作 1.呼叫定義在中的switch mm 該函式負責把虛擬記憶體從上乙個程序對映切換到新程序中。2.呼叫定義在中的switch to 該函式負責從上乙個程序的處理器...
Linux中斷上下文和程序上下文(一)
程序上下文和中斷上下文是作業系統中很重要的兩個概念,這兩個概念在作業系統課程中不斷被提及,是最經常接觸 看上去很懂但又說不清楚到 底怎麼回事。造成這種局面的原因,可能是原來接觸到的作業系統課程的教學總停留在一種淺層次的理論層面上,沒有深入去研究。處理器總處於以下狀態中的一種 核心態,執行於程序上下文...
Linux中斷上下文和程序上下文(二)
核心空間和使用者空間是作業系統理論的基礎之一,即核心功能模組執行在核心空間,而應用程式執行在使用者空間。現代的cpu都具有不同的操作模式,代表不同的級別,不同的級別具有不同的功能,在較低的級別中將禁止某些操作。linux系統設計時利用了這種硬體特性,使用了兩個級別,最高端別和最低級別,核心執行在最高...