2015-04-06 49 views
0

操作系統如何獲得進程切換。我想談談它更一般。我們處於多任務時代,我知道有一些調度程序的權威性指出哪個進程將運行的基本概念。我的問題是更多處理器如何保證某個進程將消耗X時間,然後將執行下一個進程。在某些特定時間之後是否有任何低級機制中斷進程?或者它是某種抽象方法來實現這一點?操作系統如何獲取進程切換

是否有可能實現某些什麼打破當前的任務,並切換執行到另一個沒有特殊的處理器幫助?如果否,我們需要執行什麼。假設我想在像Atmega8這樣簡單的uC中實現這樣的東西(這只是uC的例子,我們可以使用其他的,來自其他系列)

回答

0

Google for'interrupts'。使用現代先發制人的內核,來自運行線程/進程的系統調用以及導致驅動程序運行的硬件中斷,都是可以驅動操作系統內核調度狀態機的事件,因此,這些事件可以在覈心上運行。

在許多OS設計上,特別是在有限的硬件上,沒有「處理器保證某些進程會消耗X時間」這樣的事情。其他人有調度器內置的反飢餓算法。

有尋求提供擔保等調度算法,但這是非常困難的,從系統調用和硬件中斷衝突的需求在I/O完成事件面前

+0

或者查詢'維基百科'進行'中斷'或[上下文切換](https://en.wikipedia.org/wiki/Context_switch) – xmojmr

0

有兩種方法(即我可以考慮關閉我的頭頂)可能導致上下文切換:

1)進程/線程產量。這往往是上下文切換最常見的原因。線程隊列和I/O請求並等待響應。等待導致線程/進程退出。

2)定時器,如上所述。在計算綁定進程(全部處理,無I/O,無頁面錯誤)的情況下,CPU定時器生成在內核模式下處理的中斷。操作系統將有一組內務任務在定時器中斷上執行。其中之一將是看當前的過程是否超出了它的量子。如果是這樣,並且有更高優先級的另一個進程準備就緒,請執行上下文切換。

+0

3)在(1)中所請求的I/O操作完成,等待線程正在運行,搶佔另一個線程。 –

+0

定時器中斷將無法找到具有更高優先級的就緒進程/線程 - 任何此類線程在其準備就緒時將被設置爲「立即」運行,搶佔低優先級的線程。 –