程式的運行順序)

來源:互聯網
上載者:User
關於程式的運行順序

我們知道 Linux 是多人多工的環境,由 top 的輸出結果我們也發現, 系統同時間有非常多的程式在運行中,只是絕大部分的程式都在休眠 (sleeping) 狀態而已。 想一想,如果所有的程式同時被喚醒,那麼 CPU 應該要先處理那個程式呢?也就是說,那個程式被啟動並執行優先序比較高? 這就得要考慮到程式的優先運行序 (Priority) 與 CPU 排程羅!

CPU 排程與前一章的例行性工作排程並不一樣。 CPU 排程指的是每支程式被 CPU 啟動並執行演算規則, 而例行性工作排程則是將某支程式安排在某個時間再交由系統運行。 CPU 排程與作業系統較具有相關性!

 

 

Priority 與 Nice 值

 

我們知道 CPU 一秒鐘可以運行多達數 G 的微命令次數,透過核心的 CPU 排程可以讓各程式被 CPU 所切換運行, 因此每個程式在一秒鐘內或多或少都會被 CPU 運行部分的命令碼。如果程式都是集中在一個佇列中等待 CPU 的運行, 而不具有優先順序之分,也就是像我們去遊樂場玩熱門遊戲需要排隊一樣,每個人都是照順序來! 你玩過一遍後還想再玩 (沒有運行完畢),請到後面繼續排隊等待。情況有點像底下這樣:

 

中假設 pro1, pro2 是緊急的程式, pro3, pro4 是一般的程式,在這樣的環境中,由於不具有優先順序, 唉啊!pro1, pro2 還是得要繼續等待而沒有優待呢!如果 pro3, pro4 的工作又臭又長!那麼緊急的 pro1, pro2 就得要等待個老半天才能夠完成!真麻煩啊!所以羅,我們想要將程式分優先順序啦!如果優先序較高則運行次數可以較多次, 而不需要與較慢優先的程式搶位置!我們可以將程式的優先順序與 CPU 排程進行如的解釋:

如所示,具高優先權的 pro1, pro2 可以被取用兩次,而較不重要的 pro3, pro4 則運行次數較少。 如此一來 pro1, pro2 就可以較快被完成啦!要注意,僅是,並非較優先者一定會被運行兩次啦! 為了要達到上述的功能,我們 Linux 給予程式一個所謂的『優先運行序 (priority, PRI)』, 這個 PRI 值越低代表越優先的意思。不過這個 PRI 值是由核心動態調整的, 使用者無法直接調整 PRI 值的。先來瞧瞧 PRI 曾在哪裡出現?

[root@www ~]# ps -lF S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD4 S     0 18625 18623  2  75   0 -  1514 wait   pts/1    00:00:00 bash4 R     0 18653 18625  0  77   0 -  1102 -      pts/1    00:00:00 ps

 

由於 PRI 是核心動態調整的,我們使用者也無權去幹涉 PRI !那如果你想要調整程式的優先運行序時,就得要透過 Nice 值了!Nice 值就是上表的 NI 啦!一般來說, PRI 與 NI 的相關性如下:

PRI(new) = PRI(old) + nice

不過你要特別留意到,如果原本的 PRI 是 50 ,並不是我們給予一個 nice = 5 ,就會讓 PRI 變成 55 喔! 因為 PRI 是系統『動態』決定的,所以,雖然 nice 值是可以影響 PRI ,不過, 最終的 PRI 仍是要經過系統分析後才會決定的。另外, nice 值是有正負的喔,而既然 PRI 越小越早被運行, 所以,當 nice 值為負值時,那麼該程式就會降低 PRI 值,亦即會變的較優先被處理。此外,你必須要留意到:

  • nice 值可調整的範圍為 -20 ~ 19 ;
  • root 可隨意調整自己或他人程式的 Nice 值,且範圍為 -20 ~ 19 ;
  • 一般使用者僅可調整自己程式的 Nice 值,且範圍僅為 0 ~ 19 (避免一般使用者搶佔系統資源);
  • 一般使用者僅可將 nice 值越調越高,例如本來 nice 為 5 ,則未來僅能調整到大於 5;

這也就是說,要調整某個程式的優先運行序,就是『調整該程式的 nice 值』啦!那麼如何給予某個程式 nice 值呢?有兩種方式,分別是:

  • 一開始運行程式就立即給予一個特定的 nice 值:用 nice 命令;
  • 調整某個已經存在的 PID 的 nice 值:用 renice 命令。

 

nice :新啟動並執行命令即給予新的 nice 值
[root@www ~]# nice [-n 數字] command選項與參數:-n  :後面接一個數值,數值的範圍 -20 ~ 19。範例一:用 root 給一個 nice 值為 -5 ,用於運行 vi ,並觀察該程式![root@www ~]# nice -n -5 vi &[1] 18676[root@www ~]# ps -lF S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD4 S     0 18625 18623  0  75   0 -  1514 wait   pts/1    00:00:00 bash4 T     0 18676 18625  0  72  -5 -  1242 finish pts/1    00:00:00 vi4 R     0 18678 18625  0  77   0 -  1101 -      pts/1    00:00:00 ps# 原本的 bash PRI 為 75  ,所以 vi 預設應為 75。不過由於給予 nice  為 -5 ,# 因此 vi 的 PRI 降低了!但並非降低到 70 ,因為核心還會動態調整![root@www ~]# kill -9 %1 <==測試完畢將 vi 關閉

就如同前面說的, nice 是用來調整程式的運行優先順序!這裡只是一個啟動並執行範例罷了! 通常什麼時候要將 nice 值調大呢?舉例來說,系統的背景工作中, 某些比較不重要的程式之進行:例如備份工作!由於備份工作相當的耗系統資源, 這個時候就可以將備份的命令之 nice 值調大一些,可以使系統的資源分派的更為公平!

 

renice :已存在程式的 nice 重新調整
[root@www ~]# renice [number] PID選項與參數:PID :某個程式的 ID 啊!範例一:找出自己的 bash PID ,並將該 PID 的 nice 調整到 10[root@www ~]# ps -lF S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD4 S     0 18625 18623  0  75   0 -  1514 wait   pts/1    00:00:00 bash4 R     0 18712 18625  0  77   0 -  1102 -      pts/1    00:00:00 ps[root@www ~]# renice 10 1862518625: old priority 0, new priority 10[root@www ~]# ps -lF S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD4 S     0 18625 18623  0  85  10 -  1514 wait   pts/1    00:00:00 bash4 R     0 18715 18625  0  87  10 -  1102 -      pts/1    00:00:00 ps

如果要調整的是已經存在的某個程式的話,那麼就得要使用 renice 了。使用的方法很簡單, renice 後面接上數值及 PID 即可。因為後面接的是 PID ,所以你務必要以 ps 或者其他程式觀察的命令去找出 PID 才行啊!

由上面這個範例當中我們也看的出來,雖然修改的是 bash 那個程式,但是該程式所觸發的 ps 命令當中的 nice 也會繼承而為 10 喔!瞭解了吧!整個 nice 值是可以在父程式 --> 子程式之間傳遞的呢! 另外,除了 renice 之外,其實那個 top 同樣的也是可以調整 nice 值的!

 

轉自 http://vbird.dic.ksu.edu.tw/linux_basic/0440processcontrol_3.php#dmesg

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.