最近研發的產品出了點小bug,最後查到根本原因是,其中乙個程序a使用基於fifo的實時程序優先順序,而另乙個程序b是使用普通排程的程序優先順序,而a和b兩個程序是互相通訊的,程序b會被餓死,而程序a也不能正常工作。分析問題過程中查詢了一些資料,以下記錄一些特別注意的點。
(1)sched_other,分時排程策略
(2)sched_fifo,實時排程策略,先到先服務
(3)sched_rr,實時排程策略,時間片輪轉
前面遇到bug的程序a就是使用sched_fifo排程策略的,而程序b沒有經過設定,預設是sched_other。
查詢資料的時候發現有個鏈結問,為什麼設定fifo策略,但和預想的不一致。鏈結在此
從**看是因為設定的方法不對,直接上**,可以設定程序和執行緒的排程策略
1 #include 2 #include 3 #include 4 #include 5可以通過top命令檢視程序是否成功,如果為"rt"表示是實時程序了。如果不成功,可能是許可權問題,需要roo許可權。67 pid_t pid =getpid();
8struct
sched_param param;
9 param.sched_priority = sched_get_priority_max(sched_fifo); //
也可用sched_rr
10 sched_setscheduler(pid, sched_rr, ¶m); //
設定當前程序
11 pthread_setschedparam(pthread_self(), sched_fifo, ¶m); //
設定當前執行緒
如果不調整排程策略,也可以提公升程序優先順序,使得程序得到更多的cpu,特別是互動式程式,使用者體檢更好。**很簡單,只需要呼叫nice(int n)函式即可。n的有效範圍是-20~19,數值越小表示優先順序越高。具體內容不在此複製貼上,還是看《深入理解linux核心》比較靠譜。
設定程序的優先順序
系統中執行的每個程序都有乙個優先順序 亦稱 nice 值 其範圍從 20 最高優先順序 到 19 最低優先順序 預設情況下,程序的優先順序是 0 基本 排程優先順序 優先順序比較大的程序 nice 值比較小,最低到 20 相對優先順序比較小的程序 直到 19 將比較頻繁地被排程執行,因此就擁有更多的...
設定程序的優先順序
系統中執行的每個程序都有乙個優先順序 亦稱 nice 值 其範圍從 20 最高優先順序 到 19 最低優先順序 預設情況下,程序的優先順序是 0 基本 排程優先順序 優先順序比較大的程序 nice 值比較小,最低到 20 相對優先順序比較小的程序 直到 19 將比較頻繁地被排程執行,因此就擁有更多的...
Linux程序優先順序和調整優先順序
linux 是乙個多使用者 多工的作業系統,系統中通常執行著非常多的程序。但是 cpu 在乙個時鐘週期內只能運算一條指令 現在的 cpu 採用了多執行緒 多核心技術,所以在乙個時鐘週期內可以運算多條指令。但是同時運算的指令數也遠遠小於系統中的程序總數 那問題來了 誰應該先運算,誰應該後運算呢?這就需...