1. 程式人生 > 實用技巧 >Linux程序優先順序

Linux程序優先順序

Linux程序優先順序

1.程序優先順序

1.1 基本概念

由於系統中程序數量眾多,而CPU資源比較少甚至只有一個,程序之間需要競爭來使用CPU。這時讓一個比較重要、需要優先執行的程序去和其他程序競爭,顯然是不合理的。為了更合理的分配CPU資源, 就有了程序優先順序。

優先順序高的程序有優先執行的權利。此外,優先順序還影響分配給程序的時間片長短。 重要的程序,應該分配多一些cpu時間片,好讓其儘快完成任務。所有的程序都會有機會執行,但優先順序高的程序會獲取更多的cpu執行時間。配置程序優先順序對多工環境的Linux很有用,可以改善系統性能。

1.2 優先順序取值範圍

實時程序與非實時程序

  • 和其他作業系統類似,Linux也支援兩種程序:實時程序和非實時程序。 實時程序具有一定程度上的緊迫性,要求對外部事件做出非常快的響應;而非實時程序則沒有這種限制。所以,排程程式要區分對待這兩種程序,通常,實時程序要比非實時程序優先執行。實時程序會一直執行直到退出,除非它阻塞才會釋放CPU, 實時程序只能被更高優先順序的實時程序搶佔,任意實時程序比非實時程序的優先順序都要高。 這兩種程序的區分也反映在task_struct 資料結構中。

程序優先順序取值範圍

在linux系統中,程序優先順序的取值範圍是0-139 , 而這個值又是由另外兩個值組成的,一個是代表實時程序(realtime)優先順序範圍是[0, 99]

,另外一個是代表非實時程序,取值範圍是[100, 139]。 所以,Linux程序實際上實現了140個優先順序範圍,取值範圍是從 [0, 139],這個值越小,優先順序越高。

  • 動態優先順序:實時程序優先順序, 範圍 [0,99],該區間被稱為動態優先順序,優先順序隨著程序執行情況的變化而改變,以便獲得更好的排程效能。
  • 靜態優先順序:非實時程序的優先順序, 範圍[100,139], 該區間被稱為靜態優先順序,該值不會隨著時間而進行改變,但系統可以通過nice來進行修改。

2.檢視程序優先順序

在這裡插入圖片描述
輸入命令 ps -l 即可檢視,其中有幾個重要的資訊:

  • UID : 代表執行者的身份
  • PID : 程序號
  • PPID : 父程序的程序號
  • PRI : 程序優先順序, 越小越優先
  • NI : 程序的nice值, 用於調整程序優先順序

同樣使用top命令也可檢視
在這裡插入圖片描述
PRI 代表的就是程序的優先順序. 其值越小, 優先順序越高, 即越早的被CPU所執行

  • NI:nice值, nice 是用來修改 PRI 的 , 也就是說用來調整程序優先順序的, PRI(new) = PRI(old) + nice。當nice值為負值的時候,那麼該程式優先順序會變高 (PRI數值降低)。在Linux下,調整程序優先順序就是更改NI,也就是nice值,nice的取值為 [ -20 ~ 19 ],一共40個範圍。

  • PR:PR是在top 命令執行後的顯示,其代表的是程序的靜態優先順序,與靜態優先順序(static_priority)關係為 :PR = static_priority - 100。static_priority取值為[100, 139],所以PR取值是 [0, 39]。PR和NI關係為 : PR(new) = PR(old) + nice

3.調整程序優先順序

用top命令更改已存在程序的nice值來調整程序優先順序

  • 執行 top 命令
  • 進入top後輸入r ===》輸入需要修改的程序的程序號PID ===》再輸入nice 的值 , 按回車即可

其他概念

  • 競爭性: 系統程序數目眾多,而CPU資源只有少量,甚至1個,所以程序之間是具有競爭屬性的。為了高效完成任務,更合理競爭相關資源,便具有了優先順序
  • 獨立性: 多程序執行,需要獨享各種資源,多程序執行期間互不干擾
  • 並行: 多個程序在多個CPU下分別同時進行執行,這稱之為並行
  • 併發: 多個程序在一個CPU下采用程序切換的方式,在一段時間之內,讓多個程序都得以推進,稱之為併發