2010-07-21 166 views
3

調用系統調用時進程狀態是什麼?調用系統調用時的進程狀態?

我的意思是,不asume這是一個I/O系統調用像讀或寫...

它的過程itselft執行內核代碼,或過程suspendes和有像「內核線程」執行系統調用處理程序(並知道什麼稱爲(當前)的過程)?

我不確定從執行到準備,或執行到阻止的更改。

回答

1

這是進程本身切換到內核模式並執行系統調用 - 儘管它切換到內核堆棧來執行此操作。在內核中執行的進程具有運行狀態,並且可以被搶佔並以狀態運行結束。

+0

謝謝:) _____ – makakko 2010-07-21 20:56:20

2

這取決於系統調用的功能。

假設存在一個假設的系統調用,它將PI計算爲很多數字,並將結果放入應用程序指定的緩衝區,那麼進程可能只是處於「R」運行狀態。切換到內核模式不會阻止它在發出呼叫的任務的上下文中運行。

當然,很多系統調用都在等待事物 - 比如考慮sleep(),這會釋放CPU而不是旋轉。這使進程進入休眠狀態,註冊一個內核定時器來喚醒它。

相當多的系統調用永遠不會睡覺,getpid()等只是檢索總是在內存中的信息。許多有時睡眠的人並不一定這樣做,例如,如果你對已經在內核緩衝區中的數據調用read()。

+0

太好了,謝謝.. – makakko 2010-07-21 20:55:31