進程的相關概念

在操作系統系統裏,進程是一個非常重要的概念。

一、什麼是進程呢?

按我的理解,通俗的來說進程是運行起來的程序。唯一標示進程的是進程描述符(PID)。

那麼先來了解一下進程和程序的區別:

  1. 程序是靜態概念,本身作爲一種軟件資源長期保存;而進程是程序的執行過程,它是動態概念,有一定的生命期,是動態產生和消亡的。   

  2. 程序和進程無一一對應關係。一個程序可以由多個進程公用;另一一方面,一個進程在活動中有可順序地執行若干個程序

二、進程的分類

1)根據在linux不同模式下運行分爲:

    核心態:這類進程運行在內核模式

    用戶態:這類進程工作在用戶模式

2)按照進程的狀態可分爲:

    運行態:running, 正在運行的進程

    可中斷睡眠態:進程處於睡眠狀態,但是可以被中斷

    不可中斷的睡眠態:進程處於睡眠狀態,但是不可以被中斷

    停止態:stoped 不會被內核調度

    僵死態:zombie 產生的原因是進程結束後,它的父進程沒有wait它,所導致的。

3)按照操作的密集程度

    CPU密集型:進程在運行時,佔用CPU時間較多的進程。

    I/O密集型:進程在運行時,佔用I/O時間較多的進程。

    通常情況下,I/O密集型的優先級要高於CPU密集型。


三、進程的優先級

進程的有優先級,是用0-139數字來表示的,數字優先級從小到大依次是:0-99,139-100。

優先級又分爲2類:

    實時優先級:0-99,是由內核維護的

    靜態優先級:100-139,可以使用nice來調整,nice值的取值範圍是[-20,19),分別對應100到139。nice默認值是0。

nice值:-20~19:默認0

注意:只有管理員才能使用負整數的nice值,以提升進程的優先級,而普通用戶只能使用正整數的nice值,以降低進程的優先級


四、進程的創建和終止

除了init進程之外,剩下其他的各個進程都是由其父進程創建的; 由fork()系統調用來實現;

每個父進程通過fork()系統調用來複制自身的數據給子進程使用;這種複製方式不是理解複製,而是寫時複製(CoW);;

任何父進程創建的子進程都必須由父進程親自銷燬,任何進程的父子關係都保存在task struct中;


五、父子進程的關係
    1.子進程是由一個進程所產生的進程,產生這個子進程的進程稱爲父進程

   2.在linux系統中,使用系統調用fork創建進程。fork複製的內容包括父進程的數據和堆棧段以及父進程的進程環境。
   3.父進程終止子進程自然終止。
    
六、前臺進程和後臺進程    
前臺進程:
  在shell提示處理打入命令後,創建一個子進程,運行命令,Shell等待命令退出,然後返回到對用戶給出提示符。這條命令與Shell異步運行,即在前臺運行,用戶在它完成之前不能執行別一個命令

  很簡單,我們在執行這個查找命令時,無法進行其它操作,這個查找就屬於前臺進程

後臺進程:

  在Shell提示處打入命令,若後隨一個&,Shell創建子進程運行此命令,但不等待命令退出,而直接返回到對用戶給出提示。這條命令與Shell同步運行,即在後臺運行。"後臺進程必須是非交互式的" ;





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