由核心決定:排程策略,排程優先順序
nice值決定優先順序,nice越低優先順序越高
nice的範圍在 [ 0 , 2* nzero - 1 ]
nzero是系統預設的nice值
只有特權程序允許提高排程許可權
關於nzero:定義nzero的標頭檔案因系統而異,除了標頭檔案,linux3.2 可以通過非標準的sysconf引數 _sc_nzero 來訪問nzero的值
獲得或修改程序的nice值(程序使用nice(2)制會修改自己的nice值)
nice(2)
setpriority(2)
getpriority(2)
eg:更改nice值的效果
#include #include #include #if defined(macos)
#include #elif defined(solaris)
#include #elif defined(bsd)
#include #endif
void checktime(char *ptr);
#define handle_error(msg) \
do while (0)
unsigned long long count;
struct timeval end;
int main(int argc, char *argv)
else
while(1)
exit(0);
}void checktime(char *ptr)
}
執行測試:
./a.out
./a.out 20
可以發現排程程式如何在不同nice值的程序之間進行cpu共享
unix維護三個程序時間:
1. 時鐘時間(牆上時鐘時間)
2. 使用者cpu時間
3. 系統cpu時間
(2 + 3 和稱為cpu時間)
使用times(2)獲取程序自己以及終止子程序的三個程序時間
times的引數buf指向 tms 結構, 定義如下:
struct tms;
分別代表:使用者cpu時間,系統cpu時間,子程序的使用者cpu時間,子程序的系統cpu時間
tms結構沒有包含程序的時鐘時間(牆上時鐘時間),times(2)將時鐘時間作為返回值返回,它是相對過去度量的。
因此我們計算的時候可以呼叫兩次求差值,求得時鐘時間。(長時間執行的程式 時鐘時間可能溢位)
所有由此函式返回的 clock_t 值,都用 _sc_clk_tck (由 sysconf 函式返回的每秒時鐘滴答數)轉換成秒數。
#include #include #include "pr_exit.h"
static void do_cmd(char *cmd);
static void pr_times(clock_t real, struct tms *tmsstart, struct tms *tmsend);
int main(int argc, char *argv)
static void do_cmd(char *cmd)
static void pr_times(clock_t real, struct tms *tmsstart, struct tms *tmsend)
測試:./a.out "sleep 10" "date" "man bash > /dev/null"
可以發現,因為用的是system(3)執行程程式(system實際用的是fork和exec),在命令執行時間足夠長的時候子程式cpu時間出現計數。
利用 _sc_clk_tck引數到 sysconf 取得時鐘滴答數,將時間轉換為秒為單位
可以用中定義的巨集來進行測試,提取結果
pr_exit.h 檔案如下:
#include #include /*
* judge the status return from wait(2) or waitpid(2)
*/void pr_exit(int status)
程序排程 時間片輪轉
include include include typedef struct table node node creat void p2 next null return head 輸出函式 void print node head 對程序表按優先數從大到小排序 node insert node h...
程序排程演算法(程序排程策略)
程序排程演算法 排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法。一 先來先服務和短作業 程序 優先排程演算法 1.先來先服務排程演算法。先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業 程序 而不利於短...
程序排程三 程序排程介紹
一 程序排程介紹 1 程序排程的產生 程序從使用資源方面可以分為如下兩類,不管是i o還是cpu受限類的程序,cpu都希望再盡可能短的時間 完成更多的工作,但另一方面,又希望盡可能的減少資源 i o或cpu 的消耗,這兩則之間存在矛盾,所以程序 的排程管理就是來協調兩者之間的衝突。型別別稱 描述示例...