深入Linux內核架構-進程管理和調度(四)

一、進程管理相關的系統調用

討論 fork 和 exec 函數族(用來用指定的程序替換當前進程的所有內容)系統調用的實現。通常這些調用不是由應用程序直接發出
的,而是通過一箇中間層調用,即負責與內核通信的C標準庫。

從用戶狀態切換到核心態的方法,依不同的體系結構而各有不同。用於在這兩種狀態之間切換的機制,並解釋了用戶空間和內核空間之間如何交換參數。就目前而言,將內核視爲由C標準庫使用的“程序庫”即可。

1、進程複製

傳統UNIX中用於複製進程的系統調用是fork。但fork並不是Linux爲此實現的唯一調用,實際上Linux實現了3個。

(1) fork 是重量級調用,因爲fork建立了父進程的一個完整副本,然後作爲子進程執行。爲減少與該調用相關的工作量,Linux使用寫時複製(copy-on-write)技術。

(2) vfork 類似於 fork ,但vfork 並不創建父進程數據的副本。相反,父子進程之間共享數據。這節省了大量CPU時間(如果一個進程操縱共享數據,則另一個會自動注意到)。

vfork 設計用於子進程形成後立即執行 exec 系統調用加載新程序的情形。在子進程退出或開始新程序之前,內核保證父進程處於堵塞狀態。由於 fork 使用了寫時複製技術, vfork 在速度方面不再有優勢,因此應該避免使用 vfork 。

(3) clone

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章