程序是CPU的執行機關, 程序間的配合是否完美在一定程度上也就決定了該CPU的運作速度。那程序間是如何對CPU資源進行一個調用的呢?又是如何去取得CPU的使用權?這就得談到程序得優先級和排程問題了。
Linux排程程序使用CPU得預設模型是循環時間共享,就是每個程序通路CPU得時間是一緻得,并且是循環輪流使用的, 而通路CPU這段時間稱之為時間片或者量子。在這種模式種,程序無法直接控制何時使用CPU和CPU的使用時間,每個程序使用CPU要麼時間片被用光或者自己放棄CPU(睡眠,阻塞,退出等)。
Linux中關于程序有一個特征值(nice值),每個程序都有一個nice值(-20高優先級~19低優先級),預設為0, 這個值能夠間接的影響到核心的排程算法。
注意:使用fork()建立子程序時會繼承父程序的nice值并且會在exec()中得到保持。
程序間得nice值不是嚴格按照nice值得層次進行得,nice值是一個權重因素,它隻是會導緻核心排程器傾向于排程擁有高優先級得程序。
擷取和修改優先級:
#include<sys/resource.h>
int getpriority(int which, id_t who); //傳回nice值 (為了避免傳回一個負值,範圍調整為1~40, unice = 20 - knice)
int setpriority(int which, id_t who, int prio); //傳回0 成功 -1 失敗
參數:
who : 程序ID
which: 有三個參數-->PRIO_PROCESS:操作程序ID為who的程序, 如果who為0, 那麼使用調用者的程序ID;
PRIO_PROP:操作組ID為who的程序組中的所有成員。who為0, 則使用調用者的程序組。
PRIO_USER:操作所有真實使用者ID為WHO的程序。
prio: 設定的nice值(不會超過邊界值, 超過按邊界值算)