2013-01-06 103 views
1

當用戶進程調用「系統調用」並且CPU切換到管理員模式時,什麼系統進程負責執行系統調用?是否安排系統呼叫?

在系統調用計劃由線程調度器(可以在CPU切換到執行越來越中斷後另一個系統調用)?

回答

2

什麼系統進程負責執行系統調用?
系統調用包裝(調用執行系統調用的功能,是它只是一個包裝,而不是實際系統調用)將採取的參數,將它們傳遞給approperiate寄存器(或堆棧,取決於實現),接下來它會把你請求的系統調用號碼放在eax(假設爲x86),最後會調用INT 0x80彙編指令,它基本上告訴操作系統它收到了一箇中斷,這個中斷是一個系統調用,需要被服務,哪個系統調用服務在eax中可用,並且參數在寄存器中。

(現代實現使用INT因爲它在性能價格昂貴,現在使用SYSENTERSYSEXIT停止,上面仍然幾乎是相同的,雖然)

從調度的角度來看,這都沒有區別,如果你執行系統調用與否;問題是,一旦你問OS的服務(通過x86指令INTSYSENTERSYSEXIT)的CPU模式標誌將變爲特權集,那麼內核將執行你問代表您處理的任務,一旦完成,它將標誌置位並將執行返回到下一條指令。

因此,從調度點時,操作系統會看到沒有區別,當你執行一個系統調用或其他任何東西。

一些注意事項:
- 我上面提到的是一般性描述,我不確定Windows是否應用了這個功能,但如果沒有,應該採取類似的方式。許多系統調用執行阻塞任務(如I/O處理);爲了提高CPU的利用率,如果你的進程要求阻塞系統調用,調度器將讓你的進程在等待隊列中等待,直到它所請求的已準備好,同時其他進程在CPU上運行,但不要將它與任何東西混淆, OS沒有「安排系統調用」。

調度的任務是組織任務,並從它的角度來看,系統調用只是例行的進程正在執行。

最後一點,一些系統調用是原子,這意味着他們應該沒有任何中斷自己的執行來進行,這些系統調用如果打斷,將被要求一旦中斷的原因是在重新啓動執行;這還遠沒有調度概念。

0

第一個問題:這要看。有些系統調用將已經運行的服務(如網絡調用)視爲一個過程。某些系統調用會導致創建新進程,然後計劃執行。

最後一個問題:yes windows是一個多處理系統。進程調度程序處理線程何時運行,多長時間以及硬件中斷最終會導致正在運行的進程釋放CPU或硬件現在已準備好進入CPU的空閒進程。

在窗口(至少> Win 7的,但我認爲,在過去這是真的太)有很多的所謂的Svchost進程中運行的系統服務。查看正在運行的是一個很好的應用程序,它是sys內部的Process Explorer。它就像類固醇的任務經理一樣,會向您展示給定流程擁有的所有線程。對於更細粒度的「我稱這個dos命令發生了什麼」的細節,你可能希望使用一個調試工具,在這裏你可以通過你的調用。一般來說,雖然你不必用這些東西來關心自己,你做一個系統調用系統知道你是不是準備好繼續處理,直至處理該請求返回的任何過程。您的要求可能會得到之後您的釋放過程,將CPU,它可能會處理器CPU2天,但現在只要操作系統而言(或者你的程序應該關注)不要緊,停止執行,並等待除非你正在運行多線程,然後它變得非常複雜。

+0

「有些系統調用去哪個已經運行......服務」 但是,這是由IPC完成其在啓動系統調用同一進程中運行的系統調用的程序內,但在內核模式下,是嗎? – userx01233433