Linux進程的原理及與信號的聯系
阿新 • • 發佈:2018-09-30
說明 位置 相同 調度 ice 並行 進程切換 運行 的區別
第1節 程序、進程、守護進程的區別
- 程序:c/php/java,代碼文件,靜態的,放在磁盤裏的數據。
- 進程:正在內存中運行的程序,進程是動態的,會申請和使用系統資源,並與操作系統內核進行交互。
- 進程運行:系統把程序放在內存裏執行。
- 守護進程:在內存持續保持運行著的程序。
第2節 多任務與CPU
- 現在所有的操作系統(分時設計,例如CentOS)都能"同時"運行多個進程,也就是多任務或者說是並行執行。但實際上這是人類的錯覺,一顆物理cpu在同一時刻只能運行一個進程,只有多顆物理cpu才能真正意義上實現多任務。
- cpu如何選擇下一個要執行的進程,這是一件非常復雜的事情。在Linux上,決定下一個要運行的進程是通過"調度類"(調度程序)來實現的。程序何時運行,由進程的優先級決定,但要註意,優先級值越低,優先級就越高,就越快被調度類選中。
除此之外,優先級還影響分配給進程的時間片長短。在Linux中,改變進程的nice值,可以影響某類進程的優先級值。 - 進程切換被CPU執行時,內核會將每個進程臨時停止時的運行時環境(寄存器中的內容和頁表)保存下來(保存位置為內核占用的內存),這稱為保護現場,在下次進程恢復運行時,將原來的運行時環境加載到cpu上,這稱為恢復現場,這樣cpu可以在當初的運行時環境下繼續執行。
- 在進程的優先級相同下;Linux的調度器不是通過cpu的時間片流逝來選擇下一個要運行的進程的,而是考慮進程的等待時間,即在就緒隊列等待了多久
- cpu的衡量單位是時間,就像內存的衡量單位是空間大小一樣。進程占用的cpu時間長,說明cpu運行在它身上的時間就長。註意,cpu的百分比值不是其工作強度或頻率高低,而是"進程占用cpu時間/cpu總時間",這個衡量概念一定不要搞錯。
第3節 各進程與CPU的狀態
的
第4節 父子進程及創建方式(資源,shell實現)
的
第5節 jobs與父子進程的前後臺,fuser,lsof
的
第5節 信號與進程與kill,pkill,killall
的
Linux進程的原理及與信號的聯系