程序優先順序和程序nice值?

2021-08-19 14:45:36 字數 3123 閱讀 8578

程序優先順序和程序nice值?

首先,我想用乙個簡單的命令來引起這個議題。 無論在linux或者unix系統中,用ps –l命令則會類似輸出以下幾個內容:

[root@dbbak root]# ps –l   --- 這裡用的是linux測試

f s   uid   pid  ppid  c pri  ni addr    sz wchan  tty          time cmd

4 s     0 20538 20534  0  75   0    -  1063 wait4  pts/2    00:00:00 bash

4 r     0 20663 20538  0  75   0    -   828 -      pts/2    00:00:00 ps

我們很容易注意到其中的幾個重要資訊,有下:

uid : 代表執行者的身份

pid : 代表這個程序的代號

ppid :代表這個程序是由哪個程序發展衍生而來的,亦即父程序的代號

pri :代表這個程序可被執行的優先順序,其值越小越早被執行

ni :代表這個程序的nice值

這 裡的前面的三個資訊,我們都是比較好容易理解的,但是後面的兩個奇怪的資訊,乙個是pri,乙個是ni,這到底是什麼東西?相對而言,pri也還是比較好 理解的,即程序的優先順序,或者通俗點說就是程式被cpu執行的先後順序,此值越小程序的優先級別越高。那ni呢?就是我們所要說的nice值了,其表示進 程可被執行的優先順序的修正數值。如前面所說,pri值越小越快被執行,那麼加入nice值後,將會使得pri變 為:pri(new)=pri(old)+nice。這樣,當nice值為負值的時候,那麼該程式將會優先順序值將變小,即其優先順序會變高,則其越快被執 行。

程序在建立時並不是平等的,他們被賦予不同的優先順序值,例如有些對計算機本身的操作至關重要的程式必須比其他次要的程式具有更高的優先順序(則其有更 小的優先順序值)。而如前面所說,nice的值是表示程序優先順序值可被修正資料值,因此,每個程序都在其計畫執行時被賦予乙個系統nice值,這樣系統就可 以根據系統的資源以及具體程序的各類資源消耗情況,主動干預程序的優先順序值。這個過程,使用者也可手工干預其中,但是要被賦予相應的許可權。

在 unix系統或者linux系統中,使用從-20到+19的乙個可變數值來表示這個nice值(linux和aix是這種情況,hp-ux系統的值範圍是 從0到39),並且在通常情況下,子程序會繼承父程序的系統nice值。具有最高優先順序的程式,其nice值最低,所以在unix和linux系統中,值 -20使得一項任務變得非常重要(hp-ux為0);與之相反,如果任務的 nice 為+19(hp-ux為39),則表示它是乙個高尚的、無私的任務,允許所有其他任務比自己享有寶貴的 cpu 時間的更大使用份額,這也就是nice的名稱的意會來意。

在系統啟動的過程中,init程序會被賦予0(hp-ux系統值會被賦予20),其他所有程序繼承了這個nice值(因為其他的程序都是init的 子程序)。對於使用者,從他們開始登陸初始化程序,其餘在其底下衍生出來的子程序也會賦予該nice值。原始使用者,只能將其底下的執行程序的nice值變大 (相對於其本身nice值而言)而不能變小;若想變小,得要有相應的許可權,如root使用者可以設定變小,如下:

[oracle@perf_dbc ~]$ nice 0

[oracle@perf_dbc ~]$ nice -n 3 ls

agent  bin  important_bak  logs  statistics_import.log  tmp_forum_stats.dmp  tmp_taobao_stats.dmp  tmp_tbcat_stats.dmp  top.dmp  worksh

[oracle@perf_dbc ~]$

[oracle@perf_dbc ~]$ nice -n -3 ls

nice: cannot set priority: permission denied

而root使用者就可以給其子程序賦予更小的nice值,如下:

[root@dbbak root]# nice 0

[root@dbbak root]# nice -n -3 ls

192.168.205.191.txt  anaconda-ks.cfg  clariion.log  desktop  disk1  emc.sh  file_sort  install.log  install.log.syslog  log  ops  rhel_os_soft  root_link_name

對於後台程序,其nice會在其被顯示賦予的值過後再加上4。如「nice 12 command &」命令執行時,則其會以nice=36值來執行程式(hp-ux系統)。這裡有個問題,即如果使用者設定的nice值超過了nice的邊界值 (linux和aix為-20到19,hp-ux為0到39)會怎樣,則系統就取nice的邊界值作為程序的nice值。

與程序的nice相關的命令有2個,分別是nice和renice。

nice命令就是設定乙個要執行command程序的nice值,其命令格式是 nice –n adjustment command command_option,這裡就設定要執行的command的nice,如果這裡不指定adjustment,則預設為10。

renice命令就是設定乙個已經在執行的程序的nice值,如假設一執行程序本來nice值為0,renice為3後,則這個執行程序的nice值就為3了。renice的執行必須要有相應的許可權方可執行。它可以根據使用者、程序id、程序組來設定程序的nice值。

對nice值乙個形象比喻,假設在乙個cpu輪轉中,有2個runnable的程序a和b,如果他們的nice值都為0(如果是hp-ux則為 20),加上核心會給他們每人分配1k個cpu時間片。但是假設程序a的為0,但是b的值為-10,那麼此時cpu則會可能分別給a和b分配1k和 1.5k的時間片。故可以形象的理解為,nice的值影響了核心分配給程序的cpu時間片的多少,時間片越多的程序,其優先順序越高,其優先順序值越低。

從使用top、ps等命令看到的nice值,就是程序所擁有的nice值,使用iostat等看到的%nice,就是使用者程序空間中改變過優先順序的程序的占用cpu的百分比,如上例中就說0.5k/2.5k=1/5=20%。

到目前為止,更需要強調一點的是,程序的nice值不是程序的優先順序,他們不是乙個概念,但是程序nice值會影響到程序的優先順序變化

0

給主人留下些什麼吧!~~

程序優先順序,程序nice值和 nice的解釋

用top或者ps命令會輸出pri pr ni ni nice這三種指標值,這些到底是什麼東西?先給出大概的解釋如下 pri 程序優先權,代表這個程序可被執行的優先順序,其值越小,優先順序就越高,越早被執行 ni 程序nice值,代表這個程序的優先值 nice 改變過優先順序的程序的占用cpu的百分比...

程序排程(程序優先順序和nice值)

基本概念 程序優先順序是乙個數值,它通過動態的優先順序和靜態的優先順序來決定程序被cpu處理的順序。乙個擁有更高程序優先順序的程序擁有更大的機率得到處理器的處理。核心根據程序的行為和特性使用試探演算法,動態地調整調高或調低動態優先順序。乙個使用者程序可以通過使用程序的nice值間接改變靜態優先順序。...

Linux程序優先順序和nice值

在學習了linux的完全公平排程演算法 cfs 後,記錄下學習軌跡 這篇文章主要講述,完全公平排程演算法的工作方式,和一些排程知識 我們可以通過ps l看到當前正在執行的程序的詳細資訊其中 pid 程序號 ppid 該程序父程序的程序好 c cpu是用百分比 pri 優先順序 ni nice值 ad...