2016-07-05 56 views
0

我知道中斷會導致操作系統將CPU從當前任務中更改爲運行內核例程。在這種情況下,系統必須保存在CPU上運行的進程的當前上下文。 但是,我想知道當任何隨機進程進行系統調用時是否發生上下文切換。通過隨機系統調用的上下文切換

回答

0

我想知道當任何隨機進程進行系統調用時是否發生上下文切換。

不準確。回想一下,如果一個進程當前正在運行,那麼這個進程只能進行系統調用 - 不需要將上下文切換到已經運行的進程。

如果某個進程發出阻塞系統調用(例如,sleep()),則會切換到下一個可運行進程的上下文,因爲當前進程正在休眠。但那是另一回事。

+0

你能告訴我「過程控制塊」在這個過程中的作用是什麼? –

0

通常有兩種方法可以導致內容切換。 (1)定時器中斷調用強制執行上下文切換的調度程序或(2)過程產生。大多數操作系統都有一些系統服務,這些服務會導致進程產生CPU。

0

好吧,我明白你的意思了。所以,首先我清楚一個關於系統調用的非常基本的想法。
當進程/程序進行系統調用並中斷內核以調用系統調用處理程序時。 TSS加載內核堆棧並跳轉到系統調用函數表。
看到它的運行程序本身的不同部分實際上相同,唯一的主要變化是內核在這方面發揮的作用,這段代碼將在環0中執行

現在你的問題「會出現什麼如果上下文切換髮生時,隨機進程正在進行系統調用?

好吧,什麼都不會發生。事情會像以前一樣工作。只需要在TSS中擁有正常的地址,而不必在該隨機進程的TSS中指向內核堆棧和SysCall函數表地址。