2013-08-02 22 views
1

我已經閱讀了幾個流行OS教科書中關於上下文切換過程中發生的情況的描述。他們都沒有讓我完全滿意,儘管下面引用的那個(Tanenbaum)最接近。有幾個問題留給我。每一個以粗體突出顯示並在下面詳細闡述。硬件vs軟件在上下文切換中的作用

假設發生磁盤中斷時用戶進程3正在運行。 用戶進程3的程序計數器,程序狀態字以及通常一個或多個寄存器被中斷硬件壓入(當前)堆棧。計算機然後跳轉到中斷向量中指定的地址。這就是所有的硬件。從這裏開始,這取決於軟件,特別是中斷服務程序。

爲什麼硬件必須保存PC和PSW,但軟件可以保存其他所有內容(請參見下面的引用)?

我猜測這是因爲一旦執行跳到中斷服務程序,PC和PSW丟失(因爲它們已被服務程序所取代)。所以硬件必須做到這一點。它是否正確?

所有中斷通過保存寄存器開始,有時在當前進程的進程表條目中。然後通過中斷推入堆棧的信息被移除並且堆棧指針被設置爲指向進程處理器使用的臨時堆棧。

這種措辭(詞「刪除」專)的方式,使得它看起來像老進程的寄存器保存(由內核軟件)進程表,然後將PC和PSW其被推到舊的進程堆棧硬件(前一段)只是被丟棄(再次,單詞「刪除」)。顯然,由於我們將來需要它們,所以它們不能被丟棄,而且由於我們指出要將它們放在該堆棧上,所以它會很愚蠢!

我猜測,當他們說「已刪除」時,他們的意思是「刪除...」,然後將所有寄存器和其他信息放入進程表中,內核已經放在那裏。「所以現在不活動的進程已經準備好了,因爲(a)它的進程表已經完成,(b)堆棧頂部的臨時工(PC/PSW)被清除。它是否正確?

回答

2

問題1-是的,正確 - PC &當跳入中斷處理程序例程時,PSW和任何其他寄存器(取決於體系結構)都會被破壞。中斷處理程序結束後,存儲的信息將用於恢復中斷的進程狀態,因爲什麼都沒有發生。

問題2 - 從堆棧中移除意味着將相應的堆棧指針移動到添加刪除數據之前的值。根據堆棧增長的方向,各堆棧指針會遞減或遞增。

+0

Re:#2 ...好的,現在我看到了...... SP將會被硬件放在堆棧上的所有「東西」的數量變高(或變低)。因此,在將這些「東西」放入進程表之前,內核會將SP修復回原來的狀態。 –