回答
一個先佔流程是準備在內存中運行,這就是爲什麼在此圖上的先佔內存狀態和準備就緒內存狀態之間存在一條虛線。 CPU密集型進程通常在完成時間片上的工作並使用CPU,直到在硬件級觸發計時器滴答聲並導致內核搶佔進程。這並不會使進程隨時可以運行,因爲在搶佔進程的過程中,內核保存了上下文切換所需的所有數據結構。
但是,一個被搶佔的進程不一定準備好在用戶模式中運行。相反,內核可能會搶佔自己,因爲內核在網絡數據包到達,磁盤讀取完成,計時器觸發或某些其他事件導致搶佔時會執行一些工作。如果進程最初在用戶模式下運行時(我在第一段中描述的情況),那麼只要調度程序決定應該再次運行,它就會返回到用戶模式。這是最左邊的紅色箭頭。另一方面,如果進程在內核模式下運行時被搶佔,那麼只要調度程序決定它應該再次運行,它就會返回到內核模式。這是另一個紅色箭頭。
@MaciejZiarko調度程序控制* all *進程何時運行,所以在這兩種情況下調度程序都會在進程重新運行之前調用。然而,區別在於在用戶模式下運行(通過「返回用戶」)和在內核模式下運行(通過「重新安排」)。 – 2012-04-15 00:41:57
好吧,我明白你的意思,你真的幫了我。但我認爲這部分圖表很混亂。謝謝! – 2012-04-15 00:44:23
圖表顯示正在運行的用戶進程通過內核模式被搶佔(沒有直接的箭頭到搶先),但當回到正在運行的用戶時,它不需要內核模式。這是真的嗎?調度程序是否在內核模型中運行?我想是這樣。 – 2012-04-15 00:52:42
恕我直言,圖是假的。殭屍進程應該結束,但沒有。否則殭屍程序會積累,而他們不會。
所有完成的進程都是殭屍,直到他們的父進程獲得它們。 – 2012-04-15 00:33:59
是的,但是給出一個狀態圖,可以展開**所有狀態**,包括最終狀態/終端狀態,即使它們是狀態*狀態*。 – wildplasser 2012-04-15 00:37:43
過程被破壞後沒有任何狀態,這是在父母完成後被父母回收時發生的情況。 – 2012-04-15 00:44:14
- 1. 類圖混亂
- 2. UML圖混亂
- 3. 約線程(混亂)
- 4. Python 2.7版進口混亂
- 5. 混亂的程序流程
- 6. 混亂
- 7. 混亂
- 8. 混亂
- 9. 混亂
- 10. 圖像混亂jQuery功能
- 11. 解決圖片混亂!
- 12. 圖像在webkit中混亂
- 13. thread_specific_ptr多線程混亂
- 14. 的Java多線程混亂
- 15. 混亂使用Qt線程
- 16. 迴文C程序混亂
- 17. C程序輸出混亂
- 18. c程序功能混亂
- 19. jQuery插件教程混亂
- 20. 混亂取消縮進錯誤
- 21. XPath的先進語法混亂
- 22. 入門型圖像混亂的意圖
- 23. 先行混亂
- 24. pySpark toRowMatrix混亂
- 25. PrintWriter的混亂
- 26. CreateMutex混亂
- 27. Android混亂
- 28. ado.net SQLite混亂
- 29. 的RewriteCond混亂
- 30. CFG OPLIST混亂
在我看來,它不是脫離主題。在Unix <>測試之前學習時,這個問題出現在我的腦海裏。 –
2012-04-15 00:29:09